<?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>76343</bug_id>
          
          <creation_ts>2012-01-15 08:43:25 -0800</creation_ts>
          <short_desc>[GTK] [WK2] Implement the policy client</short_desc>
          <delta_ts>2012-02-08 03:50:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76344</dependson>
    
    <dependson>76755</dependson>
          <blocked>76789</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>kling</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>536260</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-15 08:43:25 -0800</bug_when>
    <thetext>The policy client is required to port devhelp and yelp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536278</commentid>
    <comment_count>1</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-01-15 11:42:58 -0800</bug_when>
    <thetext>Committed r105031: &lt;http://trac.webkit.org/changeset/105031&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536302</commentid>
    <comment_count>2</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2012-01-15 16:38:35 -0800</bug_when>
    <thetext>I&apos;m pretty sure Andreas referenced the wrong bug.  Reopening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536303</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-01-15 16:40:37 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I&apos;m pretty sure Andreas referenced the wrong bug.  Reopening.

Double-duh! Sorry about that :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540165</commentid>
    <comment_count>4</comment_count>
      <attachid>123455</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-21 13:35:48 -0800</bug_when>
    <thetext>Created attachment 123455
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540167</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-21 13:40:17 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540426</commentid>
    <comment_count>6</comment_count>
      <attachid>123455</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-23 01:16:17 -0800</bug_when>
    <thetext>Comment on attachment 123455
Patch

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

Great work, and great documentation. Thanks!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:24
&gt; +#include &quot;WebKitPolicyDecisionPrivate.h&quot;

This is not needed here, it just contains webkitPolicyDecisionSetListener

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:28
&gt; +#include &lt;WebKit2/WKAPICast.h&gt;

Isn&apos;t this already included by WebKitPrivate.h?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:160
&gt; +                                    g_param_spec_uint(&quot;modifiers&quot;,
&gt; +                                                      _(&quot;Mouse event modifiers&quot;),
&gt; +                                                      _(&quot;The modifiers active if this decision was triggered by a mouse event&quot;),
&gt; +                                                      0, G_MAXUINT, 0,
&gt; +                                                      WEBKIT_PARAM_READABLE));

Why not using a flags param spec with GDK_TYPE_MODIFIER_TYPE?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:177
&gt; +     * WebKitNavigationPolicyDecision:frame-name:

Maybe this could be just target, I would avoid using the name Frame since we are not exposing frames in the API for now.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:181
&gt; +     * In all other cases, this value will be null.

Use %NULL

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:192
&gt; +/*

API docs should start with double *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:206
&gt; +/*

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:220
&gt; +/*

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:234
&gt; +/*

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:240
&gt; + * Returns: The URI request that is associated with this navigation

Mark this as transfer none

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:248
&gt; +/*

Double * here

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:249
&gt; + * webkit_navigation_policy_decision_get_frame_name:

what about get_link_target? this way we also make it clear that this is was triggered by a link click.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:254
&gt; + * Returns: The value of the target attribute if this navigation was triggered by a link click

I would mention this returns NULL otherwise

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:266
&gt; +COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_NAVIGATION_TYPE_LINK_CLICKED, kWKFrameNavigationTypeLinkClicked);
&gt; +COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_NAVIGATION_TYPE_FORM_SUBMITTED, kWKFrameNavigationTypeFormSubmitted);
&gt; +COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_NAVIGATION_TYPE_BACK_FORWARD, kWKFrameNavigationTypeBackForward);
&gt; +COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_NAVIGATION_TYPE_FORM_RESUBMITTED, kWKFrameNavigationTypeFormResubmitted);
&gt; +COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_NAVIGATION_TYPE_OTHER, kWKFrameNavigationTypeOther);

RELOAD is missing here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:276
&gt; +        return WEBKIT_MOUSE_BUTTON_LEFT;

This should be middle, not left.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:305
&gt; +    decision-&gt;priv-&gt;navigationType = static_cast&lt;WebKitNavigationType&gt;(navigationType);
&gt; +    decision-&gt;priv-&gt;mouseButton = wkEventMouseButtonToWebKitMouseButton(mouseButton);
&gt; +    decision-&gt;priv-&gt;modifiers = wkEventModifiersToUnsigned(modifiers);
&gt; +    decision-&gt;priv-&gt;request = adoptGRef(webkitURIRequestCreateForResourceRequest(toImpl(request)-&gt;resourceRequest()));
&gt; +    decision-&gt;priv-&gt;frameName = frameName;

I think this should all be construct only properties.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h:44
&gt; + **/

No need for double * here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h:64
&gt; + * Enum values used to denote the various mouse buttons that triggered
&gt; + * events within WebKit. This enum is designed to match up to the button
&gt; + * values used in GDK events, except for @WEBKIT_MOUSE_BUTTON_NONE which
&gt; + * has no equivalent in GDK.

I would just the GDK values in public API. Internally I would use this enum, and add a method to the API to check whether the decision is for an action triggered by a mouse button that simply checks whether button is none.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h:24
&gt; +#include &lt;WebKitPrivate.h&gt;

Use the quoted form for header files of WebKit2

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp:29
&gt; +#include &lt;WebKit2/WKAPICast.h&gt;

Isn&apos;t this already included by WebKitPrivate.h?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp:24
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;WebKitPolicyDecision.h&quot;
&gt; +
&gt; +#include &quot;WebKitPrivate.h&quot;
&gt; +#include &lt;WebKit2/WKAPICast.h&gt;

This should include PolicyDecisionPrivate for webkitPolicyDecisionSetListener

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp:46
&gt; +    WKFramePolicyListenerRef listener;

Do we know the lifetime of the listener? maybe we could use WKRetainPtr to make sure

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp:63
&gt; +    // This is the default choice for all policy decisions in WebPageProxy.cpp.
&gt; +    if (!priv-&gt;madePolicyDecision)
&gt; +        WKFramePolicyListenerUse(priv-&gt;listener);

Why do we need to call this on finalize?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp:71
&gt; +     WEBKIT_POLICY_DECISION(decision)-&gt;priv-&gt;listener = listener;

You don&apos;t need the cast.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:569
&gt; +     * Returns: %TRUE to stop other handlers from being invoked for the event.
&gt; +     *   %FALSE to propagate the event further.

Move this to the end of the block comment

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:578
&gt; +     * gboolean

static gboolean

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:606
&gt; +     * It is possible to make policy decision asynchronous, by simply calling g_object_ref()
&gt; +     * on the @decision argument. If the last reference is removed on a #WebKitPolicyDecision
&gt; +     * and no decision has been made explicitly, webkit_policy_decision_use() will be the
&gt; +     * default policy decision.

Now I understand why are using calling Use in the decision finalize(). What&apos;s the use case of an asnyc policy decision? I think we should just add a default impl here that calls _use().

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:47
&gt; + *   webkit_policy_decision_use or webkit_policy_decision_ignore. This

webkit_policy_decision_use() or webkit_policy_decision_ignore()

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:52
&gt; + *   webkit_policy_decision_ignore. This type of policy decision is always

webkit_policy_decision_ignore()

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:53
&gt; + *   a #WebKitNavigationPolicyDecision. This signal is useful for implementing

What signal?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:63
&gt; + *   a #WebKitResponsePolicyDecision. This is signal is useful for forcing

What signal?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp:161
&gt; +    g_object_set(webkit_web_view_get_settings(test-&gt;m_webView), &quot;javascript-can-open-windows-automatically&quot;, TRUE, NULL);

It&apos;s probably clear to use webkit_settings_set_javascript_can_open_windows_automatically()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541771</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-24 15:31:22 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 123455 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123455&amp;action=review
&gt; 
&gt; Great work, and great documentation. Thanks!

Thanks for the incredibly thorough review!

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:24
&gt; &gt; +#include &quot;WebKitPolicyDecisionPrivate.h&quot;
&gt; 
&gt; This is not needed here, it just contains webkitPolicyDecisionSetListener

It&apos;s actually used in this file. I confirmed that removing it causes a compilation error.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:28
&gt; &gt; +#include &lt;WebKit2/WKAPICast.h&gt;
&gt; Isn&apos;t this already included by WebKitPrivate.h?

Yep! It wasn&apos;t when I original wrote this bit.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:160
&gt; &gt; +                                    g_param_spec_uint(&quot;modifiers&quot;,
&gt; &gt; +                                                      _(&quot;Mouse event modifiers&quot;),
&gt; &gt; +                                                      _(&quot;The modifiers active if this decision was triggered by a mouse event&quot;),
&gt; &gt; +                                                      0, G_MAXUINT, 0,
&gt; &gt; +                                                      WEBKIT_PARAM_READABLE));
&gt; Why not using a flags param spec with GDK_TYPE_MODIFIER_TYPE?

The modifiers mask is a bitmask (unsigned) and not a GdkModifier.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:177
&gt; &gt; +     * WebKitNavigationPolicyDecision:frame-name:
&gt; 
&gt; Maybe this could be just target, I would avoid using the name Frame since we are not exposing frames in the API for now.

I&apos;m not sure the API presents any guarantee that a frame names necessarily means this policy decision is from clicking on links. Both the WebCore and WebKit2 API use this name, so I don&apos;t think we should deviate here. I&apos;ve fixed the documentation to give the target attribute as an example of one instance when there is a frame name instead of the only instance.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:181
&gt; &gt; +     * In all other cases, this value will be null.
&gt; 
&gt; Use %NULL

Fixed!

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:192
&gt; &gt; +/*
&gt; 
&gt; API docs should start with double *

I think I fixed all these now.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:240
&gt; &gt; + * Returns: The URI request that is associated with this navigation
&gt; 
&gt; Mark this as transfer none

Doh! I meant to do this before posting the first patch. Thanks for spotting it.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:249
&gt; &gt; + * webkit_navigation_policy_decision_get_frame_name:
&gt; 
&gt; what about get_link_target? this way we also make it clear that this is was triggered by a link click.

See my comment above. I&apos;m don&apos;t think it&apos;s entirely correct to be that specific here.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:254
&gt; &gt; + * Returns: The value of the target attribute if this navigation was triggered by a link click
&gt; 
&gt; I would mention this returns NULL otherwise

Fixed!

&gt; RELOAD is missing here.

Ack. Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:276
&gt; &gt; +        return WEBKIT_MOUSE_BUTTON_LEFT;
&gt; 
&gt; This should be middle, not left.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:305
&gt; &gt; +    decision-&gt;priv-&gt;navigationType = static_cast&lt;WebKitNavigationType&gt;(navigationType);
&gt; &gt; +    decision-&gt;priv-&gt;mouseButton = wkEventMouseButtonToWebKitMouseButton(mouseButton);
&gt; &gt; +    decision-&gt;priv-&gt;modifiers = wkEventModifiersToUnsigned(modifiers);
&gt; &gt; +    decision-&gt;priv-&gt;request = adoptGRef(webkitURIRequestCreateForResourceRequest(toImpl(request)-&gt;resourceRequest()));
&gt; &gt; +    decision-&gt;priv-&gt;frameName = frameName;
&gt; 
&gt; I think this should all be construct only properties.

I didn&apos;t take this suggestion because I think making these construct-only send the message that it&apos;s fine to construct this object with g_object_new. It also adds a lot of boilerplate, to accomplish the same behavior. If we want to add an external construction site, we can make them construct-only.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h:44
&gt; &gt; + **/
&gt; 
&gt; No need for double * here.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h:64
&gt; &gt; + * Enum values used to denote the various mouse buttons that triggered
&gt; &gt; + * events within WebKit. This enum is designed to match up to the button
&gt; &gt; + * values used in GDK events, except for @WEBKIT_MOUSE_BUTTON_NONE which
&gt; &gt; + * has no equivalent in GDK.
&gt; 
&gt; I would just the GDK values in public API. Internally I would use this enum, and add a method to the API to check whether the decision is for an action triggered by a mouse button that simply checks whether button is none.

GDK doesn&apos;t really have any values published in the documentation. The mapping of buttons to integers seems, at best, underdocumented in GDK.  Making an enum here removes all ambiguity. If GDK adds such an enum in the future, we can switch to using it without worrying about breaking API/ABI.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h:24
&gt; &gt; +#include &lt;WebKitPrivate.h&gt;
&gt; 
&gt; Use the quoted form for header files of WebKit2

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp:29
&gt; &gt; +#include &lt;WebKit2/WKAPICast.h&gt;
&gt; 
&gt; Isn&apos;t this already included by WebKitPrivate.h?

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp:24
&gt; &gt; +#include &quot;config.h&quot;
&gt; &gt; +#include &quot;WebKitPolicyDecision.h&quot;
&gt; &gt; +
&gt; &gt; +#include &quot;WebKitPrivate.h&quot;
&gt; &gt; +#include &lt;WebKit2/WKAPICast.h&gt;
&gt; 
&gt; This should include PolicyDecisionPrivate for webkitPolicyDecisionSetListener

It&apos;s not entirely necessary, but it will prevent making the signatures clash by accident, so I&apos;ve included it.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp:46
&gt; &gt; +    WKFramePolicyListenerRef listener;
&gt; 
&gt; Do we know the lifetime of the listener? maybe we could use WKRetainPtr to make sure

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp:71
&gt; &gt; +     WEBKIT_POLICY_DECISION(decision)-&gt;priv-&gt;listener = listener;
&gt; 
&gt; You don&apos;t need the cast.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:569
&gt; &gt; +     * Returns: %TRUE to stop other handlers from being invoked for the event.
&gt; &gt; +     *   %FALSE to propagate the event further.
&gt; 
&gt; Move this to the end of the block comment

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:578
&gt; &gt; +     * gboolean
&gt; 
&gt; static gboolean

Fixed.

&gt; Now I understand why are using calling Use in the decision finalize(). What&apos;s the use case of an asnyc policy decision? I think we should just add a default impl here that calls _use().

We had a pretty thorough discussion via Jabber. I hope I convinced you this is a very important feature.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:47
&gt; &gt; + *   webkit_policy_decision_use or webkit_policy_decision_ignore. This
&gt; 
&gt; webkit_policy_decision_use() or webkit_policy_decision_ignore()
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:52
&gt; &gt; + *   webkit_policy_decision_ignore. This type of policy decision is always
&gt; 
&gt; webkit_policy_decision_ignore()

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:53
&gt; &gt; + *   a #WebKitNavigationPolicyDecision. This signal is useful for implementing
&gt; 
&gt; What signal?

Removed all references to signals here. This was left over from when each decision type was a signal.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp:161
&gt; &gt; +    g_object_set(webkit_web_view_get_settings(test-&gt;m_webView), &quot;javascript-can-open-windows-automatically&quot;, TRUE, NULL);
&gt; 
&gt; It&apos;s probably clear to use webkit_settings_set_javascript_can_open_windows_automatically()

Okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541782</commentid>
    <comment_count>8</comment_count>
      <attachid>123828</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-24 15:41:21 -0800</bug_when>
    <thetext>Created attachment 123828
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542219</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-25 06:13:58 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:24
&gt; &gt; &gt; +#include &quot;WebKitPolicyDecisionPrivate.h&quot;
&gt; &gt; 
&gt; &gt; This is not needed here, it just contains webkitPolicyDecisionSetListener
&gt; 
&gt; It&apos;s actually used in this file. I confirmed that removing it causes a compilation error.

right, sorry.

&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:160
&gt; &gt; &gt; +                                    g_param_spec_uint(&quot;modifiers&quot;,
&gt; &gt; &gt; +                                                      _(&quot;Mouse event modifiers&quot;),
&gt; &gt; &gt; +                                                      _(&quot;The modifiers active if this decision was triggered by a mouse event&quot;),
&gt; &gt; &gt; +                                                      0, G_MAXUINT, 0,
&gt; &gt; &gt; +                                                      WEBKIT_PARAM_READABLE));
&gt; &gt; Why not using a flags param spec with GDK_TYPE_MODIFIER_TYPE?
&gt; 
&gt; The modifiers mask is a bitmask (unsigned) and not a GdkModifier.

I always forget this is not possible in C++.

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:305
&gt; &gt; &gt; +    decision-&gt;priv-&gt;navigationType = static_cast&lt;WebKitNavigationType&gt;(navigationType);
&gt; &gt; &gt; +    decision-&gt;priv-&gt;mouseButton = wkEventMouseButtonToWebKitMouseButton(mouseButton);
&gt; &gt; &gt; +    decision-&gt;priv-&gt;modifiers = wkEventModifiersToUnsigned(modifiers);
&gt; &gt; &gt; +    decision-&gt;priv-&gt;request = adoptGRef(webkitURIRequestCreateForResourceRequest(toImpl(request)-&gt;resourceRequest()));
&gt; &gt; &gt; +    decision-&gt;priv-&gt;frameName = frameName;
&gt; &gt; 
&gt; &gt; I think this should all be construct only properties.
&gt; 
&gt; I didn&apos;t take this suggestion because I think making these construct-only send the message that it&apos;s fine to construct this object with g_object_new. 

I don&apos;t see why, you can still use g_object_new even if properties are not construct only.

&gt; It also adds a lot of boilerplate, to accomplish the same behavior. If we want to add an external construction site, we can make them construct-only.

It&apos;s just a SetProperty method, I don&apos;t think that&apos;s a lot of boilerplate.
 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h:64
&gt; &gt; &gt; + * Enum values used to denote the various mouse buttons that triggered
&gt; &gt; &gt; + * events within WebKit. This enum is designed to match up to the button
&gt; &gt; &gt; + * values used in GDK events, except for @WEBKIT_MOUSE_BUTTON_NONE which
&gt; &gt; &gt; + * has no equivalent in GDK.
&gt; &gt; 
&gt; &gt; I would just the GDK values in public API. Internally I would use this enum, and add a method to the API to check whether the decision is for an action triggered by a mouse button that simply checks whether button is none.
&gt; 
&gt; GDK doesn&apos;t really have any values published in the documentation. The mapping of buttons to integers seems, at best, underdocumented in GDK.  Making an enum here removes all ambiguity. If GDK adds such an enum in the future, we can switch to using it without worrying about breaking API/ABI.

We would break the API/ABI if we remove the enum, or we would end up with a deprecated enum. Also I don&apos;t think the policy client code is the right place for that enum. I&apos;m already working on a patch for GDK so that we don&apos;t need this enum. The patch will just add a #define, so we can simply use guint for button numbers.

&gt; &gt; Now I understand why are using calling Use in the decision finalize(). What&apos;s the use case of an asnyc policy decision? I think we should just add a default impl here that calls _use().
&gt; 
&gt; We had a pretty thorough discussion via Jabber. I hope I convinced you this is a very important feature.

Yes, I&apos;m convinced the feature is important, but I&apos;m not so convinced that the approach of calling g_object_ref means I want to take the decision later, is clear enough even if it&apos;s documented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542289</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-25 08:18:30 -0800</bug_when>
    <thetext>(In reply to comment #9)

&gt; &gt; We had a pretty thorough discussion via Jabber. I hope I convinced you this is a very important feature.
&gt; 
&gt; Yes, I&apos;m convinced the feature is important, but I&apos;m not so convinced that the approach of calling g_object_ref means I want to take the decision later, is clear enough even if it&apos;s documented.

For what it&apos;s worth, this was the behavior in WebKit1 as well and no one ever complained or asked about it on the channel in as long as I can remember. There are alternatives though:

1. Call webkit_policy_use in the default signal handler. From the user&apos;s point of view this would be exactly the same though. They&apos;d block the signal handler as well as calling g_object_ref/g_object_unref on the decision.
2. We could wrap g_object_ref/g_object_unref in some friendler methods. I don&apos;t mind that, but this approch doesn&apos;t prevent it either.

The nice thing about this design is that it enforces an important invariant: the WebKitPolicyListener never dies when a policy decision has not been made yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542317</commentid>
    <comment_count>11</comment_count>
      <attachid>123828</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-25 08:53:02 -0800</bug_when>
    <thetext>Comment on attachment 123828
Patch

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

Looks good! I would just remove the button enum and use guint as we already talked.

&gt; Source/WebKit2/GNUmakefile.am:540
&gt; +	Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp \
&gt; +	Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClientPrivate.h \

PolicyClient is already private API, we use Private.h for private declaration of public API, so in this case we could just use WebKitPolicyClient.h like the other clients. I thought you had forgotten to add the file the first time saw it was missing in the makefile.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp:27
&gt; +#include &quot;WebKitWebView.h&quot;
&gt; +#include &quot;WebKitWebViewPrivate.h&quot;

WebKitWebViewPrivate.h already includes WebKitWebView.h. As a general rule FooPrivate.h always includes Foo.h

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp:62
&gt; +void attachPolicyClientToPage(WKPageRef page)

Other clients use the View instead of the page, and pass the view as clientInfo to the callbacks so that we don&apos;t need to get it from the page.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClientPrivate.h:22
&gt; +#if !defined(__WEBKIT2_H_INSIDE__) &amp;&amp; !defined(WEBKIT2_COMPILATION)
&gt; +#error &quot;Only &lt;webkit2/webkit2.h&gt; can be included directly.&quot;
&gt; +#endif

This is only for public headers.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:74
&gt; +typedef enum {
&gt; +    WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION,
&gt; +    WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION,
&gt; +    WEBKIT_POLICY_DECISION_TYPE_RESPONSE,
&gt; +} WebKitPolicyDecisionType;

Shouldn&apos;t this be in WebKitPolicyDecision.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542322</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-25 09:02:41 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; 
&gt; &gt; &gt; We had a pretty thorough discussion via Jabber. I hope I convinced you this is a very important feature.
&gt; &gt; 
&gt; &gt; Yes, I&apos;m convinced the feature is important, but I&apos;m not so convinced that the approach of calling g_object_ref means I want to take the decision later, is clear enough even if it&apos;s documented.
&gt; 
&gt; For what it&apos;s worth, this was the behavior in WebKit1 as well and no one ever complained or asked about it on the channel in as long as I can remember.

That might be because nobody uses the async alternative. 

&gt; There are alternatives though:
&gt; 
&gt; 1. Call webkit_policy_use in the default signal handler. From the user&apos;s point of view this would be exactly the same though. They&apos;d block the signal handler as well as calling g_object_ref/g_object_unref on the decision.

In general, returning TRUE means that you have handled the signal and you don&apos;t want any other handlers to be invoked. In this case it doesn&apos;t matter whether you return TRUE or FALSE if you takes a reference. What I would expect is that if I return FALSE, the default handler ends up handling the default decision. If I return TRUE is because I want to handle the decision, so I can just do it and return or postpone it taking a reference of the decision object and returning TRUE.

&gt; 2. We could wrap g_object_ref/g_object_unref in some friendler methods. I don&apos;t mind that, but this approch doesn&apos;t prevent it either.

I think It&apos;s more obvious that I have to take a reference of the decision object if I say somehow (returning TRUE) that I want to handle the decision.

&gt; The nice thing about this design is that it enforces an important invariant: the WebKitPolicyListener never dies when a policy decision has not been made yet.

We can leave the _use() in the finalize, because it&apos;s protected by the decisionMade variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542507</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-25 11:56:21 -0800</bug_when>
    <thetext>(In reply to comment #11)

&gt; &gt; Source/WebKit2/GNUmakefile.am:540
&gt; &gt; +	Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp \
&gt; &gt; +	Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClientPrivate.h \
&gt; 
&gt; PolicyClient is already private API, we use Private.h for private declaration of public API, so in this case we could just use WebKitPolicyClient.h like the other clients. I thought you had forgotten to add the file the first time saw it was missing in the makefile.

I&apos;m not sure I entirely agree with this approach, but I don&apos;t see any harm in it when we can just ignore *Client* in the gtkdoc script.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp:27
&gt; &gt; +#include &quot;WebKitWebView.h&quot;
&gt; &gt; +#include &quot;WebKitWebViewPrivate.h&quot;
&gt; 
&gt; WebKitWebViewPrivate.h already includes WebKitWebView.h. As a general rule FooPrivate.h always includes Foo.h

Okay. Perhaps we should just make WebKitPrivate.h include everything. It would clean up the header list in a lot of the API.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp:62
&gt; &gt; +void attachPolicyClientToPage(WKPageRef page)
&gt; 
&gt; Other clients use the View instead of the page, and pass the view as clientInfo to the callbacks so that we don&apos;t need to get it from the page.

Fixed. This change was made recently. :)

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClientPrivate.h:22
&gt; &gt; +#if !defined(__WEBKIT2_H_INSIDE__) &amp;&amp; !defined(WEBKIT2_COMPILATION)
&gt; &gt; +#error &quot;Only &lt;webkit2/webkit2.h&gt; can be included directly.&quot;
&gt; &gt; +#endif
&gt; 
&gt; This is only for public headers.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:74
&gt; &gt; +typedef enum {
&gt; &gt; +    WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION,
&gt; &gt; +    WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION,
&gt; &gt; +    WEBKIT_POLICY_DECISION_TYPE_RESPONSE,
&gt; &gt; +} WebKitPolicyDecisionType;
&gt; 
&gt; Shouldn&apos;t this be in WebKitPolicyDecision.h?

It&apos;s only used in WebKitWebView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542508</commentid>
    <comment_count>14</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-25 11:58:05 -0800</bug_when>
    <thetext>(In reply to comment #12)

&gt; In general, returning TRUE means that you have handled the signal and you don&apos;t want any other handlers to be invoked. In this case it doesn&apos;t matter whether you return TRUE or FALSE if you takes a reference. What I would expect is that if I return FALSE, the default handler ends up handling the default decision. If I return TRUE is because I want to handle the decision, so I can just do it and return or postpone it taking a reference of the decision object and returning TRUE.
&gt; 
&gt; &gt; 2. We could wrap g_object_ref/g_object_unref in some friendler methods. I don&apos;t mind that, but this approch doesn&apos;t prevent it either.
&gt; 
&gt; I think It&apos;s more obvious that I have to take a reference of the decision object if I say somehow (returning TRUE) that I want to handle the decision.
&gt; 
&gt; &gt; The nice thing about this design is that it enforces an important invariant: the WebKitPolicyListener never dies when a policy decision has not been made yet.
&gt; 
&gt; We can leave the _use() in the finalize, because it&apos;s protected by the decisionMade variable.

I&apos;m not entirely convinced, but as you say it&apos;s not as common to handle these decisions asynchronously. So since you seem to feel strongly about this, I have taken your suggestion and made it a requirement to return TRUE here to handle decisions aysnchronously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542515</commentid>
    <comment_count>15</comment_count>
      <attachid>123985</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-25 12:03:55 -0800</bug_when>
    <thetext>Created attachment 123985
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542897</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-25 23:27:16 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:74
&gt; &gt; &gt; +typedef enum {
&gt; &gt; &gt; +    WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION,
&gt; &gt; &gt; +    WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION,
&gt; &gt; &gt; +    WEBKIT_POLICY_DECISION_TYPE_RESPONSE,
&gt; &gt; &gt; +} WebKitPolicyDecisionType;
&gt; &gt; 
&gt; &gt; Shouldn&apos;t this be in WebKitPolicyDecision.h?
&gt; 
&gt; It&apos;s only used in WebKitWebView.

It&apos;s used by WebView, but it logically belongs to PolicyDecision. WebKitWebView.h already includes WebKitPolicyDecision.h in your patch to use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542898</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-25 23:29:16 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; 
&gt; &gt; In general, returning TRUE means that you have handled the signal and you don&apos;t want any other handlers to be invoked. In this case it doesn&apos;t matter whether you return TRUE or FALSE if you takes a reference. What I would expect is that if I return FALSE, the default handler ends up handling the default decision. If I return TRUE is because I want to handle the decision, so I can just do it and return or postpone it taking a reference of the decision object and returning TRUE.
&gt; &gt; 
&gt; &gt; &gt; 2. We could wrap g_object_ref/g_object_unref in some friendler methods. I don&apos;t mind that, but this approch doesn&apos;t prevent it either.
&gt; &gt; 
&gt; &gt; I think It&apos;s more obvious that I have to take a reference of the decision object if I say somehow (returning TRUE) that I want to handle the decision.
&gt; &gt; 
&gt; &gt; &gt; The nice thing about this design is that it enforces an important invariant: the WebKitPolicyListener never dies when a policy decision has not been made yet.
&gt; &gt; 
&gt; &gt; We can leave the _use() in the finalize, because it&apos;s protected by the decisionMade variable.
&gt; 
&gt; I&apos;m not entirely convinced, but as you say it&apos;s not as common to handle these decisions asynchronously. So since you seem to feel strongly about this, I have taken your suggestion and made it a requirement to return TRUE here to handle decisions aysnchronously.

Not only to handle decisions aysnchronously, but also to handle then synchronously. Returning TRUE means you have handled the event (signal) and you don&apos;t want any other handlers to be invoked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542932</commentid>
    <comment_count>18</comment_count>
      <attachid>123985</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-26 00:51:03 -0800</bug_when>
    <thetext>Comment on attachment 123985
Patch

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

Looks great, if I were a reviewer this would be a r+, please consider my comments before landing :-)

&gt; Source/WebKit2/GNUmakefile.am:542
&gt; +	Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClientPrivate.h \

This is WebKitPolicyClient.h now

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:74
&gt; +typedef enum {
&gt; +    WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION,
&gt; +    WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION,
&gt; +    WEBKIT_POLICY_DECISION_TYPE_RESPONSE,
&gt; +} WebKitPolicyDecisionType;

I still think this belongs to WebKitPolicyDecision.h

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:51
&gt; +WebKitPolicyDecisionType

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp:88
&gt; +        if (test-&gt;m_respondToPolicyDecisionAsynchronously) {
&gt; +            g_idle_add(reinterpret_cast&lt;GSourceFunc&gt;(respondToPolicyDecisionLater), test);
&gt; +            return FALSE;

You handled the signal here, so you should return TRUE to prevent other handlers to be invoked.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp:92
&gt; +        respondToPolicyDecision(test, decision);
&gt; +        return FALSE;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544039</commentid>
    <comment_count>19</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 07:04:01 -0800</bug_when>
    <thetext>(In reply to comment #18)
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp:88
&gt; &gt; +        if (test-&gt;m_respondToPolicyDecisionAsynchronously) {
&gt; &gt; +            g_idle_add(reinterpret_cast&lt;GSourceFunc&gt;(respondToPolicyDecisionLater), test);
&gt; &gt; +            return FALSE;
&gt; 
&gt; You handled the signal here, so you should return TRUE to prevent other handlers to be invoked.

Actually this shouldn&apos;t matter since only the first policy decision should have any affect. I&apos;ll update the documentation to reflect this fact. Returning FALSE here serves as a test for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544045</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 07:08:17 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp:88
&gt; &gt; &gt; +        if (test-&gt;m_respondToPolicyDecisionAsynchronously) {
&gt; &gt; &gt; +            g_idle_add(reinterpret_cast&lt;GSourceFunc&gt;(respondToPolicyDecisionLater), test);
&gt; &gt; &gt; +            return FALSE;
&gt; &gt; 
&gt; &gt; You handled the signal here, so you should return TRUE to prevent other handlers to be invoked.
&gt; 
&gt; Actually this shouldn&apos;t matter since only the first policy decision should have any affect. I&apos;ll update the documentation to reflect this fact. Returning FALSE here serves as a test for that.

The fact that it doesn&apos;t matter in the end it&apos;s an implementation detail and it doesn&apos;t mena is correct. As I mentioned before, you should return TRUE from callbacks when you handled the thing to prevent other handlers to be invoked, even if the invocation of other handlers doesn&apos;t change anything. That&apos;s how gtk works, and that&apos;s why I&apos;ve insisted in returning TRUE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544046</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 07:10:50 -0800</bug_when>
    <thetext>btw, we are already saying it in the docs:

Returns: %TRUE to stop other handlers from being invoked for the event.
   %FALSE to propagate the event further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544047</commentid>
    <comment_count>22</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 07:14:25 -0800</bug_when>
    <thetext>(In reply to comment #20)

&gt; The fact that it doesn&apos;t matter in the end it&apos;s an implementation detail and it doesn&apos;t mena is correct. As I mentioned before, you should return TRUE from callbacks when you handled the thing to prevent other handlers to be invoked, even if the invocation of other handlers doesn&apos;t change anything. That&apos;s how gtk works, and that&apos;s why I&apos;ve insisted in returning TRUE.

All of the pieces necessary to understand this code will be documented in the API.

1. The default signal handler has no side effects other than choosing the USE policy decision.
2. Only the first policy decision should matter.

Thus this is perfectly reasonable use of the API. It isn&apos;t an implementation detail -- it&apos;s a documented property of the API. Now perhaps the test could be more explicit about what it&apos;s testing, so I&apos;ll make it more obvious via comments and additional tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544055</commentid>
    <comment_count>23</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 07:19:19 -0800</bug_when>
    <thetext>What I&apos;m saying is that you should always return TRUE from the callback when you handle it, no matter whether the default handler affects it or not. If you return FALSE and we change the impl of the default handler in the future, for whatever reason, it might have odd effects in the behaviour. So, you should always return TRUE to make sure other handlers are not invoked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544060</commentid>
    <comment_count>24</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 07:25:51 -0800</bug_when>
    <thetext>Note, that this is not only about the default handler, a callback connected by the user with g_signal_connect_after would be invoked if you return FALSE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544061</commentid>
    <comment_count>25</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 07:27:47 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; What I&apos;m saying is that you should always return TRUE from the callback when you handle it, no matter whether the default handler affects it or not. If you return FALSE and we change the impl of the default handler in the future, for whatever reason, it might have odd effects in the behaviour. So, you should always return TRUE to make sure other handlers are not invoked.

We cannot really change the behavior of the default handler because that would be an API break. I think it should remain consistent, so I&apos;ve encoded the current behavior into the test. Thus it&apos;s important to return FALSE unless handling the decision asynchronously. I fixed the latter case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544062</commentid>
    <comment_count>26</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 07:29:00 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; Note, that this is not only about the default handler, a callback connected by the user with g_signal_connect_after would be invoked if you return FALSE.

This is a detail of some potential embedder and has no bearing on the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544074</commentid>
    <comment_count>27</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 07:41:35 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #23)
&gt; &gt; What I&apos;m saying is that you should always return TRUE from the callback when you handle it, no matter whether the default handler affects it or not. If you return FALSE and we change the impl of the default handler in the future, for whatever reason, it might have odd effects in the behaviour. So, you should always return TRUE to make sure other handlers are not invoked.
&gt; 
&gt; We cannot really change the behavior of the default handler because that would be an API break.

I mean in case the default handler does something else apart from calling_use(). That woulnd&apos;t be an API break.

&gt; I think it should remain consistent, so I&apos;ve encoded the current behavior into the test. Thus it&apos;s important to return FALSE unless handling the decision asynchronously. I fixed the latter case.

No, you have to return FALSE when you are not interested in the decision, so that you leave the action to the other handlers. This is how even propagation works in gtk+, it&apos;s not because I want it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544076</commentid>
    <comment_count>28</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 07:42:16 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #24)
&gt; &gt; Note, that this is not only about the default handler, a callback connected by the user with g_signal_connect_after would be invoked if you return FALSE.
&gt; 
&gt; This is a detail of some potential embedder and has no bearing on the test.

Tests should use the API in the right way even if doing it wrong doesn&apos;t affect the result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544082</commentid>
    <comment_count>29</comment_count>
      <attachid>124317</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 07:57:14 -0800</bug_when>
    <thetext>Created attachment 124317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544092</commentid>
    <comment_count>30</comment_count>
      <attachid>124317</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 08:18:08 -0800</bug_when>
    <thetext>Comment on attachment 124317
Patch

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:588
&gt; +     *         /&lt;!-- --&gt;* Making no decision results in webkit_policy_decision_use(). *&lt;!-- --&gt;/
&gt; +     *         break;

We should return FALSE here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:595
&gt; +     * on the @decision argument and returning %TRUE to block the default signal handler.

to block other handlers

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:74
&gt; +typedef enum {
&gt; +    WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION,
&gt; +    WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION,
&gt; +    WEBKIT_POLICY_DECISION_TYPE_RESPONSE,
&gt; +} WebKitPolicyDecisionType;

I still think this belongs to WebKitPolicyDecision.h, is there any reason why you think it should be defined here in webKitWebView?

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:51
&gt; +WebKitPolicyDecisionType

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544096</commentid>
    <comment_count>31</comment_count>
      <attachid>124317</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 08:29:28 -0800</bug_when>
    <thetext>Comment on attachment 124317
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:588
&gt;&gt; +     *         break;
&gt; 
&gt; We should return FALSE here.

It&apos;s still valid because the default action is USE no matter if the default signal handler fires or not.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:595
&gt;&gt; +     * on the @decision argument and returning %TRUE to block the default signal handler.
&gt; 
&gt; to block other handlers

Okay.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:74
&gt;&gt; +} WebKitPolicyDecisionType;
&gt; 
&gt; I still think this belongs to WebKitPolicyDecision.h, is there any reason why you think it should be defined here in webKitWebView?

It&apos;s only used in WebKitWebView. WebKitPolicyClient doesn&apos;t use it at all. It&apos;s weird to me that the abstract policy decision class &quot;knows&quot; about the different types of the decisions. To me it&apos;s a logical property of the WebView. I considered moving it, but it felt wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544099</commentid>
    <comment_count>32</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 08:36:34 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 124317 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124317&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:588
&gt; &gt;&gt; +     *         break;
&gt; &gt; 
&gt; &gt; We should return FALSE here.
&gt; 
&gt; It&apos;s still valid because the default action is USE no matter if the default signal handler fires or not.

In the other cases there&apos;s a comment saying that the decision is made, in this one the comment says &quot;Making no decision&quot;, so you should return FALSE to let the default handler make the decision. 

&gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:595
&gt; &gt;&gt; +     * on the @decision argument and returning %TRUE to block the default signal handler.
&gt; &gt; 
&gt; &gt; to block other handlers
&gt; 
&gt; Okay.
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:74
&gt; &gt;&gt; +} WebKitPolicyDecisionType;
&gt; &gt; 
&gt; &gt; I still think this belongs to WebKitPolicyDecision.h, is there any reason why you think it should be defined here in webKitWebView?
&gt; 
&gt; It&apos;s only used in WebKitWebView. WebKitPolicyClient doesn&apos;t use it at all. It&apos;s weird to me that the abstract policy decision class &quot;knows&quot; about the different types of the decisions. To me it&apos;s a logical property of the WebView. I considered moving it, but it felt wrong.

It&apos;s a policy decision type, it&apos;s used by web view, but it&apos;s about policy decision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544100</commentid>
    <comment_count>33</comment_count>
      <attachid>124317</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 08:39:23 -0800</bug_when>
    <thetext>Comment on attachment 124317
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:588
&gt;&gt;&gt;&gt; +     *         break;
&gt;&gt;&gt; 
&gt;&gt;&gt; We should return FALSE here.
&gt;&gt; 
&gt;&gt; It&apos;s still valid because the default action is USE no matter if the default signal handler fires or not.
&gt; 
&gt; In the other cases there&apos;s a comment saying that the decision is made, in this one the comment says &quot;Making no decision&quot;, so you should return FALSE to let the default handler make the decision.

The same decision is made either way. Should I made the documentation below clearer about this point?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544103</commentid>
    <comment_count>34</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 08:42:56 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 124317 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124317&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:588
&gt; &gt;&gt;&gt;&gt; +     *         break;
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; We should return FALSE here.
&gt; &gt;&gt; 
&gt; &gt;&gt; It&apos;s still valid because the default action is USE no matter if the default signal handler fires or not.
&gt; &gt; 
&gt; &gt; In the other cases there&apos;s a comment saying that the decision is made, in this one the comment says &quot;Making no decision&quot;, so you should return FALSE to let the default handler make the decision.
&gt; 
&gt; The same decision is made either way. Should I made the documentation below clearer about this point?

The doc is clear: 

Returns: %TRUE to stop other handlers from being invoked for the event. %FALSE to propagate the event further.

So simply return FALSE there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544105</commentid>
    <comment_count>35</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 08:45:42 -0800</bug_when>
    <thetext>(In reply to comment #34)

&gt; &gt; The same decision is made either way. Should I made the documentation below clearer about this point?
&gt; 
&gt; The doc is clear: 
&gt; 
&gt; Returns: %TRUE to stop other handlers from being invoked for the event. %FALSE to propagate the event further.
&gt; 
&gt; So simply return FALSE there.

I think the example illustrates an important property of the API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544106</commentid>
    <comment_count>36</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 08:48:26 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (In reply to comment #34)
&gt; 
&gt; &gt; &gt; The same decision is made either way. Should I made the documentation below clearer about this point?
&gt; &gt; 
&gt; &gt; The doc is clear: 
&gt; &gt; 
&gt; &gt; Returns: %TRUE to stop other handlers from being invoked for the event. %FALSE to propagate the event further.
&gt; &gt; 
&gt; &gt; So simply return FALSE there.
&gt; 
&gt; I think the example illustrates an important property of the API.

I think it uses the api wrongly, even though the result is the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544109</commentid>
    <comment_count>37</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 08:52:34 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; I think it uses the api wrongly, even though the result is the same.

I like the way the API is very flexible. This is a really minor point though. Perhaps we can take another pass through the API to clean up little details like these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544113</commentid>
    <comment_count>38</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 08:57:20 -0800</bug_when>
    <thetext>The point is that it&apos;s not following the event propagation approach of GTK. We are making the decision in finalize to prevent a misuse of it, but we shouldn&apos;t promote it in the api docs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544114</commentid>
    <comment_count>39</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 08:59:09 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; The point is that it&apos;s not following the event propagation approach of GTK. We are making the decision in finalize to prevent a misuse of it, but we shouldn&apos;t promote it in the api docs.

It has the property that it prevents mistakes, but it&apos;s also nice feature of the API, IMO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544116</commentid>
    <comment_count>40</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 09:02:52 -0800</bug_when>
    <thetext>And it&apos;s nice indeed, but we shouldn&apos;t promote it in the api docs, we already mention in the doc that use will be used anyway, so let&apos;s return FALSE when not handling it as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544149</commentid>
    <comment_count>41</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 10:06:09 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; And it&apos;s nice indeed, but we shouldn&apos;t promote it in the api docs, we already mention in the doc that use will be used anyway, so let&apos;s return FALSE when not handling it as expected.

I&apos;d just like to respectfully disagree with your premise that is a misuse of the API. I think maybe we won&apos;t agree now about whether it is ugly or not. In my mind it&apos;s perfectly valid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544183</commentid>
    <comment_count>42</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 10:55:47 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; (In reply to comment #40)
&gt; &gt; And it&apos;s nice indeed, but we shouldn&apos;t promote it in the api docs, we already mention in the doc that use will be used anyway, so let&apos;s return FALSE when not handling it as expected.
&gt; 
&gt; I&apos;d just like to respectfully disagree with your premise that is a misuse of the API. I think maybe we won&apos;t agree now about whether it is ugly or not. In my mind it&apos;s perfectly valid.

Another alternative is to make it so that this signal does not have a return value. That would remove all of these concerns entirely. We can simply say: &quot;If you do not handle this signal, all policy decisions will be accepted.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544208</commentid>
    <comment_count>43</comment_count>
      <attachid>124317</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-27 11:24:23 -0800</bug_when>
    <thetext>Comment on attachment 124317
Patch

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

Pretty good, thanks a lot Carlos for the thorough review =D

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitError.cpp:28
&gt; +using namespace WebCore;
&gt; +

Is this needed? Seems like it&apos;s the only change in this file.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp:43
&gt; +G_DEFINE_TYPE(WebKitPolicyDecision, webkit_policy_decision, G_TYPE_OBJECT)

Should this be G_DEFINE_ABSTRACT_TYPE?

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:588
&gt;&gt;&gt;&gt;&gt;&gt; +     *         break;
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; We should return FALSE here.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; It&apos;s still valid because the default action is USE no matter if the default signal handler fires or not.
&gt;&gt;&gt; 
&gt;&gt;&gt; In the other cases there&apos;s a comment saying that the decision is made, in this one the comment says &quot;Making no decision&quot;, so you should return FALSE to let the default handler make the decision.
&gt;&gt; 
&gt;&gt; The same decision is made either way. Should I made the documentation below clearer about this point?
&gt; 
&gt; The doc is clear: 
&gt; 
&gt; Returns: %TRUE to stop other handlers from being invoked for the event. %FALSE to propagate the event further.
&gt; 
&gt; So simply return FALSE there.

I agree with Carlos in this matter. Returning TRUE without making a decision should better stay undefined behaviour. It is an implementation detail that people should not be relying on. I am not 100% on this, but I fear language bindings could mess up this expectation by keeping the object alive for longer, which would be another issue.

&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:595
&gt;&gt;&gt;&gt; +     * on the @decision argument and returning %TRUE to block the default signal handler.
&gt;&gt;&gt; 
&gt;&gt;&gt; to block other handlers
&gt;&gt; 
&gt;&gt; Okay.
&gt; 
&gt; It&apos;s a policy decision type, it&apos;s used by web view, but it&apos;s about policy decision.

So, I&apos;m ambivalent in this matter, but I tend to take Martin&apos;s side, I think, in that it&apos;s the web view&apos;s use of this enum that gives any meaning to it. While the policy decision class is the mechanism used to operate on, it&apos;s the web view that knows what kinds of decisions it needs to be taken. But, that makes me think - would it be better to have the decisions (use, ignore, download) in the concrete classes that represent the different types of policy decisions? A download policy may not make sense for a new window policy decision, say  (although I may be forgetting some specificality of how this is handled inside webcore). In those cases you&apos;d probably want to have an allow/deny decision instead of the three options that we currently have, and we could reuse this system for things like geolocation/webgl permissions. Food for thought, I don&apos;t think it&apos;s important enough to hold this patch, but we should consider that.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp:115
&gt; +    // Ideally we&apos;d like to have a more intensive test here, but it&apos;s still pretty tricky
&gt; +    // to trigger different types of navigations with the GTK+ WebKit2 API.

We can probably trigger those by loading HTML with embedded js to simulate stuff? Gotta think a bit more about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544212</commentid>
    <comment_count>44</comment_count>
      <attachid>124317</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 11:29:07 -0800</bug_when>
    <thetext>Comment on attachment 124317
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:588
&gt;&gt;&gt;&gt;&gt;&gt;&gt; +     *         break;
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; We should return FALSE here.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; It&apos;s still valid because the default action is USE no matter if the default signal handler fires or not.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; In the other cases there&apos;s a comment saying that the decision is made, in this one the comment says &quot;Making no decision&quot;, so you should return FALSE to let the default handler make the decision.
&gt;&gt;&gt; 
&gt;&gt;&gt; The same decision is made either way. Should I made the documentation below clearer about this point?
&gt;&gt; 
&gt;&gt; The doc is clear: 
&gt;&gt; 
&gt;&gt; Returns: %TRUE to stop other handlers from being invoked for the event. %FALSE to propagate the event further.
&gt;&gt; 
&gt;&gt; So simply return FALSE there.
&gt; 
&gt; I agree with Carlos in this matter. Returning TRUE without making a decision should better stay undefined behaviour. It is an implementation detail that people should not be relying on. I am not 100% on this, but I fear language bindings could mess up this expectation by keeping the object alive for longer, which would be another issue.

Okay.

&gt;&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:595
&gt;&gt;&gt;&gt;&gt; +     * on the @decision argument and returning %TRUE to block the default signal handler.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; to block other handlers
&gt;&gt;&gt; 
&gt;&gt;&gt; Okay.
&gt;&gt; 
&gt;&gt; It&apos;s a policy decision type, it&apos;s used by web view, but it&apos;s about policy decision.
&gt; 
&gt; So, I&apos;m ambivalent in this matter, but I tend to take Martin&apos;s side, I think, in that it&apos;s the web view&apos;s use of this enum that gives any meaning to it. While the policy decision class is the mechanism used to operate on, it&apos;s the web view that knows what kinds of decisions it needs to be taken. But, that makes me think - would it be better to have the decisions (use, ignore, download) in the concrete classes that represent the different types of policy decisions? A download policy may not make sense for a new window policy decision, say  (although I may be forgetting some specificality of how this is handled inside webcore). In those cases you&apos;d probably want to have an allow/deny decision instead of the three options that we currently have, and we could reuse this system for things like geolocation/webgl permissions. Food for thought, I don&apos;t think it&apos;s important enough to hold this patch, but we should consider that.

I considered briefly having the different decisions return a boolean specifying whether or not the decision was valid or not. There is also a client method that can inform you if you&apos;ve made an invalid policy decision. I think that &quot;download&quot; is invalid for &quot;new-window&quot; action for instance, but I&apos;m not certain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544229</commentid>
    <comment_count>45</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 11:52:47 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 124317 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124317&amp;action=review
&gt; 
&gt; Pretty good, thanks a lot Carlos for the thorough review =D
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitError.cpp:28
&gt; &gt; +using namespace WebCore;
&gt; &gt; +
&gt; 
&gt; Is this needed? Seems like it&apos;s the only change in this file.

I removed the WebCore namespace from ASSERT_MATCHING_ENUMS, so it&apos;s necessary here unless I add it to the enum values below.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp:43
&gt; &gt; +G_DEFINE_TYPE(WebKitPolicyDecision, webkit_policy_decision, G_TYPE_OBJECT)
&gt; 
&gt; Should this be G_DEFINE_ABSTRACT_TYPE?

Yep! I&apos;ll fix before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544246</commentid>
    <comment_count>46</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-27 12:15:33 -0800</bug_when>
    <thetext>Committed r106142: &lt;http://trac.webkit.org/changeset/106142&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123455</attachid>
            <date>2012-01-21 13:35:48 -0800</date>
            <delta_ts>2012-01-24 15:41:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76343-20120121133547.patch</filename>
            <type>text/plain</type>
            <size>67565</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZWQ3OGRhMGU4ZjljZmFk
N2IxMjZkOTBiN2ZlNTc5YWY2NDFjMzhjNy4uMWY5ZGYyYzYyMjQyOGNlYzg0Mzc3MmM5MGNjMjQ0
YmVmNGQ1NjY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQwIEBACiAyMDEyLTAxLTIxICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBbV0sy
XSBJbXBsZW1lbnQgdGhlIHBvbGljeSBjbGllbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRoZSBhYnN0cmFjdCBXZWJLaXRQb2xpY3lE
ZWNpc2lvbiwgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLAorICAgICAgICBhbmQgYWRk
IHRoZSBkZWNpZGUtcG9saWN5IHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3LgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gdGhlIHNvdXJjZSBsaXN0LgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcDogVXNlIHRoZSBXZWJDb3JlIG5h
bWVzcGFjZSBiZWNhdXNlCisgICAgICAgIG9mIGNoYW5nZXMgdG8gQVNTRVJUX01BVENISU5HX0VO
VU1TLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlLmg6IEFkZGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudFByaXZhdGUuaDog
QWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNp
c2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lE
ZWNpc2lvblByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UHJpdmF0ZS5oOiBNb2RpZnkgQVNTRVJUX01BVENISU5HX0VOVU1TIHRvIG1ha2UKKyAgICAg
ICAgaXQgdXNlZnVsIGZvciBub24tV2ViQ29yZSBlbnVtcy4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDb25zdHJ1
Y3RlZCk6IEF0dGFjaCB0aGUgcG9saWN5IGNsaWVudCBjYWxsYmFja3MgdG8gdGhlIHBhZ2UuCisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IEFkZCB0aGUgZGVjaWRlLXBvbGlj
eSBzaWduYWwgZGVmaW5pdGlvbi4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdNYWtlUG9saWN5RGVj
aXNpb24pOiBBZGRlZCB0aGlzIHByaXZhdGUgbWV0aG9kIHRvIGZpcmUgdGhlIHNpZ25hbC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6IEFkZGVkIG5ldyBzaWdu
YWwgdG8gdGhlIGxpc3QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d1ByaXZhdGUuaDogQWRkZWQgbmV3IG1ldGhvZCBkZWNsYXJhdGlvbi4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBuZXcgY2xhc3Nl
cyB0byB0aGUgZG9jcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstc2VjdGlvbnMudHh0OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHRlc3QgdG8gdGhlIHNvdXJjZSBsaXN0LgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0
OiBkZWNpZGUtcG9saWN5IGhhcyBhIG5ldyBzaWduYXR1cmUuCisKKzIwMTItMDEtMjEgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCiAgICAgICAgIFtHVEtdW1dLMl0g
TWFrZSB0aGUgTG9hZFRyYWNraW5nIGFuZCBXZWJWaWV3IHRlc3QgZml4dHVyZXMgbW9yZSBmbGV4
aWJsZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3
NTUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAyY2IxY2U3OWU0ZWNlMGE0MDA0MWQ1NDEzYTgx
ODdjMmIzMDYxOWVmLi45NmNkMWQ5MWU1OGM2OTk3YjNiYTY2OGM2MjVjMGM2YWEyMGJlYTZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODQsMTAgKzg0LDEyIEBAIGxpYndlYmtpdDJndGtpbmNs
dWRlX0hFQURFUlMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RGVmaW5lcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmgg
XAotCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIFwKKwkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bi5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9u
LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBcCiAJ
JChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklSZXF1ZXN0LmggXAogCSQoV2Vi
S2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJUmVzcG9uc2UuaCBcCisJJChXZWJLaXQy
KS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAogCSQoV2ViS2l0MikvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5oIFwKQEAgLTUyMyw2ICs1MjUsMTMgQEAgbGlid2Vi
a2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5P
Ul9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREZWZpbmVzLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVy
cm9yLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNw
cCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUuaCBcCisJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24uY3BwIFwK
KwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvbi5o
IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lDbGllbnQu
Y3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lDbGll
bnRQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBy
aXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGlu
Z3MuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5n
cy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEVycm9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9y
LmNwcAppbmRleCA2YzI0YWExMmVlYjRiOTRlYTM2MTQ0YmVlNTIyOTNmNTNiMDQ3ZjIyLi41YjRm
ZGYyNGVjM2Y2MDBkNjRlZjkzYWI0NWYzNWY0OTg1M2I4NzkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwCkBAIC0yNCw2ICsyNCw4IEBA
CiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRXJyb3JzR3Rr
Lmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBHUXVhcmsgd2Via2l0X25ldHdvcmtf
ZXJyb3JfcXVhcmsoKQogewogICAgIHJldHVybiBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyhX
ZWJDb3JlOjplcnJvckRvbWFpbk5ldHdvcmspOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWUzNTBkNzg1ZGRmYzc3NWU4YjNmZTgxOGIxNGViOTczYjY5
NzE5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAKQEAgLTAsMCArMSwzMDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oIgorCisjaW5jbHVkZSAi
V2ViS2l0RW51bVR5cGVzLmgiCisjaW5jbHVkZSAiV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFVSSVJlcXVl
c3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgPFdlYktp
dDIvV0tBUElDYXN0Lmg+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdsaWIvZ2kx
OG4tbGliLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworLyoqCisgKiBT
RUNUSU9OOiBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24KKyAqIEBTaG9ydF9kZXNjcmlw
dGlvbjogQSBwb2xpY3kgZGVjaXNpb24gZm9yIG5hdmlnYXRpb24gYWN0aW9ucworICogQFRpdGxl
OiBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24KKyAqIEBTZWVfYWxzbzogI1dlYktpdFBv
bGljeURlY2lzaW9uLCAjV2ViS2l0V2ViVmlldworICoKKyAqIFdlYktpdE5hdmlnYXRpb25Qb2xp
Y3lEZWNpc2lvbiByZXByZXNlbnRzIGEgcG9saWN5IGRlY2lzaW9uIGZvciBldmVudHMKKyAqIGFz
c29jaWF0ZWQgd2l0aCBuYXZpZ2F0aW9ucy4gSWYgdGhlIHZhbHVlIG9mIFdlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbjptb3VzZS1idXR0b24KKyAqIGlzIG5vdCBXRUJLSVRfTU9VU0VfQlVU
VE9OX05PTkUsIHRoZW4gdGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieQorICogYSBtb3Vz
ZSBldmVudC4KKyAqLworCitHX0RFRklORV9UWVBFKFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbiwgd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLCBXRUJLSVRfVFlQRV9QT0xJ
Q1lfREVDSVNJT04pCisKK3N0cnVjdCBfV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJp
dmF0ZSB7CisgICAgV2ViS2l0TmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvblR5cGU7CisgICAgdW5z
aWduZWQgbW9kaWZpZXJzOworICAgIFdlYktpdE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uOworICAg
IEdSZWZQdHI8V2ViS2l0VVJJUmVxdWVzdD4gcmVxdWVzdDsKKyAgICBDU3RyaW5nIGZyYW1lTmFt
ZTsKK307CisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX05BVklHQVRJT05fVFlQRSwK
KyAgICBQUk9QX01PVVNFX0JVVFRPTiwKKyAgICBQUk9QX01PRElGSUVSUywKKyAgICBQUk9QX1JF
UVVFU1QsCisgICAgUFJPUF9GUkFNRV9OQU1FLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X25h
dmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2luaXQoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uKiBkZWNpc2lvbikKK3sKKyAgICBkZWNpc2lvbi0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShkZWNpc2lvbiwgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJ
T04sIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUpOworICAgIG5ldyAoZGVj
aXNpb24tPnByaXYpIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUoKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uRmluYWxpemUoR09i
amVjdCogb2JqZWN0KQoreworICAgIFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTihv
YmplY3QpLT5wcml2LT5+V2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSgpOwor
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9wYXJl
bnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXROYXZp
Z2F0aW9uUG9saWN5RGVjaXNpb25HZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktp
dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24gPSBXRUJLSVRfTkFWSUdBVElPTl9Q
T0xJQ1lfREVDSVNJT04ob2JqZWN0KTsKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2Ug
UFJPUF9OQVZJR0FUSU9OX1RZUEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2VudW0odmFsdWUsIHdl
YmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbmF2aWdhdGlvbl90eXBlKGRlY2lz
aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NT1VTRV9CVVRUT046CisgICAg
ICAgIGdfdmFsdWVfc2V0X2VudW0odmFsdWUsIHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNp
c2lvbl9nZXRfbW91c2VfYnV0dG9uKGRlY2lzaW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9NT0RJRklFUlM6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIHdlYmtp
dF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW9kaWZpZXJzKGRlY2lzaW9uKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRVFVRVNUOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfcmVx
dWVzdChkZWNpc2lvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRlJBTUVfTkFN
RToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfbmF2aWdhdGlvbl9w
b2xpY3lfZGVjaXNpb25fZ2V0X2ZyYW1lX25hbWUoZGVjaXNpb24pKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9jbGFzc19pbml0
KFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNsYXNzKiBkZWNpc2lvbkNsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhkZWNpc2lvbkNs
YXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb25GaW5hbGl6ZTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
TmF2aWdhdGlvblBvbGljeURlY2lzaW9uR2V0UHJvcGVydHk7CisgICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKGRlY2lzaW9uQ2xhc3MsIHNpemVvZihXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVj
aXNpb25Qcml2YXRlKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb246bmF2aWdhdGlvbi10eXBlOgorICAgICAqCisgICAgICogVGhlIHR5cGUgb2YgbmF2
aWdhdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGlzIHBvbGljeSBkZWNpc2lvbi4gVGhpcyBpcworICAg
ICAqIHVzZWZ1bCBmb3IgZW5hY3RpbmcgZGlmZmVyZW50IHBvbGljaWVzIGRlcGVuZGluZyBvbiB3
aGF0IHR5cGUgb2YgdXNlcgorICAgICAqIGFjdGlvbiBjYXVzZWQgdGhlIG5hdmlnYXRpb24uCisg
ICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTkFWSUdBVElPTl9UWVBF
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2VudW0o
Im5hdmlnYXRpb24tdHlwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJOYXZpZ2F0aW9uIHR5cGUiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSB0eXBlIG9mIG5hdmln
YXRpb24gdHJpZ2dlcmluZyB0aGlzIGRlY2lzaW9uIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9OQVZJR0FUSU9OX1RZ
UEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0xJTktfQ0xJQ0tFRCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uOm1v
dXNlLWJ1dHRvbjoKKyAgICAgKgorICAgICAqIElmIHRoZSBuYXZpZ2F0aW9uIGFzc29jaWF0ZWQg
d2l0aCB0aGlzIHBvbGljeSBkZWNpc2lvbiB3YXMgb3JpZ2luYWxseQorICAgICAqIHRyaWdnZXJl
ZCBieSBhIG1vdXNlIGV2ZW50LCB0aGlzIHByb3BlcnR5IGNvbnRhaW5zIGEgI1dlYktpdE1vdXNl
QnV0dG9uCisgICAgICogdmFsdWUgZGVzY3JpYmluZyB0aGUgYnV0dG9uIHVzZWQgZm9yIHRoYXQg
Y2xpY2suIElmIHRoZSBuYXZpZ2F0aW9uIHdhcworICAgICAqIG5vdCB0cmlnZ2VyZWQgYnkgYSBt
b3VzZSBldmVudCwgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgd2lsbCBiZQorICAgICAqIFdF
QktJVF9NT1VTRV9CVVRUT05fTk9ORS4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJPUF9NT1VTRV9CVVRUT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfZW51bSgibW91c2UtYnV0dG9uIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1vdXNlIGJ1dHRvbiIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
VGhlIG1vdXNlIGJ1dHRvbiB1c2VkIGlmIHRoaXMgZGVjaXNpb24gd2FzIHRyaWdnZXJlZCBieSBh
IG1vdXNlIGV2ZW50IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9NT1VTRV9CVVRUT04sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfTU9VU0VfQlVUVE9O
X05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbjptb2RpZmllcnM6CisgICAgICoKKyAgICAgKiBJZiB0aGUg
bmF2aWdhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBwb2xpY3kgZGVjaXNpb24gd2FzIG9yaWdp
bmFsbHkKKyAgICAgKiB0cmlnZ2VyZWQgYnkgYSBtb3VzZSBldmVudCwgdGhpcyBwcm9wZXJ0eSBj
b250YWlucyBhIGJpdG1hc2sgb2YgdmFyaW91cworICAgICAqIEdka01vZGlmaWVyVHlwZSB2YWx1
ZXMgZGVzY3JpYmluZyB0aGUgbW9kaWZpZXJzIHVzZWQgZm9yIHRoYXQgY2xpY2suCisgICAgICog
SWYgdGhlIG5hdmlnYXRpb24gd2FzIG5vdCB0cmlnZ2VyZWQgYnkgYSBtb3VzZSBldmVudCBvciBu
byBtb2RpZmllcnMKKyAgICAgKiB3ZXJlIGFjdGl2ZSwgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVy
dHkgd2lsbCBiZSB6ZXJvLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
Uk9QX01PRElGSUVSUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFy
YW1fc3BlY191aW50KCJtb2RpZmllcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiTW91c2UgZXZlbnQgbW9kaWZpZXJzIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUg
bW9kaWZpZXJzIGFjdGl2ZSBpZiB0aGlzIGRlY2lzaW9uIHdhcyB0cmlnZ2VyZWQgYnkgYSBtb3Vz
ZSBldmVudCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAv
KioKKyAgICAgKiBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb246cmVxdWVzdDoKKyAgICAg
KgorICAgICAqIFRoaXMgcHJvcGVydHkgY29udGFpbnMgdGhlICNXZWJLaXRVUklSZXF1ZXN0IGFz
c29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogbmF2aWdhdGlvbi4KKyAgICAgKi8KKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9SRVFVRVNULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgicmVxdWVzdCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJOYXZpZ2F0aW9u
IFVSSSByZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJUaGUgVVJJIHJlcXVlc3QgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBuYXZpZ2F0aW9uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9VUklfUkVRVUVTVCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9u
OmZyYW1lLW5hbWU6CisgICAgICoKKyAgICAgKiBJZiB0aGlzIG5hdmlnYXRpb24gcmVxdWVzdCB3
YXMgdHJpZ2dlcmVkIGJ5IGNsaWNraW5nIGEgbGluayB3aXRoIGEKKyAgICAgKiB0YXJnZXQgYXR0
cmlidXRlLCB0aGlzIHByb3BlcnR5IHdpbGwgY29udGFpbiB0aGUgdmFsdWUgb2YgdGhhdCBhdHRy
aWJ1dGUuCisgICAgICogSW4gYWxsIG90aGVyIGNhc2VzLCB0aGlzIHZhbHVlIHdpbGwgYmUgbnVs
bC4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENs
YXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9GUkFNRV9OQU1F
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygiZnJhbWUtbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJGcmFtZSBuYW1lIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgdmFsdWUgb2YgdGhlIHRhcmdldCBh
dHRyaWJ1dGUgaWYgdGhpcyBuYXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgY2xpY2tpbmcgYSBs
aW5rIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Cit9CisKKy8qCisgKiB3ZWJraXRfbmF2aWdh
dGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X25hdmlnYXRpb25fdHlwZToKKyAqIEBkZWNpc2lvbjog
YSAjV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uCisgKgorICogR2V0cyB0aGUgdmFsdWUg
b2YgdGhlICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb246bmF2aWdhdGlvbi10eXBlIHBy
b3BlcnR5LgorICoKKyAqIFJldHVybnM6IFRoZSB0eXBlIG9mIG5hdmlnYXRpb24gdHJpZ2dlcmlu
ZyB0aGlzIHBvbGljeSBkZWNpc2lvbi4KKyAqLworV2ViS2l0TmF2aWdhdGlvblR5cGUgd2Via2l0
X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUoV2ViS2l0TmF2
aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04oZGVjaXNpb24pLCBXRUJL
SVRfTkFWSUdBVElPTl9UWVBFX09USEVSKTsKKyAgICByZXR1cm4gZGVjaXNpb24tPnByaXYtPm5h
dmlnYXRpb25UeXBlOworfQorCisvKgorICogd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lz
aW9uX2dldF9tb3VzZV9idXR0b246CisgKiBAZGVjaXNpb246IGEgI1dlYktpdE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbgorICoKKyAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSAjV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uOm1vdXNlLWJ1dHRvbiBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5z
OiBUaGUgbW91c2UgYnV0dG9uIHVzZWQgaWYgdGhpcyBkZWNpc2lvbiB3YXMgdHJpZ2dlcmVkIGJ5
IGEgbW91c2UgZXZlbnQKKyAqLworV2ViS2l0TW91c2VCdXR0b24gd2Via2l0X25hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uX2dldF9tb3VzZV9idXR0b24oV2ViS2l0TmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uKiBkZWNpc2lvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
TkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04oZGVjaXNpb24pLCBXRUJLSVRfTU9VU0VfQlVUVE9O
X05PTkUpOworICAgIHJldHVybiBkZWNpc2lvbi0+cHJpdi0+bW91c2VCdXR0b247Cit9CisKKy8q
CisgKiB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vZGlmaWVyczoKKyAq
IEBkZWNpc2lvbjogYSAjV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uCisgKgorICogR2V0
cyB0aGUgdmFsdWUgb2YgdGhlICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb246bW9kaWZp
ZXJzIHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6IFRoZSBtb2RpZmllcnMgYWN0aXZlIGlmIHRo
aXMgZGVjaXNpb24gd2FzIHRyaWdnZXJlZCBieSBhIG1vdXNlIGV2ZW50CisgKi8KK3Vuc2lnbmVk
IHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW9kaWZpZXJzKFdlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9uKSwgMCk7
CisgICAgcmV0dXJuIGRlY2lzaW9uLT5wcml2LT5tb2RpZmllcnM7Cit9CisKKy8qCisgKiB3ZWJr
aXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X3JlcXVlc3Q6CisgKiBAZGVjaXNpb246
IGEgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbgorICoKKyAqIEdldHMgdGhlIHZhbHVl
IG9mIHRoZSAjV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uOnJlcXVlc3QgcHJvcGVydHku
CisgKgorICogUmV0dXJuczogVGhlIFVSSSByZXF1ZXN0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRo
IHRoaXMgbmF2aWdhdGlvbgorICovCitXZWJLaXRVUklSZXF1ZXN0KiB3ZWJraXRfbmF2aWdhdGlv
bl9wb2xpY3lfZGVjaXNpb25fZ2V0X3JlcXVlc3QoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uKiBkZWNpc2lvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfTkFW
SUdBVElPTl9QT0xJQ1lfREVDSVNJT04oZGVjaXNpb24pLCAwKTsKKyAgICByZXR1cm4gZGVjaXNp
b24tPnByaXYtPnJlcXVlc3QuZ2V0KCk7Cit9CisKKy8qCisgKiB3ZWJraXRfbmF2aWdhdGlvbl9w
b2xpY3lfZGVjaXNpb25fZ2V0X2ZyYW1lX25hbWU6CisgKiBAZGVjaXNpb246IGEgI1dlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbgorICoKKyAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSAjV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uOmZyYW1lLW5hbWUgcHJvcGVydHkuCisgKgorICog
UmV0dXJuczogVGhlIHZhbHVlIG9mIHRoZSB0YXJnZXQgYXR0cmlidXRlIGlmIHRoaXMgbmF2aWdh
dGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IGEgbGluayBjbGljaworICovCitjb25zdCBjaGFyKiB3ZWJr
aXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X2ZyYW1lX25hbWUoV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04oZGVjaXNpb24pLCAwKTsKKyAg
ICByZXR1cm4gZGVjaXNpb24tPnByaXYtPmZyYW1lTmFtZS5kYXRhKCk7Cit9CisKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX05BVklHQVRJT05fVFlQRV9MSU5LX0NMSUNLRUQs
IGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVMaW5rQ2xpY2tlZCk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfRk9STV9TVUJNSVRURUQsIGtXS0ZyYW1l
TmF2aWdhdGlvblR5cGVGb3JtU3VibWl0dGVkKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV0VCS0lUX05BVklHQVRJT05fVFlQRV9CQUNLX0ZPUldBUkQsIGtXS0ZyYW1lTmF2aWdhdGlv
blR5cGVCYWNrRm9yd2FyZCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9O
QVZJR0FUSU9OX1RZUEVfRk9STV9SRVNVQk1JVFRFRCwga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZUZv
cm1SZXN1Ym1pdHRlZCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9OQVZJ
R0FUSU9OX1RZUEVfT1RIRVIsIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVPdGhlcik7CisKK3N0YXRp
YyBXZWJLaXRNb3VzZUJ1dHRvbiB3a0V2ZW50TW91c2VCdXR0b25Ub1dlYktpdE1vdXNlQnV0dG9u
KFdLRXZlbnRNb3VzZUJ1dHRvbiB3a0J1dHRvbikKK3sKKyAgICBzd2l0Y2ggKHdrQnV0dG9uKSB7
CisgICAgY2FzZSBrV0tFdmVudE1vdXNlQnV0dG9uTm9CdXR0b246CisgICAgICAgIHJldHVybiBX
RUJLSVRfTU9VU0VfQlVUVE9OX05PTkU7CisgICAgY2FzZSBrV0tFdmVudE1vdXNlQnV0dG9uTGVm
dEJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9NT1VTRV9CVVRUT05fTEVGVDsKKyAgICBj
YXNlIGtXS0V2ZW50TW91c2VCdXR0b25NaWRkbGVCdXR0b246CisgICAgICAgIHJldHVybiBXRUJL
SVRfTU9VU0VfQlVUVE9OX0xFRlQ7CisgICAgY2FzZSBrV0tFdmVudE1vdXNlQnV0dG9uUmlnaHRC
dXR0b246CisgICAgICAgIHJldHVybiBXRUJLSVRfTU9VU0VfQlVUVE9OX1JJR0hUOworICAgIH0K
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV0VCS0lUX01PVVNFX0JVVFRP
Tl9OT05FOworfQorCit1bnNpZ25lZCB3a0V2ZW50TW9kaWZpZXJzVG9VbnNpZ25lZChXS0V2ZW50
TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7Cisg
ICAgaWYgKHdrTW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNTaGlmdEtleSkKKyAgICAgICAg
bW9kaWZpZXJzIHw9IEdES19TSElGVF9NQVNLOworICAgIGlmICh3a01vZGlmaWVycyAmIGtXS0V2
ZW50TW9kaWZpZXJzQ29udHJvbEtleSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdES19DT05UUk9M
X01BU0s7CisgICAgaWYgKHdrTW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNBbHRLZXkpCisg
ICAgICAgIG1vZGlmaWVycyB8PSBHREtfTU9EMV9NQVNLOworICAgIGlmICh3a01vZGlmaWVycyAm
IGtXS0V2ZW50TW9kaWZpZXJzTWV0YUtleSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdES19NRVRB
X01BU0s7CisgICAgcmV0dXJuIG1vZGlmaWVyczsKK30KKworV2ViS2l0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uKiB3ZWJraXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25DcmVhdGUoV0tGcmFtZU5h
dmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBXS0V2ZW50TW91c2VCdXR0b24gbW91c2VCdXR0
b24sIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwg
Y29uc3QgY2hhciogZnJhbWVOYW1lLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIp
Cit7CisgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJ
VF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkFW
SUdBVElPTl9QT0xJQ1lfREVDSVNJT04sIE5VTEwpKTsKKyAgICBkZWNpc2lvbi0+cHJpdi0+bmF2
aWdhdGlvblR5cGUgPSBzdGF0aWNfY2FzdDxXZWJLaXROYXZpZ2F0aW9uVHlwZT4obmF2aWdhdGlv
blR5cGUpOworICAgIGRlY2lzaW9uLT5wcml2LT5tb3VzZUJ1dHRvbiA9IHdrRXZlbnRNb3VzZUJ1
dHRvblRvV2ViS2l0TW91c2VCdXR0b24obW91c2VCdXR0b24pOworICAgIGRlY2lzaW9uLT5wcml2
LT5tb2RpZmllcnMgPSB3a0V2ZW50TW9kaWZpZXJzVG9VbnNpZ25lZChtb2RpZmllcnMpOworICAg
IGRlY2lzaW9uLT5wcml2LT5yZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdFVSSVJlcXVlc3RDcmVh
dGVGb3JSZXNvdXJjZVJlcXVlc3QodG9JbXBsKHJlcXVlc3QpLT5yZXNvdXJjZVJlcXVlc3QoKSkp
OworICAgIGRlY2lzaW9uLT5wcml2LT5mcmFtZU5hbWUgPSBmcmFtZU5hbWU7CisgICAgd2Via2l0
UG9saWN5RGVjaXNpb25TZXRMaXN0ZW5lcihXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9u
KSwgbGlzdGVuZXIpOworICAgIHJldHVybiBkZWNpc2lvbjsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTkzNTcyNWI2NTI4YTNjMDQ4ZTQwMmU1ODRlNjVm
NTRiNWZhYWU3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oCkBAIC0wLDAgKzEsMTEwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dF
QktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJv
ciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisj
ZW5kaWYKKworI2lmbmRlZiBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25faAorI2RlZmlu
ZSBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25faAorCisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdFBvbGljeURlY2lzaW9uLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklS
ZXF1ZXN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiBXZWJLaXROYXZpZ2F0aW9uVHlw
ZToKKyAqIEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0xJTktfQ0xJQ0tFRDogVGhlIG5hdmlnYXRp
b24gd2FzIHRyaWdnZXJlZCBieSBjbGlja2luZyBhIGxpbmsuCisgKiBAV0VCS0lUX05BVklHQVRJ
T05fVFlQRV9GT1JNX1NVQk1JVFRFRDogVGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieSBz
dWJtaXR0aW5nIGEgZm9ybS4KKyAqIEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0JBQ0tfRk9SV0FS
RDogVGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieSBuYXZpZ2F0aW5nIGZvcndhcmQgb3Ig
YmFja3dhcmQuCisgKiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9SRUxPQUQ6IFRoZSBuYXZpZ2F0
aW9uIHdhcyB0cmlnZ2VyZWQgYnkgcmVsb2FkaW5nLgorICogQFdFQktJVF9OQVZJR0FUSU9OX1RZ
UEVfRk9STV9SRVNVQk1JVFRFRDogVGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieSByZXN1
Ym1pdHRpbmcgYSBmb3JtLgorICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVI6IFRoZSBu
YXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgc29tZSBvdGhlciBhY3Rpb24uCisgKgorICogRW51
bSB2YWx1ZXMgdXNlZCB0byBkZW5vdGUgdGhlIHZhcmlvdXMgbmF2aWdhdGlvbiB0eXBlcy4KKyAq
Ki8KK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9MSU5LX0NMSUNL
RUQsCisgICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1NVQk1JVFRFRCwKKyAgICBXRUJL
SVRfTkFWSUdBVElPTl9UWVBFX0JBQ0tfRk9SV0FSRCwKKyAgICBXRUJLSVRfTkFWSUdBVElPTl9U
WVBFX1JFTE9BRCwKKyAgICBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0ZPUk1fUkVTVUJNSVRURUQs
CisgICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUiwKK30gV2ViS2l0TmF2aWdhdGlvblR5
cGU7CisKKy8qKgorICogV2ViS2l0TW91c2VCdXR0b246CisgKiBAV0VCS0lUX01PVVNFX0JVVFRP
Tl9OT05FOiBObyBtb3VzZSBidXR0b24gdHJpZ2dlcmVkIHRoaXMgZXZlbnQKKyAqIEBXRUJLSVRf
TU9VU0VfQlVUVE9OX0xFRlQ6IFRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiB0cmlnZ2VyZWQgdGhpcyBl
dmVudAorICogQFdFQktJVF9NT1VTRV9CVVRUT05fTUlERExFOiBUaGUgbWlkZGxlIG1vdXNlIGJ1
dHRvbiB0cmlnZ2VyZWQgdGhpcyBldmVudAorICogQFdFQktJVF9NT1VTRV9CVVRUT05fUklHSFQ6
IFRoZSByaWdodCBtb3VzZSBidXR0b24gdHJpZ2dlcmVkIHRoaXMgZXZlbnQKKyAqCisgKiBFbnVt
IHZhbHVlcyB1c2VkIHRvIGRlbm90ZSB0aGUgdmFyaW91cyBtb3VzZSBidXR0b25zIHRoYXQgdHJp
Z2dlcmVkCisgKiBldmVudHMgd2l0aGluIFdlYktpdC4gVGhpcyBlbnVtIGlzIGRlc2lnbmVkIHRv
IG1hdGNoIHVwIHRvIHRoZSBidXR0b24KKyAqIHZhbHVlcyB1c2VkIGluIEdESyBldmVudHMsIGV4
Y2VwdCBmb3IgQFdFQktJVF9NT1VTRV9CVVRUT05fTk9ORSB3aGljaAorICogaGFzIG5vIGVxdWl2
YWxlbnQgaW4gR0RLLgorICoqLwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfTU9VU0VfQlVU
VE9OX05PTkUgPSAwLAorICAgIFdFQktJVF9NT1VTRV9CVVRUT05fTEVGVCA9IDEsCisgICAgV0VC
S0lUX01PVVNFX0JVVFRPTl9NSURETEUgPSAyLAorICAgIFdFQktJVF9NT1VTRV9CVVRUT05fUklH
SFQgPSAzCit9IFdlYktpdE1vdXNlQnV0dG9uOworCisjZGVmaW5lIFdFQktJVF9UWVBFX05BVklH
QVRJT05fUE9MSUNZX0RFQ0lTSU9OICAgICAgICAgICAgKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGlj
eV9kZWNpc2lvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lf
REVDSVNJT04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04sIFdlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbikpCisjZGVmaW5lIFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJ
U0lPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBX
RUJLSVRfVFlQRV9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTiwgV2ViS2l0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lf
REVDSVNJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwg
V0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04pKQorI2RlZmluZSBXRUJLSVRf
SVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJ
T04pKQorI2RlZmluZSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT05fR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfTkFW
SUdBVElPTl9QT0xJQ1lfREVDSVNJT04sIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiAg
ICAgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uOwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNsYXNzICAgV2ViS2l0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uUHJpdmF0ZSBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlOworCitz
dHJ1Y3QgX1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiB7CisgICAgV2ViS2l0UG9saWN5
RGVjaXNpb24gcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0TmF2
aWdhdGlvblBvbGljeURlY2lzaW9uQ2xhc3MgeworICAgIFdlYktpdFBvbGljeURlY2lzaW9uQ2xh
c3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X25hdmlnYXRp
b25fcG9saWN5X2RlY2lzaW9uX2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRf
QVBJIFdlYktpdE5hdmlnYXRpb25UeXBlCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNp
b25fZ2V0X25hdmlnYXRpb25fdHlwZSAoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uICpk
ZWNpc2lvbik7CitXRUJLSVRfQVBJIFdlYktpdE1vdXNlQnV0dG9uCit3ZWJraXRfbmF2aWdhdGlv
bl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vdXNlX2J1dHRvbiAgICAoV2ViS2l0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uICpkZWNpc2lvbik7CitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfbmF2aWdh
dGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vZGlmaWVycyAgICAgICAoV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uICpkZWNpc2lvbik7CitXRUJLSVRfQVBJIFdlYktpdFVSSVJlcXVlc3Qg
Kgord2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9yZXF1ZXN0ICAgICAgICAg
KFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiAqZGVjaXNpb24pOworV0VCS0lUX0FQSSBj
b25zdCBnY2hhciAqCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X2ZyYW1l
X25hbWUgICAgICAoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uICpkZWNpc2lvbik7CitH
X0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
blByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMmVlNzg5Mzk1NDNmMzE0Y2FjNDdmZjY1YTVkZWRlNmM1
ZTBkOTgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXROYXZpZ2F0aW9uUG9s
aWN5RGVjaXNpb24uaCIKKyNpbmNsdWRlIDxXZWJLaXRQcml2YXRlLmg+CisKK1dlYktpdE5hdmln
YXRpb25Qb2xpY3lEZWNpc2lvbiogd2Via2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ3JlYXRl
KFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSwgV0tFdmVudE1vdXNlQnV0dG9uLCBXS0V2ZW50TW9kaWZp
ZXJzLCBXS1VSTFJlcXVlc3RSZWYsIGNvbnN0IGNoYXIqIGZyYW1lTmFtZSwgV0tGcmFtZVBvbGlj
eUxpc3RlbmVyUmVmKTsKKworI2VuZGlmIC8vIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
blByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UG9saWN5Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFBvbGljeUNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ1ZmMyMjhmNWI4ZWNhN2Y1ZmIx
NWNjNDMxYTIzYThkMTNjZTUwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudC5jcHAKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0UG9saWN5Q2xpZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFBv
bGljeURlY2lzaW9uLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdFdlYlZpZXcuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tBUElDYXN0Lmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owor
CitzdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uQ2FsbGJhY2soV0tQ
YWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSBuYXZp
Z2F0aW9uVHlwZSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIFdLRXZlbnRNb3VzZUJ1dHRv
biBtb3VzZUJ1dHRvbiwgV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFdLRnJhbWVQb2xpY3lMaXN0
ZW5lclJlZiBsaXN0ZW5lciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQoreworICAgIEdSZWZQdHI8V2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uPiBkZWNp
c2lvbiA9CisgICAgICAgIGFkb3B0R1JlZih3ZWJraXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25D
cmVhdGUobmF2aWdhdGlvblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW91c2VCdXR0b24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyog
ZnJhbWUgbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpc3RlbmVyKSk7CisgICAgd2Via2l0V2ViVmlld01ha2VQb2xpY3lEZWNp
c2lvbihXRUJLSVRfV0VCX1ZJRVcodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBF
X05BVklHQVRJT05fQUNUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BPTElDWV9ERUNJU0lPTihkZWNpc2lvbi5nZXQoKSkpOworfQorCitzdGF0aWMgdm9p
ZCBkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb25DYWxsYmFjayhXS1BhZ2VSZWYgcGFnZSwg
V0tGcmFtZVJlZiBmcmFtZSwgV0tGcmFtZU5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBX
S0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9u
LCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgV0tTdHJpbmdSZWYgZnJhbWVOYW1lLCBXS0ZyYW1l
UG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbj4gZGVjaXNpb24gPQorICAgICAgICBhZG9wdEdSZWYod2Via2l0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uQ3JlYXRlKG5hdmlnYXRpb25UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlQnV0dG9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvSW1wbChmcmFtZU5hbWUpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKSk7
CisgICAgd2Via2l0V2ViVmlld01ha2VQb2xpY3lEZWNpc2lvbihXRUJLSVRfV0VCX1ZJRVcodG9J
bXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05FV19XSU5ET1dfQUNUSU9OLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BPTElDWV9ERUNJU0lPTihk
ZWNpc2lvbi5nZXQoKSkpOworfQorCit2b2lkIGF0dGFjaFBvbGljeUNsaWVudFRvUGFnZShXS1Bh
Z2VSZWYgcGFnZSkKK3sKKyAgICBXS1BhZ2VQb2xpY3lDbGllbnQgcG9saWN5Q2xpZW50ID0gewor
ICAgICAgICBrV0tQYWdlUG9saWN5Q2xpZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIDAsIC8v
IGNsaWVudEluZm8KKyAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkNhbGxi
YWNrLAorICAgICAgICBkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb25DYWxsYmFjaywKKyAg
ICAgICAgMCwgLy8gZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VDYWxsYmFjaywKKyAgICAgICAgMCwg
Ly8gdW5hYmxlVG9JbXBsZW1lbnRQb2xpY3kKKyAgICB9OworICAgIFdLUGFnZVNldFBhZ2VQb2xp
Y3lDbGllbnQocGFnZSwgJnBvbGljeUNsaWVudCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lDbGllbnRQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lDbGllbnRQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWM4YTZhYjllNDBlOTNmYmYyYjM1MjAwM2ZiMmI0ZGI3ZGE4MzQyNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBv
bGljeUNsaWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYg
IWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJr
aXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJL
aXRQb2xpY3lDbGllbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0UG9saWN5Q2xpZW50UHJpdmF0
ZV9oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLRnJhbWVQb2xpY3lMaXN0ZW5lci5oPgorCit2b2lk
IGF0dGFjaFBvbGljeUNsaWVudFRvUGFnZShXS1BhZ2VSZWYpOworCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lz
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wN2NjZmU2ODZlOGZhNjg0ZDIwY2IwYzgwMzkzZGZlMDBiM2Jl
NTUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UG9saWN5RGVjaXNpb24uY3BwCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRQb2xpY3lEZWNpc2lvbi5oIgorCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgPFdlYktpdDIvV0tBUElDYXN0Lmg+CisKKworLyoqCisgKiBTRUNUSU9OOiBXZWJLaXRQ
b2xpY3lEZWNpc2lvbgorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBBIHBlbmRpbmcgcG9saWN5IGRl
Y2lzaW9uCisgKiBAVGl0bGU6IFdlYktpdFBvbGljeURlY2lzaW9uCisgKiBAU2VlX2Fsc286ICNX
ZWJLaXRXZWJWaWV3CisgKgorICogT2Z0ZW4gV2ViS2l0IGFsbG93cyB0aGUgY2xpZW50IHRvIGRl
Y2lkZSB0aGUgcG9saWN5IGZvciBjZXJ0YWluCisgKiBvcGVyYXRpb25zLiBGb3IgaW5zdGFuY2Us
IGEgY2xpZW50IG1heSB3YW50IHRvIG9wZW4gYSBsaW5rIGluIGEgbmV3CisgKiB0YWIsIGJsb2Nr
IGEgbmF2aWdhdGlvbiBlbnRpcmVseSwgcXVlcnkgdGhlIHVzZXIgb3IgdHJpZ2dlciBhIGRvd25s
b2FkCisgKiBpbnN0ZWFkIG9mIGEgbmF2aWdhdGlvbi4gSW4gdGhlc2UgY2FzZXMgV2ViS2l0IHdp
bGwgZmlyZSB0aGUKKyAqICNXZWJLaXRXZWJWaWV3OjpkZWNpZGUtcG9saWN5IHNpZ25hbCB3aXRo
IGEgI1dlYktpdFBvbGljeURlY2lzaW9uCisgKiBvYmplY3QuIElmIHRoZSBzaWduYWwgaGFuZGxl
ciBkb2VzIG5vdGhpbmcsIFdlYktpdCB3aWxsIGFjdCBhcyBpZgorICogd2Via2l0X3BvbGljeV9k
ZWNpc2lvbl91c2UoKSB3YXMgY2FsbGVkIGFzIHNvb24gYXMgc2lnbmFsIGhhbmRsaW5nCisgKiBj
b21wbGV0ZXMuIFRvIG1ha2UgYSBwb2xpY3kgZGVjaXNpb24gYXN5bmNocm9ub3VzbHksIHNpbXBs
eSBpbmNyZW1lbnQKKyAqIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlICNXZWJLaXRQb2xpY3lE
ZWNpc2lvbiBvYmplY3QuCisgKi8KK0dfREVGSU5FX1RZUEUoV2ViS2l0UG9saWN5RGVjaXNpb24s
IHdlYmtpdF9wb2xpY3lfZGVjaXNpb24sIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBfV2ViS2l0
UG9saWN5RGVjaXNpb25Qcml2YXRlIHsKKyAgICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlz
dGVuZXI7CisgICAgYm9vbCBtYWRlUG9saWN5RGVjaXNpb247Cit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfcG9saWN5X2RlY2lzaW9uX2luaXQoV2ViS2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9u
KQoreworICAgIGRlY2lzaW9uLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGRl
Y2lzaW9uLCBXRUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJT04sIFdlYktpdFBvbGljeURlY2lzaW9u
UHJpdmF0ZSk7CisgICAgbmV3IChkZWNpc2lvbi0+cHJpdikgV2ViS2l0UG9saWN5RGVjaXNpb25Q
cml2YXRlKCk7CisgICAgZGVjaXNpb24tPnByaXYtPm1hZGVQb2xpY3lEZWNpc2lvbiA9IGZhbHNl
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRQb2xpY3lEZWNpc2lvbkZpbmFsaXplKEdPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICAgV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRlKiBwcml2ID0gV0VC
S0lUX1BPTElDWV9ERUNJU0lPTihvYmplY3QpLT5wcml2OworCisgICAgLy8gVGhpcyBpcyB0aGUg
ZGVmYXVsdCBjaG9pY2UgZm9yIGFsbCBwb2xpY3kgZGVjaXNpb25zIGluIFdlYlBhZ2VQcm94eS5j
cHAuCisgICAgaWYgKCFwcml2LT5tYWRlUG9saWN5RGVjaXNpb24pCisgICAgICAgIFdLRnJhbWVQ
b2xpY3lMaXN0ZW5lclVzZShwcml2LT5saXN0ZW5lcik7CisKKyAgICBwcml2LT5+V2ViS2l0UG9s
aWN5RGVjaXNpb25Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3BvbGljeV9k
ZWNpc2lvbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCit2b2lkIHdlYmtp
dFBvbGljeURlY2lzaW9uU2V0TGlzdGVuZXIoV2ViS2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9u
LCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIpCit7CisgICAgIFdFQktJVF9QT0xJ
Q1lfREVDSVNJT04oZGVjaXNpb24pLT5wcml2LT5saXN0ZW5lciA9IGxpc3RlbmVyOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2NsYXNzX2luaXQoV2ViS2l0UG9saWN5
RGVjaXNpb25DbGFzcyogZGVjaXNpb25DbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MoZGVjaXNpb25DbGFzcyk7CisgICAgb2JqZWN0Q2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0UG9saWN5RGVjaXNpb25GaW5hbGl6ZTsKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUoZGVjaXNpb25DbGFzcywgc2l6ZW9mKFdlYktpdFBvbGljeURlY2lzaW9u
UHJpdmF0ZSkpOworfQorCisvKioKKyAqIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fdXNlOgorICog
QGRlY2lzaW9uOiBhICNXZWJLaXRQb2xpY3lEZWNpc2lvbgorICoKKyAqIEFjY2VwdCB0aGUgYWN0
aW9uIHdoaWNoIHRyaWdnZXJkIHRoaXMgZGVjaXNpb24uCisgKi8KK3ZvaWQgd2Via2l0X3BvbGlj
eV9kZWNpc2lvbl91c2UoV2ViS2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BPTElDWV9ERUNJU0lPTihkZWNpc2lvbikpOworICAg
IFdLRnJhbWVQb2xpY3lMaXN0ZW5lclVzZShkZWNpc2lvbi0+cHJpdi0+bGlzdGVuZXIpOworICAg
IGRlY2lzaW9uLT5wcml2LT5tYWRlUG9saWN5RGVjaXNpb24gPSB0cnVlOworfQorCisvKioKKyAq
IHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlOgorICogQGRlY2lzaW9uOiBhICNXZWJLaXRQ
b2xpY3lEZWNpc2lvbgorICoKKyAqIElnbm9yZSB0aGUgYWN0aW9uIHdoaWNoIHRyaWdnZXJkIHRo
aXMgZGVjaXNpb24uIEZvciBpbnN0YW5jZSwgZm9yIGEKKyAqICNXZWJLaXRSZXNwb25zZVBvbGlj
eURlY2lzaW9uLCB0aGlzIHdvdWxkIGNhbmNlbCB0aGUgcmVxdWVzdC4KKyAqLwordm9pZCB3ZWJr
aXRfcG9saWN5X2RlY2lzaW9uX2lnbm9yZShXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24p
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfUE9MSUNZX0RFQ0lTSU9OKGRlY2lz
aW9uKSk7CisgICAgV0tGcmFtZVBvbGljeUxpc3RlbmVySWdub3JlKGRlY2lzaW9uLT5wcml2LT5s
aXN0ZW5lcik7CisgICAgZGVjaXNpb24tPnByaXYtPm1hZGVQb2xpY3lEZWNpc2lvbiA9IHRydWU7
Cit9CisKKy8qKgorICogd2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZDoKKyAqIEBkZWNp
c2lvbjogYSAjV2ViS2l0UG9saWN5RGVjaXNpb24KKyAqCisgKiBTcGF3biBhIGRvd25sb2FkIGZy
b20gdGhpcyBkZWNpc2lvbi4KKyAqLwordm9pZCB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25s
b2FkKFdlYktpdFBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19QT0xJQ1lfREVDSVNJT04oZGVjaXNpb24pKTsKKyAgICBXS0ZyYW1lUG9s
aWN5TGlzdGVuZXJEb3dubG9hZChkZWNpc2lvbi0+cHJpdi0+bGlzdGVuZXIpOworICAgIGRlY2lz
aW9uLT5wcml2LT5tYWRlUG9saWN5RGVjaXNpb24gPSB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24uaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWNjYTVmOWMzNTRlYmRhNTBlOTJkOWRkZDA4NmI2Yzk5ZTc2MDNlZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGlj
eURlY2lzaW9uLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBj
YW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0UG9saWN5
RGVjaXNpb25faAorI2RlZmluZSBXZWJLaXRQb2xpY3lEZWNpc2lvbl9oCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfUE9MSUNZX0RFQ0lTSU9OICAgICAgICAg
ICAgKHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1BP
TElDWV9ERUNJU0lPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBXRUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJT04sIFdlYktpdFBvbGljeURlY2lzaW9u
KSkKKyNkZWZpbmUgV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJT04s
IFdlYktpdFBvbGljeURlY2lzaW9uQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfUE9MSUNZX0RF
Q0lTSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdF
QktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTikpCisjZGVmaW5lIFdFQktJVF9JU19QT0xJQ1lfREVD
SVNJT05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VC
S0lUX1RZUEVfUE9MSUNZX0RFQ0lTSU9OKSkKKyNkZWZpbmUgV0VCS0lUX1BPTElDWV9ERUNJU0lP
Tl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJL
SVRfVFlQRV9QT0xJQ1lfREVDSVNJT04sIFdlYktpdFBvbGljeURlY2lzaW9uQ2xhc3MpKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0UG9saWN5RGVjaXNpb24gICAgICAgIFdlYktpdFBvbGljeURl
Y2lzaW9uOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFBvbGljeURlY2lzaW9uQ2xhc3MgICBXZWJL
aXRQb2xpY3lEZWNpc2lvbkNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFBvbGljeURlY2lz
aW9uUHJpdmF0ZSBXZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0
UG9saWN5RGVjaXNpb24geworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUg
PiovCisgICAgV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRlICpwcml2OworfTsKKworc3RydWN0
IF9XZWJLaXRQb2xpY3lEZWNpc2lvbkNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3BvbGljeV9kZWNpc2lvbl9nZXRf
dHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3BvbGljeV9kZWNpc2lvbl91
c2UgICAgICAoV2ViS2l0UG9saWN5RGVjaXNpb24gKmRlY2lzaW9uKTsKKworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2lnbm9yZSAgIChXZWJLaXRQb2xpY3lEZWNpc2lv
biAqZGVjaXNpb24pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9wb2xpY3lfZGVjaXNpb25f
ZG93bmxvYWQgKFdlYktpdFBvbGljeURlY2lzaW9uICpkZWNpc2lvbik7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjU4MGM4
M2U5ZDgzOTU2YjU3MDRiYzVjMGRmYTBmMTk1YTJmZTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRl
LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdFBvbGljeURlY2lzaW9uUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdFBv
bGljeURlY2lzaW9uUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRQb2xpY3lEZWNpc2lvbi5o
IgorI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgorCit2b2lkIHdlYmtpdFBvbGljeURlY2lz
aW9uU2V0TGlzdGVuZXIoV2ViS2l0UG9saWN5RGVjaXNpb24qLCBXS0ZyYW1lUG9saWN5TGlzdGVu
ZXJSZWYpOworCisjZW5kaWYgLy8gV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvblByaXZhdGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5o
CmluZGV4IDNhZDZjMTUzNmU0Nzc1YWViMWI2ZGM2NWEyZTBkZDViMGQzZGUzYTQuLmU1OTNhY2Nj
MTcyMWFkM2RjNDY3YWYzN2IzYWRjYzI5N2E2MDAxMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKQEAgLTMyLDE1ICszMiwxMSBAQAog
I2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCi1HX0JFR0lO
X0RFQ0xTCi0KICNkZWZpbmUgV0VCS0lUX1BBUkFNX1JFQURBQkxFIChzdGF0aWNfY2FzdDxHUGFy
YW1GbGFncz4oR19QQVJBTV9SRUFEQUJMRXxHX1BBUkFNX1NUQVRJQ19OQU1FfEdfUEFSQU1fU1RB
VElDX05JQ0t8R19QQVJBTV9TVEFUSUNfQkxVUkIpKQogI2RlZmluZSBXRUJLSVRfUEFSQU1fV1JJ
VEFCTEUgKHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1dSSVRBQkxFfEdfUEFSQU1f
U1RBVElDX05BTUV8R19QQVJBTV9TVEFUSUNfTklDS3xHX1BBUkFNX1NUQVRJQ19CTFVSQikpCiAj
ZGVmaW5lIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgKHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihH
X1BBUkFNX1JFQURXUklURXxHX1BBUkFNX1NUQVRJQ19OQU1FfEdfUEFSQU1fU1RBVElDX05JQ0t8
R19QQVJBTV9TVEFUSUNfQkxVUkIpKQogCiAjZGVmaW5lIENPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0od2Via2l0TmFtZSwgd2ViY29yZU5hbWUpIFwKLSAgICAgICAgQ09NUElMRV9BU1NFUlQo
aW50KHdlYmtpdE5hbWUpID09IGludChXZWJDb3JlOjp3ZWJjb3JlTmFtZSksIG1pc21hdGNoaW5n
RW51bXMpCi0KLUdfRU5EX0RFQ0xTCisgICAgICAgIENPTVBJTEVfQVNTRVJUKGludCh3ZWJraXRO
YW1lKSA9PSBpbnQod2ViY29yZU5hbWUpLCBtaXNtYXRjaGluZ0VudW1zKQogCiAjZW5kaWYgLy8g
V2ViS2l0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGNmOWM3ODUxYTMzYTcyOTY5OTZhNGZjOWVjMDAyNDMw
OWU3ODk1MjguLmI1MTU0YzAxNWE4NzVmNmRlMWI5NjQxY2VhY2RhYTYyOWM5N2I1MmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiV2ViS2l0RW51bVR5cGVzLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0RXJyb3IuaCIKICNpbmNsdWRlICJXZWJLaXRNYXJzaGFsLmgiCisjaW5jbHVkZSAi
V2ViS2l0UG9saWN5Q2xpZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFNldHRpbmdzUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFVJQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2Vi
Q29udGV4dFByaXZhdGUuaCIKQEAgLTU1LDYgKzU2LDggQEAgZW51bSB7CiAgICAgU0NSSVBUX0NP
TkZJUk0sCiAgICAgU0NSSVBUX1BST01QVCwKIAorICAgIERFQ0lERV9QT0xJQ1ksCisKICAgICBM
QVNUX1NJR05BTAogfTsKIApAQCAtMTYzLDE4ICsxNjYsMjAgQEAgc3RhdGljIHZvaWQgd2Via2l0
V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIAogICAgIHdlYmtpdFdlYlZpZXdC
YXNlQ3JlYXRlV2ViUGFnZSh3ZWJWaWV3QmFzZSwgd2Via2l0V2ViQ29udGV4dEdldFdLQ29udGV4
dChwcml2LT5jb250ZXh0KSwgMCk7CiAKLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRX
ZWJWaWV3QmFzZUdldFBhZ2Uod2ViVmlld0Jhc2UpOworICAgIFdLUGFnZVJlZiBwYWdlID0gdG9B
UEkod2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKHdlYlZpZXdCYXNlKSk7CiAKICAgICBzdGF0aWMg
R1JlZlB0cjxXZWJLaXRXZWJMb2FkZXJDbGllbnQ+IGRlZmF1bHRMb2FkZXJDbGllbnQgPSBhZG9w
dEdSZWYoV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9X
RUJfTE9BREVSX0NMSUVOVCwgTlVMTCkpKTsKLSAgICB3ZWJraXRXZWJWaWV3U2V0TG9hZGVyQ2xp
ZW50KHdlYlZpZXcsIGRlZmF1bHRMb2FkZXJDbGllbnQuZ2V0KCksIHRvQVBJKHBhZ2UpKTsKKyAg
ICB3ZWJraXRXZWJWaWV3U2V0TG9hZGVyQ2xpZW50KHdlYlZpZXcsIGRlZmF1bHRMb2FkZXJDbGll
bnQuZ2V0KCksIHBhZ2UpOwogCiAgICAgc3RhdGljIEdSZWZQdHI8V2ViS2l0VUlDbGllbnQ+IGRl
ZmF1bHRVSUNsaWVudCA9IGFkb3B0R1JlZihXRUJLSVRfVUlfQ0xJRU5UKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9VSV9DTElFTlQsIE5VTEwpKSk7CiAgICAgcHJpdi0+dWlDbGllbnQgPSBkZWZh
dWx0VUlDbGllbnQuZ2V0KCk7Ci0gICAgd2Via2l0VUlDbGllbnRBdHRhY2hVSUNsaWVudFRvUGFn
ZShwcml2LT51aUNsaWVudC5nZXQoKSwgdG9BUEkocGFnZSkpOworICAgIHdlYmtpdFVJQ2xpZW50
QXR0YWNoVUlDbGllbnRUb1BhZ2UocHJpdi0+dWlDbGllbnQuZ2V0KCksIHBhZ2UpOwogCi0gICAg
cHJpdi0+YmFja0ZvcndhcmRMaXN0ID0gYWRvcHRHUmVmKHdlYmtpdEJhY2tGb3J3YXJkTGlzdENy
ZWF0ZShXS1BhZ2VHZXRCYWNrRm9yd2FyZExpc3QodG9BUEkocGFnZSkpKSk7CisgICAgcHJpdi0+
YmFja0ZvcndhcmRMaXN0ID0gYWRvcHRHUmVmKHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZShX
S1BhZ2VHZXRCYWNrRm9yd2FyZExpc3QocGFnZSkpKTsKICAgICBwcml2LT5zZXR0aW5ncyA9IGFk
b3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkpOwotICAgIHdlYmtpdFNldHRpbmdzQXR0YWNo
U2V0dGluZ3NUb1BhZ2UocHJpdi0+c2V0dGluZ3MuZ2V0KCksIHRvQVBJKHBhZ2UpKTsKKyAgICB3
ZWJraXRTZXR0aW5nc0F0dGFjaFNldHRpbmdzVG9QYWdlKHByaXYtPnNldHRpbmdzLmdldCgpLCBw
YWdlKTsKKworICAgIGF0dGFjaFBvbGljeUNsaWVudFRvUGFnZShwYWdlKTsKIH0KIAogc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCkBAIC01NTQs
NiArNTU5LDYyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktp
dFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgICAgICAgICAgICAgIEdf
VFlQRV9CT09MRUFOLCAzLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcs
IEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9QT0lOVEVSKTsKIAorICAgIC8qKgorICAgICAqIFdlYktp
dFBvbGljeUNsaWVudDo6ZGVjaWRlLXBvbGljeQorICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJL
aXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBkZWNpc2lv
bjogdGhlICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24KKyAgICAgKiBAZGVjaXNpb25f
dHlwZTogYSAjV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlIGRlbm90aW5nIHRoZSB0eXBlIG9mIEBk
ZWNpc2lvbgorICAgICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5k
bGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0
byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25h
bCBpcyBlbWl0dGVkIHdoZW4gV2ViS2l0IGlzIHJlcXVlc3RpbmcgdGhlIGNsaWVudCB0byBkZWNp
ZGUgYSBwb2xpY3kKKyAgICAgKiBkZWNpc2lvbiwgc3VjaCBhcyB3aGV0aGVyIHRvIG5hdmlnYXRl
IHRvIGEgcGFnZSwgb3BlbiBhIG5ldyB3aW5kb3cgb3Igd2hldGhlciBvcgorICAgICAqIG5vdCB0
byBkb3dubG9hZCBhIHJlc291cmNlLiBUaGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
biBwYXNzZWQgaW4gdGhlCisgICAgICogQGRlY2lzaW9uIGFyZ3VtZW50IGlzIGEgZ2VuZXJpYyB0
eXBlLCBidXQgc2hvdWxkIGJlIGNhc3RlZCB0byBhIG1vcmUKKyAgICAgKiBzcGVjaWZpYyB0eXBl
IHdoZW4gbWFraW5nIHRoZSBkZWNpc2lvbi4gRm9yIGV4YW1wbGU6CisgICAgICoKKyAgICAgKiA8
aW5mb3JtYWxleGFtcGxlPjxwcm9ncmFtbGlzdGluZz4KKyAgICAgKiBnYm9vbGVhbgorICAgICAq
IGRlY2lkZV9wb2xpY3lfY2IgKFdlYktpdFdlYlZpZXcgKndlYl92aWV3LAorICAgICAqICAgICAg
ICAgICAgICAgICAgIFdlYktpdFBvbGljeURlY2lzaW9uICpkZWNpc2lvbiwKKyAgICAgKiAgICAg
ICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgdHlwZSkKKyAgICAgKiB7Cisg
ICAgICogICAgIHN3aXRjaCAodHlwZSkgeworICAgICAqICAgICBjYXNlIFdFQktJVF9QT0xJQ1lf
REVDSVNJT05fVFlQRV9OQVZJR0FUSU9OX0FDVElPTjoKKyAgICAgKiAgICAgICAgIFdlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbiAqbmF2aWdhdGlvbl9kZWNpc2lvbiA9IFdFQktJVF9OQVZJ
R0FUSU9OX1BPTElDWV9ERUNJU0lPTiAoZGVjaXNpb24pOworICAgICAqICAgICAgICAgLzwhLS0g
LS0+KiBNYWtlIGEgcG9saWN5IGRlY2lzaW9uIGhlcmUuICo8IS0tIC0tPi8KKyAgICAgKiAgICAg
ICAgIGJyZWFrOworICAgICAqICAgICBjYXNlIFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9O
RVdfV0lORE9XX0FDVElPTjoKKyAgICAgKiAgICAgICAgIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbiAqbmF2aWdhdGlvbl9kZWNpc2lvbiA9IFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9E
RUNJU0lPTiAoZGVjaXNpb24pOworICAgICAqICAgICAgICAgLzwhLS0gLS0+KiBNYWtlIGEgcG9s
aWN5IGRlY2lzaW9uIGhlcmUuICo8IS0tIC0tPi8KKyAgICAgKiAgICAgICAgIGJyZWFrOworICAg
ICAqICAgICBjYXNlIFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9SRVNQT05TRToKKyAgICAg
KiAgICAgICAgIFdlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24gKnJlc3BvbnNlID0gV0VCS0lU
X1JFU1BPTlNFX1BPTElDWV9ERUNJU0lPTiAoZGVjaXNpb24pOworICAgICAqICAgICAgICAgLzwh
LS0gLS0+KiBNYWtlIGEgcG9saWN5IGRlY2lzaW9uIGhlcmUuICo8IS0tIC0tPi8KKyAgICAgKiAg
ICAgICAgIGJyZWFrOworICAgICAqICAgICBkZWZhdWx0OgorICAgICAqICAgICAgICAgLzwhLS0g
LS0+KiBNYWtpbmcgbm8gZGVjaXNpb24gcmVzdWx0cyBpbiB3ZWJraXRfcG9saWN5X2RlY2lzaW9u
X3VzZSgpLiAqPCEtLSAtLT4vCisgICAgICogICAgICAgICBicmVhazsKKyAgICAgKiAgICAgfQor
ICAgICAqIH0KKyAgICAgKiA8L3Byb2dyYW1saXN0aW5nPjwvaW5mb3JtYWxleGFtcGxlPgorICAg
ICAqCisgICAgICogSXQgaXMgcG9zc2libGUgdG8gbWFrZSBwb2xpY3kgZGVjaXNpb24gYXN5bmNo
cm9ub3VzLCBieSBzaW1wbHkgY2FsbGluZyBnX29iamVjdF9yZWYoKQorICAgICAqIG9uIHRoZSBA
ZGVjaXNpb24gYXJndW1lbnQuIElmIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyByZW1vdmVkIG9uIGEg
I1dlYktpdFBvbGljeURlY2lzaW9uCisgICAgICogYW5kIG5vIGRlY2lzaW9uIGhhcyBiZWVuIG1h
ZGUgZXhwbGljaXRseSwgd2Via2l0X3BvbGljeV9kZWNpc2lvbl91c2UoKSB3aWxsIGJlIHRoZQor
ICAgICAqIGRlZmF1bHQgcG9saWN5IGRlY2lzaW9uLgorICAgICAqLworICAgIHNpZ25hbHNbREVD
SURFX1BPTElDWV0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImRlY2lkZS1wb2xpY3kiLAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAg
R19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgZGVjaWRlX3BvbGljeSksCisgICAg
ICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAgLyog
YWNjdW11bGF0b3IgZGF0YSAqLywKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFs
X0JPT0xFQU5fX09CSkVDVF9FTlVNLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xF
QU4sIDIsIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJT04sCisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
VFlQRV9QT0xJQ1lfREVDSVNJT05fVFlQRSk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0xvYWRD
aGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQp
CkBAIC02NTksNiArNzIwLDEyIEBAIFdLU3RyaW5nUmVmIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2Ny
aXB0UHJvbXB0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IENTdHJpCiAgICAgcmV0dXJu
IHRleHQgPyBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0ZXh0LmdldCgpKSA6IDA7CiB9
CiAKK3ZvaWQgd2Via2l0V2ViVmlld01ha2VQb2xpY3lEZWNpc2lvbihXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgdHlwZSwgV2ViS2l0UG9saWN5RGVjaXNp
b24qIGRlY2lzaW9uKQoreworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFs
X2VtaXQod2ViVmlldywgc2lnbmFsc1tERUNJREVfUE9MSUNZXSwgMCwgZGVjaXNpb24sIHR5cGUs
ICZyZXR1cm5WYWx1ZSk7Cit9CisKIC8qKgogICogd2Via2l0X3dlYl92aWV3X25ldzoKICAqCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5k
ZXggYTI1YzQzOGRkOTAxOTM1NDBiMDU1ZmY2YzY3NGZhN2FkMzY3ZWY4MS4uOWRjMWNhZTgxZGNh
MTc4ZWRmMDYyNzRhZjM4NTg2MTVjODkyNWU3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMzUsOSArMzUsNDQgQEAKICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVz
Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oPgogCiBHX0JFR0lO
X0RFQ0xTCiAKKy8qKgorICogV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlOgorICogQFdFQktJVF9Q
T0xJQ1lfREVDSVNJT05fVFlQRV9OQVZJR0FUSU9OX0FDVElPTjogVGhpcyB0eXBlIG9mIHBvbGlj
eSBkZWNpc2lvbgorICogICBpcyByZXF1ZXN0ZWQgd2hlbiBXZWJLaXQgaXMgYWJvdXQgdG8gbmF2
aWdhdGUgdG8gYSBuZXcgcGFnZSBpbiBlaXRoZXIgdGhlCisgKiAgIG1haW4gZnJhbWUgb3IgYSBz
dWJmcmFtZS4gQWNjZXB0YWJsZSBwb2xpY3kgZGVjaXNpb25zIGFyZSBlaXRoZXIKKyAqICAgd2Vi
a2l0X3BvbGljeV9kZWNpc2lvbl91c2Ugb3Igd2Via2l0X3BvbGljeV9kZWNpc2lvbl9pZ25vcmUu
IFRoaXMKKyAqICAgdHlwZSBvZiBwb2xpY3kgZGVjaXNpb24gaXMgYWx3YXlzIGEgI1dlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbi4KKyAqIEBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVf
TkVXX1dJTkRPV19BQ1RJT046IFRoaXMgdHlwZSBvZiBwb2xpY3kgZGVjaXNpb24KKyAqICAgaXMg
cmVxdWVzdGVkIHdoZW4gV2ViS2l0IGlzIGFib3V0IHRvIGNyZWF0ZSBhIG5ldyB3aW5kb3cuIEFj
Y2VwdGFibGUgcG9saWN5CisgKiAgIGRlY2lzaW9ucyBhcmUgZWl0aGVyIHdlYmtpdF9wb2xpY3lf
ZGVjaXNpb25fdXNlKCkgb3IKKyAqICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9pZ25vcmUuIFRo
aXMgdHlwZSBvZiBwb2xpY3kgZGVjaXNpb24gaXMgYWx3YXlzCisgKiAgIGEgI1dlYktpdE5hdmln
YXRpb25Qb2xpY3lEZWNpc2lvbi4gVGhpcyBzaWduYWwgaXMgdXNlZnVsIGZvciBpbXBsZW1lbnRp
bmcKKyAqICAgc3BlY2lhbCBhY3Rpb25zIGZvciBuZXcgd2luZG93cywgc3VjaCBhcyBmb3JjaW5n
IHRoZSBuZXcgd2luZG93IHRvIG9wZW4KKyAqICAgaW4gYSB0YWIgd2hlbiBhIGtleWJvYXJkIG1v
ZGlmaWVyIGlzIGFjdGl2ZSBvciBoYW5kbGluZyBhIHNwZWNpYWwKKyAqICAgdGFyZ2V0IGF0dHJp
YnV0ZSBvbiAmbHQ7YSZndDsgZWxlbWVudHMuCisgKiBAV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9U
WVBFX1JFU1BPTlNFOiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gV2ViS2l0IGhhcworICog
ICByZWNlaXZlZCBhIHJlc3BvbnNlIGZvciBhIG5ldHdvcmsgcmVzb3VyY2UgYW5kIGlzIGFib3V0
IHRvIHN0YXJ0IHRoZSBsb2FkLgorICogICBOb3RlIHRoYXQgdGhlc2UgcmVzb3VyY2VzIGluY2x1
ZGUgYWxsIHN1YnJlc291cmNlcyBvZiBhIHBhZ2Ugc3VjaCBhcyBpbWFnZXMKKyAqICAgYW5kIHN0
eWxlc2hlZXRzIGFzIHdlbGwgYXMgbWFpbiBkb2N1bWVudHMuIEFwcHJvcHJpYXRlIHBvbGljeSBy
ZXNwb25zZXMgdG8KKyAqICAgdGhpcyBzaWduYWwgYXJlIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25f
dXNlKCksIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlKCksCisgKiAgIG9yIHdlYmtpdF9w
b2xpY3lfZGVjaXNpb25fZG93bmxvYWQoKS4gVGhpcyB0eXBlIG9mIHBvbGljeSBkZWNpc2lvbiBp
cyBhbHdheXMKKyAqICAgYSAjV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvbi4gVGhpcyBpcyBz
aWduYWwgaXMgdXNlZnVsIGZvciBmb3JjaW5nCisgKiAgIHNvbWUgdHlwZXMgb2YgcmVzb3VyY2Vz
IHRvIGJlIGRvd25sb2FkZWQgcmF0aGVyIHRoYW4gcmVuZGVyZWQgaW4gdGhlIFdlYlZpZXcKKyAq
ICAgb3IgdG8gYmxvY2sgdGhlIHRyYW5zZmVyIG9mIHJlc291cmNlcyBlbnRpcmVseS4KKyAqCisg
KiBFbnVtIHZhbHVlcyB1c2VkIGZvciBkZXRlcm1pbmluZyB0aGUgdHlwZSBvZiBhIHBvbGljeSBk
ZWNpc2lvbiBkdXJpbmcKKyAqIFdlYktpdFdlYlZpZXc6OmRlY2lkZS1wb2xpY3kuCisgKi8KK3R5
cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05BVklHQVRJT05f
QUNUSU9OLAorICAgIFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9ORVdfV0lORE9XX0FDVElP
TiwKKyAgICBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0UsCit9IFdlYktpdFBv
bGljeURlY2lzaW9uVHlwZTsKKwogI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfVklFVyAgICAgICAg
ICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3R5cGUoKSkKICNkZWZpbmUgV0VCS0lUX1dFQl9WSUVX
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3KSkKICNkZWZpbmUgV0VCS0lUX1dFQl9WSUVX
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3Q2xhc3MpKQpAQCAtODEsMjYgKzExNiwyOSBA
QCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgewogc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3Mgewog
ICAgIFdlYktpdFdlYlZpZXdCYXNlQ2xhc3MgcGFyZW50OwogCi0gICAgdm9pZCAgICAgICAoKiBs
b2FkX2NoYW5nZWQpICAgKFdlYktpdFdlYlZpZXcgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TG9hZEV2ZW50IGxvYWRfZXZlbnQpOwotICAgIGdi
b29sZWFuICAgKCogbG9hZF9mYWlsZWQpICAgIChXZWJLaXRXZWJWaWV3ICAqd2ViX3ZpZXcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExvYWRFdmVudCBsb2FkX2V2
ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAq
ZmFpbGluZ191cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAg
ICAgICAgICplcnJvcik7Ci0KLSAgICBHdGtXaWRnZXQgKigqIGNyZWF0ZSkgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgKndlYl92aWV3KTsKLSAgICB2b2lkICAgICAgICgqIHJlYWR5X3RvX3Nob3cp
ICAoV2ViS2l0V2ViVmlldyAgKndlYl92aWV3KTsKLSAgICB2b2lkICAgICAgICgqIGNsb3NlKSAg
ICAgICAgICAoV2ViS2l0V2ViVmlldyAgKndlYl92aWV3KTsKLQotICAgIGdib29sZWFuICAgKCog
c2NyaXB0X2FsZXJ0KSAgIChXZWJLaXRXZWJWaWV3ICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICptZXNzYWdlKTsKLSAgICBnYm9v
bGVhbiAgICgqIHNjcmlwdF9jb25maXJtKSAoV2ViS2l0V2ViVmlldyAgKndlYl92aWV3LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAqbWVzc2FnZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgKmNvbmZp
cm1lZCk7Ci0gICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfcHJvbXB0KSAgKFdlYktpdFdlYlZpZXcg
ICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgICAgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdjaGFyICAgICpkZWZhdWx0X3RleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdjaGFyICAgICAgICAgKip0ZXh0KTsKKyAgICB2b2lkICAgICAgICgqIGxvYWRfY2hhbmdl
ZCkgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExvYWRFdmVudCAgICAgICAgICAgIGxvYWRfZXZl
bnQpOworICAgIGdib29sZWFuICAgKCogbG9hZF9mYWlsZWQpICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0TG9hZEV2ZW50ICAgICAgICAgICAgbG9hZF9ldmVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqZmFpbGluZ191cmks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAg
ICAgICAgKmVycm9yKTsKKworICAgIEd0a1dpZGdldCAqKCogY3JlYXRlKSAgICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisgICAgdm9pZCAgICAgICAoKiByZWFk
eV90b19zaG93KSAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKyAgICB2
b2lkICAgICAgICgqIGNsb3NlKSAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAq
d2ViX3ZpZXcpOworCisgICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfYWxlcnQpICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICptZXNzYWdlKTsKKyAgICBnYm9vbGVh
biAgICgqIHNjcmlwdF9jb25maXJtKSAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3Zp
ZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAg
ICAgICAgICAgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdi
b29sZWFuICAgICAgICAgICAgICAgICAgKmNvbmZpcm1lZCk7CisgICAgZ2Jvb2xlYW4gICAoKiBz
Y3JpcHRfcHJvbXB0KSAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAg
ICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hh
ciAgICAgICAgICAgICAgICpkZWZhdWx0X3RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdjaGFyICAgICAgICAgICAgICAgICAgICAqKnRleHQpOworICAgIGdib29sZWFu
ICAgKCogZGVjaWRlX3BvbGljeSkgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmll
dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNp
b24gICAgICAqZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdFBvbGljeURlY2lzaW9uVHlwZSAgdHlwZSk7CiAKICAgICAvKiBQYWRkaW5nIGZvciBmdXR1
cmUgZXhwYW5zaW9uICovCiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d1ByaXZhdGUuaAppbmRleCA1YzgxNjFhZmQ0OThkZjcyMjg2NDExYmYwODk2MGJhNDExN2Q3ZDA4
Li42NjM4NmQwMjhlYTczMzVhNmJlNjIyZGVkMDhjNmIxYmM5MjA1MWQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRl
LmgKQEAgLTQyLDUgKzQyLDYgQEAgdm9pZCB3ZWJraXRXZWJWaWV3Q2xvc2VQYWdlKFdlYktpdFdl
YlZpZXcqKTsKIHZvaWQgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRBbGVydChXZWJLaXRXZWJW
aWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7CiBib29sIHdlYmtpdFdlYlZpZXdSdW5KYXZh
U2NyaXB0Q29uZmlybShXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7CiBX
S1N0cmluZ1JlZiB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdFByb21wdChXZWJLaXRXZWJWaWV3
KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSwgY29uc3QgQ1N0cmluZyYgZGVmYXVsdFRleHQpOwor
dm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBvbGljeURlY2lzaW9uKFdlYktpdFdlYlZpZXcqLCBXZWJL
aXRQb2xpY3lEZWNpc2lvblR5cGUsIFdlYktpdFBvbGljeURlY2lzaW9uKik7CiAKICNlbmRpZiAv
LyBXZWJLaXRXZWJWaWV3UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCBjNTEzOTU5
YzI2Y2UwNDQ4ZDk5MmQwNmVmNTc4ODZhYTY2NjRiZjMwLi4yOGRlMjlmYTcwNjZkY2VjMzdkNTBl
NTlhNTI0NzhiYjFkZTg0OTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTIwLDYgKzIwLDgg
QEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0VVJJUmVxdWVzdC54bWwiLz4KICAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0VVJJUmVzcG9uc2UueG1sIi8+CiAgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMueG1sIi8+CisgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFBvbGljeURlY2lzaW9uLnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24ueG1sIi8+CiAg
ICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEVycm9yLnhtbCIvPgogICA8L2NoYXB0ZXI+
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IDBkNjY2NGQ0ODY0NDZmZTNiYWJiNzQw
M2RlN2ZhODFmMDA1ZDQ2ZjIuLmE1MzM2MDlkYTc3OGRlZmM2YWE3OWY3MDcwOTQ4MmViMjU5NDIw
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtNDcsNiArNDcsNyBAQCB3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X3R5cGUKIDxUSVRMRT5XZWJLaXRXZWJWaWV3PC9USVRMRT4KIFdlYktp
dFdlYlZpZXcKIFdlYktpdExvYWRFdmVudAorV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlCiB3ZWJr
aXRfd2ViX3ZpZXdfbmV3CiB3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dAogd2Via2l0
X3dlYl92aWV3X2dldF9jb250ZXh0CkBAIC0yODcsNiArMjg4LDUyIEBAIHdlYmtpdF93aW5kb3df
cHJvcGVydGllc19nZXRfdHlwZQogPC9TRUNUSU9OPgogCiA8U0VDVElPTj4KKzxGSUxFPldlYktp
dFBvbGljeURlY2lzaW9uPC9GSUxFPgorV2ViS2l0UG9saWN5RGVjaXNpb24KK3dlYmtpdF9wb2xp
Y3lfZGVjaXNpb25fZG93bmxvYWQKK3dlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlCit3ZWJr
aXRfcG9saWN5X2RlY2lzaW9uX3VzZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdFBv
bGljeURlY2lzaW9uQ2xhc3MKK1dFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTgorV0VCS0lUX1BP
TElDWV9ERUNJU0lPTgorV0VCS0lUX0lTX1BPTElDWV9ERUNJU0lPTgorV0VCS0lUX1BPTElDWV9E
RUNJU0lPTl9DTEFTUworV0VCS0lUX0lTX1BPTElDWV9ERUNJU0lPTl9DTEFTUworV0VCS0lUX1BP
TElDWV9ERUNJU0lPTl9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdFBv
bGljeURlY2lzaW9uUHJpdmF0ZQord2Via2l0X3BvbGljeV9kZWNpc2lvbl9nZXRfdHlwZQorPC9T
RUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bjwvRklMRT4KK1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbgorV2ViS2l0TW91c2VCdXR0
b24KK1dlYktpdE5hdmlnYXRpb25UeXBlCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNp
b25fZ2V0X2ZyYW1lX25hbWUKK3dlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRf
bW9kaWZpZXJzCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vdXNlX2J1
dHRvbgord2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9uYXZpZ2F0aW9uX3R5
cGUKK3dlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfcmVxdWVzdAorCis8U1VC
U0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNsYXNzCitX
RUJLSVRfVFlQRV9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTgorV0VCS0lUX05BVklHQVRJT05f
UE9MSUNZX0RFQ0lTSU9OCitXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04KK1dF
QktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTl9DTEFTUworV0VCS0lUX0lTX05BVklHQVRJ
T05fUE9MSUNZX0RFQ0lTSU9OX0NMQVNTCitXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJ
T05fR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXROYXZpZ2F0aW9uUG9s
aWN5RGVjaXNpb25Qcml2YXRlCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0
X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRFcnJvcjwvRklMRT4K
IFdFQktJVF9ORVRXT1JLX0VSUk9SCiBXRUJLSVRfUExVR0lOX0VSUk9SCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCmluZGV4
IDE3NTlkMDQ5OWUzNGRjMjVlOTg5ZjM0YTgyM2RlYzc2M2Y4M2UyYWEuLjdiY2MxYzMzZWFlYWYy
MmI3Y2JkZTJhMTgwNjBjZmU3ODZhMTVjNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC0zLDcgKzMsOCBAQCBU
RVNUX1BST0dTICs9IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZp
ZXcgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50
IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFNldHRpbmdzIFwKLQlQcm9n
cmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdAorCVByb2dyYW1zL1dlYktp
dDJBUElUZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVz
dHMvVGVzdFdlYktpdFBvbGljeUNsaWVudAogCiBub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BS
T0dTKQogCkBAIC04Myw2ICs4NCwxMiBAQCBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJh
Y2tGb3J3YXJkTGlzdF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncwogUHJvZ3Jh
bXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfTERBREQgPSAkKHdlYmtpdDJf
dGVzdHNfbGRhZGQpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlz
dF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCiAKK1Byb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0V2ViS2l0UG9saWN5Q2xpZW50X1NPVVJDRVMgPSBcCisgICAgICAgIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQu
Y3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFBvbGljeUNsaWVudF9DUFBG
TEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0V2ViS2l0UG9saWN5Q2xpZW50X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQor
UHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCiBpZiBIQVZFX0FUU1BJMgogUHJvZ3JhbXNfV2Vi
S2l0MkFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX1NPVVJDRVMgPSBcCiAJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIu
Y3BwCkBAIC05NSw0ICsxMDIsNCBAQCBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktp
dEFjY2Vzc2liaWxpdHlfU09VUkNFUyA9IFwKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0
V2ViS2l0QWNjZXNzaWJpbGl0eV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykg
JChBVFNQSTJfQ0ZMQUdTKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRBY2Nl
c3NpYmlsaXR5X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKSAkKEFUU1BJMl9MSUJTKQog
UHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5X0xERkxBR1Mg
PSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLWVuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQorZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Nzc0Y2RlZTk3NzMyYzBkMmNkZTZjZDQyMDhiOGY0ODlmODYzYWQ0NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xp
Y3lDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2lu
Z1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCitjbGFzcyBQb2xpY3lDbGllbnRUZXN0OiBwdWJsaWMgTG9hZFRy
YWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShQb2xpY3lD
bGllbnRUZXN0KTsKKworICAgIGVudW0gUG9saWN5RGVjaXNpb25SZXNwb25zZSB7CisgICAgICAg
IFVzZSwKKyAgICAgICAgSWdub3JlLAorICAgICAgICBEb3dubG9hZCwKKyAgICAgICAgTm9uZQor
ICAgIH07CisKKyAgICBQb2xpY3lDbGllbnRUZXN0KCkKKyAgICAgICAgOiBMb2FkVHJhY2tpbmdU
ZXN0KCkKKyAgICAgICAgLCBtX3BvbGljeURlY2lzaW9uUmVzcG9uc2UoTm9uZSkKKyAgICAgICAg
LCBtX3BvbGljeURlY2lzaW9uVHlwZUZpbHRlcigwKQorICAgICAgICAsIG1fcmVzcG9uZFRvUG9s
aWN5RGVjaXNpb25Bc3luY2hyb25vdXNseShmYWxzZSkKKyAgICAgICAgLCBtX2hhbHRNYWluTG9v
cEFmdGVyTWFraW5nRGVjaXNpb24oZmFsc2UpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fd2ViVmlldywgImRlY2lkZS1wb2xpY3kiLCBHX0NBTExCQUNLKGRlY2lkZVBvbGljeUNh
bGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHF1aXRNYWluTG9v
cExhdGVyKEdNYWluTG9vcCogbG9vcCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
bG9vcCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBy
ZXNwb25kVG9Qb2xpY3lEZWNpc2lvbihQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBXZWJLaXRQb2xp
Y3lEZWNpc2lvbiogZGVjaXNpb24pCisgICAgeworICAgICAgICBzd2l0Y2ggKHRlc3QtPm1fcG9s
aWN5RGVjaXNpb25SZXNwb25zZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHdl
YmtpdF9wb2xpY3lfZGVjaXNpb25fdXNlKGRlY2lzaW9uKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIElnbm9yZToKKyAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25f
aWdub3JlKGRlY2lzaW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERvd25s
b2FkOgorICAgICAgICAgICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lv
bik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb25lOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGVzdC0+bV9oYWx0TWFpbkxvb3BBZnRl
ck1ha2luZ0RlY2lzaW9uKQorICAgICAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPihxdWl0TWFpbkxvb3BMYXRlciksIHRlc3QtPm1fbWFpbkxvb3ApOworICAg
IH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKFBv
bGljeUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXNwb25kVG9Qb2xpY3lEZWNp
c2lvbih0ZXN0LCB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24uZ2V0KCkpOworICAgICAg
ICB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24gPSAwOworICAgICAgICByZXR1cm4gRkFM
U0U7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGRlY2lkZVBvbGljeUNhbGxiYWNrKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiwgV2Vi
S2l0UG9saWN5RGVjaXNpb25UeXBlIHR5cGUsIFBvbGljeUNsaWVudFRlc3QqIHRlc3QpCisgICAg
eworICAgICAgICBpZiAodGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgIT0gdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICB0ZXN0LT5tX3ByZXZpb3VzUG9s
aWN5RGVjaXNpb24gPSBkZWNpc2lvbjsKKyAgICAgICAgaWYgKHRlc3QtPm1fcmVzcG9uZFRvUG9s
aWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSkgeworICAgICAgICAgICAgZ19pZGxlX2FkZChyZWlu
dGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihyZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKSwg
dGVzdCk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBy
ZXNwb25kVG9Qb2xpY3lEZWNpc2lvbih0ZXN0LCBkZWNpc2lvbik7CisgICAgICAgIHJldHVybiBG
QUxTRTsKKyAgICB9CisKKyAgICBQb2xpY3lEZWNpc2lvblJlc3BvbnNlIG1fcG9saWN5RGVjaXNp
b25SZXNwb25zZTsKKyAgICBpbnQgbV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXI7CisgICAgYm9v
bCBtX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHk7CisgICAgYm9vbCBtX2hh
bHRNYWluTG9vcEFmdGVyTWFraW5nRGVjaXNpb247CisgICAgR1JlZlB0cjxXZWJLaXRQb2xpY3lE
ZWNpc2lvbj4gbV9wcmV2aW91c1BvbGljeURlY2lzaW9uOworfTsKKworc3RhdGljIHZvaWQgdGVz
dE5hdmlnYXRpb25Qb2xpY3koUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
K3sKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uVHlwZUZpbHRlciA9IFdFQktJVF9QT0xJQ1lf
REVDSVNJT05fVFlQRV9OQVZJR0FUSU9OX0FDVElPTjsKKworICAgIHRlc3QtPm1fcG9saWN5RGVj
aXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6OlVzZTsKKyAgICB0ZXN0LT5sb2FkSHRt
bCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
LnNpemUoKSwgPT0sIDMpOworCisgICAgLy8gSWRlYWxseSB3ZSdkIGxpa2UgdG8gaGF2ZSBhIG1v
cmUgaW50ZW5zaXZlIHRlc3QgaGVyZSwgYnV0IGl0J3Mgc3RpbGwgcHJldHR5IHRyaWNreQorICAg
IC8vIHRvIHRyaWdnZXIgZGlmZmVyZW50IHR5cGVzIG9mIG5hdmlnYXRpb25zIHdpdGggdGhlIEdU
SysgV2ViS2l0MiBBUEkuCisgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNp
c2lvbiA9IFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTih0ZXN0LT5tX3ByZXZpb3Vz
UG9saWN5RGVjaXNpb24uZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmF2aWdh
dGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X25hdmlnYXRpb25fdHlwZShkZWNpc2lvbiksID09LCBX
RUJLSVRfTkFWSUdBVElPTl9UWVBFX09USEVSKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0
X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb3VzZV9idXR0b24oZGVjaXNpb24pLCA9
PSwgV0VCS0lUX01PVVNFX0JVVFRPTl9OT05FKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0
X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb2RpZmllcnMoZGVjaXNpb24pLCA9PSwg
MCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lv
bl9nZXRfZnJhbWVfbmFtZShkZWNpc2lvbiksID09LCAwKTsKKyAgICBXZWJLaXRVUklSZXF1ZXN0
KiByZXF1ZXN0ID0gd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9yZXF1ZXN0
KGRlY2lzaW9uKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91
cmkocmVxdWVzdCksID09LCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7CisKKyAgICB0ZXN0LT5t
X3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7CisgICAgdGVz
dC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gdHJ1ZTsKKyAgICB0
ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworCisgICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcg
dW50aWwgbG9hZCBjb21wbGV0aW9uLCBpdCB3aWxsIG5ldmVyIGNvbXBsZXRlIGlmIHdlIGlnbm9y
ZSB0aGUKKyAgICAvLyBuYXZpZ2F0aW9uLiBTbyB3ZSB0ZWxsIHRoZSBtYWluIGxvb3AgdG8gcXVp
dCBzb21ldGltZSBsYXRlci4KKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQ
b2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7CisgICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNp
c2lvbkFzeW5jaHJvbm91c2x5ID0gZmFsc2U7CisgICAgdGVzdC0+bV9oYWx0TWFpbkxvb3BBZnRl
ck1ha2luZ0RlY2lzaW9uID0gdHJ1ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJo
dHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDAp
OworfQorCitzdHJ1Y3QgQ3JlYXRlQ2FsbGJhY2tEYXRhIHsKKyAgICBib29sIHRyaWVkVG9PcGVu
V2luZG93OworICAgIEdNYWluTG9vcCogbWFpbkxvb3A7Cit9OworCitzdGF0aWMgV2ViS2l0V2Vi
VmlldyogY3JlYXRlQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgQ3JlYXRlQ2FsbGJh
Y2tEYXRhKiBkYXRhKQoreworICAgIGRhdGEtPnRyaWVkVG9PcGVuV2luZG93ID0gdHJ1ZTsKKyAg
ICBnX21haW5fbG9vcF9xdWl0KGRhdGEtPm1haW5Mb29wKTsKKyAgICByZXR1cm4gMDsKK30KKwor
c3RhdGljIHZvaWQgdGVzdE5ld1dpbmRvd1BvbGljeShQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB3aW5kb3dPcGVuaW5nSFRN
TCA9CisgICAgICAgICI8aHRtbD48Ym9keT4iCisgICAgICAgICIgICAgPGEgaWQ9XCJsaW5rXCIg
aHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbVwiIHRhcmdldD1cIl9ibGFua1wiPkxpbms8L2E+
IgorICAgICAgICAiICAgIDxzY3JpcHQ+IgorICAgICAgICAiICAgICAgICB2YXIgZXZlbnQgPSBk
b2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTsiCisgICAgICAgICIgICAgICAgIGV2
ZW50LmluaXRFdmVudCgnY2xpY2snLCB0cnVlLCBmYWxzZSk7IgorICAgICAgICAiICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGluaycpLmRpc3BhdGNoRXZlbnQoZXZlbnQpOyIKKyAg
ICAgICAgIiAgICA8L3NjcmlwdD4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CisgICAgdGVz
dC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZ
UEVfTkVXX1dJTkRPV19BQ1RJT047CisgICAgZ19vYmplY3Rfc2V0KHdlYmtpdF93ZWJfdmlld19n
ZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgImphdmFzY3JpcHQtY2FuLW9wZW4td2luZG93
cy1hdXRvbWF0aWNhbGx5IiwgVFJVRSwgTlVMTCk7CisKKyAgICBDcmVhdGVDYWxsYmFja0RhdGEg
ZGF0YTsKKyAgICBkYXRhLnRyaWVkVG9PcGVuV2luZG93ID0gZmFsc2U7CisgICAgZGF0YS5tYWlu
TG9vcCA9IHRlc3QtPm1fbWFpbkxvb3A7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRlc3QtPm1f
d2ViVmlldywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0soY3JlYXRlQ2FsbGJhY2spLCAmZGF0YSk7Cisg
ICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6VXNl
OworICAgIHRlc3QtPmxvYWRIdG1sKHdpbmRvd09wZW5pbmdIVE1MLCAiaHR0cDovL3dlYmtpdGd0
ay5vcmcvIik7CisgICAgdGVzdC0+d2FpdCgxKTsKKyAgICBnX2Fzc2VydChkYXRhLnRyaWVkVG9P
cGVuV2luZG93KTsKKworICAgIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNp
b24gPSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04odGVzdC0+bV9wcmV2aW91c1Bv
bGljeURlY2lzaW9uLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25hdmlnYXRp
b25fcG9saWN5X2RlY2lzaW9uX2dldF9mcmFtZV9uYW1lKGRlY2lzaW9uKSwgPT0sICJfYmxhbmsi
KTsKKworICAgIC8vIFVzaW5nIGEgc2hvcnQgdGltZW91dCBpcyBhIGJpdCB1Z2x5IGhlcmUsIGJ1
dCBpdCdzIGhhcmQgdG8gZ2V0IGFyb3VuZCBiZWNhdXNlIGlmIHdlIGJsb2NrCisgICAgLy8gdGhl
IG5ldyB3aW5kb3cgc2lnbmFsIHdlIGNhbm5vdCBoYWx0IHRoZSBtYWluIGxvb3AgaW4gdGhlIGNy
ZWF0ZSBjYWxsYmFjay4gSWYgd2UKKyAgICAvLyBoYWx0IHRoZSBtYWluIGxvb3AgaW4gdGhlIHBv
bGljeSBkZWNpc2lvbiwgdGhlIGNyZWF0ZSBjYWxsYmFjayBuZXZlciBleGVjdXRlcy4KKyAgICBk
YXRhLnRyaWVkVG9PcGVuV2luZG93ID0gZmFsc2U7CisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lv
blJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6SWdub3JlOworICAgIHRlc3QtPmxvYWRIdG1s
KHdpbmRvd09wZW5pbmdIVE1MLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7CisgICAgdGVzdC0+
d2FpdCguMik7CisgICAgZ19hc3NlcnQoIWRhdGEudHJpZWRUb09wZW5XaW5kb3cpOworfQorCit2
b2lkIGJlZm9yZUFsbCgpCit7CisgICAgUG9saWN5Q2xpZW50VGVzdDo6YWRkKCJXZWJLaXRQb2xp
Y3lDbGllbnQiLCAibmF2aWdhdGlvbi1wb2xpY3kiLCB0ZXN0TmF2aWdhdGlvblBvbGljeSk7Cisg
ICAgUG9saWN5Q2xpZW50VGVzdDo6YWRkKCJXZWJLaXRQb2xpY3lDbGllbnQiLCAibmV3LXdpbmRv
dy1wb2xpY3kiLCB0ZXN0TmV3V2luZG93UG9saWN5KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
bWFyc2hhbC5saXN0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1h
cnNoYWwubGlzdAppbmRleCA4OWMyNTBlM2VmYWU0N2VhMGEyMDJkODc1YjM3NTM2MzkxMzBkYTMy
Li5hYWJiM2M2NTg5MzMzN2JkYTNhMDc1NzhkODAzNzQ3ZDFkOWI1NGMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKQEAg
LTEsNCArMSw1IEBACiBCT09MRUFOOkVOVU0sU1RSSU5HLFBPSU5URVIKK0JPT0xFQU46T0JKRUNU
LEVOVU0KIEJPT0xFQU46U1RSSU5HCiBCT09MRUFOOlNUUklORyxQT0lOVEVSCiBCT09MRUFOOlNU
UklORyxTVFJJTkcsUE9JTlRFUgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123828</attachid>
            <date>2012-01-24 15:41:21 -0800</date>
            <delta_ts>2012-01-25 12:03:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76343-20120124154120.patch</filename>
            <type>text/plain</type>
            <size>67557</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1Nzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzc3OWIzOWJhMDE4M2Vm
NDQyNmYwOGQ3MWU5MTdmZDE5N2Y0NjdjYS4uZjI0ZjIzZWJhN2Y2MmM5MGUzZTg5Y2EzNjBkODM0
N2U4YWVhNGZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAxLTI0ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBbV0sy
XSBJbXBsZW1lbnQgdGhlIHBvbGljeSBjbGllbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRoZSBhYnN0cmFjdCBXZWJLaXRQb2xpY3lE
ZWNpc2lvbiwgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLAorICAgICAgICBhbmQgYWRk
IHRoZSBkZWNpZGUtcG9saWN5IHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3LgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gdGhlIHNvdXJjZSBsaXN0LgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcDogVXNlIHRoZSBXZWJDb3JlIG5h
bWVzcGFjZSBiZWNhdXNlCisgICAgICAgIG9mIGNoYW5nZXMgdG8gQVNTRVJUX01BVENISU5HX0VO
VU1TLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlLmg6IEFkZGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudFByaXZhdGUuaDog
QWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNp
c2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lE
ZWNpc2lvblByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UHJpdmF0ZS5oOiBNb2RpZnkgQVNTRVJUX01BVENISU5HX0VOVU1TIHRvIG1ha2UKKyAgICAg
ICAgaXQgdXNlZnVsIGZvciBub24tV2ViQ29yZSBlbnVtcy4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDb25zdHJ1
Y3RlZCk6IEF0dGFjaCB0aGUgcG9saWN5IGNsaWVudCBjYWxsYmFja3MgdG8gdGhlIHBhZ2UuCisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IEFkZCB0aGUgZGVjaWRlLXBvbGlj
eSBzaWduYWwgZGVmaW5pdGlvbi4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdNYWtlUG9saWN5RGVj
aXNpb24pOiBBZGRlZCB0aGlzIHByaXZhdGUgbWV0aG9kIHRvIGZpcmUgdGhlIHNpZ25hbC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6IEFkZGVkIG5ldyBzaWdu
YWwgdG8gdGhlIGxpc3QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d1ByaXZhdGUuaDogQWRkZWQgbmV3IG1ldGhvZCBkZWNsYXJhdGlvbi4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBuZXcgY2xhc3Nl
cyB0byB0aGUgZG9jcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstc2VjdGlvbnMudHh0OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHRlc3QgdG8gdGhlIHNvdXJjZSBsaXN0LgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0
OiBkZWNpZGUtcG9saWN5IGhhcyBhIG5ldyBzaWduYXR1cmUuCisKIDIwMTItMDEtMjQgIEFsZXhp
cyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCBidWlsZCBmaXggZm9yIFF0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA5MjAwMjYyNDkx
Yzg3M2Q4OThiNjhmNWZjODFiYWE5YWE1ZGMzYTdjLi45ODQwZjU5YjkwMTE0ZjRiYjJmNzcwNDIx
MzgwZjdmMTk4MTA4ZGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5h
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODUsMTAgKzg1LDEyIEBA
IGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RG93bmxvYWQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRF
cnJvci5oIFwKLQkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQu
aCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb24uaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lE
ZWNpc2lvbi5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdz
LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJUmVxdWVzdC5oIFwK
IAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlc3BvbnNlLmggXAorCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIFwKIAkkKFdlYktp
dDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBcCiAJJChXZWJLaXQyKS9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaCBcCkBAIC01MjksNiArNTMxLDEzIEBA
IGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19B
UElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RG93bmxvYWRDbGllbnQuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RXJyb3IuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RXJyb3IuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCBcCisJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJp
dmF0ZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lE
ZWNpc2lvbi5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBv
bGljeURlY2lzaW9uLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFBvbGljeUNsaWVudC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFBvbGljeUNsaWVudFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRTZXR0aW5ncy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFNldHRpbmdzLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RXJyb3IuY3BwCmluZGV4IGFkZGNmMWJkNWJhNzZlMjIwNDRlNGUzNzcyZmQ2M2Uz
ODcyMmIxOTMuLjQyY2YwYWIzNWUyZDU0OWJmMDUzZjc3MDUwMjEyZTkwYjJjZDE3N2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAKQEAg
LTI0LDYgKzI0LDggQEAKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9FcnJvcnNHdGsuaD4KIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIEdRdWFyayB3
ZWJraXRfbmV0d29ya19lcnJvcl9xdWFyaygpCiB7CiAgICAgcmV0dXJuIGdfcXVhcmtfZnJvbV9z
dGF0aWNfc3RyaW5nKFdlYkNvcmU6OmVycm9yRG9tYWluTmV0d29yayk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVj
aXNpb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNmQ0MmQwOWExNThlMWQxZWZjMGE5
NTRhNWQ5NThhZmViNmQyN2MxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcApAQCAtMCww
ICsxLDMwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmgi
CisKKyNpbmNsdWRlICJXZWJLaXRFbnVtVHlwZXMuaCIKKyNpbmNsdWRlICJXZWJLaXRQb2xpY3lE
ZWNpc2lvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0VVJJUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisj
aW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworLyoqCisgKiBTRUNUSU9OOiBXZWJLaXROYXZp
Z2F0aW9uUG9saWN5RGVjaXNpb24KKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQSBwb2xpY3kgZGVj
aXNpb24gZm9yIG5hdmlnYXRpb24gYWN0aW9ucworICogQFRpdGxlOiBXZWJLaXROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb24KKyAqIEBTZWVfYWxzbzogI1dlYktpdFBvbGljeURlY2lzaW9uLCAjV2Vi
S2l0V2ViVmlldworICoKKyAqIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiByZXByZXNl
bnRzIGEgcG9saWN5IGRlY2lzaW9uIGZvciBldmVudHMKKyAqIGFzc29jaWF0ZWQgd2l0aCBuYXZp
Z2F0aW9ucy4gSWYgdGhlIHZhbHVlIG9mIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbjpt
b3VzZS1idXR0b24KKyAqIGlzIG5vdCBXRUJLSVRfTU9VU0VfQlVUVE9OX05PTkUsIHRoZW4gdGhl
IG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieQorICogYSBtb3VzZSBldmVudC4KKyAqLworCitH
X0RFRklORV9UWVBFKFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiwgd2Via2l0X25hdmln
YXRpb25fcG9saWN5X2RlY2lzaW9uLCBXRUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJT04pCisKK3N0
cnVjdCBfV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSB7CisgICAgV2ViS2l0
TmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvblR5cGU7CisgICAgdW5zaWduZWQgbW9kaWZpZXJzOwor
ICAgIFdlYktpdE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uOworICAgIEdSZWZQdHI8V2ViS2l0VVJJ
UmVxdWVzdD4gcmVxdWVzdDsKKyAgICBDU3RyaW5nIGZyYW1lTmFtZTsKK307CisKK2VudW0gewor
ICAgIFBST1BfMCwKKyAgICBQUk9QX05BVklHQVRJT05fVFlQRSwKKyAgICBQUk9QX01PVVNFX0JV
VFRPTiwKKyAgICBQUk9QX01PRElGSUVSUywKKyAgICBQUk9QX1JFUVVFU1QsCisgICAgUFJPUF9G
UkFNRV9OQU1FLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2Rl
Y2lzaW9uX2luaXQoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKK3sK
KyAgICBkZWNpc2lvbi0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShkZWNpc2lv
biwgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04sIFdlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvblByaXZhdGUpOworICAgIG5ldyAoZGVjaXNpb24tPnByaXYpIFdlYktp
dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uRmluYWxpemUoR09iamVjdCogb2JqZWN0KQorewor
ICAgIFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTihvYmplY3QpLT5wcml2LT5+V2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXROYXZpZ2F0aW9uUG9saWN5RGVjaXNp
b25HZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbiogZGVjaXNpb24gPSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04ob2Jq
ZWN0KTsKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9OQVZJR0FUSU9OX1RZ
UEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2VudW0odmFsdWUsIHdlYmtpdF9uYXZpZ2F0aW9uX3Bv
bGljeV9kZWNpc2lvbl9nZXRfbmF2aWdhdGlvbl90eXBlKGRlY2lzaW9uKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9NT1VTRV9CVVRUT046CisgICAgICAgIGdfdmFsdWVfc2V0X2Vu
dW0odmFsdWUsIHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW91c2VfYnV0
dG9uKGRlY2lzaW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NT0RJRklFUlM6
CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGlj
eV9kZWNpc2lvbl9nZXRfbW9kaWZpZXJzKGRlY2lzaW9uKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9SRVFVRVNUOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdl
YmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfcmVxdWVzdChkZWNpc2lvbikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRlJBTUVfTkFNRToKKyAgICAgICAgZ192YWx1
ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0
X2ZyYW1lX25hbWUoZGVjaXNpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBw
YXJhbVNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9jbGFzc19pbml0KFdlYktpdE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbkNsYXNzKiBkZWNpc2lvbkNsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
b2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhkZWNpc2lvbkNsYXNzKTsKKyAgICBvYmplY3RD
bGFzcy0+ZmluYWxpemUgPSB3ZWJraXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25GaW5hbGl6ZTsK
KyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0TmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uR2V0UHJvcGVydHk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGRlY2lzaW9u
Q2xhc3MsIHNpemVvZihXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlKSk7CisK
KyAgICAvKioKKyAgICAgKiBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb246bmF2aWdhdGlv
bi10eXBlOgorICAgICAqCisgICAgICogVGhlIHR5cGUgb2YgbmF2aWdhdGlvbiB0aGF0IHRyaWdn
ZXJlZCB0aGlzIHBvbGljeSBkZWNpc2lvbi4gVGhpcyBpcworICAgICAqIHVzZWZ1bCBmb3IgZW5h
Y3RpbmcgZGlmZmVyZW50IHBvbGljaWVzIGRlcGVuZGluZyBvbiB3aGF0IHR5cGUgb2YgdXNlcgor
ICAgICAqIGFjdGlvbiBjYXVzZWQgdGhlIG5hdmlnYXRpb24uCisgICAgICovCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfTkFWSUdBVElPTl9UWVBFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2VudW0oIm5hdmlnYXRpb24tdHlwZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJOYXZpZ2F0aW9uIHR5cGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlRoZSB0eXBlIG9mIG5hdmlnYXRpb24gdHJpZ2dlcmluZyB0
aGlzIGRlY2lzaW9uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9OQVZJR0FUSU9OX1RZUEUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfTkFWSUdBVElP
Tl9UWVBFX0xJTktfQ0xJQ0tFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisg
ICAgICogV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uOm1vdXNlLWJ1dHRvbjoKKyAgICAg
KgorICAgICAqIElmIHRoZSBuYXZpZ2F0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBvbGljeSBk
ZWNpc2lvbiB3YXMgb3JpZ2luYWxseQorICAgICAqIHRyaWdnZXJlZCBieSBhIG1vdXNlIGV2ZW50
LCB0aGlzIHByb3BlcnR5IGNvbnRhaW5zIGEgI1dlYktpdE1vdXNlQnV0dG9uCisgICAgICogdmFs
dWUgZGVzY3JpYmluZyB0aGUgYnV0dG9uIHVzZWQgZm9yIHRoYXQgY2xpY2suIElmIHRoZSBuYXZp
Z2F0aW9uIHdhcworICAgICAqIG5vdCB0cmlnZ2VyZWQgYnkgYSBtb3VzZSBldmVudCwgdGhlIHZh
bHVlIG9mIHRoaXMgcHJvcGVydHkgd2lsbCBiZQorICAgICAqIFdFQktJVF9NT1VTRV9CVVRUT05f
Tk9ORS4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVj
dENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9NT1VTRV9C
VVRUT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNf
ZW51bSgibW91c2UtYnV0dG9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIk1vdXNlIGJ1dHRvbiIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG1vdXNlIGJ1dHRvbiB1
c2VkIGlmIHRoaXMgZGVjaXNpb24gd2FzIHRyaWdnZXJlZCBieSBhIG1vdXNlIGV2ZW50IiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJL
SVRfVFlQRV9NT1VTRV9CVVRUT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfTU9VU0VfQlVUVE9OX05PTkUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbjptb2RpZmllcnM6CisgICAgICoKKyAgICAgKiBJZiB0aGUgbmF2aWdhdGlvbiBhc3NvY2lh
dGVkIHdpdGggdGhpcyBwb2xpY3kgZGVjaXNpb24gd2FzIG9yaWdpbmFsbHkKKyAgICAgKiB0cmln
Z2VyZWQgYnkgYSBtb3VzZSBldmVudCwgdGhpcyBwcm9wZXJ0eSBjb250YWlucyBhIGJpdG1hc2sg
b2YgdmFyaW91cworICAgICAqIEdka01vZGlmaWVyVHlwZSB2YWx1ZXMgZGVzY3JpYmluZyB0aGUg
bW9kaWZpZXJzIHVzZWQgZm9yIHRoYXQgY2xpY2suCisgICAgICogSWYgdGhlIG5hdmlnYXRpb24g
d2FzIG5vdCB0cmlnZ2VyZWQgYnkgYSBtb3VzZSBldmVudCBvciBubyBtb2RpZmllcnMKKyAgICAg
KiB3ZXJlIGFjdGl2ZSwgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgd2lsbCBiZSB6ZXJvLgor
ICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX01PRElGSUVSUywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50KCJtb2Rp
ZmllcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXygiTW91c2UgZXZlbnQgbW9kaWZpZXJzIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbW9kaWZpZXJzIGFjdGl2ZSBp
ZiB0aGlzIGRlY2lzaW9uIHdhcyB0cmlnZ2VyZWQgYnkgYSBtb3VzZSBldmVudCIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhV
SU5ULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb246cmVxdWVzdDoKKyAgICAgKgorICAgICAqIFRoaXMgcHJv
cGVydHkgY29udGFpbnMgdGhlICNXZWJLaXRVUklSZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGlz
CisgICAgICogbmF2aWdhdGlvbi4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJPUF9SRVFVRVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgicmVxdWVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJOYXZpZ2F0aW9uIFVSSSByZXF1ZXN0IiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJU
aGUgVVJJIHJlcXVlc3QgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBuYXZpZ2F0aW9uIiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfVFlQRV9VUklfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoq
CisgICAgICogV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uOmZyYW1lLW5hbWU6CisgICAg
ICoKKyAgICAgKiBJZiB0aGlzIG5hdmlnYXRpb24gcmVxdWVzdCB0YXJnZXRzIGEgbmV3IGZyYW1l
LCB0aGlzIHByb3BlcnR5IGNvbnRhaW5zCisgICAgICogdGhlIG5hbWUgb2YgdGhhdCBmcmFtZS4g
Rm9yIGV4YW1wbGUgaWYgdGhlIGRlY2lzaW9uIHdhcyB0cmlnZ2VyZWQgYnkgY2xpY2tpbmcgYQor
ICAgICAqIGxpbmsgd2l0aCBhIHRhcmdldCBhdHRyaWJ1dGUgZXF1YWwgdG8gIl9ibGFuayIsIHRo
aXMgcHJvcGVydHkgd2lsbCBjb250YWluIHRoZQorICAgICAqIHZhbHVlIG9mIHRoYXQgYXR0cmli
dXRlLiBJbiBhbGwgb3RoZXIgY2FzZXMsIHRoaXMgdmFsdWUgd2lsbCBiZSAlTlVMTC4KKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9GUkFNRV9OQU1FLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygiZnJhbWUt
bmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJGcmFtZSBuYW1lIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbmFtZSBvZiB0aGUgbmV3IGZyYW1lIHRoaXMgbmF2
aWdhdGlvbiBhY3Rpb24gdGFyZ2V0cyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworfQorCisv
KioKKyAqIHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbmF2aWdhdGlvbl90
eXBlOgorICogQGRlY2lzaW9uOiBhICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24KKyAq
CisgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bjpuYXZpZ2F0aW9uLXR5cGUgcHJvcGVydHkuCisgKgorICogUmV0dXJuczogVGhlIHR5cGUgb2Yg
bmF2aWdhdGlvbiB0cmlnZ2VyaW5nIHRoaXMgcG9saWN5IGRlY2lzaW9uLgorICovCitXZWJLaXRO
YXZpZ2F0aW9uVHlwZSB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X25hdmln
YXRpb25fdHlwZShXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19OQVZJR0FUSU9OX1BPTElDWV9ERUNJ
U0lPTihkZWNpc2lvbiksIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIpOworICAgIHJldHVy
biBkZWNpc2lvbi0+cHJpdi0+bmF2aWdhdGlvblR5cGU7Cit9CisKKy8qKgorICogd2Via2l0X25h
dmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb3VzZV9idXR0b246CisgKiBAZGVjaXNpb246
IGEgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbgorICoKKyAqIEdldHMgdGhlIHZhbHVl
IG9mIHRoZSAjV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uOm1vdXNlLWJ1dHRvbiBwcm9w
ZXJ0eS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgbW91c2UgYnV0dG9uIHVzZWQgaWYgdGhpcyBkZWNp
c2lvbiB3YXMgdHJpZ2dlcmVkIGJ5IGEgbW91c2UgZXZlbnQKKyAqLworV2ViS2l0TW91c2VCdXR0
b24gd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb3VzZV9idXR0b24oV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04oZGVjaXNpb24p
LCBXRUJLSVRfTU9VU0VfQlVUVE9OX05PTkUpOworICAgIHJldHVybiBkZWNpc2lvbi0+cHJpdi0+
bW91c2VCdXR0b247Cit9CisKKy8qKgorICogd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lz
aW9uX2dldF9tb2RpZmllcnM6CisgKiBAZGVjaXNpb246IGEgI1dlYktpdE5hdmlnYXRpb25Qb2xp
Y3lEZWNpc2lvbgorICoKKyAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSAjV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uOm1vZGlmaWVycyBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zOiBUaGUg
bW9kaWZpZXJzIGFjdGl2ZSBpZiB0aGlzIGRlY2lzaW9uIHdhcyB0cmlnZ2VyZWQgYnkgYSBtb3Vz
ZSBldmVudAorICovCit1bnNpZ25lZCB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25f
Z2V0X21vZGlmaWVycyhXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19OQVZJR0FUSU9OX1BPTElDWV9E
RUNJU0lPTihkZWNpc2lvbiksIDApOworICAgIHJldHVybiBkZWNpc2lvbi0+cHJpdi0+bW9kaWZp
ZXJzOworfQorCisvKioKKyAqIHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRf
cmVxdWVzdDoKKyAqIEBkZWNpc2lvbjogYSAjV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9u
CisgKgorICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVj
aXNpb246cmVxdWVzdCBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6
IFRoZSBVUkkgcmVxdWVzdCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5hdmlnYXRpb24K
KyAqLworV2ViS2l0VVJJUmVxdWVzdCogd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9u
X2dldF9yZXF1ZXN0KFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05BVklHQVRJT05fUE9MSUNZX0RF
Q0lTSU9OKGRlY2lzaW9uKSwgMCk7CisgICAgcmV0dXJuIGRlY2lzaW9uLT5wcml2LT5yZXF1ZXN0
LmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9n
ZXRfZnJhbWVfbmFtZToKKyAqIEBkZWNpc2lvbjogYSAjV2ViS2l0TmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uCisgKgorICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlICNXZWJLaXROYXZpZ2F0aW9uUG9s
aWN5RGVjaXNpb246ZnJhbWUtbmFtZSBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgbmFt
ZSBvZiB0aGUgbmV3IGZyYW1lIHRoaXMgbmF2aWdhdGlvbiBhY3Rpb24gdGFyZ2V0cyBvciAlTlVM
TCAKKyAqLworY29uc3QgY2hhciogd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dl
dF9mcmFtZV9uYW1lKFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05BVklHQVRJT05fUE9MSUNZX0RF
Q0lTSU9OKGRlY2lzaW9uKSwgMCk7CisgICAgcmV0dXJuIGRlY2lzaW9uLT5wcml2LT5mcmFtZU5h
bWUuZGF0YSgpOworfQorCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9OQVZJ
R0FUSU9OX1RZUEVfTElOS19DTElDS0VELCBrV0tGcmFtZU5hdmlnYXRpb25UeXBlTGlua0NsaWNr
ZWQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfTkFWSUdBVElPTl9UWVBF
X0ZPUk1fU1VCTUlUVEVELCBrV0tGcmFtZU5hdmlnYXRpb25UeXBlRm9ybVN1Ym1pdHRlZCk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfQkFDS19G
T1JXQVJELCBrV0tGcmFtZU5hdmlnYXRpb25UeXBlQmFja0ZvcndhcmQpOworQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfTkFWSUdBVElPTl9UWVBFX1JFTE9BRCwga1dLRnJhbWVO
YXZpZ2F0aW9uVHlwZVJlbG9hZCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJ
VF9OQVZJR0FUSU9OX1RZUEVfRk9STV9SRVNVQk1JVFRFRCwga1dLRnJhbWVOYXZpZ2F0aW9uVHlw
ZUZvcm1SZXN1Ym1pdHRlZCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9O
QVZJR0FUSU9OX1RZUEVfT1RIRVIsIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVPdGhlcik7CisKK3N0
YXRpYyBXZWJLaXRNb3VzZUJ1dHRvbiB3a0V2ZW50TW91c2VCdXR0b25Ub1dlYktpdE1vdXNlQnV0
dG9uKFdLRXZlbnRNb3VzZUJ1dHRvbiB3a0J1dHRvbikKK3sKKyAgICBzd2l0Y2ggKHdrQnV0dG9u
KSB7CisgICAgY2FzZSBrV0tFdmVudE1vdXNlQnV0dG9uTm9CdXR0b246CisgICAgICAgIHJldHVy
biBXRUJLSVRfTU9VU0VfQlVUVE9OX05PTkU7CisgICAgY2FzZSBrV0tFdmVudE1vdXNlQnV0dG9u
TGVmdEJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9NT1VTRV9CVVRUT05fTEVGVDsKKyAg
ICBjYXNlIGtXS0V2ZW50TW91c2VCdXR0b25NaWRkbGVCdXR0b246CisgICAgICAgIHJldHVybiBX
RUJLSVRfTU9VU0VfQlVUVE9OX01JRERMRTsKKyAgICBjYXNlIGtXS0V2ZW50TW91c2VCdXR0b25S
aWdodEJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9NT1VTRV9CVVRUT05fUklHSFQ7Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBXRUJLSVRfTU9VU0Vf
QlVUVE9OX05PTkU7Cit9CisKK3Vuc2lnbmVkIHdrRXZlbnRNb2RpZmllcnNUb1Vuc2lnbmVkKFdL
RXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCit7CisgICAgdW5zaWduZWQgbW9kaWZpZXJzID0g
MDsKKyAgICBpZiAod2tNb2RpZmllcnMgJiBrV0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5KQorICAg
ICAgICBtb2RpZmllcnMgfD0gR0RLX1NISUZUX01BU0s7CisgICAgaWYgKHdrTW9kaWZpZXJzICYg
a1dLRXZlbnRNb2RpZmllcnNDb250cm9sS2V5KQorICAgICAgICBtb2RpZmllcnMgfD0gR0RLX0NP
TlRST0xfTUFTSzsKKyAgICBpZiAod2tNb2RpZmllcnMgJiBrV0tFdmVudE1vZGlmaWVyc0FsdEtl
eSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdES19NT0QxX01BU0s7CisgICAgaWYgKHdrTW9kaWZp
ZXJzICYga1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5KQorICAgICAgICBtb2RpZmllcnMgfD0gR0RL
X01FVEFfTUFTSzsKKyAgICByZXR1cm4gbW9kaWZpZXJzOworfQorCitXZWJLaXROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb24qIHdlYmtpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNyZWF0ZShXS0Zy
YW1lTmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvblR5cGUsIFdLRXZlbnRNb3VzZUJ1dHRvbiBtb3Vz
ZUJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIFdLVVJMUmVxdWVzdFJlZiByZXF1
ZXN0LCBjb25zdCBjaGFyKiBmcmFtZU5hbWUsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0
ZW5lcikKK3sKKyAgICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uID0g
V0VCS0lUX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTiwgTlVMTCkpOworICAgIGRlY2lzaW9uLT5wcml2
LT5uYXZpZ2F0aW9uVHlwZSA9IHN0YXRpY19jYXN0PFdlYktpdE5hdmlnYXRpb25UeXBlPihuYXZp
Z2F0aW9uVHlwZSk7CisgICAgZGVjaXNpb24tPnByaXYtPm1vdXNlQnV0dG9uID0gd2tFdmVudE1v
dXNlQnV0dG9uVG9XZWJLaXRNb3VzZUJ1dHRvbihtb3VzZUJ1dHRvbik7CisgICAgZGVjaXNpb24t
PnByaXYtPm1vZGlmaWVycyA9IHdrRXZlbnRNb2RpZmllcnNUb1Vuc2lnbmVkKG1vZGlmaWVycyk7
CisgICAgZGVjaXNpb24tPnByaXYtPnJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0VVJJUmVxdWVz
dENyZWF0ZUZvclJlc291cmNlUmVxdWVzdCh0b0ltcGwocmVxdWVzdCktPnJlc291cmNlUmVxdWVz
dCgpKSk7CisgICAgZGVjaXNpb24tPnByaXYtPmZyYW1lTmFtZSA9IGZyYW1lTmFtZTsKKyAgICB3
ZWJraXRQb2xpY3lEZWNpc2lvblNldExpc3RlbmVyKFdFQktJVF9QT0xJQ1lfREVDSVNJT04oZGVj
aXNpb24pLCBsaXN0ZW5lcik7CisgICAgcmV0dXJuIGRlY2lzaW9uOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZjZhNWVhNWFjYzhlMzQyYjIzNTlmNWQx
MTgwYmI0YzdhMGI0ZjJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmgKQEAgLTAsMCArMSwx
MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVk
KF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQor
I2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbl9oCisj
ZGVmaW5lIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbl9oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0UG9saWN5RGVjaXNpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dFVSSVJlcXVlc3QuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIFdlYktpdE5hdmlnYXRp
b25UeXBlOgorICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VEOiBUaGUgbmF2
aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IGNsaWNraW5nIGEgbGluay4KKyAqIEBXRUJLSVRfTkFW
SUdBVElPTl9UWVBFX0ZPUk1fU1VCTUlUVEVEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVk
IGJ5IHN1Ym1pdHRpbmcgYSBmb3JtLgorICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfQkFDS19G
T1JXQVJEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IG5hdmlnYXRpbmcgZm9yd2Fy
ZCBvciBiYWNrd2FyZC4KKyAqIEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX1JFTE9BRDogVGhlIG5h
dmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieSByZWxvYWRpbmcuCisgKiBAV0VCS0lUX05BVklHQVRJ
T05fVFlQRV9GT1JNX1JFU1VCTUlUVEVEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5
IHJlc3VibWl0dGluZyBhIGZvcm0uCisgKiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUjog
VGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieSBzb21lIG90aGVyIGFjdGlvbi4KKyAqCisg
KiBFbnVtIHZhbHVlcyB1c2VkIHRvIGRlbm90ZSB0aGUgdmFyaW91cyBuYXZpZ2F0aW9uIHR5cGVz
LgorICovCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElOS19D
TElDS0VELAorICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfRk9STV9TVUJNSVRURUQsCisgICAg
V0VCS0lUX05BVklHQVRJT05fVFlQRV9CQUNLX0ZPUldBUkQsCisgICAgV0VCS0lUX05BVklHQVRJ
T05fVFlQRV9SRUxPQUQsCisgICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1JFU1VCTUlU
VEVELAorICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIsCit9IFdlYktpdE5hdmlnYXRp
b25UeXBlOworCisvKioKKyAqIFdlYktpdE1vdXNlQnV0dG9uOgorICogQFdFQktJVF9NT1VTRV9C
VVRUT05fTk9ORTogTm8gbW91c2UgYnV0dG9uIHRyaWdnZXJlZCB0aGlzIGV2ZW50CisgKiBAV0VC
S0lUX01PVVNFX0JVVFRPTl9MRUZUOiBUaGUgbGVmdCBtb3VzZSBidXR0b24gdHJpZ2dlcmVkIHRo
aXMgZXZlbnQKKyAqIEBXRUJLSVRfTU9VU0VfQlVUVE9OX01JRERMRTogVGhlIG1pZGRsZSBtb3Vz
ZSBidXR0b24gdHJpZ2dlcmVkIHRoaXMgZXZlbnQKKyAqIEBXRUJLSVRfTU9VU0VfQlVUVE9OX1JJ
R0hUOiBUaGUgcmlnaHQgbW91c2UgYnV0dG9uIHRyaWdnZXJlZCB0aGlzIGV2ZW50CisgKgorICog
RW51bSB2YWx1ZXMgdXNlZCB0byBkZW5vdGUgdGhlIHZhcmlvdXMgbW91c2UgYnV0dG9ucyB0aGF0
IHRyaWdnZXJlZAorICogZXZlbnRzIHdpdGhpbiBXZWJLaXQuIFRoaXMgZW51bSBpcyBkZXNpZ25l
ZCB0byBtYXRjaCB1cCB0byB0aGUgYnV0dG9uCisgKiB2YWx1ZXMgdXNlZCBpbiBHREsgZXZlbnRz
LCBleGNlcHQgZm9yIEBXRUJLSVRfTU9VU0VfQlVUVE9OX05PTkUgd2hpY2gKKyAqIGhhcyBubyBl
cXVpdmFsZW50IGluIEdESy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfTU9VU0Vf
QlVUVE9OX05PTkUgPSAwLAorICAgIFdFQktJVF9NT1VTRV9CVVRUT05fTEVGVCA9IDEsCisgICAg
V0VCS0lUX01PVVNFX0JVVFRPTl9NSURETEUgPSAyLAorICAgIFdFQktJVF9NT1VTRV9CVVRUT05f
UklHSFQgPSAzCit9IFdlYktpdE1vdXNlQnV0dG9uOworCisjZGVmaW5lIFdFQktJVF9UWVBFX05B
VklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OICAgICAgICAgICAgKHdlYmtpdF9uYXZpZ2F0aW9uX3Bv
bGljeV9kZWNpc2lvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJ
Q1lfREVDSVNJT04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04sIFdlYktpdE5hdmln
YXRpb25Qb2xpY3lEZWNpc2lvbikpCisjZGVmaW5lIFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9E
RUNJU0lPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTiwgV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJ
Q1lfREVDSVNJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04pKQorI2RlZmluZSBXRUJL
SVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVD
SVNJT04pKQorI2RlZmluZSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT05fR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVf
TkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04sIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bkNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
biAgICAgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNsYXNzICAgV2ViS2l0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uUHJpdmF0ZSBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlOwor
CitzdHJ1Y3QgX1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiB7CisgICAgV2ViS2l0UG9s
aWN5RGVjaXNpb24gcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0TmF2
aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0
TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ2xhc3MgeworICAgIFdlYktpdFBvbGljeURlY2lzaW9u
Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X25hdmln
YXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOworCitXRUJL
SVRfQVBJIFdlYktpdE5hdmlnYXRpb25UeXBlCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVj
aXNpb25fZ2V0X25hdmlnYXRpb25fdHlwZSAoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9u
ICpkZWNpc2lvbik7CitXRUJLSVRfQVBJIFdlYktpdE1vdXNlQnV0dG9uCit3ZWJraXRfbmF2aWdh
dGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vdXNlX2J1dHRvbiAgICAoV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uICpkZWNpc2lvbik7CitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfbmF2
aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vZGlmaWVycyAgICAgICAoV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uICpkZWNpc2lvbik7CitXRUJLSVRfQVBJIFdlYktpdFVSSVJlcXVl
c3QgKgord2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9yZXF1ZXN0ICAgICAg
ICAgKFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiAqZGVjaXNpb24pOworV0VCS0lUX0FQ
SSBjb25zdCBnY2hhciAqCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X2Zy
YW1lX25hbWUgICAgICAoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uICpkZWNpc2lvbik7
CitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2MwZTFmNTA4YjdmNmIwOTdmMzE3NmRlOTk4N2U1
MGRkZjNhZmFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb24uaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogd2Via2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ3Jl
YXRlKFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSwgV0tFdmVudE1vdXNlQnV0dG9uLCBXS0V2ZW50TW9k
aWZpZXJzLCBXS1VSTFJlcXVlc3RSZWYsIGNvbnN0IGNoYXIqIGZyYW1lTmFtZSwgV0tGcmFtZVBv
bGljeUxpc3RlbmVyUmVmKTsKKworI2VuZGlmIC8vIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvblByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UG9saWN5Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFBvbGljeUNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ1ZmMyMjhmNWI4ZWNhN2Y1
ZmIxNWNjNDMxYTIzYThkMTNjZTUwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudC5jcHAKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0UG9saWN5Q2xpZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dFBvbGljeURlY2lzaW9uLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdFdlYlZpZXcuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tBUElDYXN0Lmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCitzdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uQ2FsbGJhY2so
V0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSBu
YXZpZ2F0aW9uVHlwZSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIFdLRXZlbnRNb3VzZUJ1
dHRvbiBtb3VzZUJ1dHRvbiwgV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFdLRnJhbWVQb2xpY3lM
aXN0ZW5lclJlZiBsaXN0ZW5lciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIEdSZWZQdHI8V2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uPiBk
ZWNpc2lvbiA9CisgICAgICAgIGFkb3B0R1JlZih3ZWJraXROYXZpZ2F0aW9uUG9saWN5RGVjaXNp
b25DcmVhdGUobmF2aWdhdGlvblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VCdXR0b24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
LyogZnJhbWUgbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpc3RlbmVyKSk7CisgICAgd2Via2l0V2ViVmlld01ha2VQb2xpY3lE
ZWNpc2lvbihXRUJLSVRfV0VCX1ZJRVcodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9U
WVBFX05BVklHQVRJT05fQUNUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BPTElDWV9ERUNJU0lPTihkZWNpc2lvbi5nZXQoKSkpOworfQorCitzdGF0aWMg
dm9pZCBkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb25DYWxsYmFjayhXS1BhZ2VSZWYgcGFn
ZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tGcmFtZU5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBl
LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0
dG9uLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgV0tTdHJpbmdSZWYgZnJhbWVOYW1lLCBXS0Zy
YW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdlYktpdE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbj4gZGVjaXNpb24gPQorICAgICAgICBhZG9wdEdSZWYod2Via2l0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uQ3JlYXRlKG5hdmlnYXRpb25UeXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlQnV0dG9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRvSW1wbChmcmFtZU5hbWUpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVy
KSk7CisgICAgd2Via2l0V2ViVmlld01ha2VQb2xpY3lEZWNpc2lvbihXRUJLSVRfV0VCX1ZJRVco
dG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05FV19XSU5ET1dfQUNUSU9OLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BPTElDWV9ERUNJU0lP
TihkZWNpc2lvbi5nZXQoKSkpOworfQorCit2b2lkIGF0dGFjaFBvbGljeUNsaWVudFRvUGFnZShX
S1BhZ2VSZWYgcGFnZSkKK3sKKyAgICBXS1BhZ2VQb2xpY3lDbGllbnQgcG9saWN5Q2xpZW50ID0g
eworICAgICAgICBrV0tQYWdlUG9saWN5Q2xpZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIDAs
IC8vIGNsaWVudEluZm8KKyAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkNh
bGxiYWNrLAorICAgICAgICBkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb25DYWxsYmFjaywK
KyAgICAgICAgMCwgLy8gZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VDYWxsYmFjaywKKyAgICAgICAg
MCwgLy8gdW5hYmxlVG9JbXBsZW1lbnRQb2xpY3kKKyAgICB9OworICAgIFdLUGFnZVNldFBhZ2VQ
b2xpY3lDbGllbnQocGFnZSwgJnBvbGljeUNsaWVudCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lDbGllbnRQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lDbGllbnRQcml2YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWM4YTZhYjllNDBlOTNmYmYyYjM1MjAwM2ZiMmI0ZGI3ZGE4MzQyNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFBvbGljeUNsaWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93
ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBX
ZWJLaXRQb2xpY3lDbGllbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0UG9saWN5Q2xpZW50UHJp
dmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLRnJhbWVQb2xpY3lMaXN0ZW5lci5oPgorCit2
b2lkIGF0dGFjaFBvbGljeUNsaWVudFRvUGFnZShXS1BhZ2VSZWYpOworCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lz
aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURl
Y2lzaW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NDU0NjdiNTZjOTk2MTM4NjdjZjk0ODBmNDJhYmQzZWIx
NjA3NjczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UG9saWN5RGVjaXNpb24uY3BwCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRQb2xpY3lEZWNpc2lvbi5oIgorCisjaW5jbHVkZSAiV2ViS2l0UG9saWN5RGVjaXNp
b25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorCisKKy8qKgorICogU0VD
VElPTjogV2ViS2l0UG9saWN5RGVjaXNpb24KKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQSBwZW5k
aW5nIHBvbGljeSBkZWNpc2lvbgorICogQFRpdGxlOiBXZWJLaXRQb2xpY3lEZWNpc2lvbgorICog
QFNlZV9hbHNvOiAjV2ViS2l0V2ViVmlldworICoKKyAqIE9mdGVuIFdlYktpdCBhbGxvd3MgdGhl
IGNsaWVudCB0byBkZWNpZGUgdGhlIHBvbGljeSBmb3IgY2VydGFpbgorICogb3BlcmF0aW9ucy4g
Rm9yIGluc3RhbmNlLCBhIGNsaWVudCBtYXkgd2FudCB0byBvcGVuIGEgbGluayBpbiBhIG5ldwor
ICogdGFiLCBibG9jayBhIG5hdmlnYXRpb24gZW50aXJlbHksIHF1ZXJ5IHRoZSB1c2VyIG9yIHRy
aWdnZXIgYSBkb3dubG9hZAorICogaW5zdGVhZCBvZiBhIG5hdmlnYXRpb24uIEluIHRoZXNlIGNh
c2VzIFdlYktpdCB3aWxsIGZpcmUgdGhlCisgKiAjV2ViS2l0V2ViVmlldzo6ZGVjaWRlLXBvbGlj
eSBzaWduYWwgd2l0aCBhICNXZWJLaXRQb2xpY3lEZWNpc2lvbgorICogb2JqZWN0LiBJZiB0aGUg
c2lnbmFsIGhhbmRsZXIgZG9lcyBub3RoaW5nLCBXZWJLaXQgd2lsbCBhY3QgYXMgaWYKKyAqIHdl
YmtpdF9wb2xpY3lfZGVjaXNpb25fdXNlKCkgd2FzIGNhbGxlZCBhcyBzb29uIGFzIHNpZ25hbCBo
YW5kbGluZworICogY29tcGxldGVzLiBUbyBtYWtlIGEgcG9saWN5IGRlY2lzaW9uIGFzeW5jaHJv
bm91c2x5LCBzaW1wbHkgaW5jcmVtZW50CisgKiB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSAj
V2ViS2l0UG9saWN5RGVjaXNpb24gb2JqZWN0LgorICovCitHX0RFRklORV9UWVBFKFdlYktpdFBv
bGljeURlY2lzaW9uLCB3ZWJraXRfcG9saWN5X2RlY2lzaW9uLCBHX1RZUEVfT0JKRUNUKQorCitz
dHJ1Y3QgX1dlYktpdFBvbGljeURlY2lzaW9uUHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tG
cmFtZVBvbGljeUxpc3RlbmVyUmVmPiBsaXN0ZW5lcjsKKyAgICBib29sIG1hZGVQb2xpY3lEZWNp
c2lvbjsKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faW5pdChXZWJL
aXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCit7CisgICAgZGVjaXNpb24tPnByaXYgPSBHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoZGVjaXNpb24sIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJ
U0lPTiwgV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRlKTsKKyAgICBuZXcgKGRlY2lzaW9uLT5w
cml2KSBXZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUoKTsKKyAgICBkZWNpc2lvbi0+cHJpdi0+
bWFkZVBvbGljeURlY2lzaW9uID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFBvbGlj
eURlY2lzaW9uRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgICBXZWJLaXRQb2xpY3lE
ZWNpc2lvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OKG9iamVjdCktPnBy
aXY7CisKKyAgICAvLyBUaGlzIGlzIHRoZSBkZWZhdWx0IGNob2ljZSBmb3IgYWxsIHBvbGljeSBk
ZWNpc2lvbnMgaW4gV2ViUGFnZVByb3h5LmNwcC4KKyAgICBpZiAoIXByaXYtPm1hZGVQb2xpY3lE
ZWNpc2lvbikKKyAgICAgICAgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlKHByaXYtPmxpc3RlbmVy
LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUoKTsKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfcG9saWN5X2RlY2lzaW9uX3BhcmVudF9jbGFzcyktPmZp
bmFsaXplKG9iamVjdCk7Cit9CisKK3ZvaWQgd2Via2l0UG9saWN5RGVjaXNpb25TZXRMaXN0ZW5l
cihXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJl
ZiBsaXN0ZW5lcikKK3sKKyAgICAgZGVjaXNpb24tPnByaXYtPmxpc3RlbmVyID0gbGlzdGVuZXI7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fY2xhc3NfaW5pdChXZWJL
aXRQb2xpY3lEZWNpc2lvbkNsYXNzKiBkZWNpc2lvbkNsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhkZWNpc2lvbkNsYXNzKTsKKyAgICBvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRQb2xpY3lEZWNpc2lvbkZpbmFsaXplOworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShkZWNpc2lvbkNsYXNzLCBzaXplb2YoV2ViS2l0UG9saWN5
RGVjaXNpb25Qcml2YXRlKSk7Cit9CisKKy8qKgorICogd2Via2l0X3BvbGljeV9kZWNpc2lvbl91
c2U6CisgKiBAZGVjaXNpb246IGEgI1dlYktpdFBvbGljeURlY2lzaW9uCisgKgorICogQWNjZXB0
IHRoZSBhY3Rpb24gd2hpY2ggdHJpZ2dlcmQgdGhpcyBkZWNpc2lvbi4KKyAqLwordm9pZCB3ZWJr
aXRfcG9saWN5X2RlY2lzaW9uX3VzZShXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfUE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9u
KSk7CisgICAgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlKGRlY2lzaW9uLT5wcml2LT5saXN0ZW5l
ci5nZXQoKSk7CisgICAgZGVjaXNpb24tPnByaXYtPm1hZGVQb2xpY3lEZWNpc2lvbiA9IHRydWU7
Cit9CisKKy8qKgorICogd2Via2l0X3BvbGljeV9kZWNpc2lvbl9pZ25vcmU6CisgKiBAZGVjaXNp
b246IGEgI1dlYktpdFBvbGljeURlY2lzaW9uCisgKgorICogSWdub3JlIHRoZSBhY3Rpb24gd2hp
Y2ggdHJpZ2dlcmQgdGhpcyBkZWNpc2lvbi4gRm9yIGluc3RhbmNlLCBmb3IgYQorICogI1dlYktp
dFJlc3BvbnNlUG9saWN5RGVjaXNpb24sIHRoaXMgd291bGQgY2FuY2VsIHRoZSByZXF1ZXN0Lgor
ICovCit2b2lkIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlKFdlYktpdFBvbGljeURlY2lz
aW9uKiBkZWNpc2lvbikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QT0xJQ1lf
REVDSVNJT04oZGVjaXNpb24pKTsKKyAgICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJJZ25vcmUoZGVj
aXNpb24tPnByaXYtPmxpc3RlbmVyLmdldCgpKTsKKyAgICBkZWNpc2lvbi0+cHJpdi0+bWFkZVBv
bGljeURlY2lzaW9uID0gdHJ1ZTsKK30KKworLyoqCisgKiB3ZWJraXRfcG9saWN5X2RlY2lzaW9u
X2Rvd25sb2FkOgorICogQGRlY2lzaW9uOiBhICNXZWJLaXRQb2xpY3lEZWNpc2lvbgorICoKKyAq
IFNwYXduIGEgZG93bmxvYWQgZnJvbSB0aGlzIGRlY2lzaW9uLgorICovCit2b2lkIHdlYmtpdF9w
b2xpY3lfZGVjaXNpb25fZG93bmxvYWQoV2ViS2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BPTElDWV9ERUNJU0lPTihkZWNpc2lv
bikpOworICAgIFdLRnJhbWVQb2xpY3lMaXN0ZW5lckRvd25sb2FkKGRlY2lzaW9uLT5wcml2LT5s
aXN0ZW5lci5nZXQoKSk7CisgICAgZGVjaXNpb24tPnByaXYtPm1hZGVQb2xpY3lEZWNpc2lvbiA9
IHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRQb2xpY3lEZWNpc2lvbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UG9saWN5RGVjaXNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lY2NhNWY5YzM1NGViZGE1MGU5MmQ5
ZGRkMDg2YjZjOTllNzYwM2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24uaApAQCAtMCwwICsxLDY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJ
VDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAi
T25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5k
aWYKKworI2lmbmRlZiBXZWJLaXRQb2xpY3lEZWNpc2lvbl9oCisjZGVmaW5lIFdlYktpdFBvbGlj
eURlY2lzaW9uX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQ
RV9QT0xJQ1lfREVDSVNJT04gICAgICAgICAgICAod2Via2l0X3BvbGljeV9kZWNpc2lvbl9nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJ
U0lPTiwgV2ViS2l0UG9saWN5RGVjaXNpb24pKQorI2RlZmluZSBXRUJLSVRfUE9MSUNZX0RFQ0lT
SU9OX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTiwgV2ViS2l0UG9saWN5RGVjaXNpb25DbGFzcykpCisj
ZGVmaW5lIFdFQktJVF9JU19QT0xJQ1lfREVDSVNJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfUE9MSUNZX0RFQ0lTSU9OKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX1BPTElDWV9ERUNJU0lPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJT04pKQorI2Rl
ZmluZSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTiwgV2ViS2l0
UG9saWN5RGVjaXNpb25DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRQb2xpY3lEZWNp
c2lvbiAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb247Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
UG9saWN5RGVjaXNpb25DbGFzcyAgIFdlYktpdFBvbGljeURlY2lzaW9uQ2xhc3M7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRlIFdlYktpdFBvbGljeURlY2lzaW9u
UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRQb2xpY3lEZWNpc2lvbiB7CisgICAgR09iamVjdCBw
YXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRQb2xpY3lEZWNpc2lvblBy
aXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFBvbGljeURlY2lzaW9uQ2xhc3Mgewor
ICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfcG9saWN5X2RlY2lzaW9uX2dldF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfcG9saWN5X2RlY2lzaW9uX3VzZSAgICAgIChXZWJLaXRQb2xpY3lEZWNpc2lvbiAq
ZGVjaXNpb24pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdu
b3JlICAgKFdlYktpdFBvbGljeURlY2lzaW9uICpkZWNpc2lvbik7CisKK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZCAoV2ViS2l0UG9saWN5RGVjaXNpb24g
KmRlY2lzaW9uKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYyNTgwYzgzZTlkODM5NTZiNTcwNGJjNWMwZGZhMGYxOTVhMmZl
NzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0UG9saWN5RGVjaXNpb25Q
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRlX2gKKworI2luY2x1
ZGUgIldlYktpdFBvbGljeURlY2lzaW9uLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+
CisKK3ZvaWQgd2Via2l0UG9saWN5RGVjaXNpb25TZXRMaXN0ZW5lcihXZWJLaXRQb2xpY3lEZWNp
c2lvbiosIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZik7CisKKyNlbmRpZiAvLyBXZWJLaXRSZXNw
b25zZVBvbGljeURlY2lzaW9uUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKaW5kZXggM2RiNjFhNzQ5ZDNkMzVkNWI1ZDA0ODI3
ODkzNTYzOThhODdjMWFjOS4uMTMyODBkNjAwYTY4ZjE3MDk2NDdmN2M0ODI3MzQzZDNiZWVkMTE3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZh
dGUuaApAQCAtMzMsMTUgKzMzLDExIEBACiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAKLUdfQkVHSU5fREVDTFMKLQogI2RlZmluZSBXRUJLSVRfUEFSQU1f
UkVBREFCTEUgKHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURBQkxFfEdfUEFS
QU1fU1RBVElDX05BTUV8R19QQVJBTV9TVEFUSUNfTklDS3xHX1BBUkFNX1NUQVRJQ19CTFVSQikp
CiAjZGVmaW5lIFdFQktJVF9QQVJBTV9XUklUQUJMRSAoc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+
KEdfUEFSQU1fV1JJVEFCTEV8R19QQVJBTV9TVEFUSUNfTkFNRXxHX1BBUkFNX1NUQVRJQ19OSUNL
fEdfUEFSQU1fU1RBVElDX0JMVVJCKSkKICNkZWZpbmUgV0VCS0lUX1BBUkFNX1JFQURXUklURSAo
c3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFfEdfUEFSQU1fU1RBVElD
X05BTUV8R19QQVJBTV9TVEFUSUNfTklDS3xHX1BBUkFNX1NUQVRJQ19CTFVSQikpCiAKICNkZWZp
bmUgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTSh3ZWJraXROYW1lLCB3ZWJjb3JlTmFtZSkg
XAotICAgICAgICBDT01QSUxFX0FTU0VSVChpbnQod2Via2l0TmFtZSkgPT0gaW50KFdlYkNvcmU6
OndlYmNvcmVOYW1lKSwgbWlzbWF0Y2hpbmdFbnVtcykKLQotR19FTkRfREVDTFMKKyAgICAgICAg
Q09NUElMRV9BU1NFUlQoaW50KHdlYmtpdE5hbWUpID09IGludCh3ZWJjb3JlTmFtZSksIG1pc21h
dGNoaW5nRW51bXMpCiAKICNlbmRpZiAvLyBXZWJLaXRQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggY2Y5Yzc4
NTFhMzNhNzI5Njk5NmE0ZmM5ZWMwMDI0MzA5ZTc4OTUyOC4uZjEzYTE2NTI5NDk1NmEzMzFlZWZl
NWRiYWUxNTcwYjhjYTUyNTk3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJX
ZWJLaXRFbnVtVHlwZXMuaCIKICNpbmNsdWRlICJXZWJLaXRFcnJvci5oIgogI2luY2x1ZGUgIldl
YktpdE1hcnNoYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRQb2xpY3lDbGllbnRQcml2YXRlLmgiCiAj
aW5jbHVkZSAiV2ViS2l0U2V0dGluZ3NQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0VUlDbGll
bnQuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oIgpAQCAtNTUsNiArNTYs
OCBAQCBlbnVtIHsKICAgICBTQ1JJUFRfQ09ORklSTSwKICAgICBTQ1JJUFRfUFJPTVBULAogCisg
ICAgREVDSURFX1BPTElDWSwKKwogICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC0xNjMsMTggKzE2
NiwyMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2Jq
ZWN0KQogCiAgICAgd2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKHdlYlZpZXdCYXNlLCB3
ZWJraXRXZWJDb250ZXh0R2V0V0tDb250ZXh0KHByaXYtPmNvbnRleHQpLCAwKTsKIAotICAgIFdl
YlBhZ2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZSh3ZWJWaWV3QmFzZSk7
CisgICAgV0tQYWdlUmVmIHBhZ2UgPSB0b0FQSSh3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2Uod2Vi
Vmlld0Jhc2UpKTsKIAogICAgIHN0YXRpYyBHUmVmUHRyPFdlYktpdFdlYkxvYWRlckNsaWVudD4g
ZGVmYXVsdExvYWRlckNsaWVudCA9IGFkb3B0R1JlZihXRUJLSVRfV0VCX0xPQURFUl9DTElFTlQo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9MT0FERVJfQ0xJRU5ULCBOVUxMKSkpOwotICAg
IHdlYmtpdFdlYlZpZXdTZXRMb2FkZXJDbGllbnQod2ViVmlldywgZGVmYXVsdExvYWRlckNsaWVu
dC5nZXQoKSwgdG9BUEkocGFnZSkpOworICAgIHdlYmtpdFdlYlZpZXdTZXRMb2FkZXJDbGllbnQo
d2ViVmlldywgZGVmYXVsdExvYWRlckNsaWVudC5nZXQoKSwgcGFnZSk7CiAKICAgICBzdGF0aWMg
R1JlZlB0cjxXZWJLaXRVSUNsaWVudD4gZGVmYXVsdFVJQ2xpZW50ID0gYWRvcHRHUmVmKFdFQktJ
VF9VSV9DTElFTlQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1VJX0NMSUVOVCwgTlVMTCkpKTsK
ICAgICBwcml2LT51aUNsaWVudCA9IGRlZmF1bHRVSUNsaWVudC5nZXQoKTsKLSAgICB3ZWJraXRV
SUNsaWVudEF0dGFjaFVJQ2xpZW50VG9QYWdlKHByaXYtPnVpQ2xpZW50LmdldCgpLCB0b0FQSShw
YWdlKSk7CisgICAgd2Via2l0VUlDbGllbnRBdHRhY2hVSUNsaWVudFRvUGFnZShwcml2LT51aUNs
aWVudC5nZXQoKSwgcGFnZSk7CiAKLSAgICBwcml2LT5iYWNrRm9yd2FyZExpc3QgPSBhZG9wdEdS
ZWYod2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlKFdLUGFnZUdldEJhY2tGb3J3YXJkTGlzdCh0
b0FQSShwYWdlKSkpKTsKKyAgICBwcml2LT5iYWNrRm9yd2FyZExpc3QgPSBhZG9wdEdSZWYod2Vi
a2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlKFdLUGFnZUdldEJhY2tGb3J3YXJkTGlzdChwYWdlKSkp
OwogICAgIHByaXYtPnNldHRpbmdzID0gYWRvcHRHUmVmKHdlYmtpdF9zZXR0aW5nc19uZXcoKSk7
Ci0gICAgd2Via2l0U2V0dGluZ3NBdHRhY2hTZXR0aW5nc1RvUGFnZShwcml2LT5zZXR0aW5ncy5n
ZXQoKSwgdG9BUEkocGFnZSkpOworICAgIHdlYmtpdFNldHRpbmdzQXR0YWNoU2V0dGluZ3NUb1Bh
Z2UocHJpdi0+c2V0dGluZ3MuZ2V0KCksIHBhZ2UpOworCisgICAgYXR0YWNoUG9saWN5Q2xpZW50
VG9QYWdlKHBhZ2UpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0UHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBhcmFtU3BlYykKQEAgLTU1NCw2ICs1NTksNjMgQEAgc3RhdGljIHZvaWQgd2Via2l0
X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywgR19UWVBFX1BPSU5URVIp
OwogCisgICAgLyoqCisgICAgICogV2ViS2l0UG9saWN5Q2xpZW50OjpkZWNpZGUtcG9saWN5Cisg
ICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBp
cyBlbWl0dGVkCisgICAgICogQGRlY2lzaW9uOiB0aGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbgorICAgICAqIEBkZWNpc2lvbl90eXBlOiBhICNXZWJLaXRQb2xpY3lEZWNpc2lvblR5
cGUgZGVub3RpbmcgdGhlIHR5cGUgb2YgQGRlY2lzaW9uCisgICAgICoKKyAgICAgKiBUaGlzIHNp
Z25hbCBpcyBlbWl0dGVkIHdoZW4gV2ViS2l0IGlzIHJlcXVlc3RpbmcgdGhlIGNsaWVudCB0byBk
ZWNpZGUgYSBwb2xpY3kKKyAgICAgKiBkZWNpc2lvbiwgc3VjaCBhcyB3aGV0aGVyIHRvIG5hdmln
YXRlIHRvIGEgcGFnZSwgb3BlbiBhIG5ldyB3aW5kb3cgb3Igd2hldGhlciBvcgorICAgICAqIG5v
dCB0byBkb3dubG9hZCBhIHJlc291cmNlLiBUaGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbiBwYXNzZWQgaW4gdGhlCisgICAgICogQGRlY2lzaW9uIGFyZ3VtZW50IGlzIGEgZ2VuZXJp
YyB0eXBlLCBidXQgc2hvdWxkIGJlIGNhc3RlZCB0byBhIG1vcmUKKyAgICAgKiBzcGVjaWZpYyB0
eXBlIHdoZW4gbWFraW5nIHRoZSBkZWNpc2lvbi4gRm9yIGV4YW1wbGU6CisgICAgICoKKyAgICAg
KiA8aW5mb3JtYWxleGFtcGxlPjxwcm9ncmFtbGlzdGluZz4KKyAgICAgKiBzdGF0aWMgZ2Jvb2xl
YW4KKyAgICAgKiBkZWNpZGVfcG9saWN5X2NiIChXZWJLaXRXZWJWaWV3ICp3ZWJfdmlldywKKyAg
ICAgKiAgICAgICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lvbiAqZGVjaXNpb24sCisg
ICAgICogICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlIHR5cGUpCisg
ICAgICogeworICAgICAqICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgKiAgICAgY2FzZSBXRUJL
SVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkFWSUdBVElPTl9BQ1RJT046CisgICAgICogICAgICAg
ICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gKm5hdmlnYXRpb25fZGVjaXNpb24gPSBX
RUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04gKGRlY2lzaW9uKTsKKyAgICAgKiAgICAg
ICAgIC88IS0tIC0tPiogTWFrZSBhIHBvbGljeSBkZWNpc2lvbiBoZXJlLiAqPCEtLSAtLT4vCisg
ICAgICogICAgICAgICBicmVhazsKKyAgICAgKiAgICAgY2FzZSBXRUJLSVRfUE9MSUNZX0RFQ0lT
SU9OX1RZUEVfTkVXX1dJTkRPV19BQ1RJT046CisgICAgICogICAgICAgICBXZWJLaXROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb24gKm5hdmlnYXRpb25fZGVjaXNpb24gPSBXRUJLSVRfTkFWSUdBVElP
Tl9QT0xJQ1lfREVDSVNJT04gKGRlY2lzaW9uKTsKKyAgICAgKiAgICAgICAgIC88IS0tIC0tPiog
TWFrZSBhIHBvbGljeSBkZWNpc2lvbiBoZXJlLiAqPCEtLSAtLT4vCisgICAgICogICAgICAgICBi
cmVhazsKKyAgICAgKiAgICAgY2FzZSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9O
U0U6CisgICAgICogICAgICAgICBXZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uICpyZXNwb25z
ZSA9IFdFQktJVF9SRVNQT05TRV9QT0xJQ1lfREVDSVNJT04gKGRlY2lzaW9uKTsKKyAgICAgKiAg
ICAgICAgIC88IS0tIC0tPiogTWFrZSBhIHBvbGljeSBkZWNpc2lvbiBoZXJlLiAqPCEtLSAtLT4v
CisgICAgICogICAgICAgICBicmVhazsKKyAgICAgKiAgICAgZGVmYXVsdDoKKyAgICAgKiAgICAg
ICAgIC88IS0tIC0tPiogTWFraW5nIG5vIGRlY2lzaW9uIHJlc3VsdHMgaW4gd2Via2l0X3BvbGlj
eV9kZWNpc2lvbl91c2UoKS4gKjwhLS0gLS0+LworICAgICAqICAgICAgICAgYnJlYWs7CisgICAg
ICogICAgIH0KKyAgICAgKiB9CisgICAgICogPC9wcm9ncmFtbGlzdGluZz48L2luZm9ybWFsZXhh
bXBsZT4KKyAgICAgKgorICAgICAqIEl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgcG9saWN5IGRlY2lz
aW9uIGFzeW5jaHJvbm91cywgYnkgc2ltcGx5IGNhbGxpbmcgZ19vYmplY3RfcmVmKCkKKyAgICAg
KiBvbiB0aGUgQGRlY2lzaW9uIGFyZ3VtZW50LiBJZiB0aGUgbGFzdCByZWZlcmVuY2UgaXMgcmVt
b3ZlZCBvbiBhICNXZWJLaXRQb2xpY3lEZWNpc2lvbgorICAgICAqIGFuZCBubyBkZWNpc2lvbiBo
YXMgYmVlbiBtYWRlIGV4cGxpY2l0bHksIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fdXNlKCkgd2ls
bCBiZSB0aGUKKyAgICAgKiBkZWZhdWx0IHBvbGljeSBkZWNpc2lvbi4KKyAgICAgKgorICAgICAq
IFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2Vk
IGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBm
dXJ0aGVyLgorICAgICAqCisgICAgICovCisgICAgc2lnbmFsc1tERUNJREVfUE9MSUNZXSA9Cisg
ICAgICAgIGdfc2lnbmFsX25ldygiZGVjaWRlLXBvbGljeSIsCisgICAgICAgICAgICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAg
R19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQo
V2ViS2l0V2ViVmlld0NsYXNzLCBkZWNpZGVfcG9saWN5KSwKKyAgICAgICAgICAgICAgICAgICAg
IGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRh
ICovLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNU
X0VOVU0sCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMiwgLyogbnVtYmVy
IG9mIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1BPTElD
WV9ERUNJU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJ
U0lPTl9UWVBFKTsKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3TG9hZENoYW5nZWQoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCkKQEAgLTY1OSw2ICs3MjEs
MTIgQEAgV0tTdHJpbmdSZWYgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgY29uc3QgQ1N0cmkKICAgICByZXR1cm4gdGV4dCA/IFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHRleHQuZ2V0KCkpIDogMDsKIH0KIAordm9pZCB3ZWJraXRX
ZWJWaWV3TWFrZVBvbGljeURlY2lzaW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFBv
bGljeURlY2lzaW9uVHlwZSB0eXBlLCBXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCit7
CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBz
aWduYWxzW0RFQ0lERV9QT0xJQ1ldLCAwLCBkZWNpc2lvbiwgdHlwZSwgJnJldHVyblZhbHVlKTsK
K30KKwogLyoqCiAgKiB3ZWJraXRfd2ViX3ZpZXdfbmV3OgogICoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCBhMjVjNDM4ZGQ5MDE5
MzU0MGIwNTVmZjZjNjc0ZmE3YWQzNjdlZjgxLi42OTdmY2RjODBlNjA5M2JkYmZkNGIxMWMzZWRh
NTI5N2M2NDU1Y2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oCkBAIC0zNSw5ICszNSw0NCBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0VVJJUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdFBvbGljeURlY2lzaW9uLmg+CiAKIEdfQkVHSU5fREVDTFMKIAorLyoqCisg
KiBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGU6CisgKiBAV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9U
WVBFX05BVklHQVRJT05fQUNUSU9OOiBUaGlzIHR5cGUgb2YgcG9saWN5IGRlY2lzaW9uCisgKiAg
IGlzIHJlcXVlc3RlZCB3aGVuIFdlYktpdCBpcyBhYm91dCB0byBuYXZpZ2F0ZSB0byBhIG5ldyBw
YWdlIGluIGVpdGhlciB0aGUKKyAqICAgbWFpbiBmcmFtZSBvciBhIHN1YmZyYW1lLiBBY2NlcHRh
YmxlIHBvbGljeSBkZWNpc2lvbnMgYXJlIGVpdGhlcgorICogICB3ZWJraXRfcG9saWN5X2RlY2lz
aW9uX3VzZSgpIG9yIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlKCkuIFRoaXMKKyAqICAg
dHlwZSBvZiBwb2xpY3kgZGVjaXNpb24gaXMgYWx3YXlzIGEgI1dlYktpdE5hdmlnYXRpb25Qb2xp
Y3lEZWNpc2lvbi4KKyAqIEBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkVXX1dJTkRPV19B
Q1RJT046IFRoaXMgdHlwZSBvZiBwb2xpY3kgZGVjaXNpb24KKyAqICAgaXMgcmVxdWVzdGVkIHdo
ZW4gV2ViS2l0IGlzIGFib3V0IHRvIGNyZWF0ZSBhIG5ldyB3aW5kb3cuIEFjY2VwdGFibGUgcG9s
aWN5CisgKiAgIGRlY2lzaW9ucyBhcmUgZWl0aGVyIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fdXNl
KCkgb3IKKyAqICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9pZ25vcmUoKS4gVGhpcyB0eXBlIG9m
IHBvbGljeSBkZWNpc2lvbiBpcyBhbHdheXMKKyAqICAgYSAjV2ViS2l0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uLiBUaGVzZSBkZWNpc2lvbnMgYXJlIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nCisg
KiAgIHNwZWNpYWwgYWN0aW9ucyBmb3IgbmV3IHdpbmRvd3MsIHN1Y2ggYXMgZm9yY2luZyB0aGUg
bmV3IHdpbmRvdyB0byBvcGVuCisgKiAgIGluIGEgdGFiIHdoZW4gYSBrZXlib2FyZCBtb2RpZmll
ciBpcyBhY3RpdmUgb3IgaGFuZGxpbmcgYSBzcGVjaWFsCisgKiAgIHRhcmdldCBhdHRyaWJ1dGUg
b24gJmx0O2EmZ3Q7IGVsZW1lbnRzLgorICogQFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9S
RVNQT05TRTogVGhpcyB0eXBlIG9mIGRlY2lzaW9uIGlzIHVzZWQgd2hlbiBXZWJLaXQgaGFzCisg
KiAgIHJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGEgbmV0d29yayByZXNvdXJjZSBhbmQgaXMgYWJv
dXQgdG8gc3RhcnQgdGhlIGxvYWQuCisgKiAgIE5vdGUgdGhhdCB0aGVzZSByZXNvdXJjZXMgaW5j
bHVkZSBhbGwgc3VicmVzb3VyY2VzIG9mIGEgcGFnZSBzdWNoIGFzIGltYWdlcworICogICBhbmQg
c3R5bGVzaGVldHMgYXMgd2VsbCBhcyBtYWluIGRvY3VtZW50cy4gQXBwcm9wcmlhdGUgcG9saWN5
IHJlc3BvbnNlcyB0bworICogICB0aGlzIGRlY2lzaW9uIGFyZSB3ZWJraXRfcG9saWN5X2RlY2lz
aW9uX3VzZSgpLCB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2lnbm9yZSgpLAorICogICBvciB3ZWJr
aXRfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKCkuIFRoaXMgdHlwZSBvZiBwb2xpY3kgZGVjaXNp
b24gaXMgYWx3YXlzCisgKiAgIGEgI1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uIFRoaXMg
ZGVjaXNpb24gaXMgdXNlZnVsIGZvciBmb3JjaW5nCisgKiAgIHNvbWUgdHlwZXMgb2YgcmVzb3Vy
Y2VzIHRvIGJlIGRvd25sb2FkZWQgcmF0aGVyIHRoYW4gcmVuZGVyZWQgaW4gdGhlIFdlYlZpZXcK
KyAqICAgb3IgdG8gYmxvY2sgdGhlIHRyYW5zZmVyIG9mIHJlc291cmNlcyBlbnRpcmVseS4KKyAq
CisgKiBFbnVtIHZhbHVlcyB1c2VkIGZvciBkZXRlcm1pbmluZyB0aGUgdHlwZSBvZiBhIHBvbGlj
eSBkZWNpc2lvbiBkdXJpbmcKKyAqIFdlYktpdFdlYlZpZXc6OmRlY2lkZS1wb2xpY3kuCisgKi8K
K3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05BVklHQVRJ
T05fQUNUSU9OLAorICAgIFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9ORVdfV0lORE9XX0FD
VElPTiwKKyAgICBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0UsCit9IFdlYktp
dFBvbGljeURlY2lzaW9uVHlwZTsKKwogI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfVklFVyAgICAg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3R5cGUoKSkKICNkZWZpbmUgV0VCS0lUX1dFQl9W
SUVXKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3KSkKICNkZWZpbmUgV0VCS0lUX1dFQl9W
SUVXX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3Q2xhc3MpKQpAQCAtODEsMjYgKzExNiwy
OSBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgewogc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3Mg
ewogICAgIFdlYktpdFdlYlZpZXdCYXNlQ2xhc3MgcGFyZW50OwogCi0gICAgdm9pZCAgICAgICAo
KiBsb2FkX2NoYW5nZWQpICAgKFdlYktpdFdlYlZpZXcgICp3ZWJfdmlldywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TG9hZEV2ZW50IGxvYWRfZXZlbnQpOwotICAg
IGdib29sZWFuICAgKCogbG9hZF9mYWlsZWQpICAgIChXZWJLaXRXZWJWaWV3ICAqd2ViX3ZpZXcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExvYWRFdmVudCBsb2Fk
X2V2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAg
ICAqZmFpbGluZ191cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJv
ciAgICAgICAgICplcnJvcik7Ci0KLSAgICBHdGtXaWRnZXQgKigqIGNyZWF0ZSkgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgKndlYl92aWV3KTsKLSAgICB2b2lkICAgICAgICgqIHJlYWR5X3RvX3No
b3cpICAoV2ViS2l0V2ViVmlldyAgKndlYl92aWV3KTsKLSAgICB2b2lkICAgICAgICgqIGNsb3Nl
KSAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgKndlYl92aWV3KTsKLQotICAgIGdib29sZWFuICAg
KCogc2NyaXB0X2FsZXJ0KSAgIChXZWJLaXRXZWJWaWV3ICAqd2ViX3ZpZXcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICptZXNzYWdlKTsKLSAgICBn
Ym9vbGVhbiAgICgqIHNjcmlwdF9jb25maXJtKSAoV2ViS2l0V2ViVmlldyAgKndlYl92aWV3LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAqbWVzc2Fn
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgKmNv
bmZpcm1lZCk7Ci0gICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfcHJvbXB0KSAgKFdlYktpdFdlYlZp
ZXcgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2NoYXIgICAgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdjaGFyICAgICpkZWZhdWx0X3RleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdjaGFyICAgICAgICAgKip0ZXh0KTsKKyAgICB2b2lkICAgICAgICgqIGxvYWRfY2hh
bmdlZCkgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExvYWRFdmVudCAgICAgICAgICAgIGxvYWRf
ZXZlbnQpOworICAgIGdib29sZWFuICAgKCogbG9hZF9mYWlsZWQpICAgIChXZWJLaXRXZWJWaWV3
ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViS2l0TG9hZEV2ZW50ICAgICAgICAgICAgbG9hZF9ldmVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqZmFpbGluZ191
cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAg
ICAgICAgICAgKmVycm9yKTsKKworICAgIEd0a1dpZGdldCAqKCogY3JlYXRlKSAgICAgICAgIChX
ZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisgICAgdm9pZCAgICAgICAoKiBy
ZWFkeV90b19zaG93KSAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKyAg
ICB2b2lkICAgICAgICgqIGNsb3NlKSAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAqd2ViX3ZpZXcpOworCisgICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfYWxlcnQpICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICptZXNzYWdlKTsKKyAgICBnYm9v
bGVhbiAgICgqIHNjcmlwdF9jb25maXJtKSAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2Vi
X3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAg
ICAgICAgICAgICAgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdib29sZWFuICAgICAgICAgICAgICAgICAgKmNvbmZpcm1lZCk7CisgICAgZ2Jvb2xlYW4gICAo
KiBzY3JpcHRfcHJvbXB0KSAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAg
ICAgICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
Y2hhciAgICAgICAgICAgICAgICpkZWZhdWx0X3RleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdjaGFyICAgICAgICAgICAgICAgICAgICAqKnRleHQpOworICAgIGdib29s
ZWFuICAgKCogZGVjaWRlX3BvbGljeSkgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJf
dmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVj
aXNpb24gICAgICAqZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSAgdHlwZSk7CiAKICAgICAvKiBQYWRkaW5nIGZvciBm
dXR1cmUgZXhwYW5zaW9uICovCiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld1ByaXZhdGUuaAppbmRleCA1YzgxNjFhZmQ0OThkZjcyMjg2NDExYmYwODk2MGJhNDExN2Q3
ZDA4Li42NjM4NmQwMjhlYTczMzVhNmJlNjIyZGVkMDhjNmIxYmM5MjA1MWQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2
YXRlLmgKQEAgLTQyLDUgKzQyLDYgQEAgdm9pZCB3ZWJraXRXZWJWaWV3Q2xvc2VQYWdlKFdlYktp
dFdlYlZpZXcqKTsKIHZvaWQgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRBbGVydChXZWJLaXRX
ZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7CiBib29sIHdlYmtpdFdlYlZpZXdSdW5K
YXZhU2NyaXB0Q29uZmlybShXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7
CiBXS1N0cmluZ1JlZiB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdFByb21wdChXZWJLaXRXZWJW
aWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSwgY29uc3QgQ1N0cmluZyYgZGVmYXVsdFRleHQp
Owordm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBvbGljeURlY2lzaW9uKFdlYktpdFdlYlZpZXcqLCBX
ZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUsIFdlYktpdFBvbGljeURlY2lzaW9uKik7CiAKICNlbmRp
ZiAvLyBXZWJLaXRXZWJWaWV3UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCA2YzBl
YzQ2MmExNjczMzM2OTI5OWZiNjgzYjFhMzllMGQ1ZTczMTAwLi5jNmY5NDNhYjJhNjg4MDI5ZDk1
NmViYjY4NTBmZWNiMWYyNGMyMGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTIxLDYgKzIx
LDggQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0VVJJUmVzcG9uc2UueG1sIi8+
CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMueG1sIi8+
CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERvd25sb2FkLnhtbCIvPgorICAgIDx4
aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRQb2xpY3lEZWNpc2lvbi54bWwiLz4KKyAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLnhtbCIvPgog
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRFcnJvci54bWwiLz4KICAgPC9jaGFwdGVy
PgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCA0Nzg5NzliYjhkOWI1ZDcwMTlkMTE4
MWU4Yzc2NjJlNDg5OWEzYjdkLi4yMWQ0N2IzNzc4ZmFkYjY0NjkyMTczMzhkZGU1ZmU2ZDQ3NzEy
ZGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTQ4LDYgKzQ4LDcgQEAgd2Via2l0
X3dlYl9jb250ZXh0X2dldF90eXBlCiA8VElUTEU+V2ViS2l0V2ViVmlldzwvVElUTEU+CiBXZWJL
aXRXZWJWaWV3CiBXZWJLaXRMb2FkRXZlbnQKK1dlYktpdFBvbGljeURlY2lzaW9uVHlwZQogd2Vi
a2l0X3dlYl92aWV3X25ldwogd2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQKIHdlYmtp
dF93ZWJfdmlld19nZXRfY29udGV4dApAQCAtMzEyLDYgKzMxMyw1MiBAQCB3ZWJraXRfZG93bmxv
YWRfZ2V0X3R5cGUKIDwvU0VDVElPTj4KIAogPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRQb2xpY3lE
ZWNpc2lvbjwvRklMRT4KK1dlYktpdFBvbGljeURlY2lzaW9uCit3ZWJraXRfcG9saWN5X2RlY2lz
aW9uX2Rvd25sb2FkCit3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2lnbm9yZQord2Via2l0X3BvbGlj
eV9kZWNpc2lvbl91c2UKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRQb2xpY3lEZWNp
c2lvbkNsYXNzCitXRUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJT04KK1dFQktJVF9QT0xJQ1lfREVD
SVNJT04KK1dFQktJVF9JU19QT0xJQ1lfREVDSVNJT04KK1dFQktJVF9QT0xJQ1lfREVDSVNJT05f
Q0xBU1MKK1dFQktJVF9JU19QT0xJQ1lfREVDSVNJT05fQ0xBU1MKK1dFQktJVF9QT0xJQ1lfREVD
SVNJT05fR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRQb2xpY3lEZWNp
c2lvblByaXZhdGUKK3dlYmtpdF9wb2xpY3lfZGVjaXNpb25fZ2V0X3R5cGUKKzwvU0VDVElPTj4K
KworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb248L0ZJTEU+
CitXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24KK1dlYktpdE1vdXNlQnV0dG9uCitXZWJL
aXROYXZpZ2F0aW9uVHlwZQord2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9m
cmFtZV9uYW1lCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vZGlmaWVy
cword2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb3VzZV9idXR0b24KK3dl
YmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbmF2aWdhdGlvbl90eXBlCit3ZWJr
aXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X3JlcXVlc3QKKworPFNVQlNFQ1RJT04g
U3RhbmRhcmQ+CitXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25DbGFzcworV0VCS0lUX1RZ
UEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04KK1dFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9E
RUNJU0lPTgorV0VCS0lUX0lTX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OCitXRUJLSVRfTkFW
SUdBVElPTl9QT0xJQ1lfREVDSVNJT05fQ0xBU1MKK1dFQktJVF9JU19OQVZJR0FUSU9OX1BPTElD
WV9ERUNJU0lPTl9DTEFTUworV0VCS0lUX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OX0dFVF9D
TEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uUHJpdmF0ZQord2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF90eXBlCis8
L1NFQ1RJT04+CisKKzxTRUNUSU9OPgogPEZJTEU+V2ViS2l0RXJyb3I8L0ZJTEU+CiBXRUJLSVRf
TkVUV09SS19FUlJPUgogV0VCS0lUX1BMVUdJTl9FUlJPUgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQppbmRleCBkN2NiMmVk
NjQwOTI5YmM3YjgxY2ZlYzZlNTYxZTExMjNjMjg5OWIyLi5jMWVkMWIzNDM1YmQxODE0NTQ5ZGMz
M2I2MTM1YTliY2NjNDhiMmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpAQCAtNCw3ICs0LDggQEAgVEVTVF9QUk9H
UyArPSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJMb2FkZXJDbGll
bnQgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MgXAogCVBy
b2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0IFwKLQlQcm9ncmFtcy9X
ZWJLaXQyQVBJVGVzdHMvVGVzdERvd25sb2FkcworCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9U
ZXN0RG93bmxvYWRzIFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFBvbGlj
eUNsaWVudAogCiBub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQogCkBAIC04NSw2ICs4
NiwxMiBAQCBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9DUFBG
TEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncwogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3Rz
X1Rlc3RCYWNrRm9yd2FyZExpc3RfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCiBQcm9n
cmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2xkZmxhZ3MpCiAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0
UG9saWN5Q2xpZW50X1NPVVJDRVMgPSBcCisgICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCitQcm9ncmFtc19XZWJL
aXQyQVBJVGVzdHNfVGVzdFdlYktpdFBvbGljeUNsaWVudF9DUFBGTEFHUyA9ICQod2Via2l0Ml90
ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0UG9saWN5
Q2xpZW50X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19s
ZGZsYWdzKQorCiBpZiBIQVZFX0FUU1BJMgogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX0FjY2Vz
c2liaWxpdHlUZXN0U2VydmVyX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwCkBAIC0xMDQsNCArMTEx
LDMgQEAgUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfU09VUkNFUyA9IFwK
IFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0RG93bmxvYWRzX0NQUEZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2NwcGZsYWdzKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3REb3dubG9h
ZHNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVz
dHNfVGVzdERvd25sb2Fkc19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRQb2xpY3lDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQwZmIzYzllNGM1M2Zm
NTk0ZDA0ZWU2ODRiYzcwMjcwYmRkNjI3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCkBA
IC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCitjbGFzcyBQb2xpY3lDbGllbnRUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShQb2xpY3lDbGllbnRUZXN0KTsKKwor
ICAgIGVudW0gUG9saWN5RGVjaXNpb25SZXNwb25zZSB7CisgICAgICAgIFVzZSwKKyAgICAgICAg
SWdub3JlLAorICAgICAgICBEb3dubG9hZCwKKyAgICAgICAgTm9uZQorICAgIH07CisKKyAgICBQ
b2xpY3lDbGllbnRUZXN0KCkKKyAgICAgICAgOiBMb2FkVHJhY2tpbmdUZXN0KCkKKyAgICAgICAg
LCBtX3BvbGljeURlY2lzaW9uUmVzcG9uc2UoTm9uZSkKKyAgICAgICAgLCBtX3BvbGljeURlY2lz
aW9uVHlwZUZpbHRlcigwKQorICAgICAgICAsIG1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3lu
Y2hyb25vdXNseShmYWxzZSkKKyAgICAgICAgLCBtX2hhbHRNYWluTG9vcEFmdGVyTWFraW5nRGVj
aXNpb24oZmFsc2UpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywg
ImRlY2lkZS1wb2xpY3kiLCBHX0NBTExCQUNLKGRlY2lkZVBvbGljeUNhbGxiYWNrKSwgdGhpcyk7
CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHF1aXRNYWluTG9vcExhdGVyKEdNYWluTG9v
cCogbG9vcCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgICAg
IHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXNwb25kVG9Qb2xpY3lE
ZWNpc2lvbihQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVj
aXNpb24pCisgICAgeworICAgICAgICBzd2l0Y2ggKHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNw
b25zZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVj
aXNpb25fdXNlKGRlY2lzaW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEln
bm9yZToKKyAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlKGRlY2lzaW9u
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERvd25sb2FkOgorICAgICAgICAg
ICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBOb25lOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodGVzdC0+bV9oYWx0TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lzaW9u
KQorICAgICAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihx
dWl0TWFpbkxvb3BMYXRlciksIHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRp
YyBnYm9vbGVhbiByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKFBvbGljeUNsaWVudFRlc3Qq
IHRlc3QpCisgICAgeworICAgICAgICByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbih0ZXN0LCB0ZXN0
LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24uZ2V0KCkpOworICAgICAgICB0ZXN0LT5tX3ByZXZp
b3VzUG9saWN5RGVjaXNpb24gPSAwOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisg
ICAgc3RhdGljIGdib29sZWFuIGRlY2lkZVBvbGljeUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIFdlYktpdFBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiwgV2ViS2l0UG9saWN5RGVjaXNp
b25UeXBlIHR5cGUsIFBvbGljeUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAo
dGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgIT0gdHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiBGQUxTRTsKKworICAgICAgICB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24gPSBk
ZWNpc2lvbjsKKyAgICAgICAgaWYgKHRlc3QtPm1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3lu
Y2hyb25vdXNseSkgeworICAgICAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdT
b3VyY2VGdW5jPihyZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKSwgdGVzdCk7CisgICAgICAg
ICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICByZXNwb25kVG9Qb2xpY3lE
ZWNpc2lvbih0ZXN0LCBkZWNpc2lvbik7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisK
KyAgICBQb2xpY3lEZWNpc2lvblJlc3BvbnNlIG1fcG9saWN5RGVjaXNpb25SZXNwb25zZTsKKyAg
ICBpbnQgbV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXI7CisgICAgYm9vbCBtX3Jlc3BvbmRUb1Bv
bGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHk7CisgICAgYm9vbCBtX2hhbHRNYWluTG9vcEFmdGVy
TWFraW5nRGVjaXNpb247CisgICAgR1JlZlB0cjxXZWJLaXRQb2xpY3lEZWNpc2lvbj4gbV9wcmV2
aW91c1BvbGljeURlY2lzaW9uOworfTsKKworc3RhdGljIHZvaWQgdGVzdE5hdmlnYXRpb25Qb2xp
Y3koUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5t
X3BvbGljeURlY2lzaW9uVHlwZUZpbHRlciA9IFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9O
QVZJR0FUSU9OX0FDVElPTjsKKworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9
IFBvbGljeUNsaWVudFRlc3Q6OlVzZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJo
dHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMp
OworCisgICAgLy8gSWRlYWxseSB3ZSdkIGxpa2UgdG8gaGF2ZSBhIG1vcmUgaW50ZW5zaXZlIHRl
c3QgaGVyZSwgYnV0IGl0J3Mgc3RpbGwgcHJldHR5IHRyaWNreQorICAgIC8vIHRvIHRyaWdnZXIg
ZGlmZmVyZW50IHR5cGVzIG9mIG5hdmlnYXRpb25zIHdpdGggdGhlIEdUSysgV2ViS2l0MiBBUEku
CisgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJVF9O
QVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTih0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24u
Z2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVj
aXNpb25fZ2V0X25hdmlnYXRpb25fdHlwZShkZWNpc2lvbiksID09LCBXRUJLSVRfTkFWSUdBVElP
Tl9UWVBFX09USEVSKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X25hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uX2dldF9tb3VzZV9idXR0b24oZGVjaXNpb24pLCA9PSwgV0VCS0lUX01PVVNF
X0JVVFRPTl9OT05FKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X25hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uX2dldF9tb2RpZmllcnMoZGVjaXNpb24pLCA9PSwgMCk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfZnJhbWVfbmFt
ZShkZWNpc2lvbiksID09LCAwKTsKKyAgICBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Vi
a2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9yZXF1ZXN0KGRlY2lzaW9uKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09
LCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7CisKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9u
UmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7CisgICAgdGVzdC0+bV9yZXNwb25kVG9Q
b2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gdHJ1ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNp
emUoKSwgPT0sIDMpOworCisgICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcgdW50aWwgbG9hZCBjb21w
bGV0aW9uLCBpdCB3aWxsIG5ldmVyIGNvbXBsZXRlIGlmIHdlIGlnbm9yZSB0aGUKKyAgICAvLyBu
YXZpZ2F0aW9uLiBTbyB3ZSB0ZWxsIHRoZSBtYWluIGxvb3AgdG8gcXVpdCBzb21ldGltZSBsYXRl
ci4KKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0
OjpJZ25vcmU7CisgICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91
c2x5ID0gZmFsc2U7CisgICAgdGVzdC0+bV9oYWx0TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lzaW9u
ID0gdHJ1ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3Rr
Lm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDApOworfQorCitzdHJ1Y3Qg
Q3JlYXRlQ2FsbGJhY2tEYXRhIHsKKyAgICBib29sIHRyaWVkVG9PcGVuV2luZG93OworICAgIEdN
YWluTG9vcCogbWFpbkxvb3A7Cit9OworCitzdGF0aWMgV2ViS2l0V2ViVmlldyogY3JlYXRlQ2Fs
bGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgQ3JlYXRlQ2FsbGJhY2tEYXRhKiBkYXRhKQor
eworICAgIGRhdGEtPnRyaWVkVG9PcGVuV2luZG93ID0gdHJ1ZTsKKyAgICBnX21haW5fbG9vcF9x
dWl0KGRhdGEtPm1haW5Mb29wKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVz
dE5ld1dpbmRvd1BvbGljeShQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB3aW5kb3dPcGVuaW5nSFRNTCA9CisgICAgICAgICI8
aHRtbD48Ym9keT4iCisgICAgICAgICIgICAgPGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly93
d3cuZ29vZ2xlLmNvbVwiIHRhcmdldD1cIl9ibGFua1wiPkxpbms8L2E+IgorICAgICAgICAiICAg
IDxzY3JpcHQ+IgorICAgICAgICAiICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVF
dmVudCgnTW91c2VFdmVudHMnKTsiCisgICAgICAgICIgICAgICAgIGV2ZW50LmluaXRFdmVudCgn
Y2xpY2snLCB0cnVlLCBmYWxzZSk7IgorICAgICAgICAiICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnbGluaycpLmRpc3BhdGNoRXZlbnQoZXZlbnQpOyIKKyAgICAgICAgIiAgICA8L3Nj
cmlwdD4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bV9wb2xpY3lEZWNp
c2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkVXX1dJTkRPV19B
Q1RJT047CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRv
d3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2Vi
VmlldyksIFRSVUUpOworCisgICAgQ3JlYXRlQ2FsbGJhY2tEYXRhIGRhdGE7CisgICAgZGF0YS50
cmllZFRvT3BlbldpbmRvdyA9IGZhbHNlOworICAgIGRhdGEubWFpbkxvb3AgPSB0ZXN0LT5tX21h
aW5Mb29wOworCisgICAgZ19zaWduYWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJjcmVhdGUi
LCBHX0NBTExCQUNLKGNyZWF0ZUNhbGxiYWNrKSwgJmRhdGEpOworICAgIHRlc3QtPm1fcG9saWN5
RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6OlVzZTsKKyAgICB0ZXN0LT5sb2Fk
SHRtbCh3aW5kb3dPcGVuaW5nSFRNTCwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOworICAgIHRl
c3QtPndhaXQoMSk7CisgICAgZ19hc3NlcnQoZGF0YS50cmllZFRvT3BlbldpbmRvdyk7CisKKyAg
ICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uID0gV0VCS0lUX05BVklH
QVRJT05fUE9MSUNZX0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQo
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lv
bl9nZXRfZnJhbWVfbmFtZShkZWNpc2lvbiksID09LCAiX2JsYW5rIik7CisKKyAgICAvLyBVc2lu
ZyBhIHNob3J0IHRpbWVvdXQgaXMgYSBiaXQgdWdseSBoZXJlLCBidXQgaXQncyBoYXJkIHRvIGdl
dCBhcm91bmQgYmVjYXVzZSBpZiB3ZSBibG9jaworICAgIC8vIHRoZSBuZXcgd2luZG93IHNpZ25h
bCB3ZSBjYW5ub3QgaGFsdCB0aGUgbWFpbiBsb29wIGluIHRoZSBjcmVhdGUgY2FsbGJhY2suIElm
IHdlCisgICAgLy8gaGFsdCB0aGUgbWFpbiBsb29wIGluIHRoZSBwb2xpY3kgZGVjaXNpb24sIHRo
ZSBjcmVhdGUgY2FsbGJhY2sgbmV2ZXIgZXhlY3V0ZXMuCisgICAgZGF0YS50cmllZFRvT3Blbldp
bmRvdyA9IGZhbHNlOworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGlj
eUNsaWVudFRlc3Q6Oklnbm9yZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCh3aW5kb3dPcGVuaW5nSFRN
TCwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOworICAgIHRlc3QtPndhaXQoLjIpOworICAgIGdf
YXNzZXJ0KCFkYXRhLnRyaWVkVG9PcGVuV2luZG93KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQor
eworICAgIFBvbGljeUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0UG9saWN5Q2xpZW50IiwgIm5hdmln
YXRpb24tcG9saWN5IiwgdGVzdE5hdmlnYXRpb25Qb2xpY3kpOworICAgIFBvbGljeUNsaWVudFRl
c3Q6OmFkZCgiV2ViS2l0UG9saWN5Q2xpZW50IiwgIm5ldy13aW5kb3ctcG9saWN5IiwgdGVzdE5l
d1dpbmRvd1BvbGljeSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKaW5kZXgg
ZTZkZGExMGFlZmFkZTYzOWZjOGJhM2Q1N2JhZmQ5OTVmN2Q5YTBhMi4uNTkxOGQwOTVhOTFmN2Y3
ZjJiNWQxNzYyOTliNWJlYjQzN2JkNDZiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CkBAIC0xLDUgKzEsNiBAQAogQk9P
TEVBTjpFTlVNLFNUUklORyxQT0lOVEVSCiBCT09MRUFOOk9CSkVDVAorQk9PTEVBTjpPQkpFQ1Qs
RU5VTQogQk9PTEVBTjpPQkpFQ1QsU1RSSU5HLFBPSU5URVIKIEJPT0xFQU46UE9JTlRFUgogQk9P
TEVBTjpTVFJJTkcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123985</attachid>
            <date>2012-01-25 12:03:55 -0800</date>
            <delta_ts>2012-01-27 07:57:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76343-20120125120354.patch</filename>
            <type>text/plain</type>
            <size>67868</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1ODkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjIxNGRkZGMwMzNiMWYz
OGU3YTNhNjg3ODAxOTZkNjFkYTY3ODY3Mi4uZDlmYjVmYTY2NjdiMWIyZTMzMTRkMDI0M2JlNzRl
MzEwZThmZTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAxLTI0ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBbV0sy
XSBJbXBsZW1lbnQgdGhlIHBvbGljeSBjbGllbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRoZSBhYnN0cmFjdCBXZWJLaXRQb2xpY3lE
ZWNpc2lvbiwgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLAorICAgICAgICBhbmQgYWRk
IHRoZSBkZWNpZGUtcG9saWN5IHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3LgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gdGhlIHNvdXJjZSBsaXN0LgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcDogVXNlIHRoZSBXZWJDb3JlIG5h
bWVzcGFjZSBiZWNhdXNlCisgICAgICAgIG9mIGNoYW5nZXMgdG8gQVNTRVJUX01BVENISU5HX0VO
VU1TLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlLmg6IEFkZGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudFByaXZhdGUuaDog
QWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNp
c2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lE
ZWNpc2lvblByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UHJpdmF0ZS5oOiBNb2RpZnkgQVNTRVJUX01BVENISU5HX0VOVU1TIHRvIG1ha2UKKyAgICAg
ICAgaXQgdXNlZnVsIGZvciBub24tV2ViQ29yZSBlbnVtcy4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDb25zdHJ1
Y3RlZCk6IEF0dGFjaCB0aGUgcG9saWN5IGNsaWVudCBjYWxsYmFja3MgdG8gdGhlIHBhZ2UuCisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IEFkZCB0aGUgZGVjaWRlLXBvbGlj
eSBzaWduYWwgZGVmaW5pdGlvbi4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdNYWtlUG9saWN5RGVj
aXNpb24pOiBBZGRlZCB0aGlzIHByaXZhdGUgbWV0aG9kIHRvIGZpcmUgdGhlIHNpZ25hbC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6IEFkZGVkIG5ldyBzaWdu
YWwgdG8gdGhlIGxpc3QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d1ByaXZhdGUuaDogQWRkZWQgbmV3IG1ldGhvZCBkZWNsYXJhdGlvbi4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBuZXcgY2xhc3Nl
cyB0byB0aGUgZG9jcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstc2VjdGlvbnMudHh0OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHRlc3QgdG8gdGhlIHNvdXJjZSBsaXN0LgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0
OiBkZWNpZGUtcG9saWN5IGhhcyBhIG5ldyBzaWduYXR1cmUuCisKIDIwMTItMDEtMjUgIE7DoW5k
b3IgSHVzemthICA8aHVzemthLm5hbmRvckBzdHVkLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFtX
SzJdIFdlYktpdFRlc3RSdW5uZXIgbmVlZHMgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0UG9wdXBC
bG9ja2luZ0VuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFt
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggODAxOTg0NzZiNDc2ZDRiODhl
NzY4YThmODI3OTlkMjU4MTdlMjgyMS4uYTJlZmZjYzc3NTA3ZjIyMjNmNjEyNGI4YzljNzVjMGY4
YWMxM2YwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIv
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTg1LDEwICs4NSwxMiBAQCBsaWJ3ZWJr
aXQyZ3RraW5jbHVkZV9IRUFERVJTID0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RGVmaW5lcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERv
d25sb2FkLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBc
Ci0JJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAorCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9u
LmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24u
aCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlcXVlc3QuaCBcCiAJJChXZWJL
aXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklSZXNwb25zZS5oIFwKKwkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBcCiAJJChXZWJLaXQyKS9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmggXApAQCAtNTMxLDYgKzUzMywxMyBAQCBsaWJ3ZWJr
aXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9S
X1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEVycm9yLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9h
ZGVyQ2xpZW50LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExv
YWRlckNsaWVudC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2
YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURl
Y2lzaW9uLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9s
aWN5RGVjaXNpb24uaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
UG9saWN5Q2xpZW50LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UG9saWN5Q2xpZW50UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFNldHRpbmdzLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0U2V0dGluZ3MuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRFcnJvci5jcHAKaW5kZXggYWRkY2YxYmQ1YmE3NmUyMjA0NGU0ZTM3NzJmZDYzZTM4
NzIyYjE5My4uNDJjZjBhYjM1ZTJkNTQ5YmYwNTNmNzcwNTAyMTJlOTBiMmNkMTc3YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcApAQCAt
MjQsNiArMjQsOCBAQAogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0Vycm9yc0d0ay5oPgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogR1F1YXJrIHdl
YmtpdF9uZXR3b3JrX2Vycm9yX3F1YXJrKCkKIHsKICAgICByZXR1cm4gZ19xdWFya19mcm9tX3N0
YXRpY19zdHJpbmcoV2ViQ29yZTo6ZXJyb3JEb21haW5OZXR3b3JrKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjZDU3YjRhNmZlNDhjNWE3ODhjZDFh
YzI1NTI3N2EwMjBjNzMyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwCkBAIC0wLDAg
KzEsMzA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCIK
KworI2luY2x1ZGUgIldlYktpdEVudW1UeXBlcy5oIgorI2luY2x1ZGUgIldlYktpdFBvbGljeURl
Y2lzaW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRVUklSZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKKyNp
bmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisvKioKKyAqIFNFQ1RJT046IFdlYktpdE5hdmln
YXRpb25Qb2xpY3lEZWNpc2lvbgorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBBIHBvbGljeSBkZWNp
c2lvbiBmb3IgbmF2aWdhdGlvbiBhY3Rpb25zCisgKiBAVGl0bGU6IFdlYktpdE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbgorICogQFNlZV9hbHNvOiAjV2ViS2l0UG9saWN5RGVjaXNpb24sICNXZWJL
aXRXZWJWaWV3CisgKgorICogV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uIHJlcHJlc2Vu
dHMgYSBwb2xpY3kgZGVjaXNpb24gZm9yIGV2ZW50cyBhc3NvY2lhdGVkIHdpdGgKKyAqIG5hdmln
YXRpb25zLiBJZiB0aGUgdmFsdWUgb2YgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uOm1v
dXNlLWJ1dHRvbiBpcyBub3QgMCwgdGhlbgorICogdGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJl
ZCBieSBhIG1vdXNlIGV2ZW50LgorICovCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uLCB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24sIFdFQktJ
VF9UWVBFX1BPTElDWV9ERUNJU0lPTikKKworc3RydWN0IF9XZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb25Qcml2YXRlIHsKKyAgICBXZWJLaXROYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlw
ZTsKKyAgICB1bnNpZ25lZCBtb2RpZmllcnM7CisgICAgdW5zaWduZWQgbW91c2VCdXR0b247Cisg
ICAgR1JlZlB0cjxXZWJLaXRVUklSZXF1ZXN0PiByZXF1ZXN0OworICAgIENTdHJpbmcgZnJhbWVO
YW1lOworfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTkFWSUdBVElPTl9UWVBF
LAorICAgIFBST1BfTU9VU0VfQlVUVE9OLAorICAgIFBST1BfTU9ESUZJRVJTLAorICAgIFBST1Bf
UkVRVUVTVCwKKyAgICBQUk9QX0ZSQU1FX05BTUUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRf
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25faW5pdChXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVj
aXNpb24qIGRlY2lzaW9uKQoreworICAgIGRlY2lzaW9uLT5wcml2ID0gR19UWVBFX0lOU1RBTkNF
X0dFVF9QUklWQVRFKGRlY2lzaW9uLCBXRUJLSVRfVFlQRV9OQVZJR0FUSU9OX1BPTElDWV9ERUNJ
U0lPTiwgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSk7CisgICAgbmV3IChk
ZWNpc2lvbi0+cHJpdikgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSgpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25GaW5hbGl6ZShH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgV0VCS0lUX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9O
KG9iamVjdCktPnByaXYtPn5XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlKCk7
CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbkdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJVF9OQVZJR0FUSU9O
X1BPTElDWV9ERUNJU0lPTihvYmplY3QpOworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2Fz
ZSBQUk9QX05BVklHQVRJT05fVFlQRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZW51bSh2YWx1ZSwg
d2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUoZGVj
aXNpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01PVVNFX0JVVFRPTjoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfZW51bSh2YWx1ZSwgd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2Rl
Y2lzaW9uX2dldF9tb3VzZV9idXR0b24oZGVjaXNpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX01PRElGSUVSUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Vi
a2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb2RpZmllcnMoZGVjaXNpb24pKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFUVVFU1Q6CisgICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9y
ZXF1ZXN0KGRlY2lzaW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GUkFNRV9O
QU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9uYXZpZ2F0aW9u
X3BvbGljeV9kZWNpc2lvbl9nZXRfZnJhbWVfbmFtZShkZWNpc2lvbikpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2NsYXNzX2lu
aXQoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ2xhc3MqIGRlY2lzaW9uQ2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGRlY2lzaW9u
Q2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdE5hdmlnYXRpb25Qb2xp
Y3lEZWNpc2lvbkZpbmFsaXplOworICAgIG9iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25HZXRQcm9wZXJ0eTsKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUoZGVjaXNpb25DbGFzcywgc2l6ZW9mKFdlYktpdE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvblByaXZhdGUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdE5hdmlnYXRpb25Qb2xp
Y3lEZWNpc2lvbjpuYXZpZ2F0aW9uLXR5cGU6CisgICAgICoKKyAgICAgKiBUaGUgdHlwZSBvZiBu
YXZpZ2F0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoaXMgcG9saWN5IGRlY2lzaW9uLiBUaGlzIGlzCisg
ICAgICogdXNlZnVsIGZvciBlbmFjdGluZyBkaWZmZXJlbnQgcG9saWNpZXMgZGVwZW5kaW5nIG9u
IHdoYXQgdHlwZSBvZiB1c2VyCisgICAgICogYWN0aW9uIGNhdXNlZCB0aGUgbmF2aWdhdGlvbi4K
KyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9OQVZJR0FUSU9OX1RZ
UEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZW51
bSgibmF2aWdhdGlvbi10eXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIk5hdmlnYXRpb24gdHlwZSIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHR5cGUgb2YgbmF2
aWdhdGlvbiB0cmlnZ2VyaW5nIHRoaXMgZGVjaXNpb24iKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX05BVklHQVRJT05f
VFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VELAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb246
bW91c2UtYnV0dG9uOgorICAgICAqCisgICAgICogSWYgdGhlIG5hdmlnYXRpb24gYXNzb2NpYXRl
ZCB3aXRoIHRoaXMgcG9saWN5IGRlY2lzaW9uIHdhcyBvcmlnaW5hbGx5CisgICAgICogdHJpZ2dl
cmVkIGJ5IGEgbW91c2UgZXZlbnQsIHRoaXMgcHJvcGVydHkgY29udGFpbnMgbm9uLXplcm8gYnV0
dG9uIG51bWJlcgorICAgICAqIG9mIHRoZSBidXR0b24gdHJpZ2dlcmluZyB0aGF0IGV2ZW50LiBU
aGUgYnV0dG9uIG51bWJlcnMgbWF0Y2ggdGhvc2UgZnJvbSBHREsuCisgICAgICogSWYgdGhlIG5h
dmlnYXRpb24gd2FzIG5vdCB0cmlnZ2VyZWQgYnkgYSBtb3VzZSBldmVudCwgdGhlIHZhbHVlIG9m
IHRoaXMKKyAgICAgKiBwcm9wZXJ0eSB3aWxsIGJlIDAuCisgICAgICovCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBST1BfTU9VU0VfQlVUVE9OLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoIm1vdXNlLWJ1dHRvbiIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJNb3VzZSBi
dXR0b24iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlRoZSBtb3VzZSBidXR0b24gdXNlZCBpZiB0aGlzIGRlY2lzaW9uIHdhcyB0cmln
Z2VyZWQgYnkgYSBtb3VzZSBldmVudCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb246
bW9kaWZpZXJzOgorICAgICAqCisgICAgICogSWYgdGhlIG5hdmlnYXRpb24gYXNzb2NpYXRlZCB3
aXRoIHRoaXMgcG9saWN5IGRlY2lzaW9uIHdhcyBvcmlnaW5hbGx5CisgICAgICogdHJpZ2dlcmVk
IGJ5IGEgbW91c2UgZXZlbnQsIHRoaXMgcHJvcGVydHkgY29udGFpbnMgYSBiaXRtYXNrIG9mIHZh
cmlvdXMKKyAgICAgKiBHZGtNb2RpZmllclR5cGUgdmFsdWVzIGRlc2NyaWJpbmcgdGhlIG1vZGlm
aWVycyB1c2VkIGZvciB0aGF0IGNsaWNrLgorICAgICAqIElmIHRoZSBuYXZpZ2F0aW9uIHdhcyBu
b3QgdHJpZ2dlcmVkIGJ5IGEgbW91c2UgZXZlbnQgb3Igbm8gbW9kaWZpZXJzCisgICAgICogd2Vy
ZSBhY3RpdmUsIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IHdpbGwgYmUgemVyby4KKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9NT0RJRklFUlMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgibW9kaWZpZXJz
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8oIk1vdXNlIGV2ZW50IG1vZGlmaWVycyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG1vZGlmaWVycyBhY3RpdmUgaWYgdGhp
cyBkZWNpc2lvbiB3YXMgdHJpZ2dlcmVkIGJ5IGEgbW91c2UgZXZlbnQiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uOnJlcXVlc3Q6CisgICAgICoKKyAgICAgKiBUaGlzIHByb3BlcnR5
IGNvbnRhaW5zIHRoZSAjV2ViS2l0VVJJUmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAg
ICAqIG5hdmlnYXRpb24uCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
T1BfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoInJlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiTmF2aWdhdGlvbiBVUkkgcmVxdWVzdCIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIFVS
SSByZXF1ZXN0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmF2aWdhdGlvbiIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1RZUEVfVVJJX1JFUVVFU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAg
ICAqIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbjpmcmFtZS1uYW1lOgorICAgICAqCisg
ICAgICogSWYgdGhpcyBuYXZpZ2F0aW9uIHJlcXVlc3QgdGFyZ2V0cyBhIG5ldyBmcmFtZSwgdGhp
cyBwcm9wZXJ0eSBjb250YWlucworICAgICAqIHRoZSBuYW1lIG9mIHRoYXQgZnJhbWUuIEZvciBl
eGFtcGxlIGlmIHRoZSBkZWNpc2lvbiB3YXMgdHJpZ2dlcmVkIGJ5IGNsaWNraW5nIGEKKyAgICAg
KiBsaW5rIHdpdGggYSB0YXJnZXQgYXR0cmlidXRlIGVxdWFsIHRvICJfYmxhbmsiLCB0aGlzIHBy
b3BlcnR5IHdpbGwgY29udGFpbiB0aGUKKyAgICAgKiB2YWx1ZSBvZiB0aGF0IGF0dHJpYnV0ZS4g
SW4gYWxsIG90aGVyIGNhc2VzLCB0aGlzIHZhbHVlIHdpbGwgYmUgJU5VTEwuCisgICAgICovCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfRlJBTUVfTkFNRSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoImZyYW1lLW5hbWUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XygiRnJhbWUgbmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiVGhlIG5hbWUgb2YgdGhlIG5ldyBmcmFtZSB0aGlzIG5hdmlnYXRp
b24gYWN0aW9uIHRhcmdldHMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKK30KKworLyoqCisg
KiB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X25hdmlnYXRpb25fdHlwZToK
KyAqIEBkZWNpc2lvbjogYSAjV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uCisgKgorICog
R2V0cyB0aGUgdmFsdWUgb2YgdGhlICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb246bmF2
aWdhdGlvbi10eXBlIHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6IFRoZSB0eXBlIG9mIG5hdmln
YXRpb24gdHJpZ2dlcmluZyB0aGlzIHBvbGljeSBkZWNpc2lvbi4KKyAqLworV2ViS2l0TmF2aWdh
dGlvblR5cGUgd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9uYXZpZ2F0aW9u
X3R5cGUoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04o
ZGVjaXNpb24pLCBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX09USEVSKTsKKyAgICByZXR1cm4gZGVj
aXNpb24tPnByaXYtPm5hdmlnYXRpb25UeXBlOworfQorCisvKioKKyAqIHdlYmtpdF9uYXZpZ2F0
aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW91c2VfYnV0dG9uOgorICogQGRlY2lzaW9uOiBhICNX
ZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24KKyAqCisgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0
aGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbjptb3VzZS1idXR0b24gcHJvcGVydHku
CisgKgorICogUmV0dXJuczogVGhlIG1vdXNlIGJ1dHRvbiB1c2VkIGlmIHRoaXMgZGVjaXNpb24g
d2FzIHRyaWdnZXJlZCBieSBhIG1vdXNlIGV2ZW50IG9yIDAgb3RoZXJ3aXNlCisgKi8KK2d1aW50
IHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW91c2VfYnV0dG9uKFdlYktp
dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9uKSwg
MCk7CisgICAgcmV0dXJuIGRlY2lzaW9uLT5wcml2LT5tb3VzZUJ1dHRvbjsKK30KKworLyoqCisg
KiB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vZGlmaWVyczoKKyAqIEBk
ZWNpc2lvbjogYSAjV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uCisgKgorICogR2V0cyB0
aGUgdmFsdWUgb2YgdGhlICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb246bW9kaWZpZXJz
IHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6IFRoZSBtb2RpZmllcnMgYWN0aXZlIGlmIHRoaXMg
ZGVjaXNpb24gd2FzIHRyaWdnZXJlZCBieSBhIG1vdXNlIGV2ZW50CisgKi8KK3Vuc2lnbmVkIHdl
YmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW9kaWZpZXJzKFdlYktpdE5hdmln
YXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9uKSwgMCk7Cisg
ICAgcmV0dXJuIGRlY2lzaW9uLT5wcml2LT5tb2RpZmllcnM7Cit9CisKKy8qKgorICogd2Via2l0
X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9yZXF1ZXN0OgorICogQGRlY2lzaW9uOiBh
ICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24KKyAqCisgKiBHZXRzIHRoZSB2YWx1ZSBv
ZiB0aGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbjpyZXF1ZXN0IHByb3BlcnR5Lgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogVGhlIFVSSSByZXF1ZXN0IHRoYXQgaXMg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgbmF2aWdhdGlvbgorICovCitXZWJLaXRVUklSZXF1ZXN0KiB3
ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X3JlcXVlc3QoV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04oZGVjaXNpb24pLCAwKTsKKyAg
ICByZXR1cm4gZGVjaXNpb24tPnByaXYtPnJlcXVlc3QuZ2V0KCk7Cit9CisKKy8qKgorICogd2Vi
a2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9mcmFtZV9uYW1lOgorICogQGRlY2lz
aW9uOiBhICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24KKyAqCisgKiBHZXRzIHRoZSB2
YWx1ZSBvZiB0aGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbjpmcmFtZS1uYW1lIHBy
b3BlcnR5LgorICoKKyAqIFJldHVybnM6IFRoZSBuYW1lIG9mIHRoZSBuZXcgZnJhbWUgdGhpcyBu
YXZpZ2F0aW9uIGFjdGlvbiB0YXJnZXRzIG9yICVOVUxMIAorICovCitjb25zdCBjaGFyKiB3ZWJr
aXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X2ZyYW1lX25hbWUoV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04oZGVjaXNpb24pLCAwKTsKKyAg
ICByZXR1cm4gZGVjaXNpb24tPnByaXYtPmZyYW1lTmFtZS5kYXRhKCk7Cit9CisKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX05BVklHQVRJT05fVFlQRV9MSU5LX0NMSUNLRUQs
IGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVMaW5rQ2xpY2tlZCk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfRk9STV9TVUJNSVRURUQsIGtXS0ZyYW1l
TmF2aWdhdGlvblR5cGVGb3JtU3VibWl0dGVkKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV0VCS0lUX05BVklHQVRJT05fVFlQRV9CQUNLX0ZPUldBUkQsIGtXS0ZyYW1lTmF2aWdhdGlv
blR5cGVCYWNrRm9yd2FyZCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9O
QVZJR0FUSU9OX1RZUEVfUkVMT0FELCBrV0tGcmFtZU5hdmlnYXRpb25UeXBlUmVsb2FkKTsKK0NP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1JF
U1VCTUlUVEVELCBrV0tGcmFtZU5hdmlnYXRpb25UeXBlRm9ybVJlc3VibWl0dGVkKTsKK0NPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUiwga1dL
RnJhbWVOYXZpZ2F0aW9uVHlwZU90aGVyKTsKKworc3RhdGljIHVuc2lnbmVkIHdrRXZlbnRNb3Vz
ZUJ1dHRvblRvV2ViS2l0TW91c2VCdXR0b24oV0tFdmVudE1vdXNlQnV0dG9uIHdrQnV0dG9uKQor
eworICAgIHN3aXRjaCAod2tCdXR0b24pIHsKKyAgICBjYXNlIGtXS0V2ZW50TW91c2VCdXR0b25O
b0J1dHRvbjoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBrV0tFdmVudE1vdXNlQnV0dG9u
TGVmdEJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBrV0tFdmVudE1vdXNlQnV0
dG9uTWlkZGxlQnV0dG9uOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIGtXS0V2ZW50TW91
c2VCdXR0b25SaWdodEJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIDM7CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCB3a0V2ZW50TW9k
aWZpZXJzVG9VbnNpZ25lZChXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHVu
c2lnbmVkIG1vZGlmaWVycyA9IDA7CisgICAgaWYgKHdrTW9kaWZpZXJzICYga1dLRXZlbnRNb2Rp
ZmllcnNTaGlmdEtleSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdES19TSElGVF9NQVNLOworICAg
IGlmICh3a01vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzQ29udHJvbEtleSkKKyAgICAgICAg
bW9kaWZpZXJzIHw9IEdES19DT05UUk9MX01BU0s7CisgICAgaWYgKHdrTW9kaWZpZXJzICYga1dL
RXZlbnRNb2RpZmllcnNBbHRLZXkpCisgICAgICAgIG1vZGlmaWVycyB8PSBHREtfTU9EMV9NQVNL
OworICAgIGlmICh3a01vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzTWV0YUtleSkKKyAgICAg
ICAgbW9kaWZpZXJzIHw9IEdES19NRVRBX01BU0s7CisgICAgcmV0dXJuIG1vZGlmaWVyczsKK30K
KworV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiB3ZWJraXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb25DcmVhdGUoV0tGcmFtZU5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBXS0V2
ZW50TW91c2VCdXR0b24gbW91c2VCdXR0b24sIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCBX
S1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgY29uc3QgY2hhciogZnJhbWVOYW1lLCBXS0ZyYW1lUG9s
aWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIpCit7CisgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTihnX29i
amVjdF9uZXcoV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04sIE5VTEwpKTsK
KyAgICBkZWNpc2lvbi0+cHJpdi0+bmF2aWdhdGlvblR5cGUgPSBzdGF0aWNfY2FzdDxXZWJLaXRO
YXZpZ2F0aW9uVHlwZT4obmF2aWdhdGlvblR5cGUpOworICAgIGRlY2lzaW9uLT5wcml2LT5tb3Vz
ZUJ1dHRvbiA9IHdrRXZlbnRNb3VzZUJ1dHRvblRvV2ViS2l0TW91c2VCdXR0b24obW91c2VCdXR0
b24pOworICAgIGRlY2lzaW9uLT5wcml2LT5tb2RpZmllcnMgPSB3a0V2ZW50TW9kaWZpZXJzVG9V
bnNpZ25lZChtb2RpZmllcnMpOworICAgIGRlY2lzaW9uLT5wcml2LT5yZXF1ZXN0ID0gYWRvcHRH
UmVmKHdlYmtpdFVSSVJlcXVlc3RDcmVhdGVGb3JSZXNvdXJjZVJlcXVlc3QodG9JbXBsKHJlcXVl
c3QpLT5yZXNvdXJjZVJlcXVlc3QoKSkpOworICAgIGRlY2lzaW9uLT5wcml2LT5mcmFtZU5hbWUg
PSBmcmFtZU5hbWU7CisgICAgd2Via2l0UG9saWN5RGVjaXNpb25TZXRMaXN0ZW5lcihXRUJLSVRf
UE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9uKSwgbGlzdGVuZXIpOworICAgIHJldHVybiBkZWNpc2lv
bjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmJmMjQx
MjY4ZDYxMDBlZTA4M2Q0NjJjYjVmYmIzOGU3OGMyYjYxMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbi5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJL
SVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJl
IGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbl9oCisjZGVmaW5lIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbl9o
CisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVm
aW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UG9saWN5RGVjaXNpb24uaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KKworR19CRUdJTl9ERUNMUworCisvKioK
KyAqIFdlYktpdE5hdmlnYXRpb25UeXBlOgorICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElO
S19DTElDS0VEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IGNsaWNraW5nIGEgbGlu
ay4KKyAqIEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0ZPUk1fU1VCTUlUVEVEOiBUaGUgbmF2aWdh
dGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHN1Ym1pdHRpbmcgYSBmb3JtLgorICogQFdFQktJVF9OQVZJ
R0FUSU9OX1RZUEVfQkFDS19GT1JXQVJEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5
IG5hdmlnYXRpbmcgZm9yd2FyZCBvciBiYWNrd2FyZC4KKyAqIEBXRUJLSVRfTkFWSUdBVElPTl9U
WVBFX1JFTE9BRDogVGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieSByZWxvYWRpbmcuCisg
KiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1JFU1VCTUlUVEVEOiBUaGUgbmF2aWdhdGlv
biB3YXMgdHJpZ2dlcmVkIGJ5IHJlc3VibWl0dGluZyBhIGZvcm0uCisgKiBAV0VCS0lUX05BVklH
QVRJT05fVFlQRV9PVEhFUjogVGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieSBzb21lIG90
aGVyIGFjdGlvbi4KKyAqCisgKiBFbnVtIHZhbHVlcyB1c2VkIHRvIGRlbm90ZSB0aGUgdmFyaW91
cyBuYXZpZ2F0aW9uIHR5cGVzLgorICovCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9OQVZJ
R0FUSU9OX1RZUEVfTElOS19DTElDS0VELAorICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfRk9S
TV9TVUJNSVRURUQsCisgICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9CQUNLX0ZPUldBUkQsCisg
ICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9SRUxPQUQsCisgICAgV0VCS0lUX05BVklHQVRJT05f
VFlQRV9GT1JNX1JFU1VCTUlUVEVELAorICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIs
Cit9IFdlYktpdE5hdmlnYXRpb25UeXBlOworCisjZGVmaW5lIFdFQktJVF9UWVBFX05BVklHQVRJ
T05fUE9MSUNZX0RFQ0lTSU9OICAgICAgICAgICAgKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9k
ZWNpc2lvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVD
SVNJT04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwg
V0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04sIFdlYktpdE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbikpCisjZGVmaW5lIFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lP
Tl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJL
SVRfVFlQRV9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTiwgV2ViS2l0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVD
SVNJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04pKQorI2RlZmluZSBXRUJLSVRfSVNf
TkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04p
KQorI2RlZmluZSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT05fR0VUX0NMQVNTKG9i
aikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfTkFWSUdB
VElPTl9QT0xJQ1lfREVDSVNJT04sIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNsYXNz
KSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiAgICAg
ICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNsYXNzICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uUHJpdmF0ZSBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlOworCitzdHJ1
Y3QgX1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiB7CisgICAgV2ViS2l0UG9saWN5RGVj
aXNpb24gcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uQ2xhc3MgeworICAgIFdlYktpdFBvbGljeURlY2lzaW9uQ2xhc3Mg
cGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X25hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uX2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJ
IFdlYktpdE5hdmlnYXRpb25UeXBlCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25f
Z2V0X25hdmlnYXRpb25fdHlwZSAoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uICpkZWNp
c2lvbik7CitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNp
b25fZ2V0X21vdXNlX2J1dHRvbiAgICAoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uICpk
ZWNpc2lvbik7CitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVj
aXNpb25fZ2V0X21vZGlmaWVycyAgICAgICAoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9u
ICpkZWNpc2lvbik7CitXRUJLSVRfQVBJIFdlYktpdFVSSVJlcXVlc3QgKgord2Via2l0X25hdmln
YXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9yZXF1ZXN0ICAgICAgICAgKFdlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbiAqZGVjaXNpb24pOworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3
ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X2ZyYW1lX25hbWUgICAgICAoV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uICpkZWNpc2lvbik7CitHX0VORF9ERUNMUworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mM2MwZTFmNTA4YjdmNmIwOTdmMzE3NmRlOTk4N2U1MGRkZjNhZmFmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9u
UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCIK
KyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbiogd2Via2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ3JlYXRlKFdLRnJhbWVOYXZpZ2F0
aW9uVHlwZSwgV0tFdmVudE1vdXNlQnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzLCBXS1VSTFJlcXVl
c3RSZWYsIGNvbnN0IGNoYXIqIGZyYW1lTmFtZSwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmKTsK
KworI2VuZGlmIC8vIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5Q2xp
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNs
aWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjE3NTdkNDI4MjE1MjYyNzg5ZWMyMjM5Yjc0OGUyN2NlNTJj
MWU1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFBvbGljeUNsaWVudC5jcHAKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
S2l0UG9saWN5Q2xpZW50LmgiCisKKyNpbmNsdWRlICJXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVj
aXNpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UG9saWN5RGVjaXNpb24uaCIKKyNpbmNs
dWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyB2b2lk
IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25DYWxsYmFjayhXS1BhZ2VSZWYgcGFnZSwg
V0tGcmFtZVJlZiBmcmFtZSwgV0tGcmFtZU5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBX
S0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9u
LCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3Rl
bmVyLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
R1JlZlB0cjxXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24+IGRlY2lzaW9uID0KKyAgICAg
ICAgYWRvcHRHUmVmKHdlYmtpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNyZWF0ZShuYXZpZ2F0
aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtb3VzZUJ1dHRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvKiBmcmFtZSBuYW1lICov
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlzdGVuZXIpKTsKKyAgICB3ZWJraXRXZWJWaWV3TWFrZVBvbGljeURlY2lzaW9uKFdFQktJVF9X
RUJfVklFVyhjbGllbnRJbmZvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9OQVZJR0FUSU9OX0FDVElPTiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QT0xJQ1lfREVDSVNJT04oZGVjaXNp
b24uZ2V0KCkpKTsKK30KKworc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0
aW9uQ2FsbGJhY2soV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLRnJhbWVOYXZp
Z2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIFdL
RXZlbnRNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbiwgV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFdL
U3RyaW5nUmVmIGZyYW1lTmFtZSwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyLCBX
S1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgR1JlZlB0
cjxXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24+IGRlY2lzaW9uID0KKyAgICAgICAgYWRv
cHRHUmVmKHdlYmtpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNyZWF0ZShuYXZpZ2F0aW9uVHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtb3VzZUJ1dHRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtb2RpZmllcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0ltcGwoZnJhbWVOYW1lKS0+c3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaXN0ZW5lcikpOworICAgIHdlYmtpdFdlYlZpZXdNYWtlUG9saWN5
RGVjaXNpb24oV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05FV19XSU5ET1df
QUNUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BPTElD
WV9ERUNJU0lPTihkZWNpc2lvbi5nZXQoKSkpOworfQorCit2b2lkIGF0dGFjaFBvbGljeUNsaWVu
dFRvUGFnZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIFdLUGFnZVBvbGljeUNsaWVu
dCBwb2xpY3lDbGllbnQgPSB7CisgICAgICAgIGtXS1BhZ2VQb2xpY3lDbGllbnRDdXJyZW50VmVy
c2lvbiwKKyAgICAgICAgd2ViVmlldywgLy8gY2xpZW50SW5mbworICAgICAgICBkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uQ2FsbGJhY2ssCisgICAgICAgIGRlY2lkZVBvbGljeUZvck5l
d1dpbmRvd0FjdGlvbkNhbGxiYWNrLAorICAgICAgICAwLCAvLyBkZWNpZGVQb2xpY3lGb3JSZXNw
b25zZUNhbGxiYWNrLAorICAgICAgICAwLCAvLyB1bmFibGVUb0ltcGxlbWVudFBvbGljeQorICAg
IH07CisgICAgV0tQYWdlU2V0UGFnZVBvbGljeUNsaWVudCh0b0FQSSh3ZWJraXRXZWJWaWV3QmFz
ZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpKSwgJnBvbGljeUNsaWVudCk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
b2xpY3lDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBv
bGljeUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwZDhkNjJjY2I4NDU1MWUzNzg2NWIyMDc5ZjY4MWZj
NDk2NDc1OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQb2xpY3lDbGllbnQuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0UG9saWN5Q2xpZW50X2gKKyNk
ZWZpbmUgV2ViS2l0UG9saWN5Q2xpZW50X2gKKworI2luY2x1ZGUgIldlYktpdFdlYlZpZXcuaCIK
Kwordm9pZCBhdHRhY2hQb2xpY3lDbGllbnRUb1BhZ2UoV2ViS2l0V2ViVmlldyopOworCisjZW5k
aWYgLy8gV2ViS2l0UG9saWN5Q2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
NDU0NjdiNTZjOTk2MTM4NjdjZjk0ODBmNDJhYmQzZWIxNjA3NjczCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24u
Y3BwCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRQb2xpY3lEZWNpc2lvbi5o
IgorCisjaW5jbHVkZSAiV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0UHJpdmF0ZS5oIgorCisKKy8qKgorICogU0VDVElPTjogV2ViS2l0UG9saWN5RGVjaXNp
b24KKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQSBwZW5kaW5nIHBvbGljeSBkZWNpc2lvbgorICog
QFRpdGxlOiBXZWJLaXRQb2xpY3lEZWNpc2lvbgorICogQFNlZV9hbHNvOiAjV2ViS2l0V2ViVmll
dworICoKKyAqIE9mdGVuIFdlYktpdCBhbGxvd3MgdGhlIGNsaWVudCB0byBkZWNpZGUgdGhlIHBv
bGljeSBmb3IgY2VydGFpbgorICogb3BlcmF0aW9ucy4gRm9yIGluc3RhbmNlLCBhIGNsaWVudCBt
YXkgd2FudCB0byBvcGVuIGEgbGluayBpbiBhIG5ldworICogdGFiLCBibG9jayBhIG5hdmlnYXRp
b24gZW50aXJlbHksIHF1ZXJ5IHRoZSB1c2VyIG9yIHRyaWdnZXIgYSBkb3dubG9hZAorICogaW5z
dGVhZCBvZiBhIG5hdmlnYXRpb24uIEluIHRoZXNlIGNhc2VzIFdlYktpdCB3aWxsIGZpcmUgdGhl
CisgKiAjV2ViS2l0V2ViVmlldzo6ZGVjaWRlLXBvbGljeSBzaWduYWwgd2l0aCBhICNXZWJLaXRQ
b2xpY3lEZWNpc2lvbgorICogb2JqZWN0LiBJZiB0aGUgc2lnbmFsIGhhbmRsZXIgZG9lcyBub3Ro
aW5nLCBXZWJLaXQgd2lsbCBhY3QgYXMgaWYKKyAqIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fdXNl
KCkgd2FzIGNhbGxlZCBhcyBzb29uIGFzIHNpZ25hbCBoYW5kbGluZworICogY29tcGxldGVzLiBU
byBtYWtlIGEgcG9saWN5IGRlY2lzaW9uIGFzeW5jaHJvbm91c2x5LCBzaW1wbHkgaW5jcmVtZW50
CisgKiB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSAjV2ViS2l0UG9saWN5RGVjaXNpb24gb2Jq
ZWN0LgorICovCitHX0RFRklORV9UWVBFKFdlYktpdFBvbGljeURlY2lzaW9uLCB3ZWJraXRfcG9s
aWN5X2RlY2lzaW9uLCBHX1RZUEVfT0JKRUNUKQorCitzdHJ1Y3QgX1dlYktpdFBvbGljeURlY2lz
aW9uUHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmPiBs
aXN0ZW5lcjsKKyAgICBib29sIG1hZGVQb2xpY3lEZWNpc2lvbjsKK307CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faW5pdChXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNp
b24pCit7CisgICAgZGVjaXNpb24tPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
ZGVjaXNpb24sIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTiwgV2ViS2l0UG9saWN5RGVjaXNp
b25Qcml2YXRlKTsKKyAgICBuZXcgKGRlY2lzaW9uLT5wcml2KSBXZWJLaXRQb2xpY3lEZWNpc2lv
blByaXZhdGUoKTsKKyAgICBkZWNpc2lvbi0+cHJpdi0+bWFkZVBvbGljeURlY2lzaW9uID0gZmFs
c2U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFBvbGljeURlY2lzaW9uRmluYWxpemUoR09iamVj
dCogb2JqZWN0KQoreworICAgICBXZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUqIHByaXYgPSBX
RUJLSVRfUE9MSUNZX0RFQ0lTSU9OKG9iamVjdCktPnByaXY7CisKKyAgICAvLyBUaGlzIGlzIHRo
ZSBkZWZhdWx0IGNob2ljZSBmb3IgYWxsIHBvbGljeSBkZWNpc2lvbnMgaW4gV2ViUGFnZVByb3h5
LmNwcC4KKyAgICBpZiAoIXByaXYtPm1hZGVQb2xpY3lEZWNpc2lvbikKKyAgICAgICAgV0tGcmFt
ZVBvbGljeUxpc3RlbmVyVXNlKHByaXYtPmxpc3RlbmVyLmdldCgpKTsKKworICAgIHByaXYtPn5X
ZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
cG9saWN5X2RlY2lzaW9uX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3Zv
aWQgd2Via2l0UG9saWN5RGVjaXNpb25TZXRMaXN0ZW5lcihXZWJLaXRQb2xpY3lEZWNpc2lvbiog
ZGVjaXNpb24sIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lcikKK3sKKyAgICAgZGVj
aXNpb24tPnByaXYtPmxpc3RlbmVyID0gbGlzdGVuZXI7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9wb2xpY3lfZGVjaXNpb25fY2xhc3NfaW5pdChXZWJLaXRQb2xpY3lEZWNpc2lvbkNsYXNzKiBk
ZWNpc2lvbkNsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhkZWNpc2lvbkNsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJr
aXRQb2xpY3lEZWNpc2lvbkZpbmFsaXplOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShk
ZWNpc2lvbkNsYXNzLCBzaXplb2YoV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRlKSk7Cit9CisK
Ky8qKgorICogd2Via2l0X3BvbGljeV9kZWNpc2lvbl91c2U6CisgKiBAZGVjaXNpb246IGEgI1dl
YktpdFBvbGljeURlY2lzaW9uCisgKgorICogQWNjZXB0IHRoZSBhY3Rpb24gd2hpY2ggdHJpZ2dl
cmQgdGhpcyBkZWNpc2lvbi4KKyAqLwordm9pZCB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX3VzZShX
ZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfUE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9uKSk7CisgICAgV0tGcmFtZVBvbGljeUxp
c3RlbmVyVXNlKGRlY2lzaW9uLT5wcml2LT5saXN0ZW5lci5nZXQoKSk7CisgICAgZGVjaXNpb24t
PnByaXYtPm1hZGVQb2xpY3lEZWNpc2lvbiA9IHRydWU7Cit9CisKKy8qKgorICogd2Via2l0X3Bv
bGljeV9kZWNpc2lvbl9pZ25vcmU6CisgKiBAZGVjaXNpb246IGEgI1dlYktpdFBvbGljeURlY2lz
aW9uCisgKgorICogSWdub3JlIHRoZSBhY3Rpb24gd2hpY2ggdHJpZ2dlcmQgdGhpcyBkZWNpc2lv
bi4gRm9yIGluc3RhbmNlLCBmb3IgYQorICogI1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24s
IHRoaXMgd291bGQgY2FuY2VsIHRoZSByZXF1ZXN0LgorICovCit2b2lkIHdlYmtpdF9wb2xpY3lf
ZGVjaXNpb25faWdub3JlKFdlYktpdFBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKK3sKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QT0xJQ1lfREVDSVNJT04oZGVjaXNpb24pKTsKKyAg
ICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJJZ25vcmUoZGVjaXNpb24tPnByaXYtPmxpc3RlbmVyLmdl
dCgpKTsKKyAgICBkZWNpc2lvbi0+cHJpdi0+bWFkZVBvbGljeURlY2lzaW9uID0gdHJ1ZTsKK30K
KworLyoqCisgKiB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkOgorICogQGRlY2lzaW9u
OiBhICNXZWJLaXRQb2xpY3lEZWNpc2lvbgorICoKKyAqIFNwYXduIGEgZG93bmxvYWQgZnJvbSB0
aGlzIGRlY2lzaW9uLgorICovCit2b2lkIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQo
V2ViS2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX1BPTElDWV9ERUNJU0lPTihkZWNpc2lvbikpOworICAgIFdLRnJhbWVQb2xpY3lM
aXN0ZW5lckRvd25sb2FkKGRlY2lzaW9uLT5wcml2LT5saXN0ZW5lci5nZXQoKSk7CisgICAgZGVj
aXNpb24tPnByaXYtPm1hZGVQb2xpY3lEZWNpc2lvbiA9IHRydWU7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lY2NhNWY5YzM1NGViZGE1MGU5MmQ5ZGRkMDg2YjZjOTllNzYwM2VlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9s
aWN5RGVjaXNpb24uaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmlu
ZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+
IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRQb2xp
Y3lEZWNpc2lvbl9oCisjZGVmaW5lIFdlYktpdFBvbGljeURlY2lzaW9uX2gKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJT04gICAgICAg
ICAgICAod2Via2l0X3BvbGljeV9kZWNpc2lvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRf
UE9MSUNZX0RFQ0lTSU9OKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTiwgV2ViS2l0UG9saWN5RGVjaXNp
b24pKQorI2RlZmluZSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lP
TiwgV2ViS2l0UG9saWN5RGVjaXNpb25DbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19QT0xJQ1lf
REVDSVNJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwg
V0VCS0lUX1RZUEVfUE9MSUNZX0RFQ0lTSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1BPTElDWV9E
RUNJU0lPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJT04pKQorI2RlZmluZSBXRUJLSVRfUE9MSUNZX0RFQ0lT
SU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTiwgV2ViS2l0UG9saWN5RGVjaXNpb25DbGFzcykpCisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRQb2xpY3lEZWNpc2lvbiAgICAgICAgV2ViS2l0UG9saWN5
RGVjaXNpb247Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0UG9saWN5RGVjaXNpb25DbGFzcyAgIFdl
YktpdFBvbGljeURlY2lzaW9uQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0UG9saWN5RGVj
aXNpb25Qcml2YXRlIFdlYktpdFBvbGljeURlY2lzaW9uUHJpdmF0ZTsKKworc3RydWN0IF9XZWJL
aXRQb2xpY3lEZWNpc2lvbiB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0
ZSA+Ki8KKyAgICBXZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1
Y3QgX1dlYktpdFBvbGljeURlY2lzaW9uQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRf
Y2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2dl
dF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfcG9saWN5X2RlY2lzaW9u
X3VzZSAgICAgIChXZWJLaXRQb2xpY3lEZWNpc2lvbiAqZGVjaXNpb24pOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlICAgKFdlYktpdFBvbGljeURlY2lz
aW9uICpkZWNpc2lvbik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3BvbGljeV9kZWNpc2lv
bl9kb3dubG9hZCAoV2ViS2l0UG9saWN5RGVjaXNpb24gKmRlY2lzaW9uKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyNTgw
YzgzZTlkODM5NTZiNTcwNGJjNWMwZGZhMGYxOTVhMmZlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvblByaXZh
dGUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
UG9saWN5RGVjaXNpb25Qcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdFBvbGljeURlY2lzaW9u
LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CisKK3ZvaWQgd2Via2l0UG9saWN5RGVj
aXNpb25TZXRMaXN0ZW5lcihXZWJLaXRQb2xpY3lEZWNpc2lvbiosIFdLRnJhbWVQb2xpY3lMaXN0
ZW5lclJlZik7CisKKyNlbmRpZiAvLyBXZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uUHJpdmF0
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRl
LmgKaW5kZXggM2RiNjFhNzQ5ZDNkMzVkNWI1ZDA0ODI3ODkzNTYzOThhODdjMWFjOS4uMTMyODBk
NjAwYTY4ZjE3MDk2NDdmN2M0ODI3MzQzZDNiZWVkMTE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApAQCAtMzMsMTUgKzMzLDExIEBA
CiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKLUdfQkVH
SU5fREVDTFMKLQogI2RlZmluZSBXRUJLSVRfUEFSQU1fUkVBREFCTEUgKHN0YXRpY19jYXN0PEdQ
YXJhbUZsYWdzPihHX1BBUkFNX1JFQURBQkxFfEdfUEFSQU1fU1RBVElDX05BTUV8R19QQVJBTV9T
VEFUSUNfTklDS3xHX1BBUkFNX1NUQVRJQ19CTFVSQikpCiAjZGVmaW5lIFdFQktJVF9QQVJBTV9X
UklUQUJMRSAoc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fV1JJVEFCTEV8R19QQVJB
TV9TVEFUSUNfTkFNRXxHX1BBUkFNX1NUQVRJQ19OSUNLfEdfUEFSQU1fU1RBVElDX0JMVVJCKSkK
ICNkZWZpbmUgV0VCS0lUX1BBUkFNX1JFQURXUklURSAoc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+
KEdfUEFSQU1fUkVBRFdSSVRFfEdfUEFSQU1fU1RBVElDX05BTUV8R19QQVJBTV9TVEFUSUNfTklD
S3xHX1BBUkFNX1NUQVRJQ19CTFVSQikpCiAKICNkZWZpbmUgQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTSh3ZWJraXROYW1lLCB3ZWJjb3JlTmFtZSkgXAotICAgICAgICBDT01QSUxFX0FTU0VS
VChpbnQod2Via2l0TmFtZSkgPT0gaW50KFdlYkNvcmU6OndlYmNvcmVOYW1lKSwgbWlzbWF0Y2hp
bmdFbnVtcykKLQotR19FTkRfREVDTFMKKyAgICAgICAgQ09NUElMRV9BU1NFUlQoaW50KHdlYmtp
dE5hbWUpID09IGludCh3ZWJjb3JlTmFtZSksIG1pc21hdGNoaW5nRW51bXMpCiAKICNlbmRpZiAv
LyBXZWJLaXRQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggOWRjNDcyYTFmOGY3YWQwOTM0OTIzNzNjZDZhZDc4
ZThhNWQ5MDA2NS4uNzc1ZGQxYmQ3OTg1ZTRmNTY1MjNhZDBkYjg2NmMyNjZlYzU4ZWNiNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJXZWJLaXRFcnJvci5oIgogI2luY2x1ZGUg
IldlYktpdExvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYktpdE1hcnNoYWwuaCIKKyNpbmNs
dWRlICJXZWJLaXRQb2xpY3lDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRTZXR0aW5nc1ByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJLaXRVSUNsaWVudC5oIgogI2luY2x1ZGUgIldlYktpdFdlYkNv
bnRleHRQcml2YXRlLmgiCkBAIC01NSw2ICs1Niw4IEBAIGVudW0gewogICAgIFNDUklQVF9DT05G
SVJNLAogICAgIFNDUklQVF9QUk9NUFQsCiAKKyAgICBERUNJREVfUE9MSUNZLAorCiAgICAgTEFT
VF9TSUdOQUwKIH07CiAKQEAgLTE0NCw2ICsxNDcsMTIgQEAgc3RhdGljIGdib29sZWFuIHdlYmtp
dFdlYlZpZXdTY3JpcHRQcm9tcHQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciog
bWUKICAgICByZXR1cm4gVFJVRTsKIH0KIAorc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdE
ZWNpZGVQb2xpY3koV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9uKiBkZWNpc2lv
biwgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlKQoreworICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNp
b25fdXNlKGRlY2lzaW9uKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBpZiAoR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQpAQCAt
MTU3LDkgKzE2NiwxMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09i
amVjdCogb2JqZWN0KQogCiAgICAgYXR0YWNoTG9hZGVyQ2xpZW50VG9WaWV3KHdlYlZpZXcpOwog
ICAgIGF0dGFjaFVJQ2xpZW50VG9WaWV3KHdlYlZpZXcpOworICAgIGF0dGFjaFBvbGljeUNsaWVu
dFRvUGFnZSh3ZWJWaWV3KTsKIAogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZp
ZXdCYXNlR2V0UGFnZSh3ZWJWaWV3QmFzZSk7CiAgICAgcHJpdi0+YmFja0ZvcndhcmRMaXN0ID0g
YWRvcHRHUmVmKHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZShXS1BhZ2VHZXRCYWNrRm9yd2Fy
ZExpc3QodG9BUEkocGFnZSkpKSk7CisKICAgICBwcml2LT5zZXR0aW5ncyA9IGFkb3B0R1JlZih3
ZWJraXRfc2V0dGluZ3NfbmV3KCkpOwogICAgIHdlYmtpdFNldHRpbmdzQXR0YWNoU2V0dGluZ3NU
b1BhZ2UocHJpdi0+c2V0dGluZ3MuZ2V0KCksIHRvQVBJKHBhZ2UpKTsKIH0KQEAgLTI0Myw2ICsy
NTQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJW
aWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9hbGVydCA9
IHdlYmtpdFdlYlZpZXdTY3JpcHRBbGVydDsKICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9jb25m
aXJtID0gd2Via2l0V2ViVmlld1NjcmlwdENvbmZpcm07CiAgICAgd2ViVmlld0NsYXNzLT5zY3Jp
cHRfcHJvbXB0ID0gd2Via2l0V2ViVmlld1NjcmlwdFByb21wdDsKKyAgICB3ZWJWaWV3Q2xhc3Mt
PmRlY2lkZV9wb2xpY3kgPSB3ZWJraXRXZWJWaWV3RGVjaWRlUG9saWN5OwogCiAgICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKHdlYlZpZXdDbGFzcywgc2l6ZW9mKFdlYktpdFdlYlZpZXdQcml2
YXRlKSk7CiAKQEAgLTU0MSw2ICs1NTMsNjMgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3
X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywgR19UWVBFX1BPSU5URVIpOwogCisgICAg
LyoqCisgICAgICogV2ViS2l0UG9saWN5Q2xpZW50OjpkZWNpZGUtcG9saWN5CisgICAgICogQHdl
Yl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVk
CisgICAgICogQGRlY2lzaW9uOiB0aGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbgor
ICAgICAqIEBkZWNpc2lvbl90eXBlOiBhICNXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgZGVub3Rp
bmcgdGhlIHR5cGUgb2YgQGRlY2lzaW9uCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBl
bWl0dGVkIHdoZW4gV2ViS2l0IGlzIHJlcXVlc3RpbmcgdGhlIGNsaWVudCB0byBkZWNpZGUgYSBw
b2xpY3kKKyAgICAgKiBkZWNpc2lvbiwgc3VjaCBhcyB3aGV0aGVyIHRvIG5hdmlnYXRlIHRvIGEg
cGFnZSwgb3BlbiBhIG5ldyB3aW5kb3cgb3Igd2hldGhlciBvcgorICAgICAqIG5vdCB0byBkb3du
bG9hZCBhIHJlc291cmNlLiBUaGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiBwYXNz
ZWQgaW4gdGhlCisgICAgICogQGRlY2lzaW9uIGFyZ3VtZW50IGlzIGEgZ2VuZXJpYyB0eXBlLCBi
dXQgc2hvdWxkIGJlIGNhc3RlZCB0byBhIG1vcmUKKyAgICAgKiBzcGVjaWZpYyB0eXBlIHdoZW4g
bWFraW5nIHRoZSBkZWNpc2lvbi4gRm9yIGV4YW1wbGU6CisgICAgICoKKyAgICAgKiA8aW5mb3Jt
YWxleGFtcGxlPjxwcm9ncmFtbGlzdGluZz4KKyAgICAgKiBzdGF0aWMgZ2Jvb2xlYW4KKyAgICAg
KiBkZWNpZGVfcG9saWN5X2NiIChXZWJLaXRXZWJWaWV3ICp3ZWJfdmlldywKKyAgICAgKiAgICAg
ICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lvbiAqZGVjaXNpb24sCisgICAgICogICAg
ICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlIHR5cGUpCisgICAgICogewor
ICAgICAqICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgKiAgICAgY2FzZSBXRUJLSVRfUE9MSUNZ
X0RFQ0lTSU9OX1RZUEVfTkFWSUdBVElPTl9BQ1RJT046CisgICAgICogICAgICAgICBXZWJLaXRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gKm5hdmlnYXRpb25fZGVjaXNpb24gPSBXRUJLSVRfTkFW
SUdBVElPTl9QT0xJQ1lfREVDSVNJT04gKGRlY2lzaW9uKTsKKyAgICAgKiAgICAgICAgIC88IS0t
IC0tPiogTWFrZSBhIHBvbGljeSBkZWNpc2lvbiBoZXJlLiAqPCEtLSAtLT4vCisgICAgICogICAg
ICAgICBicmVhazsKKyAgICAgKiAgICAgY2FzZSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVf
TkVXX1dJTkRPV19BQ1RJT046CisgICAgICogICAgICAgICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb24gKm5hdmlnYXRpb25fZGVjaXNpb24gPSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lf
REVDSVNJT04gKGRlY2lzaW9uKTsKKyAgICAgKiAgICAgICAgIC88IS0tIC0tPiogTWFrZSBhIHBv
bGljeSBkZWNpc2lvbiBoZXJlLiAqPCEtLSAtLT4vCisgICAgICogICAgICAgICBicmVhazsKKyAg
ICAgKiAgICAgY2FzZSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0U6CisgICAg
ICogICAgICAgICBXZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uICpyZXNwb25zZSA9IFdFQktJ
VF9SRVNQT05TRV9QT0xJQ1lfREVDSVNJT04gKGRlY2lzaW9uKTsKKyAgICAgKiAgICAgICAgIC88
IS0tIC0tPiogTWFrZSBhIHBvbGljeSBkZWNpc2lvbiBoZXJlLiAqPCEtLSAtLT4vCisgICAgICog
ICAgICAgICBicmVhazsKKyAgICAgKiAgICAgZGVmYXVsdDoKKyAgICAgKiAgICAgICAgIC88IS0t
IC0tPiogTWFraW5nIG5vIGRlY2lzaW9uIHJlc3VsdHMgaW4gd2Via2l0X3BvbGljeV9kZWNpc2lv
bl91c2UoKS4gKjwhLS0gLS0+LworICAgICAqICAgICAgICAgYnJlYWs7CisgICAgICogICAgIH0K
KyAgICAgKiB9CisgICAgICogPC9wcm9ncmFtbGlzdGluZz48L2luZm9ybWFsZXhhbXBsZT4KKyAg
ICAgKgorICAgICAqIEl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgcG9saWN5IGRlY2lzaW9uIGFzeW5j
aHJvbm91c2x5LCBieSBzaW1wbHkgY2FsbGluZyBnX29iamVjdF9yZWYoKQorICAgICAqIG9uIHRo
ZSBAZGVjaXNpb24gYXJndW1lbnQgYW5kIHJldHVybmluZyAlVFJVRSB0byBibG9jayB0aGUgZGVm
YXVsdCBzaWduYWwgaGFuZGxlci4KKyAgICAgKiBJZiB0aGUgbGFzdCByZWZlcmVuY2UgaXMgcmVt
b3ZlZCBvbiBhICNXZWJLaXRQb2xpY3lEZWNpc2lvbiBhbmQgbm8gZGVjaXNpb24gaGFzIGJlZW4K
KyAgICAgKiBtYWRlIGV4cGxpY2l0bHksIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fdXNlKCkgd2ls
bCBiZSB0aGUgZGVmYXVsdCBwb2xpY3kgZGVjaXNpb24uCisgICAgICoKKyAgICAgKiBSZXR1cm5z
OiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhl
IGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4K
KyAgICAgKgorICAgICAqLworICAgIHNpZ25hbHNbREVDSURFX1BPTElDWV0gPQorICAgICAgICBn
X3NpZ25hbF9uZXcoImRlY2lkZS1wb2xpY3kiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBF
X0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFM
X1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdl
YlZpZXdDbGFzcywgZGVjaWRlX3BvbGljeSksCisgICAgICAgICAgICAgICAgICAgICBnX3NpZ25h
bF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAgLyogYWNjdW11bGF0b3IgZGF0YSAqLywKKyAg
ICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVF9FTlVNLAor
ICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDIsIC8qIG51bWJlciBvZiBwYXJh
bWV0ZXJzICovCisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJ
T04sCisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJT05fVFlQ
RSk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQpCkBAIC02NDYsNiArNzE1LDEyIEBAIFdL
U3RyaW5nUmVmIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0UHJvbXB0KFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIGNvbnN0IENTdHJpCiAgICAgcmV0dXJuIHRleHQgPyBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyh0ZXh0LmdldCgpKSA6IDA7CiB9CiAKK3ZvaWQgd2Via2l0V2ViVmlld01h
a2VQb2xpY3lEZWNpc2lvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQb2xpY3lEZWNp
c2lvblR5cGUgdHlwZSwgV2ViS2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQoreworICAgIGdi
b29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tE
RUNJREVfUE9MSUNZXSwgMCwgZGVjaXNpb24sIHR5cGUsICZyZXR1cm5WYWx1ZSk7Cit9CisKIC8q
KgogICogd2Via2l0X3dlYl92aWV3X25ldzoKICAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggYTI1YzQzOGRkOTAxOTM1NDBiMDU1
ZmY2YzY3NGZhN2FkMzY3ZWY4MS4uNjk3ZmNkYzgwZTYwOTNiZGJmZDRiMTFjM2VkYTUyOTdjNjQ1
NWNiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuaApAQCAtMzUsOSArMzUsNDQgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJl
cXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRQb2xpY3lEZWNpc2lvbi5oPgogCiBHX0JFR0lOX0RFQ0xTCiAKKy8qKgorICogV2ViS2l0
UG9saWN5RGVjaXNpb25UeXBlOgorICogQFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9OQVZJ
R0FUSU9OX0FDVElPTjogVGhpcyB0eXBlIG9mIHBvbGljeSBkZWNpc2lvbgorICogICBpcyByZXF1
ZXN0ZWQgd2hlbiBXZWJLaXQgaXMgYWJvdXQgdG8gbmF2aWdhdGUgdG8gYSBuZXcgcGFnZSBpbiBl
aXRoZXIgdGhlCisgKiAgIG1haW4gZnJhbWUgb3IgYSBzdWJmcmFtZS4gQWNjZXB0YWJsZSBwb2xp
Y3kgZGVjaXNpb25zIGFyZSBlaXRoZXIKKyAqICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl91c2Uo
KSBvciB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2lnbm9yZSgpLiBUaGlzCisgKiAgIHR5cGUgb2Yg
cG9saWN5IGRlY2lzaW9uIGlzIGFsd2F5cyBhICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNp
b24uCisgKiBAV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05FV19XSU5ET1dfQUNUSU9OOiBU
aGlzIHR5cGUgb2YgcG9saWN5IGRlY2lzaW9uCisgKiAgIGlzIHJlcXVlc3RlZCB3aGVuIFdlYktp
dCBpcyBhYm91dCB0byBjcmVhdGUgYSBuZXcgd2luZG93LiBBY2NlcHRhYmxlIHBvbGljeQorICog
ICBkZWNpc2lvbnMgYXJlIGVpdGhlciB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX3VzZSgpIG9yCisg
KiAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlKCkuIFRoaXMgdHlwZSBvZiBwb2xpY3kg
ZGVjaXNpb24gaXMgYWx3YXlzCisgKiAgIGEgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bi4gVGhlc2UgZGVjaXNpb25zIGFyZSB1c2VmdWwgZm9yIGltcGxlbWVudGluZworICogICBzcGVj
aWFsIGFjdGlvbnMgZm9yIG5ldyB3aW5kb3dzLCBzdWNoIGFzIGZvcmNpbmcgdGhlIG5ldyB3aW5k
b3cgdG8gb3BlbgorICogICBpbiBhIHRhYiB3aGVuIGEga2V5Ym9hcmQgbW9kaWZpZXIgaXMgYWN0
aXZlIG9yIGhhbmRsaW5nIGEgc3BlY2lhbAorICogICB0YXJnZXQgYXR0cmlidXRlIG9uICZsdDth
Jmd0OyBlbGVtZW50cy4KKyAqIEBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0U6
IFRoaXMgdHlwZSBvZiBkZWNpc2lvbiBpcyB1c2VkIHdoZW4gV2ViS2l0IGhhcworICogICByZWNl
aXZlZCBhIHJlc3BvbnNlIGZvciBhIG5ldHdvcmsgcmVzb3VyY2UgYW5kIGlzIGFib3V0IHRvIHN0
YXJ0IHRoZSBsb2FkLgorICogICBOb3RlIHRoYXQgdGhlc2UgcmVzb3VyY2VzIGluY2x1ZGUgYWxs
IHN1YnJlc291cmNlcyBvZiBhIHBhZ2Ugc3VjaCBhcyBpbWFnZXMKKyAqICAgYW5kIHN0eWxlc2hl
ZXRzIGFzIHdlbGwgYXMgbWFpbiBkb2N1bWVudHMuIEFwcHJvcHJpYXRlIHBvbGljeSByZXNwb25z
ZXMgdG8KKyAqICAgdGhpcyBkZWNpc2lvbiBhcmUgd2Via2l0X3BvbGljeV9kZWNpc2lvbl91c2Uo
KSwgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9pZ25vcmUoKSwKKyAqICAgb3Igd2Via2l0X3BvbGlj
eV9kZWNpc2lvbl9kb3dubG9hZCgpLiBUaGlzIHR5cGUgb2YgcG9saWN5IGRlY2lzaW9uIGlzIGFs
d2F5cworICogICBhICNXZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLiBUaGlzIGRlY2lzaW9u
IGlzIHVzZWZ1bCBmb3IgZm9yY2luZworICogICBzb21lIHR5cGVzIG9mIHJlc291cmNlcyB0byBi
ZSBkb3dubG9hZGVkIHJhdGhlciB0aGFuIHJlbmRlcmVkIGluIHRoZSBXZWJWaWV3CisgKiAgIG9y
IHRvIGJsb2NrIHRoZSB0cmFuc2ZlciBvZiByZXNvdXJjZXMgZW50aXJlbHkuCisgKgorICogRW51
bSB2YWx1ZXMgdXNlZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHR5cGUgb2YgYSBwb2xpY3kgZGVjaXNp
b24gZHVyaW5nCisgKiBXZWJLaXRXZWJWaWV3OjpkZWNpZGUtcG9saWN5LgorICovCit0eXBlZGVm
IGVudW0geworICAgIFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9OQVZJR0FUSU9OX0FDVElP
TiwKKyAgICBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkVXX1dJTkRPV19BQ1RJT04sCisg
ICAgV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX1JFU1BPTlNFLAorfSBXZWJLaXRQb2xpY3lE
ZWNpc2lvblR5cGU7CisKICNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX1ZJRVcgICAgICAgICAgICAo
d2Via2l0X3dlYl92aWV3X2dldF90eXBlKCkpCiAjZGVmaW5lIFdFQktJVF9XRUJfVklFVyhvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQ
RV9XRUJfVklFVywgV2ViS2l0V2ViVmlldykpCiAjZGVmaW5lIFdFQktJVF9XRUJfVklFV19DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9XRUJfVklFVywgV2ViS2l0V2ViVmlld0NsYXNzKSkKQEAgLTgxLDI2ICsxMTYsMjkgQEAgc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3IHsKIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICBX
ZWJLaXRXZWJWaWV3QmFzZUNsYXNzIHBhcmVudDsKIAotICAgIHZvaWQgICAgICAgKCogbG9hZF9j
aGFuZ2VkKSAgIChXZWJLaXRXZWJWaWV3ICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdExvYWRFdmVudCBsb2FkX2V2ZW50KTsKLSAgICBnYm9vbGVh
biAgICgqIGxvYWRfZmFpbGVkKSAgICAoV2ViS2l0V2ViVmlldyAgKndlYl92aWV3LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRMb2FkRXZlbnQgbG9hZF9ldmVudCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgKmZhaWxp
bmdfdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAg
ICAqZXJyb3IpOwotCi0gICAgR3RrV2lkZ2V0ICooKiBjcmVhdGUpICAgICAgICAgKFdlYktpdFdl
YlZpZXcgICp3ZWJfdmlldyk7Ci0gICAgdm9pZCAgICAgICAoKiByZWFkeV90b19zaG93KSAgKFdl
YktpdFdlYlZpZXcgICp3ZWJfdmlldyk7Ci0gICAgdm9pZCAgICAgICAoKiBjbG9zZSkgICAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICp3ZWJfdmlldyk7Ci0KLSAgICBnYm9vbGVhbiAgICgqIHNjcmlw
dF9hbGVydCkgICAoV2ViS2l0V2ViVmlldyAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAqbWVzc2FnZSk7Ci0gICAgZ2Jvb2xlYW4g
ICAoKiBzY3JpcHRfY29uZmlybSkgKFdlYktpdFdlYlZpZXcgICp3ZWJfdmlldywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgKm1lc3NhZ2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICpjb25maXJtZWQp
OwotICAgIGdib29sZWFuICAgKCogc2NyaXB0X3Byb21wdCkgIChXZWJLaXRXZWJWaWV3ICAqd2Vi
X3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAg
ICptZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hh
ciAgICAqZGVmYXVsdF90ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
Y2hhciAgICAgICAgICoqdGV4dCk7CisgICAgdm9pZCAgICAgICAoKiBsb2FkX2NoYW5nZWQpICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJLaXRMb2FkRXZlbnQgICAgICAgICAgICBsb2FkX2V2ZW50KTsK
KyAgICBnYm9vbGVhbiAgICgqIGxvYWRfZmFpbGVkKSAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
ICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktp
dExvYWRFdmVudCAgICAgICAgICAgIGxvYWRfZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKmZhaWxpbmdfdXJpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAg
ICplcnJvcik7CisKKyAgICBHdGtXaWRnZXQgKigqIGNyZWF0ZSkgICAgICAgICAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOworICAgIHZvaWQgICAgICAgKCogcmVhZHlfdG9f
c2hvdykgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisgICAgdm9pZCAg
ICAgICAoKiBjbG9zZSkgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92
aWV3KTsKKworICAgIGdib29sZWFuICAgKCogc2NyaXB0X2FsZXJ0KSAgIChXZWJLaXRXZWJWaWV3
ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqbWVzc2FnZSk7CisgICAgZ2Jvb2xlYW4gICAo
KiBzY3JpcHRfY29uZmlybSkgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAg
ICAgICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVh
biAgICAgICAgICAgICAgICAgICpjb25maXJtZWQpOworICAgIGdib29sZWFuICAgKCogc2NyaXB0
X3Byb21wdCkgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqbWVz
c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAg
ICAgICAgICAgICAqZGVmYXVsdF90ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnY2hhciAgICAgICAgICAgICAgICAgICAgKip0ZXh0KTsKKyAgICBnYm9vbGVhbiAgICgq
IGRlY2lkZV9wb2xpY3kpICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFBvbGljeURlY2lzaW9uICAg
ICAgKmRlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQ
b2xpY3lEZWNpc2lvblR5cGUgIHR5cGUpOwogCiAgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4
cGFuc2lvbiAqLwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2
YXRlLmgKaW5kZXggNWM4MTYxYWZkNDk4ZGY3MjI4NjQxMWJmMDg5NjBiYTQxMTdkN2QwOC4uNjYz
ODZkMDI4ZWE3MzM1YTZiZTYyMmRlZDA4YzZiMWJjOTIwNTFkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBA
IC00Miw1ICs0Miw2IEBAIHZvaWQgd2Via2l0V2ViVmlld0Nsb3NlUGFnZShXZWJLaXRXZWJWaWV3
Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0QWxlcnQoV2ViS2l0V2ViVmlldyos
IGNvbnN0IENTdHJpbmcmIG1lc3NhZ2UpOwogYm9vbCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlw
dENvbmZpcm0oV2ViS2l0V2ViVmlldyosIGNvbnN0IENTdHJpbmcmIG1lc3NhZ2UpOwogV0tTdHJp
bmdSZWYgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQoV2ViS2l0V2ViVmlldyosIGNv
bnN0IENTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IENTdHJpbmcmIGRlZmF1bHRUZXh0KTsKK3ZvaWQg
d2Via2l0V2ViVmlld01ha2VQb2xpY3lEZWNpc2lvbihXZWJLaXRXZWJWaWV3KiwgV2ViS2l0UG9s
aWN5RGVjaXNpb25UeXBlLCBXZWJLaXRQb2xpY3lEZWNpc2lvbiopOwogCiAjZW5kaWYgLy8gV2Vi
S2l0V2ViVmlld1ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5kZXggNmMwZWM0NjJhMTY3
MzMzNjkyOTlmYjY4M2IxYTM5ZTBkNWU3MzEwMC4uYzZmOTQzYWIyYTY4ODAyOWQ5NTZlYmI2ODUw
ZmVjYjFmMjRjMjBhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCkBAIC0yMSw2ICsyMSw4IEBACiAg
ICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFVSSVJlc3BvbnNlLnhtbCIvPgogICAgIDx4
aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLnhtbCIvPgogICAgIDx4
aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXREb3dubG9hZC54bWwiLz4KKyAgICA8eGk6aW5jbHVk
ZSBocmVmPSJ4bWwvV2ViS2l0UG9saWN5RGVjaXNpb24ueG1sIi8+CisgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi54bWwiLz4KICAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJyb3IueG1sIi8+CiAgIDwvY2hhcHRlcj4KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggNDc4OTc5YmI4ZDliNWQ3MDE5ZDExODFlOGM3NjYy
ZTQ4OTlhM2I3ZC4uZWY0NGIyYmVkNjdjNjQxYzcwZjVhNDhlZDg0YTc5MjgwMGUwYjVhZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC00OCw2ICs0OCw3IEBAIHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfdHlwZQogPFRJVExFPldlYktpdFdlYlZpZXc8L1RJVExFPgogV2ViS2l0V2ViVmll
dwogV2ViS2l0TG9hZEV2ZW50CitXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUKIHdlYmtpdF93ZWJf
dmlld19uZXcKIHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0CiB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2NvbnRleHQKQEAgLTMxMiw2ICszMTMsNTEgQEAgd2Via2l0X2Rvd25sb2FkX2dldF90
eXBlCiA8L1NFQ1RJT04+CiAKIDxTRUNUSU9OPgorPEZJTEU+V2ViS2l0UG9saWN5RGVjaXNpb248
L0ZJTEU+CitXZWJLaXRQb2xpY3lEZWNpc2lvbgord2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3du
bG9hZAord2Via2l0X3BvbGljeV9kZWNpc2lvbl9pZ25vcmUKK3dlYmtpdF9wb2xpY3lfZGVjaXNp
b25fdXNlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0UG9saWN5RGVjaXNpb25DbGFz
cworV0VCS0lUX1RZUEVfUE9MSUNZX0RFQ0lTSU9OCitXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OCitX
RUJLSVRfSVNfUE9MSUNZX0RFQ0lTSU9OCitXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX0NMQVNTCitX
RUJLSVRfSVNfUE9MSUNZX0RFQ0lTSU9OX0NMQVNTCitXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX0dF
VF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2
YXRlCit3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNU
SU9OPgorPEZJTEU+V2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uPC9GSUxFPgorV2ViS2l0
TmF2aWdhdGlvblBvbGljeURlY2lzaW9uCitXZWJLaXROYXZpZ2F0aW9uVHlwZQord2Via2l0X25h
dmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9mcmFtZV9uYW1lCit3ZWJraXRfbmF2aWdhdGlv
bl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vZGlmaWVycword2Via2l0X25hdmlnYXRpb25fcG9saWN5
X2RlY2lzaW9uX2dldF9tb3VzZV9idXR0b24KK3dlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNp
c2lvbl9nZXRfbmF2aWdhdGlvbl90eXBlCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNp
b25fZ2V0X3JlcXVlc3QKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb25DbGFzcworV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJ
T04KK1dFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTgorV0VCS0lUX0lTX05BVklHQVRJ
T05fUE9MSUNZX0RFQ0lTSU9OCitXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT05fQ0xB
U1MKK1dFQktJVF9JU19OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTl9DTEFTUworV0VCS0lUX05B
VklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRl
PgorV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZQord2Via2l0X25hdmlnYXRp
b25fcG9saWN5X2RlY2lzaW9uX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgogPEZJ
TEU+V2ViS2l0RXJyb3I8L0ZJTEU+CiBXRUJLSVRfTkVUV09SS19FUlJPUgogV0VCS0lUX1BMVUdJ
Tl9FUlJPUgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbQppbmRleCBkZjUzN2NhNGU4MDlkYmM1ZjZlZWI2MTUwM2FlNDIyMGIz
Y2UzOTQ4Li4xNzVhMTQ5ZTQzNDY0NzYwMzhhM2YxMTBmZmYyN2NkN2JhNTYwZWM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5h
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmls
ZS5hbQpAQCAtNCw3ICs0LDggQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQ
SVRlc3RzL1Rlc3RMb2FkZXJDbGllbnQgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0
V2ViS2l0U2V0dGluZ3MgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0QmFja0Zvcndh
cmRMaXN0IFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdERvd25sb2FkcworCVByb2dy
YW1zL1dlYktpdDJBUElUZXN0cy9UZXN0RG93bmxvYWRzIFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJ
VGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudAogCiBub2luc3RfUFJPR1JBTVMgKz0gJChURVNU
X1BST0dTKQogCkBAIC04NSw2ICs4NiwxMiBAQCBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dEJhY2tGb3J3YXJkTGlzdF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncwogUHJv
Z3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfTERBREQgPSAkKHdlYmtp
dDJfdGVzdHNfbGRhZGQpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJk
TGlzdF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCiAKK1Byb2dyYW1zX1dlYktp
dDJBUElUZXN0c19UZXN0V2ViS2l0UG9saWN5Q2xpZW50X1NPVVJDRVMgPSBcCisgICAgICAgIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGll
bnQuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFBvbGljeUNsaWVudF9D
UFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElU
ZXN0c19UZXN0V2ViS2l0UG9saWN5Q2xpZW50X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRk
KQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCiBpZiBIQVZFX0FUU1BJMgogUHJvZ3JhbXNf
V2ViS2l0MkFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX1NPVVJDRVMgPSBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2
ZXIuY3BwCkBAIC0xMDQsNCArMTExLDMgQEAgUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RE
b3dubG9hZHNfU09VUkNFUyA9IFwKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0RG93bmxv
YWRzX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQogUHJvZ3JhbXNfV2ViS2l0
MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCiBQ
cm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdERvd25sb2Fkc19MREZMQUdTID0gJCh3ZWJraXQy
X3Rlc3RzX2xkZmxhZ3MpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uM2QxNzhiODdlOGU1MjU4ZTk1NzhkNmU5MjI1ZTVlOGRmODBhYmY3YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRQb2xpY3lDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRU
cmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitjbGFzcyBQb2xpY3lDbGllbnRUZXN0OiBwdWJsaWMg
TG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShQ
b2xpY3lDbGllbnRUZXN0KTsKKworICAgIGVudW0gUG9saWN5RGVjaXNpb25SZXNwb25zZSB7Cisg
ICAgICAgIFVzZSwKKyAgICAgICAgSWdub3JlLAorICAgICAgICBEb3dubG9hZCwKKyAgICAgICAg
Tm9uZQorICAgIH07CisKKyAgICBQb2xpY3lDbGllbnRUZXN0KCkKKyAgICAgICAgOiBMb2FkVHJh
Y2tpbmdUZXN0KCkKKyAgICAgICAgLCBtX3BvbGljeURlY2lzaW9uUmVzcG9uc2UoTm9uZSkKKyAg
ICAgICAgLCBtX3BvbGljeURlY2lzaW9uVHlwZUZpbHRlcigwKQorICAgICAgICAsIG1fcmVzcG9u
ZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseShmYWxzZSkKKyAgICAgICAgLCBtX2hhbHRN
YWluTG9vcEFmdGVyTWFraW5nRGVjaXNpb24oZmFsc2UpCisgICAgeworICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fd2ViVmlldywgImRlY2lkZS1wb2xpY3kiLCBHX0NBTExCQUNLKGRlY2lkZVBv
bGljeUNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHF1aXRN
YWluTG9vcExhdGVyKEdNYWluTG9vcCogbG9vcCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29w
X3F1aXQobG9vcCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbihQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBXZWJL
aXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCisgICAgeworICAgICAgICBzd2l0Y2ggKHRlc3Qt
Pm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAg
ICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fdXNlKGRlY2lzaW9uKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIElnbm9yZToKKyAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVj
aXNpb25faWdub3JlKGRlY2lzaW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IERvd25sb2FkOgorICAgICAgICAgICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChk
ZWNpc2lvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb25lOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGVzdC0+bV9oYWx0TWFpbkxv
b3BBZnRlck1ha2luZ0RlY2lzaW9uKQorICAgICAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJl
dF9jYXN0PEdTb3VyY2VGdW5jPihxdWl0TWFpbkxvb3BMYXRlciksIHRlc3QtPm1fbWFpbkxvb3Ap
OworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkxh
dGVyKFBvbGljeUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXNwb25kVG9Qb2xp
Y3lEZWNpc2lvbih0ZXN0LCB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24uZ2V0KCkpOwor
ICAgICAgICB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24gPSAwOworICAgICAgICByZXR1
cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGRlY2lkZVBvbGljeUNhbGxi
YWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFBvbGljeURlY2lzaW9uKiBkZWNpc2lv
biwgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlIHR5cGUsIFBvbGljeUNsaWVudFRlc3QqIHRlc3Qp
CisgICAgeworICAgICAgICBpZiAodGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgIT0g
dHlwZSkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICB0ZXN0LT5tX3ByZXZp
b3VzUG9saWN5RGVjaXNpb24gPSBkZWNpc2lvbjsKKyAgICAgICAgaWYgKHRlc3QtPm1fcmVzcG9u
ZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSkgeworICAgICAgICAgICAgZ19pZGxlX2Fk
ZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihyZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkxh
dGVyKSwgdGVzdCk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKworICAg
ICAgICByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbih0ZXN0LCBkZWNpc2lvbik7CisgICAgICAgIHJl
dHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBQb2xpY3lEZWNpc2lvblJlc3BvbnNlIG1fcG9saWN5
RGVjaXNpb25SZXNwb25zZTsKKyAgICBpbnQgbV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXI7Cisg
ICAgYm9vbCBtX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHk7CisgICAgYm9v
bCBtX2hhbHRNYWluTG9vcEFmdGVyTWFraW5nRGVjaXNpb247CisgICAgR1JlZlB0cjxXZWJLaXRQ
b2xpY3lEZWNpc2lvbj4gbV9wcmV2aW91c1BvbGljeURlY2lzaW9uOworfTsKKworc3RhdGljIHZv
aWQgdGVzdE5hdmlnYXRpb25Qb2xpY3koUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uVHlwZUZpbHRlciA9IFdFQktJVF9Q
T0xJQ1lfREVDSVNJT05fVFlQRV9OQVZJR0FUSU9OX0FDVElPTjsKKworICAgIHRlc3QtPm1fcG9s
aWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6OlVzZTsKKyAgICB0ZXN0LT5s
b2FkSHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzLnNpemUoKSwgPT0sIDMpOworCisgICAgLy8gSWRlYWxseSB3ZSdkIGxpa2UgdG8gaGF2
ZSBhIG1vcmUgaW50ZW5zaXZlIHRlc3QgaGVyZSwgYnV0IGl0J3Mgc3RpbGwgcHJldHR5IHRyaWNr
eQorICAgIC8vIHRvIHRyaWdnZXIgZGlmZmVyZW50IHR5cGVzIG9mIG5hdmlnYXRpb25zIHdpdGgg
dGhlIEdUSysgV2ViS2l0MiBBUEkuCisgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9u
KiBkZWNpc2lvbiA9IFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTih0ZXN0LT5tX3By
ZXZpb3VzUG9saWN5RGVjaXNpb24uZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X25hdmlnYXRpb25fdHlwZShkZWNpc2lvbiks
ID09LCBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX09USEVSKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb3VzZV9idXR0b24oZGVjaXNp
b24pLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGlj
eV9kZWNpc2lvbl9nZXRfbW9kaWZpZXJzKGRlY2lzaW9uKSwgPT0sIDApOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X2ZyYW1lX25hbWUo
ZGVjaXNpb24pLCA9PSwgMCk7CisgICAgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtp
dF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfcmVxdWVzdChkZWNpc2lvbik7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwg
Imh0dHA6Ly93ZWJraXRndGsub3JnLyIpOworCisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJl
c3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6VXNlOworICAgIHRlc3QtPm1fcmVzcG9uZFRvUG9s
aWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSA9IHRydWU7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxo
dG1sLz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXpl
KCksID09LCAzKTsKKworICAgIC8vIElmIHdlIGFyZSB3YWl0aW5nIHVudGlsIGxvYWQgY29tcGxl
dGlvbiwgaXQgd2lsbCBuZXZlciBjb21wbGV0ZSBpZiB3ZSBpZ25vcmUgdGhlCisgICAgLy8gbmF2
aWdhdGlvbi4gU28gd2UgdGVsbCB0aGUgbWFpbiBsb29wIHRvIHF1aXQgc29tZXRpbWUgbGF0ZXIu
CisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6
SWdub3JlOworICAgIHRlc3QtPm1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNs
eSA9IGZhbHNlOworICAgIHRlc3QtPm1faGFsdE1haW5Mb29wQWZ0ZXJNYWtpbmdEZWNpc2lvbiA9
IHRydWU7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sLz4iLCAiaHR0cDovL3dlYmtpdGd0ay5v
cmcvIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAwKTsKK30KKworc3RydWN0IENy
ZWF0ZUNhbGxiYWNrRGF0YSB7CisgICAgYm9vbCB0cmllZFRvT3BlbldpbmRvdzsKKyAgICBHTWFp
bkxvb3AqIG1haW5Mb29wOworfTsKKworc3RhdGljIFdlYktpdFdlYlZpZXcqIGNyZWF0ZUNhbGxi
YWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIENyZWF0ZUNhbGxiYWNrRGF0YSogZGF0YSkKK3sK
KyAgICBkYXRhLT50cmllZFRvT3BlbldpbmRvdyA9IHRydWU7CisgICAgZ19tYWluX2xvb3BfcXVp
dChkYXRhLT5tYWluTG9vcCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RO
ZXdXaW5kb3dQb2xpY3koUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogd2luZG93T3BlbmluZ0hUTUwgPQorICAgICAgICAiPGh0
bWw+PGJvZHk+IgorICAgICAgICAiICAgIDxhIGlkPVwibGlua1wiIGhyZWY9XCJodHRwOi8vd3d3
Lmdvb2dsZS5jb21cIiB0YXJnZXQ9XCJfYmxhbmtcIj5MaW5rPC9hPiIKKyAgICAgICAgIiAgICA8
c2NyaXB0PiIKKyAgICAgICAgIiAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZl
bnQoJ01vdXNlRXZlbnRzJyk7IgorICAgICAgICAiICAgICAgICBldmVudC5pbml0RXZlbnQoJ2Ns
aWNrJywgdHJ1ZSwgZmFsc2UpOyIKKyAgICAgICAgIiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2xpbmsnKS5kaXNwYXRjaEV2ZW50KGV2ZW50KTsiCisgICAgICAgICIgICAgPC9zY3Jp
cHQ+IgorICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNp
b25UeXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05FV19XSU5ET1dfQUNU
SU9OOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dz
X2F1dG9tYXRpY2FsbHkod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZp
ZXcpLCBUUlVFKTsKKworICAgIENyZWF0ZUNhbGxiYWNrRGF0YSBkYXRhOworICAgIGRhdGEudHJp
ZWRUb09wZW5XaW5kb3cgPSBmYWxzZTsKKyAgICBkYXRhLm1haW5Mb29wID0gdGVzdC0+bV9tYWlu
TG9vcDsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3LCAiY3JlYXRlIiwg
R19DQUxMQkFDSyhjcmVhdGVDYWxsYmFjayksICZkYXRhKTsKKyAgICB0ZXN0LT5tX3BvbGljeURl
Y2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7CisgICAgdGVzdC0+bG9hZEh0
bWwod2luZG93T3BlbmluZ0hUTUwsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0
LT53YWl0KDEpOworICAgIGdfYXNzZXJ0KGRhdGEudHJpZWRUb09wZW5XaW5kb3cpOworCisgICAg
V2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJVF9OQVZJR0FU
SU9OX1BPTElDWV9ERUNJU0lPTih0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24uZ2V0KCkp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25f
Z2V0X2ZyYW1lX25hbWUoZGVjaXNpb24pLCA9PSwgIl9ibGFuayIpOworCisgICAgLy8gVXNpbmcg
YSBzaG9ydCB0aW1lb3V0IGlzIGEgYml0IHVnbHkgaGVyZSwgYnV0IGl0J3MgaGFyZCB0byBnZXQg
YXJvdW5kIGJlY2F1c2UgaWYgd2UgYmxvY2sKKyAgICAvLyB0aGUgbmV3IHdpbmRvdyBzaWduYWwg
d2UgY2Fubm90IGhhbHQgdGhlIG1haW4gbG9vcCBpbiB0aGUgY3JlYXRlIGNhbGxiYWNrLiBJZiB3
ZQorICAgIC8vIGhhbHQgdGhlIG1haW4gbG9vcCBpbiB0aGUgcG9saWN5IGRlY2lzaW9uLCB0aGUg
Y3JlYXRlIGNhbGxiYWNrIG5ldmVyIGV4ZWN1dGVzLgorICAgIGRhdGEudHJpZWRUb09wZW5XaW5k
b3cgPSBmYWxzZTsKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lD
bGllbnRUZXN0OjpJZ25vcmU7CisgICAgdGVzdC0+bG9hZEh0bWwod2luZG93T3BlbmluZ0hUTUws
ICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0KC4yKTsKKyAgICBnX2Fz
c2VydCghZGF0YS50cmllZFRvT3BlbldpbmRvdyk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sK
KyAgICBQb2xpY3lDbGllbnRUZXN0OjphZGQoIldlYktpdFBvbGljeUNsaWVudCIsICJuYXZpZ2F0
aW9uLXBvbGljeSIsIHRlc3ROYXZpZ2F0aW9uUG9saWN5KTsKKyAgICBQb2xpY3lDbGllbnRUZXN0
OjphZGQoIldlYktpdFBvbGljeUNsaWVudCIsICJuZXctd2luZG93LXBvbGljeSIsIHRlc3ROZXdX
aW5kb3dQb2xpY3kpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CmluZGV4IGU2
ZGRhMTBhZWZhZGU2MzlmYzhiYTNkNTdiYWZkOTk1ZjdkOWEwYTIuLjU5MThkMDk1YTkxZjdmN2Yy
YjVkMTc2Mjk5YjViZWI0MzdiZDQ2YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdApAQCAtMSw1ICsxLDYgQEAKIEJPT0xF
QU46RU5VTSxTVFJJTkcsUE9JTlRFUgogQk9PTEVBTjpPQkpFQ1QKK0JPT0xFQU46T0JKRUNULEVO
VU0KIEJPT0xFQU46T0JKRUNULFNUUklORyxQT0lOVEVSCiBCT09MRUFOOlBPSU5URVIKIEJPT0xF
QU46U1RSSU5HCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggMGY3NmU1NjI5NjAzYWVlYzVmMmI4YWQyYjc3NTMwZDc5MGI4NGVjNy4uMDE0MzA4MzIy
YjNiYWJiNzA0N2IyMTNjZDgwYWE5YmI3ZGM5NDlkYSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAxLTI1ICBN
YXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBb
V0syXSBJbXBsZW1lbnQgdGhlIHBvbGljeSBjbGllbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBndGsvZ2VuZXJhdGUtZ3RrZG9jOgorICAgICAgICAo
Z2V0X3dlYmtpdDJfb3B0aW9ucyk6IFVwZGF0ZSB0aGUgbGlzdCBvZiBza2lwcGVkIHNvdXJjZSBm
aWxlcyB0byBpbmNsdWRlIGFsbCBjbGllbnRzLgorCiAyMDEyLTAxLTI1ICBOw6FuZG9yIEh1c3pr
YSAgPGh1c3prYS5uYW5kb3JAc3R1ZC51LXN6ZWdlZC5odT4KIAogICAgICAgICBbV0syXSBXZWJL
aXRUZXN0UnVubmVyIG5lZWRzIGxheW91dFRlc3RDb250cm9sbGVyLnNldFBvcHVwQmxvY2tpbmdF
bmFibGVkCmRpZmYgLS1naXQgYS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jIGIvVG9vbHMvZ3Rr
L2dlbmVyYXRlLWd0a2RvYwppbmRleCBmNjk4YWZhY2VmZGU2ZmM4ZDM1NGNjZjc1NGRmYWJiYmU2
ZDliMDAyLi5hNTgzNDVjNTcwNjU4OGM2ZjVlNzEwMGY3OWY2MGQxOTU0NmMyNjgyIDEwMDc1NQot
LS0gYS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCisrKyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1n
dGtkb2MKQEAgLTU5LDEwICs1OSw3IEBAIGRlZiBnZXRfd2Via2l0Ml9vcHRpb25zKCk6CiAgICAg
ICAgICAgICAgICAgICAgJyAtSScgKyBjb21tb24udG9wX2xldmVsX3BhdGgoJ1NvdXJjZScpICsg
XAogICAgICAgICAgICAgICAgICAgICcgLUknICsgc3JjX3BhdGgoKSwKICAgICAgICAgJ2lnbm9y
ZWRfZmlsZXMnOiBnbG9iLmdsb2Ioc3JjX3BhdGgoJypQcml2YXRlLmgnKSkgKyBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdQYWdlQ2xpZW50SW1wbC4qJykp
ICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0
RG93bmxvYWRDbGllbnQuKicpKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmds
b2Ioc3JjX3BhdGgoJ1dlYktpdFVJQ2xpZW50LionKSkgKyBcCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXRMb2FkZXJDbGllbnQuKicpKSArIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJypDbGllbnQqJykpICsg
XAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0V2Vi
Vmlld0Jhc2VBY2Nlc3NpYmxlLionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xv
Yi5nbG9iKHNyY19wYXRoKCd0ZXN0cy8qLmgnKSkKICAgICB9KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124317</attachid>
            <date>2012-01-27 07:57:14 -0800</date>
            <delta_ts>2012-01-27 11:29:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76343-20120127075713.patch</filename>
            <type>text/plain</type>
            <size>68241</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjhkNjNlOWUyOTRlM2Nl
MzI3OTIzNTRlNzZhYWQyMjQ1OThhYmUzOS4uNGQ2MGE2Y2IzMmQ0NGM4MmZhMDViZTQ1NmYxOGM3
ZmZmYTM2ZWRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAxLTI3ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBbV0sy
XSBJbXBsZW1lbnQgdGhlIHBvbGljeSBjbGllbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRoZSBhYnN0cmFjdCBXZWJLaXRQb2xpY3lE
ZWNpc2lvbiwgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLAorICAgICAgICBhbmQgYWRk
IHRoZSBkZWNpZGUtcG9saWN5IHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3LgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gdGhlIHNvdXJjZSBsaXN0LgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcDogVXNlIHRoZSBXZWJDb3JlIG5h
bWVzcGFjZSBiZWNhdXNlCisgICAgICAgIG9mIGNoYW5nZXMgdG8gQVNTRVJUX01BVENISU5HX0VO
VU1TLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlLmg6IEFkZGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudFByaXZhdGUuaDog
QWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNp
c2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lE
ZWNpc2lvblByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UHJpdmF0ZS5oOiBNb2RpZnkgQVNTRVJUX01BVENISU5HX0VOVU1TIHRvIG1ha2UKKyAgICAg
ICAgaXQgdXNlZnVsIGZvciBub24tV2ViQ29yZSBlbnVtcy4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDb25zdHJ1
Y3RlZCk6IEF0dGFjaCB0aGUgcG9saWN5IGNsaWVudCBjYWxsYmFja3MgdG8gdGhlIHBhZ2UuCisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IEFkZCB0aGUgZGVjaWRlLXBvbGlj
eSBzaWduYWwgZGVmaW5pdGlvbi4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdNYWtlUG9saWN5RGVj
aXNpb24pOiBBZGRlZCB0aGlzIHByaXZhdGUgbWV0aG9kIHRvIGZpcmUgdGhlIHNpZ25hbC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6IEFkZGVkIG5ldyBzaWdu
YWwgdG8gdGhlIGxpc3QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d1ByaXZhdGUuaDogQWRkZWQgbmV3IG1ldGhvZCBkZWNsYXJhdGlvbi4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBuZXcgY2xhc3Nl
cyB0byB0aGUgZG9jcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstc2VjdGlvbnMudHh0OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHRlc3QgdG8gdGhlIHNvdXJjZSBsaXN0LgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0
OiBkZWNpZGUtcG9saWN5IGhhcyBhIG5ldyBzaWduYXR1cmUuCisKIDIwMTItMDEtMjcgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFk
ZCBhIEdLZXlGaWxlIGVzcGVjaWFsaXphdGlvbiB0byBHT3duUHRyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFt
CmluZGV4IDI4MDVjYTc2ZmUwMDM0YmJjMjQ0YTk5NmNjNDI1MDQ5NGExNzM3ODMuLmNjOTFkOWJk
OTQxNzNmYWI2NGNjNTA1ZDlkZGVmZTQ1OGI3ZTYxYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBA
IC04NSwxMCArODUsMTIgQEAgbGlid2Via2l0Mmd0a2luY2x1ZGVfSEVBREVSUyA9IFwKIAkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaCBcCiAJJChXZWJLaXQyKS9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEVycm9yLmggXAotCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViQ29udGV4dC5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFBvbGljeURlY2lzaW9uLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0U2V0dGluZ3MuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRVUklSZXF1ZXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJ
UmVzcG9uc2UuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250
ZXh0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIFwK
IAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmggXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5oIFwKQEAg
LTUzMiw2ICs1MzQsMTMgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJT
SU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwIFwKKwlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwIFwK
KwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb24uaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2
aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvbi5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uLmggXAorCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudC5jcHAgXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudC5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAKaW5kZXggYWRkY2YxYmQ1YmE3NmUy
MjA0NGU0ZTM3NzJmZDYzZTM4NzIyYjE5My4uNDJjZjBhYjM1ZTJkNTQ5YmYwNTNmNzcwNTAyMTJl
OTBiMmNkMTc3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RXJyb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEVycm9yLmNwcApAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgIldlYktpdFByaXZhdGUu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0d0ay5oPgogCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKwogR1F1YXJrIHdlYmtpdF9uZXR3b3JrX2Vycm9yX3F1YXJrKCkKIHsKICAgICByZXR1
cm4gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoV2ViQ29yZTo6ZXJyb3JEb21haW5OZXR3b3Jr
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjZDU3
YjRhNmZlNDhjNWE3ODhjZDFhYzI1NTI3N2EwMjBjNzMyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVj
aXNpb24uY3BwCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb24uaCIKKworI2luY2x1ZGUgIldlYktpdEVudW1UeXBlcy5oIgorI2luY2x1
ZGUgIldlYktpdFBvbGljeURlY2lzaW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRVUklSZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YlVSTFJlcXVlc3QuaCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z2xpYi9naTE4
bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisvKioKKyAqIFNF
Q1RJT046IFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbgorICogQFNob3J0X2Rlc2NyaXB0
aW9uOiBBIHBvbGljeSBkZWNpc2lvbiBmb3IgbmF2aWdhdGlvbiBhY3Rpb25zCisgKiBAVGl0bGU6
IFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbgorICogQFNlZV9hbHNvOiAjV2ViS2l0UG9s
aWN5RGVjaXNpb24sICNXZWJLaXRXZWJWaWV3CisgKgorICogV2ViS2l0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uIHJlcHJlc2VudHMgYSBwb2xpY3kgZGVjaXNpb24gZm9yIGV2ZW50cyBhc3NvY2lh
dGVkIHdpdGgKKyAqIG5hdmlnYXRpb25zLiBJZiB0aGUgdmFsdWUgb2YgV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uOm1vdXNlLWJ1dHRvbiBpcyBub3QgMCwgdGhlbgorICogdGhlIG5hdmln
YXRpb24gd2FzIHRyaWdnZXJlZCBieSBhIG1vdXNlIGV2ZW50LgorICovCisKK0dfREVGSU5FX1RZ
UEUoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLCB3ZWJraXRfbmF2aWdhdGlvbl9wb2xp
Y3lfZGVjaXNpb24sIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTikKKworc3RydWN0IF9XZWJL
aXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlIHsKKyAgICBXZWJLaXROYXZpZ2F0aW9u
VHlwZSBuYXZpZ2F0aW9uVHlwZTsKKyAgICB1bnNpZ25lZCBtb2RpZmllcnM7CisgICAgdW5zaWdu
ZWQgbW91c2VCdXR0b247CisgICAgR1JlZlB0cjxXZWJLaXRVUklSZXF1ZXN0PiByZXF1ZXN0Owor
ICAgIENTdHJpbmcgZnJhbWVOYW1lOworfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfTkFWSUdBVElPTl9UWVBFLAorICAgIFBST1BfTU9VU0VfQlVUVE9OLAorICAgIFBST1BfTU9E
SUZJRVJTLAorICAgIFBST1BfUkVRVUVTVCwKKyAgICBQUk9QX0ZSQU1FX05BTUUsCit9OworCitz
dGF0aWMgdm9pZCB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25faW5pdChXZWJLaXRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQoreworICAgIGRlY2lzaW9uLT5wcml2
ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGRlY2lzaW9uLCBXRUJLSVRfVFlQRV9OQVZJ
R0FUSU9OX1BPTElDWV9ERUNJU0lPTiwgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJp
dmF0ZSk7CisgICAgbmV3IChkZWNpc2lvbi0+cHJpdikgV2ViS2l0TmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uUHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb25GaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV0VCS0lUX05BVklHQVRJ
T05fUE9MSUNZX0RFQ0lTSU9OKG9iamVjdCktPnByaXYtPn5XZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb25Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X25hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkdldFByb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJh
bVNwZWMpCit7CisgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9
IFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTihvYmplY3QpOworICAgIHN3aXRjaCAo
cHJvcElkKSB7CisgICAgY2FzZSBQUk9QX05BVklHQVRJT05fVFlQRToKKyAgICAgICAgZ192YWx1
ZV9zZXRfZW51bSh2YWx1ZSwgd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9u
YXZpZ2F0aW9uX3R5cGUoZGVjaXNpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X01PVVNFX0JVVFRPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfZW51bSh2YWx1ZSwgd2Via2l0X25h
dmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb3VzZV9idXR0b24oZGVjaXNpb24pKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01PRElGSUVSUzoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfdWludCh2YWx1ZSwgd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb2Rp
ZmllcnMoZGVjaXNpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFUVVFU1Q6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X25hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uX2dldF9yZXF1ZXN0KGRlY2lzaW9uKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9GUkFNRV9OQU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUs
IHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfZnJhbWVfbmFtZShkZWNpc2lv
bikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X25hdmlnYXRpb25fcG9saWN5
X2RlY2lzaW9uX2NsYXNzX2luaXQoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ2xhc3Mq
IGRlY2lzaW9uQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKGRlY2lzaW9uQ2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdl
YmtpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZpbmFsaXplOworICAgIG9iamVjdENsYXNzLT5n
ZXRfcHJvcGVydHkgPSB3ZWJraXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25HZXRQcm9wZXJ0eTsK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZGVjaXNpb25DbGFzcywgc2l6ZW9mKFdlYktp
dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUpKTsKKworICAgIC8qKgorICAgICAqIFdl
YktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbjpuYXZpZ2F0aW9uLXR5cGU6CisgICAgICoKKyAg
ICAgKiBUaGUgdHlwZSBvZiBuYXZpZ2F0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoaXMgcG9saWN5IGRl
Y2lzaW9uLiBUaGlzIGlzCisgICAgICogdXNlZnVsIGZvciBlbmFjdGluZyBkaWZmZXJlbnQgcG9s
aWNpZXMgZGVwZW5kaW5nIG9uIHdoYXQgdHlwZSBvZiB1c2VyCisgICAgICogYWN0aW9uIGNhdXNl
ZCB0aGUgbmF2aWdhdGlvbi4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9OQVZJR0FUSU9OX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfZW51bSgibmF2aWdhdGlvbi10eXBlIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk5hdmlnYXRpb24gdHlwZSIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XygiVGhlIHR5cGUgb2YgbmF2aWdhdGlvbiB0cmlnZ2VyaW5nIHRoaXMgZGVjaXNpb24iKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9UWVBFX05BVklHQVRJT05fVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VE
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb246bW91c2UtYnV0dG9uOgorICAgICAqCisgICAgICogSWYgdGhlIG5h
dmlnYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgcG9saWN5IGRlY2lzaW9uIHdhcyBvcmlnaW5h
bGx5CisgICAgICogdHJpZ2dlcmVkIGJ5IGEgbW91c2UgZXZlbnQsIHRoaXMgcHJvcGVydHkgY29u
dGFpbnMgbm9uLXplcm8gYnV0dG9uIG51bWJlcgorICAgICAqIG9mIHRoZSBidXR0b24gdHJpZ2dl
cmluZyB0aGF0IGV2ZW50LiBUaGUgYnV0dG9uIG51bWJlcnMgbWF0Y2ggdGhvc2UgZnJvbSBHREsu
CisgICAgICogSWYgdGhlIG5hdmlnYXRpb24gd2FzIG5vdCB0cmlnZ2VyZWQgYnkgYSBtb3VzZSBl
dmVudCwgdGhlIHZhbHVlIG9mIHRoaXMKKyAgICAgKiBwcm9wZXJ0eSB3aWxsIGJlIDAuCisgICAg
ICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTU9VU0VfQlVUVE9OLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoIm1vdXNl
LWJ1dHRvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfKCJNb3VzZSBidXR0b24iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBtb3VzZSBidXR0b24gdXNlZCBpZiB0aGlz
IGRlY2lzaW9uIHdhcyB0cmlnZ2VyZWQgYnkgYSBtb3VzZSBldmVudCIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb246bW9kaWZpZXJzOgorICAgICAqCisgICAgICogSWYgdGhlIG5hdmln
YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgcG9saWN5IGRlY2lzaW9uIHdhcyBvcmlnaW5hbGx5
CisgICAgICogdHJpZ2dlcmVkIGJ5IGEgbW91c2UgZXZlbnQsIHRoaXMgcHJvcGVydHkgY29udGFp
bnMgYSBiaXRtYXNrIG9mIHZhcmlvdXMKKyAgICAgKiBHZGtNb2RpZmllclR5cGUgdmFsdWVzIGRl
c2NyaWJpbmcgdGhlIG1vZGlmaWVycyB1c2VkIGZvciB0aGF0IGNsaWNrLgorICAgICAqIElmIHRo
ZSBuYXZpZ2F0aW9uIHdhcyBub3QgdHJpZ2dlcmVkIGJ5IGEgbW91c2UgZXZlbnQgb3Igbm8gbW9k
aWZpZXJzCisgICAgICogd2VyZSBhY3RpdmUsIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IHdp
bGwgYmUgemVyby4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9N
T0RJRklFUlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3Nw
ZWNfdWludCgibW9kaWZpZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIk1vdXNlIGV2ZW50IG1vZGlmaWVycyIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG1vZGlm
aWVycyBhY3RpdmUgaWYgdGhpcyBkZWNpc2lvbiB3YXMgdHJpZ2dlcmVkIGJ5IGEgbW91c2UgZXZl
bnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisg
ICAgICogV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uOnJlcXVlc3Q6CisgICAgICoKKyAg
ICAgKiBUaGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZSAjV2ViS2l0VVJJUmVxdWVzdCBhc3NvY2lh
dGVkIHdpdGggdGhpcworICAgICAqIG5hdmlnYXRpb24uCisgICAgICovCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBST1BfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInJlcXVlc3QiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTmF2aWdhdGlvbiBVUkkg
cmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiVGhlIFVSSSByZXF1ZXN0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMg
bmF2aWdhdGlvbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1RZUEVfVVJJX1JFUVVFU1QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIC8qKgorICAgICAqIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbjpmcmFt
ZS1uYW1lOgorICAgICAqCisgICAgICogSWYgdGhpcyBuYXZpZ2F0aW9uIHJlcXVlc3QgdGFyZ2V0
cyBhIG5ldyBmcmFtZSwgdGhpcyBwcm9wZXJ0eSBjb250YWlucworICAgICAqIHRoZSBuYW1lIG9m
IHRoYXQgZnJhbWUuIEZvciBleGFtcGxlIGlmIHRoZSBkZWNpc2lvbiB3YXMgdHJpZ2dlcmVkIGJ5
IGNsaWNraW5nIGEKKyAgICAgKiBsaW5rIHdpdGggYSB0YXJnZXQgYXR0cmlidXRlIGVxdWFsIHRv
ICJfYmxhbmsiLCB0aGlzIHByb3BlcnR5IHdpbGwgY29udGFpbiB0aGUKKyAgICAgKiB2YWx1ZSBv
ZiB0aGF0IGF0dHJpYnV0ZS4gSW4gYWxsIG90aGVyIGNhc2VzLCB0aGlzIHZhbHVlIHdpbGwgYmUg
JU5VTEwuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmpl
Y3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfRlJBTUVf
TkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoImZyYW1lLW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiRnJhbWUgbmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG5hbWUgb2YgdGhlIG5ldyBm
cmFtZSB0aGlzIG5hdmlnYXRpb24gYWN0aW9uIHRhcmdldHMiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0
X25hdmlnYXRpb25fdHlwZToKKyAqIEBkZWNpc2lvbjogYSAjV2ViS2l0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uCisgKgorICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlICNXZWJLaXROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb246bmF2aWdhdGlvbi10eXBlIHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6
IFRoZSB0eXBlIG9mIG5hdmlnYXRpb24gdHJpZ2dlcmluZyB0aGlzIHBvbGljeSBkZWNpc2lvbi4K
KyAqLworV2ViS2l0TmF2aWdhdGlvblR5cGUgd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lz
aW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBk
ZWNpc2lvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfTkFWSUdBVElP
Tl9QT0xJQ1lfREVDSVNJT04oZGVjaXNpb24pLCBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX09USEVS
KTsKKyAgICByZXR1cm4gZGVjaXNpb24tPnByaXYtPm5hdmlnYXRpb25UeXBlOworfQorCisvKioK
KyAqIHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW91c2VfYnV0dG9uOgor
ICogQGRlY2lzaW9uOiBhICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24KKyAqCisgKiBH
ZXRzIHRoZSB2YWx1ZSBvZiB0aGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbjptb3Vz
ZS1idXR0b24gcHJvcGVydHkuCisgKgorICogUmV0dXJuczogVGhlIG1vdXNlIGJ1dHRvbiB1c2Vk
IGlmIHRoaXMgZGVjaXNpb24gd2FzIHRyaWdnZXJlZCBieSBhIG1vdXNlIGV2ZW50IG9yIDAgb3Ro
ZXJ3aXNlCisgKi8KK2d1aW50IHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRf
bW91c2VfYnV0dG9uKFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05BVklHQVRJT05fUE9MSUNZX0RF
Q0lTSU9OKGRlY2lzaW9uKSwgMCk7CisgICAgcmV0dXJuIGRlY2lzaW9uLT5wcml2LT5tb3VzZUJ1
dHRvbjsKK30KKworLyoqCisgKiB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0
X21vZGlmaWVyczoKKyAqIEBkZWNpc2lvbjogYSAjV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uCisgKgorICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb246bW9kaWZpZXJzIHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6IFRoZSBtb2RpZmll
cnMgYWN0aXZlIGlmIHRoaXMgZGVjaXNpb24gd2FzIHRyaWdnZXJlZCBieSBhIG1vdXNlIGV2ZW50
CisgKi8KK3Vuc2lnbmVkIHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW9k
aWZpZXJzKFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9O
KGRlY2lzaW9uKSwgMCk7CisgICAgcmV0dXJuIGRlY2lzaW9uLT5wcml2LT5tb2RpZmllcnM7Cit9
CisKKy8qKgorICogd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9yZXF1ZXN0
OgorICogQGRlY2lzaW9uOiBhICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24KKyAqCisg
KiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbjpy
ZXF1ZXN0IHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogVGhlIFVS
SSByZXF1ZXN0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmF2aWdhdGlvbgorICovCitX
ZWJLaXRVUklSZXF1ZXN0KiB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X3Jl
cXVlc3QoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04o
ZGVjaXNpb24pLCAwKTsKKyAgICByZXR1cm4gZGVjaXNpb24tPnByaXYtPnJlcXVlc3QuZ2V0KCk7
Cit9CisKKy8qKgorICogd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9mcmFt
ZV9uYW1lOgorICogQGRlY2lzaW9uOiBhICNXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24K
KyAqCisgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbjpmcmFtZS1uYW1lIHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6IFRoZSBuYW1lIG9mIHRo
ZSBuZXcgZnJhbWUgdGhpcyBuYXZpZ2F0aW9uIGFjdGlvbiB0YXJnZXRzIG9yICVOVUxMIAorICov
Citjb25zdCBjaGFyKiB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X2ZyYW1l
X25hbWUoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04o
ZGVjaXNpb24pLCAwKTsKKyAgICByZXR1cm4gZGVjaXNpb24tPnByaXYtPmZyYW1lTmFtZS5kYXRh
KCk7Cit9CisKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX05BVklHQVRJT05f
VFlQRV9MSU5LX0NMSUNLRUQsIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVMaW5rQ2xpY2tlZCk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfRk9STV9T
VUJNSVRURUQsIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVGb3JtU3VibWl0dGVkKTsKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX05BVklHQVRJT05fVFlQRV9CQUNLX0ZPUldBUkQs
IGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVCYWNrRm9yd2FyZCk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfUkVMT0FELCBrV0tGcmFtZU5hdmlnYXRp
b25UeXBlUmVsb2FkKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX05BVklH
QVRJT05fVFlQRV9GT1JNX1JFU1VCTUlUVEVELCBrV0tGcmFtZU5hdmlnYXRpb25UeXBlRm9ybVJl
c3VibWl0dGVkKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX05BVklHQVRJ
T05fVFlQRV9PVEhFUiwga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZU90aGVyKTsKKworc3RhdGljIHVu
c2lnbmVkIHdrRXZlbnRNb3VzZUJ1dHRvblRvV2ViS2l0TW91c2VCdXR0b24oV0tFdmVudE1vdXNl
QnV0dG9uIHdrQnV0dG9uKQoreworICAgIHN3aXRjaCAod2tCdXR0b24pIHsKKyAgICBjYXNlIGtX
S0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbjoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBr
V0tFdmVudE1vdXNlQnV0dG9uTGVmdEJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2Fz
ZSBrV0tFdmVudE1vdXNlQnV0dG9uTWlkZGxlQnV0dG9uOgorICAgICAgICByZXR1cm4gMjsKKyAg
ICBjYXNlIGtXS0V2ZW50TW91c2VCdXR0b25SaWdodEJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIDM7
CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit1
bnNpZ25lZCB3a0V2ZW50TW9kaWZpZXJzVG9VbnNpZ25lZChXS0V2ZW50TW9kaWZpZXJzIHdrTW9k
aWZpZXJzKQoreworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7CisgICAgaWYgKHdrTW9kaWZp
ZXJzICYga1dLRXZlbnRNb2RpZmllcnNTaGlmdEtleSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdE
S19TSElGVF9NQVNLOworICAgIGlmICh3a01vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzQ29u
dHJvbEtleSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdES19DT05UUk9MX01BU0s7CisgICAgaWYg
KHdrTW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNBbHRLZXkpCisgICAgICAgIG1vZGlmaWVy
cyB8PSBHREtfTU9EMV9NQVNLOworICAgIGlmICh3a01vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZp
ZXJzTWV0YUtleSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdES19NRVRBX01BU0s7CisgICAgcmV0
dXJuIG1vZGlmaWVyczsKK30KKworV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiB3ZWJr
aXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25DcmVhdGUoV0tGcmFtZU5hdmlnYXRpb25UeXBlIG5h
dmlnYXRpb25UeXBlLCBXS0V2ZW50TW91c2VCdXR0b24gbW91c2VCdXR0b24sIFdLRXZlbnRNb2Rp
ZmllcnMgbW9kaWZpZXJzLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgY29uc3QgY2hhciogZnJh
bWVOYW1lLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIpCit7CisgICAgV2ViS2l0
TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJVF9OQVZJR0FUSU9OX1BP
TElDWV9ERUNJU0lPTihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lf
REVDSVNJT04sIE5VTEwpKTsKKyAgICBkZWNpc2lvbi0+cHJpdi0+bmF2aWdhdGlvblR5cGUgPSBz
dGF0aWNfY2FzdDxXZWJLaXROYXZpZ2F0aW9uVHlwZT4obmF2aWdhdGlvblR5cGUpOworICAgIGRl
Y2lzaW9uLT5wcml2LT5tb3VzZUJ1dHRvbiA9IHdrRXZlbnRNb3VzZUJ1dHRvblRvV2ViS2l0TW91
c2VCdXR0b24obW91c2VCdXR0b24pOworICAgIGRlY2lzaW9uLT5wcml2LT5tb2RpZmllcnMgPSB3
a0V2ZW50TW9kaWZpZXJzVG9VbnNpZ25lZChtb2RpZmllcnMpOworICAgIGRlY2lzaW9uLT5wcml2
LT5yZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdFVSSVJlcXVlc3RDcmVhdGVGb3JSZXNvdXJjZVJl
cXVlc3QodG9JbXBsKHJlcXVlc3QpLT5yZXNvdXJjZVJlcXVlc3QoKSkpOworICAgIGRlY2lzaW9u
LT5wcml2LT5mcmFtZU5hbWUgPSBmcmFtZU5hbWU7CisgICAgd2Via2l0UG9saWN5RGVjaXNpb25T
ZXRMaXN0ZW5lcihXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9uKSwgbGlzdGVuZXIpOwor
ICAgIHJldHVybiBkZWNpc2lvbjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYmJmMjQxMjY4ZDYxMDBlZTA4M2Q0NjJjYjVmYmIzOGU3OGMyYjYxMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQy
L3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbl9oCisjZGVmaW5lIFdlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UG9saWN5
RGVjaXNpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KKworR19C
RUdJTl9ERUNMUworCisvKioKKyAqIFdlYktpdE5hdmlnYXRpb25UeXBlOgorICogQFdFQktJVF9O
QVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVk
IGJ5IGNsaWNraW5nIGEgbGluay4KKyAqIEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0ZPUk1fU1VC
TUlUVEVEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHN1Ym1pdHRpbmcgYSBmb3Jt
LgorICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfQkFDS19GT1JXQVJEOiBUaGUgbmF2aWdhdGlv
biB3YXMgdHJpZ2dlcmVkIGJ5IG5hdmlnYXRpbmcgZm9yd2FyZCBvciBiYWNrd2FyZC4KKyAqIEBX
RUJLSVRfTkFWSUdBVElPTl9UWVBFX1JFTE9BRDogVGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJl
ZCBieSByZWxvYWRpbmcuCisgKiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1JFU1VCTUlU
VEVEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHJlc3VibWl0dGluZyBhIGZvcm0u
CisgKiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUjogVGhlIG5hdmlnYXRpb24gd2FzIHRy
aWdnZXJlZCBieSBzb21lIG90aGVyIGFjdGlvbi4KKyAqCisgKiBFbnVtIHZhbHVlcyB1c2VkIHRv
IGRlbm90ZSB0aGUgdmFyaW91cyBuYXZpZ2F0aW9uIHR5cGVzLgorICovCit0eXBlZGVmIGVudW0g
eworICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VELAorICAgIFdFQktJVF9O
QVZJR0FUSU9OX1RZUEVfRk9STV9TVUJNSVRURUQsCisgICAgV0VCS0lUX05BVklHQVRJT05fVFlQ
RV9CQUNLX0ZPUldBUkQsCisgICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9SRUxPQUQsCisgICAg
V0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1JFU1VCTUlUVEVELAorICAgIFdFQktJVF9OQVZJ
R0FUSU9OX1RZUEVfT1RIRVIsCit9IFdlYktpdE5hdmlnYXRpb25UeXBlOworCisjZGVmaW5lIFdF
QktJVF9UWVBFX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OICAgICAgICAgICAgKHdlYmtpdF9u
YXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfTkFW
SUdBVElPTl9QT0xJQ1lfREVDSVNJT04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04s
IFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbikpCisjZGVmaW5lIFdFQktJVF9OQVZJR0FU
SU9OX1BPTElDWV9ERUNJU0lPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTiwgV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfTkFW
SUdBVElPTl9QT0xJQ1lfREVDSVNJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04pKQor
I2RlZmluZSBXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT05fQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfTkFWSUdBVElP
Tl9QT0xJQ1lfREVDSVNJT04pKQorI2RlZmluZSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVD
SVNJT05fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04sIFdlYktpdE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbkNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE5hdmlnYXRpb25Q
b2xpY3lEZWNpc2lvbiAgICAgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uOwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNsYXNzICAgV2ViS2l0
TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmF2
aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNp
b25Qcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiB7Cisg
ICAgV2ViS2l0UG9saWN5RGVjaXNpb24gcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisg
ICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0
cnVjdCBfV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ2xhc3MgeworICAgIFdlYktpdFBv
bGljeURlY2lzaW9uQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQor
d2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF90eXBlICAgICAgICAgICAgKHZv
aWQpOworCitXRUJLSVRfQVBJIFdlYktpdE5hdmlnYXRpb25UeXBlCit3ZWJraXRfbmF2aWdhdGlv
bl9wb2xpY3lfZGVjaXNpb25fZ2V0X25hdmlnYXRpb25fdHlwZSAoV2ViS2l0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uICpkZWNpc2lvbik7CitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfbmF2aWdh
dGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vdXNlX2J1dHRvbiAgICAoV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uICpkZWNpc2lvbik7CitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfbmF2
aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vZGlmaWVycyAgICAgICAoV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uICpkZWNpc2lvbik7CitXRUJLSVRfQVBJIFdlYktpdFVSSVJlcXVl
c3QgKgord2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9yZXF1ZXN0ICAgICAg
ICAgKFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiAqZGVjaXNpb24pOworV0VCS0lUX0FQ
SSBjb25zdCBnY2hhciAqCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X2Zy
YW1lX25hbWUgICAgICAoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uICpkZWNpc2lvbik7
CitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2MwZTFmNTA4YjdmNmIwOTdmMzE3NmRlOTk4N2U1
MGRkZjNhZmFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb24uaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogd2Via2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ3Jl
YXRlKFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSwgV0tFdmVudE1vdXNlQnV0dG9uLCBXS0V2ZW50TW9k
aWZpZXJzLCBXS1VSTFJlcXVlc3RSZWYsIGNvbnN0IGNoYXIqIGZyYW1lTmFtZSwgV0tGcmFtZVBv
bGljeUxpc3RlbmVyUmVmKTsKKworI2VuZGlmIC8vIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvblByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UG9saWN5Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFBvbGljeUNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjE3NTdkNDI4MjE1MjYyNzg5
ZWMyMjM5Yjc0OGUyN2NlNTJjMWU1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudC5jcHAKQEAgLTAsMCArMSw3MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViS2l0UG9saWN5Q2xpZW50LmgiCisKKyNpbmNsdWRlICJXZWJLaXRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UG9saWN5
RGVjaXNpb24uaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIK
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK3N0YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25DYWxsYmFj
ayhXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tGcmFtZU5hdmlnYXRpb25UeXBl
IG5hdmlnYXRpb25UeXBlLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgV0tFdmVudE1vdXNl
QnV0dG9uIG1vdXNlQnV0dG9uLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgV0tGcmFtZVBvbGlj
eUxpc3RlbmVyUmVmIGxpc3RlbmVyLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24+
IGRlY2lzaW9uID0KKyAgICAgICAgYWRvcHRHUmVmKHdlYmtpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbkNyZWF0ZShuYXZpZ2F0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUJ1dHRvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCAvKiBmcmFtZSBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlzdGVuZXIpKTsKKyAgICB3ZWJraXRXZWJWaWV3TWFrZVBvbGlj
eURlY2lzaW9uKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9OQVZJR0FUSU9O
X0FDVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QT0xJ
Q1lfREVDSVNJT04oZGVjaXNpb24uZ2V0KCkpKTsKK30KKworc3RhdGljIHZvaWQgZGVjaWRlUG9s
aWN5Rm9yTmV3V2luZG93QWN0aW9uQ2FsbGJhY2soV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYg
ZnJhbWUsIFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSwgV0tFdmVudE1vZGlm
aWVycyBtb2RpZmllcnMsIFdLRXZlbnRNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbiwgV0tVUkxSZXF1
ZXN0UmVmIHJlcXVlc3QsIFdLU3RyaW5nUmVmIGZyYW1lTmFtZSwgV0tGcmFtZVBvbGljeUxpc3Rl
bmVyUmVmIGxpc3RlbmVyLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24+IGRlY2lz
aW9uID0KKyAgICAgICAgYWRvcHRHUmVmKHdlYmtpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNy
ZWF0ZShuYXZpZ2F0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtb3VzZUJ1dHRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0ltcGwo
ZnJhbWVOYW1lKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcikpOworICAgIHdlYmtp
dFdlYlZpZXdNYWtlUG9saWN5RGVjaXNpb24oV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BPTElDWV9ERUNJU0lP
Tl9UWVBFX05FV19XSU5ET1dfQUNUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BPTElDWV9ERUNJU0lPTihkZWNpc2lvbi5nZXQoKSkpOworfQorCit2b2lk
IGF0dGFjaFBvbGljeUNsaWVudFRvUGFnZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAg
IFdLUGFnZVBvbGljeUNsaWVudCBwb2xpY3lDbGllbnQgPSB7CisgICAgICAgIGtXS1BhZ2VQb2xp
Y3lDbGllbnRDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgd2ViVmlldywgLy8gY2xpZW50SW5mbwor
ICAgICAgICBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uQ2FsbGJhY2ssCisgICAgICAg
IGRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbkNhbGxiYWNrLAorICAgICAgICAwLCAvLyBk
ZWNpZGVQb2xpY3lGb3JSZXNwb25zZUNhbGxiYWNrLAorICAgICAgICAwLCAvLyB1bmFibGVUb0lt
cGxlbWVudFBvbGljeQorICAgIH07CisgICAgV0tQYWdlU2V0UGFnZVBvbGljeUNsaWVudCh0b0FQ
SSh3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykp
KSwgJnBvbGljeUNsaWVudCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFBvbGljeUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwZDhkNjJjY2I4NDU1
MWUzNzg2NWIyMDc5ZjY4MWZjNDk2NDc1OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lDbGllbnQuaApAQCAtMCwwICsxLDI3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0
UG9saWN5Q2xpZW50X2gKKyNkZWZpbmUgV2ViS2l0UG9saWN5Q2xpZW50X2gKKworI2luY2x1ZGUg
IldlYktpdFdlYlZpZXcuaCIKKwordm9pZCBhdHRhY2hQb2xpY3lDbGllbnRUb1BhZ2UoV2ViS2l0
V2ViVmlldyopOworCisjZW5kaWYgLy8gV2ViS2l0UG9saWN5Q2xpZW50X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9u
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45NDU0NjdiNTZjOTk2MTM4NjdjZjk0ODBmNDJhYmQzZWIxNjA3Njcz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UG9saWN5RGVjaXNpb24uY3BwCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRQb2xpY3lEZWNpc2lvbi5oIgorCisjaW5jbHVkZSAiV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorCisKKy8qKgorICogU0VDVElPTjog
V2ViS2l0UG9saWN5RGVjaXNpb24KKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQSBwZW5kaW5nIHBv
bGljeSBkZWNpc2lvbgorICogQFRpdGxlOiBXZWJLaXRQb2xpY3lEZWNpc2lvbgorICogQFNlZV9h
bHNvOiAjV2ViS2l0V2ViVmlldworICoKKyAqIE9mdGVuIFdlYktpdCBhbGxvd3MgdGhlIGNsaWVu
dCB0byBkZWNpZGUgdGhlIHBvbGljeSBmb3IgY2VydGFpbgorICogb3BlcmF0aW9ucy4gRm9yIGlu
c3RhbmNlLCBhIGNsaWVudCBtYXkgd2FudCB0byBvcGVuIGEgbGluayBpbiBhIG5ldworICogdGFi
LCBibG9jayBhIG5hdmlnYXRpb24gZW50aXJlbHksIHF1ZXJ5IHRoZSB1c2VyIG9yIHRyaWdnZXIg
YSBkb3dubG9hZAorICogaW5zdGVhZCBvZiBhIG5hdmlnYXRpb24uIEluIHRoZXNlIGNhc2VzIFdl
YktpdCB3aWxsIGZpcmUgdGhlCisgKiAjV2ViS2l0V2ViVmlldzo6ZGVjaWRlLXBvbGljeSBzaWdu
YWwgd2l0aCBhICNXZWJLaXRQb2xpY3lEZWNpc2lvbgorICogb2JqZWN0LiBJZiB0aGUgc2lnbmFs
IGhhbmRsZXIgZG9lcyBub3RoaW5nLCBXZWJLaXQgd2lsbCBhY3QgYXMgaWYKKyAqIHdlYmtpdF9w
b2xpY3lfZGVjaXNpb25fdXNlKCkgd2FzIGNhbGxlZCBhcyBzb29uIGFzIHNpZ25hbCBoYW5kbGlu
ZworICogY29tcGxldGVzLiBUbyBtYWtlIGEgcG9saWN5IGRlY2lzaW9uIGFzeW5jaHJvbm91c2x5
LCBzaW1wbHkgaW5jcmVtZW50CisgKiB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSAjV2ViS2l0
UG9saWN5RGVjaXNpb24gb2JqZWN0LgorICovCitHX0RFRklORV9UWVBFKFdlYktpdFBvbGljeURl
Y2lzaW9uLCB3ZWJraXRfcG9saWN5X2RlY2lzaW9uLCBHX1RZUEVfT0JKRUNUKQorCitzdHJ1Y3Qg
X1dlYktpdFBvbGljeURlY2lzaW9uUHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tGcmFtZVBv
bGljeUxpc3RlbmVyUmVmPiBsaXN0ZW5lcjsKKyAgICBib29sIG1hZGVQb2xpY3lEZWNpc2lvbjsK
K307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faW5pdChXZWJLaXRQb2xp
Y3lEZWNpc2lvbiogZGVjaXNpb24pCit7CisgICAgZGVjaXNpb24tPnByaXYgPSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUoZGVjaXNpb24sIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTiwg
V2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRlKTsKKyAgICBuZXcgKGRlY2lzaW9uLT5wcml2KSBX
ZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUoKTsKKyAgICBkZWNpc2lvbi0+cHJpdi0+bWFkZVBv
bGljeURlY2lzaW9uID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFBvbGljeURlY2lz
aW9uRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgICBXZWJLaXRQb2xpY3lEZWNpc2lv
blByaXZhdGUqIHByaXYgPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OKG9iamVjdCktPnByaXY7CisK
KyAgICAvLyBUaGlzIGlzIHRoZSBkZWZhdWx0IGNob2ljZSBmb3IgYWxsIHBvbGljeSBkZWNpc2lv
bnMgaW4gV2ViUGFnZVByb3h5LmNwcC4KKyAgICBpZiAoIXByaXYtPm1hZGVQb2xpY3lEZWNpc2lv
bikKKyAgICAgICAgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlKHByaXYtPmxpc3RlbmVyLmdldCgp
KTsKKworICAgIHByaXYtPn5XZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUoKTsKKyAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfcG9saWN5X2RlY2lzaW9uX3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7Cit9CisKK3ZvaWQgd2Via2l0UG9saWN5RGVjaXNpb25TZXRMaXN0ZW5lcihXZWJL
aXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0
ZW5lcikKK3sKKyAgICAgZGVjaXNpb24tPnByaXYtPmxpc3RlbmVyID0gbGlzdGVuZXI7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fY2xhc3NfaW5pdChXZWJLaXRQb2xp
Y3lEZWNpc2lvbkNsYXNzKiBkZWNpc2lvbkNsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhkZWNpc2lvbkNsYXNzKTsKKyAgICBvYmplY3RDbGFz
cy0+ZmluYWxpemUgPSB3ZWJraXRQb2xpY3lEZWNpc2lvbkZpbmFsaXplOworICAgIGdfdHlwZV9j
bGFzc19hZGRfcHJpdmF0ZShkZWNpc2lvbkNsYXNzLCBzaXplb2YoV2ViS2l0UG9saWN5RGVjaXNp
b25Qcml2YXRlKSk7Cit9CisKKy8qKgorICogd2Via2l0X3BvbGljeV9kZWNpc2lvbl91c2U6Cisg
KiBAZGVjaXNpb246IGEgI1dlYktpdFBvbGljeURlY2lzaW9uCisgKgorICogQWNjZXB0IHRoZSBh
Y3Rpb24gd2hpY2ggdHJpZ2dlcmQgdGhpcyBkZWNpc2lvbi4KKyAqLwordm9pZCB3ZWJraXRfcG9s
aWN5X2RlY2lzaW9uX3VzZShXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfUE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9uKSk7Cisg
ICAgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlKGRlY2lzaW9uLT5wcml2LT5saXN0ZW5lci5nZXQo
KSk7CisgICAgZGVjaXNpb24tPnByaXYtPm1hZGVQb2xpY3lEZWNpc2lvbiA9IHRydWU7Cit9CisK
Ky8qKgorICogd2Via2l0X3BvbGljeV9kZWNpc2lvbl9pZ25vcmU6CisgKiBAZGVjaXNpb246IGEg
I1dlYktpdFBvbGljeURlY2lzaW9uCisgKgorICogSWdub3JlIHRoZSBhY3Rpb24gd2hpY2ggdHJp
Z2dlcmQgdGhpcyBkZWNpc2lvbi4gRm9yIGluc3RhbmNlLCBmb3IgYQorICogI1dlYktpdFJlc3Bv
bnNlUG9saWN5RGVjaXNpb24sIHRoaXMgd291bGQgY2FuY2VsIHRoZSByZXF1ZXN0LgorICovCit2
b2lkIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlKFdlYktpdFBvbGljeURlY2lzaW9uKiBk
ZWNpc2lvbikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QT0xJQ1lfREVDSVNJ
T04oZGVjaXNpb24pKTsKKyAgICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJJZ25vcmUoZGVjaXNpb24t
PnByaXYtPmxpc3RlbmVyLmdldCgpKTsKKyAgICBkZWNpc2lvbi0+cHJpdi0+bWFkZVBvbGljeURl
Y2lzaW9uID0gdHJ1ZTsKK30KKworLyoqCisgKiB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25s
b2FkOgorICogQGRlY2lzaW9uOiBhICNXZWJLaXRQb2xpY3lEZWNpc2lvbgorICoKKyAqIFNwYXdu
IGEgZG93bmxvYWQgZnJvbSB0aGlzIGRlY2lzaW9uLgorICovCit2b2lkIHdlYmtpdF9wb2xpY3lf
ZGVjaXNpb25fZG93bmxvYWQoV2ViS2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BPTElDWV9ERUNJU0lPTihkZWNpc2lvbikpOwor
ICAgIFdLRnJhbWVQb2xpY3lMaXN0ZW5lckRvd25sb2FkKGRlY2lzaW9uLT5wcml2LT5saXN0ZW5l
ci5nZXQoKSk7CisgICAgZGVjaXNpb24tPnByaXYtPm1hZGVQb2xpY3lEZWNpc2lvbiA9IHRydWU7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
b2xpY3lEZWNpc2lvbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
UG9saWN5RGVjaXNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lY2NhNWY5YzM1NGViZGE1MGU5MmQ5ZGRkMDg2
YjZjOTllNzYwM2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24uaApAQCAtMCwwICsxLDY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8
d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXRQb2xpY3lEZWNpc2lvbl9oCisjZGVmaW5lIFdlYktpdFBvbGljeURlY2lz
aW9uX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9QT0xJ
Q1lfREVDSVNJT04gICAgICAgICAgICAod2Via2l0X3BvbGljeV9kZWNpc2lvbl9nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTiwg
V2ViS2l0UG9saWN5RGVjaXNpb24pKQorI2RlZmluZSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9U
WVBFX1BPTElDWV9ERUNJU0lPTiwgV2ViS2l0UG9saWN5RGVjaXNpb25DbGFzcykpCisjZGVmaW5l
IFdFQktJVF9JU19QT0xJQ1lfREVDSVNJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfUE9MSUNZX0RFQ0lTSU9OKSkKKyNkZWZpbmUg
V0VCS0lUX0lTX1BPTElDWV9ERUNJU0lPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJT04pKQorI2RlZmluZSBX
RUJLSVRfUE9MSUNZX0RFQ0lTSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTiwgV2ViS2l0UG9saWN5
RGVjaXNpb25DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRQb2xpY3lEZWNpc2lvbiAg
ICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb247Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0UG9saWN5
RGVjaXNpb25DbGFzcyAgIFdlYktpdFBvbGljeURlY2lzaW9uQ2xhc3M7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRlIFdlYktpdFBvbGljeURlY2lzaW9uUHJpdmF0
ZTsKKworc3RydWN0IF9XZWJLaXRQb2xpY3lEZWNpc2lvbiB7CisgICAgR09iamVjdCBwYXJlbnQ7
CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUg
KnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFBvbGljeURlY2lzaW9uQ2xhc3MgeworICAgIEdP
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRf
cG9saWN5X2RlY2lzaW9uX2dldF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfcG9saWN5X2RlY2lzaW9uX3VzZSAgICAgIChXZWJLaXRQb2xpY3lEZWNpc2lvbiAqZGVjaXNp
b24pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlICAg
KFdlYktpdFBvbGljeURlY2lzaW9uICpkZWNpc2lvbik7CisKK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZCAoV2ViS2l0UG9saWN5RGVjaXNpb24gKmRlY2lz
aW9uKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uUHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjYyNTgwYzgzZTlkODM5NTZiNTcwNGJjNWMwZGZhMGYxOTVhMmZlNzIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
b2xpY3lEZWNpc2lvblByaXZhdGUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0UG9saWN5RGVjaXNpb25Qcml2YXRlX2gKKworI2luY2x1ZGUgIldl
YktpdFBvbGljeURlY2lzaW9uLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CisKK3Zv
aWQgd2Via2l0UG9saWN5RGVjaXNpb25TZXRMaXN0ZW5lcihXZWJLaXRQb2xpY3lEZWNpc2lvbios
IFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZik7CisKKyNlbmRpZiAvLyBXZWJLaXRSZXNwb25zZVBv
bGljeURlY2lzaW9uUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcml2YXRlLmgKaW5kZXggM2RiNjFhNzQ5ZDNkMzVkNWI1ZDA0ODI3ODkzNTYz
OThhODdjMWFjOS4uMTMyODBkNjAwYTY4ZjE3MDk2NDdmN2M0ODI3MzQzZDNiZWVkMTE3NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApA
QCAtMzMsMTUgKzMzLDExIEBACiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAKLUdfQkVHSU5fREVDTFMKLQogI2RlZmluZSBXRUJLSVRfUEFSQU1fUkVBREFC
TEUgKHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURBQkxFfEdfUEFSQU1fU1RB
VElDX05BTUV8R19QQVJBTV9TVEFUSUNfTklDS3xHX1BBUkFNX1NUQVRJQ19CTFVSQikpCiAjZGVm
aW5lIFdFQktJVF9QQVJBTV9XUklUQUJMRSAoc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFS
QU1fV1JJVEFCTEV8R19QQVJBTV9TVEFUSUNfTkFNRXxHX1BBUkFNX1NUQVRJQ19OSUNLfEdfUEFS
QU1fU1RBVElDX0JMVVJCKSkKICNkZWZpbmUgV0VCS0lUX1BBUkFNX1JFQURXUklURSAoc3RhdGlj
X2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFfEdfUEFSQU1fU1RBVElDX05BTUV8
R19QQVJBTV9TVEFUSUNfTklDS3xHX1BBUkFNX1NUQVRJQ19CTFVSQikpCiAKICNkZWZpbmUgQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTSh3ZWJraXROYW1lLCB3ZWJjb3JlTmFtZSkgXAotICAg
ICAgICBDT01QSUxFX0FTU0VSVChpbnQod2Via2l0TmFtZSkgPT0gaW50KFdlYkNvcmU6OndlYmNv
cmVOYW1lKSwgbWlzbWF0Y2hpbmdFbnVtcykKLQotR19FTkRfREVDTFMKKyAgICAgICAgQ09NUElM
RV9BU1NFUlQoaW50KHdlYmtpdE5hbWUpID09IGludCh3ZWJjb3JlTmFtZSksIG1pc21hdGNoaW5n
RW51bXMpCiAKICNlbmRpZiAvLyBXZWJLaXRQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggOWRjNDcyYTFmOGY3
YWQwOTM0OTIzNzNjZDZhZDc4ZThhNWQ5MDA2NS4uZDc5MTg0MWQ5MTNmZjBiYzBkYmUwMDkwZGY4
MWQ4ZWMwOTRjMTBhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJXZWJLaXRF
cnJvci5oIgogI2luY2x1ZGUgIldlYktpdExvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYktp
dE1hcnNoYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRQb2xpY3lDbGllbnQuaCIKICNpbmNsdWRlICJX
ZWJLaXRTZXR0aW5nc1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRVSUNsaWVudC5oIgogI2lu
Y2x1ZGUgIldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCkBAIC01NSw2ICs1Niw4IEBAIGVudW0g
ewogICAgIFNDUklQVF9DT05GSVJNLAogICAgIFNDUklQVF9QUk9NUFQsCiAKKyAgICBERUNJREVf
UE9MSUNZLAorCiAgICAgTEFTVF9TSUdOQUwKIH07CiAKQEAgLTE0NCw2ICsxNDcsMTIgQEAgc3Rh
dGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdTY3JpcHRQcm9tcHQoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgY29uc3QgY2hhciogbWUKICAgICByZXR1cm4gVFJVRTsKIH0KIAorc3RhdGljIGdib29s
ZWFuIHdlYmtpdFdlYlZpZXdEZWNpZGVQb2xpY3koV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGlj
eURlY2lzaW9uKiBkZWNpc2lvbiwgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlKQoreworICAgIHdl
YmtpdF9wb2xpY3lfZGVjaXNpb25fdXNlKGRlY2lzaW9uKTsKKyAgICByZXR1cm4gVFJVRTsKK30K
Kwogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkK
IHsKICAgICBpZiAoR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcykt
PmNvbnN0cnVjdGVkKQpAQCAtMTU3LDYgKzE2Niw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAKICAgICBhdHRhY2hMb2FkZXJDbGllbnRU
b1ZpZXcod2ViVmlldyk7CiAgICAgYXR0YWNoVUlDbGllbnRUb1ZpZXcod2ViVmlldyk7CisgICAg
YXR0YWNoUG9saWN5Q2xpZW50VG9QYWdlKHdlYlZpZXcpOwogCiAgICAgV2ViUGFnZVByb3h5KiBw
YWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKHdlYlZpZXdCYXNlKTsKICAgICBwcml2LT5i
YWNrRm9yd2FyZExpc3QgPSBhZG9wdEdSZWYod2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlKFdL
UGFnZUdldEJhY2tGb3J3YXJkTGlzdCh0b0FQSShwYWdlKSkpKTsKQEAgLTI0Myw2ICsyNTMsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xh
c3MqIHdlYlZpZXdDbGFzcykKICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9hbGVydCA9IHdlYmtp
dFdlYlZpZXdTY3JpcHRBbGVydDsKICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9jb25maXJtID0g
d2Via2l0V2ViVmlld1NjcmlwdENvbmZpcm07CiAgICAgd2ViVmlld0NsYXNzLT5zY3JpcHRfcHJv
bXB0ID0gd2Via2l0V2ViVmlld1NjcmlwdFByb21wdDsKKyAgICB3ZWJWaWV3Q2xhc3MtPmRlY2lk
ZV9wb2xpY3kgPSB3ZWJraXRXZWJWaWV3RGVjaWRlUG9saWN5OwogCiAgICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKHdlYlZpZXdDbGFzcywgc2l6ZW9mKFdlYktpdFdlYlZpZXdQcml2YXRlKSk7
CiAKQEAgLTU0MSw2ICs1NTIsNjYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNz
X2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgR19U
WVBFX1NUUklORywgR19UWVBFX1NUUklORywgR19UWVBFX1BPSU5URVIpOwogCisgICAgLyoqCisg
ICAgICogV2ViS2l0UG9saWN5Q2xpZW50OjpkZWNpZGUtcG9saWN5CisgICAgICogQHdlYl92aWV3
OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAg
ICogQGRlY2lzaW9uOiB0aGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbgorICAgICAq
IEBkZWNpc2lvbl90eXBlOiBhICNXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgZGVub3RpbmcgdGhl
IHR5cGUgb2YgQGRlY2lzaW9uCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVk
IHdoZW4gV2ViS2l0IGlzIHJlcXVlc3RpbmcgdGhlIGNsaWVudCB0byBkZWNpZGUgYSBwb2xpY3kK
KyAgICAgKiBkZWNpc2lvbiwgc3VjaCBhcyB3aGV0aGVyIHRvIG5hdmlnYXRlIHRvIGEgcGFnZSwg
b3BlbiBhIG5ldyB3aW5kb3cgb3Igd2hldGhlciBvcgorICAgICAqIG5vdCB0byBkb3dubG9hZCBh
IHJlc291cmNlLiBUaGUgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiBwYXNzZWQgaW4g
dGhlCisgICAgICogQGRlY2lzaW9uIGFyZ3VtZW50IGlzIGEgZ2VuZXJpYyB0eXBlLCBidXQgc2hv
dWxkIGJlIGNhc3RlZCB0byBhIG1vcmUKKyAgICAgKiBzcGVjaWZpYyB0eXBlIHdoZW4gbWFraW5n
IHRoZSBkZWNpc2lvbi4gRm9yIGV4YW1wbGU6CisgICAgICoKKyAgICAgKiA8aW5mb3JtYWxleGFt
cGxlPjxwcm9ncmFtbGlzdGluZz4KKyAgICAgKiBzdGF0aWMgZ2Jvb2xlYW4KKyAgICAgKiBkZWNp
ZGVfcG9saWN5X2NiIChXZWJLaXRXZWJWaWV3ICp3ZWJfdmlldywKKyAgICAgKiAgICAgICAgICAg
ICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lvbiAqZGVjaXNpb24sCisgICAgICogICAgICAgICAg
ICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlIHR5cGUpCisgICAgICogeworICAgICAq
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgKiAgICAgY2FzZSBXRUJLSVRfUE9MSUNZX0RFQ0lT
SU9OX1RZUEVfTkFWSUdBVElPTl9BQ1RJT046CisgICAgICogICAgICAgICBXZWJLaXROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb24gKm5hdmlnYXRpb25fZGVjaXNpb24gPSBXRUJLSVRfTkFWSUdBVElP
Tl9QT0xJQ1lfREVDSVNJT04gKGRlY2lzaW9uKTsKKyAgICAgKiAgICAgICAgIC88IS0tIC0tPiog
TWFrZSBhIHBvbGljeSBkZWNpc2lvbiBoZXJlLiAqPCEtLSAtLT4vCisgICAgICogICAgICAgICBi
cmVhazsKKyAgICAgKiAgICAgY2FzZSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkVXX1dJ
TkRPV19BQ1RJT046CisgICAgICogICAgICAgICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNp
b24gKm5hdmlnYXRpb25fZGVjaXNpb24gPSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJ
T04gKGRlY2lzaW9uKTsKKyAgICAgKiAgICAgICAgIC88IS0tIC0tPiogTWFrZSBhIHBvbGljeSBk
ZWNpc2lvbiBoZXJlLiAqPCEtLSAtLT4vCisgICAgICogICAgICAgICBicmVhazsKKyAgICAgKiAg
ICAgY2FzZSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0U6CisgICAgICogICAg
ICAgICBXZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uICpyZXNwb25zZSA9IFdFQktJVF9SRVNQ
T05TRV9QT0xJQ1lfREVDSVNJT04gKGRlY2lzaW9uKTsKKyAgICAgKiAgICAgICAgIC88IS0tIC0t
PiogTWFrZSBhIHBvbGljeSBkZWNpc2lvbiBoZXJlLiAqPCEtLSAtLT4vCisgICAgICogICAgICAg
ICBicmVhazsKKyAgICAgKiAgICAgZGVmYXVsdDoKKyAgICAgKiAgICAgICAgIC88IS0tIC0tPiog
TWFraW5nIG5vIGRlY2lzaW9uIHJlc3VsdHMgaW4gd2Via2l0X3BvbGljeV9kZWNpc2lvbl91c2Uo
KS4gKjwhLS0gLS0+LworICAgICAqICAgICAgICAgYnJlYWs7CisgICAgICogICAgIH0KKyAgICAg
KiAgICAgcmV0dXJuIFRSVUU7CisgICAgICogfQorICAgICAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9p
bmZvcm1hbGV4YW1wbGU+CisgICAgICoKKyAgICAgKiBJdCBpcyBwb3NzaWJsZSB0byBtYWtlIHBv
bGljeSBkZWNpc2lvbiBhc3luY2hyb25vdXNseSwgYnkgc2ltcGx5IGNhbGxpbmcgZ19vYmplY3Rf
cmVmKCkKKyAgICAgKiBvbiB0aGUgQGRlY2lzaW9uIGFyZ3VtZW50IGFuZCByZXR1cm5pbmcgJVRS
VUUgdG8gYmxvY2sgdGhlIGRlZmF1bHQgc2lnbmFsIGhhbmRsZXIuCisgICAgICogSWYgdGhlIGxh
c3QgcmVmZXJlbmNlIGlzIHJlbW92ZWQgb24gYSAjV2ViS2l0UG9saWN5RGVjaXNpb24gYW5kIG5v
IGRlY2lzaW9uIGhhcyBiZWVuCisgICAgICogbWFkZSBleHBsaWNpdGx5LCB3ZWJraXRfcG9saWN5
X2RlY2lzaW9uX3VzZSgpIHdpbGwgYmUgdGhlIGRlZmF1bHQgcG9saWN5IGRlY2lzaW9uLiBUaGUK
KyAgICAgKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGVyIHdpbGwgc2ltcGx5IGNhbGwgd2Via2l0X3Bv
bGljeV9kZWNpc2lvbl91c2UoKS4gT25seSB0aGUgZmlyc3QKKyAgICAgKiBwb2xpY3kgZGVjaXNp
b24gY2hvc2VuIGZvciBhIGdpdmVuICNXZWJLaXRQb2xpY3lEZWNpc2lvbiB3aWxsIGhhdmUgYW55
IGFmZmVjdC4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFu
ZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0Ug
dG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICovCisgICAgc2ln
bmFsc1tERUNJREVfUE9MSUNZXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZGVjaWRlLXBvbGlj
eSIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3Mp
LAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAg
ICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBkZWNpZGVfcG9saWN5
KSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxl
ZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRhICovLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0
X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNUX0VOVU0sCisgICAgICAgICAgICAgICAgICAgICBHX1RZ
UEVfQk9PTEVBTiwgMiwgLyogbnVtYmVyIG9mIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTiwKKyAgICAgICAgICAgICAgICAgICAg
IFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTl9UWVBFKTsKIH0KIAogdm9pZCB3ZWJraXRXZWJW
aWV3TG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxv
YWRFdmVudCkKQEAgLTY0Niw2ICs3MTcsMTIgQEAgV0tTdHJpbmdSZWYgd2Via2l0V2ViVmlld1J1
bkphdmFTY3JpcHRQcm9tcHQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgQ1N0cmkKICAg
ICByZXR1cm4gdGV4dCA/IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRleHQuZ2V0KCkp
IDogMDsKIH0KIAordm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBvbGljeURlY2lzaW9uKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSB0eXBlLCBXZWJLaXRQb2xp
Y3lEZWNpc2lvbiogZGVjaXNpb24pCit7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAg
Z19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0RFQ0lERV9QT0xJQ1ldLCAwLCBkZWNpc2lv
biwgdHlwZSwgJnJldHVyblZhbHVlKTsKK30KKwogLyoqCiAgKiB3ZWJraXRfd2ViX3ZpZXdfbmV3
OgogICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuaAppbmRleCBhMjVjNDM4ZGQ5MDE5MzU0MGIwNTVmZjZjNjc0ZmE3YWQzNjdlZjgxLi42OTdm
Y2RjODBlNjA5M2JkYmZkNGIxMWMzZWRhNTI5N2M2NDU1Y2IwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0zNSw5ICszNSw0NCBA
QAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdpbmRvd1By
b3BlcnRpZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFBvbGljeURlY2lzaW9uLmg+CiAK
IEdfQkVHSU5fREVDTFMKIAorLyoqCisgKiBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGU6CisgKiBA
V0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05BVklHQVRJT05fQUNUSU9OOiBUaGlzIHR5cGUg
b2YgcG9saWN5IGRlY2lzaW9uCisgKiAgIGlzIHJlcXVlc3RlZCB3aGVuIFdlYktpdCBpcyBhYm91
dCB0byBuYXZpZ2F0ZSB0byBhIG5ldyBwYWdlIGluIGVpdGhlciB0aGUKKyAqICAgbWFpbiBmcmFt
ZSBvciBhIHN1YmZyYW1lLiBBY2NlcHRhYmxlIHBvbGljeSBkZWNpc2lvbnMgYXJlIGVpdGhlcgor
ICogICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX3VzZSgpIG9yIHdlYmtpdF9wb2xpY3lfZGVjaXNp
b25faWdub3JlKCkuIFRoaXMKKyAqICAgdHlwZSBvZiBwb2xpY3kgZGVjaXNpb24gaXMgYWx3YXlz
IGEgI1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi4KKyAqIEBXRUJLSVRfUE9MSUNZX0RF
Q0lTSU9OX1RZUEVfTkVXX1dJTkRPV19BQ1RJT046IFRoaXMgdHlwZSBvZiBwb2xpY3kgZGVjaXNp
b24KKyAqICAgaXMgcmVxdWVzdGVkIHdoZW4gV2ViS2l0IGlzIGFib3V0IHRvIGNyZWF0ZSBhIG5l
dyB3aW5kb3cuIEFjY2VwdGFibGUgcG9saWN5CisgKiAgIGRlY2lzaW9ucyBhcmUgZWl0aGVyIHdl
YmtpdF9wb2xpY3lfZGVjaXNpb25fdXNlKCkgb3IKKyAqICAgd2Via2l0X3BvbGljeV9kZWNpc2lv
bl9pZ25vcmUoKS4gVGhpcyB0eXBlIG9mIHBvbGljeSBkZWNpc2lvbiBpcyBhbHdheXMKKyAqICAg
YSAjV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLiBUaGVzZSBkZWNpc2lvbnMgYXJlIHVz
ZWZ1bCBmb3IgaW1wbGVtZW50aW5nCisgKiAgIHNwZWNpYWwgYWN0aW9ucyBmb3IgbmV3IHdpbmRv
d3MsIHN1Y2ggYXMgZm9yY2luZyB0aGUgbmV3IHdpbmRvdyB0byBvcGVuCisgKiAgIGluIGEgdGFi
IHdoZW4gYSBrZXlib2FyZCBtb2RpZmllciBpcyBhY3RpdmUgb3IgaGFuZGxpbmcgYSBzcGVjaWFs
CisgKiAgIHRhcmdldCBhdHRyaWJ1dGUgb24gJmx0O2EmZ3Q7IGVsZW1lbnRzLgorICogQFdFQktJ
VF9QT0xJQ1lfREVDSVNJT05fVFlQRV9SRVNQT05TRTogVGhpcyB0eXBlIG9mIGRlY2lzaW9uIGlz
IHVzZWQgd2hlbiBXZWJLaXQgaGFzCisgKiAgIHJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGEgbmV0
d29yayByZXNvdXJjZSBhbmQgaXMgYWJvdXQgdG8gc3RhcnQgdGhlIGxvYWQuCisgKiAgIE5vdGUg
dGhhdCB0aGVzZSByZXNvdXJjZXMgaW5jbHVkZSBhbGwgc3VicmVzb3VyY2VzIG9mIGEgcGFnZSBz
dWNoIGFzIGltYWdlcworICogICBhbmQgc3R5bGVzaGVldHMgYXMgd2VsbCBhcyBtYWluIGRvY3Vt
ZW50cy4gQXBwcm9wcmlhdGUgcG9saWN5IHJlc3BvbnNlcyB0bworICogICB0aGlzIGRlY2lzaW9u
IGFyZSB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX3VzZSgpLCB3ZWJraXRfcG9saWN5X2RlY2lzaW9u
X2lnbm9yZSgpLAorICogICBvciB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKCkuIFRo
aXMgdHlwZSBvZiBwb2xpY3kgZGVjaXNpb24gaXMgYWx3YXlzCisgKiAgIGEgI1dlYktpdFJlc3Bv
bnNlUG9saWN5RGVjaXNpb24uIFRoaXMgZGVjaXNpb24gaXMgdXNlZnVsIGZvciBmb3JjaW5nCisg
KiAgIHNvbWUgdHlwZXMgb2YgcmVzb3VyY2VzIHRvIGJlIGRvd25sb2FkZWQgcmF0aGVyIHRoYW4g
cmVuZGVyZWQgaW4gdGhlIFdlYlZpZXcKKyAqICAgb3IgdG8gYmxvY2sgdGhlIHRyYW5zZmVyIG9m
IHJlc291cmNlcyBlbnRpcmVseS4KKyAqCisgKiBFbnVtIHZhbHVlcyB1c2VkIGZvciBkZXRlcm1p
bmluZyB0aGUgdHlwZSBvZiBhIHBvbGljeSBkZWNpc2lvbiBkdXJpbmcKKyAqIFdlYktpdFdlYlZp
ZXc6OmRlY2lkZS1wb2xpY3kuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX1BPTElD
WV9ERUNJU0lPTl9UWVBFX05BVklHQVRJT05fQUNUSU9OLAorICAgIFdFQktJVF9QT0xJQ1lfREVD
SVNJT05fVFlQRV9ORVdfV0lORE9XX0FDVElPTiwKKyAgICBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9O
X1RZUEVfUkVTUE9OU0UsCit9IFdlYktpdFBvbGljeURlY2lzaW9uVHlwZTsKKwogI2RlZmluZSBX
RUJLSVRfVFlQRV9XRUJfVklFVyAgICAgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3R5cGUo
KSkKICNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3
KSkKICNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3
Q2xhc3MpKQpAQCAtODEsMjYgKzExNiwyOSBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgewogc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgIFdlYktpdFdlYlZpZXdCYXNlQ2xhc3MgcGFy
ZW50OwogCi0gICAgdm9pZCAgICAgICAoKiBsb2FkX2NoYW5nZWQpICAgKFdlYktpdFdlYlZpZXcg
ICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TG9h
ZEV2ZW50IGxvYWRfZXZlbnQpOwotICAgIGdib29sZWFuICAgKCogbG9hZF9mYWlsZWQpICAgIChX
ZWJLaXRXZWJWaWV3ICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdExvYWRFdmVudCBsb2FkX2V2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAgICAqZmFpbGluZ191cmksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICplcnJvcik7Ci0KLSAgICBHdGtXaWRn
ZXQgKigqIGNyZWF0ZSkgICAgICAgICAoV2ViS2l0V2ViVmlldyAgKndlYl92aWV3KTsKLSAgICB2
b2lkICAgICAgICgqIHJlYWR5X3RvX3Nob3cpICAoV2ViS2l0V2ViVmlldyAgKndlYl92aWV3KTsK
LSAgICB2b2lkICAgICAgICgqIGNsb3NlKSAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgKndlYl92
aWV3KTsKLQotICAgIGdib29sZWFuICAgKCogc2NyaXB0X2FsZXJ0KSAgIChXZWJLaXRXZWJWaWV3
ICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdj
aGFyICAgICptZXNzYWdlKTsKLSAgICBnYm9vbGVhbiAgICgqIHNjcmlwdF9jb25maXJtKSAoV2Vi
S2l0V2ViVmlldyAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciAgICAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2Jvb2xlYW4gICAgICAgKmNvbmZpcm1lZCk7Ci0gICAgZ2Jvb2xlYW4gICAoKiBzY3Jp
cHRfcHJvbXB0KSAgKFdlYktpdFdlYlZpZXcgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgKm1lc3NhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICpkZWZhdWx0X3RleHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICAgICAgICAgKip0ZXh0KTsKKyAg
ICB2b2lkICAgICAgICgqIGxvYWRfY2hhbmdlZCkgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExv
YWRFdmVudCAgICAgICAgICAgIGxvYWRfZXZlbnQpOworICAgIGdib29sZWFuICAgKCogbG9hZF9m
YWlsZWQpICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TG9hZEV2ZW50ICAgICAgICAgICAgbG9h
ZF9ldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg
ICAgICAgICAgICAgICAqZmFpbGluZ191cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgKmVycm9yKTsKKworICAgIEd0a1dpZGdl
dCAqKCogY3JlYXRlKSAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmll
dyk7CisgICAgdm9pZCAgICAgICAoKiByZWFkeV90b19zaG93KSAgKFdlYktpdFdlYlZpZXcgICAg
ICAgICAgICAgKndlYl92aWV3KTsKKyAgICB2b2lkICAgICAgICgqIGNsb3NlKSAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOworCisgICAgZ2Jvb2xlYW4gICAo
KiBzY3JpcHRfYWxlcnQpICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAg
ICAgICptZXNzYWdlKTsKKyAgICBnYm9vbGVhbiAgICgqIHNjcmlwdF9jb25maXJtKSAoV2ViS2l0
V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKm1lc3NhZ2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgKmNvbmZp
cm1lZCk7CisgICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfcHJvbXB0KSAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpkZWZhdWx0X3RleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICAgICAgICAgICAgICAg
ICAgICAqKnRleHQpOworICAgIGdib29sZWFuICAgKCogZGVjaWRlX3BvbGljeSkgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb24gICAgICAqZGVjaXNpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSAgdHlwZSk7
CiAKICAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCiAgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCA1YzgxNjFhZmQ0OThk
ZjcyMjg2NDExYmYwODk2MGJhNDExN2Q3ZDA4Li42NjM4NmQwMjhlYTczMzVhNmJlNjIyZGVkMDhj
NmIxYmM5MjA1MWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTQyLDUgKzQyLDYgQEAgdm9pZCB3ZWJr
aXRXZWJWaWV3Q2xvc2VQYWdlKFdlYktpdFdlYlZpZXcqKTsKIHZvaWQgd2Via2l0V2ViVmlld1J1
bkphdmFTY3JpcHRBbGVydChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7
CiBib29sIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybShXZWJLaXRXZWJWaWV3Kiwg
Y29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7CiBXS1N0cmluZ1JlZiB3ZWJraXRXZWJWaWV3UnVuSmF2
YVNjcmlwdFByb21wdChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSwgY29u
c3QgQ1N0cmluZyYgZGVmYXVsdFRleHQpOwordm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBvbGljeURl
Y2lzaW9uKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUsIFdlYktpdFBv
bGljeURlY2lzaW9uKik7CiAKICNlbmRpZiAvLyBXZWJLaXRXZWJWaWV3UHJpdmF0ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
ZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLWRvY3Muc2dtbAppbmRleCA2YzBlYzQ2MmExNjczMzM2OTI5OWZiNjgzYjFhMzllMGQ1ZTcz
MTAwLi5jNmY5NDNhYjJhNjg4MDI5ZDk1NmViYjY4NTBmZWNiMWYyNGMyMGExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5z
Z21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1kb2NzLnNnbWwKQEAgLTIxLDYgKzIxLDggQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwv
V2ViS2l0VVJJUmVzcG9uc2UueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktp
dFdpbmRvd1Byb3BlcnRpZXMueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktp
dERvd25sb2FkLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRQb2xpY3lE
ZWNpc2lvbi54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRF
cnJvci54bWwiLz4KICAgPC9jaGFwdGVyPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRl
eCA0Nzg5NzliYjhkOWI1ZDcwMTlkMTE4MWU4Yzc2NjJlNDg5OWEzYjdkLi5lZjQ0YjJiZWQ2N2M2
NDFjNzBmNWE0OGVkODRhNzkyODAwZTBiNWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQK
QEAgLTQ4LDYgKzQ4LDcgQEAgd2Via2l0X3dlYl9jb250ZXh0X2dldF90eXBlCiA8VElUTEU+V2Vi
S2l0V2ViVmlldzwvVElUTEU+CiBXZWJLaXRXZWJWaWV3CiBXZWJLaXRMb2FkRXZlbnQKK1dlYktp
dFBvbGljeURlY2lzaW9uVHlwZQogd2Via2l0X3dlYl92aWV3X25ldwogd2Via2l0X3dlYl92aWV3
X25ld193aXRoX2NvbnRleHQKIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dApAQCAtMzEyLDYg
KzMxMyw1MSBAQCB3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUKIDwvU0VDVElPTj4KIAogPFNFQ1RJ
T04+Cis8RklMRT5XZWJLaXRQb2xpY3lEZWNpc2lvbjwvRklMRT4KK1dlYktpdFBvbGljeURlY2lz
aW9uCit3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkCit3ZWJraXRfcG9saWN5X2RlY2lz
aW9uX2lnbm9yZQord2Via2l0X3BvbGljeV9kZWNpc2lvbl91c2UKKworPFNVQlNFQ1RJT04gU3Rh
bmRhcmQ+CitXZWJLaXRQb2xpY3lEZWNpc2lvbkNsYXNzCitXRUJLSVRfVFlQRV9QT0xJQ1lfREVD
SVNJT04KK1dFQktJVF9QT0xJQ1lfREVDSVNJT04KK1dFQktJVF9JU19QT0xJQ1lfREVDSVNJT04K
K1dFQktJVF9QT0xJQ1lfREVDSVNJT05fQ0xBU1MKK1dFQktJVF9JU19QT0xJQ1lfREVDSVNJT05f
Q0xBU1MKK1dFQktJVF9QT0xJQ1lfREVDSVNJT05fR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFBy
aXZhdGU+CitXZWJLaXRQb2xpY3lEZWNpc2lvblByaXZhdGUKK3dlYmtpdF9wb2xpY3lfZGVjaXNp
b25fZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb248L0ZJTEU+CitXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24K
K1dlYktpdE5hdmlnYXRpb25UeXBlCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25f
Z2V0X2ZyYW1lX25hbWUKK3dlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW9k
aWZpZXJzCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vdXNlX2J1dHRv
bgord2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUK
K3dlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfcmVxdWVzdAorCis8U1VCU0VD
VElPTiBTdGFuZGFyZD4KK1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNsYXNzCitXRUJL
SVRfVFlQRV9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTgorV0VCS0lUX05BVklHQVRJT05fUE9M
SUNZX0RFQ0lTSU9OCitXRUJLSVRfSVNfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04KK1dFQktJ
VF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTl9DTEFTUworV0VCS0lUX0lTX05BVklHQVRJT05f
UE9MSUNZX0RFQ0lTSU9OX0NMQVNTCitXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT05f
R0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb25Qcml2YXRlCit3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X3R5
cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRFcnJvcjwvRklMRT4KIFdF
QktJVF9ORVRXT1JLX0VSUk9SCiBXRUJLSVRfUExVR0lOX0VSUk9SCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCmluZGV4IGRm
NTM3Y2E0ZTgwOWRiYzVmNmVlYjYxNTAzYWU0MjIwYjNjZTM5NDguLjE3NWExNDllNDM0NjQ3NjAz
OGEzZjExMGZmZjI3Y2Q3YmE1NjBlYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC00LDcgKzQsOCBAQCBURVNU
X1BST0dTICs9IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdExvYWRlckNsaWVudCBc
CiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBcCiAJUHJvZ3Jh
bXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QgXAotCVByb2dyYW1zL1dlYktp
dDJBUElUZXN0cy9UZXN0RG93bmxvYWRzCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RE
b3dubG9hZHMgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0UG9saWN5Q2xp
ZW50CiAKIG5vaW5zdF9QUk9HUkFNUyArPSAkKFRFU1RfUFJPR1MpCiAKQEAgLTg1LDYgKzg2LDEy
IEBAIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0NQUEZMQUdT
ID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dEJhY2tGb3J3YXJkTGlzdF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKIFByb2dyYW1z
X1dlYktpdDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfbGRmbGFncykKIAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRQb2xp
Y3lDbGllbnRfU09VUkNFUyA9IFwKKyAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAKK1Byb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0V2ViS2l0UG9saWN5Q2xpZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3Rz
X2NwcGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRQb2xpY3lDbGll
bnRfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVz
dHNfVGVzdFdlYktpdFBvbGljeUNsaWVudF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxh
Z3MpCisKIGlmIEhBVkVfQVRTUEkyCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfQWNjZXNzaWJp
bGl0eVRlc3RTZXJ2ZXJfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKQEAgLTEwNCw0ICsxMTEsMyBA
QCBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdERvd25sb2Fkc19TT1VSQ0VTID0gXAogUHJv
Z3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfQ1BQRkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfY3BwZmxhZ3MpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdERvd25sb2Fkc19M
REFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19U
ZXN0RG93bmxvYWRzX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFBv
bGljeUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0V2ViS2l0UG9saWN5Q2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Y2JlNGU3ZjkwZWUyNmFkYjI0
OGFlYmYyMGFiMTg3MmJlNDc0OTc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAKQEAgLTAs
MCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K2NsYXNzIFBvbGljeUNsaWVudFRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKK3B1Ymxp
YzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFBvbGljeUNsaWVudFRlc3QpOworCisgICAg
ZW51bSBQb2xpY3lEZWNpc2lvblJlc3BvbnNlIHsKKyAgICAgICAgVXNlLAorICAgICAgICBJZ25v
cmUsCisgICAgICAgIERvd25sb2FkLAorICAgICAgICBOb25lCisgICAgfTsKKworICAgIFBvbGlj
eUNsaWVudFRlc3QoKQorICAgICAgICA6IExvYWRUcmFja2luZ1Rlc3QoKQorICAgICAgICAsIG1f
cG9saWN5RGVjaXNpb25SZXNwb25zZShOb25lKQorICAgICAgICAsIG1fcG9saWN5RGVjaXNpb25U
eXBlRmlsdGVyKDApCisgICAgICAgICwgbV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJv
bm91c2x5KGZhbHNlKQorICAgICAgICAsIG1faGFsdE1haW5Mb29wQWZ0ZXJNYWtpbmdEZWNpc2lv
bihmYWxzZSkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiZGVj
aWRlLXBvbGljeSIsIEdfQ0FMTEJBQ0soZGVjaWRlUG9saWN5Q2FsbGJhY2spLCB0aGlzKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcXVpdE1haW5Mb29wTGF0ZXIoR01haW5Mb29wKiBs
b29wKQorICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICAgICAgcmV0
dXJuIEZBTFNFOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc3BvbmRUb1BvbGljeURlY2lz
aW9uKFBvbGljeUNsaWVudFRlc3QqIHRlc3QsIFdlYktpdFBvbGljeURlY2lzaW9uKiBkZWNpc2lv
bikKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNl
KSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAgICAgd2Via2l0X3BvbGljeV9kZWNpc2lv
bl91c2UoZGVjaXNpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSWdub3Jl
OgorICAgICAgICAgICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9pZ25vcmUoZGVjaXNpb24pOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRG93bmxvYWQ6CisgICAgICAgICAgICB3
ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lzaW9uKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIE5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICh0ZXN0LT5tX2hhbHRNYWluTG9vcEFmdGVyTWFraW5nRGVjaXNpb24pCisg
ICAgICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHF1aXRN
YWluTG9vcExhdGVyKSwgdGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgc3RhdGljIGdi
b29sZWFuIHJlc3BvbmRUb1BvbGljeURlY2lzaW9uTGF0ZXIoUG9saWN5Q2xpZW50VGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIHJlc3BvbmRUb1BvbGljeURlY2lzaW9uKHRlc3QsIHRlc3QtPm1f
cHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7CisgICAgICAgIHRlc3QtPm1fcHJldmlvdXNQ
b2xpY3lEZWNpc2lvbiA9IDA7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBz
dGF0aWMgZ2Jvb2xlYW4gZGVjaWRlUG9saWN5Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmll
dywgV2ViS2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5
cGUgdHlwZSwgUG9saWN5Q2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGlmICh0ZXN0
LT5tX3BvbGljeURlY2lzaW9uVHlwZUZpbHRlciAhPSB0eXBlKQorICAgICAgICAgICAgcmV0dXJu
IEZBTFNFOworCisgICAgICAgIHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbiA9IGRlY2lz
aW9uOworICAgICAgICBpZiAodGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJv
bm91c2x5KSB7CisgICAgICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJj
ZUZ1bmM+KHJlc3BvbmRUb1BvbGljeURlY2lzaW9uTGF0ZXIpLCB0ZXN0KTsKKyAgICAgICAgICAg
IHJldHVybiBUUlVFOworICAgICAgICB9CisKKyAgICAgICAgcmVzcG9uZFRvUG9saWN5RGVjaXNp
b24odGVzdCwgZGVjaXNpb24pOworCisgICAgICAgIC8vIFdlIHJldHVybiBGQUxTRSBoZXJlIHRv
IGVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHBvbGljeSBkZWNpc2lvbgorICAgICAgICAvLyBoYW5k
bGVyIGRvZXNuJ3Qgb3ZlcnJpZGUgd2hhdGV2ZXIgd2UgdXNlIGhlcmUuCisgICAgICAgIHJldHVy
biBGQUxTRTsKKyAgICB9CisKKyAgICBQb2xpY3lEZWNpc2lvblJlc3BvbnNlIG1fcG9saWN5RGVj
aXNpb25SZXNwb25zZTsKKyAgICBpbnQgbV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXI7CisgICAg
Ym9vbCBtX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHk7CisgICAgYm9vbCBt
X2hhbHRNYWluTG9vcEFmdGVyTWFraW5nRGVjaXNpb247CisgICAgR1JlZlB0cjxXZWJLaXRQb2xp
Y3lEZWNpc2lvbj4gbV9wcmV2aW91c1BvbGljeURlY2lzaW9uOworfTsKKworc3RhdGljIHZvaWQg
dGVzdE5hdmlnYXRpb25Qb2xpY3koUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uVHlwZUZpbHRlciA9IFdFQktJVF9QT0xJ
Q1lfREVDSVNJT05fVFlQRV9OQVZJR0FUSU9OX0FDVElPTjsKKworICAgIHRlc3QtPm1fcG9saWN5
RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6OlVzZTsKKyAgICB0ZXN0LT5sb2Fk
SHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzLnNpemUoKSwgPT0sIDMpOworCisgICAgLy8gSWRlYWxseSB3ZSdkIGxpa2UgdG8gaGF2ZSBh
IG1vcmUgaW50ZW5zaXZlIHRlc3QgaGVyZSwgYnV0IGl0J3Mgc3RpbGwgcHJldHR5IHRyaWNreQor
ICAgIC8vIHRvIHRyaWdnZXIgZGlmZmVyZW50IHR5cGVzIG9mIG5hdmlnYXRpb25zIHdpdGggdGhl
IEdUSysgV2ViS2l0MiBBUEkuCisgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBk
ZWNpc2lvbiA9IFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTih0ZXN0LT5tX3ByZXZp
b3VzUG9saWN5RGVjaXNpb24uZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmF2
aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X25hdmlnYXRpb25fdHlwZShkZWNpc2lvbiksID09
LCBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX09USEVSKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb3VzZV9idXR0b24oZGVjaXNpb24p
LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9k
ZWNpc2lvbl9nZXRfbW9kaWZpZXJzKGRlY2lzaW9uKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X2ZyYW1lX25hbWUoZGVj
aXNpb24pLCA9PSwgMCk7CisgICAgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9u
YXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfcmVxdWVzdChkZWNpc2lvbik7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgImh0
dHA6Ly93ZWJraXRndGsub3JnLyIpOworCisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3Bv
bnNlID0gUG9saWN5Q2xpZW50VGVzdDo6VXNlOworICAgIHRlc3QtPm1fcmVzcG9uZFRvUG9saWN5
RGVjaXNpb25Bc3luY2hyb25vdXNseSA9IHRydWU7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1s
Lz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCks
ID09LCAzKTsKKworICAgIC8vIElmIHdlIGFyZSB3YWl0aW5nIHVudGlsIGxvYWQgY29tcGxldGlv
biwgaXQgd2lsbCBuZXZlciBjb21wbGV0ZSBpZiB3ZSBpZ25vcmUgdGhlCisgICAgLy8gbmF2aWdh
dGlvbi4gU28gd2UgdGVsbCB0aGUgbWFpbiBsb29wIHRvIHF1aXQgc29tZXRpbWUgbGF0ZXIuCisg
ICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6SWdu
b3JlOworICAgIHRlc3QtPm1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSA9
IGZhbHNlOworICAgIHRlc3QtPm1faGFsdE1haW5Mb29wQWZ0ZXJNYWtpbmdEZWNpc2lvbiA9IHRy
dWU7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sLz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcv
Iik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21w
aW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAwKTsKKworICAgIHRlc3QtPm1fcG9s
aWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6Oklnbm9yZTsKKyAgICB0ZXN0
LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzLnNpemUoKSwgPT0sIDApOworfQorCitzdHJ1Y3QgQ3JlYXRlQ2FsbGJhY2tEYXRh
IHsKKyAgICBib29sIHRyaWVkVG9PcGVuV2luZG93OworICAgIEdNYWluTG9vcCogbWFpbkxvb3A7
Cit9OworCitzdGF0aWMgV2ViS2l0V2ViVmlldyogY3JlYXRlQ2FsbGJhY2soV2ViS2l0V2ViVmll
dyogd2ViVmlldywgQ3JlYXRlQ2FsbGJhY2tEYXRhKiBkYXRhKQoreworICAgIGRhdGEtPnRyaWVk
VG9PcGVuV2luZG93ID0gdHJ1ZTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGRhdGEtPm1haW5Mb29w
KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVzdE5ld1dpbmRvd1BvbGljeShQ
b2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25z
dCBjaGFyKiB3aW5kb3dPcGVuaW5nSFRNTCA9CisgICAgICAgICI8aHRtbD48Ym9keT4iCisgICAg
ICAgICIgICAgPGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbVwiIHRh
cmdldD1cIl9ibGFua1wiPkxpbms8L2E+IgorICAgICAgICAiICAgIDxzY3JpcHQ+IgorICAgICAg
ICAiICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMn
KTsiCisgICAgICAgICIgICAgICAgIGV2ZW50LmluaXRFdmVudCgnY2xpY2snLCB0cnVlLCBmYWxz
ZSk7IgorICAgICAgICAiICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGluaycpLmRp
c3BhdGNoRXZlbnQoZXZlbnQpOyIKKyAgICAgICAgIiAgICA8L3NjcmlwdD4iCisgICAgICAgICI8
L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBX
RUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkVXX1dJTkRPV19BQ1RJT047CisgICAgd2Via2l0
X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseSh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOworCisg
ICAgQ3JlYXRlQ2FsbGJhY2tEYXRhIGRhdGE7CisgICAgZGF0YS50cmllZFRvT3BlbldpbmRvdyA9
IGZhbHNlOworICAgIGRhdGEubWFpbkxvb3AgPSB0ZXN0LT5tX21haW5Mb29wOworCisgICAgZ19z
aWduYWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNLKGNyZWF0
ZUNhbGxiYWNrKSwgJmRhdGEpOworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9
IFBvbGljeUNsaWVudFRlc3Q6OlVzZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCh3aW5kb3dPcGVuaW5n
SFRNTCwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOworICAgIHRlc3QtPndhaXQoMSk7CisgICAg
Z19hc3NlcnQoZGF0YS50cmllZFRvT3BlbldpbmRvdyk7CisKKyAgICBXZWJLaXROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uID0gV0VCS0lUX05BVklHQVRJT05fUE9MSUNZX0RFQ0lT
SU9OKHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfZnJhbWVfbmFtZShk
ZWNpc2lvbiksID09LCAiX2JsYW5rIik7CisKKyAgICAvLyBVc2luZyBhIHNob3J0IHRpbWVvdXQg
aXMgYSBiaXQgdWdseSBoZXJlLCBidXQgaXQncyBoYXJkIHRvIGdldCBhcm91bmQgYmVjYXVzZSBp
ZiB3ZSBibG9jaworICAgIC8vIHRoZSBuZXcgd2luZG93IHNpZ25hbCB3ZSBjYW5ub3QgaGFsdCB0
aGUgbWFpbiBsb29wIGluIHRoZSBjcmVhdGUgY2FsbGJhY2suIElmIHdlCisgICAgLy8gaGFsdCB0
aGUgbWFpbiBsb29wIGluIHRoZSBwb2xpY3kgZGVjaXNpb24sIHRoZSBjcmVhdGUgY2FsbGJhY2sg
bmV2ZXIgZXhlY3V0ZXMuCisgICAgZGF0YS50cmllZFRvT3BlbldpbmRvdyA9IGZhbHNlOworICAg
IHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6Oklnbm9y
ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCh3aW5kb3dPcGVuaW5nSFRNTCwgImh0dHA6Ly93ZWJraXRn
dGsub3JnLyIpOworICAgIHRlc3QtPndhaXQoLjIpOworICAgIGdfYXNzZXJ0KCFkYXRhLnRyaWVk
VG9PcGVuV2luZG93KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIFBvbGljeUNsaWVu
dFRlc3Q6OmFkZCgiV2ViS2l0UG9saWN5Q2xpZW50IiwgIm5hdmlnYXRpb24tcG9saWN5IiwgdGVz
dE5hdmlnYXRpb25Qb2xpY3kpOworICAgIFBvbGljeUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0UG9s
aWN5Q2xpZW50IiwgIm5ldy13aW5kb3ctcG9saWN5IiwgdGVzdE5ld1dpbmRvd1BvbGljeSk7Cit9
CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKaW5kZXggZTZkZGExMGFlZmFkZTYzOWZj
OGJhM2Q1N2JhZmQ5OTVmN2Q5YTBhMi4uNTkxOGQwOTVhOTFmN2Y3ZjJiNWQxNzYyOTliNWJlYjQz
N2JkNDZiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mm1hcnNoYWwubGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQybWFyc2hhbC5saXN0CkBAIC0xLDUgKzEsNiBAQAogQk9PTEVBTjpFTlVNLFNUUklORyxQ
T0lOVEVSCiBCT09MRUFOOk9CSkVDVAorQk9PTEVBTjpPQkpFQ1QsRU5VTQogQk9PTEVBTjpPQkpF
Q1QsU1RSSU5HLFBPSU5URVIKIEJPT0xFQU46UE9JTlRFUgogQk9PTEVBTjpTVFJJTkcKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3NGZhMDUyYmY0
YmE2M2RiZDRjMGU3NTQ2NGJkNGMyMzFkYmQzMTEzLi4wOGRjMTgxM2U1NzE1YzgyZmQ2ZTBmYTVm
NzZhYjYyYmZiYmY0NWU0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDEtMjcgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtXSzJdIEltcGxlbWVudCB0
aGUgcG9saWN5IGNsaWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYzNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGd0ay9nZW5lcmF0ZS1ndGtkb2M6CisgICAgICAgIChnZXRfd2Via2l0Ml9vcHRp
b25zKTogVXBkYXRlIHRoZSBsaXN0IG9mIHNraXBwZWQgc291cmNlIGZpbGVzIHRvIGluY2x1ZGUg
YWxsIGNsaWVudHMuCisKIDIwMTItMDEtMjcgIEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBu
b2tpYS5jb20+CiAKICAgICAgICAgW1F0XVtXSzJdIEVuYWJsZSB0aGUgYXV0b21hdGljIHRvdWNo
LT5tb3VzZSBtb2NraW5nIG9uIHRoZSBuZXcgUXQ1IGhhc2hlcwpkaWZmIC0tZ2l0IGEvVG9vbHMv
Z3RrL2dlbmVyYXRlLWd0a2RvYyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKaW5kZXggZjY5
OGFmYWNlZmRlNmZjOGQzNTRjY2Y3NTRkZmFiYmJlNmQ5YjAwMi4uYTU4MzQ1YzU3MDY1ODhjNmY1
ZTcxMDBmNzlmNjBkMTk1NDZjMjY4MiAxMDA3NTUKLS0tIGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0
a2RvYworKysgYi9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCkBAIC01OSwxMCArNTksNyBAQCBk
ZWYgZ2V0X3dlYmtpdDJfb3B0aW9ucygpOgogICAgICAgICAgICAgICAgICAgICcgLUknICsgY29t
bW9uLnRvcF9sZXZlbF9wYXRoKCdTb3VyY2UnKSArIFwKICAgICAgICAgICAgICAgICAgICAnIC1J
JyArIHNyY19wYXRoKCksCiAgICAgICAgICdpZ25vcmVkX2ZpbGVzJzogZ2xvYi5nbG9iKHNyY19w
YXRoKCcqUHJpdmF0ZS5oJykpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xv
YihzcmNfcGF0aCgnUGFnZUNsaWVudEltcGwuKicpKSArIFwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ1dlYktpdERvd25sb2FkQ2xpZW50LionKSkgKyBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXRVSUNsaWVu
dC4qJykpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgn
V2ViS2l0TG9hZGVyQ2xpZW50LionKSkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2xv
Yi5nbG9iKHNyY19wYXRoKCcqQ2xpZW50KicpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS4qJykpICsg
XAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgndGVzdHMvKi5o
JykpCiAgICAgfSkK
</data>
<flag name="review"
          id="125543"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>