<?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>146589</bug_id>
          
          <creation_ts>2015-07-03 06:16:24 -0700</creation_ts>
          <short_desc>[GTK] Add API to WebKitWebsiteDataManager to handle website data</short_desc>
          <delta_ts>2017-01-23 23:50:08 -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>
          
          <see_also>https://bugzilla.gnome.org/show_bug.cgi?id=741447</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>167281</dependson>
          <blocked>147319</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mrobinson</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1106686</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-07-03 06:16:24 -0700</bug_when>
    <thetext>Allow to get origins with memory and disk cached resources, as well as delete caches for individual origins, or clearing the whole cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106687</commentid>
    <comment_count>1</comment_count>
      <attachid>256098</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-07-03 06:21:54 -0700</bug_when>
    <thetext>Created attachment 256098
Patch

Includes unit tests and also implements about:data in MiniBrowser to easily play with Website data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109861</commentid>
    <comment_count>2</comment_count>
      <attachid>256098</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2015-07-16 06:41:11 -0700</bug_when>
    <thetext>Comment on attachment 256098
Patch

All of this seems to make sense to me. That said, do you have something in mind for using the per-origin APIs already?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109863</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-07-16 06:51:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 256098 [details]
&gt; Patch
&gt; 
&gt; All of this seems to make sense to me. That said, do you have something in
&gt; mind for using the per-origin APIs already?

The idea is to implement a better personal info dialog in ephy, so that you can remove website data only for a particular origin, the same way you currently can delete only the cookies of a particular domain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112394</commentid>
    <comment_count>4</comment_count>
      <attachid>257556</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-07-27 04:20:26 -0700</bug_when>
    <thetext>Created attachment 257556
Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112396</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-27 04:23:33 -0700</bug_when>
    <thetext>Attachment 257556 did not pass style-queue:


ERROR: Tools/MiniBrowser/gtk/main.c:396:  Declaration has space between * and variable name in WebKitWebsiteDataManager* manager  [whitespace/declaration] [3]
ERROR: Tools/MiniBrowser/gtk/main.c:424:  Declaration has space between * and variable name in WebKitWebsiteDataManager* manager  [whitespace/declaration] [3]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112621</commentid>
    <comment_count>6</comment_count>
      <attachid>257556</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-07-27 17:17:16 -0700</bug_when>
    <thetext>Comment on attachment 257556
Rebased patch

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

Unofficial +1 on the API changes from me.

I think it would be helpful to add to the documentation of WebKitWebsiteDataManager a short description of the difference between the memory cache and the disk cache. (I presume the memory cache is the page cache, and the disk cache is the network cache?)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:30
&gt; + * @Short_description: A security boundary for Websites

I would rather say &quot;websites&quot; in lowercase.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:35
&gt; + * by Websites. An origin consists of a host name, a protocol, and a port

Same.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:55
&gt; +    CString host;

I don&apos;t understand the value of duplicating protocol and host here, when they are already stored in the WebCore::SecurityOrigin. It&apos;s also a bit confusing that these are initialized in getters.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:63
&gt; +    WebKitSecurityOrigin* origin = g_slice_new(WebKitSecurityOrigin);

I think we should stop using GSlice and just use plain new/delete instead. I base this off of a comment in the GNOME memory management programming guide: &quot;we don’t want to encourage [use of g_slice_new]. GLib developers are moving towards deprecating it due to its performance slipping significantly behind the libc allocator’s on Linux in recent years.&quot; That is literally a comment, as in a commented-out section of the guide, so it doesn&apos;t show up on the actual website, but it&apos;s there to discourage people from adding guidance on GSlice: https://git.gnome.org/browse/gnome-devel-docs/tree/programming-guidelines/C/memory-management.page#n22

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:77
&gt; +    ASSERT(origin);

When you would write an assertion like this, I think it&apos;s better to pass by reference instead. I think we&apos;ve been trying to avoid pass by pointer except in C API and when the pointer is expected to be null.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:166
&gt; + * Returns: The host of the #WebKitSecurityOrigin.

This needs a (nullable) annotation, or (allow-none), since you decided to return nullptr if the string is empty.

Did you see https://blogs.gnome.org/desrt/2014/05/27/allow-none-is-dead-long-live-nullable/ and continue to use (allow-none) for compatibility with old gobject-introspection?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:512
&gt; +                origins = g_list_prepend(origins, webkitSecurityOriginCreate(origin.get()));

And the same origin won&apos;t ever be in multiple records? (Same question applies to the case of the memory cache.)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:524
&gt; + * @error: return location for error or %NULL to ignore

Shouldn&apos;t this be annotated (optional) or (allow-none)? Same for all the other error parameters in this file.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:651
&gt; + * %WEBKIT_PROCESS_MODEL_SHARED_SECONDARY_PROCESS process model, an empty list will

This is a comma splice; you can fix it by changing the comma to a semicolon, or by splitting it into two sentences if you don&apos;t like semicolons.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h:94
&gt; +                                                                       GError                  ** error);

Extra space after the **

&gt; Tools/ChangeLog:9
&gt; +        MiniBrowsore to show and handle Website data.

Is MiniBrowsore a typo or a pun? I can&apos;t tell. :D

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:736
&gt; +    test-&gt;wait(1);

:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112684</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-07-27 23:38:58 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 257556 [details]
&gt; Rebased patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=257556&amp;action=review
&gt; 
&gt; Unofficial +1 on the API changes from me.

Thanks for looking at it.

&gt; I think it would be helpful to add to the documentation of
&gt; WebKitWebsiteDataManager a short description of the difference between the
&gt; memory cache and the disk cache. (I presume the memory cache is the page
&gt; cache, and the disk cache is the network cache?)

Memory cache is not the page cache is the memory cache, used to store any cacheable resources in memory, and disk cache is the HTTP disk cache used by the networking process.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:30
&gt; &gt; + * @Short_description: A security boundary for Websites
&gt; 
&gt; I would rather say &quot;websites&quot; in lowercase.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:35
&gt; &gt; + * by Websites. An origin consists of a host name, a protocol, and a port
&gt; 
&gt; Same.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:55
&gt; &gt; +    CString host;
&gt; 
&gt; I don&apos;t understand the value of duplicating protocol and host here, when
&gt; they are already stored in the WebCore::SecurityOrigin. It&apos;s also a bit
&gt; confusing that these are initialized in getters.

This is a common thing we do in the API just to make it more convenient to use. The host and protocol are stored in WebCore::SecurityOrigin as String, but all our APIs return always string in utf8 (like all other GNOME platform APIs). If we return the converted string directly, the returned value should be freed by the user. So, we cache the converted strings to be able to return a const char *, and we do that only on demand, so if you never call get_host we don&apos;t have a cached value for nothing.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:63
&gt; &gt; +    WebKitSecurityOrigin* origin = g_slice_new(WebKitSecurityOrigin);
&gt; 
&gt; I think we should stop using GSlice and just use plain new/delete instead. I
&gt; base this off of a comment in the GNOME memory management programming guide:
&gt; &quot;we don’t want to encourage [use of g_slice_new]. GLib developers are moving
&gt; towards deprecating it due to its performance slipping significantly behind
&gt; the libc allocator’s on Linux in recent years.&quot; That is literally a comment,
&gt; as in a commented-out section of the guide, so it doesn&apos;t show up on the
&gt; actual website, but it&apos;s there to discourage people from adding guidance on
&gt; GSlice:
&gt; https://git.gnome.org/browse/gnome-devel-docs/tree/programming-guidelines/C/
&gt; memory-management.page#n22

Good point, didn&apos;t know that.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:77
&gt; &gt; +    ASSERT(origin);
&gt; 
&gt; When you would write an assertion like this, I think it&apos;s better to pass by
&gt; reference instead. I think we&apos;ve been trying to avoid pass by pointer except
&gt; in C API and when the pointer is expected to be null.

WebKitSecurityOrigin is a boxed type not a C++ class, we always use pointers with GObjects or boxed types. That ASSERT is equivalent to the g_return macros used in public methods, but in this case I used ASSERT because it&apos;s a private method.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:166
&gt; &gt; + * Returns: The host of the #WebKitSecurityOrigin.
&gt; 
&gt; This needs a (nullable) annotation, or (allow-none), since you decided to
&gt; return nullptr if the string is empty.

I thought nullable/allow-none was assumed for char *, I think we don&apos;t use that in any of our APIs, we will have to update them all.

&gt; Did you see
&gt; https://blogs.gnome.org/desrt/2014/05/27/allow-none-is-dead-long-live-
&gt; nullable/ and continue to use (allow-none) for compatibility with old
&gt; gobject-introspection?

No.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:512
&gt; &gt; +                origins = g_list_prepend(origins, webkitSecurityOriginCreate(origin.get()));
&gt; 
&gt; And the same origin won&apos;t ever be in multiple records? (Same question
&gt; applies to the case of the memory cache.)

That could probably happen when you call fetchData with more than one type, but we always use fetchData with a single type. 

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:524
&gt; &gt; + * @error: return location for error or %NULL to ignore
&gt; 
&gt; Shouldn&apos;t this be annotated (optional) or (allow-none)? Same for all the
&gt; other error parameters in this file.

I thought that GError ** was handled automatically too.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:651
&gt; &gt; + * %WEBKIT_PROCESS_MODEL_SHARED_SECONDARY_PROCESS process model, an empty list will
&gt; 
&gt; This is a comma splice; you can fix it by changing the comma to a semicolon,
&gt; or by splitting it into two sentences if you don&apos;t like semicolons.

I don&apos;t mind to use ;

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h:94
&gt; &gt; +                                                                       GError                  ** error);
&gt; 
&gt; Extra space after the **

Good catch.

&gt; &gt; Tools/ChangeLog:9
&gt; &gt; +        MiniBrowsore to show and handle Website data.
&gt; 
&gt; Is MiniBrowsore a typo or a pun? I can&apos;t tell. :D

:-D

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:736
&gt; &gt; +    test-&gt;wait(1);
&gt; 
&gt; :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112699</commentid>
    <comment_count>8</comment_count>
      <attachid>257641</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-07-28 03:37:47 -0700</bug_when>
    <thetext>Created attachment 257641
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112716</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-07-28 09:05:28 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; 
&gt; This is a common thing we do in the API just to make it more convenient to
&gt; use. The host and protocol are stored in WebCore::SecurityOrigin as String,
&gt; but all our APIs return always string in utf8 (like all other GNOME platform
&gt; APIs). If we return the converted string directly, the returned value should
&gt; be freed by the user. So, we cache the converted strings to be able to
&gt; return a const char *, and we do that only on demand, so if you never call
&gt; get_host we don&apos;t have a cached value for nothing.

Surely if we were to take a String s and return s.utf8().data(), that does not need to be freed by the caller. It is a pointer to the CString&apos;s internal CStringBuffer. And the CString has a reference-counted CStringBuffer, so the data should be freed automatically when... er, when the function returns. Ah, OK, so that would be bad. WebKit&apos;s strings are confusing; I wish it hadn&apos;t taken a year for me to realize this.

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:77
&gt; &gt; &gt; +    ASSERT(origin);
&gt; &gt; 
&gt; &gt; When you would write an assertion like this, I think it&apos;s better to pass by
&gt; &gt; reference instead. I think we&apos;ve been trying to avoid pass by pointer except
&gt; &gt; in C API and when the pointer is expected to be null.
&gt; 
&gt; WebKitSecurityOrigin is a boxed type not a C++ class, we always use pointers
&gt; with GObjects or boxed types.

I am not sure why, though. I think it would still work fine if we were to do pass by reference.

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:166
&gt; I thought nullable/allow-none was assumed for char *, I think we don&apos;t use
&gt; that in any of our APIs, we will have to update them all.

I think that is wrong, unfortunately. I found [1] which says:

gchar* means (type utf8) (transfer full)
const gchar* means (type utf8) (transfer none)

Where (nullable) is conspicuously missing. And it includes this example:

/**
 * gtk_link_button_new_with_label: 
 * @uri: A URI
 * @label: (nullable): A piece of text or NULL
 */
GtkWidget *
gtk_link_button_new_with_label (const gchar *uri,
                                const gchar *label);

So I think we&apos;ve been doing it wrong.

Looking at [1], it does look like no annotations are needed for GError, so you&apos;re right about that. I was looking at some Gio code that used (out), but I guess it was redundant.

[1] https://wiki.gnome.org/Projects/GObjectIntrospection/Annotations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112720</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-07-28 09:19:23 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; 
&gt; &gt; This is a common thing we do in the API just to make it more convenient to
&gt; &gt; use. The host and protocol are stored in WebCore::SecurityOrigin as String,
&gt; &gt; but all our APIs return always string in utf8 (like all other GNOME platform
&gt; &gt; APIs). If we return the converted string directly, the returned value should
&gt; &gt; be freed by the user. So, we cache the converted strings to be able to
&gt; &gt; return a const char *, and we do that only on demand, so if you never call
&gt; &gt; get_host we don&apos;t have a cached value for nothing.
&gt; 
&gt; Surely if we were to take a String s and return s.utf8().data(), that does
&gt; not need to be freed by the caller. It is a pointer to the CString&apos;s
&gt; internal CStringBuffer. And the CString has a reference-counted
&gt; CStringBuffer, so the data should be freed automatically when... er, when
&gt; the function returns. Ah, OK, so that would be bad. WebKit&apos;s strings are
&gt; confusing; I wish it hadn&apos;t taken a year for me to realize this.


Yes, exactly. We have the CString members because the return value of utf8() is a temporary. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112747</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-28 10:25:35 -0700</bug_when>
    <thetext>Attachment 257641 did not pass style-queue:


ERROR: Tools/MiniBrowser/gtk/main.c:396:  Declaration has space between * and variable name in WebKitWebsiteDataManager* manager  [whitespace/declaration] [3]
ERROR: Tools/MiniBrowser/gtk/main.c:424:  Declaration has space between * and variable name in WebKitWebsiteDataManager* manager  [whitespace/declaration] [3]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113496</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-30 14:34:25 -0700</bug_when>
    <thetext>Attachment 257641 did not pass style-queue:


ERROR: Tools/MiniBrowser/gtk/main.c:396:  Declaration has space between * and variable name in WebKitWebsiteDataManager* manager  [whitespace/declaration] [3]
ERROR: Tools/MiniBrowser/gtk/main.c:424:  Declaration has space between * and variable name in WebKitWebsiteDataManager* manager  [whitespace/declaration] [3]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230842</commentid>
    <comment_count>13</comment_count>
      <attachid>257641</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-17 07:53:08 -0700</bug_when>
    <thetext>Comment on attachment 257641
Updated patch

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

You&apos;ll need to update all the Since tags, obviously.

And it&apos;d be nice to see implementation in Ephy before landing, since it&apos;s not great to add API that no apps are using, but I guess the MB implementation is enough to show the API is sufficient for the task.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:46
&gt; +struct _WebKitSecurityOrigin {
&gt; +    _WebKitSecurityOrigin(WebCore::SecurityOrigin* coreSecurityOrigin)
&gt; +        : securityOrigin(coreSecurityOrigin)
&gt; +    {
&gt; +    }

Why is it useful to create WebKitSecurityOrigin objects with a null WebCore::SecurityOrigin? I would have expected the constructor to receive a reference, and to use a Ref rather than RefPtr member variable.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:79
&gt; +WebCore::SecurityOrigin&amp; webkitSecurityOriginGetSecurityOrigin(WebKitSecurityOrigin* origin)
&gt; +{
&gt; +    ASSERT(origin);
&gt; +    return *origin-&gt;securityOrigin;
&gt; +}

This ASSERT indicates to me that allowing null WebCore::SecurityOrigins is probably not appropriate.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:652
&gt; + * Note that this is not supported for #WebKitWebContext&lt;!-- --&gt;s using
&gt; + * %WEBKIT_PROCESS_MODEL_SHARED_SECONDARY_PROCESS process model; an empty list will
&gt; + * always be returned in such case.

Were we still using the soup cache in shared secondary process mode when you wrote this patch? Hopefully this comment is obsolete and should be removed?

&gt; Tools/MiniBrowser/gtk/main.c:396
&gt; +    WebKitWebsiteDataManager* manager = webkit_web_context_get_website_data_manager(webkit_web_context_get_default());

WebKitWebsiteDataManager *manager

&gt; Tools/MiniBrowser/gtk/main.c:424
&gt; +    AboutDataRequest *dataRequest = aboutDataRequestNew(request);
&gt; +    WebKitWebsiteDataManager* manager = webkit_web_context_get_website_data_manager(webkit_web_context_get_default());

WebKitWebsiteDataManager *manager

&gt; Tools/MiniBrowser/gtk/main.c:493
&gt; +    WebKitUserContentManager *userContentManager = webkit_user_content_manager_new();

Looks like it&apos;s leaked?

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:736
&gt; +    // Disk cache delays the storing of initial resources for 1 second to avoid
&gt; +    // affecting early page load. So, wait 1 second here to make sure resources
&gt; +    // have already been stored.
&gt; +    test-&gt;wait(1);

This is unfortunate.

&gt; Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:42
&gt; +WebViewTest::WebViewTest(WebKitProcessModel processModel)
&gt; +    : Test(processModel)
&gt; +    , m_webView(WEBKIT_WEB_VIEW(g_object_ref_sink(webkit_web_view_new_with_context(m_webContext.get()))))
&gt; +    , m_mainLoop(g_main_loop_new(nullptr, TRUE))
&gt;  {
&gt;      assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_webView));
&gt;      g_signal_connect(m_webView, &quot;web-process-crashed&quot;, G_CALLBACK(WebViewTest::webProcessCrashed), this);

This is not good. Use delegating constructors to avoid the need to reimplement the constructor body. Make sure there is a constructor that can take both a WebKitUserContentManager and a WebKitProcessModel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263154</commentid>
    <comment_count>14</comment_count>
      <attachid>257641</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-12-30 06:01:19 -0800</bug_when>
    <thetext>Comment on attachment 257641
Updated patch

Clearing flags, I&apos;m working on a new patch using a different API, as discussed in https://lists.webkit.org/pipermail/webkit-gtk/2015-July/002404.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268742</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-21 01:58:13 -0800</bug_when>
    <thetext>*** Bug 147319 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268744</commentid>
    <comment_count>16</comment_count>
      <attachid>299429</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-21 02:16:15 -0800</bug_when>
    <thetext>Created attachment 299429
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268745</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-21 02:17:24 -0800</bug_when>
    <thetext>Making this depend on bug #167281 only because unit tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268941</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-22 16:38:57 -0800</bug_when>
    <thetext>(Note: I&apos;d like to see a patch that uses this API in https://bugzilla.gnome.org/show_bug.cgi?id=741447.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268948</commentid>
    <comment_count>19</comment_count>
      <attachid>299429</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-22 17:46:28 -0800</bug_when>
    <thetext>Comment on attachment 299429
New patch

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

I like the API.

I would slightly prefer slightly longer but more specific function names: webkit_website_data_manager_fetch_data, _remove_data, _clear_data. What do you think about that?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:38
&gt; + * A website is normally a set of URLs grouped by domain name using the public suffix list.

Why is the public suffix list used? Keeping in mind that libsoup&apos;s public suffix list is often years out of date and that we should almost never be using it. It&apos;s my primary concern with this patch.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:39
&gt; + * You can ge the website name, which is usually the domain, with webkit_website_data_get_name().

ge -&gt; get

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:42
&gt; + * A website can store different types of data in the client side. #WebKitWebsiteDataTypes is an enum containing

Leave a blank line between these paragraphs.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:43
&gt; + * all the possible data types, use webkit_website_data_get_types() to get the bitmask of data types.

Change the comma to a semicolon

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:175
&gt; +        if (websiteData-&gt;record.displayName == &quot;Local documents on your computer&quot;)

That&apos;s way too fragile; it&apos;s going to break whenever someone decides to change the display name. There has got to be a better way to check if the record represents a local file. How about checking if the protocol of the security origin is &quot;file&quot;?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:176
&gt; +            websiteData-&gt;displayName = _(&quot;Local files&quot;);

You forgot to update POTFILES.in.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:188
&gt; + * types actually found, not the types queried with webkit_website_data_manager_fetch().

&quot;actually present&quot;?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:521
&gt; + * @user_data: (closure): the data to pass to callback function

to the callback function

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:579
&gt; + * Use webkit_website_data_manager_clear() if you want to remove the website data for all sites.

sites -&gt; websites (this is the only place you wrote &quot;sites&quot; and it&apos;s nice to use consistent terminology)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:639
&gt; + * Asynchronously clear the website data of the given @types modified since the given @timespan.

This is a bit confusing. Let&apos;s say: &quot;modified in the past @timespam microseconds&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataPrivate.h:2
&gt; + * Copyright (C) 2016 Igalia S.L.

Happy new years!

&gt; Tools/MiniBrowser/gtk/main.c:272
&gt; +    if (webkit_website_data_manager_remove_finish(manager, result, NULL))
&gt; +        webkit_web_view_reload(webkit_uri_scheme_request_get_web_view(dataRequest-&gt;request));

Why reloading?

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp:282
&gt; +    GList removeList = { itemList-&gt;data, nullptr, nullptr };

I think GList removeList = g_list_prepend(nullptr, data) would be a much clearer way to write this. You might recall teaching me that recently. ;) (Note it&apos;s duplicated in several places below.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269000</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-22 23:07:02 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (Note: I&apos;d like to see a patch that uses this API in
&gt; https://bugzilla.gnome.org/show_bug.cgi?id=741447.)

I have a wip patch for ephy, I just need to finish it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269003</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-22 23:17:03 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Comment on attachment 299429 [details]
&gt; New patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=299429&amp;action=review
&gt; 
&gt; I like the API.
&gt; 
&gt; I would slightly prefer slightly longer but more specific function names:
&gt; webkit_website_data_manager_fetch_data, _remove_data, _clear_data. What do
&gt; you think about that?

I thought about that but sounded redundant to me, this is data manager.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:38
&gt; &gt; + * A website is normally a set of URLs grouped by domain name using the public suffix list.
&gt; 
&gt; Why is the public suffix list used? Keeping in mind that libsoup&apos;s public
&gt; suffix list is often years out of date and that we should almost never be
&gt; using it. It&apos;s my primary concern with this patch.

Because that&apos;s how the internal WebKit2 API works. My guess is that you normally want to remove the data for a website, no matter how many url forms that website has. It makes everything easier to handle.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:39
&gt; &gt; + * You can ge the website name, which is usually the domain, with webkit_website_data_get_name().
&gt; 
&gt; ge -&gt; get
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:42
&gt; &gt; + * A website can store different types of data in the client side. #WebKitWebsiteDataTypes is an enum containing
&gt; 
&gt; Leave a blank line between these paragraphs.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:43
&gt; &gt; + * all the possible data types, use webkit_website_data_get_types() to get the bitmask of data types.
&gt; 
&gt; Change the comma to a semicolon

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:175
&gt; &gt; +        if (websiteData-&gt;record.displayName == &quot;Local documents on your computer&quot;)
&gt; 
&gt; That&apos;s way too fragile; it&apos;s going to break whenever someone decides to
&gt; change the display name. There has got to be a better way to check if the
&gt; record represents a local file. How about checking if the protocol of the
&gt; security origin is &quot;file&quot;?

Yes, I agree, I did it this way to avoid a GTK ifdef in displayNameForLocalFiles(). Fortunately unit tests will catch it if it&apos;s changed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:176
&gt; &gt; +            websiteData-&gt;displayName = _(&quot;Local files&quot;);
&gt; 
&gt; You forgot to update POTFILES.in.

As always :-P

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteData.cpp:188
&gt; &gt; + * types actually found, not the types queried with webkit_website_data_manager_fetch().
&gt; 
&gt; &quot;actually present&quot;?

Sure.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:521
&gt; &gt; + * @user_data: (closure): the data to pass to callback function
&gt; 
&gt; to the callback function

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:579
&gt; &gt; + * Use webkit_website_data_manager_clear() if you want to remove the website data for all sites.
&gt; 
&gt; sites -&gt; websites (this is the only place you wrote &quot;sites&quot; and it&apos;s nice to
&gt; use consistent terminology)

Agree.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:639
&gt; &gt; + * Asynchronously clear the website data of the given @types modified since the given @timespan.
&gt; 
&gt; This is a bit confusing. Let&apos;s say: &quot;modified in the past @timespam
&gt; microseconds&quot;

I avoided using microseconds detail, it&apos;s a GTimeSpan and not a guint64 for that reason.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataPrivate.h:2
&gt; &gt; + * Copyright (C) 2016 Igalia S.L.
&gt; 
&gt; Happy new years!

:-)

&gt; &gt; Tools/MiniBrowser/gtk/main.c:272
&gt; &gt; +    if (webkit_website_data_manager_remove_finish(manager, result, NULL))
&gt; &gt; +        webkit_web_view_reload(webkit_uri_scheme_request_get_web_view(dataRequest-&gt;request));
&gt; 
&gt; Why reloading?

To update the data and check that whatever you removed is no longer listed.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp:282
&gt; &gt; +    GList removeList = { itemList-&gt;data, nullptr, nullptr };
&gt; 
&gt; I think GList removeList = g_list_prepend(nullptr, data) would be a much
&gt; clearer way to write this. You might recall teaching me that recently. ;)
&gt; (Note it&apos;s duplicated in several places below.)

Then you would be heap allocating just to store a single item list. This is a trick for single item lists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269043</commentid>
    <comment_count>22</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-23 07:17:09 -0800</bug_when>
    <thetext>(In reply to comment #21) 
&gt; Because that&apos;s how the internal WebKit2 API works. My guess is that you
&gt; normally want to remove the data for a website, no matter how many url forms
&gt; that website has. It makes everything easier to handle.

Is the data stored for each security origin? That&apos;s fine then. But then I&apos;m not sure why the public suffix list would be required, then. If it&apos;s trying to do unreliable public suffix heuristics to merge multiple subdomains under a single base domain, then I would say that&apos;s quite unfortunate and undesirable behavior. Regardless, we probably shouldn&apos;t say &quot;public suffix list&quot; in our documentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269330</commentid>
    <comment_count>23</comment_count>
      <attachid>299429</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-23 20:52:53 -0800</bug_when>
    <thetext>Comment on attachment 299429
New patch

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

&gt; Source/WebKit2/ChangeLog:33
&gt; +        (webkit_website_data_manager_remove): Remove the website data of the given types for the given WebKitWebsiteData list.
&gt; +        (webkit_website_data_manager_remove_finish):
&gt; +        (webkit_website_data_manager_clear): Clear all website data of the given types modified since the given time span.
&gt; +        (webkit_website_data_manager_clear_finish):

I realized the distinction between _remove and _clear is too confusing. How about renaming _clear to _clear_all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269351</commentid>
    <comment_count>24</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-23 22:55:39 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Comment on attachment 299429 [details]
&gt; New patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=299429&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:33
&gt; &gt; +        (webkit_website_data_manager_remove): Remove the website data of the given types for the given WebKitWebsiteData list.
&gt; &gt; +        (webkit_website_data_manager_remove_finish):
&gt; &gt; +        (webkit_website_data_manager_clear): Clear all website data of the given types modified since the given time span.
&gt; &gt; +        (webkit_website_data_manager_clear_finish):
&gt; 
&gt; I realized the distinction between _remove and _clear is too confusing. How
&gt; about renaming _clear to _clear_all?

That&apos;s why it&apos;s documented :-) I find clear_all redundant and even more confusing, all what? all data types? of course that&apos;s why you pass the types to clear, all websites data? of course since you are not providing any. Doesn&apos;t clear implies all in English?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269353</commentid>
    <comment_count>25</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-23 23:50:08 -0800</bug_when>
    <thetext>Committed r211079: &lt;http://trac.webkit.org/changeset/211079&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256098</attachid>
            <date>2015-07-03 06:21:54 -0700</date>
            <delta_ts>2015-07-27 04:20:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-website-data-caches.diff</filename>
            <type>text/plain</type>
            <size>67740</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjY2Y3YjhlLi40OTgxZDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTAg
QEAKIDIwMTUtMDctMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIHRv
IGhhbmRsZSBjYWNoZWQgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ2NTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIG5ldyBtZXRob2RzIHRvIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciB0
byBhc3luY2hyb25vdXNseSBnZXQKKyAgICAgICAgb3JpZ2lucyBmcm9tIG1lbW9yeSBhbmQgZGlz
ayBjYWNoZSwgZGVsZXRlIG1lbW9yeSBhbmQgZGlzayBjYWNoZQorICAgICAgICBmb3IgYSBsaXN0
IG9mIG9yaWdpbnMsIGFuZCBjbGVhciBtZW1vcnkgYW5kIGRpc2sgY2FjaGVzLgorCisgICAgICAg
ICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlPcmlnaW4uY3BwOiBBZGRlZC4K
KyAgICAgICAgKF9XZWJLaXRTZWN1cml0eU9yaWdpbjo6X1dlYktpdFNlY3VyaXR5T3JpZ2luKToK
KyAgICAgICAgKHdlYmtpdFNlY3VyaXR5T3JpZ2luQ3JlYXRlKToKKyAgICAgICAgKHdlYmtpdFNl
Y3VyaXR5T3JpZ2luR2V0U2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5
X29yaWdpbl9uZXcpOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9yZWYpOgorICAg
ICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZik6CisgICAgICAgICh3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbCk6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9ob3N0KToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luUHJp
dmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hl
bWVSZXF1ZXN0LmNwcDoKKyAgICAgICAgKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfY2xhc3Nf
aW5pdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb3JpZ2lu
c19pbl9tZW1vcnlfY2FjaGUpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9vcmlnaW5zX2luX21lbW9yeV9jYWNoZV9maW5pc2gpOgorICAgICAgICAod2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnMpOgorICAg
ICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9y
X29yaWdpbnNfZmluaXNoKToKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9j
bGVhcl9tZW1vcnlfY2FjaGUpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2NsZWFyX21lbW9yeV9jYWNoZV9maW5pc2gpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rpc2tfY2FjaGUpOgorICAgICAgICAod2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rpc2tfY2FjaGVfZmluaXNoKToKKyAg
ICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfZGlza19jYWNoZV9mb3Jf
b3JpZ2lucyk6CisgICAgICAgICh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rp
c2tfY2FjaGVfZm9yX29yaWdpbnNfZmluaXNoKToKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlKToKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlX2ZpbmlzaCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC50eXBlczoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDoKKworMjAxNS0wNy0wMyAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgUkVHUkVTU0lPTihyMTg2MDI1KTog
W1NPVVBdIE5ldHdvcmtDYWNoZSBnZXRzIGJsb2NrZWQgaW4gdHJhdmVyc2Ugc2luY2UgcjE4NjAy
NQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2NTQ1
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNDYxMTgzYi4uY2QyOTk3MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTIxMCw2ICsyMTAsOSBAQCBsaXN0KEFQUEVORCBXZWJL
aXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZWN1cml0eU1hbmFnZXIu
Y3BwCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlNYW5hZ2VyLmgKICAgICBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZWN1cml0eU1hbmFnZXJQcml2YXRlLmgKKyAgICBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRTZWN1cml0eU9yaWdpbi5jcHAKKyAgICBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRTZWN1cml0eU9yaWdpbi5oCisgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
U2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0
aW5ncy5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oCiAgICAgVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3NQcml2YXRlLmgKQEAgLTM5MSw2ICszOTQsNyBA
QCBzZXQoV2ViS2l0MkdUS19JTlNUQUxMRURfSEVBREVSUwogICAgICR7V0VCS0lUMl9ESVJ9L1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uaAogICAgICR7V0VC
S0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNjcmlwdERpYWxvZy5oCiAgICAgJHtX
RUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlNYW5hZ2VyLmgKKyAg
ICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZWN1cml0eU9yaWdpbi5o
CiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaAog
ICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlcXVlc3QuaAog
ICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlc3BvbnNlLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3Vy
aXR5T3JpZ2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNl
Y3VyaXR5T3JpZ2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWJj
NTNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0U2VjdXJpdHlPcmlnaW4uY3BwCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRTZWN1cml0eU9yaWdpbi5oIgorCisjaW5jbHVkZSAiV2ViS2l0U2VjdXJpdHlPcmlnaW5Q
cml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCisvKioKKyAqIFNFQ1RJT046IFdlYktpdFNlY3VyaXR5T3JpZ2luCisgKiBA
U2hvcnRfZGVzY3JpcHRpb246IEEgc2VjdXJpdHkgYm91bmRhcnkgZm9yIFdlYnNpdGVzCisgKiBA
VGl0bGU6IFdlYktpdFNlY3VyaXR5T3JpZ2luCisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIsICNXZWJLaXRTZWN1cml0eU1hbmFnZXIKKyAqCisgKiBXZWJLaXRTZWN1cml0
eU9yaWdpbiBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGEgc2VjdXJpdHkgZG9tYWluIGRlZmluZWQK
KyAqIGJ5IFdlYnNpdGVzLiBBbiBvcmlnaW4gY29uc2lzdHMgb2YgYSBob3N0IG5hbWUsIGEgcHJv
dG9jb2wsIGFuZCBhIHBvcnQKKyAqIG51bWJlci4gV2Vic2l0ZXMgd2l0aCB0aGUgc2FtZSBzZWN1
cml0eSBvcmlnaW4gY2FuIGFjY2VzcyBlYWNoIG90aGVyJ3MKKyAqIHJlc291cmNlcyBmb3IgY2xp
ZW50LXNpZGUgc2NyaXB0aW5nIG9yIGRhdGFiYXNlIGFjY2Vzcy4KKyAqCisgKiBTaW5jZTogMi4x
MAorICovCisKK3N0cnVjdCBfV2ViS2l0U2VjdXJpdHlPcmlnaW4geworICAgIF9XZWJLaXRTZWN1
cml0eU9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogY29yZVNlY3VyaXR5T3JpZ2luKQor
ICAgICAgICA6IHNlY3VyaXR5T3JpZ2luKGNvcmVTZWN1cml0eU9yaWdpbikKKyAgICB7CisgICAg
fQorCisgICAgX1dlYktpdFNlY3VyaXR5T3JpZ2luKFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bj4mJiBjb3JlU2VjdXJpdHlPcmlnaW4pCisgICAgICAgIDogc2VjdXJpdHlPcmlnaW4oV1RGOjpt
b3ZlKGNvcmVTZWN1cml0eU9yaWdpbikpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW47CisgICAgQ1N0cmluZyBwcm90b2Nv
bDsKKyAgICBDU3RyaW5nIGhvc3Q7CisgICAgaW50IHJlZmVyZW5jZUNvdW50OworfTsKKworR19E
RUZJTkVfQk9YRURfVFlQRShXZWJLaXRTZWN1cml0eU9yaWdpbiwgd2Via2l0X3NlY3VyaXR5X29y
aWdpbiwgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9yZWYsIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5f
dW5yZWYpCisKK1dlYktpdFNlY3VyaXR5T3JpZ2luKiB3ZWJraXRTZWN1cml0eU9yaWdpbkNyZWF0
ZShXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogY29yZVNlY3VyaXR5T3JpZ2luKQoreworICAgIFdl
YktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBnX3NsaWNlX25ldyhXZWJLaXRTZWN1cml0eU9y
aWdpbik7CisgICAgbmV3IChvcmlnaW4pIFdlYktpdFNlY3VyaXR5T3JpZ2luKGNvcmVTZWN1cml0
eU9yaWdpbik7CisgICAgcmV0dXJuIG9yaWdpbjsKK30KKworV2ViS2l0U2VjdXJpdHlPcmlnaW4q
IHdlYmtpdFNlY3VyaXR5T3JpZ2luQ3JlYXRlKFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4m
JiBjb3JlU2VjdXJpdHlPcmlnaW4pCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdp
biA9IGdfc2xpY2VfbmV3KFdlYktpdFNlY3VyaXR5T3JpZ2luKTsKKyAgICBuZXcgKG9yaWdpbikg
V2ViS2l0U2VjdXJpdHlPcmlnaW4oV1RGOjptb3ZlKGNvcmVTZWN1cml0eU9yaWdpbikpOworICAg
IHJldHVybiBvcmlnaW47Cit9CisKK1dlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB3ZWJraXRTZWN1
cml0eU9yaWdpbkdldFNlY3VyaXR5T3JpZ2luKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
Cit7CisgICAgQVNTRVJUKG9yaWdpbik7CisgICAgcmV0dXJuICpvcmlnaW4tPnNlY3VyaXR5T3Jp
Z2luOworfQorCisvKioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3OgorICogQHByb3Rv
Y29sOiBUaGUgcHJvdG9jb2wgZm9yIHRoZSBuZXcgb3JpZ2luCisgKiBAaG9zdDogVGhlIGhvc3Qg
Zm9yIHRoZSBuZXcgb3JpZ2luCisgKiBAcG9ydDogVGhlIHBvcnQgbnVtYmVyIGZvciB0aGUgbmV3
IG9yaWdpbgorICoKKyAqIENyZWF0ZSBhIG5ldyBzZWN1cml0eSBvcmlnaW4gZnJvbSB0aGUgcHJv
dmlkZWQgcHJvdG9jb2wsIGhvc3QgYW5kIHBvcnQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IGZ1bGwpOiBBICNXZWJLaXRTZWN1cml0eU9yaWdpbi4KKyAqCisgKiBTaW5jZTogMi4xMAorICov
CitXZWJLaXRTZWN1cml0eU9yaWdpbiogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9uZXcoY29uc3Qg
Z2NoYXIqIHByb3RvY29sLCBjb25zdCBnY2hhciogaG9zdCwgZ3VpbnQgcG9ydCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChwcm90b2NvbCwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoaG9zdCwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gd2Via2l0U2VjdXJpdHlPcmln
aW5DcmVhdGUoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShTdHJpbmc6OmZyb21VVEY4
KHByb3RvY29sKSwgU3RyaW5nOjpmcm9tVVRGOChob3N0KSwgcG9ydCkpOworfQorCisvKioKKyAq
IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fcmVmOgorICogQG9yaWdpbjogYSAjV2ViS2l0U2VjdXJp
dHlPcmlnaW4KKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3Vu
dCBvZiBAb3JpZ2luIGJ5IG9uZS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgTVQtc2FmZSBhbmQgbWF5
IGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuCisgKgorICogUmV0dXJuczogVGhlIHBhc3NlZCAj
V2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBTaW5jZTogMi4xMAorICovCitXZWJLaXRTZWN1
cml0eU9yaWdpbiogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9yZWYoV2ViS2l0U2VjdXJpdHlPcmln
aW4qIG9yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChvcmlnaW4sIG51bGxwdHIp
OworCisgICAgZ19hdG9taWNfaW50X2luYygmb3JpZ2luLT5yZWZlcmVuY2VDb3VudCk7CisgICAg
cmV0dXJuIG9yaWdpbjsKK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3VucmVm
OgorICogQG9yaWdpbjogQSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBBdG9taWNhbGx5
IGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBAb3JpZ2luIGJ5IG9uZS4KKyAqIElm
IHRoZSByZWZlcmVuY2UgY291bnQgZHJvcHMgdG8gMCwgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkK
KyAqICNXZWJLaXRTZWN1cml0eU9yaWdpbiBpcyByZWxlYXNlZC4gVGhpcyBmdW5jdGlvbiBpcyBN
VC1zYWZlIGFuZCBtYXkgYmUKKyAqIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuCisgKgorICogU2lu
Y2U6IDIuMTAKKyAqLwordm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3VucmVmKFdlYktpdFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChvcmlnaW4pOwor
CisgICAgaWYgKGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QoJm9yaWdpbi0+cmVmZXJlbmNlQ291
bnQpKSB7CisgICAgICAgIG9yaWdpbi0+fldlYktpdFNlY3VyaXR5T3JpZ2luKCk7CisgICAgICAg
IGdfc2xpY2VfZnJlZShXZWJLaXRTZWN1cml0eU9yaWdpbiwgb3JpZ2luKTsKKyAgICB9Cit9CisK
Ky8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2w6CisgKiBAb3JpZ2lu
OiBhICNXZWJLaXRTZWN1cml0eU9yaWdpbgorICoKKyAqIEdldCB0aGUgcHJvdG9jb2wgb2YgQG9y
aWdpbgorICoKKyAqIFJldHVybnM6IFRoZSBwcm90b2NvbCBvZiB0aGUgI1dlYktpdFNlY3VyaXR5
T3JpZ2luLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbChXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9yaWdpbiwgbnVsbHB0cik7CisKKyAgICBpZiAo
b3JpZ2luLT5wcm90b2NvbC5pc051bGwoKSkKKyAgICAgICAgb3JpZ2luLT5wcm90b2NvbCA9IG9y
aWdpbi0+c2VjdXJpdHlPcmlnaW4tPnByb3RvY29sKCkudXRmOCgpOworICAgIHJldHVybiBvcmln
aW4tPnByb3RvY29sLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2lu
X2dldF9ob3N0OgorICogQG9yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBH
ZXQgdGhlIGhvc3Qgb2YgQG9yaWdpbgorICoKKyAqIFJldHVybnM6IFRoZSBob3N0IG9mIHRoZSAj
V2ViS2l0U2VjdXJpdHlPcmlnaW4uCisgKgorICogU2luY2U6IDIuMTAKKyAqLworY29uc3QgZ2No
YXIqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3QoV2ViS2l0U2VjdXJpdHlPcmlnaW4q
IG9yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChvcmlnaW4sIG51bGxwdHIpOwor
CisgICAgaWYgKG9yaWdpbi0+c2VjdXJpdHlPcmlnaW4tPmhvc3QoKS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKG9yaWdpbi0+aG9zdC5pc051bGwoKSkKKyAg
ICAgICAgb3JpZ2luLT5ob3N0ID0gb3JpZ2luLT5zZWN1cml0eU9yaWdpbi0+aG9zdCgpLnV0Zjgo
KTsKKyAgICByZXR1cm4gb3JpZ2luLT5ob3N0LmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0OgorICogQG9yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlP
cmlnaW4KKyAqCisgKiBHZXQgdGhlIHBvcnQgb2YgQG9yaWdpbgorICoKKyAqIFJldHVybnM6IFRo
ZSBwb3J0IG9mIHRoZSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4uCisgKgorICogU2luY2U6IDIuMgor
ICovCitndWludCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0KFdlYktpdFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob3JpZ2luLCAwKTsK
KworICAgIHJldHVybiBvcmlnaW4tPnNlY3VyaXR5T3JpZ2luLT5wb3J0KCk7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZWN1cml0eU9yaWdp
bi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlPcmln
aW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDU0ZDUyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJp
dHlPcmlnaW4uaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
V0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRTZWN1cml0
eU9yaWdpbl9oCisjZGVmaW5lIFdlYktpdFNlY3VyaXR5T3JpZ2luX2gKKworI2luY2x1ZGUgPGds
aWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVH
SU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4gKHdlYmtpdF9z
ZWN1cml0eV9vcmlnaW5fZ2V0X3R5cGUoKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNlY3Vy
aXR5T3JpZ2luIFdlYktpdFNlY3VyaXR5T3JpZ2luOworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfc2VjdXJpdHlfb3JpZ2luX2dldF90eXBlICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgV2Vi
S2l0U2VjdXJpdHlPcmlnaW4gKgord2Via2l0X3NlY3VyaXR5X29yaWdpbl9uZXcgICAgICAgICAg
KGNvbnN0IGdjaGFyICAgICAgICAgICpwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAqaG9zdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgcG9ydCk7CisKK1dF
QktJVF9BUEkgV2ViS2l0U2VjdXJpdHlPcmlnaW4gKgord2Via2l0X3NlY3VyaXR5X29yaWdpbl9y
ZWYgICAgICAgICAgKFdlYktpdFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fdW5yZWYgICAgICAgIChXZWJLaXRTZWN1cml0
eU9yaWdpbiAqb3JpZ2luKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbCAoV2ViS2l0U2VjdXJpdHlPcmlnaW4gKm9yaWdpbik7
CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRf
aG9zdCAgICAgKFdlYktpdFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pOworCitXRUJLSVRfQVBJIGd1
aW50Cit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0ICAgICAoV2ViS2l0U2VjdXJpdHlP
cmlnaW4gKm9yaWdpbik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRTZWN1cml0
eU9yaWdpbl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmRjNmM2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZWN1cml0eU9yaWdpblByaXZhdGUuaApAQCAt
MCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0U2VjdXJpdHlP
cmlnaW5Qcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4u
aD4KKworV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHdlYmtpdFNlY3VyaXR5T3JpZ2luQ3JlYXRlKFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luKik7CitXZWJLaXRTZWN1cml0eU9yaWdpbiogd2Via2l0U2Vj
dXJpdHlPcmlnaW5DcmVhdGUoUmVmPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiYmKTsKK1dlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luJiB3ZWJraXRTZWN1cml0eU9yaWdpbkdldFNlY3VyaXR5T3JpZ2lu
KFdlYktpdFNlY3VyaXR5T3JpZ2luKik7CisKKyNlbmRpZiAvLyBXZWJLaXRTZWN1cml0eU9yaWdp
blByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKaW5kZXggYjJhOWI4OS4uMGU5Nzg3
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCkBAIC0yMSw3ICsyMSw5IEBACiAjaW5jbHVk
ZSAiV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmgiCiAKICNpbmNsdWRlICJBUElXZWJzaXRlRGF0
YVN0b3JlLmgiCisjaW5jbHVkZSAiV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYnNp
dGVEYXRhUmVjb3JkLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW5jbHVk
ZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CkBA
IC00ODMsMyArNDg1LDMxNSBAQCBjb25zdCBnY2hhciogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5KFdlYktpdFdlYnNpdGVEYXRhTQogICAgICAgICBwcml2
LT53ZWJTUUxEaXJlY3RvcnkucmVzZXQoZ19zdHJkdXAoQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgcmV0
dXJuIHByaXYtPndlYlNRTERpcmVjdG9yeS5nZXQoKTsKIH0KKworLyoqCisgKiB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2NhY2hlOgorICogQG1hbmFn
ZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICogQGNhbmNlbGxhYmxlOiAoYWxsb3ct
bm9uZSk6IGEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTCB0byBpZ25vcmUKKyAqIEBjYWxsYmFjazog
KHNjb3BlIGFzeW5jKTogYSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJl
cXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHRoZSBkYXRhIHRv
IHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3luY2hyb25vdXNseSBnZXQgdGhl
IGxpc3Qgb2Ygb3JpZ2lucyBmb3Igd2hpY2ggdGhlIG1lbW9yeSBjYWNoZSBjb250YWlucyByZXNv
dXJjZXMuCisgKgorICogV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBAY2FsbGJhY2sg
d2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhlbiBjYWxsCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2NhY2hlX2ZpbmlzaCgpIHRvIGdldCB0aGUg
cmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKgorICogU2luY2U6IDIuMTAKKyAqLwordm9pZCB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2NhY2hlKFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJs
ZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdl
cikpOworCisgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1h
bmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKKyAgICBtYW5hZ2VyLT5w
cml2LT53ZWJzaXRlRGF0YVN0b3JlLT5mZXRjaERhdGEoV2Vic2l0ZURhdGFUeXBlTWVtb3J5Q2Fj
aGUsIFt0YXNrXSAoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiByZWNvcmRzKSB7CisgICAgICAg
IEdMaXN0KiBvcmlnaW5zID0gbnVsbHB0cjsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWNv
cmQgOiByZWNvcmRzKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG9yaWdpbiA6IHJl
Y29yZC5vcmlnaW5zKQorICAgICAgICAgICAgICAgIG9yaWdpbnMgPSBnX2xpc3RfcHJlcGVuZChv
cmlnaW5zLCB3ZWJraXRTZWN1cml0eU9yaWdpbkNyZWF0ZShvcmlnaW4uZ2V0KCkpKTsKKyAgICAg
ICAgfQorICAgICAgICBnX3Rhc2tfcmV0dXJuX3BvaW50ZXIodGFzay5nZXQoKSwgb3JpZ2lucywg
W10oZ3BvaW50ZXIgZGF0YSkgeworICAgICAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChzdGF0aWNf
Y2FzdDxHTGlzdCo+KGRhdGEpLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pih3ZWJr
aXRfc2VjdXJpdHlfb3JpZ2luX3VucmVmKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCisv
KioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb3JpZ2luc19pbl9tZW1vcnlf
Y2FjaGVfZmluaXNoOgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgor
ICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJldHVybiBsb2NhdGlvbiBm
b3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNoIGFuIGFzeW5jaHJvbm91
cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
b3JpZ2luc19pbl9tZW1vcnlfY2FjaGUoKS4KKyAqCisgKiBSZXR1cm5zOiAoZWxlbWVudC10eXBl
IFdlYktpdFNlY3VyaXR5T3JpZ2luKSAodHJhbnNmZXIgZnVsbCk6IGEgI0dMaXN0IG9mICNXZWJL
aXRTZWN1cml0eU9yaWdpbjwhLS0gLS0+cy4gWW91IG11c3QgZnJlZSB0aGUgI0dMaXN0IHdpdGgK
KyAqICAgIGdfbGlzdF9mcmVlKCkgYW5kIHVucmVmIHRoZSAjV2ViS2l0U2VjdXJpdHlPcmlnaW48
IS0tIC0tPnMgd2l0aCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3VucmVmKCkgd2hlbiB5b3UncmUg
ZG9uZSB3aXRoIHRoZW0uCisgKgorICogU2luY2U6IDIuMTAKKyAqLworR0xpc3QqIHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb3JpZ2luc19pbl9tZW1vcnlfY2FjaGVfZmluaXNoKFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdF
cnJvcioqIGVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJT
SVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3VsdCwgbWFuYWdlciksIG51bGxwdHIpOworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEdMaXN0Kj4oZ190YXNrX3Byb3BhZ2F0ZV9wb2ludGVyKEdfVEFT
SyhyZXN1bHQpLCBlcnJvcikpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9kZWxldGVfbWVtb3J5X2NhY2hlX2Zvcl9vcmlnaW5zOgorICogQG1hbmFnZXI6IGEgI1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICogQG9yaWdpbnM6IChlbGVtZW50LXR5cGUgV2ViS2l0
U2VjdXJpdHlPcmlnaW4pOiBhICNHTGlzdCBvZiAjV2ViS2l0U2VjdXJpdHlPcmlnaW48IS0tIC0t
PnMKKyAqIEBjYW5jZWxsYWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5V
TEwgdG8gaWdub3JlCisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5
Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJf
ZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisg
KgorICogQXN5bmNocm9ub3VzbHkgZGVsZXRlIHRoZSBtZW1vcnkgY2FjaGUgcmVzb3VyY2VzIGZv
ciB0aGUgZ2l2ZW4gQG9yaWdpbnMuCisgKiBVc2Ugd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2NsZWFyX21lbW9yeV9jYWNoZSgpIGlmIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUKKyAqIG1lbW9y
eSBjYWNoZSBmb3IgYWxsIG9yaWdpbnMuCisgKgorICogV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZp
bmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhlbiBjYWxsCisgKiB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX21lbW9yeV9jYWNoZV9mb3Jfb3JpZ2lu
c19maW5pc2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorICoKKyAqIFNp
bmNlOiAyLjEwCisgKi8KK3ZvaWQgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9t
ZW1vcnlfY2FjaGVfZm9yX29yaWdpbnMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2Vy
LCBHTGlzdCogb3JpZ2lucywgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlD
YWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlcikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwob3JpZ2lucyk7CisKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+IHJl
Y29yZHM7CisgICAgZm9yIChHTGlzdCogbGlzdCA9IG9yaWdpbnM7IGxpc3Q7IGxpc3QgPSBnX2xp
c3RfbmV4dChsaXN0KSkgeworICAgICAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0g
c3RhdGljX2Nhc3Q8V2ViS2l0U2VjdXJpdHlPcmlnaW4qPihsaXN0LT5kYXRhKTsKKyAgICAgICAg
V2Vic2l0ZURhdGFSZWNvcmQgcmVjb3JkOworICAgICAgICByZWNvcmQuYWRkKFdlYnNpdGVEYXRh
VHlwZU1lbW9yeUNhY2hlLCAmd2Via2l0U2VjdXJpdHlPcmlnaW5HZXRTZWN1cml0eU9yaWdpbihv
cmlnaW4pKTsKKyAgICAgICAgcmVjb3Jkcy5hcHBlbmQocmVjb3JkKTsKKyAgICB9CisKKyAgICBH
UmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2Vs
bGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworICAgIG1hbmFnZXItPnByaXYtPndlYnNpdGVE
YXRhU3RvcmUtPnJlbW92ZURhdGEoV2Vic2l0ZURhdGFUeXBlTWVtb3J5Q2FjaGUsIHJlY29yZHMs
IFt0YXNrXSB7CisgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVF
KTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVs
ZXRlX21lbW9yeV9jYWNoZV9mb3Jfb3JpZ2luc19maW5pc2g6CisgKiBAbWFuYWdlcjogYSAjV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBl
cnJvcjogcmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisg
KiBGaW5pc2ggYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnMoKS4KKyAq
CisgKiBSZXR1cm5zOiAlVFJVRSBpZiBtZW1vcnkgY2FjaGUgcmVzb3VyY2VzIHdlcmUgc3VjY2Vz
ZnVsbHkgZGVsZXRlZCwgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMi4xMAor
ICovCitnYm9vbGVhbiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX21lbW9yeV9j
YWNoZV9mb3Jfb3JpZ2luc19maW5pc2goV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2Vy
LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpLCBGQUxT
RSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3VsdCwgbWFu
YWdlciksIEZBTFNFKTsKKworICAgIHJldHVybiBnX3Rhc2tfcHJvcGFnYXRlX2Jvb2xlYW4oR19U
QVNLKHJlc3VsdCksIGVycm9yKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfY2xlYXJfbWVtb3J5X2NhY2hlOgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNpdGVE
YXRhTWFuYWdlcgorICogQGNhbmNlbGxhYmxlOiAoYWxsb3ctbm9uZSk6IGEgI0dDYW5jZWxsYWJs
ZSBvciAlTlVMTCB0byBpZ25vcmUKKyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0Fz
eW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisg
KiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVu
Y3Rpb24KKyAqCisgKiBBc3luY2hyb25vdXNseSBjbGVhciB0aGUgbWVtb3J5IGNhY2hlLgorICoK
KyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2Fs
bGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2Ns
ZWFyX21lbW9yeV9jYWNoZV9maW5pc2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0
aW9uLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK3ZvaWQgd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2NsZWFyX21lbW9yeV9jYWNoZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFn
ZXIsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJh
Y2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpKTsKKworICAgIEdSZWZQdHI8R1Rhc2s+IHRh
c2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ss
IHVzZXJEYXRhKSk7CisgICAgbWFuYWdlci0+cHJpdi0+d2Vic2l0ZURhdGFTdG9yZS0+cmVtb3Zl
RGF0YShXZWJzaXRlRGF0YVR5cGVNZW1vcnlDYWNoZSwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9j
azo6dGltZV9wb2ludDo6bWluKCksIFt0YXNrXSB7CisgICAgICAgIGdfdGFza19yZXR1cm5fYm9v
bGVhbih0YXNrLmdldCgpLCBUUlVFKTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfbWVtb3J5X2NhY2hlX2ZpbmlzaDoKKyAqIEBtYW5hZ2Vy
OiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3Vs
dAorICogQGVycm9yOiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9y
ZQorICoKKyAqIEZpbmlzaCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfbWVtb3J5X2NhY2hlKCkKKyAqCisgKiBS
ZXR1cm5zOiAlVFJVRSBpZiBtZW1vcnkgY2FjaGUgd2FzIHN1Y2Nlc2Z1bGx5IGNsZWFyZWQsIG9y
ICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMTAKKyAqLworZ2Jvb2xlYW4gd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX21lbW9yeV9jYWNoZV9maW5pc2goV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9y
KiogZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQlNJVEVf
REFUQV9NQU5BR0VSKG1hbmFnZXIpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
Z190YXNrX2lzX3ZhbGlkKHJlc3VsdCwgbWFuYWdlciksIEZBTFNFKTsKKworICAgIHJldHVybiBn
X3Rhc2tfcHJvcGFnYXRlX2Jvb2xlYW4oR19UQVNLKHJlc3VsdCksIGVycm9yKTsKK30KKworLyoq
CisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fZGlza19jYWNo
ZToKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEBjYW5jZWxs
YWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisg
KiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2Fs
bCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUp
OiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9u
b3VzbHkgZ2V0IHRoZSBsaXN0IG9mIG9yaWdpbnMgZm9yIHdoaWNoIHRoZSBIVFRQIGRpc2sgY2Fj
aGUgY29udGFpbnMgcmVzb3VyY2VzLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBzdXBw
b3J0ZWQgZm9yICNXZWJLaXRXZWJDb250ZXh0PCEtLSAtLT5zIHVzaW5nCisgKiAlV0VCS0lUX1BS
T0NFU1NfTU9ERUxfU0hBUkVEX1NFQ09OREFSWV9QUk9DRVNTIHByb2Nlc3MgbW9kZWwsIGFuIGVt
cHR5IGxpc3Qgd2lsbAorICogYWx3YXlzIGJlIHJldHVybmVkIGluIHN1Y2ggY2FzZS4KKyAqCisg
KiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNhbGxl
ZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
b3JpZ2luc19pbl9kaXNrX2NhY2hlX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBv
cGVyYXRpb24uCisgKgorICogU2luY2U6IDIuMTAKKyAqLwordm9pZCB3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fZGlza19jYWNoZShXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIqIG1hbmFnZXIsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpKTsKKworICAgIEdSZWZQ
dHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJs
ZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CisgICAgbWFuYWdlci0+cHJpdi0+d2Vic2l0ZURhdGFT
dG9yZS0+ZmV0Y2hEYXRhKFdlYnNpdGVEYXRhVHlwZURpc2tDYWNoZSwgW3Rhc2tdIChWZWN0b3I8
V2Vic2l0ZURhdGFSZWNvcmQ+IHJlY29yZHMpIHsKKyAgICAgICAgR0xpc3QqIG9yaWdpbnMgPSBu
dWxscHRyOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY29yZCA6IHJlY29yZHMpIHsKKyAg
ICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgb3JpZ2luIDogcmVjb3JkLm9yaWdpbnMpCisgICAg
ICAgICAgICAgICAgb3JpZ2lucyA9IGdfbGlzdF9wcmVwZW5kKG9yaWdpbnMsIHdlYmtpdFNlY3Vy
aXR5T3JpZ2luQ3JlYXRlKG9yaWdpbi5nZXQoKSkpOworICAgICAgICB9CisgICAgICAgIGdfdGFz
a19yZXR1cm5fcG9pbnRlcih0YXNrLmdldCgpLCBvcmlnaW5zLCBbXShncG9pbnRlciBkYXRhKSB7
CisgICAgICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKHN0YXRpY19jYXN0PEdMaXN0Kj4oZGF0YSks
IHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KHdlYmtpdF9zZWN1cml0eV9vcmlnaW5f
dW5yZWYpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rpc2tfY2FjaGVfZmluaXNoOgorICogQG1h
bmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICogQHJlc3VsdDogYSAjR0FzeW5j
UmVzdWx0CisgKiBAZXJyb3I6IHJldHVybiBsb2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8g
aWdub3JlCisgKgorICogRmluaXNoIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3
aXRoIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb3JpZ2luc19pbl9kaXNrX2NhY2hl
KCkuCisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBXZWJLaXRTZWN1cml0eU9yaWdpbikg
KHRyYW5zZmVyIGZ1bGwpOiBhICNHTGlzdCBvZiAjV2ViS2l0U2VjdXJpdHlPcmlnaW48IS0tIC0t
PnMuIFlvdSBtdXN0IGZyZWUgdGhlICNHTGlzdCB3aXRoCisgKiAgICBnX2xpc3RfZnJlZSgpIGFu
ZCB1bnJlZiB0aGUgI1dlYktpdFNlY3VyaXR5T3JpZ2luPCEtLSAtLT5zIHdpdGggd2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl91bnJlZigpIHdoZW4geW91J3JlIGRvbmUgd2l0aCB0aGVtLgorICoKKyAq
IFNpbmNlOiAyLjEwCisgKi8KK0dMaXN0KiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0
X29yaWdpbnNfaW5fZGlza19jYWNoZV9maW5pc2goV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBt
YW5hZ2VyLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIp
LCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVz
dWx0LCBtYW5hZ2VyKSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpc3Qq
PihnX3Rhc2tfcHJvcGFnYXRlX3BvaW50ZXIoR19UQVNLKHJlc3VsdCksIGVycm9yKSk7Cit9CisK
Ky8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9kaXNrX2NhY2hlX2Zv
cl9vcmlnaW5zOgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICog
QG9yaWdpbnM6IChlbGVtZW50LXR5cGUgV2ViS2l0U2VjdXJpdHlPcmlnaW4pOiBhICNHTGlzdCBv
ZiAjV2ViS2l0U2VjdXJpdHlPcmlnaW48IS0tIC0tPnMKKyAqIEBjYW5jZWxsYWJsZTogKGFsbG93
LW5vbmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBAY2FsbGJhY2s6
IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBy
ZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0YSB0
byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgZGVsZXRl
IHRoZSBIVFRQIGRpc2sgY2FjaGUgcmVzb3VyY2VzIGZvciB0aGUgZ2l2ZW4gQG9yaWdpbnMuCisg
KiBVc2Ugd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX2Rpc2tfY2FjaGVfZmluaXNo
KCkgaWYgeW91IHdhbnQgdG8gZGVsZXRlIHRoZQorICogZGlzayBjYWNoZSBmb3IgYWxsIG9yaWdp
bnMuCisgKgorICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgI1dlYktpdFdl
YkNvbnRleHQ8IS0tIC0tPnMgdXNpbmcKKyAqICVXRUJLSVRfUFJPQ0VTU19NT0RFTF9TSEFSRURf
U0VDT05EQVJZX1BST0NFU1MgcHJvY2VzcyBtb2RlbCwgb25seSBjbGVhcmluZyB0aGUKKyAqIGVu
dGlyZSBjYWNoZSBpcyBzdXBwb3J0ZWQgaW4gc3VjaCBjYXNlLgorICoKKyAqIFdoZW4gdGhlIG9w
ZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRo
ZW4gY2FsbAorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2Fj
aGVfZm9yX29yaWdpbnNfZmluaXNoKCkgdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlv
bi4KKyAqCisgKiBTaW5jZTogMi4xMAorICovCit2b2lkIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9kZWxldGVfZGlza19jYWNoZV9mb3Jfb3JpZ2lucyhXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIqIG1hbmFnZXIsIEdMaXN0KiBvcmlnaW5zLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBH
QXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbChvcmlnaW5zKTsKKworICAgIFZlY3RvcjxXZWJzaXRlRGF0
YVJlY29yZD4gcmVjb3JkczsKKyAgICBmb3IgKEdMaXN0KiBsaXN0ID0gb3JpZ2luczsgbGlzdDsg
bGlzdCA9IGdfbGlzdF9uZXh0KGxpc3QpKSB7CisgICAgICAgIFdlYktpdFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4gPSBzdGF0aWNfY2FzdDxXZWJLaXRTZWN1cml0eU9yaWdpbio+KGxpc3QtPmRhdGEp
OworICAgICAgICBXZWJzaXRlRGF0YVJlY29yZCByZWNvcmQ7CisgICAgICAgIHJlY29yZC5hZGQo
V2Vic2l0ZURhdGFUeXBlRGlza0NhY2hlLCAmd2Via2l0U2VjdXJpdHlPcmlnaW5HZXRTZWN1cml0
eU9yaWdpbihvcmlnaW4pKTsKKyAgICAgICAgcmVjb3Jkcy5hcHBlbmQocmVjb3JkKTsKKyAgICB9
CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdl
ciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworICAgIG1hbmFnZXItPnByaXYt
PndlYnNpdGVEYXRhU3RvcmUtPnJlbW92ZURhdGEoV2Vic2l0ZURhdGFUeXBlRGlza0NhY2hlLCBy
ZWNvcmRzLCBbdGFza10geworICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQo
KSwgVFJVRSk7CisgICAgfSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2RlbGV0ZV9kaXNrX2NhY2hlX2Zvcl9vcmlnaW5zX2ZpbmlzaDoKKyAqIEBtYW5hZ2VyOiBh
ICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAor
ICogQGVycm9yOiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQor
ICoKKyAqIEZpbmlzaCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rpc2tfY2FjaGVfZm9yX29yaWdpbnMoKS4K
KyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBIVFRQIGRpc2sgY2FjaGUgcmVzb3VyY2VzIHdlcmUg
c3VjY2VzZnVsbHkgZGVsZXRlZCwgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTog
Mi4xMAorICovCitnYm9vbGVhbiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rp
c2tfY2FjaGVfZm9yX29yaWdpbnNfZmluaXNoKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFu
YWdlciwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSwg
RkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19pc192YWxpZChyZXN1bHQs
IG1hbmFnZXIpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gZ190YXNrX3Byb3BhZ2F0ZV9ib29sZWFu
KEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7Cit9CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2NsZWFyX2Rpc2tfY2FjaGUKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIKKyAqIEBjYW5jZWxsYWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2VsbGFi
bGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dB
c3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAor
ICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1
bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgY2xlYXIgdGhlIEhUVFAgZGlzayBjYWNoZS4K
KyAqCisgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJl
IGNhbGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9jbGVhcl9kaXNrX2NhY2hlX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVy
YXRpb24uCisgKgorICogU2luY2U6IDIuMTAKKyAqLwordm9pZCB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfY2xlYXJfZGlza19jYWNoZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFn
ZXIsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJh
Y2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpKTsKKworICAgIEdSZWZQdHI8R1Rhc2s+IHRh
c2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ss
IHVzZXJEYXRhKSk7CisgICAgbWFuYWdlci0+cHJpdi0+d2Vic2l0ZURhdGFTdG9yZS0+cmVtb3Zl
RGF0YShXZWJzaXRlRGF0YVR5cGVEaXNrQ2FjaGUsIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6
OnRpbWVfcG9pbnQ6Om1pbigpLCBbdGFza10geworICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xl
YW4odGFzay5nZXQoKSwgVFJVRSk7CisgICAgfSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2NsZWFyX2Rpc2tfY2FjaGVfZmluaXNoOgorICogQG1hbmFnZXI6IGEg
I1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0Cisg
KiBAZXJyb3I6IHJldHVybiBsb2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisg
KgorICogRmluaXNoIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlKCkKKyAqCisgKiBSZXR1cm5z
OiAlVFJVRSBpZiBIVFRQIGRpc2sgY2FjaGUgd2FzIHN1Y2Nlc2Z1bGx5IGNsZWFyZWQsIG9yICVG
QUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMTAKKyAqLworZ2Jvb2xlYW4gd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX2Rpc2tfY2FjaGVfZmluaXNoKFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlciogbWFuYWdlciwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFf
TUFOQUdFUihtYW5hZ2VyKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFz
a19pc192YWxpZChyZXN1bHQsIG1hbmFnZXIpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gZ190YXNr
X3Byb3BhZ2F0ZV9ib29sZWFuKEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRh
TWFuYWdlci5oCmluZGV4IGU5ZDg1OTEuLmNiOWNlNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5o
CkBAIC0yNCw3ICsyNCw3IEBACiAjaWZuZGVmIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcl9oCiAj
ZGVmaW5lIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcl9oCiAKLSNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPGdpby9naW8uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmlu
ZXMuaD4KIAogR19CRUdJTl9ERUNMUwpAQCAtODIsNiArODIsNzEgQEAgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9pbmRleGVkZGJfZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2Vic2kKIFdFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgogd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsKIAorV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2NhY2hlICAgICAgICAgICAg
IChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2Vs
bGFibGUgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlD
YWxsYmFjayAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAg
ICAgICAgdXNlcl9kYXRhKTsKKworV0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2NhY2hlX2ZpbmlzaCAgICAgIChXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQg
ICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAg
ICoqIGVycm9yKTsKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnMgICAgICAgICAoV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpc3QgICAgICAgICAgICAgICAgICAg
ICpvcmlnaW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICpjYW5jZWxs
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgY2FsbGJhY2ssCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX21lbW9yeV9j
YWNoZV9mb3Jfb3JpZ2luc19maW5pc2ggIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFn
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9tZW1vcnlfY2FjaGUgICAgICAg
ICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50
ZXIgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfbWVtb3J5X2NhY2hlX2ZpbmlzaCAgICAg
ICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAg
ICAgICAgICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9nZXRfb3JpZ2luc19pbl9kaXNrX2NhY2hlICAgICAgICAgICAgICAg
KFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxs
YWJsZSAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNh
bGxiYWNrICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAg
ICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfb3JpZ2luc19pbl9kaXNrX2NhY2hlX2ZpbmlzaCAgICAgICAgKFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAg
ICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAg
KiplcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2RlbGV0ZV9kaXNrX2NhY2hlX2Zvcl9vcmlnaW5zICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpc3QgICAgICAgICAgICAgICAgICAg
ICpvcmlnaW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICpjYW5jZWxs
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgY2FsbGJhY2ssCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rpc2tfY2Fj
aGVfZm9yX29yaWdpbnNfZmluaXNoICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFn
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlICAgICAgICAg
ICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50
ZXIgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZGlza19jYWNoZV9maW5pc2ggICAgICAg
ICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAg
ICAgICAgICAgICAgICAgICoqZXJyb3IpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00
LjAtc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKaW5kZXggY2Q4NzBhNS4uYWIyYTc0OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQu
MC1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTExNDksNiArMTE0OSwyMyBAQCB3ZWJr
aXRfc2VjdXJpdHlfbWFuYWdlcl9nZXRfdHlwZQogPC9TRUNUSU9OPgogCiA8U0VDVElPTj4KKzxG
SUxFPldlYktpdFNlY3VyaXR5T3JpZ2luPC9GSUxFPgorV2ViS2l0U2VjdXJpdHlPcmlnaW4KK3dl
YmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3Cit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3JlZgord2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZgord2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJv
dG9jb2wKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3QKK3dlYmtpdF9zZWN1cml0eV9v
cmlnaW5fZ2V0X3BvcnQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXRUJLSVRfVFlQRV9TRUNV
UklUWV9PUklHSU4KKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9zZWN1cml0eV9vcmln
aW5fZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXI8L0ZJTEU+CiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKIHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9uZXcKQEAgLTExNTksNiArMTE3NiwxOCBAQCB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5CiB3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25fY2FjaGVfZGlyZWN0b3J5CiB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3RvcnkKIHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeQord2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX21lbW9yeV9jYWNoZQord2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX21lbW9yeV9jYWNoZV9maW5pc2gKK3dlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfbWVtb3J5X2NhY2hlX2Zvcl9vcmlnaW5zCit3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX21lbW9yeV9jYWNoZV9mb3Jfb3JpZ2luc19m
aW5pc2gKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9tZW1vcnlfY2FjaGUKK3dl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9tZW1vcnlfY2FjaGVfZmluaXNoCit3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fZGlza19jYWNoZQord2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rpc2tfY2FjaGVfZmluaXNoCit3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rpc2tfY2FjaGVfZm9yX29yaWdpbnMK
K3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfZGlza19jYWNoZV9mb3Jfb3JpZ2lu
c19maW5pc2gKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlCit3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZGlza19jYWNoZV9maW5pc2gKIAogPFNV
QlNFQ1RJT04gU3RhbmRhcmQ+CiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJDbGFzcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQu
MC50eXBlcyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay00LjAudHlwZXMKaW5kZXggYjUyNjQ2ZS4uN2U3NGY1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC50eXBlcworKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLnR5cGVz
CkBAIC0zMCwzICszMCw0IEBAIHdlYmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2dldF90eXBlCiB3ZWJr
aXRfdXNlcl9jb250ZW50X21hbmFnZXJfZ2V0X3R5cGUKIHdlYmtpdF93ZWJfaGl0X3Rlc3RfcmVz
dWx0X2dldF90eXBlCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3R5cGUKK3dlYmtp
dF9zZWN1cml0eV9vcmlnaW5fZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCmluZGV4IDM0ZDhm
ODcuLmMxMDRkOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApAQCAtNDksNiArNDksOCBAQAogICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRVc2VyQ29udGVudC54bWwiLz4KICAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0Tm90aWZpY2F0aW9uLnhtbCIvPgogICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXROb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC54bWwiLz4K
KyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0U2VjdXJpdHlPcmlnaW4ueG1sIi8+Cisg
ICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci54bWwiLz4K
ICAgPC9jaGFwdGVyPgogCiAgIDxjaGFwdGVyPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvd2Via2l0Mi5oCmluZGV4IDE0MzcxYjQuLjQxODBlMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdFNjcmlwdERpYWxvZy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2VjdXJp
dHlNYW5hZ2VyLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZWN1cml0eU9yaWdpbi5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlc3BvbnNlLmg+
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjBm
Y2RhOS4uNzc4ZjI4MCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE1LTA3LTAzICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgQVBJIHRvIFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciB0byBoYW5kbGUgY2FjaGVkIGRhdGEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjU4OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciBuZXcg
QVBJLCBhbmQgaW1wbGVtZW50IGFib3V0OmRhdGEgaW4KKyAgICAgICAgTWluaUJyb3dzb3JlIHRv
IHNob3cgYW5kIGhhbmRsZSBXZWJzaXRlIGRhdGEuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9n
dGsvbWFpbi5jOgorICAgICAgICAoY3JlYXRlQnJvd3NlcldpbmRvdyk6CisgICAgICAgIChhYm91
dERhdGFSZXF1ZXN0RnJlZSk6CisgICAgICAgIChhYm91dERhdGFSZXF1ZXN0TmV3KToKKyAgICAg
ICAgKGFib3V0RGF0YVJlcXVlc3RGb3JWaWV3KToKKyAgICAgICAgKG1lbW9yeUNhY2hlT3JpZ2lu
c0RlbGV0ZWRDYWxsYmFjayk6CisgICAgICAgIChtZW1vcnlDYWNoZUNsZWFyZWRDYWxsYmFjayk6
CisgICAgICAgIChkaXNrQ2FjaGVPcmlnaW5zRGVsZXRlZENhbGxiYWNrKToKKyAgICAgICAgKGRp
c2tDYWNoZUNsZWFyZWRDYWxsYmFjayk6CisgICAgICAgIChhYm91dERhdGFTY3JpcHRNZXNzYWdl
UmVjZWl2ZWRDYWxsYmFjayk6CisgICAgICAgIChhYm91dERhdGFGaWxsT3JpZ2luc1RhYmxlKToK
KyAgICAgICAgKGFib3V0RGF0YUhhbmRsZUZpbmlzaFJlcXVlc3RJZkNvbXBsZXRlKToKKyAgICAg
ICAgKGdvdE1lbW9yeUNhY2hlT3JpZ2luc0NhbGxiYWNrKToKKyAgICAgICAgKGdvdERpc2tDYWNo
ZU9yaWdpbnNDYWxsYmFjayk6CisgICAgICAgIChhYm91dERhdGFIYW5kbGVSZXF1ZXN0KToKKyAg
ICAgICAgKGFib3V0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrKToKKyAgICAgICAgKG1haW4pOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJzaXRlRGF0YVRlc3Q6OldlYnNpdGVEYXRhVGVzdCk6Cisg
ICAgICAgIChXZWJzaXRlRGF0YVRlc3Q6On5XZWJzaXRlRGF0YVRlc3QpOgorICAgICAgICAoV2Vi
c2l0ZURhdGFUZXN0OjpjbGVhck9yaWdpbnMpOgorICAgICAgICAoV2Vic2l0ZURhdGFUZXN0Ojpm
ZXRjaE9yaWdpbnNDYWxsYmFjayk6CisgICAgICAgIChXZWJzaXRlRGF0YVRlc3Q6OmZldGNoT3Jp
Z2lucyk6CisgICAgICAgIChXZWJzaXRlRGF0YVRlc3Q6OmRlbGV0ZU9yaWdpbnNDYWxsYmFjayk6
CisgICAgICAgIChXZWJzaXRlRGF0YVRlc3Q6OmRlbGV0ZU9yaWdpbnNBbmRXYWl0VW50aWxGaW5p
c2hlZCk6CisgICAgICAgIChXZWJzaXRlRGF0YVRlc3Q6OmRlbGV0ZUFsbE9yaWdpbnNDYWxsYmFj
ayk6CisgICAgICAgIChXZWJzaXRlRGF0YVRlc3Q6OmRlbGV0ZUFsbE9yaWdpbnNBbmRXYWl0VW50
aWxGaW5pc2hlZCk6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dFdlYnNpdGVEYXRhQ2FjaGUpOgor
ICAgICAgICAodGVzdFNlY3VyaXR5T3JpZ2luQmFzaWMpOgorICAgICAgICAoYmVmb3JlQWxsKToK
KyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQy
R3RrL1Rlc3RNYWluLmg6CisgICAgICAgIChUZXN0OjpUZXN0KTogQWRkIHByb2Nlc3MgbW9kZWwg
cGFyYW1ldGVyIHRvIGJlIGFibGUgdG8gY3JlYXRlCisgICAgICAgIHRlc3RzIHdpdGggYSBwYXJ0
aWN1bGFyIHByb2Nlc3MgbW9kZWwuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0
Mkd0ay9XZWJWaWV3VGVzdC5jcHA6CisgICAgICAgIChXZWJWaWV3VGVzdDo6V2ViVmlld1Rlc3Qp
OiBBZGQgY29uc3RydWN0b3IgdGhhdCByZWNlaXZlcyBhCisgICAgICAgIHByb2Nlc3MgbW9kZWwu
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5oOgor
CiAyMDE1LTA3LTAyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbaU9TXSBBZGQgV2ViS2l0U3lzdGVtSW50ZXJmYWNlIGZvciBpT1MgOC40CmRpZmYgLS1naXQg
YS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21h
aW4uYwppbmRleCBmNWY2ZTE3Li5kODk4NjcxIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nl
ci9ndGsvbWFpbi5jCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJjbWFrZWNvbmZpZy5oIgogCiAjaW5jbHVkZSAiQnJvd3Nlcldp
bmRvdy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KICNpbmNsdWRl
IDxlcnJuby5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAg
LTU4LDkgKzU5LDkgQEAgc3RhdGljIGdjaGFyICphcmd1bWVudFRvVVJMKGNvbnN0IGNoYXIgKmZp
bGVuYW1lKQogICAgIHJldHVybiBmaWxlVVJMOwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVCcm93
c2VyV2luZG93KGNvbnN0IGdjaGFyICp1cmksIFdlYktpdFNldHRpbmdzICp3ZWJraXRTZXR0aW5n
cykKK3N0YXRpYyB2b2lkIGNyZWF0ZUJyb3dzZXJXaW5kb3coY29uc3QgZ2NoYXIgKnVyaSwgV2Vi
S2l0U2V0dGluZ3MgKndlYmtpdFNldHRpbmdzLCBXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIgKnVz
ZXJDb250ZW50TWFuYWdlcikKIHsKLSAgICBHdGtXaWRnZXQgKndlYlZpZXcgPSB3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCk7CisgICAgR3RrV2lkZ2V0ICp3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25l
d193aXRoX3VzZXJfY29udGVudF9tYW5hZ2VyKHVzZXJDb250ZW50TWFuYWdlcik7CiAgICAgaWYg
KGVkaXRvck1vZGUpCiAgICAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfZWRpdGFibGUoV0VCS0lU
X1dFQl9WSUVXKHdlYlZpZXcpLCBUUlVFKTsKICAgICBHdGtXaWRnZXQgKm1haW5XaW5kb3cgPSBi
cm93c2VyX3dpbmRvd19uZXcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKQEAgLTIz
Miw4ICsyMzMsMTk3IEBAIHN0YXRpYyBnYm9vbGVhbiBhZGRTZXR0aW5nc0dyb3VwVG9Db250ZXh0
KEdPcHRpb25Db250ZXh0ICpjb250ZXh0LCBXZWJLaXRTZXR0aW5nCiAgICAgcmV0dXJuIFRSVUU7
CiB9CiAKLXN0YXRpYyB2b2lkCi1hYm91dFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjayhXZWJLaXRV
UklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0LCBncG9pbnRlciB1c2VyRGF0YSkKK3R5cGVkZWYgc3Ry
dWN0IHsKKyAgICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0OworICAgIEdMaXN0ICpt
ZW1vcnlDYWNoZU9yaWdpbnM7CisgICAgR0xpc3QgKmRpc2tDYWNoZU9yaWdpbnM7CisgICAgZ2Jv
b2xlYW4gZ290TWVtb3J5Q2FjaGVPcmlnaW5zOworICAgIGdib29sZWFuIGdvdERpc2tDYWNoZU9y
aWdpbnM7Cit9IEFib3V0RGF0YVJlcXVlc3Q7CisKK3N0YXRpYyBHSGFzaFRhYmxlICphYm91dERh
dGFSZXF1ZXN0TWFwOworCitzdGF0aWMgdm9pZCBhYm91dERhdGFSZXF1ZXN0RnJlZShBYm91dERh
dGFSZXF1ZXN0ICpyZXF1ZXN0KQoreworICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZ19saXN0X2ZyZWVfZnVsbChyZXF1ZXN0LT5tZW1vcnlDYWNoZU9yaWdpbnMsIChH
RGVzdHJveU5vdGlmeSl3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3VucmVmKTsKKyAgICBnX2xpc3Rf
ZnJlZV9mdWxsKHJlcXVlc3QtPmRpc2tDYWNoZU9yaWdpbnMsIChHRGVzdHJveU5vdGlmeSl3ZWJr
aXRfc2VjdXJpdHlfb3JpZ2luX3VucmVmKTsKKyAgICBpZiAocmVxdWVzdC0+cmVxdWVzdCkKKyAg
ICAgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdC0+cmVxdWVzdCk7CisKKyAgICBnX3NsaWNlX2Zy
ZWUoQWJvdXREYXRhUmVxdWVzdCwgcmVxdWVzdCk7Cit9CisKK3N0YXRpYyBBYm91dERhdGFSZXF1
ZXN0KiBhYm91dERhdGFSZXF1ZXN0TmV3KFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnVyaVJlcXVl
c3QpCit7CisgICAgaWYgKCFhYm91dERhdGFSZXF1ZXN0TWFwKQorICAgICAgICBhYm91dERhdGFS
ZXF1ZXN0TWFwID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfZGlyZWN0X2hhc2gsIGdfZGlyZWN0
X2VxdWFsLCBOVUxMLCAoR0Rlc3Ryb3lOb3RpZnkpYWJvdXREYXRhUmVxdWVzdEZyZWUpOworCisg
ICAgQWJvdXREYXRhUmVxdWVzdCAqcmVxdWVzdCA9IGdfc2xpY2VfbmV3MChBYm91dERhdGFSZXF1
ZXN0KTsKKyAgICByZXF1ZXN0LT5yZXF1ZXN0ID0gZ19vYmplY3RfcmVmKHVyaVJlcXVlc3QpOwor
ICAgIGdfaGFzaF90YWJsZV9pbnNlcnQoYWJvdXREYXRhUmVxdWVzdE1hcCwgR1VJTlRfVE9fUE9J
TlRFUih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVz
dF9nZXRfd2ViX3ZpZXcocmVxdWVzdC0+cmVxdWVzdCkpKSwgcmVxdWVzdCk7CisKKyAgICByZXR1
cm4gcmVxdWVzdDsKK30KKworc3RhdGljIEFib3V0RGF0YVJlcXVlc3QgKmFib3V0RGF0YVJlcXVl
c3RGb3JWaWV3KGd1aW50NjQgcGFnZUlEKQoreworICAgIHJldHVybiBhYm91dERhdGFSZXF1ZXN0
TWFwID8gZ19oYXNoX3RhYmxlX2xvb2t1cChhYm91dERhdGFSZXF1ZXN0TWFwLCBHVUlOVF9UT19Q
T0lOVEVSKHBhZ2VJRCkpIDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgbWVtb3J5Q2FjaGVPcmln
aW5zRGVsZXRlZENhbGxiYWNrKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwgR0Fz
eW5jUmVzdWx0ICpyZXN1bHQsIEFib3V0RGF0YVJlcXVlc3QgKnJlcXVlc3QpCit7CisgICAgaWYg
KHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfbWVtb3J5X2NhY2hlX2Zvcl9vcmln
aW5zX2ZpbmlzaChtYW5hZ2VyLCByZXN1bHQsIE5VTEwpKQorICAgICAgICB3ZWJraXRfd2ViX3Zp
ZXdfcmVsb2FkKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92aWV3KHJlcXVlc3Qt
PnJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQgbWVtb3J5Q2FjaGVDbGVhcmVkQ2FsbGJhY2so
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwg
QWJvdXREYXRhUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICBpZiAod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2NsZWFyX21lbW9yeV9jYWNoZV9maW5pc2gobWFuYWdlciwgcmVzdWx0LCBOVUxM
KSkKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1
ZXN0X2dldF93ZWJfdmlldyhyZXF1ZXN0LT5yZXF1ZXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGRp
c2tDYWNoZU9yaWdpbnNEZWxldGVkQ2FsbGJhY2soV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICpt
YW5hZ2VyLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgQWJvdXREYXRhUmVxdWVzdCAqcmVxdWVzdCkK
K3sKKyAgICBpZiAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9kaXNrX2NhY2hl
X2Zvcl9vcmlnaW5zX2ZpbmlzaChtYW5hZ2VyLCByZXN1bHQsIE5VTEwpKQorICAgICAgICB3ZWJr
aXRfd2ViX3ZpZXdfcmVsb2FkKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92aWV3
KHJlcXVlc3QtPnJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQgZGlza0NhY2hlQ2xlYXJlZENh
bGxiYWNrKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwgR0FzeW5jUmVzdWx0ICpy
ZXN1bHQsIEFib3V0RGF0YVJlcXVlc3QgKnJlcXVlc3QpCit7CisgICAgaWYgKHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlX2ZpbmlzaChtYW5hZ2VyLCByZXN1bHQs
IE5VTEwpKQorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkKHdlYmtpdF91cmlfc2NoZW1l
X3JlcXVlc3RfZ2V0X3dlYl92aWV3KHJlcXVlc3QtPnJlcXVlc3QpKTsKK30KKworc3RhdGljIHZv
aWQgYWJvdXREYXRhU2NyaXB0TWVzc2FnZVJlY2VpdmVkQ2FsbGJhY2soV2ViS2l0VXNlckNvbnRl
bnRNYW5hZ2VyICp1c2VyQ29udGVudE1hbmFnZXIsIFdlYktpdEphdmFzY3JpcHRSZXN1bHQgKm1l
c3NhZ2UpCit7CisgICAgSlNWYWx1ZVJlZiBqc1ZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVz
dWx0X2dldF92YWx1ZShtZXNzYWdlKTsKKyAgICBKU1N0cmluZ1JlZiBqc1N0cmluZyA9IEpTVmFs
dWVUb1N0cmluZ0NvcHkod2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4
dChtZXNzYWdlKSwganNWYWx1ZSwgTlVMTCk7CisgICAgc2l6ZV90IG1heFNpemUgPSBKU1N0cmlu
Z0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoanNTdHJpbmcpOworICAgIGlmICghbWF4U2l6ZSkg
eworICAgICAgICBKU1N0cmluZ1JlbGVhc2UoanNTdHJpbmcpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNoYXIgKm1lc3NhZ2VTdHJpbmcgPSBnX21hbGxvYyhtYXhTaXplKTsKKyAgICBK
U1N0cmluZ0dldFVURjhDU3RyaW5nKGpzU3RyaW5nLCBtZXNzYWdlU3RyaW5nLCBtYXhTaXplKTsK
KyAgICBKU1N0cmluZ1JlbGVhc2UoanNTdHJpbmcpOworCisgICAgY2hhciAqKnRva2VucyA9IGdf
c3Ryc3BsaXQobWVzc2FnZVN0cmluZywgIjoiLCAzKTsKKyAgICBnX2ZyZWUobWVzc2FnZVN0cmlu
Zyk7CisKKyAgICB1bnNpZ25lZCB0b2tlbkNvdW50ID0gZ19zdHJ2X2xlbmd0aCh0b2tlbnMpOwor
ICAgIGlmICghdG9rZW5zIHx8IHRva2VuQ291bnQgPCAyKSB7CisgICAgICAgIGdfc3RyZnJlZXYo
dG9rZW5zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGd1aW50NjQgcGFnZUlEID0g
Z19hc2NpaV9zdHJ0b3VsbCh0b2tlbnNbMV0sIE5VTEwsIDEwKTsKKyAgICBBYm91dERhdGFSZXF1
ZXN0ICpyZXF1ZXN0ID0gYWJvdXREYXRhUmVxdWVzdEZvclZpZXcocGFnZUlEKTsKKyAgICBpZiAo
IXJlcXVlc3QpIHsKKyAgICAgICAgZ19zdHJmcmVldih0b2tlbnMpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyID0gd2Via2l0
X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2RlZmF1bHQoKSk7CisgICAgaWYgKHRva2VuQ291bnQgPT0gMikgeworICAgICAgICBpZiAo
Z19zdHJfZXF1YWwodG9rZW5zWzBdLCAibWVtb3J5IikpCisgICAgICAgICAgICB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfbWVtb3J5X2NhY2hlKG1hbmFnZXIsIE5VTEwsIChHQXN5
bmNSZWFkeUNhbGxiYWNrKW1lbW9yeUNhY2hlQ2xlYXJlZENhbGxiYWNrLCByZXF1ZXN0KTsKKyAg
ICAgICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwodG9rZW5zWzBdLCAiZGlzayIpKQorICAgICAgICAg
ICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX2Rpc2tfY2FjaGUobWFuYWdlciwg
TlVMTCwgKEdBc3luY1JlYWR5Q2FsbGJhY2spZGlza0NhY2hlQ2xlYXJlZENhbGxiYWNrLCByZXF1
ZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBndWludDY0IG9yaWdpbklEID0gZ19hc2NpaV9z
dHJ0b3VsbCh0b2tlbnNbMl0sIE5VTEwsIDEwKTsKKyAgICAgICAgaWYgKGdfc3RyX2VxdWFsKHRv
a2Vuc1swXSwgIm1lbW9yeSIpKSB7CisgICAgICAgICAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiAq
b3JpZ2luID0gZ19saXN0X250aF9kYXRhKHJlcXVlc3QtPm1lbW9yeUNhY2hlT3JpZ2lucywgb3Jp
Z2luSUQpOworICAgICAgICAgICAgaWYgKG9yaWdpbikgeworICAgICAgICAgICAgICAgIEdMaXN0
IG9yaWdpbnMgPSB7IG9yaWdpbiwgTlVMTCwgTlVMTCB9OworICAgICAgICAgICAgICAgIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfbWVtb3J5X2NhY2hlX2Zvcl9vcmlnaW5zKG1h
bmFnZXIsICZvcmlnaW5zLCBOVUxMLCAoR0FzeW5jUmVhZHlDYWxsYmFjayltZW1vcnlDYWNoZU9y
aWdpbnNEZWxldGVkQ2FsbGJhY2ssIHJlcXVlc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHRva2Vuc1swXSwgImRpc2siKSkgeworICAgICAgICAgICAg
V2ViS2l0U2VjdXJpdHlPcmlnaW4gKm9yaWdpbiA9IGdfbGlzdF9udGhfZGF0YShyZXF1ZXN0LT5k
aXNrQ2FjaGVPcmlnaW5zLCBvcmlnaW5JRCk7CisgICAgICAgICAgICBpZiAob3JpZ2luKSB7Cisg
ICAgICAgICAgICAgICAgR0xpc3Qgb3JpZ2lucyA9IHsgb3JpZ2luLCBOVUxMLCBOVUxMIH07Cisg
ICAgICAgICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9kaXNrX2Nh
Y2hlX2Zvcl9vcmlnaW5zKG1hbmFnZXIsICZvcmlnaW5zLCBOVUxMLCAoR0FzeW5jUmVhZHlDYWxs
YmFjaylkaXNrQ2FjaGVPcmlnaW5zRGVsZXRlZENhbGxiYWNrLCByZXF1ZXN0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBnX3N0cmZyZWV2KHRva2Vucyk7Cit9CisKK3N0
YXRpYyB2b2lkIGFib3V0RGF0YUZpbGxPcmlnaW5zVGFibGUoR1N0cmluZyAqcmVzdWx0LCBHTGlz
dCAqb3JpZ2lucywgY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKmRhdGFUeXBlLCBndWlu
dDY0IHBhZ2VJRCkKK3sKKyAgICBpZiAoIW9yaWdpbnMpCisgICAgICAgIHJldHVybjsKKworICAg
IGdfc3RyaW5nX2FwcGVuZF9wcmludGYocmVzdWx0LCAiPGgxPiVzPC9oMT5cbjx0YWJsZT5cbiIs
IHRpdGxlKTsKKyAgICBHTGlzdCAqbDsKKyAgICB1bnNpZ25lZCBpbmRleDsKKyAgICBmb3IgKGwg
PSBvcmlnaW5zLCBpbmRleCA9IDA7IGw7IGwgPSBnX2xpc3RfbmV4dChsKSwgaW5kZXgrKykgewor
ICAgICAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gKFdlYktpdFNlY3VyaXR5T3Jp
Z2luICopbC0+ZGF0YTsKKyAgICAgICAgY2hhciAqZGlzcGxheU5hbWU7CisgICAgICAgIGlmICh3
ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0KG9yaWdpbikpCisgICAgICAgICAgICBkaXNw
bGF5TmFtZSA9IGdfc3RyZHVwX3ByaW50ZigiJXM6JXUiLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2lu
X2dldF9ob3N0KG9yaWdpbiksIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQob3JpZ2lu
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpc3BsYXlOYW1lID0gZ19zdHJkdXAod2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdChvcmlnaW4pKTsKKyAgICAgICAgZ19zdHJpbmdf
YXBwZW5kX3ByaW50ZihyZXN1bHQsICI8dHI+PHRkPiVzPC90ZD48dGQ+PGlucHV0IHR5cGU9XCJi
dXR0b25cIiB2YWx1ZT1cImNsZWFyXCIgb25jbGljaz1cImNsZWFyRGF0YSgnJXM6JSJHX0dVSU5U
NjRfRk9STUFUIjoldScpO1wiPjwvdGQ+PC90cj5cbiIsCisgICAgICAgICAgICBkaXNwbGF5TmFt
ZSwgZGF0YVR5cGUsIHBhZ2VJRCwgaW5kZXgpOworICAgICAgICBnX2ZyZWUoZGlzcGxheU5hbWUp
OworICAgIH0KKyAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmKHJlc3VsdCwgIjx0cj48dGQ+PGlu
cHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cImNsZWFyIGFsbFwiIG9uY2xpY2s9XCJjbGVhckRh
dGEoJyVzOiUiR19HVUlOVDY0X0ZPUk1BVCInKTtcIj48L3RkPjwvdHI+PC90YWJsZT5cbiIsCisg
ICAgICAgIGRhdGFUeXBlLCBwYWdlSUQpOworfQorCitzdGF0aWMgdm9pZCBhYm91dERhdGFIYW5k
bGVGaW5pc2hSZXF1ZXN0SWZDb21wbGV0ZShBYm91dERhdGFSZXF1ZXN0ICpyZXF1ZXN0KQorewor
ICAgIGlmICghcmVxdWVzdC0+Z290TWVtb3J5Q2FjaGVPcmlnaW5zIHx8ICFyZXF1ZXN0LT5nb3RE
aXNrQ2FjaGVPcmlnaW5zKQorICAgICAgICByZXR1cm47CisKKyAgICBHU3RyaW5nICpyZXN1bHQg
PSBnX3N0cmluZ19uZXcoCisgICAgICAgICI8aHRtbD48aGVhZD4iCisgICAgICAgICI8c2NyaXB0
PiIKKyAgICAgICAgIiAgZnVuY3Rpb24gY2xlYXJEYXRhKG9yaWdpbikgeyIKKyAgICAgICAgIiAg
ICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5hYm91dERhdGEucG9zdE1lc3NhZ2Uob3Jp
Z2luKTsiCisgICAgICAgICIgIH0iCisgICAgICAgICIgIGZ1bmN0aW9uIGNsZWFyQWxsRGF0YShk
YXRhVHlwZSkgeyIKKyAgICAgICAgIiAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5h
Ym91dERhdGEucG9zdE1lc3NhZ2UoZGF0YVR5cGUpOyIKKyAgICAgICAgIiAgfSIKKyAgICAgICAg
Ijwvc2NyaXB0PjwvaGVhZD48Ym9keT5cbiIpOworCisgICAgZ3VpbnQ2NCBwYWdlSUQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfd2Vi
X3ZpZXcocmVxdWVzdC0+cmVxdWVzdCkpOworICAgIGFib3V0RGF0YUZpbGxPcmlnaW5zVGFibGUo
cmVzdWx0LCByZXF1ZXN0LT5tZW1vcnlDYWNoZU9yaWdpbnMsICJNZW1vcnkgQ2FjaGUiLCAibWVt
b3J5IiwgcGFnZUlEKTsKKyAgICBhYm91dERhdGFGaWxsT3JpZ2luc1RhYmxlKHJlc3VsdCwgcmVx
dWVzdC0+ZGlza0NhY2hlT3JpZ2lucywgIkRpc2sgQ2FjaGUiLCAiZGlzayIsIHBhZ2VJRCk7CisK
KyAgICByZXN1bHQgPSBnX3N0cmluZ19hcHBlbmQocmVzdWx0LCAiPC9ib2R5PjwvaHRtbD4iKTsK
KyAgICBnc2l6ZSBzdHJlYW1MZW5ndGggPSByZXN1bHQtPmxlbjsKKyAgICBHSW5wdXRTdHJlYW0g
KnN0cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXdfZnJvbV9kYXRhKGdfc3RyaW5nX2Zy
ZWUocmVzdWx0LCBGQUxTRSksIHN0cmVhbUxlbmd0aCwgZ19mcmVlKTsKKyAgICB3ZWJraXRfdXJp
X3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaChyZXF1ZXN0LT5yZXF1ZXN0LCBzdHJlYW0sIHN0cmVhbUxl
bmd0aCwgInRleHQvaHRtbCIpOworfQorCitzdGF0aWMgdm9pZCBnb3RNZW1vcnlDYWNoZU9yaWdp
bnNDYWxsYmFjayhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jlc3Vs
dCAqcmVzdWx0LCBBYm91dERhdGFSZXF1ZXN0ICpyZXF1ZXN0KQoreworICAgIHJlcXVlc3QtPmdv
dE1lbW9yeUNhY2hlT3JpZ2lucyA9IFRSVUU7CisgICAgcmVxdWVzdC0+bWVtb3J5Q2FjaGVPcmln
aW5zID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX21lbW9yeV9j
YWNoZV9maW5pc2gobWFuYWdlciwgcmVzdWx0LCBOVUxMKTsKKyAgICBhYm91dERhdGFIYW5kbGVG
aW5pc2hSZXF1ZXN0SWZDb21wbGV0ZShyZXF1ZXN0KTsKK30KKworc3RhdGljIHZvaWQgZ290RGlz
a0NhY2hlT3JpZ2luc0NhbGxiYWNrKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwg
R0FzeW5jUmVzdWx0ICpyZXN1bHQsIEFib3V0RGF0YVJlcXVlc3QgKnJlcXVlc3QpCit7CisgICAg
cmVxdWVzdC0+Z290RGlza0NhY2hlT3JpZ2lucyA9IFRSVUU7CisgICAgcmVxdWVzdC0+ZGlza0Nh
Y2hlT3JpZ2lucyA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb3JpZ2luc19pbl9k
aXNrX2NhY2hlX2ZpbmlzaChtYW5hZ2VyLCByZXN1bHQsIE5VTEwpOworICAgIGFib3V0RGF0YUhh
bmRsZUZpbmlzaFJlcXVlc3RJZkNvbXBsZXRlKHJlcXVlc3QpOworfQorCitzdGF0aWMgdm9pZCBh
Ym91dERhdGFIYW5kbGVSZXF1ZXN0KFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QpCit7
CisgICAgQWJvdXREYXRhUmVxdWVzdCAqZGF0YVJlcXVlc3QgPSBhYm91dERhdGFSZXF1ZXN0TmV3
KHJlcXVlc3QpOworICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb3JpZ2luc19p
bl9tZW1vcnlfY2FjaGUod2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdl
cih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSksCisgICAgICAgIE5VTEwsIChHQXN5
bmNSZWFkeUNhbGxiYWNrKWdvdE1lbW9yeUNhY2hlT3JpZ2luc0NhbGxiYWNrLCBkYXRhUmVxdWVz
dCk7CisgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rpc2tf
Y2FjaGUod2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSksCisgICAgICAgIE5VTEwsIChHQXN5bmNSZWFkeUNh
bGxiYWNrKWdvdERpc2tDYWNoZU9yaWdpbnNDYWxsYmFjaywgZGF0YVJlcXVlc3QpOworfQorCitz
dGF0aWMgdm9pZCBhYm91dFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjayhXZWJLaXRVUklTY2hlbWVS
ZXF1ZXN0ICpyZXF1ZXN0LCBncG9pbnRlciB1c2VyRGF0YSkKIHsKICAgICBHSW5wdXRTdHJlYW0g
KnN0cmVhbTsKICAgICBnc2l6ZSBzdHJlYW1MZW5ndGg7CkBAIC0yNTIsNyArNDQyLDkgQEAgYWJv
dXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVz
dCwgZ3BvaW50ZXIgdXNlckRhdGEKIAogICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0
X2ZpbmlzaChyZXF1ZXN0LCBzdHJlYW0sIHN0cmVhbUxlbmd0aCwgInRleHQvaHRtbCIpOwogICAg
ICAgICBnX29iamVjdF91bnJlZihzdHJlYW0pOwotICAgIH0gZWxzZSB7CisgICAgfSBlbHNlIGlm
ICghZ19zdHJjbXAwKHBhdGgsICJkYXRhIikpCisgICAgICAgIGFib3V0RGF0YUhhbmRsZVJlcXVl
c3QocmVxdWVzdCk7CisgICAgZWxzZSB7CiAgICAgICAgIGVycm9yID0gZ19lcnJvcl9uZXcoTUlO
SV9CUk9XU0VSX0VSUk9SLCBNSU5JX0JST1dTRVJfRVJST1JfSU5WQUxJRF9BQk9VVF9QQVRILCAi
SW52YWxpZCBhYm91dDolcyBwYWdlLiIsIHBhdGgpOwogICAgICAgICB3ZWJraXRfdXJpX3NjaGVt
ZV9yZXF1ZXN0X2ZpbmlzaF9lcnJvcihyZXF1ZXN0LCBlcnJvcik7CiAgICAgICAgIGdfZXJyb3Jf
ZnJlZShlcnJvcik7CkBAIC0yOTUsMTMgKzQ4NywxNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hh
ciAqYXJndltdKQogCiAgICAgd2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUo
d2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIG1pbmlCcm93c2VyQWJvdXRTY2hlbWUs
IGFib3V0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrLCBOVUxMLCBOVUxMKTsKIAorICAgIFdlYktp
dFVzZXJDb250ZW50TWFuYWdlciAqdXNlckNvbnRlbnRNYW5hZ2VyID0gd2Via2l0X3VzZXJfY29u
dGVudF9tYW5hZ2VyX25ldygpOworICAgIHdlYmtpdF91c2VyX2NvbnRlbnRfbWFuYWdlcl9yZWdp
c3Rlcl9zY3JpcHRfbWVzc2FnZV9oYW5kbGVyKHVzZXJDb250ZW50TWFuYWdlciwgImFib3V0RGF0
YSIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodXNlckNvbnRlbnRNYW5hZ2VyLCAic2NyaXB0LW1l
c3NhZ2UtcmVjZWl2ZWQ6OmFib3V0RGF0YSIsIEdfQ0FMTEJBQ0soYWJvdXREYXRhU2NyaXB0TWVz
c2FnZVJlY2VpdmVkQ2FsbGJhY2spLCBOVUxMKTsKKwogICAgIGlmICh1cmlBcmd1bWVudHMpIHsK
ICAgICAgICAgaW50IGk7CiAKICAgICAgICAgZm9yIChpID0gMDsgdXJpQXJndW1lbnRzW2ldOyBp
KyspCi0gICAgICAgICAgICBjcmVhdGVCcm93c2VyV2luZG93KHVyaUFyZ3VtZW50c1tpXSwgd2Vi
a2l0U2V0dGluZ3MpOworICAgICAgICAgICAgY3JlYXRlQnJvd3NlcldpbmRvdyh1cmlBcmd1bWVu
dHNbaV0sIHdlYmtpdFNldHRpbmdzLCB1c2VyQ29udGVudE1hbmFnZXIpOwogICAgIH0gZWxzZQot
ICAgICAgICBjcmVhdGVCcm93c2VyV2luZG93KEJST1dTRVJfREVGQVVMVF9VUkwsIHdlYmtpdFNl
dHRpbmdzKTsKKyAgICAgICAgY3JlYXRlQnJvd3NlcldpbmRvdyhCUk9XU0VSX0RFRkFVTFRfVVJM
LCB3ZWJraXRTZXR0aW5ncywgdXNlckNvbnRlbnRNYW5hZ2VyKTsKIAogICAgIGdfY2xlYXJfb2Jq
ZWN0KCZ3ZWJraXRTZXR0aW5ncyk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDk2
YTM0YjEuLjkyN2E2YjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogc3RhdGljIFdlYktpdFRl
c3RTZXJ2ZXIqIGtTZXJ2ZXI7CitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga0h0dHBzU2VydmVy
OwogCiBzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQoVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKIHsKQEAgLTU0OSwxMSArNTUwLDI0MiBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViQ29u
dGV4dFNlY3VyaXR5RmlsZVhIUihXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2FsbG93X2ZpbGVfYWNjZXNzX2Zyb21fZmlsZV91cmxzKHdl
YmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgRkFMU0UpOwogfQog
CitjbGFzcyBXZWJzaXRlRGF0YVRlc3QgOiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgor
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoV2Vic2l0ZURhdGFUZXN0KTsKKworICAgIGVudW0g
Y2xhc3MgRGF0YVR5cGUgeworICAgICAgICBNZW1vcnlDYWNoZSwKKyAgICAgICAgRGlza0NhY2hl
CisgICAgfTsKKworICAgIFdlYnNpdGVEYXRhVGVzdCgpCisgICAgICAgIDogV2ViVmlld1Rlc3Qo
V0VCS0lUX1BST0NFU1NfTU9ERUxfTVVMVElQTEVfU0VDT05EQVJZX1BST0NFU1NFUykKKyAgICAg
ICAgLCBtX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdl
cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSkpCisgICAgICAgICwgbV9k
YXRhVHlwZShEYXRhVHlwZTo6TWVtb3J5Q2FjaGUpCisgICAgICAgICwgbV9vcmlnaW5zKG51bGxw
dHIpCisgICAgeworICAgIH0KKworICAgIH5XZWJzaXRlRGF0YVRlc3QoKQorICAgIHsKKyAgICAg
ICAgY2xlYXJPcmlnaW5zKCk7CisgICAgfQorCisgICAgdm9pZCBjbGVhck9yaWdpbnMoKQorICAg
IHsKKyAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChtX29yaWdpbnMsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0Rlc3Ryb3lOb3RpZnk+KHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fdW5yZWYpKTsKKyAgICAgICAg
bV9vcmlnaW5zID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmZXRjaE9yaWdp
bnNDYWxsYmFjayhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIsIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBXZWJzaXRlRGF0YVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHRlc3QtPm1fZGF0YVR5cGUpIHsKKyAgICAgICAgY2FzZSBEYXRhVHlwZTo6TWVtb3J5Q2FjaGU6
CisgICAgICAgICAgICB0ZXN0LT5tX29yaWdpbnMgPSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2NhY2hlX2ZpbmlzaChtYW5hZ2VyLCByZXN1bHQsIG51
bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0YVR5cGU6OkRpc2tD
YWNoZToKKyAgICAgICAgICAgIHRlc3QtPm1fb3JpZ2lucyA9IHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9nZXRfb3JpZ2luc19pbl9kaXNrX2NhY2hlX2ZpbmlzaChtYW5hZ2VyLCByZXN1bHQs
IG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICB9CisgICAgICAgIHRlc3QtPnF1
aXRNYWluTG9vcCgpOworICAgIH0KKworICAgIEdMaXN0KiBmZXRjaE9yaWdpbnMoRGF0YVR5cGUg
ZGF0YVR5cGUpCisgICAgeworICAgICAgICBjbGVhck9yaWdpbnMoKTsKKyAgICAgICAgbV9kYXRh
VHlwZSA9IGRhdGFUeXBlOworICAgICAgICBzd2l0Y2ggKG1fZGF0YVR5cGUpIHsKKyAgICAgICAg
Y2FzZSBEYXRhVHlwZTo6TWVtb3J5Q2FjaGU6CisgICAgICAgICAgICB3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2NhY2hlKG1fbWFuYWdlciwgbnVsbHB0
ciwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihmZXRjaE9yaWdpbnNDYWxs
YmFjayksIHRoaXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0YVR5cGU6
OkRpc2tDYWNoZToKKyAgICAgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
b3JpZ2luc19pbl9kaXNrX2NhY2hlKG1fbWFuYWdlciwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2Fz
dDxHQXN5bmNSZWFkeUNhbGxiYWNrPihmZXRjaE9yaWdpbnNDYWxsYmFjayksIHRoaXMpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnX2Fzc2VydF9u
b3RfcmVhY2hlZCgpOworICAgICAgICB9CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKKyAgICAgICAgcmV0dXJuIG1fb3JpZ2luczsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCBkZWxldGVPcmlnaW5zQ2FsbGJhY2soV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2Vy
LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2Vic2l0ZURhdGFUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgc3dpdGNoICh0ZXN0LT5tX2RhdGFUeXBlKSB7CisgICAgICAgIGNhc2UgRGF0YVR5cGU6
Ok1lbW9yeUNhY2hlOgorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnNfZmluaXNoKG1hbmFnZXIsIHJl
c3VsdCwgbnVsbHB0cikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0YVR5
cGU6OkRpc2tDYWNoZToKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9kZWxldGVfZGlza19jYWNoZV9mb3Jfb3JpZ2luc19maW5pc2gobWFuYWdlciwgcmVz
dWx0LCBudWxscHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgdGVz
dC0+cXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgdm9pZCBkZWxldGVPcmlnaW5zQW5kV2Fp
dFVudGlsRmluaXNoZWQoRGF0YVR5cGUgZGF0YVR5cGUsIEdMaXN0KiBvcmlnaW5zKQorICAgIHsK
KyAgICAgICAgbV9kYXRhVHlwZSA9IGRhdGFUeXBlOworICAgICAgICBzd2l0Y2ggKG1fZGF0YVR5
cGUpIHsKKyAgICAgICAgY2FzZSBEYXRhVHlwZTo6TWVtb3J5Q2FjaGU6CisgICAgICAgICAgICB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX21lbW9yeV9jYWNoZV9mb3Jfb3JpZ2lu
cyhtX21hbmFnZXIsIG9yaWdpbnMsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVh
ZHlDYWxsYmFjaz4oZGVsZXRlT3JpZ2luc0NhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBEYXRhVHlwZTo6RGlza0NhY2hlOgorICAgICAgICAgICAgd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9kaXNrX2NhY2hlX2Zvcl9vcmlnaW5zKG1f
bWFuYWdlciwgb3JpZ2lucywgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNh
bGxiYWNrPihkZWxldGVPcmlnaW5zQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsK
KyAgICAgICAgfQorICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgZGVsZXRlQWxsT3JpZ2luc0NhbGxiYWNrKFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlciogbWFuYWdlciwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYnNpdGVEYXRhVGVz
dCogdGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGVzdC0+bV9kYXRhVHlwZSkgeworICAg
ICAgICBjYXNlIERhdGFUeXBlOjpNZW1vcnlDYWNoZToKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9tZW1vcnlfY2FjaGVfZmluaXNoKG1hbmFn
ZXIsIHJlc3VsdCwgbnVsbHB0cikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RGF0YVR5cGU6OkRpc2tDYWNoZToKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlX2ZpbmlzaChtYW5hZ2VyLCByZXN1bHQsIG51
bGxwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgfQorICAgICAgICB0ZXN0LT5xdWl0
TWFpbkxvb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGRlbGV0ZUFsbE9yaWdpbnNBbmRXYWl0VW50
aWxGaW5pc2hlZChEYXRhVHlwZSBkYXRhVHlwZSkKKyAgICB7CisgICAgICAgIG1fZGF0YVR5cGUg
PSBkYXRhVHlwZTsKKyAgICAgICAgc3dpdGNoIChtX2RhdGFUeXBlKSB7CisgICAgICAgIGNhc2Ug
RGF0YVR5cGU6Ok1lbW9yeUNhY2hlOgorICAgICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2NsZWFyX21lbW9yeV9jYWNoZShtX21hbmFnZXIsIG51bGxwdHIsIHJlaW50ZXJwcmV0
X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oZGVsZXRlQWxsT3JpZ2luc0NhbGxiYWNrKSwgdGhp
cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhVHlwZTo6RGlza0NhY2hl
OgorICAgICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX2Rpc2tfY2Fj
aGUobV9tYW5hZ2VyLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJh
Y2s+KGRlbGV0ZUFsbE9yaWdpbnNDYWxsYmFjayksIHRoaXMpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwor
ICAgICAgICB9CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisK
KyAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1fbWFuYWdlcjsKKyAgICBEYXRhVHlwZSBt
X2RhdGFUeXBlOworICAgIEdMaXN0KiBtX29yaWdpbnM7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0
V2ViQ29udGV4dFdlYnNpdGVEYXRhQ2FjaGUoV2Vic2l0ZURhdGFUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSBvcmlnaW5hbFBvbGljeSA9IHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV93ZWJDb250ZXh0
LmdldCgpKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHRl
c3QtPm1fd2ViQ29udGV4dC5nZXQoKSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7
CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lbXB0eSIpLmRh
dGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5s
b2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2VtcHR5IikuZGF0YSgpKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4g
ZmlsZVVSTChnX3N0cmR1cF9wcmludGYoImZpbGU6Ly8lcy9zaW1wbGUuaHRtbCIsIFRlc3Q6Omdl
dFJlc291cmNlc0RpcihUZXN0OjpXZWJLaXQyUmVzb3VyY2VzKS5kYXRhKCkpKTsKKyAgICB0ZXN0
LT5sb2FkVVJJKGZpbGVVUkwuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworCisgICAgR0xpc3QqIG9yaWdpbnMgPSB0ZXN0LT5mZXRjaE9yaWdpbnMoV2Vic2l0ZURh
dGFUZXN0OjpEYXRhVHlwZTo6TWVtb3J5Q2FjaGUpOworICAgIGdfYXNzZXJ0KG9yaWdpbnMpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKG9yaWdpbnMpLCA9PSwgMyk7CisgICAg
V2ViS2l0U2VjdXJpdHlPcmlnaW4qIGh0dHBPcmlnaW4gPSBudWxscHRyOworICAgIGZvciAoR0xp
c3QqIGwgPSBvcmlnaW5zOyBsOyBsID0gZ19saXN0X25leHQobCkpIHsKKyAgICAgICAgV2ViS2l0
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHN0YXRpY19jYXN0PFdlYktpdFNlY3VyaXR5T3JpZ2lu
Kj4obC0+ZGF0YSk7CisgICAgICAgIGNvbnN0IGNoYXIqIHByb3RvY29sID0gd2Via2l0X3NlY3Vy
aXR5X29yaWdpbl9nZXRfcHJvdG9jb2wob3JpZ2luKTsKKyAgICAgICAgZ19hc3NlcnQocHJvdG9j
b2wpOworICAgICAgICBpZiAoZ19zdHJfZXF1YWwocHJvdG9jb2wsICJodHRwIikpIHsKKyAgICAg
ICAgICAgIGh0dHBPcmlnaW4gPSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3JlZihvcmlnaW4pOwor
ICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hv
c3Qob3JpZ2luKSwgPT0sIGtTZXJ2ZXItPmJhc2VVUkkoKS0+aG9zdCk7CisgICAgICAgICAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChvcmlnaW4pLCA9
PSwga1NlcnZlci0+YmFzZVVSSSgpLT5wb3J0KTsKKyAgICAgICAgfSBlbHNlIGlmIChnX3N0cl9l
cXVhbChwcm90b2NvbCwgImh0dHBzIikpIHsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KG9yaWdpbiksID09LCBrSHR0cHNTZXJ2ZXIt
PmJhc2VVUkkoKS0+aG9zdCk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9nZXRfcG9ydChvcmlnaW4pLCA9PSwga0h0dHBzU2VydmVyLT5iYXNlVVJJ
KCktPnBvcnQpOworICAgICAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHByb3RvY29sLCAiZmls
ZSIpKSB7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRf
aG9zdChvcmlnaW4pKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX2dldF9wb3J0KG9yaWdpbiksID09LCAwKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KKworICAgIGdfYXNzZXJ0KGh0
dHBPcmlnaW4pOworICAgIEdMaXN0IG9yaWdpbnNUb0RlbGV0ZSA9IHsgaHR0cE9yaWdpbiwgbnVs
bHB0ciwgbnVsbHB0ciB9OworICAgIHRlc3QtPmRlbGV0ZU9yaWdpbnNBbmRXYWl0VW50aWxGaW5p
c2hlZChXZWJzaXRlRGF0YVRlc3Q6OkRhdGFUeXBlOjpNZW1vcnlDYWNoZSwgJm9yaWdpbnNUb0Rl
bGV0ZSk7CisgICAgd2Via2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZihodHRwT3JpZ2luKTsKKyAg
ICBvcmlnaW5zID0gdGVzdC0+ZmV0Y2hPcmlnaW5zKFdlYnNpdGVEYXRhVGVzdDo6RGF0YVR5cGU6
Ok1lbW9yeUNhY2hlKTsKKyAgICBnX2Fzc2VydChvcmlnaW5zKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZ19saXN0X2xlbmd0aChvcmlnaW5zKSwgPT0sIDIpOworICAgIGZvciAoR0xpc3QqIGwgPSBv
cmlnaW5zOyBsOyBsID0gZ19saXN0X25leHQobCkpIHsKKyAgICAgICAgV2ViS2l0U2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiA9IHN0YXRpY19jYXN0PFdlYktpdFNlY3VyaXR5T3JpZ2luKj4obC0+ZGF0
YSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9w
cm90b2NvbChvcmlnaW4pLCAhPSwgImh0dHAiKTsKKyAgICB9CisKKyAgICB0ZXN0LT5kZWxldGVB
bGxPcmlnaW5zQW5kV2FpdFVudGlsRmluaXNoZWQoV2Vic2l0ZURhdGFUZXN0OjpEYXRhVHlwZTo6
TWVtb3J5Q2FjaGUpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5mZXRjaE9yaWdpbnMoV2Vic2l0ZURh
dGFUZXN0OjpEYXRhVHlwZTo6TWVtb3J5Q2FjaGUpKTsKKworICAgIC8vIERpc2sgY2FjaGUgZGVs
YXlzIHRoZSBzdG9yaW5nIG9mIGluaXRpYWwgcmVzb3VyY2VzIGZvciAxIHNlY29uZCB0byBhdm9p
ZAorICAgIC8vIGFmZmVjdGluZyBlYXJseSBwYWdlIGxvYWQuIFNvLCB3YWl0IDEgc2Vjb25kIGhl
cmUgdG8gbWFrZSBzdXJlIHJlc291cmNlcworICAgIC8vIGhhdmUgYWxyZWFkeSBiZWVuIHN0b3Jl
ZC4KKyAgICB0ZXN0LT53YWl0KDEpOworCisgICAgb3JpZ2lucyA9IHRlc3QtPmZldGNoT3JpZ2lu
cyhXZWJzaXRlRGF0YVRlc3Q6OkRhdGFUeXBlOjpEaXNrQ2FjaGUpOworICAgIGdfYXNzZXJ0KG9y
aWdpbnMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKG9yaWdpbnMpLCA9PSwg
Mik7CisgICAgaHR0cE9yaWdpbiA9IG51bGxwdHI7CisgICAgZm9yIChHTGlzdCogbCA9IG9yaWdp
bnM7IGw7IGwgPSBnX2xpc3RfbmV4dChsKSkgeworICAgICAgICBXZWJLaXRTZWN1cml0eU9yaWdp
biogb3JpZ2luID0gc3RhdGljX2Nhc3Q8V2ViS2l0U2VjdXJpdHlPcmlnaW4qPihsLT5kYXRhKTsK
KyAgICAgICAgY29uc3QgY2hhciogcHJvdG9jb2wgPSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dl
dF9wcm90b2NvbChvcmlnaW4pOworICAgICAgICBnX2Fzc2VydChwcm90b2NvbCk7CisgICAgICAg
IGlmIChnX3N0cl9lcXVhbChwcm90b2NvbCwgImh0dHAiKSkgeworICAgICAgICAgICAgaHR0cE9y
aWdpbiA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fcmVmKG9yaWdpbik7CisgICAgICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdChvcmlnaW4pLCA9
PSwga1NlcnZlci0+YmFzZVVSSSgpLT5ob3N0KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dCh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0KG9yaWdpbiksID09LCBrU2VydmVyLT5i
YXNlVVJJKCktPnBvcnQpOworICAgICAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHByb3RvY29s
LCAiaHR0cHMiKSkgeworICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZWN1cml0
eV9vcmlnaW5fZ2V0X2hvc3Qob3JpZ2luKSwgPT0sIGtIdHRwc1NlcnZlci0+YmFzZVVSSSgpLT5o
b3N0KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfc2VjdXJpdHlfb3JpZ2lu
X2dldF9wb3J0KG9yaWdpbiksID09LCBrSHR0cHNTZXJ2ZXItPmJhc2VVUkkoKS0+cG9ydCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9
CisKKyAgICBvcmlnaW5zVG9EZWxldGUuZGF0YSA9IGh0dHBPcmlnaW47CisgICAgdGVzdC0+ZGVs
ZXRlT3JpZ2luc0FuZFdhaXRVbnRpbEZpbmlzaGVkKFdlYnNpdGVEYXRhVGVzdDo6RGF0YVR5cGU6
OkRpc2tDYWNoZSwgJm9yaWdpbnNUb0RlbGV0ZSk7CisgICAgd2Via2l0X3NlY3VyaXR5X29yaWdp
bl91bnJlZihodHRwT3JpZ2luKTsKKyAgICBvcmlnaW5zID0gdGVzdC0+ZmV0Y2hPcmlnaW5zKFdl
YnNpdGVEYXRhVGVzdDo6RGF0YVR5cGU6OkRpc2tDYWNoZSk7CisgICAgZ19hc3NlcnQob3JpZ2lu
cyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgob3JpZ2lucyksID09LCAxKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2wo
c3RhdGljX2Nhc3Q8V2ViS2l0U2VjdXJpdHlPcmlnaW4qPihvcmlnaW5zLT5kYXRhKSksID09LCAi
aHR0cHMiKTsKKworICAgIHRlc3QtPmRlbGV0ZUFsbE9yaWdpbnNBbmRXYWl0VW50aWxGaW5pc2hl
ZChXZWJzaXRlRGF0YVRlc3Q6OkRhdGFUeXBlOjpEaXNrQ2FjaGUpOworICAgIGdfYXNzZXJ0KCF0
ZXN0LT5mZXRjaE9yaWdpbnMoV2Vic2l0ZURhdGFUZXN0OjpEYXRhVHlwZTo6RGlza0NhY2hlKSk7
CisKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1f
d2ViQ29udGV4dC5nZXQoKSwgb3JpZ2luYWxQb2xpY3kpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
U2VjdXJpdHlPcmlnaW5CYXNpYyhUZXN0KiwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRT
ZWN1cml0eU9yaWdpbiogb3JpZ2luID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9uZXcoImh0dHAi
LCAiMTI3LjAuMC4xIiwgMTIzNCk7CisgICAgZ19hc3NlcnQob3JpZ2luKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2wob3JpZ2luKSwgPT0s
ICJodHRwIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0
X2hvc3Qob3JpZ2luKSwgPT0sICIxMjcuMC4wLjEiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChvcmlnaW4pLCA9PSwgMTIzNCk7CisgICAgd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZihvcmlnaW4pOworfQorCiB2b2lkIGJlZm9yZUFsbCgp
CiB7CiAgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CiAgICAga1NlcnZlci0+
cnVuKHNlcnZlckNhbGxiYWNrKTsKIAorICAgIGtIdHRwc1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0
U2VydmVyKFdlYktpdFRlc3RTZXJ2ZXI6OlNlcnZlckhUVFBTKTsKKyAgICBrSHR0cHNTZXJ2ZXIt
PnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKICAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQi
LCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYkNvbnRleHREZWZhdWx0KTsKICAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImNvbmZpZ3VyYXRpb24iLCB0ZXN0V2ViQ29u
dGV4dENvbmZpZ3VyYXRpb24pOwogICAgIFBsdWdpbnNUZXN0OjphZGQoIldlYktpdFdlYkNvbnRl
eHQiLCAiZ2V0LXBsdWdpbnMiLCB0ZXN0V2ViQ29udGV4dEdldFBsdWdpbnMpOwpAQCAtNTYyLDkg
Kzc5NCwxMiBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViQ29udGV4dCIsICJsYW5ndWFnZXMiLCB0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyk7CiAgICAg
U2VjdXJpdHlQb2xpY3lUZXN0OjphZGQoIldlYktpdFNlY3VyaXR5TWFuYWdlciIsICJzZWN1cml0
eS1wb2xpY3kiLCB0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KTsKICAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRTZWN1cml0eU1hbmFnZXIiLCAiZmlsZS14aHIiLCB0ZXN0V2ViQ29udGV4
dFNlY3VyaXR5RmlsZVhIUik7CisgICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdlYkNv
bnRleHQiLCAid2Vic2l0ZS1kYXRhL2NhY2hlIiwgdGVzdFdlYkNvbnRleHRXZWJzaXRlRGF0YUNh
Y2hlKTsKKyAgICBUZXN0OjphZGQoIldlYktpdFNlY3VyaXR5T3JpZ2luIiwgImJhc2ljIiwgdGVz
dFNlY3VyaXR5T3JpZ2luQmFzaWMpOwogfQogCiB2b2lkIGFmdGVyQWxsKCkKIHsKICAgICBkZWxl
dGUga1NlcnZlcjsKKyAgICBkZWxldGUga0h0dHBzU2VydmVyOwogfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oCmluZGV4IDYwNTRmZTAuLjNmMzU3NWYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvVGVzdE1haW4u
aAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmgKQEAg
LTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgICAgICB0ZXN0LT5pbml0aWFsaXplV2ViRXh0ZW5z
aW9ucygpOwogICAgIH0KIAotICAgIFRlc3QoKQorICAgIFRlc3QoV2ViS2l0UHJvY2Vzc01vZGVs
IHByb2Nlc3NNb2RlbCA9IFdFQktJVF9QUk9DRVNTX01PREVMX1NIQVJFRF9TRUNPTkRBUllfUFJP
Q0VTUykKICAgICB7CiAgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbG9jYWxTdG9yYWdlRGlyZWN0
b3J5KGdfYnVpbGRfZmlsZW5hbWUoZGF0YURpcmVjdG9yeSgpLCAibG9jYWwtc3RvcmFnZSIsIG51
bGxwdHIpKTsKICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBpbmRleGVkREJEaXJlY3RvcnkoZ19i
dWlsZF9maWxlbmFtZShkYXRhRGlyZWN0b3J5KCksICJpbmRleGVkZGIiLCBudWxscHRyKSk7CkBA
IC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICJ3ZWJzcWwtZGlyZWN0b3J5Iiwg
d2ViU1FMRGlyZWN0b3J5LmdldCgpLCBudWxscHRyKSk7CiAKICAgICAgICAgbV93ZWJDb250ZXh0
ID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfY29udGV4dF9uZXdfd2l0aF93ZWJzaXRlX2RhdGFfbWFu
YWdlcih3ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X3dlYl9jb250
ZXh0X3NldF9wcm9jZXNzX21vZGVsKG1fd2ViQ29udGV4dC5nZXQoKSwgcHJvY2Vzc01vZGVsKTsK
ICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYkNvbnRleHQuZ2V0KCksICJpbml0aWFsaXpl
LXdlYi1leHRlbnNpb25zIiwgR19DQUxMQkFDSyhpbml0aWFsaXplV2ViRXh0ZW5zaW9uc0NhbGxi
YWNrKSwgdGhpcyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0
ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dl
YktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwCmluZGV4IDE0ZjJjMTQuLjM1YzBmMjcgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwCkBA
IC0yOCwxMSArMjgsMTUgQEAKIFdlYlZpZXdUZXN0OjpXZWJWaWV3VGVzdChXZWJLaXRVc2VyQ29u
dGVudE1hbmFnZXIqIHVzZXJDb250ZW50TWFuYWdlcikKICAgICA6IG1fd2ViVmlldyhXRUJLSVRf
V0VCX1ZJRVcoZ19vYmplY3RfcmVmX3NpbmsoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9W
SUVXLCAid2ViLWNvbnRleHQiLCBtX3dlYkNvbnRleHQuZ2V0KCksICJ1c2VyLWNvbnRlbnQtbWFu
YWdlciIsIHVzZXJDb250ZW50TWFuYWdlciwgbnVsbHB0cikpKSkKICAgICAsIG1fbWFpbkxvb3Ao
Z19tYWluX2xvb3BfbmV3KG51bGxwdHIsIFRSVUUpKQotICAgICwgbV9wYXJlbnRXaW5kb3cobnVs
bHB0cikKLSAgICAsIG1famF2YXNjcmlwdFJlc3VsdChudWxscHRyKQotICAgICwgbV9yZXNvdXJj
ZURhdGFTaXplKDApCi0gICAgLCBtX3N1cmZhY2UobnVsbHB0cikKLSAgICAsIG1fZXhwZWN0ZWRX
ZWJQcm9jZXNzQ3Jhc2goZmFsc2UpCit7CisgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyhHX09CSkVDVChtX3dlYlZpZXcpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1f
d2ViVmlldywgIndlYi1wcm9jZXNzLWNyYXNoZWQiLCBHX0NBTExCQUNLKFdlYlZpZXdUZXN0Ojp3
ZWJQcm9jZXNzQ3Jhc2hlZCksIHRoaXMpOworfQorCitXZWJWaWV3VGVzdDo6V2ViVmlld1Rlc3Qo
V2ViS2l0UHJvY2Vzc01vZGVsIHByb2Nlc3NNb2RlbCkKKyAgICA6IFRlc3QocHJvY2Vzc01vZGVs
KQorICAgICwgbV93ZWJWaWV3KFdFQktJVF9XRUJfVklFVyhnX29iamVjdF9yZWZfc2luayh3ZWJr
aXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dChtX3dlYkNvbnRleHQuZ2V0KCkpKSkpCisgICAg
LCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldyhudWxscHRyLCBUUlVFKSkKIHsKICAgICBhc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fd2ViVmlldykpOwog
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAid2ViLXByb2Nlc3MtY3Jhc2hlZCIsIEdf
Q0FMTEJBQ0soV2ViVmlld1Rlc3Q6OndlYlByb2Nlc3NDcmFzaGVkKSwgdGhpcyk7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmggYi9U
b29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmgKaW5kZXggM2Y5
OWQyMS4uZGYxYjIwMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0
Mkd0ay9XZWJWaWV3VGVzdC5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJH
dGsvV2ViVmlld1Rlc3QuaApAQCAtMjksNiArMjksNyBAQCBjbGFzcyBXZWJWaWV3VGVzdDogcHVi
bGljIFRlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoV2ViVmlld1Rl
c3QpOwogICAgIFdlYlZpZXdUZXN0KFdlYktpdFVzZXJDb250ZW50TWFuYWdlciogPSBudWxscHRy
KTsKKyAgICBXZWJWaWV3VGVzdChXZWJLaXRQcm9jZXNzTW9kZWwpOwogICAgIHZpcnR1YWwgfldl
YlZpZXdUZXN0KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbG9hZFVSSShjb25zdCBjaGFyKiB1cmkp
OwpAQCAtODMsMTQgKzg0LDE0IEBAIHB1YmxpYzoKICAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZp
ZXc7CiAgICAgR01haW5Mb29wKiBtX21haW5Mb29wOwogICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7
Ci0gICAgR3RrV2lkZ2V0KiBtX3BhcmVudFdpbmRvdzsKKyAgICBHdGtXaWRnZXQqIG1fcGFyZW50
V2luZG93IHsgbnVsbHB0ciB9OwogICAgIENTdHJpbmcgbV9leHBlY3RlZFRpdGxlOwotICAgIFdl
YktpdEphdmFzY3JpcHRSZXN1bHQqIG1famF2YXNjcmlwdFJlc3VsdDsKLSAgICBHRXJyb3IqKiBt
X2phdmFzY3JpcHRFcnJvcjsKKyAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBtX2phdmFzY3Jp
cHRSZXN1bHQgeyBudWxscHRyIH07CisgICAgR0Vycm9yKiogbV9qYXZhc2NyaXB0RXJyb3IgeyBu
dWxscHRyIH07CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBtX3Jlc291cmNlRGF0YTsKLSAgICBzaXpl
X3QgbV9yZXNvdXJjZURhdGFTaXplOwotICAgIGNhaXJvX3N1cmZhY2VfdCogbV9zdXJmYWNlOwot
ICAgIGJvb2wgbV9leHBlY3RlZFdlYlByb2Nlc3NDcmFzaDsKKyAgICBzaXplX3QgbV9yZXNvdXJj
ZURhdGFTaXplIHsgMCB9OworICAgIGNhaXJvX3N1cmZhY2VfdCogbV9zdXJmYWNlIHsgbnVsbHB0
ciB9OworICAgIGJvb2wgbV9leHBlY3RlZFdlYlByb2Nlc3NDcmFzaCB7IGZhbHNlIH07CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCBkb01vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlLCBpbnQsIGlu
dCwgdW5zaWduZWQsIHVuc2lnbmVkKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257556</attachid>
            <date>2015-07-27 04:20:26 -0700</date>
            <delta_ts>2015-07-28 03:37:47 -0700</delta_ts>
            <desc>Rebased patch</desc>
            <filename>wk2-website-data-cache.diff</filename>
            <type>text/plain</type>
            <size>70165</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5OTcyNGVhLi4xODhkMDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDgg
QEAKKzIwMTUtMDctMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIHRv
IGhhbmRsZSBjYWNoZWQgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ2NTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIG5ldyBtZXRob2RzIHRvIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciB0
byBhc3luY2hyb25vdXNseSBnZXQKKyAgICAgICAgb3JpZ2lucyBmcm9tIG1lbW9yeSBhbmQgZGlz
ayBjYWNoZSwgZGVsZXRlIG1lbW9yeSBhbmQgZGlzayBjYWNoZQorICAgICAgICBmb3IgYSBsaXN0
IG9mIG9yaWdpbnMsIGFuZCBjbGVhciBtZW1vcnkgYW5kIGRpc2sgY2FjaGVzLgorCisgICAgICAg
ICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlPcmlnaW4uY3BwOiBBZGRlZC4K
KyAgICAgICAgKF9XZWJLaXRTZWN1cml0eU9yaWdpbjo6X1dlYktpdFNlY3VyaXR5T3JpZ2luKToK
KyAgICAgICAgKHdlYmtpdFNlY3VyaXR5T3JpZ2luQ3JlYXRlKToKKyAgICAgICAgKHdlYmtpdFNl
Y3VyaXR5T3JpZ2luR2V0U2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5
X29yaWdpbl9uZXcpOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9yZWYpOgorICAg
ICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZik6CisgICAgICAgICh3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbCk6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9ob3N0KToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luUHJp
dmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hl
bWVSZXF1ZXN0LmNwcDoKKyAgICAgICAgKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfY2xhc3Nf
aW5pdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb3JpZ2lu
c19pbl9tZW1vcnlfY2FjaGUpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9vcmlnaW5zX2luX21lbW9yeV9jYWNoZV9maW5pc2gpOgorICAgICAgICAod2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnMpOgorICAg
ICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9y
X29yaWdpbnNfZmluaXNoKToKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9j
bGVhcl9tZW1vcnlfY2FjaGUpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2NsZWFyX21lbW9yeV9jYWNoZV9maW5pc2gpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rpc2tfY2FjaGUpOgorICAgICAgICAod2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rpc2tfY2FjaGVfZmluaXNoKToKKyAg
ICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfZGlza19jYWNoZV9mb3Jf
b3JpZ2lucyk6CisgICAgICAgICh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rp
c2tfY2FjaGVfZm9yX29yaWdpbnNfZmluaXNoKToKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlKToKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlX2ZpbmlzaCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC50eXBlczoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDoKKwogMjAxNS0wNy0yNyAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gUGFzcyBhIEdzdEluc3Rh
bGxQbHVnaW5zQ29udGV4dCB0byBnc3RfaW5zdGFsbF9wbHVnaW5zX2FzeW5jCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtR1RLLmNtYWtlCmluZGV4IDYxMTNlNjEuLmI0M2MwMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCkBAIC0yMTcsNiArMjE3LDkgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlNYW5hZ2VyLmNwcAogICAgIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5TWFuYWdlci5oCiAgICAgVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0U2VjdXJpdHlNYW5hZ2VyUHJpdmF0ZS5oCisgICAgVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0U2VjdXJpdHlPcmlnaW4uY3BwCisgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2Vj
dXJpdHlPcmlnaW4uaAorICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2lu
UHJpdmF0ZS5oCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaAogICAgIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFNldHRpbmdzUHJpdmF0ZS5oCkBAIC00MDYsNiArNDA5LDcgQEAgc2V0KFdlYktpdDJH
VEtfSU5TVEFMTEVEX0hFQURFUlMKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLmgKICAgICAke1dFQktJVDJfRElSfS9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRTY3JpcHREaWFsb2cuaAogICAgICR7V0VCS0lUMl9ESVJ9L1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5TWFuYWdlci5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlPcmlnaW4uaAogICAgICR7V0VCS0lU
Ml9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmgKICAgICAke1dFQktJVDJf
RElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklSZXF1ZXN0LmgKICAgICAke1dFQktJVDJf
RElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklSZXNwb25zZS5oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZWN1cml0eU9yaWdpbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZWN1cml0eU9yaWdpbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiYzUzYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5
T3JpZ2luLmNwcApAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0U2VjdXJpdHlP
cmlnaW4uaCIKKworI2luY2x1ZGUgIldlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
LyoqCisgKiBTRUNUSU9OOiBXZWJLaXRTZWN1cml0eU9yaWdpbgorICogQFNob3J0X2Rlc2NyaXB0
aW9uOiBBIHNlY3VyaXR5IGJvdW5kYXJ5IGZvciBXZWJzaXRlcworICogQFRpdGxlOiBXZWJLaXRT
ZWN1cml0eU9yaWdpbgorICogQFNlZV9hbHNvOiAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLCAj
V2ViS2l0U2VjdXJpdHlNYW5hZ2VyCisgKgorICogV2ViS2l0U2VjdXJpdHlPcmlnaW4gaXMgYSBy
ZXByZXNlbnRhdGlvbiBvZiBhIHNlY3VyaXR5IGRvbWFpbiBkZWZpbmVkCisgKiBieSBXZWJzaXRl
cy4gQW4gb3JpZ2luIGNvbnNpc3RzIG9mIGEgaG9zdCBuYW1lLCBhIHByb3RvY29sLCBhbmQgYSBw
b3J0CisgKiBudW1iZXIuIFdlYnNpdGVzIHdpdGggdGhlIHNhbWUgc2VjdXJpdHkgb3JpZ2luIGNh
biBhY2Nlc3MgZWFjaCBvdGhlcidzCisgKiByZXNvdXJjZXMgZm9yIGNsaWVudC1zaWRlIHNjcmlw
dGluZyBvciBkYXRhYmFzZSBhY2Nlc3MuCisgKgorICogU2luY2U6IDIuMTAKKyAqLworCitzdHJ1
Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luIHsKKyAgICBfV2ViS2l0U2VjdXJpdHlPcmlnaW4oV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVTZWN1cml0eU9yaWdpbikKKyAgICAgICAgOiBzZWN1
cml0eU9yaWdpbihjb3JlU2VjdXJpdHlPcmlnaW4pCisgICAgeworICAgIH0KKworICAgIF9XZWJL
aXRTZWN1cml0eU9yaWdpbihSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYgY29yZVNlY3Vy
aXR5T3JpZ2luKQorICAgICAgICA6IHNlY3VyaXR5T3JpZ2luKFdURjo6bW92ZShjb3JlU2VjdXJp
dHlPcmlnaW4pKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4+IHNlY3VyaXR5T3JpZ2luOworICAgIENTdHJpbmcgcHJvdG9jb2w7CisgICAgQ1N0cmlu
ZyBob3N0OworICAgIGludCByZWZlcmVuY2VDb3VudDsKK307CisKK0dfREVGSU5FX0JPWEVEX1RZ
UEUoV2ViS2l0U2VjdXJpdHlPcmlnaW4sIHdlYmtpdF9zZWN1cml0eV9vcmlnaW4sIHdlYmtpdF9z
ZWN1cml0eV9vcmlnaW5fcmVmLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3VucmVmKQorCitXZWJL
aXRTZWN1cml0eU9yaWdpbiogd2Via2l0U2VjdXJpdHlPcmlnaW5DcmVhdGUoV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW4qIGNvcmVTZWN1cml0eU9yaWdpbikKK3sKKyAgICBXZWJLaXRTZWN1cml0eU9y
aWdpbiogb3JpZ2luID0gZ19zbGljZV9uZXcoV2ViS2l0U2VjdXJpdHlPcmlnaW4pOworICAgIG5l
dyAob3JpZ2luKSBXZWJLaXRTZWN1cml0eU9yaWdpbihjb3JlU2VjdXJpdHlPcmlnaW4pOworICAg
IHJldHVybiBvcmlnaW47Cit9CisKK1dlYktpdFNlY3VyaXR5T3JpZ2luKiB3ZWJraXRTZWN1cml0
eU9yaWdpbkNyZWF0ZShSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYgY29yZVNlY3VyaXR5
T3JpZ2luKQoreworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBnX3NsaWNlX25l
dyhXZWJLaXRTZWN1cml0eU9yaWdpbik7CisgICAgbmV3IChvcmlnaW4pIFdlYktpdFNlY3VyaXR5
T3JpZ2luKFdURjo6bW92ZShjb3JlU2VjdXJpdHlPcmlnaW4pKTsKKyAgICByZXR1cm4gb3JpZ2lu
OworfQorCitXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgd2Via2l0U2VjdXJpdHlPcmlnaW5HZXRT
ZWN1cml0eU9yaWdpbihXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VS
VChvcmlnaW4pOworICAgIHJldHVybiAqb3JpZ2luLT5zZWN1cml0eU9yaWdpbjsKK30KKworLyoq
CisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX25ldzoKKyAqIEBwcm90b2NvbDogVGhlIHByb3Rv
Y29sIGZvciB0aGUgbmV3IG9yaWdpbgorICogQGhvc3Q6IFRoZSBob3N0IGZvciB0aGUgbmV3IG9y
aWdpbgorICogQHBvcnQ6IFRoZSBwb3J0IG51bWJlciBmb3IgdGhlIG5ldyBvcmlnaW4KKyAqCisg
KiBDcmVhdGUgYSBuZXcgc2VjdXJpdHkgb3JpZ2luIGZyb20gdGhlIHByb3ZpZGVkIHByb3RvY29s
LCBob3N0IGFuZCBwb3J0LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2Vi
S2l0U2VjdXJpdHlPcmlnaW4uCisgKgorICogU2luY2U6IDIuMTAKKyAqLworV2ViS2l0U2VjdXJp
dHlPcmlnaW4qIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3KGNvbnN0IGdjaGFyKiBwcm90b2Nv
bCwgY29uc3QgZ2NoYXIqIGhvc3QsIGd1aW50IHBvcnQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwocHJvdG9jb2wsIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGhvc3Qs
IG51bGxwdHIpOworCisgICAgcmV0dXJuIHdlYmtpdFNlY3VyaXR5T3JpZ2luQ3JlYXRlKFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoU3RyaW5nOjpmcm9tVVRGOChwcm90b2NvbCksIFN0
cmluZzo6ZnJvbVVURjgoaG9zdCksIHBvcnQpKTsKK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX3JlZjoKKyAqIEBvcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgor
ICogQXRvbWljYWxseSBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgQG9yaWdpbiBi
eSBvbmUuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIE1ULXNhZmUgYW5kIG1heSBiZSBjYWxsZWQgZnJv
bSBhbnkgdGhyZWFkLgorICoKKyAqIFJldHVybnM6IFRoZSBwYXNzZWQgI1dlYktpdFNlY3VyaXR5
T3JpZ2luCisgKgorICogU2luY2U6IDIuMTAKKyAqLworV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHdl
YmtpdF9zZWN1cml0eV9vcmlnaW5fcmVmKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob3JpZ2luLCBudWxscHRyKTsKKworICAgIGdfYXRv
bWljX2ludF9pbmMoJm9yaWdpbi0+cmVmZXJlbmNlQ291bnQpOworICAgIHJldHVybiBvcmlnaW47
Cit9CisKKy8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZjoKKyAqIEBvcmlnaW46
IEEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIHRo
ZSByZWZlcmVuY2UgY291bnQgb2YgQG9yaWdpbiBieSBvbmUuCisgKiBJZiB0aGUgcmVmZXJlbmNl
IGNvdW50IGRyb3BzIHRvIDAsIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5CisgKiAjV2ViS2l0U2Vj
dXJpdHlPcmlnaW4gaXMgcmVsZWFzZWQuIFRoaXMgZnVuY3Rpb24gaXMgTVQtc2FmZSBhbmQgbWF5
IGJlCisgKiBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8K
K3ZvaWQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZihXZWJLaXRTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwob3JpZ2luKTsKKworICAgIGlmIChnX2F0
b21pY19pbnRfZGVjX2FuZF90ZXN0KCZvcmlnaW4tPnJlZmVyZW5jZUNvdW50KSkgeworICAgICAg
ICBvcmlnaW4tPn5XZWJLaXRTZWN1cml0eU9yaWdpbigpOworICAgICAgICBnX3NsaWNlX2ZyZWUo
V2ViS2l0U2VjdXJpdHlPcmlnaW4sIG9yaWdpbik7CisgICAgfQorfQorCisvKioKKyAqIHdlYmtp
dF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3RvY29sOgorICogQG9yaWdpbjogYSAjV2ViS2l0U2Vj
dXJpdHlPcmlnaW4KKyAqCisgKiBHZXQgdGhlIHByb3RvY29sIG9mIEBvcmlnaW4KKyAqCisgKiBS
ZXR1cm5zOiBUaGUgcHJvdG9jb2wgb2YgdGhlICNXZWJLaXRTZWN1cml0eU9yaWdpbi4KKyAqCisg
KiBTaW5jZTogMi4xMAorICovCitjb25zdCBnY2hhciogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9n
ZXRfcHJvdG9jb2woV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChvcmlnaW4sIG51bGxwdHIpOworCisgICAgaWYgKG9yaWdpbi0+cHJvdG9j
b2wuaXNOdWxsKCkpCisgICAgICAgIG9yaWdpbi0+cHJvdG9jb2wgPSBvcmlnaW4tPnNlY3VyaXR5
T3JpZ2luLT5wcm90b2NvbCgpLnV0ZjgoKTsKKyAgICByZXR1cm4gb3JpZ2luLT5wcm90b2NvbC5k
YXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdDoKKyAq
IEBvcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICogR2V0IHRoZSBob3N0IG9m
IEBvcmlnaW4KKyAqCisgKiBSZXR1cm5zOiBUaGUgaG9zdCBvZiB0aGUgI1dlYktpdFNlY3VyaXR5
T3JpZ2luLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9ob3N0KFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob3JpZ2luLCBudWxscHRyKTsKKworICAgIGlmIChvcmln
aW4tPnNlY3VyaXR5T3JpZ2luLT5ob3N0KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGlmIChvcmlnaW4tPmhvc3QuaXNOdWxsKCkpCisgICAgICAgIG9yaWdpbi0+
aG9zdCA9IG9yaWdpbi0+c2VjdXJpdHlPcmlnaW4tPmhvc3QoKS51dGY4KCk7CisgICAgcmV0dXJu
IG9yaWdpbi0+aG9zdC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdp
bl9nZXRfcG9ydDoKKyAqIEBvcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICog
R2V0IHRoZSBwb3J0IG9mIEBvcmlnaW4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcG9ydCBvZiB0aGUg
I1dlYktpdFNlY3VyaXR5T3JpZ2luLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworZ3VpbnQgd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9yaWdpbiwgMCk7CisKKyAgICByZXR1cm4g
b3JpZ2luLT5zZWN1cml0eU9yaWdpbi0+cG9ydCgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlPcmlnaW4uaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1NGQ1MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luLmgKQEAg
LTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYg
IWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElM
QVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQg
ZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0U2VjdXJpdHlPcmlnaW5faAorI2Rl
ZmluZSBXZWJLaXRTZWN1cml0eU9yaWdpbl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgV0VCS0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lOICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2lu
X2dldF90eXBlKCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTZWN1cml0eU9yaWdpbiBXZWJL
aXRTZWN1cml0eU9yaWdpbjsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3NlY3VyaXR5X29y
aWdpbl9nZXRfdHlwZSAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdFNlY3VyaXR5T3Jp
Z2luICoKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3ICAgICAgICAgIChjb25zdCBnY2hhciAg
ICAgICAgICAqcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgICAgICAgICAgKmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgIHBvcnQpOworCitXRUJLSVRfQVBJIFdlYktp
dFNlY3VyaXR5T3JpZ2luICoKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fcmVmICAgICAgICAgIChX
ZWJLaXRTZWN1cml0eU9yaWdpbiAqb3JpZ2luKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX3VucmVmICAgICAgICAoV2ViS2l0U2VjdXJpdHlPcmlnaW4gKm9yaWdp
bik7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3NlY3VyaXR5X29yaWdpbl9n
ZXRfcHJvdG9jb2wgKFdlYktpdFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pOworCitXRUJLSVRfQVBJ
IGNvbnN0IGdjaGFyICoKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3QgICAgIChXZWJL
aXRTZWN1cml0eU9yaWdpbiAqb3JpZ2luKTsKKworV0VCS0lUX0FQSSBndWludAord2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9nZXRfcG9ydCAgICAgKFdlYktpdFNlY3VyaXR5T3JpZ2luICpvcmlnaW4p
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0U2VjdXJpdHlPcmlnaW5faCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJp
dHlPcmlnaW5Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRTZWN1cml0eU9yaWdpblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kYzZjNmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgKQEAgLTAsMCArMSwzMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFNlY3Vy
aXR5T3JpZ2luUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZV9o
CisKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0U2VjdXJpdHlP
cmlnaW4uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisKK1dlYktpdFNl
Y3VyaXR5T3JpZ2luKiB3ZWJraXRTZWN1cml0eU9yaWdpbkNyZWF0ZShXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbiopOworV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHdlYmtpdFNlY3VyaXR5T3JpZ2luQ3Jl
YXRlKFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4mJik7CitXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbiYgd2Via2l0U2VjdXJpdHlPcmlnaW5HZXRTZWN1cml0eU9yaWdpbihXZWJLaXRTZWN1cml0
eU9yaWdpbiopOworCisjZW5kaWYgLy8gV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVE
YXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIuY3BwCmluZGV4IGIyYTliODkuLjZiY2UwNTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmNwcApAQCAtMjEsNyArMjEsOSBAQAogI2luY2x1ZGUgIldlYktpdFdlYnNp
dGVEYXRhTWFuYWdlci5oIgogCiAjaW5jbHVkZSAiQVBJV2Vic2l0ZURhdGFTdG9yZS5oIgorI2lu
Y2x1ZGUgIldlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdl
YnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVJlY29yZC5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4t
bGliLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgpAQCAtNDgzLDMgKzQ4NSwz
MTUgQEAgY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfd2Vic3Fs
X2RpcmVjdG9yeShXZWJLaXRXZWJzaXRlRGF0YU0KICAgICAgICAgcHJpdi0+d2ViU1FMRGlyZWN0
b3J5LnJlc2V0KGdfc3RyZHVwKEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFdlYlNRTERh
dGFiYXNlRGlyZWN0b3J5KCkudXRmOCgpLmRhdGEoKSkpOwogICAgIHJldHVybiBwcml2LT53ZWJT
UUxEaXJlY3RvcnkuZ2V0KCk7CiB9CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF9vcmlnaW5zX2luX21lbW9yeV9jYWNoZToKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEBjYW5jZWxsYWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2Fu
Y2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6
IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlz
ZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxi
YWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgZ2V0IHRoZSBsaXN0IG9mIG9yaWdp
bnMgZm9yIHdoaWNoIHRoZSBtZW1vcnkgY2FjaGUgY29udGFpbnMgcmVzb3VyY2VzLgorICoKKyAq
IFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVk
LiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9v
cmlnaW5zX2luX21lbW9yeV9jYWNoZV9maW5pc2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUg
b3BlcmF0aW9uLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK3ZvaWQgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX21lbW9yeV9jYWNoZShXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIqIG1hbmFnZXIsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5
Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpKTsKKworICAgIEdS
ZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxs
YWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CisgICAgbWFuYWdlci0+cHJpdi0+d2Vic2l0ZURh
dGFTdG9yZS0+ZmV0Y2hEYXRhKFdlYnNpdGVEYXRhVHlwZU1lbW9yeUNhY2hlLCBbdGFza10gKFZl
Y3RvcjxXZWJzaXRlRGF0YVJlY29yZD4gcmVjb3JkcykgeworICAgICAgICBHTGlzdCogb3JpZ2lu
cyA9IG51bGxwdHI7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVjb3JkIDogcmVjb3Jkcykg
eworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvcmlnaW4gOiByZWNvcmQub3JpZ2lucykK
KyAgICAgICAgICAgICAgICBvcmlnaW5zID0gZ19saXN0X3ByZXBlbmQob3JpZ2lucywgd2Via2l0
U2VjdXJpdHlPcmlnaW5DcmVhdGUob3JpZ2luLmdldCgpKSk7CisgICAgICAgIH0KKyAgICAgICAg
Z190YXNrX3JldHVybl9wb2ludGVyKHRhc2suZ2V0KCksIG9yaWdpbnMsIFtdKGdwb2ludGVyIGRh
dGEpIHsKKyAgICAgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwoc3RhdGljX2Nhc3Q8R0xpc3QqPihk
YXRhKSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4od2Via2l0X3NlY3VyaXR5X29y
aWdpbl91bnJlZikpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2NhY2hlX2ZpbmlzaDoK
KyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEg
I0dBc3luY1Jlc3VsdAorICogQGVycm9yOiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVO
VUxMIHRvIGlnbm9yZQorICoKKyAqIEZpbmlzaCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0
YXJ0ZWQgd2l0aCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVt
b3J5X2NhY2hlKCkuCisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBXZWJLaXRTZWN1cml0
eU9yaWdpbikgKHRyYW5zZmVyIGZ1bGwpOiBhICNHTGlzdCBvZiAjV2ViS2l0U2VjdXJpdHlPcmln
aW48IS0tIC0tPnMuIFlvdSBtdXN0IGZyZWUgdGhlICNHTGlzdCB3aXRoCisgKiAgICBnX2xpc3Rf
ZnJlZSgpIGFuZCB1bnJlZiB0aGUgI1dlYktpdFNlY3VyaXR5T3JpZ2luPCEtLSAtLT5zIHdpdGgg
d2Via2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZigpIHdoZW4geW91J3JlIGRvbmUgd2l0aCB0aGVt
LgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK0dMaXN0KiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2NhY2hlX2ZpbmlzaChXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIqIG1hbmFnZXIsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFH
RVIobWFuYWdlciksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19p
c192YWxpZChyZXN1bHQsIG1hbmFnZXIpLCBudWxscHRyKTsKKworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHTGlzdCo+KGdfdGFza19wcm9wYWdhdGVfcG9pbnRlcihHX1RBU0socmVzdWx0KSwgZXJy
b3IpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX21l
bW9yeV9jYWNoZV9mb3Jfb3JpZ2luczoKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIKKyAqIEBvcmlnaW5zOiAoZWxlbWVudC10eXBlIFdlYktpdFNlY3VyaXR5T3JpZ2lu
KTogYSAjR0xpc3Qgb2YgI1dlYktpdFNlY3VyaXR5T3JpZ2luPCEtLSAtLT5zCisgKiBAY2FuY2Vs
bGFibGU6IChhbGxvdy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQor
ICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNh
bGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJl
KTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJv
bm91c2x5IGRlbGV0ZSB0aGUgbWVtb3J5IGNhY2hlIHJlc291cmNlcyBmb3IgdGhlIGdpdmVuIEBv
cmlnaW5zLgorICogVXNlIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9tZW1vcnlf
Y2FjaGUoKSBpZiB5b3Ugd2FudCB0byBkZWxldGUgdGhlCisgKiBtZW1vcnkgY2FjaGUgZm9yIGFs
bCBvcmlnaW5zLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxi
YWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnNfZmluaXNoKCkgdG8g
Z2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBTaW5jZTogMi4xMAorICov
Cit2b2lkIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfbWVtb3J5X2NhY2hlX2Zv
cl9vcmlnaW5zKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwgR0xpc3QqIG9yaWdp
bnMsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJh
Y2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG9y
aWdpbnMpOworCisgICAgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiByZWNvcmRzOworICAgIGZv
ciAoR0xpc3QqIGxpc3QgPSBvcmlnaW5zOyBsaXN0OyBsaXN0ID0gZ19saXN0X25leHQobGlzdCkp
IHsKKyAgICAgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHN0YXRpY19jYXN0PFdl
YktpdFNlY3VyaXR5T3JpZ2luKj4obGlzdC0+ZGF0YSk7CisgICAgICAgIFdlYnNpdGVEYXRhUmVj
b3JkIHJlY29yZDsKKyAgICAgICAgcmVjb3JkLmFkZChXZWJzaXRlRGF0YVR5cGVNZW1vcnlDYWNo
ZSwgJndlYmtpdFNlY3VyaXR5T3JpZ2luR2V0U2VjdXJpdHlPcmlnaW4ob3JpZ2luKSk7CisgICAg
ICAgIHJlY29yZHMuYXBwZW5kKHJlY29yZCk7CisgICAgfQorCisgICAgR1JlZlB0cjxHVGFzaz4g
dGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFj
aywgdXNlckRhdGEpKTsKKyAgICBtYW5hZ2VyLT5wcml2LT53ZWJzaXRlRGF0YVN0b3JlLT5yZW1v
dmVEYXRhKFdlYnNpdGVEYXRhVHlwZU1lbW9yeUNhY2hlLCByZWNvcmRzLCBbdGFza10geworICAg
ICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CisgICAgfSk7Cit9
CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2Fj
aGVfZm9yX29yaWdpbnNfZmluaXNoOgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRh
TWFuYWdlcgorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJldHVybiBs
b2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNoIGFuIGFz
eW5jaHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9kZWxldGVfbWVtb3J5X2NhY2hlX2Zvcl9vcmlnaW5zKCkuCisgKgorICogUmV0dXJuczog
JVRSVUUgaWYgbWVtb3J5IGNhY2hlIHJlc291cmNlcyB3ZXJlIHN1Y2Nlc2Z1bGx5IGRlbGV0ZWQs
IG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMTAKKyAqLworZ2Jvb2xlYW4g
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdp
bnNfZmluaXNoKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwgR0FzeW5jUmVzdWx0
KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSwgRkFMU0UpOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19pc192YWxpZChyZXN1bHQsIG1hbmFnZXIpLCBGQUxTRSk7
CisKKyAgICByZXR1cm4gZ190YXNrX3Byb3BhZ2F0ZV9ib29sZWFuKEdfVEFTSyhyZXN1bHQpLCBl
cnJvcik7Cit9CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX21l
bW9yeV9jYWNoZToKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAq
IEBjYW5jZWxsYWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8g
aWdub3JlCisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJh
Y2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTog
KGNsb3N1cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICog
QXN5bmNocm9ub3VzbHkgY2xlYXIgdGhlIG1lbW9yeSBjYWNoZS4KKyAqCisgKiBXaGVuIHRoZSBv
cGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4gWW91IGNhbiB0
aGVuIGNhbGwKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9tZW1vcnlfY2Fj
aGVfZmluaXNoKCkgdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBT
aW5jZTogMi4xMAorICovCit2b2lkIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9t
ZW1vcnlfY2FjaGUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuY2VsbGFi
bGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFf
TUFOQUdFUihtYW5hZ2VyKSk7CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVm
KGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwor
ICAgIG1hbmFnZXItPnByaXYtPndlYnNpdGVEYXRhU3RvcmUtPnJlbW92ZURhdGEoV2Vic2l0ZURh
dGFUeXBlTWVtb3J5Q2FjaGUsIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQ6
Om1pbigpLCBbdGFza10geworICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQo
KSwgVFJVRSk7CisgICAgfSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2NsZWFyX21lbW9yeV9jYWNoZV9maW5pc2g6CisgKiBAbWFuYWdlcjogYSAjV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyCisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBlcnJvcjog
cmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBGaW5p
c2ggYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2NsZWFyX21lbW9yeV9jYWNoZSgpCisgKgorICogUmV0dXJuczogJVRSVUUg
aWYgbWVtb3J5IGNhY2hlIHdhcyBzdWNjZXNmdWxseSBjbGVhcmVkLCBvciAlRkFMU0Ugb3RoZXJ3
aXNlLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9jbGVhcl9tZW1vcnlfY2FjaGVfZmluaXNoKFdlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciogbWFuYWdlciwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUiht
YW5hZ2VyKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19pc192YWxp
ZChyZXN1bHQsIG1hbmFnZXIpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gZ190YXNrX3Byb3BhZ2F0
ZV9ib29sZWFuKEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7Cit9CisKKy8qKgorICogd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rpc2tfY2FjaGU6CisgKiBAbWFuYWdl
cjogYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKiBAY2FuY2VsbGFibGU6IChhbGxvdy1u
b25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQorICogQGNhbGxiYWNrOiAo
c2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVx
dWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdGhlIGRhdGEgdG8g
cGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJvbm91c2x5IGdldCB0aGUg
bGlzdCBvZiBvcmlnaW5zIGZvciB3aGljaCB0aGUgSFRUUCBkaXNrIGNhY2hlIGNvbnRhaW5zIHJl
c291cmNlcy4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAjV2Vi
S2l0V2ViQ29udGV4dDwhLS0gLS0+cyB1c2luZworICogJVdFQktJVF9QUk9DRVNTX01PREVMX1NI
QVJFRF9TRUNPTkRBUllfUFJPQ0VTUyBwcm9jZXNzIG1vZGVsLCBhbiBlbXB0eSBsaXN0IHdpbGwK
KyAqIGFsd2F5cyBiZSByZXR1cm5lZCBpbiBzdWNoIGNhc2UuCisgKgorICogV2hlbiB0aGUgb3Bl
cmF0aW9uIGlzIGZpbmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhl
biBjYWxsCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fZGlz
a19jYWNoZV9maW5pc2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorICoK
KyAqIFNpbmNlOiAyLjEwCisgKi8KK3ZvaWQgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dl
dF9vcmlnaW5zX2luX2Rpc2tfY2FjaGUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2Vy
LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNr
LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19X
RUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSk7CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNr
ID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1
c2VyRGF0YSkpOworICAgIG1hbmFnZXItPnByaXYtPndlYnNpdGVEYXRhU3RvcmUtPmZldGNoRGF0
YShXZWJzaXRlRGF0YVR5cGVEaXNrQ2FjaGUsIFt0YXNrXSAoVmVjdG9yPFdlYnNpdGVEYXRhUmVj
b3JkPiByZWNvcmRzKSB7CisgICAgICAgIEdMaXN0KiBvcmlnaW5zID0gbnVsbHB0cjsKKyAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiByZWNvcmQgOiByZWNvcmRzKSB7CisgICAgICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIG9yaWdpbiA6IHJlY29yZC5vcmlnaW5zKQorICAgICAgICAgICAgICAgIG9y
aWdpbnMgPSBnX2xpc3RfcHJlcGVuZChvcmlnaW5zLCB3ZWJraXRTZWN1cml0eU9yaWdpbkNyZWF0
ZShvcmlnaW4uZ2V0KCkpKTsKKyAgICAgICAgfQorICAgICAgICBnX3Rhc2tfcmV0dXJuX3BvaW50
ZXIodGFzay5nZXQoKSwgb3JpZ2lucywgW10oZ3BvaW50ZXIgZGF0YSkgeworICAgICAgICAgICAg
Z19saXN0X2ZyZWVfZnVsbChzdGF0aWNfY2FzdDxHTGlzdCo+KGRhdGEpLCByZWludGVycHJldF9j
YXN0PEdEZXN0cm95Tm90aWZ5Pih3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3VucmVmKSk7CisgICAg
ICAgIH0pOworICAgIH0pOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfb3JpZ2luc19pbl9kaXNrX2NhY2hlX2ZpbmlzaDoKKyAqIEBtYW5hZ2VyOiBhICNXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVy
cm9yOiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAq
IEZpbmlzaCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fZGlza19jYWNoZSgpLgorICoKKyAqIFJl
dHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0U2VjdXJpdHlPcmlnaW4pICh0cmFuc2ZlciBmdWxs
KTogYSAjR0xpc3Qgb2YgI1dlYktpdFNlY3VyaXR5T3JpZ2luPCEtLSAtLT5zLiBZb3UgbXVzdCBm
cmVlIHRoZSAjR0xpc3Qgd2l0aAorICogICAgZ19saXN0X2ZyZWUoKSBhbmQgdW5yZWYgdGhlICNX
ZWJLaXRTZWN1cml0eU9yaWdpbjwhLS0gLS0+cyB3aXRoIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5f
dW5yZWYoKSB3aGVuIHlvdSdyZSBkb25lIHdpdGggdGhlbS4KKyAqCisgKiBTaW5jZTogMi4xMAor
ICovCitHTGlzdCogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rp
c2tfY2FjaGVfZmluaXNoKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwgR0FzeW5j
UmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSwgbnVsbHB0cik7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3VsdCwgbWFuYWdlciks
IG51bGxwdHIpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaXN0Kj4oZ190YXNrX3Byb3Bh
Z2F0ZV9wb2ludGVyKEdfVEFTSyhyZXN1bHQpLCBlcnJvcikpOworfQorCisvKioKKyAqIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfZGlza19jYWNoZV9mb3Jfb3JpZ2luczoKKyAq
IEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEBvcmlnaW5zOiAoZWxl
bWVudC10eXBlIFdlYktpdFNlY3VyaXR5T3JpZ2luKTogYSAjR0xpc3Qgb2YgI1dlYktpdFNlY3Vy
aXR5T3JpZ2luPCEtLSAtLT5zCisgKiBAY2FuY2VsbGFibGU6IChhbGxvdy1ub25lKTogYSAjR0Nh
bmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQorICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMp
OiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRp
c2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxs
YmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJvbm91c2x5IGRlbGV0ZSB0aGUgSFRUUCBkaXNr
IGNhY2hlIHJlc291cmNlcyBmb3IgdGhlIGdpdmVuIEBvcmlnaW5zLgorICogVXNlIHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlKCkgaWYgeW91IHdhbnQgdG8gZGVs
ZXRlIHRoZQorICogZGlzayBjYWNoZSBmb3IgYWxsIG9yaWdpbnMuCisgKgorICogTm90ZSB0aGF0
IHRoaXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgI1dlYktpdFdlYkNvbnRleHQ8IS0tIC0tPnMgdXNp
bmcKKyAqICVXRUJLSVRfUFJPQ0VTU19NT0RFTF9TSEFSRURfU0VDT05EQVJZX1BST0NFU1MgcHJv
Y2VzcyBtb2RlbCwgb25seSBjbGVhcmluZyB0aGUKKyAqIGVudGlyZSBjYWNoZSBpcyBzdXBwb3J0
ZWQgaW4gc3VjaCBjYXNlLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwg
QGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9kaXNrX2NhY2hlX2Zvcl9vcmlnaW5zX2ZpbmlzaCgp
IHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKgorICogU2luY2U6IDIuMTAK
KyAqLwordm9pZCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rpc2tfY2FjaGVf
Zm9yX29yaWdpbnMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBHTGlzdCogb3Jp
Z2lucywgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxs
YmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
b3JpZ2lucyk7CisKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+IHJlY29yZHM7CisgICAg
Zm9yIChHTGlzdCogbGlzdCA9IG9yaWdpbnM7IGxpc3Q7IGxpc3QgPSBnX2xpc3RfbmV4dChsaXN0
KSkgeworICAgICAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gc3RhdGljX2Nhc3Q8
V2ViS2l0U2VjdXJpdHlPcmlnaW4qPihsaXN0LT5kYXRhKTsKKyAgICAgICAgV2Vic2l0ZURhdGFS
ZWNvcmQgcmVjb3JkOworICAgICAgICByZWNvcmQuYWRkKFdlYnNpdGVEYXRhVHlwZURpc2tDYWNo
ZSwgJndlYmtpdFNlY3VyaXR5T3JpZ2luR2V0U2VjdXJpdHlPcmlnaW4ob3JpZ2luKSk7CisgICAg
ICAgIHJlY29yZHMuYXBwZW5kKHJlY29yZCk7CisgICAgfQorCisgICAgR1JlZlB0cjxHVGFzaz4g
dGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFj
aywgdXNlckRhdGEpKTsKKyAgICBtYW5hZ2VyLT5wcml2LT53ZWJzaXRlRGF0YVN0b3JlLT5yZW1v
dmVEYXRhKFdlYnNpdGVEYXRhVHlwZURpc2tDYWNoZSwgcmVjb3JkcywgW3Rhc2tdIHsKKyAgICAg
ICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOworICAgIH0pOworfQor
CisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfZGlza19jYWNoZV9m
b3Jfb3JpZ2luc19maW5pc2g6CisgKiBAbWFuYWdlcjogYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyCisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0
aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNo
cm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2RlbGV0ZV9kaXNrX2NhY2hlX2Zvcl9vcmlnaW5zKCkuCisgKgorICogUmV0dXJuczogJVRSVUUg
aWYgSFRUUCBkaXNrIGNhY2hlIHJlc291cmNlcyB3ZXJlIHN1Y2Nlc2Z1bGx5IGRlbGV0ZWQsIG9y
ICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMTAKKyAqLworZ2Jvb2xlYW4gd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9kaXNrX2NhY2hlX2Zvcl9vcmlnaW5zX2Zp
bmlzaChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIsIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlciksIEZBTFNFKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgRkFMU0UpOworCisg
ICAgcmV0dXJuIGdfdGFza19wcm9wYWdhdGVfYm9vbGVhbihHX1RBU0socmVzdWx0KSwgZXJyb3Ip
OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNrX2Nh
Y2hlCisgKiBAbWFuYWdlcjogYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKiBAY2FuY2Vs
bGFibGU6IChhbGxvdy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQor
ICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNh
bGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJl
KTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJv
bm91c2x5IGNsZWFyIHRoZSBIVFRQIGRpc2sgY2FjaGUuCisgKgorICogV2hlbiB0aGUgb3BlcmF0
aW9uIGlzIGZpbmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhlbiBj
YWxsCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZGlza19jYWNoZV9maW5p
c2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorICoKKyAqIFNpbmNlOiAy
LjEwCisgKi8KK3ZvaWQgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX2Rpc2tfY2Fj
aGUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuY2VsbGFibGUqIGNhbmNl
bGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkK
K3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUiht
YW5hZ2VyKSk7CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19u
ZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworICAgIG1hbmFn
ZXItPnByaXYtPndlYnNpdGVEYXRhU3RvcmUtPnJlbW92ZURhdGEoV2Vic2l0ZURhdGFUeXBlRGlz
a0NhY2hlLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50OjptaW4oKSwgW3Rh
c2tdIHsKKyAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwor
ICAgIH0pOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9k
aXNrX2NhY2hlX2ZpbmlzaDoKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVycm9yOiByZXR1cm4gbG9jYXRp
b24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAqIEZpbmlzaCBhbiBhc3luY2hy
b25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Y2xlYXJfZGlza19jYWNoZSgpCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgSFRUUCBkaXNrIGNh
Y2hlIHdhcyBzdWNjZXNmdWxseSBjbGVhcmVkLCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAq
IFNpbmNlOiAyLjEwCisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9j
bGVhcl9kaXNrX2NhY2hlX2ZpbmlzaChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIs
IEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlciksIEZBTFNF
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5h
Z2VyKSwgRkFMU0UpOworCisgICAgcmV0dXJuIGdfdGFza19wcm9wYWdhdGVfYm9vbGVhbihHX1RB
U0socmVzdWx0KSwgZXJyb3IpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaAppbmRleCBlOWQ4NTkx
Li41YTRlZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaApAQCAtMjQsNyArMjQsNyBAQAogI2lm
bmRlZiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJfaAogI2RlZmluZSBXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXJfaAogCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnaW8vZ2lv
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAKIEdfQkVHSU5fREVDTFMK
QEAgLTU2LDMxICs1Niw5NyBAQCBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlckNsYXNz
IHsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOword2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKgotd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY29uc3QgZ2NoYXIgICAgICAgICAgICAgICpmaXJzdF9vcHRpb25fbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC4uLik7Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGdjaGFyICAgICAgICAgICAgICAq
Zmlyc3Rfb3B0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiBXRUJLSVRfQVBJIGNvbnN0
IGdjaGFyICoKLXdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFzZV9kYXRhX2RpcmVj
dG9yeSAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7
Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfZGF0YV9kaXJlY3RvcnkgICAg
ICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CiAKIFdF
QktJVF9BUEkgY29uc3QgZ2NoYXIgKgotd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9i
YXNlX2NhY2hlX2RpcmVjdG9yeSAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciAqbWFuYWdlcik7Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2Fj
aGVfZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAq
bWFuYWdlcik7CiAKIFdFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgotd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9yeSAgICAgICAgICAgICAoV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfbG9jYWxfc3RvcmFnZV9kaXJlY3RvcnkgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsKIAogV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCi13ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5ICAgICAgICAg
ICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOword2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSAgICAgICAgICAgICAgICAg
IChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOwogCiBXRUJLSVRfQVBJIGNvbnN0
IGdjaGFyICoKLXdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9hcHBsaWNh
dGlvbl9jYWNoZV9kaXJlY3RvcnkgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7
Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25fY2Fj
aGVfZGlyZWN0b3J5ICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CiAKIFdF
QktJVF9BUEkgY29uc3QgZ2NoYXIgKgotd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9p
bmRleGVkZGJfZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyICptYW5hZ2VyKTsKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRi
X2RpcmVjdG9yeSAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICpt
YW5hZ2VyKTsKIAogV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCi13ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOword2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF93ZWJzcWxfZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIgKm1hbmFnZXIpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9nZXRfb3JpZ2luc19pbl9tZW1vcnlfY2FjaGUgICAgICAgICAgICAgICAo
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2Vs
bGFibGUgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFk
eUNhbGxiYWNrICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAg
ICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgR0xpc3QgKgord2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX21lbW9yeV9jYWNoZV9maW5pc2ggICAgICAg
IChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3lu
Y1Jlc3VsdCAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAg
ICAgICAgICAgICAqKiBlcnJvcik7CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9kZWxldGVfbWVtb3J5X2NhY2hlX2Zvcl9vcmlnaW5zICAgICAgICAgICAoV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCAgICAg
ICAgICAgICAgICAgICAgKm9yaWdpbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAg
ICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sg
ICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAg
dXNlcl9kYXRhKTsKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9kZWxldGVfbWVtb3J5X2NhY2hlX2Zvcl9vcmlnaW5zX2ZpbmlzaCAgICAoV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAg
ICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAg
KiplcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2NsZWFyX21lbW9yeV9jYWNoZSAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAg
ICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAg
ICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgdXNl
cl9kYXRhKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2NsZWFyX21lbW9yeV9jYWNoZV9maW5pc2ggICAgICAgICAgICAgICAgIChXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAg
ICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAq
KmVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Z2V0X29yaWdpbnNfaW5fZGlza19jYWNoZSAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlciAqbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAg
ICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAg
ICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICB1c2Vy
X2RhdGEpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfb3JpZ2luc19pbl9kaXNrX2NhY2hlX2ZpbmlzaCAgICAgICAgICAoV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAg
ICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgKipl
cnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2Rl
bGV0ZV9kaXNrX2NhY2hlX2Zvcl9vcmlnaW5zICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaXN0ICAgICAgICAgICAgICAgICAg
ICAqb3JpZ2lucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICpjYW5j
ZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICBjYWxsYmFj
aywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOwor
V0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9k
aXNrX2NhY2hlX2Zvcl9vcmlnaW5zX2ZpbmlzaCAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAqcmVz
dWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKKwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZGlza19j
YWNoZSAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAq
bWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICpjYW5jZWxs
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICBjYWxsYmFjaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZGlz
a19jYWNoZV9maW5pc2ggICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciAqbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICpyZXN1
bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCiAK
IEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKaW5kZXggOWUx
YTkyMS4uZWZhNTkzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTEx
NzMsNiArMTE3MywyMyBAQCB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9nZXRfdHlwZQogPC9TRUNU
SU9OPgogCiA8U0VDVElPTj4KKzxGSUxFPldlYktpdFNlY3VyaXR5T3JpZ2luPC9GSUxFPgorV2Vi
S2l0U2VjdXJpdHlPcmlnaW4KK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3Cit3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX3JlZgord2Via2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZgord2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2wKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hv
c3QKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQKKworPFNVQlNFQ1RJT04gU3RhbmRh
cmQ+CitXRUJLSVRfVFlQRV9TRUNVUklUWV9PUklHSU4KKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4K
K3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+
CiA8RklMRT5XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI8L0ZJTEU+CiBXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcKQEAgLTExODMsNiArMTIw
MCwxOCBAQCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0
b3J5CiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25f
Y2FjaGVfZGlyZWN0b3J5CiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRk
Yl9kaXJlY3RvcnkKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVj
dG9yeQord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX21lbW9yeV9j
YWNoZQord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX21lbW9yeV9j
YWNoZV9maW5pc2gKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfbWVtb3J5X2Nh
Y2hlX2Zvcl9vcmlnaW5zCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX21lbW9y
eV9jYWNoZV9mb3Jfb3JpZ2luc19maW5pc2gKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9j
bGVhcl9tZW1vcnlfY2FjaGUKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9tZW1v
cnlfY2FjaGVfZmluaXNoCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNf
aW5fZGlza19jYWNoZQord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2lu
X2Rpc2tfY2FjaGVfZmluaXNoCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rp
c2tfY2FjaGVfZm9yX29yaWdpbnMKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVf
ZGlza19jYWNoZV9mb3Jfb3JpZ2luc19maW5pc2gKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9jbGVhcl9kaXNrX2NhY2hlCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZGlz
a19jYWNoZV9maW5pc2gKIAogPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CiBXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXJDbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLTQuMC50eXBlcyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAudHlwZXMKaW5kZXggOWNkYzA5OC4uOWRjZmNiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLTQuMC50eXBlcworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstNC4wLnR5cGVzCkBAIC0zMSwzICszMSw0IEBAIHdlYmtpdF91c2VyX2NvbnRl
bnRfbWFuYWdlcl9nZXRfdHlwZQogd2Via2l0X3dlYl9oaXRfdGVzdF9yZXN1bHRfZ2V0X3R5cGUK
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdHlwZQogd2Via2l0X2VkaXRvcl9zdGF0
ZV9nZXRfdHlwZQord2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfdHlwZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dt
bCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2Nz
LnNnbWwKaW5kZXggMDNlZWMyNy4uNjM2MzI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCkBAIC01
MCw2ICs1MCw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFVzZXJDb250ZW50
LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXROb3RpZmljYXRpb24ueG1s
Ii8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdE5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRTZWN1cml0
eU9yaWdpbi54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyLnhtbCIvPgogICA8L2NoYXB0ZXI+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBjZWE0ZWE4Li43OTkxYzVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC02MCw2ICs2MCw3IEBACiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLmg+CiAjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXRTY3JpcHREaWFsb2cuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNl
Y3VyaXR5TWFuYWdlci5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2VjdXJpdHlPcmlnaW4u
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXNwb25z
ZS5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IGU2MzU0MmUuLmM5NTVhNWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxNS0wNy0wMyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIEFQSSB0byBX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgdG8gaGFuZGxlIGNhY2hlZCBkYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY1ODkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdW5pdCB0ZXN0cyBmb3Ig
bmV3IEFQSSwgYW5kIGltcGxlbWVudCBhYm91dDpkYXRhIGluCisgICAgICAgIE1pbmlCcm93c29y
ZSB0byBzaG93IGFuZCBoYW5kbGUgV2Vic2l0ZSBkYXRhLgorCisgICAgICAgICogTWluaUJyb3dz
ZXIvZ3RrL21haW4uYzoKKyAgICAgICAgKGNyZWF0ZUJyb3dzZXJXaW5kb3cpOgorICAgICAgICAo
YWJvdXREYXRhUmVxdWVzdEZyZWUpOgorICAgICAgICAoYWJvdXREYXRhUmVxdWVzdE5ldyk6Cisg
ICAgICAgIChhYm91dERhdGFSZXF1ZXN0Rm9yVmlldyk6CisgICAgICAgIChtZW1vcnlDYWNoZU9y
aWdpbnNEZWxldGVkQ2FsbGJhY2spOgorICAgICAgICAobWVtb3J5Q2FjaGVDbGVhcmVkQ2FsbGJh
Y2spOgorICAgICAgICAoZGlza0NhY2hlT3JpZ2luc0RlbGV0ZWRDYWxsYmFjayk6CisgICAgICAg
IChkaXNrQ2FjaGVDbGVhcmVkQ2FsbGJhY2spOgorICAgICAgICAoYWJvdXREYXRhU2NyaXB0TWVz
c2FnZVJlY2VpdmVkQ2FsbGJhY2spOgorICAgICAgICAoYWJvdXREYXRhRmlsbE9yaWdpbnNUYWJs
ZSk6CisgICAgICAgIChhYm91dERhdGFIYW5kbGVGaW5pc2hSZXF1ZXN0SWZDb21wbGV0ZSk6Cisg
ICAgICAgIChnb3RNZW1vcnlDYWNoZU9yaWdpbnNDYWxsYmFjayk6CisgICAgICAgIChnb3REaXNr
Q2FjaGVPcmlnaW5zQ2FsbGJhY2spOgorICAgICAgICAoYWJvdXREYXRhSGFuZGxlUmVxdWVzdCk6
CisgICAgICAgIChhYm91dFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChtYWlu
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdl
YkNvbnRleHQuY3BwOgorICAgICAgICAoV2Vic2l0ZURhdGFUZXN0OjpXZWJzaXRlRGF0YVRlc3Qp
OgorICAgICAgICAoV2Vic2l0ZURhdGFUZXN0Ojp+V2Vic2l0ZURhdGFUZXN0KToKKyAgICAgICAg
KFdlYnNpdGVEYXRhVGVzdDo6Y2xlYXJPcmlnaW5zKToKKyAgICAgICAgKFdlYnNpdGVEYXRhVGVz
dDo6ZmV0Y2hPcmlnaW5zQ2FsbGJhY2spOgorICAgICAgICAoV2Vic2l0ZURhdGFUZXN0OjpmZXRj
aE9yaWdpbnMpOgorICAgICAgICAoV2Vic2l0ZURhdGFUZXN0OjpkZWxldGVPcmlnaW5zQ2FsbGJh
Y2spOgorICAgICAgICAoV2Vic2l0ZURhdGFUZXN0OjpkZWxldGVPcmlnaW5zQW5kV2FpdFVudGls
RmluaXNoZWQpOgorICAgICAgICAoV2Vic2l0ZURhdGFUZXN0OjpkZWxldGVBbGxPcmlnaW5zQ2Fs
bGJhY2spOgorICAgICAgICAoV2Vic2l0ZURhdGFUZXN0OjpkZWxldGVBbGxPcmlnaW5zQW5kV2Fp
dFVudGlsRmluaXNoZWQpOgorICAgICAgICAodGVzdFdlYkNvbnRleHRXZWJzaXRlRGF0YUNhY2hl
KToKKyAgICAgICAgKHRlc3RTZWN1cml0eU9yaWdpbkJhc2ljKToKKyAgICAgICAgKGJlZm9yZUFs
bCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9ndGsvV2Vi
S2l0Mkd0ay9UZXN0TWFpbi5oOgorICAgICAgICAoVGVzdDo6VGVzdCk6IEFkZCBwcm9jZXNzIG1v
ZGVsIHBhcmFtZXRlciB0byBiZSBhYmxlIHRvIGNyZWF0ZQorICAgICAgICB0ZXN0cyB3aXRoIGEg
cGFydGljdWxhciBwcm9jZXNzIG1vZGVsLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dl
YktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OldlYlZpZXdU
ZXN0KTogQWRkIGNvbnN0cnVjdG9yIHRoYXQgcmVjZWl2ZXMgYQorICAgICAgICBwcm9jZXNzIG1v
ZGVsLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3Qu
aDoKKwogMjAxNS0wNy0yNCAgSHl1bmd3b29rIExlZSAgPGh5dW5nd29vay5sZWVAbmF2ZXJjb3Jw
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCB1cGRhdGVkIG15IG5pY2sgbmFtZSBpbiBjb250
cmlidXRvcnMuanNvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYyBi
L1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKaW5kZXggZjVmNmUxNy4uZWIzMzQwMCAxMDA2
NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYworKysgYi9Ub29scy9NaW5pQnJv
d3Nlci9ndGsvbWFpbi5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiY21ha2Vjb25maWcu
aCIKIAogI2luY2x1ZGUgIkJyb3dzZXJXaW5kb3cuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+
CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC01OCw5ICs1OSw5IEBAIHN0YXRpYyBnY2hhciAqYXJn
dW1lbnRUb1VSTChjb25zdCBjaGFyICpmaWxlbmFtZSkKICAgICByZXR1cm4gZmlsZVVSTDsKIH0K
IAotc3RhdGljIHZvaWQgY3JlYXRlQnJvd3NlcldpbmRvdyhjb25zdCBnY2hhciAqdXJpLCBXZWJL
aXRTZXR0aW5ncyAqd2Via2l0U2V0dGluZ3MpCitzdGF0aWMgdm9pZCBjcmVhdGVCcm93c2VyV2lu
ZG93KGNvbnN0IGdjaGFyICp1cmksIFdlYktpdFNldHRpbmdzICp3ZWJraXRTZXR0aW5ncywgV2Vi
S2l0VXNlckNvbnRlbnRNYW5hZ2VyICp1c2VyQ29udGVudE1hbmFnZXIpCiB7Ci0gICAgR3RrV2lk
Z2V0ICp3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIEd0a1dpZGdldCAqd2Vi
VmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF91c2VyX2NvbnRlbnRfbWFuYWdlcih1c2Vy
Q29udGVudE1hbmFnZXIpOwogICAgIGlmIChlZGl0b3JNb2RlKQogICAgICAgICB3ZWJraXRfd2Vi
X3ZpZXdfc2V0X2VkaXRhYmxlKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwgVFJVRSk7CiAgICAg
R3RrV2lkZ2V0ICptYWluV2luZG93ID0gYnJvd3Nlcl93aW5kb3dfbmV3KFdFQktJVF9XRUJfVklF
Vyh3ZWJWaWV3KSwgTlVMTCk7CkBAIC0yMzIsOCArMjMzLDIwMCBAQCBzdGF0aWMgZ2Jvb2xlYW4g
YWRkU2V0dGluZ3NHcm91cFRvQ29udGV4dChHT3B0aW9uQ29udGV4dCAqY29udGV4dCwgV2ViS2l0
U2V0dGluZwogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgdm9pZAotYWJvdXRVUklTY2hl
bWVSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwgZ3BvaW50
ZXIgdXNlckRhdGEpCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0VVJJU2NoZW1lUmVxdWVz
dCAqcmVxdWVzdDsKKyAgICBHTGlzdCAqbWVtb3J5Q2FjaGVPcmlnaW5zOworICAgIEdMaXN0ICpk
aXNrQ2FjaGVPcmlnaW5zOworICAgIGdib29sZWFuIGdvdE1lbW9yeUNhY2hlT3JpZ2luczsKKyAg
ICBnYm9vbGVhbiBnb3REaXNrQ2FjaGVPcmlnaW5zOworfSBBYm91dERhdGFSZXF1ZXN0OworCitz
dGF0aWMgR0hhc2hUYWJsZSAqYWJvdXREYXRhUmVxdWVzdE1hcDsKKworc3RhdGljIHZvaWQgYWJv
dXREYXRhUmVxdWVzdEZyZWUoQWJvdXREYXRhUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICBpZiAo
IXJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAgIGdfbGlzdF9mcmVlX2Z1bGwocmVxdWVz
dC0+bWVtb3J5Q2FjaGVPcmlnaW5zLCAoR0Rlc3Ryb3lOb3RpZnkpd2Via2l0X3NlY3VyaXR5X29y
aWdpbl91bnJlZik7CisgICAgZ19saXN0X2ZyZWVfZnVsbChyZXF1ZXN0LT5kaXNrQ2FjaGVPcmln
aW5zLCAoR0Rlc3Ryb3lOb3RpZnkpd2Via2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZik7CisgICAg
aWYgKHJlcXVlc3QtPnJlcXVlc3QpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QtPnJl
cXVlc3QpOworCisgICAgZ19zbGljZV9mcmVlKEFib3V0RGF0YVJlcXVlc3QsIHJlcXVlc3QpOwor
fQorCitzdGF0aWMgQWJvdXREYXRhUmVxdWVzdCogYWJvdXREYXRhUmVxdWVzdE5ldyhXZWJLaXRV
UklTY2hlbWVSZXF1ZXN0ICp1cmlSZXF1ZXN0KQoreworICAgIGlmICghYWJvdXREYXRhUmVxdWVz
dE1hcCkKKyAgICAgICAgYWJvdXREYXRhUmVxdWVzdE1hcCA9IGdfaGFzaF90YWJsZV9uZXdfZnVs
bChnX2RpcmVjdF9oYXNoLCBnX2RpcmVjdF9lcXVhbCwgTlVMTCwgKEdEZXN0cm95Tm90aWZ5KWFi
b3V0RGF0YVJlcXVlc3RGcmVlKTsKKworICAgIEFib3V0RGF0YVJlcXVlc3QgKnJlcXVlc3QgPSBn
X3NsaWNlX25ldzAoQWJvdXREYXRhUmVxdWVzdCk7CisgICAgcmVxdWVzdC0+cmVxdWVzdCA9IGdf
b2JqZWN0X3JlZih1cmlSZXF1ZXN0KTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KGFib3V0RGF0
YVJlcXVlc3RNYXAsIEdVSU5UX1RPX1BPSU5URVIod2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lk
KHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92aWV3KHJlcXVlc3QtPnJlcXVlc3Qp
KSksIHJlcXVlc3QpOworCisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK3N0YXRpYyBBYm91dERh
dGFSZXF1ZXN0ICphYm91dERhdGFSZXF1ZXN0Rm9yVmlldyhndWludDY0IHBhZ2VJRCkKK3sKKyAg
ICByZXR1cm4gYWJvdXREYXRhUmVxdWVzdE1hcCA/IGdfaGFzaF90YWJsZV9sb29rdXAoYWJvdXRE
YXRhUmVxdWVzdE1hcCwgR1VJTlRfVE9fUE9JTlRFUihwYWdlSUQpKSA6IE5VTEw7Cit9CisKK3N0
YXRpYyB2b2lkIG1lbW9yeUNhY2hlT3JpZ2luc0RlbGV0ZWRDYWxsYmFjayhXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBBYm91dERhdGFSZXF1
ZXN0ICpyZXF1ZXN0KQoreworICAgIGlmICh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVs
ZXRlX21lbW9yeV9jYWNoZV9mb3Jfb3JpZ2luc19maW5pc2gobWFuYWdlciwgcmVzdWx0LCBOVUxM
KSkKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1
ZXN0X2dldF93ZWJfdmlldyhyZXF1ZXN0LT5yZXF1ZXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIG1l
bW9yeUNhY2hlQ2xlYXJlZENhbGxiYWNrKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdl
ciwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIEFib3V0RGF0YVJlcXVlc3QgKnJlcXVlc3QpCit7Cisg
ICAgaWYgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9tZW1vcnlfY2FjaGVfZmlu
aXNoKG1hbmFnZXIsIHJlc3VsdCwgTlVMTCkpCisgICAgICAgIHdlYmtpdF93ZWJfdmlld19yZWxv
YWQod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfd2ViX3ZpZXcocmVxdWVzdC0+cmVxdWVz
dCkpOworfQorCitzdGF0aWMgdm9pZCBkaXNrQ2FjaGVPcmlnaW5zRGVsZXRlZENhbGxiYWNrKFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIEFi
b3V0RGF0YVJlcXVlc3QgKnJlcXVlc3QpCit7CisgICAgaWYgKHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9kZWxldGVfZGlza19jYWNoZV9mb3Jfb3JpZ2luc19maW5pc2gobWFuYWdlciwgcmVz
dWx0LCBOVUxMKSkKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZCh3ZWJraXRfdXJpX3Nj
aGVtZV9yZXF1ZXN0X2dldF93ZWJfdmlldyhyZXF1ZXN0LT5yZXF1ZXN0KSk7Cit9CisKK3N0YXRp
YyB2b2lkIGRpc2tDYWNoZUNsZWFyZWRDYWxsYmFjayhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIg
Km1hbmFnZXIsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBBYm91dERhdGFSZXF1ZXN0ICpyZXF1ZXN0
KQoreworICAgIGlmICh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZGlza19jYWNo
ZV9maW5pc2gobWFuYWdlciwgcmVzdWx0LCBOVUxMKSkKKyAgICAgICAgd2Via2l0X3dlYl92aWV3
X3JlbG9hZCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF93ZWJfdmlldyhyZXF1ZXN0LT5y
ZXF1ZXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGFib3V0RGF0YVNjcmlwdE1lc3NhZ2VSZWNlaXZl
ZENhbGxiYWNrKFdlYktpdFVzZXJDb250ZW50TWFuYWdlciAqdXNlckNvbnRlbnRNYW5hZ2VyLCBX
ZWJLaXRKYXZhc2NyaXB0UmVzdWx0ICptZXNzYWdlKQoreworICAgIEpTVmFsdWVSZWYganNWYWx1
ZSA9IHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfdmFsdWUobWVzc2FnZSk7CisgICAgSlNT
dHJpbmdSZWYganNTdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KHdlYmtpdF9qYXZhc2NyaXB0
X3Jlc3VsdF9nZXRfZ2xvYmFsX2NvbnRleHQobWVzc2FnZSksIGpzVmFsdWUsIE5VTEwpOworICAg
IHNpemVfdCBtYXhTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGpzU3Ry
aW5nKTsKKyAgICBpZiAoIW1heFNpemUpIHsKKyAgICAgICAgSlNTdHJpbmdSZWxlYXNlKGpzU3Ry
aW5nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjaGFyICptZXNzYWdlU3RyaW5nID0g
Z19tYWxsb2MobWF4U2l6ZSk7CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhqc1N0cmluZywg
bWVzc2FnZVN0cmluZywgbWF4U2l6ZSk7CisgICAgSlNTdHJpbmdSZWxlYXNlKGpzU3RyaW5nKTsK
KworICAgIGNoYXIgKip0b2tlbnMgPSBnX3N0cnNwbGl0KG1lc3NhZ2VTdHJpbmcsICI6IiwgMyk7
CisgICAgZ19mcmVlKG1lc3NhZ2VTdHJpbmcpOworCisgICAgdW5zaWduZWQgdG9rZW5Db3VudCA9
IGdfc3Rydl9sZW5ndGgodG9rZW5zKTsKKyAgICBpZiAoIXRva2VucyB8fCB0b2tlbkNvdW50IDwg
MikgeworICAgICAgICBnX3N0cmZyZWV2KHRva2Vucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBndWludDY0IHBhZ2VJRCA9IGdfYXNjaWlfc3RydG91bGwodG9rZW5zWzFdLCBOVUxM
LCAxMCk7CisgICAgQWJvdXREYXRhUmVxdWVzdCAqcmVxdWVzdCA9IGFib3V0RGF0YVJlcXVlc3RG
b3JWaWV3KHBhZ2VJRCk7CisgICAgaWYgKCFyZXF1ZXN0KSB7CisgICAgICAgIGdfc3RyZnJlZXYo
dG9rZW5zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciAqbWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOworICAgIGlmICh0b2tlbkNv
dW50ID09IDIpIHsKKyAgICAgICAgaWYgKGdfc3RyX2VxdWFsKHRva2Vuc1swXSwgIm1lbW9yeSIp
KQorICAgICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX21lbW9yeV9j
YWNoZShtYW5hZ2VyLCBOVUxMLCAoR0FzeW5jUmVhZHlDYWxsYmFjayltZW1vcnlDYWNoZUNsZWFy
ZWRDYWxsYmFjaywgcmVxdWVzdCk7CisgICAgICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKHRva2Vu
c1swXSwgImRpc2siKSkKKyAgICAgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9j
bGVhcl9kaXNrX2NhY2hlKG1hbmFnZXIsIE5VTEwsIChHQXN5bmNSZWFkeUNhbGxiYWNrKWRpc2tD
YWNoZUNsZWFyZWRDYWxsYmFjaywgcmVxdWVzdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ3Vp
bnQ2NCBvcmlnaW5JRCA9IGdfYXNjaWlfc3RydG91bGwodG9rZW5zWzJdLCBOVUxMLCAxMCk7Cisg
ICAgICAgIGlmIChnX3N0cl9lcXVhbCh0b2tlbnNbMF0sICJtZW1vcnkiKSkgeworICAgICAgICAg
ICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4gKm9yaWdpbiA9IGdfbGlzdF9udGhfZGF0YShyZXF1ZXN0
LT5tZW1vcnlDYWNoZU9yaWdpbnMsIG9yaWdpbklEKTsKKyAgICAgICAgICAgIGlmIChvcmlnaW4p
IHsKKyAgICAgICAgICAgICAgICBHTGlzdCBvcmlnaW5zID0geyBvcmlnaW4sIE5VTEwsIE5VTEwg
fTsKKyAgICAgICAgICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX21l
bW9yeV9jYWNoZV9mb3Jfb3JpZ2lucyhtYW5hZ2VyLCAmb3JpZ2lucywgTlVMTCwgKEdBc3luY1Jl
YWR5Q2FsbGJhY2spbWVtb3J5Q2FjaGVPcmlnaW5zRGVsZXRlZENhbGxiYWNrLCByZXF1ZXN0KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCh0b2tlbnNbMF0s
ICJkaXNrIikpIHsKKyAgICAgICAgICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luICpvcmlnaW4gPSBn
X2xpc3RfbnRoX2RhdGEocmVxdWVzdC0+ZGlza0NhY2hlT3JpZ2lucywgb3JpZ2luSUQpOworICAg
ICAgICAgICAgaWYgKG9yaWdpbikgeworICAgICAgICAgICAgICAgIEdMaXN0IG9yaWdpbnMgPSB7
IG9yaWdpbiwgTlVMTCwgTlVMTCB9OworICAgICAgICAgICAgICAgIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9kZWxldGVfZGlza19jYWNoZV9mb3Jfb3JpZ2lucyhtYW5hZ2VyLCAmb3JpZ2lu
cywgTlVMTCwgKEdBc3luY1JlYWR5Q2FsbGJhY2spZGlza0NhY2hlT3JpZ2luc0RlbGV0ZWRDYWxs
YmFjaywgcmVxdWVzdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZ19z
dHJmcmVldih0b2tlbnMpOworfQorCitzdGF0aWMgdm9pZCBhYm91dERhdGFGaWxsT3JpZ2luc1Rh
YmxlKEdTdHJpbmcgKnJlc3VsdCwgR0xpc3QgKm9yaWdpbnMsIGNvbnN0IGNoYXIgKnRpdGxlLCBj
b25zdCBjaGFyICpkYXRhVHlwZSwgY29uc3QgY2hhciAqZGF0YVBhdGgsIGd1aW50NjQgcGFnZUlE
KQoreworICAgIGlmICghb3JpZ2lucykKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zdHJpbmdf
YXBwZW5kX3ByaW50ZihyZXN1bHQsICI8aDE+JXM8L2gxPlxuPHRhYmxlPlxuIiwgdGl0bGUpOwor
ICAgIGlmIChkYXRhUGF0aCkKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZihyZXN1bHQs
ICI8dHI+PHRkIGNvbHNwYW49XCIyXCI+UGF0aDogJXM8L3RkPjwvdHI+XG4iLCBkYXRhUGF0aCk7
CisKKyAgICBHTGlzdCAqbDsKKyAgICB1bnNpZ25lZCBpbmRleDsKKyAgICBmb3IgKGwgPSBvcmln
aW5zLCBpbmRleCA9IDA7IGw7IGwgPSBnX2xpc3RfbmV4dChsKSwgaW5kZXgrKykgeworICAgICAg
ICBXZWJLaXRTZWN1cml0eU9yaWdpbiAqb3JpZ2luID0gKFdlYktpdFNlY3VyaXR5T3JpZ2luICop
bC0+ZGF0YTsKKyAgICAgICAgY2hhciAqZGlzcGxheU5hbWU7CisgICAgICAgIGlmICh3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0KG9yaWdpbikpCisgICAgICAgICAgICBkaXNwbGF5TmFt
ZSA9IGdfc3RyZHVwX3ByaW50ZigiJXM6JXUiLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9o
b3N0KG9yaWdpbiksIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQob3JpZ2luKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpc3BsYXlOYW1lID0gZ19zdHJkdXAod2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9nZXRfaG9zdChvcmlnaW4pKTsKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5k
X3ByaW50ZihyZXN1bHQsICI8dHI+PHRkPiVzPC90ZD48dGQ+PGlucHV0IHR5cGU9XCJidXR0b25c
IiB2YWx1ZT1cImNsZWFyXCIgb25jbGljaz1cImNsZWFyRGF0YSgnJXM6JSJHX0dVSU5UNjRfRk9S
TUFUIjoldScpO1wiPjwvdGQ+PC90cj5cbiIsCisgICAgICAgICAgICBkaXNwbGF5TmFtZSwgZGF0
YVR5cGUsIHBhZ2VJRCwgaW5kZXgpOworICAgICAgICBnX2ZyZWUoZGlzcGxheU5hbWUpOworICAg
IH0KKyAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmKHJlc3VsdCwgIjx0cj48dGQ+PGlucHV0IHR5
cGU9XCJidXR0b25cIiB2YWx1ZT1cImNsZWFyIGFsbFwiIG9uY2xpY2s9XCJjbGVhckRhdGEoJyVz
OiUiR19HVUlOVDY0X0ZPUk1BVCInKTtcIj48L3RkPjwvdHI+PC90YWJsZT5cbiIsCisgICAgICAg
IGRhdGFUeXBlLCBwYWdlSUQpOworfQorCitzdGF0aWMgdm9pZCBhYm91dERhdGFIYW5kbGVGaW5p
c2hSZXF1ZXN0SWZDb21wbGV0ZShBYm91dERhdGFSZXF1ZXN0ICpyZXF1ZXN0KQoreworICAgIGlm
ICghcmVxdWVzdC0+Z290TWVtb3J5Q2FjaGVPcmlnaW5zIHx8ICFyZXF1ZXN0LT5nb3REaXNrQ2Fj
aGVPcmlnaW5zKQorICAgICAgICByZXR1cm47CisKKyAgICBHU3RyaW5nICpyZXN1bHQgPSBnX3N0
cmluZ19uZXcoCisgICAgICAgICI8aHRtbD48aGVhZD4iCisgICAgICAgICI8c2NyaXB0PiIKKyAg
ICAgICAgIiAgZnVuY3Rpb24gY2xlYXJEYXRhKG9yaWdpbikgeyIKKyAgICAgICAgIiAgICB3aW5k
b3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5hYm91dERhdGEucG9zdE1lc3NhZ2Uob3JpZ2luKTsi
CisgICAgICAgICIgIH0iCisgICAgICAgICIgIGZ1bmN0aW9uIGNsZWFyQWxsRGF0YShkYXRhVHlw
ZSkgeyIKKyAgICAgICAgIiAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5hYm91dERh
dGEucG9zdE1lc3NhZ2UoZGF0YVR5cGUpOyIKKyAgICAgICAgIiAgfSIKKyAgICAgICAgIjwvc2Ny
aXB0PjwvaGVhZD48Ym9keT5cbiIpOworCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBt
YW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7CisgICAgZ3VpbnQ2NCBwYWdlSUQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfd2Vi
X3ZpZXcocmVxdWVzdC0+cmVxdWVzdCkpOworICAgIGFib3V0RGF0YUZpbGxPcmlnaW5zVGFibGUo
cmVzdWx0LCByZXF1ZXN0LT5tZW1vcnlDYWNoZU9yaWdpbnMsICJNZW1vcnkgQ2FjaGUiLCAibWVt
b3J5IiwgTlVMTCwgcGFnZUlEKTsKKyAgICBhYm91dERhdGFGaWxsT3JpZ2luc1RhYmxlKHJlc3Vs
dCwgcmVxdWVzdC0+ZGlza0NhY2hlT3JpZ2lucywgIkRpc2sgQ2FjaGUiLCAiZGlzayIsIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkobWFuYWdlciks
IHBhZ2VJRCk7CisKKyAgICByZXN1bHQgPSBnX3N0cmluZ19hcHBlbmQocmVzdWx0LCAiPC9ib2R5
PjwvaHRtbD4iKTsKKyAgICBnc2l6ZSBzdHJlYW1MZW5ndGggPSByZXN1bHQtPmxlbjsKKyAgICBH
SW5wdXRTdHJlYW0gKnN0cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXdfZnJvbV9kYXRh
KGdfc3RyaW5nX2ZyZWUocmVzdWx0LCBGQUxTRSksIHN0cmVhbUxlbmd0aCwgZ19mcmVlKTsKKyAg
ICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaChyZXF1ZXN0LT5yZXF1ZXN0LCBzdHJl
YW0sIHN0cmVhbUxlbmd0aCwgInRleHQvaHRtbCIpOworfQorCitzdGF0aWMgdm9pZCBnb3RNZW1v
cnlDYWNoZU9yaWdpbnNDYWxsYmFjayhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIs
IEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBBYm91dERhdGFSZXF1ZXN0ICpyZXF1ZXN0KQoreworICAg
IHJlcXVlc3QtPmdvdE1lbW9yeUNhY2hlT3JpZ2lucyA9IFRSVUU7CisgICAgcmVxdWVzdC0+bWVt
b3J5Q2FjaGVPcmlnaW5zID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5z
X2luX21lbW9yeV9jYWNoZV9maW5pc2gobWFuYWdlciwgcmVzdWx0LCBOVUxMKTsKKyAgICBhYm91
dERhdGFIYW5kbGVGaW5pc2hSZXF1ZXN0SWZDb21wbGV0ZShyZXF1ZXN0KTsKK30KKworc3RhdGlj
IHZvaWQgZ290RGlza0NhY2hlT3JpZ2luc0NhbGxiYWNrKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciAqbWFuYWdlciwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIEFib3V0RGF0YVJlcXVlc3QgKnJlcXVl
c3QpCit7CisgICAgcmVxdWVzdC0+Z290RGlza0NhY2hlT3JpZ2lucyA9IFRSVUU7CisgICAgcmVx
dWVzdC0+ZGlza0NhY2hlT3JpZ2lucyA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
b3JpZ2luc19pbl9kaXNrX2NhY2hlX2ZpbmlzaChtYW5hZ2VyLCByZXN1bHQsIE5VTEwpOworICAg
IGFib3V0RGF0YUhhbmRsZUZpbmlzaFJlcXVlc3RJZkNvbXBsZXRlKHJlcXVlc3QpOworfQorCitz
dGF0aWMgdm9pZCBhYm91dERhdGFIYW5kbGVSZXF1ZXN0KFdlYktpdFVSSVNjaGVtZVJlcXVlc3Qg
KnJlcXVlc3QpCit7CisgICAgQWJvdXREYXRhUmVxdWVzdCAqZGF0YVJlcXVlc3QgPSBhYm91dERh
dGFSZXF1ZXN0TmV3KHJlcXVlc3QpOworICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFu
YWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0
X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOworICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9nZXRfb3JpZ2luc19pbl9tZW1vcnlfY2FjaGUobWFuYWdlciwgTlVMTCwgKEdBc3luY1Jl
YWR5Q2FsbGJhY2spZ290TWVtb3J5Q2FjaGVPcmlnaW5zQ2FsbGJhY2ssIGRhdGFSZXF1ZXN0KTsK
KyAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fZGlza19jYWNo
ZShtYW5hZ2VyLCBOVUxMLCAoR0FzeW5jUmVhZHlDYWxsYmFjaylnb3REaXNrQ2FjaGVPcmlnaW5z
Q2FsbGJhY2ssIGRhdGFSZXF1ZXN0KTsKK30KKworc3RhdGljIHZvaWQgYWJvdXRVUklTY2hlbWVS
ZXF1ZXN0Q2FsbGJhY2soV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwgZ3BvaW50ZXIg
dXNlckRhdGEpCiB7CiAgICAgR0lucHV0U3RyZWFtICpzdHJlYW07CiAgICAgZ3NpemUgc3RyZWFt
TGVuZ3RoOwpAQCAtMjUyLDcgKzQ0NSw5IEBAIGFib3V0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNr
KFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QsIGdwb2ludGVyIHVzZXJEYXRhCiAKICAg
ICAgICAgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gocmVxdWVzdCwgc3RyZWFtLCBz
dHJlYW1MZW5ndGgsICJ0ZXh0L2h0bWwiKTsKICAgICAgICAgZ19vYmplY3RfdW5yZWYoc3RyZWFt
KTsKLSAgICB9IGVsc2UgeworICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChwYXRoLCAiZGF0YSIp
KQorICAgICAgICBhYm91dERhdGFIYW5kbGVSZXF1ZXN0KHJlcXVlc3QpOworICAgIGVsc2Ugewog
ICAgICAgICBlcnJvciA9IGdfZXJyb3JfbmV3KE1JTklfQlJPV1NFUl9FUlJPUiwgTUlOSV9CUk9X
U0VSX0VSUk9SX0lOVkFMSURfQUJPVVRfUEFUSCwgIkludmFsaWQgYWJvdXQ6JXMgcGFnZS4iLCBw
YXRoKTsKICAgICAgICAgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2hfZXJyb3IocmVx
dWVzdCwgZXJyb3IpOwogICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwpAQCAtMjk1LDEzICs0
OTAsMTcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogICAgIHdlYmtpdF93
ZWJfY29udGV4dF9yZWdpc3Rlcl91cmlfc2NoZW1lKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVm
YXVsdCgpLCBtaW5pQnJvd3NlckFib3V0U2NoZW1lLCBhYm91dFVSSVNjaGVtZVJlcXVlc3RDYWxs
YmFjaywgTlVMTCwgTlVMTCk7CiAKKyAgICBXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIgKnVzZXJD
b250ZW50TWFuYWdlciA9IHdlYmtpdF91c2VyX2NvbnRlbnRfbWFuYWdlcl9uZXcoKTsKKyAgICB3
ZWJraXRfdXNlcl9jb250ZW50X21hbmFnZXJfcmVnaXN0ZXJfc2NyaXB0X21lc3NhZ2VfaGFuZGxl
cih1c2VyQ29udGVudE1hbmFnZXIsICJhYm91dERhdGEiKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHVzZXJDb250ZW50TWFuYWdlciwgInNjcmlwdC1tZXNzYWdlLXJlY2VpdmVkOjphYm91dERhdGEi
LCBHX0NBTExCQUNLKGFib3V0RGF0YVNjcmlwdE1lc3NhZ2VSZWNlaXZlZENhbGxiYWNrKSwgTlVM
TCk7CisKICAgICBpZiAodXJpQXJndW1lbnRzKSB7CiAgICAgICAgIGludCBpOwogCiAgICAgICAg
IGZvciAoaSA9IDA7IHVyaUFyZ3VtZW50c1tpXTsgaSsrKQotICAgICAgICAgICAgY3JlYXRlQnJv
d3NlcldpbmRvdyh1cmlBcmd1bWVudHNbaV0sIHdlYmtpdFNldHRpbmdzKTsKKyAgICAgICAgICAg
IGNyZWF0ZUJyb3dzZXJXaW5kb3codXJpQXJndW1lbnRzW2ldLCB3ZWJraXRTZXR0aW5ncywgdXNl
ckNvbnRlbnRNYW5hZ2VyKTsKICAgICB9IGVsc2UKLSAgICAgICAgY3JlYXRlQnJvd3NlcldpbmRv
dyhCUk9XU0VSX0RFRkFVTFRfVVJMLCB3ZWJraXRTZXR0aW5ncyk7CisgICAgICAgIGNyZWF0ZUJy
b3dzZXJXaW5kb3coQlJPV1NFUl9ERUZBVUxUX1VSTCwgd2Via2l0U2V0dGluZ3MsIHVzZXJDb250
ZW50TWFuYWdlcik7CiAKICAgICBnX2NsZWFyX29iamVjdCgmd2Via2l0U2V0dGluZ3MpOwogCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktp
dFdlYkNvbnRleHQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RXZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCA5NmEzNGIxLi45MjdhNmIzIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRl
eHQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2Vi
S2l0V2ViQ29udGV4dC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CiAKIHN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworc3RhdGlj
IFdlYktpdFRlc3RTZXJ2ZXIqIGtIdHRwc1NlcnZlcjsKIAogc3RhdGljIHZvaWQgdGVzdFdlYkNv
bnRleHREZWZhdWx0KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CkBAIC01NDksMTEgKzU1
MCwyNDIgQEAgc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRTZWN1cml0eUZpbGVYSFIoV2ViVmll
d1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgd2Via2l0X3NldHRpbmdzX3NldF9hbGxv
d19maWxlX2FjY2Vzc19mcm9tX2ZpbGVfdXJscyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdz
KHRlc3QtPm1fd2ViVmlldyksIEZBTFNFKTsKIH0KIAorY2xhc3MgV2Vic2l0ZURhdGFUZXN0IDog
cHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJF
KFdlYnNpdGVEYXRhVGVzdCk7CisKKyAgICBlbnVtIGNsYXNzIERhdGFUeXBlIHsKKyAgICAgICAg
TWVtb3J5Q2FjaGUsCisgICAgICAgIERpc2tDYWNoZQorICAgIH07CisKKyAgICBXZWJzaXRlRGF0
YVRlc3QoKQorICAgICAgICA6IFdlYlZpZXdUZXN0KFdFQktJVF9QUk9DRVNTX01PREVMX01VTFRJ
UExFX1NFQ09OREFSWV9QUk9DRVNTRVMpCisgICAgICAgICwgbV9tYW5hZ2VyKHdlYmtpdF93ZWJf
Y29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dldF9jb250
ZXh0KG1fd2ViVmlldykpKQorICAgICAgICAsIG1fZGF0YVR5cGUoRGF0YVR5cGU6Ok1lbW9yeUNh
Y2hlKQorICAgICAgICAsIG1fb3JpZ2lucyhudWxscHRyKQorICAgIHsKKyAgICB9CisKKyAgICB+
V2Vic2l0ZURhdGFUZXN0KCkKKyAgICB7CisgICAgICAgIGNsZWFyT3JpZ2lucygpOworICAgIH0K
KworICAgIHZvaWQgY2xlYXJPcmlnaW5zKCkKKyAgICB7CisgICAgICAgIGdfbGlzdF9mcmVlX2Z1
bGwobV9vcmlnaW5zLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pih3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX3VucmVmKSk7CisgICAgICAgIG1fb3JpZ2lucyA9IG51bGxwdHI7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgZmV0Y2hPcmlnaW5zQ2FsbGJhY2soV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyKiBtYW5hZ2VyLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2Vic2l0ZURhdGFUZXN0
KiB0ZXN0KQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0ZXN0LT5tX2RhdGFUeXBlKSB7CisgICAg
ICAgIGNhc2UgRGF0YVR5cGU6Ok1lbW9yeUNhY2hlOgorICAgICAgICAgICAgdGVzdC0+bV9vcmln
aW5zID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX21lbW9yeV9j
YWNoZV9maW5pc2gobWFuYWdlciwgcmVzdWx0LCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIERhdGFUeXBlOjpEaXNrQ2FjaGU6CisgICAgICAgICAgICB0ZXN0LT5t
X29yaWdpbnMgPSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fZGlz
a19jYWNoZV9maW5pc2gobWFuYWdlciwgcmVzdWx0LCBudWxscHRyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQo
KTsKKyAgICAgICAgfQorICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAgICB9CisKKyAg
ICBHTGlzdCogZmV0Y2hPcmlnaW5zKERhdGFUeXBlIGRhdGFUeXBlKQorICAgIHsKKyAgICAgICAg
Y2xlYXJPcmlnaW5zKCk7CisgICAgICAgIG1fZGF0YVR5cGUgPSBkYXRhVHlwZTsKKyAgICAgICAg
c3dpdGNoIChtX2RhdGFUeXBlKSB7CisgICAgICAgIGNhc2UgRGF0YVR5cGU6Ok1lbW9yeUNhY2hl
OgorICAgICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2lu
X21lbW9yeV9jYWNoZShtX21hbmFnZXIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5j
UmVhZHlDYWxsYmFjaz4oZmV0Y2hPcmlnaW5zQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIERhdGFUeXBlOjpEaXNrQ2FjaGU6CisgICAgICAgICAgICB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fZGlza19jYWNoZShtX21h
bmFnZXIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oZmV0
Y2hPcmlnaW5zQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgfQor
ICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX29y
aWdpbnM7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVsZXRlT3JpZ2luc0NhbGxiYWNrKFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdl
YnNpdGVEYXRhVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGVzdC0+bV9kYXRh
VHlwZSkgeworICAgICAgICBjYXNlIERhdGFUeXBlOjpNZW1vcnlDYWNoZToKKyAgICAgICAgICAg
IGdfYXNzZXJ0KHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfbWVtb3J5X2NhY2hl
X2Zvcl9vcmlnaW5zX2ZpbmlzaChtYW5hZ2VyLCByZXN1bHQsIG51bGxwdHIpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIERhdGFUeXBlOjpEaXNrQ2FjaGU6CisgICAgICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rpc2tfY2FjaGVf
Zm9yX29yaWdpbnNfZmluaXNoKG1hbmFnZXIsIHJlc3VsdCwgbnVsbHB0cikpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVh
Y2hlZCgpOworICAgICAgICB9CisgICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOworICAgIH0K
KworICAgIHZvaWQgZGVsZXRlT3JpZ2luc0FuZFdhaXRVbnRpbEZpbmlzaGVkKERhdGFUeXBlIGRh
dGFUeXBlLCBHTGlzdCogb3JpZ2lucykKKyAgICB7CisgICAgICAgIG1fZGF0YVR5cGUgPSBkYXRh
VHlwZTsKKyAgICAgICAgc3dpdGNoIChtX2RhdGFUeXBlKSB7CisgICAgICAgIGNhc2UgRGF0YVR5
cGU6Ok1lbW9yeUNhY2hlOgorICAgICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnMobV9tYW5hZ2VyLCBvcmlnaW5zLCBudWxs
cHRyLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGRlbGV0ZU9yaWdpbnND
YWxsYmFjayksIHRoaXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0YVR5
cGU6OkRpc2tDYWNoZToKKyAgICAgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9k
ZWxldGVfZGlza19jYWNoZV9mb3Jfb3JpZ2lucyhtX21hbmFnZXIsIG9yaWdpbnMsIG51bGxwdHIs
IHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oZGVsZXRlT3JpZ2luc0NhbGxi
YWNrKSwgdGhpcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUFs
bE9yaWdpbnNDYWxsYmFjayhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIsIEdBc3lu
Y1Jlc3VsdCogcmVzdWx0LCBXZWJzaXRlRGF0YVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHRlc3QtPm1fZGF0YVR5cGUpIHsKKyAgICAgICAgY2FzZSBEYXRhVHlwZTo6TWVtb3J5
Q2FjaGU6CisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Y2xlYXJfbWVtb3J5X2NhY2hlX2ZpbmlzaChtYW5hZ2VyLCByZXN1bHQsIG51bGxwdHIpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERhdGFUeXBlOjpEaXNrQ2FjaGU6CisgICAg
ICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZGlza19j
YWNoZV9maW5pc2gobWFuYWdlciwgcmVzdWx0LCBudWxscHRyKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7
CisgICAgICAgIH0KKyAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAg
dm9pZCBkZWxldGVBbGxPcmlnaW5zQW5kV2FpdFVudGlsRmluaXNoZWQoRGF0YVR5cGUgZGF0YVR5
cGUpCisgICAgeworICAgICAgICBtX2RhdGFUeXBlID0gZGF0YVR5cGU7CisgICAgICAgIHN3aXRj
aCAobV9kYXRhVHlwZSkgeworICAgICAgICBjYXNlIERhdGFUeXBlOjpNZW1vcnlDYWNoZToKKyAg
ICAgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9tZW1vcnlfY2FjaGUo
bV9tYW5hZ2VyLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+
KGRlbGV0ZUFsbE9yaWdpbnNDYWxsYmFjayksIHRoaXMpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRGF0YVR5cGU6OkRpc2tDYWNoZToKKyAgICAgICAgICAgIHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlKG1fbWFuYWdlciwgbnVsbHB0ciwgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihkZWxldGVBbGxPcmlnaW5zQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgfQorICAgICAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyKiBtX21hbmFnZXI7CisgICAgRGF0YVR5cGUgbV9kYXRhVHlwZTsKKyAgICBHTGlzdCogbV9v
cmlnaW5zOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRXZWJzaXRlRGF0YUNhY2hl
KFdlYnNpdGVEYXRhVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRUTFNF
cnJvcnNQb2xpY3kgb3JpZ2luYWxQb2xpY3kgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3Rsc19l
cnJvcnNfcG9saWN5KHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7CisgICAgd2Via2l0X3dlYl9j
b250ZXh0X3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCksIFdF
QktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvZW1wdHkiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9lbXB0eSIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGZpbGVVUkwoZ19zdHJkdXBfcHJpbnRmKCJm
aWxlOi8vJXMvc2ltcGxlLmh0bWwiLCBUZXN0OjpnZXRSZXNvdXJjZXNEaXIoVGVzdDo6V2ViS2l0
MlJlc291cmNlcykuZGF0YSgpKSk7CisgICAgdGVzdC0+bG9hZFVSSShmaWxlVVJMLmdldCgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdMaXN0KiBvcmlnaW5z
ID0gdGVzdC0+ZmV0Y2hPcmlnaW5zKFdlYnNpdGVEYXRhVGVzdDo6RGF0YVR5cGU6Ok1lbW9yeUNh
Y2hlKTsKKyAgICBnX2Fzc2VydChvcmlnaW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0
X2xlbmd0aChvcmlnaW5zKSwgPT0sIDMpOworICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBodHRw
T3JpZ2luID0gbnVsbHB0cjsKKyAgICBmb3IgKEdMaXN0KiBsID0gb3JpZ2luczsgbDsgbCA9IGdf
bGlzdF9uZXh0KGwpKSB7CisgICAgICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBz
dGF0aWNfY2FzdDxXZWJLaXRTZWN1cml0eU9yaWdpbio+KGwtPmRhdGEpOworICAgICAgICBjb25z
dCBjaGFyKiBwcm90b2NvbCA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3RvY29sKG9y
aWdpbik7CisgICAgICAgIGdfYXNzZXJ0KHByb3RvY29sKTsKKyAgICAgICAgaWYgKGdfc3RyX2Vx
dWFsKHByb3RvY29sLCAiaHR0cCIpKSB7CisgICAgICAgICAgICBodHRwT3JpZ2luID0gd2Via2l0
X3NlY3VyaXR5X29yaWdpbl9yZWYob3JpZ2luKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KG9yaWdpbiksID09LCBrU2VydmVyLT5i
YXNlVVJJKCktPmhvc3QpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9zZWN1
cml0eV9vcmlnaW5fZ2V0X3BvcnQob3JpZ2luKSwgPT0sIGtTZXJ2ZXItPmJhc2VVUkkoKS0+cG9y
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocHJvdG9jb2wsICJodHRwcyIpKSB7
CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRf
aG9zdChvcmlnaW4pLCA9PSwga0h0dHBzU2VydmVyLT5iYXNlVVJJKCktPmhvc3QpOworICAgICAg
ICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQob3Jp
Z2luKSwgPT0sIGtIdHRwc1NlcnZlci0+YmFzZVVSSSgpLT5wb3J0KTsKKyAgICAgICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbChwcm90b2NvbCwgImZpbGUiKSkgeworICAgICAgICAgICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Qob3JpZ2luKSk7CisgICAgICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChvcmlnaW4p
LCA9PSwgMCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNo
ZWQoKTsKKyAgICB9CisKKyAgICBnX2Fzc2VydChodHRwT3JpZ2luKTsKKyAgICBHTGlzdCBvcmln
aW5zVG9EZWxldGUgPSB7IGh0dHBPcmlnaW4sIG51bGxwdHIsIG51bGxwdHIgfTsKKyAgICB0ZXN0
LT5kZWxldGVPcmlnaW5zQW5kV2FpdFVudGlsRmluaXNoZWQoV2Vic2l0ZURhdGFUZXN0OjpEYXRh
VHlwZTo6TWVtb3J5Q2FjaGUsICZvcmlnaW5zVG9EZWxldGUpOworICAgIHdlYmtpdF9zZWN1cml0
eV9vcmlnaW5fdW5yZWYoaHR0cE9yaWdpbik7CisgICAgb3JpZ2lucyA9IHRlc3QtPmZldGNoT3Jp
Z2lucyhXZWJzaXRlRGF0YVRlc3Q6OkRhdGFUeXBlOjpNZW1vcnlDYWNoZSk7CisgICAgZ19hc3Nl
cnQob3JpZ2lucyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgob3JpZ2lucyks
ID09LCAyKTsKKyAgICBmb3IgKEdMaXN0KiBsID0gb3JpZ2luczsgbDsgbCA9IGdfbGlzdF9uZXh0
KGwpKSB7CisgICAgICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBzdGF0aWNfY2Fz
dDxXZWJLaXRTZWN1cml0eU9yaWdpbio+KGwtPmRhdGEpOworICAgICAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2wob3JpZ2luKSwgIT0sICJodHRw
Iik7CisgICAgfQorCisgICAgdGVzdC0+ZGVsZXRlQWxsT3JpZ2luc0FuZFdhaXRVbnRpbEZpbmlz
aGVkKFdlYnNpdGVEYXRhVGVzdDo6RGF0YVR5cGU6Ok1lbW9yeUNhY2hlKTsKKyAgICBnX2Fzc2Vy
dCghdGVzdC0+ZmV0Y2hPcmlnaW5zKFdlYnNpdGVEYXRhVGVzdDo6RGF0YVR5cGU6Ok1lbW9yeUNh
Y2hlKSk7CisKKyAgICAvLyBEaXNrIGNhY2hlIGRlbGF5cyB0aGUgc3RvcmluZyBvZiBpbml0aWFs
IHJlc291cmNlcyBmb3IgMSBzZWNvbmQgdG8gYXZvaWQKKyAgICAvLyBhZmZlY3RpbmcgZWFybHkg
cGFnZSBsb2FkLiBTbywgd2FpdCAxIHNlY29uZCBoZXJlIHRvIG1ha2Ugc3VyZSByZXNvdXJjZXMK
KyAgICAvLyBoYXZlIGFscmVhZHkgYmVlbiBzdG9yZWQuCisgICAgdGVzdC0+d2FpdCgxKTsKKwor
ICAgIG9yaWdpbnMgPSB0ZXN0LT5mZXRjaE9yaWdpbnMoV2Vic2l0ZURhdGFUZXN0OjpEYXRhVHlw
ZTo6RGlza0NhY2hlKTsKKyAgICBnX2Fzc2VydChvcmlnaW5zKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZ19saXN0X2xlbmd0aChvcmlnaW5zKSwgPT0sIDIpOworICAgIGh0dHBPcmlnaW4gPSBudWxs
cHRyOworICAgIGZvciAoR0xpc3QqIGwgPSBvcmlnaW5zOyBsOyBsID0gZ19saXN0X25leHQobCkp
IHsKKyAgICAgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHN0YXRpY19jYXN0PFdl
YktpdFNlY3VyaXR5T3JpZ2luKj4obC0+ZGF0YSk7CisgICAgICAgIGNvbnN0IGNoYXIqIHByb3Rv
Y29sID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2wob3JpZ2luKTsKKyAgICAg
ICAgZ19hc3NlcnQocHJvdG9jb2wpOworICAgICAgICBpZiAoZ19zdHJfZXF1YWwocHJvdG9jb2ws
ICJodHRwIikpIHsKKyAgICAgICAgICAgIGh0dHBPcmlnaW4gPSB3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX3JlZihvcmlnaW4pOworICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZWN1
cml0eV9vcmlnaW5fZ2V0X2hvc3Qob3JpZ2luKSwgPT0sIGtTZXJ2ZXItPmJhc2VVUkkoKS0+aG9z
dCk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3NlY3VyaXR5X29yaWdpbl9n
ZXRfcG9ydChvcmlnaW4pLCA9PSwga1NlcnZlci0+YmFzZVVSSSgpLT5wb3J0KTsKKyAgICAgICAg
fSBlbHNlIGlmIChnX3N0cl9lcXVhbChwcm90b2NvbCwgImh0dHBzIikpIHsKKyAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KG9yaWdpbiks
ID09LCBrSHR0cHNTZXJ2ZXItPmJhc2VVUkkoKS0+aG9zdCk7CisgICAgICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChvcmlnaW4pLCA9PSwga0h0
dHBzU2VydmVyLT5iYXNlVVJJKCktPnBvcnQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorCisgICAgb3JpZ2luc1RvRGVsZXRlLmRh
dGEgPSBodHRwT3JpZ2luOworICAgIHRlc3QtPmRlbGV0ZU9yaWdpbnNBbmRXYWl0VW50aWxGaW5p
c2hlZChXZWJzaXRlRGF0YVRlc3Q6OkRhdGFUeXBlOjpEaXNrQ2FjaGUsICZvcmlnaW5zVG9EZWxl
dGUpOworICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fdW5yZWYoaHR0cE9yaWdpbik7CisgICAg
b3JpZ2lucyA9IHRlc3QtPmZldGNoT3JpZ2lucyhXZWJzaXRlRGF0YVRlc3Q6OkRhdGFUeXBlOjpE
aXNrQ2FjaGUpOworICAgIGdfYXNzZXJ0KG9yaWdpbnMpOworICAgIGdfYXNzZXJ0X2NtcGludChn
X2xpc3RfbGVuZ3RoKG9yaWdpbnMpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3RvY29sKHN0YXRpY19jYXN0PFdlYktpdFNlY3VyaXR5
T3JpZ2luKj4ob3JpZ2lucy0+ZGF0YSkpLCA9PSwgImh0dHBzIik7CisKKyAgICB0ZXN0LT5kZWxl
dGVBbGxPcmlnaW5zQW5kV2FpdFVudGlsRmluaXNoZWQoV2Vic2l0ZURhdGFUZXN0OjpEYXRhVHlw
ZTo6RGlza0NhY2hlKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+ZmV0Y2hPcmlnaW5zKFdlYnNpdGVE
YXRhVGVzdDo6RGF0YVR5cGU6OkRpc2tDYWNoZSkpOworCisgICAgd2Via2l0X3dlYl9jb250ZXh0
X3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCksIG9yaWdpbmFs
UG9saWN5KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFNlY3VyaXR5T3JpZ2luQmFzaWMoVGVzdCos
IGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHdl
YmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3KCJodHRwIiwgIjEyNy4wLjAuMSIsIDEyMzQpOworICAg
IGdfYXNzZXJ0KG9yaWdpbik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZWN1cml0eV9v
cmlnaW5fZ2V0X3Byb3RvY29sKG9yaWdpbiksID09LCAiaHR0cCIpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KG9yaWdpbiksID09LCAiMTI3LjAu
MC4xIik7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Bv
cnQob3JpZ2luKSwgPT0sIDEyMzQpOworICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fdW5yZWYo
b3JpZ2luKTsKK30KKwogdm9pZCBiZWZvcmVBbGwoKQogewogICAgIGtTZXJ2ZXIgPSBuZXcgV2Vi
S2l0VGVzdFNlcnZlcigpOwogICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CiAKKyAg
ICBrSHR0cHNTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcihXZWJLaXRUZXN0U2VydmVyOjpT
ZXJ2ZXJIVFRQUyk7CisgICAga0h0dHBzU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCiAg
ICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RX
ZWJDb250ZXh0RGVmYXVsdCk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4
dCIsICJjb25maWd1cmF0aW9uIiwgdGVzdFdlYkNvbnRleHRDb25maWd1cmF0aW9uKTsKICAgICBQ
bHVnaW5zVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImdldC1wbHVnaW5zIiwgdGVzdFdl
YkNvbnRleHRHZXRQbHVnaW5zKTsKQEAgLTU2Miw5ICs3OTQsMTIgQEAgdm9pZCBiZWZvcmVBbGwo
KQogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAibGFuZ3VhZ2VzIiwg
dGVzdFdlYkNvbnRleHRMYW5ndWFnZXMpOwogICAgIFNlY3VyaXR5UG9saWN5VGVzdDo6YWRkKCJX
ZWJLaXRTZWN1cml0eU1hbmFnZXIiLCAic2VjdXJpdHktcG9saWN5IiwgdGVzdFdlYkNvbnRleHRT
ZWN1cml0eVBvbGljeSk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0U2VjdXJpdHlNYW5h
Z2VyIiwgImZpbGUteGhyIiwgdGVzdFdlYkNvbnRleHRTZWN1cml0eUZpbGVYSFIpOworICAgIFdl
YnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgIndlYnNpdGUtZGF0YS9jYWNo
ZSIsIHRlc3RXZWJDb250ZXh0V2Vic2l0ZURhdGFDYWNoZSk7CisgICAgVGVzdDo6YWRkKCJXZWJL
aXRTZWN1cml0eU9yaWdpbiIsICJiYXNpYyIsIHRlc3RTZWN1cml0eU9yaWdpbkJhc2ljKTsKIH0K
IAogdm9pZCBhZnRlckFsbCgpCiB7CiAgICAgZGVsZXRlIGtTZXJ2ZXI7CisgICAgZGVsZXRlIGtI
dHRwc1NlcnZlcjsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktp
dDJHdGsvVGVzdE1haW4uaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvVGVz
dE1haW4uaAppbmRleCA2MDU0ZmUwLi4zZjM1NzVmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgdGVzdC0+aW5pdGlhbGl6ZVdlYkV4dGVuc2lvbnMoKTsKICAgICB9CiAKLSAgICBUZXN0
KCkKKyAgICBUZXN0KFdlYktpdFByb2Nlc3NNb2RlbCBwcm9jZXNzTW9kZWwgPSBXRUJLSVRfUFJP
Q0VTU19NT0RFTF9TSEFSRURfU0VDT05EQVJZX1BST0NFU1MpCiAgICAgewogICAgICAgICBHVW5p
cXVlUHRyPGNoYXI+IGxvY2FsU3RvcmFnZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGRhdGFE
aXJlY3RvcnkoKSwgImxvY2FsLXN0b3JhZ2UiLCBudWxscHRyKSk7CiAgICAgICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gaW5kZXhlZERCRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoZGF0YURpcmVjdG9y
eSgpLCAiaW5kZXhlZGRiIiwgbnVsbHB0cikpOwpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAid2Vic3FsLWRpcmVjdG9yeSIsIHdlYlNRTERpcmVjdG9yeS5nZXQoKSwgbnVs
bHB0cikpOwogCiAgICAgICAgIG1fd2ViQ29udGV4dCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2Nv
bnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Vic2l0ZURhdGFNYW5hZ2VyLmdl
dCgpKSk7CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfcHJvY2Vzc19tb2RlbChtX3dl
YkNvbnRleHQuZ2V0KCksIHByb2Nlc3NNb2RlbCk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV93ZWJDb250ZXh0LmdldCgpLCAiaW5pdGlhbGl6ZS13ZWItZXh0ZW5zaW9ucyIsIEdfQ0FMTEJB
Q0soaW5pdGlhbGl6ZVdlYkV4dGVuc2lvbnNDYWxsYmFjayksIHRoaXMpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcApp
bmRleCAxNGYyYzE0Li4zNWMwZjI3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0
ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0
ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcApAQCAtMjgsMTEgKzI4LDE1IEBACiBXZWJWaWV3
VGVzdDo6V2ViVmlld1Rlc3QoV2ViS2l0VXNlckNvbnRlbnRNYW5hZ2VyKiB1c2VyQ29udGVudE1h
bmFnZXIpCiAgICAgOiBtX3dlYlZpZXcoV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X3JlZl9zaW5r
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywgIndlYi1jb250ZXh0IiwgbV93ZWJD
b250ZXh0LmdldCgpLCAidXNlci1jb250ZW50LW1hbmFnZXIiLCB1c2VyQ29udGVudE1hbmFnZXIs
IG51bGxwdHIpKSkpCiAgICAgLCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldyhudWxscHRyLCBU
UlVFKSkKLSAgICAsIG1fcGFyZW50V2luZG93KG51bGxwdHIpCi0gICAgLCBtX2phdmFzY3JpcHRS
ZXN1bHQobnVsbHB0cikKLSAgICAsIG1fcmVzb3VyY2VEYXRhU2l6ZSgwKQotICAgICwgbV9zdXJm
YWNlKG51bGxwdHIpCi0gICAgLCBtX2V4cGVjdGVkV2ViUHJvY2Vzc0NyYXNoKGZhbHNlKQorewor
ICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV93ZWJW
aWV3KSk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJ3ZWItcHJvY2Vzcy1jcmFz
aGVkIiwgR19DQUxMQkFDSyhXZWJWaWV3VGVzdDo6d2ViUHJvY2Vzc0NyYXNoZWQpLCB0aGlzKTsK
K30KKworV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KFdlYktpdFByb2Nlc3NNb2RlbCBwcm9jZXNz
TW9kZWwpCisgICAgOiBUZXN0KHByb2Nlc3NNb2RlbCkKKyAgICAsIG1fd2ViVmlldyhXRUJLSVRf
V0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRl
eHQobV93ZWJDb250ZXh0LmdldCgpKSkpKQorICAgICwgbV9tYWluTG9vcChnX21haW5fbG9vcF9u
ZXcobnVsbHB0ciwgVFJVRSkpCiB7CiAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChtX3dlYlZpZXcpKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgIndlYi1wcm9jZXNzLWNyYXNoZWQiLCBHX0NBTExCQUNLKFdlYlZpZXdUZXN0Ojp3ZWJQ
cm9jZXNzQ3Jhc2hlZCksIHRoaXMpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9n
dGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2Vi
S2l0Mkd0ay9XZWJWaWV3VGVzdC5oCmluZGV4IDNmOTlkMjEuLmRmMWIyMDIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuaAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmgKQEAgLTI5LDYg
KzI5LDcgQEAgY2xhc3MgV2ViVmlld1Rlc3Q6IHB1YmxpYyBUZXN0IHsKIHB1YmxpYzoKICAgICBN
QUtFX0dMSUJfVEVTVF9GSVhUVVJFKFdlYlZpZXdUZXN0KTsKICAgICBXZWJWaWV3VGVzdChXZWJL
aXRVc2VyQ29udGVudE1hbmFnZXIqID0gbnVsbHB0cik7CisgICAgV2ViVmlld1Rlc3QoV2ViS2l0
UHJvY2Vzc01vZGVsKTsKICAgICB2aXJ0dWFsIH5XZWJWaWV3VGVzdCgpOwogCiAgICAgdmlydHVh
bCB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciogdXJpKTsKQEAgLTgzLDE0ICs4NCwxNCBAQCBwdWJs
aWM6CiAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwogICAgIEdNYWluTG9vcCogbV9tYWlu
TG9vcDsKICAgICBDU3RyaW5nIG1fYWN0aXZlVVJJOwotICAgIEd0a1dpZGdldCogbV9wYXJlbnRX
aW5kb3c7CisgICAgR3RrV2lkZ2V0KiBtX3BhcmVudFdpbmRvdyB7IG51bGxwdHIgfTsKICAgICBD
U3RyaW5nIG1fZXhwZWN0ZWRUaXRsZTsKLSAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBtX2ph
dmFzY3JpcHRSZXN1bHQ7Ci0gICAgR0Vycm9yKiogbV9qYXZhc2NyaXB0RXJyb3I7CisgICAgV2Vi
S2l0SmF2YXNjcmlwdFJlc3VsdCogbV9qYXZhc2NyaXB0UmVzdWx0IHsgbnVsbHB0ciB9OworICAg
IEdFcnJvcioqIG1famF2YXNjcmlwdEVycm9yIHsgbnVsbHB0ciB9OwogICAgIEdVbmlxdWVQdHI8
Y2hhcj4gbV9yZXNvdXJjZURhdGE7Ci0gICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZTsKLSAg
ICBjYWlyb19zdXJmYWNlX3QqIG1fc3VyZmFjZTsKLSAgICBib29sIG1fZXhwZWN0ZWRXZWJQcm9j
ZXNzQ3Jhc2g7CisgICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZSB7IDAgfTsKKyAgICBjYWly
b19zdXJmYWNlX3QqIG1fc3VyZmFjZSB7IG51bGxwdHIgfTsKKyAgICBib29sIG1fZXhwZWN0ZWRX
ZWJQcm9jZXNzQ3Jhc2ggeyBmYWxzZSB9OwogCiBwcml2YXRlOgogICAgIHZvaWQgZG9Nb3VzZUJ1
dHRvbkV2ZW50KEdka0V2ZW50VHlwZSwgaW50LCBpbnQsIHVuc2lnbmVkLCB1bnNpZ25lZCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257641</attachid>
            <date>2015-07-28 03:37:47 -0700</date>
            <delta_ts>2017-01-21 02:16:15 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-website-data-cache.diff</filename>
            <type>text/plain</type>
            <size>70187</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2OGY2NGI4Li5hMjc3NzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDgg
QEAKKzIwMTUtMDctMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIHRv
IGhhbmRsZSBjYWNoZWQgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ2NTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIG5ldyBtZXRob2RzIHRvIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciB0
byBhc3luY2hyb25vdXNseSBnZXQKKyAgICAgICAgb3JpZ2lucyBmcm9tIG1lbW9yeSBhbmQgZGlz
ayBjYWNoZSwgZGVsZXRlIG1lbW9yeSBhbmQgZGlzayBjYWNoZQorICAgICAgICBmb3IgYSBsaXN0
IG9mIG9yaWdpbnMsIGFuZCBjbGVhciBtZW1vcnkgYW5kIGRpc2sgY2FjaGVzLgorCisgICAgICAg
ICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlPcmlnaW4uY3BwOiBBZGRlZC4K
KyAgICAgICAgKF9XZWJLaXRTZWN1cml0eU9yaWdpbjo6X1dlYktpdFNlY3VyaXR5T3JpZ2luKToK
KyAgICAgICAgKHdlYmtpdFNlY3VyaXR5T3JpZ2luQ3JlYXRlKToKKyAgICAgICAgKHdlYmtpdFNl
Y3VyaXR5T3JpZ2luR2V0U2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5
X29yaWdpbl9uZXcpOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9yZWYpOgorICAg
ICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZik6CisgICAgICAgICh3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbCk6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9ob3N0KToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luUHJp
dmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hl
bWVSZXF1ZXN0LmNwcDoKKyAgICAgICAgKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfY2xhc3Nf
aW5pdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb3JpZ2lu
c19pbl9tZW1vcnlfY2FjaGUpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9vcmlnaW5zX2luX21lbW9yeV9jYWNoZV9maW5pc2gpOgorICAgICAgICAod2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnMpOgorICAg
ICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9y
X29yaWdpbnNfZmluaXNoKToKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9j
bGVhcl9tZW1vcnlfY2FjaGUpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2NsZWFyX21lbW9yeV9jYWNoZV9maW5pc2gpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rpc2tfY2FjaGUpOgorICAgICAgICAod2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rpc2tfY2FjaGVfZmluaXNoKToKKyAg
ICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfZGlza19jYWNoZV9mb3Jf
b3JpZ2lucyk6CisgICAgICAgICh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rp
c2tfY2FjaGVfZm9yX29yaWdpbnNfZmluaXNoKToKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlKToKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlX2ZpbmlzaCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC50eXBlczoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDoKKwogMjAxNS0wNy0yOCAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXNlIGZhc3RNYWxsb2Mg
aW5zdGVhZCBvZiBnX3NsaWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdU
Sy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDYxMTNlNjEu
LmI0M2MwMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yMTcsNiArMjE3LDkgQEAg
bGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
U2VjdXJpdHlNYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5
TWFuYWdlci5oCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlNYW5hZ2VyUHJp
dmF0ZS5oCisgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlPcmlnaW4uY3BwCisg
ICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlPcmlnaW4uaAorICAgIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oCiAgICAgVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0U2V0dGluZ3MuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0
dGluZ3MuaAogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzUHJpdmF0ZS5oCkBA
IC00MDYsNiArNDA5LDcgQEAgc2V0KFdlYktpdDJHVEtfSU5TVEFMTEVEX0hFQURFUlMKICAgICAk
e1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lz
aW9uLmgKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTY3JpcHRE
aWFsb2cuaAogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3Vy
aXR5TWFuYWdlci5oCisgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
U2VjdXJpdHlPcmlnaW4uaAogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFNldHRpbmdzLmgKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRVUklSZXF1ZXN0LmgKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRVUklSZXNwb25zZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRTZWN1cml0eU9yaWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRTZWN1cml0eU9yaWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYWMwMzk2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luLmNwcApAQCAtMCwwICsxLDE5NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViS2l0U2VjdXJpdHlPcmlnaW4uaCIKKworI2luY2x1ZGUgIldlYktp
dFNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworLyoqCisgKiBTRUNUSU9OOiBXZWJLaXRTZWN1
cml0eU9yaWdpbgorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBBIHNlY3VyaXR5IGJvdW5kYXJ5IGZv
ciB3ZWJzaXRlcworICogQFRpdGxlOiBXZWJLaXRTZWN1cml0eU9yaWdpbgorICogQFNlZV9hbHNv
OiAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLCAjV2ViS2l0U2VjdXJpdHlNYW5hZ2VyCisgKgor
ICogV2ViS2l0U2VjdXJpdHlPcmlnaW4gaXMgYSByZXByZXNlbnRhdGlvbiBvZiBhIHNlY3VyaXR5
IGRvbWFpbiBkZWZpbmVkCisgKiBieSB3ZWJzaXRlcy4gQW4gb3JpZ2luIGNvbnNpc3RzIG9mIGEg
aG9zdCBuYW1lLCBhIHByb3RvY29sLCBhbmQgYSBwb3J0CisgKiBudW1iZXIuIFdlYnNpdGVzIHdp
dGggdGhlIHNhbWUgc2VjdXJpdHkgb3JpZ2luIGNhbiBhY2Nlc3MgZWFjaCBvdGhlcidzCisgKiBy
ZXNvdXJjZXMgZm9yIGNsaWVudC1zaWRlIHNjcmlwdGluZyBvciBkYXRhYmFzZSBhY2Nlc3MuCisg
KgorICogU2luY2U6IDIuMTAKKyAqLworCitzdHJ1Y3QgX1dlYktpdFNlY3VyaXR5T3JpZ2luIHsK
KyAgICBfV2ViS2l0U2VjdXJpdHlPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVT
ZWN1cml0eU9yaWdpbikKKyAgICAgICAgOiBzZWN1cml0eU9yaWdpbihjb3JlU2VjdXJpdHlPcmln
aW4pCisgICAgeworICAgIH0KKworICAgIF9XZWJLaXRTZWN1cml0eU9yaWdpbihSZWY8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW4+JiYgY29yZVNlY3VyaXR5T3JpZ2luKQorICAgICAgICA6IHNlY3Vy
aXR5T3JpZ2luKFdURjo6bW92ZShjb3JlU2VjdXJpdHlPcmlnaW4pKQorICAgIHsKKyAgICB9CisK
KyAgICBSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luOworICAg
IENTdHJpbmcgcHJvdG9jb2w7CisgICAgQ1N0cmluZyBob3N0OworICAgIGludCByZWZlcmVuY2VD
b3VudDsKK307CisKK0dfREVGSU5FX0JPWEVEX1RZUEUoV2ViS2l0U2VjdXJpdHlPcmlnaW4sIHdl
YmtpdF9zZWN1cml0eV9vcmlnaW4sIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fcmVmLCB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX3VucmVmKQorCitXZWJLaXRTZWN1cml0eU9yaWdpbiogd2Via2l0U2Vj
dXJpdHlPcmlnaW5DcmVhdGUoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVTZWN1cml0eU9y
aWdpbikKK3sKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gc3RhdGljX2Nhc3Q8
V2ViS2l0U2VjdXJpdHlPcmlnaW4qPihmYXN0TWFsbG9jKHNpemVvZihXZWJLaXRTZWN1cml0eU9y
aWdpbikpKTsKKyAgICBuZXcgKG9yaWdpbikgV2ViS2l0U2VjdXJpdHlPcmlnaW4oY29yZVNlY3Vy
aXR5T3JpZ2luKTsKKyAgICByZXR1cm4gb3JpZ2luOworfQorCitXZWJLaXRTZWN1cml0eU9yaWdp
biogd2Via2l0U2VjdXJpdHlPcmlnaW5DcmVhdGUoUmVmPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
PiYmIGNvcmVTZWN1cml0eU9yaWdpbikKK3sKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3Jp
Z2luID0gc3RhdGljX2Nhc3Q8V2ViS2l0U2VjdXJpdHlPcmlnaW4qPihmYXN0TWFsbG9jKHNpemVv
ZihXZWJLaXRTZWN1cml0eU9yaWdpbikpKTsKKyAgICBuZXcgKG9yaWdpbikgV2ViS2l0U2VjdXJp
dHlPcmlnaW4oV1RGOjptb3ZlKGNvcmVTZWN1cml0eU9yaWdpbikpOworICAgIHJldHVybiBvcmln
aW47Cit9CisKK1dlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB3ZWJraXRTZWN1cml0eU9yaWdpbkdl
dFNlY3VyaXR5T3JpZ2luKFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNT
RVJUKG9yaWdpbik7CisgICAgcmV0dXJuICpvcmlnaW4tPnNlY3VyaXR5T3JpZ2luOworfQorCisv
KioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3OgorICogQHByb3RvY29sOiBUaGUgcHJv
dG9jb2wgZm9yIHRoZSBuZXcgb3JpZ2luCisgKiBAaG9zdDogVGhlIGhvc3QgZm9yIHRoZSBuZXcg
b3JpZ2luCisgKiBAcG9ydDogVGhlIHBvcnQgbnVtYmVyIGZvciB0aGUgbmV3IG9yaWdpbgorICoK
KyAqIENyZWF0ZSBhIG5ldyBzZWN1cml0eSBvcmlnaW4gZnJvbSB0aGUgcHJvdmlkZWQgcHJvdG9j
b2wsIGhvc3QgYW5kIHBvcnQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRTZWN1cml0eU9yaWdpbi4KKyAqCisgKiBTaW5jZTogMi4xMAorICovCitXZWJLaXRTZWN1
cml0eU9yaWdpbiogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9uZXcoY29uc3QgZ2NoYXIqIHByb3Rv
Y29sLCBjb25zdCBnY2hhciogaG9zdCwgZ3VpbnQgcG9ydCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChwcm90b2NvbCwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaG9z
dCwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gd2Via2l0U2VjdXJpdHlPcmlnaW5DcmVhdGUoV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShTdHJpbmc6OmZyb21VVEY4KHByb3RvY29sKSwg
U3RyaW5nOjpmcm9tVVRGOChob3N0KSwgcG9ydCkpOworfQorCisvKioKKyAqIHdlYmtpdF9zZWN1
cml0eV9vcmlnaW5fcmVmOgorICogQG9yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAq
CisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBAb3JpZ2lu
IGJ5IG9uZS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgTVQtc2FmZSBhbmQgbWF5IGJlIGNhbGxlZCBm
cm9tIGFueSB0aHJlYWQuCisgKgorICogUmV0dXJuczogVGhlIHBhc3NlZCAjV2ViS2l0U2VjdXJp
dHlPcmlnaW4KKyAqCisgKiBTaW5jZTogMi4xMAorICovCitXZWJLaXRTZWN1cml0eU9yaWdpbiog
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9yZWYoV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChvcmlnaW4sIG51bGxwdHIpOworCisgICAgZ19h
dG9taWNfaW50X2luYygmb3JpZ2luLT5yZWZlcmVuY2VDb3VudCk7CisgICAgcmV0dXJuIG9yaWdp
bjsKK30KKworLyoqCisgKiB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3VucmVmOgorICogQG9yaWdp
bjogQSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMg
dGhlIHJlZmVyZW5jZSBjb3VudCBvZiBAb3JpZ2luIGJ5IG9uZS4KKyAqIElmIHRoZSByZWZlcmVu
Y2UgY291bnQgZHJvcHMgdG8gMCwgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkKKyAqICNXZWJLaXRT
ZWN1cml0eU9yaWdpbiBpcyByZWxlYXNlZC4gVGhpcyBmdW5jdGlvbiBpcyBNVC1zYWZlIGFuZCBt
YXkgYmUKKyAqIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuCisgKgorICogU2luY2U6IDIuMTAKKyAq
Lwordm9pZCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3VucmVmKFdlYktpdFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChvcmlnaW4pOworCisgICAgaWYgKGdf
YXRvbWljX2ludF9kZWNfYW5kX3Rlc3QoJm9yaWdpbi0+cmVmZXJlbmNlQ291bnQpKSB7CisgICAg
ICAgIG9yaWdpbi0+fldlYktpdFNlY3VyaXR5T3JpZ2luKCk7CisgICAgICAgIGZhc3RGcmVlKG9y
aWdpbik7CisgICAgfQorfQorCisvKioKKyAqIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3By
b3RvY29sOgorICogQG9yaWdpbjogYSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4KKyAqCisgKiBHZXQg
dGhlIHByb3RvY29sIG9mIEBvcmlnaW4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcHJvdG9jb2wgb2Yg
dGhlICNXZWJLaXRTZWN1cml0eU9yaWdpbi4KKyAqCisgKiBTaW5jZTogMi4xMAorICovCitjb25z
dCBnY2hhciogd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcHJvdG9jb2woV2ViS2l0U2VjdXJp
dHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChvcmlnaW4sIG51
bGxwdHIpOworCisgICAgaWYgKG9yaWdpbi0+cHJvdG9jb2wuaXNOdWxsKCkpCisgICAgICAgIG9y
aWdpbi0+cHJvdG9jb2wgPSBvcmlnaW4tPnNlY3VyaXR5T3JpZ2luLT5wcm90b2NvbCgpLnV0Zjgo
KTsKKyAgICByZXR1cm4gb3JpZ2luLT5wcm90b2NvbC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdDoKKyAqIEBvcmlnaW46IGEgI1dlYktpdFNlY3Vy
aXR5T3JpZ2luCisgKgorICogR2V0IHRoZSBob3N0IG9mIEBvcmlnaW4KKyAqCisgKiBSZXR1cm5z
OiAoYWxsb3ctbm9uZSk6IFRoZSBob3N0IG9mIHRoZSAjV2ViS2l0U2VjdXJpdHlPcmlnaW4sIG9y
ICVOVUxMLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9ob3N0KFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob3JpZ2luLCBudWxscHRyKTsKKworICAgIGlmIChvcmln
aW4tPnNlY3VyaXR5T3JpZ2luLT5ob3N0KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGlmIChvcmlnaW4tPmhvc3QuaXNOdWxsKCkpCisgICAgICAgIG9yaWdpbi0+
aG9zdCA9IG9yaWdpbi0+c2VjdXJpdHlPcmlnaW4tPmhvc3QoKS51dGY4KCk7CisgICAgcmV0dXJu
IG9yaWdpbi0+aG9zdC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X3NlY3VyaXR5X29yaWdp
bl9nZXRfcG9ydDoKKyAqIEBvcmlnaW46IGEgI1dlYktpdFNlY3VyaXR5T3JpZ2luCisgKgorICog
R2V0IHRoZSBwb3J0IG9mIEBvcmlnaW4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcG9ydCBvZiB0aGUg
I1dlYktpdFNlY3VyaXR5T3JpZ2luLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworZ3VpbnQgd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9yaWdpbiwgMCk7CisKKyAgICByZXR1cm4g
b3JpZ2luLT5zZWN1cml0eU9yaWdpbi0+cG9ydCgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlPcmlnaW4uaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1NGQ1MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5T3JpZ2luLmgKQEAg
LTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYg
IWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElM
QVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQg
ZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0U2VjdXJpdHlPcmlnaW5faAorI2Rl
ZmluZSBXZWJLaXRTZWN1cml0eU9yaWdpbl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgV0VCS0lUX1RZUEVfU0VDVVJJVFlfT1JJR0lOICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2lu
X2dldF90eXBlKCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTZWN1cml0eU9yaWdpbiBXZWJL
aXRTZWN1cml0eU9yaWdpbjsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3NlY3VyaXR5X29y
aWdpbl9nZXRfdHlwZSAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdFNlY3VyaXR5T3Jp
Z2luICoKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3ICAgICAgICAgIChjb25zdCBnY2hhciAg
ICAgICAgICAqcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgICAgICAgICAgKmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgIHBvcnQpOworCitXRUJLSVRfQVBJIFdlYktp
dFNlY3VyaXR5T3JpZ2luICoKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fcmVmICAgICAgICAgIChX
ZWJLaXRTZWN1cml0eU9yaWdpbiAqb3JpZ2luKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX3VucmVmICAgICAgICAoV2ViS2l0U2VjdXJpdHlPcmlnaW4gKm9yaWdp
bik7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3NlY3VyaXR5X29yaWdpbl9n
ZXRfcHJvdG9jb2wgKFdlYktpdFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pOworCitXRUJLSVRfQVBJ
IGNvbnN0IGdjaGFyICoKK3dlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3QgICAgIChXZWJL
aXRTZWN1cml0eU9yaWdpbiAqb3JpZ2luKTsKKworV0VCS0lUX0FQSSBndWludAord2Via2l0X3Nl
Y3VyaXR5X29yaWdpbl9nZXRfcG9ydCAgICAgKFdlYktpdFNlY3VyaXR5T3JpZ2luICpvcmlnaW4p
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0U2VjdXJpdHlPcmlnaW5faCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJp
dHlPcmlnaW5Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRTZWN1cml0eU9yaWdpblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kYzZjNmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgKQEAgLTAsMCArMSwzMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFNlY3Vy
aXR5T3JpZ2luUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZV9o
CisKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0U2VjdXJpdHlP
cmlnaW4uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisKK1dlYktpdFNl
Y3VyaXR5T3JpZ2luKiB3ZWJraXRTZWN1cml0eU9yaWdpbkNyZWF0ZShXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbiopOworV2ViS2l0U2VjdXJpdHlPcmlnaW4qIHdlYmtpdFNlY3VyaXR5T3JpZ2luQ3Jl
YXRlKFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4mJik7CitXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbiYgd2Via2l0U2VjdXJpdHlPcmlnaW5HZXRTZWN1cml0eU9yaWdpbihXZWJLaXRTZWN1cml0
eU9yaWdpbiopOworCisjZW5kaWYgLy8gV2ViS2l0U2VjdXJpdHlPcmlnaW5Qcml2YXRlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVE
YXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIuY3BwCmluZGV4IGIyYTliODkuLjI2ZDk3ZTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmNwcApAQCAtMjEsNyArMjEsOSBAQAogI2luY2x1ZGUgIldlYktpdFdlYnNp
dGVEYXRhTWFuYWdlci5oIgogCiAjaW5jbHVkZSAiQVBJV2Vic2l0ZURhdGFTdG9yZS5oIgorI2lu
Y2x1ZGUgIldlYktpdFNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdl
YnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVJlY29yZC5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4t
bGliLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgpAQCAtNDgzLDMgKzQ4NSwz
MTUgQEAgY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfd2Vic3Fs
X2RpcmVjdG9yeShXZWJLaXRXZWJzaXRlRGF0YU0KICAgICAgICAgcHJpdi0+d2ViU1FMRGlyZWN0
b3J5LnJlc2V0KGdfc3RyZHVwKEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFdlYlNRTERh
dGFiYXNlRGlyZWN0b3J5KCkudXRmOCgpLmRhdGEoKSkpOwogICAgIHJldHVybiBwcml2LT53ZWJT
UUxEaXJlY3RvcnkuZ2V0KCk7CiB9CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF9vcmlnaW5zX2luX21lbW9yeV9jYWNoZToKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEBjYW5jZWxsYWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2Fu
Y2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6
IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlz
ZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxi
YWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgZ2V0IHRoZSBsaXN0IG9mIG9yaWdp
bnMgZm9yIHdoaWNoIHRoZSBtZW1vcnkgY2FjaGUgY29udGFpbnMgcmVzb3VyY2VzLgorICoKKyAq
IFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVk
LiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9v
cmlnaW5zX2luX21lbW9yeV9jYWNoZV9maW5pc2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUg
b3BlcmF0aW9uLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK3ZvaWQgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX21lbW9yeV9jYWNoZShXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIqIG1hbmFnZXIsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5
Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpKTsKKworICAgIEdS
ZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxs
YWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CisgICAgbWFuYWdlci0+cHJpdi0+d2Vic2l0ZURh
dGFTdG9yZS0+ZmV0Y2hEYXRhKFdlYnNpdGVEYXRhVHlwZU1lbW9yeUNhY2hlLCBbdGFza10gKFZl
Y3RvcjxXZWJzaXRlRGF0YVJlY29yZD4gcmVjb3JkcykgeworICAgICAgICBHTGlzdCogb3JpZ2lu
cyA9IG51bGxwdHI7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVjb3JkIDogcmVjb3Jkcykg
eworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvcmlnaW4gOiByZWNvcmQub3JpZ2lucykK
KyAgICAgICAgICAgICAgICBvcmlnaW5zID0gZ19saXN0X3ByZXBlbmQob3JpZ2lucywgd2Via2l0
U2VjdXJpdHlPcmlnaW5DcmVhdGUob3JpZ2luLmdldCgpKSk7CisgICAgICAgIH0KKyAgICAgICAg
Z190YXNrX3JldHVybl9wb2ludGVyKHRhc2suZ2V0KCksIG9yaWdpbnMsIFtdKGdwb2ludGVyIGRh
dGEpIHsKKyAgICAgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwoc3RhdGljX2Nhc3Q8R0xpc3QqPihk
YXRhKSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4od2Via2l0X3NlY3VyaXR5X29y
aWdpbl91bnJlZikpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2NhY2hlX2ZpbmlzaDoK
KyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEg
I0dBc3luY1Jlc3VsdAorICogQGVycm9yOiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVO
VUxMIHRvIGlnbm9yZQorICoKKyAqIEZpbmlzaCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0
YXJ0ZWQgd2l0aCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVt
b3J5X2NhY2hlKCkuCisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBXZWJLaXRTZWN1cml0
eU9yaWdpbikgKHRyYW5zZmVyIGZ1bGwpOiBhICNHTGlzdCBvZiAjV2ViS2l0U2VjdXJpdHlPcmln
aW48IS0tIC0tPnMuIFlvdSBtdXN0IGZyZWUgdGhlICNHTGlzdCB3aXRoCisgKiAgICBnX2xpc3Rf
ZnJlZSgpIGFuZCB1bnJlZiB0aGUgI1dlYktpdFNlY3VyaXR5T3JpZ2luPCEtLSAtLT5zIHdpdGgg
d2Via2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZigpIHdoZW4geW91J3JlIGRvbmUgd2l0aCB0aGVt
LgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK0dMaXN0KiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2NhY2hlX2ZpbmlzaChXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIqIG1hbmFnZXIsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFH
RVIobWFuYWdlciksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19p
c192YWxpZChyZXN1bHQsIG1hbmFnZXIpLCBudWxscHRyKTsKKworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHTGlzdCo+KGdfdGFza19wcm9wYWdhdGVfcG9pbnRlcihHX1RBU0socmVzdWx0KSwgZXJy
b3IpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX21l
bW9yeV9jYWNoZV9mb3Jfb3JpZ2luczoKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIKKyAqIEBvcmlnaW5zOiAoZWxlbWVudC10eXBlIFdlYktpdFNlY3VyaXR5T3JpZ2lu
KTogYSAjR0xpc3Qgb2YgI1dlYktpdFNlY3VyaXR5T3JpZ2luPCEtLSAtLT5zCisgKiBAY2FuY2Vs
bGFibGU6IChhbGxvdy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQor
ICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNh
bGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJl
KTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJv
bm91c2x5IGRlbGV0ZSB0aGUgbWVtb3J5IGNhY2hlIHJlc291cmNlcyBmb3IgdGhlIGdpdmVuIEBv
cmlnaW5zLgorICogVXNlIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9tZW1vcnlf
Y2FjaGUoKSBpZiB5b3Ugd2FudCB0byBkZWxldGUgdGhlCisgKiBtZW1vcnkgY2FjaGUgZm9yIGFs
bCBvcmlnaW5zLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxi
YWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnNfZmluaXNoKCkgdG8g
Z2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBTaW5jZTogMi4xMAorICov
Cit2b2lkIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfbWVtb3J5X2NhY2hlX2Zv
cl9vcmlnaW5zKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwgR0xpc3QqIG9yaWdp
bnMsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJh
Y2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG9y
aWdpbnMpOworCisgICAgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiByZWNvcmRzOworICAgIGZv
ciAoR0xpc3QqIGxpc3QgPSBvcmlnaW5zOyBsaXN0OyBsaXN0ID0gZ19saXN0X25leHQobGlzdCkp
IHsKKyAgICAgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHN0YXRpY19jYXN0PFdl
YktpdFNlY3VyaXR5T3JpZ2luKj4obGlzdC0+ZGF0YSk7CisgICAgICAgIFdlYnNpdGVEYXRhUmVj
b3JkIHJlY29yZDsKKyAgICAgICAgcmVjb3JkLmFkZChXZWJzaXRlRGF0YVR5cGVNZW1vcnlDYWNo
ZSwgJndlYmtpdFNlY3VyaXR5T3JpZ2luR2V0U2VjdXJpdHlPcmlnaW4ob3JpZ2luKSk7CisgICAg
ICAgIHJlY29yZHMuYXBwZW5kKHJlY29yZCk7CisgICAgfQorCisgICAgR1JlZlB0cjxHVGFzaz4g
dGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFj
aywgdXNlckRhdGEpKTsKKyAgICBtYW5hZ2VyLT5wcml2LT53ZWJzaXRlRGF0YVN0b3JlLT5yZW1v
dmVEYXRhKFdlYnNpdGVEYXRhVHlwZU1lbW9yeUNhY2hlLCByZWNvcmRzLCBbdGFza10geworICAg
ICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CisgICAgfSk7Cit9
CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2Fj
aGVfZm9yX29yaWdpbnNfZmluaXNoOgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRh
TWFuYWdlcgorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJldHVybiBs
b2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNoIGFuIGFz
eW5jaHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9kZWxldGVfbWVtb3J5X2NhY2hlX2Zvcl9vcmlnaW5zKCkuCisgKgorICogUmV0dXJuczog
JVRSVUUgaWYgbWVtb3J5IGNhY2hlIHJlc291cmNlcyB3ZXJlIHN1Y2Nlc2Z1bGx5IGRlbGV0ZWQs
IG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMTAKKyAqLworZ2Jvb2xlYW4g
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdp
bnNfZmluaXNoKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwgR0FzeW5jUmVzdWx0
KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSwgRkFMU0UpOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19pc192YWxpZChyZXN1bHQsIG1hbmFnZXIpLCBGQUxTRSk7
CisKKyAgICByZXR1cm4gZ190YXNrX3Byb3BhZ2F0ZV9ib29sZWFuKEdfVEFTSyhyZXN1bHQpLCBl
cnJvcik7Cit9CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX21l
bW9yeV9jYWNoZToKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAq
IEBjYW5jZWxsYWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8g
aWdub3JlCisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJh
Y2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTog
KGNsb3N1cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICog
QXN5bmNocm9ub3VzbHkgY2xlYXIgdGhlIG1lbW9yeSBjYWNoZS4KKyAqCisgKiBXaGVuIHRoZSBv
cGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4gWW91IGNhbiB0
aGVuIGNhbGwKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9tZW1vcnlfY2Fj
aGVfZmluaXNoKCkgdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBT
aW5jZTogMi4xMAorICovCit2b2lkIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9t
ZW1vcnlfY2FjaGUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuY2VsbGFi
bGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFf
TUFOQUdFUihtYW5hZ2VyKSk7CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVm
KGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwor
ICAgIG1hbmFnZXItPnByaXYtPndlYnNpdGVEYXRhU3RvcmUtPnJlbW92ZURhdGEoV2Vic2l0ZURh
dGFUeXBlTWVtb3J5Q2FjaGUsIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQ6
Om1pbigpLCBbdGFza10geworICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQo
KSwgVFJVRSk7CisgICAgfSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2NsZWFyX21lbW9yeV9jYWNoZV9maW5pc2g6CisgKiBAbWFuYWdlcjogYSAjV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyCisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBlcnJvcjog
cmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBGaW5p
c2ggYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2NsZWFyX21lbW9yeV9jYWNoZSgpCisgKgorICogUmV0dXJuczogJVRSVUUg
aWYgbWVtb3J5IGNhY2hlIHdhcyBzdWNjZXNmdWxseSBjbGVhcmVkLCBvciAlRkFMU0Ugb3RoZXJ3
aXNlLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9jbGVhcl9tZW1vcnlfY2FjaGVfZmluaXNoKFdlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciogbWFuYWdlciwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUiht
YW5hZ2VyKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19pc192YWxp
ZChyZXN1bHQsIG1hbmFnZXIpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gZ190YXNrX3Byb3BhZ2F0
ZV9ib29sZWFuKEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7Cit9CisKKy8qKgorICogd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rpc2tfY2FjaGU6CisgKiBAbWFuYWdl
cjogYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKiBAY2FuY2VsbGFibGU6IChhbGxvdy1u
b25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQorICogQGNhbGxiYWNrOiAo
c2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVx
dWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdGhlIGRhdGEgdG8g
cGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJvbm91c2x5IGdldCB0aGUg
bGlzdCBvZiBvcmlnaW5zIGZvciB3aGljaCB0aGUgSFRUUCBkaXNrIGNhY2hlIGNvbnRhaW5zIHJl
c291cmNlcy4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAjV2Vi
S2l0V2ViQ29udGV4dDwhLS0gLS0+cyB1c2luZworICogJVdFQktJVF9QUk9DRVNTX01PREVMX1NI
QVJFRF9TRUNPTkRBUllfUFJPQ0VTUyBwcm9jZXNzIG1vZGVsOyBhbiBlbXB0eSBsaXN0IHdpbGwK
KyAqIGFsd2F5cyBiZSByZXR1cm5lZCBpbiBzdWNoIGNhc2UuCisgKgorICogV2hlbiB0aGUgb3Bl
cmF0aW9uIGlzIGZpbmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhl
biBjYWxsCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fZGlz
a19jYWNoZV9maW5pc2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorICoK
KyAqIFNpbmNlOiAyLjEwCisgKi8KK3ZvaWQgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dl
dF9vcmlnaW5zX2luX2Rpc2tfY2FjaGUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2Vy
LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNr
LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19X
RUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSk7CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNr
ID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1
c2VyRGF0YSkpOworICAgIG1hbmFnZXItPnByaXYtPndlYnNpdGVEYXRhU3RvcmUtPmZldGNoRGF0
YShXZWJzaXRlRGF0YVR5cGVEaXNrQ2FjaGUsIFt0YXNrXSAoVmVjdG9yPFdlYnNpdGVEYXRhUmVj
b3JkPiByZWNvcmRzKSB7CisgICAgICAgIEdMaXN0KiBvcmlnaW5zID0gbnVsbHB0cjsKKyAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiByZWNvcmQgOiByZWNvcmRzKSB7CisgICAgICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIG9yaWdpbiA6IHJlY29yZC5vcmlnaW5zKQorICAgICAgICAgICAgICAgIG9y
aWdpbnMgPSBnX2xpc3RfcHJlcGVuZChvcmlnaW5zLCB3ZWJraXRTZWN1cml0eU9yaWdpbkNyZWF0
ZShvcmlnaW4uZ2V0KCkpKTsKKyAgICAgICAgfQorICAgICAgICBnX3Rhc2tfcmV0dXJuX3BvaW50
ZXIodGFzay5nZXQoKSwgb3JpZ2lucywgW10oZ3BvaW50ZXIgZGF0YSkgeworICAgICAgICAgICAg
Z19saXN0X2ZyZWVfZnVsbChzdGF0aWNfY2FzdDxHTGlzdCo+KGRhdGEpLCByZWludGVycHJldF9j
YXN0PEdEZXN0cm95Tm90aWZ5Pih3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3VucmVmKSk7CisgICAg
ICAgIH0pOworICAgIH0pOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfb3JpZ2luc19pbl9kaXNrX2NhY2hlX2ZpbmlzaDoKKyAqIEBtYW5hZ2VyOiBhICNXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVy
cm9yOiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAq
IEZpbmlzaCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fZGlza19jYWNoZSgpLgorICoKKyAqIFJl
dHVybnM6IChlbGVtZW50LXR5cGUgV2ViS2l0U2VjdXJpdHlPcmlnaW4pICh0cmFuc2ZlciBmdWxs
KTogYSAjR0xpc3Qgb2YgI1dlYktpdFNlY3VyaXR5T3JpZ2luPCEtLSAtLT5zLiBZb3UgbXVzdCBm
cmVlIHRoZSAjR0xpc3Qgd2l0aAorICogICAgZ19saXN0X2ZyZWUoKSBhbmQgdW5yZWYgdGhlICNX
ZWJLaXRTZWN1cml0eU9yaWdpbjwhLS0gLS0+cyB3aXRoIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5f
dW5yZWYoKSB3aGVuIHlvdSdyZSBkb25lIHdpdGggdGhlbS4KKyAqCisgKiBTaW5jZTogMi4xMAor
ICovCitHTGlzdCogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX2Rp
c2tfY2FjaGVfZmluaXNoKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwgR0FzeW5j
UmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSwgbnVsbHB0cik7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3VsdCwgbWFuYWdlciks
IG51bGxwdHIpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaXN0Kj4oZ190YXNrX3Byb3Bh
Z2F0ZV9wb2ludGVyKEdfVEFTSyhyZXN1bHQpLCBlcnJvcikpOworfQorCisvKioKKyAqIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfZGlza19jYWNoZV9mb3Jfb3JpZ2luczoKKyAq
IEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEBvcmlnaW5zOiAoZWxl
bWVudC10eXBlIFdlYktpdFNlY3VyaXR5T3JpZ2luKTogYSAjR0xpc3Qgb2YgI1dlYktpdFNlY3Vy
aXR5T3JpZ2luPCEtLSAtLT5zCisgKiBAY2FuY2VsbGFibGU6IChhbGxvdy1ub25lKTogYSAjR0Nh
bmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQorICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMp
OiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRp
c2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxs
YmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJvbm91c2x5IGRlbGV0ZSB0aGUgSFRUUCBkaXNr
IGNhY2hlIHJlc291cmNlcyBmb3IgdGhlIGdpdmVuIEBvcmlnaW5zLgorICogVXNlIHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNrX2NhY2hlKCkgaWYgeW91IHdhbnQgdG8gZGVs
ZXRlIHRoZQorICogZGlzayBjYWNoZSBmb3IgYWxsIG9yaWdpbnMuCisgKgorICogTm90ZSB0aGF0
IHRoaXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgI1dlYktpdFdlYkNvbnRleHQ8IS0tIC0tPnMgdXNp
bmcKKyAqICVXRUJLSVRfUFJPQ0VTU19NT0RFTF9TSEFSRURfU0VDT05EQVJZX1BST0NFU1MgcHJv
Y2VzcyBtb2RlbDsgb25seSBjbGVhcmluZyB0aGUKKyAqIGVudGlyZSBjYWNoZSBpcyBzdXBwb3J0
ZWQgaW4gc3VjaCBjYXNlLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwg
QGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9kaXNrX2NhY2hlX2Zvcl9vcmlnaW5zX2ZpbmlzaCgp
IHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKgorICogU2luY2U6IDIuMTAK
KyAqLwordm9pZCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rpc2tfY2FjaGVf
Zm9yX29yaWdpbnMoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBHTGlzdCogb3Jp
Z2lucywgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxs
YmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
b3JpZ2lucyk7CisKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+IHJlY29yZHM7CisgICAg
Zm9yIChHTGlzdCogbGlzdCA9IG9yaWdpbnM7IGxpc3Q7IGxpc3QgPSBnX2xpc3RfbmV4dChsaXN0
KSkgeworICAgICAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gc3RhdGljX2Nhc3Q8
V2ViS2l0U2VjdXJpdHlPcmlnaW4qPihsaXN0LT5kYXRhKTsKKyAgICAgICAgV2Vic2l0ZURhdGFS
ZWNvcmQgcmVjb3JkOworICAgICAgICByZWNvcmQuYWRkKFdlYnNpdGVEYXRhVHlwZURpc2tDYWNo
ZSwgJndlYmtpdFNlY3VyaXR5T3JpZ2luR2V0U2VjdXJpdHlPcmlnaW4ob3JpZ2luKSk7CisgICAg
ICAgIHJlY29yZHMuYXBwZW5kKHJlY29yZCk7CisgICAgfQorCisgICAgR1JlZlB0cjxHVGFzaz4g
dGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFj
aywgdXNlckRhdGEpKTsKKyAgICBtYW5hZ2VyLT5wcml2LT53ZWJzaXRlRGF0YVN0b3JlLT5yZW1v
dmVEYXRhKFdlYnNpdGVEYXRhVHlwZURpc2tDYWNoZSwgcmVjb3JkcywgW3Rhc2tdIHsKKyAgICAg
ICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOworICAgIH0pOworfQor
CisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfZGlza19jYWNoZV9m
b3Jfb3JpZ2luc19maW5pc2g6CisgKiBAbWFuYWdlcjogYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyCisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0
aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNo
cm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2RlbGV0ZV9kaXNrX2NhY2hlX2Zvcl9vcmlnaW5zKCkuCisgKgorICogUmV0dXJuczogJVRSVUUg
aWYgSFRUUCBkaXNrIGNhY2hlIHJlc291cmNlcyB3ZXJlIHN1Y2Nlc2Z1bGx5IGRlbGV0ZWQsIG9y
ICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMTAKKyAqLworZ2Jvb2xlYW4gd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9kaXNrX2NhY2hlX2Zvcl9vcmlnaW5zX2Zp
bmlzaChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIsIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlciksIEZBTFNFKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgRkFMU0UpOworCisg
ICAgcmV0dXJuIGdfdGFza19wcm9wYWdhdGVfYm9vbGVhbihHX1RBU0socmVzdWx0KSwgZXJyb3Ip
OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNrX2Nh
Y2hlCisgKiBAbWFuYWdlcjogYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKiBAY2FuY2Vs
bGFibGU6IChhbGxvdy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQor
ICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNh
bGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJl
KTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJv
bm91c2x5IGNsZWFyIHRoZSBIVFRQIGRpc2sgY2FjaGUuCisgKgorICogV2hlbiB0aGUgb3BlcmF0
aW9uIGlzIGZpbmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhlbiBj
YWxsCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZGlza19jYWNoZV9maW5p
c2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorICoKKyAqIFNpbmNlOiAy
LjEwCisgKi8KK3ZvaWQgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX2Rpc2tfY2Fj
aGUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuY2VsbGFibGUqIGNhbmNl
bGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkK
K3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUiht
YW5hZ2VyKSk7CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19u
ZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworICAgIG1hbmFn
ZXItPnByaXYtPndlYnNpdGVEYXRhU3RvcmUtPnJlbW92ZURhdGEoV2Vic2l0ZURhdGFUeXBlRGlz
a0NhY2hlLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50OjptaW4oKSwgW3Rh
c2tdIHsKKyAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwor
ICAgIH0pOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9k
aXNrX2NhY2hlX2ZpbmlzaDoKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVycm9yOiByZXR1cm4gbG9jYXRp
b24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAqIEZpbmlzaCBhbiBhc3luY2hy
b25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Y2xlYXJfZGlza19jYWNoZSgpCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgSFRUUCBkaXNrIGNh
Y2hlIHdhcyBzdWNjZXNmdWxseSBjbGVhcmVkLCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAq
IFNpbmNlOiAyLjEwCisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9j
bGVhcl9kaXNrX2NhY2hlX2ZpbmlzaChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIs
IEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlciksIEZBTFNF
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5h
Z2VyKSwgRkFMU0UpOworCisgICAgcmV0dXJuIGdfdGFza19wcm9wYWdhdGVfYm9vbGVhbihHX1RB
U0socmVzdWx0KSwgZXJyb3IpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaAppbmRleCBlOWQ4NTkx
Li43NmQwNjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaApAQCAtMjQsNyArMjQsNyBAQAogI2lm
bmRlZiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJfaAogI2RlZmluZSBXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXJfaAogCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnaW8vZ2lv
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAKIEdfQkVHSU5fREVDTFMK
QEAgLTU2LDMxICs1Niw5NyBAQCBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlckNsYXNz
IHsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOword2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKgotd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY29uc3QgZ2NoYXIgICAgICAgICAgICAgICpmaXJzdF9vcHRpb25fbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC4uLik7Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGdjaGFyICAgICAgICAgICAgICAq
Zmlyc3Rfb3B0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiBXRUJLSVRfQVBJIGNvbnN0
IGdjaGFyICoKLXdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFzZV9kYXRhX2RpcmVj
dG9yeSAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7
Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfZGF0YV9kaXJlY3RvcnkgICAg
ICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CiAKIFdF
QktJVF9BUEkgY29uc3QgZ2NoYXIgKgotd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9i
YXNlX2NhY2hlX2RpcmVjdG9yeSAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciAqbWFuYWdlcik7Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2Fj
aGVfZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAq
bWFuYWdlcik7CiAKIFdFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgotd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9yeSAgICAgICAgICAgICAoV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfbG9jYWxfc3RvcmFnZV9kaXJlY3RvcnkgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsKIAogV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCi13ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5ICAgICAgICAg
ICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOword2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSAgICAgICAgICAgICAgICAg
IChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOwogCiBXRUJLSVRfQVBJIGNvbnN0
IGdjaGFyICoKLXdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9hcHBsaWNh
dGlvbl9jYWNoZV9kaXJlY3RvcnkgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7
Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25fY2Fj
aGVfZGlyZWN0b3J5ICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CiAKIFdF
QktJVF9BUEkgY29uc3QgZ2NoYXIgKgotd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9p
bmRleGVkZGJfZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyICptYW5hZ2VyKTsKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRi
X2RpcmVjdG9yeSAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICpt
YW5hZ2VyKTsKIAogV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCi13ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOword2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF93ZWJzcWxfZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIgKm1hbmFnZXIpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9nZXRfb3JpZ2luc19pbl9tZW1vcnlfY2FjaGUgICAgICAgICAgICAgICAo
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2Vs
bGFibGUgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFk
eUNhbGxiYWNrICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAg
ICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgR0xpc3QgKgord2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9vcmlnaW5zX2luX21lbW9yeV9jYWNoZV9maW5pc2ggICAgICAg
IChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3lu
Y1Jlc3VsdCAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAg
ICAgICAgICAgICAqKmVycm9yKTsKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnMgICAgICAgICAgIChXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaXN0ICAgICAg
ICAgICAgICAgICAgICAqb3JpZ2lucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAg
ICAgICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAg
ICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICB1
c2VyX2RhdGEpOworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnNfZmluaXNoICAgIChXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAg
ICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAq
KmVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Y2xlYXJfbWVtb3J5X2NhY2hlICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlciAqbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAg
ICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAg
ICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICB1c2Vy
X2RhdGEpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfY2xlYXJfbWVtb3J5X2NhY2hlX2ZpbmlzaCAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlciAqbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAg
ICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICoq
ZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfb3JpZ2luc19pbl9kaXNrX2NhY2hlICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAg
ICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAg
IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgIHVzZXJf
ZGF0YSk7CisKK1dFQktJVF9BUEkgR0xpc3QgKgord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9vcmlnaW5zX2luX2Rpc2tfY2FjaGVfZmluaXNoICAgICAgICAgIChXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAg
ICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAqKmVy
cm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVs
ZXRlX2Rpc2tfY2FjaGVfZm9yX29yaWdpbnMgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciAqbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpc3QgICAgICAgICAgICAgICAgICAg
ICpvcmlnaW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAgKmNhbmNl
bGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgIGNhbGxiYWNr
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rp
c2tfY2FjaGVfZm9yX29yaWdpbnNfZmluaXNoICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciAqbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICpyZXN1
bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNrX2Nh
Y2hlICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICpt
YW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAgKmNhbmNlbGxh
YmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgIGNhbGxiYWNrLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dF
QktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNr
X2NhY2hlX2ZpbmlzaCAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
ICptYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgKnJlc3Vs
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgKiplcnJvcik7CisKIAog
R19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dAppbmRleCA5ZTFh
OTIxLi5lZmE1OTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dApAQCAtMTE3
Myw2ICsxMTczLDIzIEBAIHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX2dldF90eXBlCiA8L1NFQ1RJ
T04+CiAKIDxTRUNUSU9OPgorPEZJTEU+V2ViS2l0U2VjdXJpdHlPcmlnaW48L0ZJTEU+CitXZWJL
aXRTZWN1cml0eU9yaWdpbgord2Via2l0X3NlY3VyaXR5X29yaWdpbl9uZXcKK3dlYmtpdF9zZWN1
cml0eV9vcmlnaW5fcmVmCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3VucmVmCit3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbAord2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9z
dAord2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydAorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dFQktJVF9UWVBFX1NFQ1VSSVRZX09SSUdJTgorCis8U1VCU0VDVElPTiBQcml2YXRlPgor
d2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4K
IDxGSUxFPldlYktpdFdlYnNpdGVEYXRhTWFuYWdlcjwvRklMRT4KIFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlcgogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldwpAQCAtMTE4Myw2ICsxMjAw
LDE4IEBAIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3Rv
cnkKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9hcHBsaWNhdGlvbl9j
YWNoZV9kaXJlY3RvcnkKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRi
X2RpcmVjdG9yeQogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0
b3J5Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2Nh
Y2hlCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2Nh
Y2hlX2ZpbmlzaAord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2Fj
aGVfZm9yX29yaWdpbnMKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfbWVtb3J5
X2NhY2hlX2Zvcl9vcmlnaW5zX2ZpbmlzaAord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2Ns
ZWFyX21lbW9yeV9jYWNoZQord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX21lbW9y
eV9jYWNoZV9maW5pc2gKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb3JpZ2luc19p
bl9kaXNrX2NhY2hlCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5f
ZGlza19jYWNoZV9maW5pc2gKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfZGlz
a19jYWNoZV9mb3Jfb3JpZ2lucword2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9k
aXNrX2NhY2hlX2Zvcl9vcmlnaW5zX2ZpbmlzaAord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2NsZWFyX2Rpc2tfY2FjaGUKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9kaXNr
X2NhY2hlX2ZpbmlzaAogCiA8U1VCU0VDVElPTiBTdGFuZGFyZD4KIFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlckNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstNC4wLnR5cGVzIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC50eXBlcwppbmRleCA5Y2RjMDk4Li45ZGNmY2JhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstNC4wLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay00LjAudHlwZXMKQEAgLTMxLDMgKzMxLDQgQEAgd2Via2l0X3VzZXJfY29udGVu
dF9tYW5hZ2VyX2dldF90eXBlCiB3ZWJraXRfd2ViX2hpdF90ZXN0X3Jlc3VsdF9nZXRfdHlwZQog
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90eXBlCiB3ZWJraXRfZWRpdG9yX3N0YXRl
X2dldF90eXBlCit3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF90eXBlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21s
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Mu
c2dtbAppbmRleCAwM2VlYzI3Li42MzYzMjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTUw
LDYgKzUwLDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0VXNlckNvbnRlbnQu
eG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdE5vdGlmaWNhdGlvbi54bWwi
Lz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0Tm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3QueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFNlY3VyaXR5
T3JpZ2luLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIueG1sIi8+CiAgIDwvY2hhcHRlcj4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IGNlYTRlYTguLjc5OTFjNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdFNjcmlwdERpYWxvZy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2Vj
dXJpdHlNYW5hZ2VyLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZWN1cml0eU9yaWdpbi5o
PgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlc3BvbnNl
Lmg+CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
NjI5N2IwNC4uYTBmY2EzMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE1LTA3LTAzICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgQVBJIHRvIFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciB0byBoYW5kbGUgY2FjaGVkIGRhdGEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjU4OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciBu
ZXcgQVBJLCBhbmQgaW1wbGVtZW50IGFib3V0OmRhdGEgaW4KKyAgICAgICAgTWluaUJyb3dzZXIg
dG8gc2hvdyBhbmQgaGFuZGxlIFdlYnNpdGUgZGF0YS4KKworICAgICAgICAqIE1pbmlCcm93c2Vy
L2d0ay9tYWluLmM6CisgICAgICAgIChjcmVhdGVCcm93c2VyV2luZG93KToKKyAgICAgICAgKGFi
b3V0RGF0YVJlcXVlc3RGcmVlKToKKyAgICAgICAgKGFib3V0RGF0YVJlcXVlc3ROZXcpOgorICAg
ICAgICAoYWJvdXREYXRhUmVxdWVzdEZvclZpZXcpOgorICAgICAgICAobWVtb3J5Q2FjaGVPcmln
aW5zRGVsZXRlZENhbGxiYWNrKToKKyAgICAgICAgKG1lbW9yeUNhY2hlQ2xlYXJlZENhbGxiYWNr
KToKKyAgICAgICAgKGRpc2tDYWNoZU9yaWdpbnNEZWxldGVkQ2FsbGJhY2spOgorICAgICAgICAo
ZGlza0NhY2hlQ2xlYXJlZENhbGxiYWNrKToKKyAgICAgICAgKGFib3V0RGF0YVNjcmlwdE1lc3Nh
Z2VSZWNlaXZlZENhbGxiYWNrKToKKyAgICAgICAgKGFib3V0RGF0YUZpbGxPcmlnaW5zVGFibGUp
OgorICAgICAgICAoYWJvdXREYXRhSGFuZGxlRmluaXNoUmVxdWVzdElmQ29tcGxldGUpOgorICAg
ICAgICAoZ290TWVtb3J5Q2FjaGVPcmlnaW5zQ2FsbGJhY2spOgorICAgICAgICAoZ290RGlza0Nh
Y2hlT3JpZ2luc0NhbGxiYWNrKToKKyAgICAgICAgKGFib3V0RGF0YUhhbmRsZVJlcXVlc3QpOgor
ICAgICAgICAoYWJvdXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2spOgorICAgICAgICAobWFpbik6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYnNpdGVEYXRhVGVzdDo6V2Vic2l0ZURhdGFUZXN0KToK
KyAgICAgICAgKFdlYnNpdGVEYXRhVGVzdDo6fldlYnNpdGVEYXRhVGVzdCk6CisgICAgICAgIChX
ZWJzaXRlRGF0YVRlc3Q6OmNsZWFyT3JpZ2lucyk6CisgICAgICAgIChXZWJzaXRlRGF0YVRlc3Q6
OmZldGNoT3JpZ2luc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYnNpdGVEYXRhVGVzdDo6ZmV0Y2hP
cmlnaW5zKToKKyAgICAgICAgKFdlYnNpdGVEYXRhVGVzdDo6ZGVsZXRlT3JpZ2luc0NhbGxiYWNr
KToKKyAgICAgICAgKFdlYnNpdGVEYXRhVGVzdDo6ZGVsZXRlT3JpZ2luc0FuZFdhaXRVbnRpbEZp
bmlzaGVkKToKKyAgICAgICAgKFdlYnNpdGVEYXRhVGVzdDo6ZGVsZXRlQWxsT3JpZ2luc0NhbGxi
YWNrKToKKyAgICAgICAgKFdlYnNpdGVEYXRhVGVzdDo6ZGVsZXRlQWxsT3JpZ2luc0FuZFdhaXRV
bnRpbEZpbmlzaGVkKToKKyAgICAgICAgKHRlc3RXZWJDb250ZXh0V2Vic2l0ZURhdGFDYWNoZSk6
CisgICAgICAgICh0ZXN0U2VjdXJpdHlPcmlnaW5CYXNpYyk6CisgICAgICAgIChiZWZvcmVBbGwp
OgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktp
dDJHdGsvVGVzdE1haW4uaDoKKyAgICAgICAgKFRlc3Q6OlRlc3QpOiBBZGQgcHJvY2VzcyBtb2Rl
bCBwYXJhbWV0ZXIgdG8gYmUgYWJsZSB0byBjcmVhdGUKKyAgICAgICAgdGVzdHMgd2l0aCBhIHBh
cnRpY3VsYXIgcHJvY2VzcyBtb2RlbC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJL
aXQyR3RrL1dlYlZpZXdUZXN0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpXZWJWaWV3VGVz
dCk6IEFkZCBjb25zdHJ1Y3RvciB0aGF0IHJlY2VpdmVzIGEKKyAgICAgICAgcHJvY2VzcyBtb2Rl
bC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0Lmg6
CisKIDIwMTUtMDctMjcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBVc2UgTmluamEgb24gV2luZG93cy4KZGlmZiAtLWdpdCBhL1Rvb2xzL01p
bmlCcm93c2VyL2d0ay9tYWluLmMgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCmluZGV4
IGY1ZjZlMTcuLmViMzM0MDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWlu
LmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYwpAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgImNtYWtlY29uZmlnLmgiCiAKICNpbmNsdWRlICJCcm93c2VyV2luZG93LmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgogI2luY2x1ZGUgPGVycm5vLmg+
CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNTgsOSArNTks
OSBAQCBzdGF0aWMgZ2NoYXIgKmFyZ3VtZW50VG9VUkwoY29uc3QgY2hhciAqZmlsZW5hbWUpCiAg
ICAgcmV0dXJuIGZpbGVVUkw7CiB9CiAKLXN0YXRpYyB2b2lkIGNyZWF0ZUJyb3dzZXJXaW5kb3co
Y29uc3QgZ2NoYXIgKnVyaSwgV2ViS2l0U2V0dGluZ3MgKndlYmtpdFNldHRpbmdzKQorc3RhdGlj
IHZvaWQgY3JlYXRlQnJvd3NlcldpbmRvdyhjb25zdCBnY2hhciAqdXJpLCBXZWJLaXRTZXR0aW5n
cyAqd2Via2l0U2V0dGluZ3MsIFdlYktpdFVzZXJDb250ZW50TWFuYWdlciAqdXNlckNvbnRlbnRN
YW5hZ2VyKQogewotICAgIEd0a1dpZGdldCAqd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXco
KTsKKyAgICBHdGtXaWRnZXQgKndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfdXNl
cl9jb250ZW50X21hbmFnZXIodXNlckNvbnRlbnRNYW5hZ2VyKTsKICAgICBpZiAoZWRpdG9yTW9k
ZSkKICAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF9lZGl0YWJsZShXRUJLSVRfV0VCX1ZJRVco
d2ViVmlldyksIFRSVUUpOwogICAgIEd0a1dpZGdldCAqbWFpbldpbmRvdyA9IGJyb3dzZXJfd2lu
ZG93X25ldyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIE5VTEwpOwpAQCAtMjMyLDggKzIzMywy
MDAgQEAgc3RhdGljIGdib29sZWFuIGFkZFNldHRpbmdzR3JvdXBUb0NvbnRleHQoR09wdGlvbkNv
bnRleHQgKmNvbnRleHQsIFdlYktpdFNldHRpbmcKICAgICByZXR1cm4gVFJVRTsKIH0KIAotc3Rh
dGljIHZvaWQKLWFib3V0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrKFdlYktpdFVSSVNjaGVtZVJl
cXVlc3QgKnJlcXVlc3QsIGdwb2ludGVyIHVzZXJEYXRhKQordHlwZWRlZiBzdHJ1Y3QgeworICAg
IFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3Q7CisgICAgR0xpc3QgKm1lbW9yeUNhY2hl
T3JpZ2luczsKKyAgICBHTGlzdCAqZGlza0NhY2hlT3JpZ2luczsKKyAgICBnYm9vbGVhbiBnb3RN
ZW1vcnlDYWNoZU9yaWdpbnM7CisgICAgZ2Jvb2xlYW4gZ290RGlza0NhY2hlT3JpZ2luczsKK30g
QWJvdXREYXRhUmVxdWVzdDsKKworc3RhdGljIEdIYXNoVGFibGUgKmFib3V0RGF0YVJlcXVlc3RN
YXA7CisKK3N0YXRpYyB2b2lkIGFib3V0RGF0YVJlcXVlc3RGcmVlKEFib3V0RGF0YVJlcXVlc3Qg
KnJlcXVlc3QpCit7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBn
X2xpc3RfZnJlZV9mdWxsKHJlcXVlc3QtPm1lbW9yeUNhY2hlT3JpZ2lucywgKEdEZXN0cm95Tm90
aWZ5KXdlYmtpdF9zZWN1cml0eV9vcmlnaW5fdW5yZWYpOworICAgIGdfbGlzdF9mcmVlX2Z1bGwo
cmVxdWVzdC0+ZGlza0NhY2hlT3JpZ2lucywgKEdEZXN0cm95Tm90aWZ5KXdlYmtpdF9zZWN1cml0
eV9vcmlnaW5fdW5yZWYpOworICAgIGlmIChyZXF1ZXN0LT5yZXF1ZXN0KQorICAgICAgICBnX29i
amVjdF91bnJlZihyZXF1ZXN0LT5yZXF1ZXN0KTsKKworICAgIGdfc2xpY2VfZnJlZShBYm91dERh
dGFSZXF1ZXN0LCByZXF1ZXN0KTsKK30KKworc3RhdGljIEFib3V0RGF0YVJlcXVlc3QqIGFib3V0
RGF0YVJlcXVlc3ROZXcoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqdXJpUmVxdWVzdCkKK3sKKyAg
ICBpZiAoIWFib3V0RGF0YVJlcXVlc3RNYXApCisgICAgICAgIGFib3V0RGF0YVJlcXVlc3RNYXAg
PSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19kaXJlY3RfaGFzaCwgZ19kaXJlY3RfZXF1YWwsIE5V
TEwsIChHRGVzdHJveU5vdGlmeSlhYm91dERhdGFSZXF1ZXN0RnJlZSk7CisKKyAgICBBYm91dERh
dGFSZXF1ZXN0ICpyZXF1ZXN0ID0gZ19zbGljZV9uZXcwKEFib3V0RGF0YVJlcXVlc3QpOworICAg
IHJlcXVlc3QtPnJlcXVlc3QgPSBnX29iamVjdF9yZWYodXJpUmVxdWVzdCk7CisgICAgZ19oYXNo
X3RhYmxlX2luc2VydChhYm91dERhdGFSZXF1ZXN0TWFwLCBHVUlOVF9UT19QT0lOVEVSKHdlYmtp
dF93ZWJfdmlld19nZXRfcGFnZV9pZCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF93ZWJf
dmlldyhyZXF1ZXN0LT5yZXF1ZXN0KSkpLCByZXF1ZXN0KTsKKworICAgIHJldHVybiByZXF1ZXN0
OworfQorCitzdGF0aWMgQWJvdXREYXRhUmVxdWVzdCAqYWJvdXREYXRhUmVxdWVzdEZvclZpZXco
Z3VpbnQ2NCBwYWdlSUQpCit7CisgICAgcmV0dXJuIGFib3V0RGF0YVJlcXVlc3RNYXAgPyBnX2hh
c2hfdGFibGVfbG9va3VwKGFib3V0RGF0YVJlcXVlc3RNYXAsIEdVSU5UX1RPX1BPSU5URVIocGFn
ZUlEKSkgOiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBtZW1vcnlDYWNoZU9yaWdpbnNEZWxldGVk
Q2FsbGJhY2soV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1bHQg
KnJlc3VsdCwgQWJvdXREYXRhUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICBpZiAod2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnNfZmluaXNo
KG1hbmFnZXIsIHJlc3VsdCwgTlVMTCkpCisgICAgICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQo
d2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfd2ViX3ZpZXcocmVxdWVzdC0+cmVxdWVzdCkp
OworfQorCitzdGF0aWMgdm9pZCBtZW1vcnlDYWNoZUNsZWFyZWRDYWxsYmFjayhXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBBYm91dERhdGFS
ZXF1ZXN0ICpyZXF1ZXN0KQoreworICAgIGlmICh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Y2xlYXJfbWVtb3J5X2NhY2hlX2ZpbmlzaChtYW5hZ2VyLCByZXN1bHQsIE5VTEwpKQorICAgICAg
ICB3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dl
Yl92aWV3KHJlcXVlc3QtPnJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQgZGlza0NhY2hlT3Jp
Z2luc0RlbGV0ZWRDYWxsYmFjayhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsIEdB
c3luY1Jlc3VsdCAqcmVzdWx0LCBBYm91dERhdGFSZXF1ZXN0ICpyZXF1ZXN0KQoreworICAgIGlm
ICh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rpc2tfY2FjaGVfZm9yX29yaWdp
bnNfZmluaXNoKG1hbmFnZXIsIHJlc3VsdCwgTlVMTCkpCisgICAgICAgIHdlYmtpdF93ZWJfdmll
d19yZWxvYWQod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfd2ViX3ZpZXcocmVxdWVzdC0+
cmVxdWVzdCkpOworfQorCitzdGF0aWMgdm9pZCBkaXNrQ2FjaGVDbGVhcmVkQ2FsbGJhY2soV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgQWJv
dXREYXRhUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICBpZiAod2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2NsZWFyX2Rpc2tfY2FjaGVfZmluaXNoKG1hbmFnZXIsIHJlc3VsdCwgTlVMTCkpCisg
ICAgICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9n
ZXRfd2ViX3ZpZXcocmVxdWVzdC0+cmVxdWVzdCkpOworfQorCitzdGF0aWMgdm9pZCBhYm91dERh
dGFTY3JpcHRNZXNzYWdlUmVjZWl2ZWRDYWxsYmFjayhXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIg
KnVzZXJDb250ZW50TWFuYWdlciwgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCAqbWVzc2FnZSkKK3sK
KyAgICBKU1ZhbHVlUmVmIGpzVmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3Zh
bHVlKG1lc3NhZ2UpOworICAgIEpTU3RyaW5nUmVmIGpzU3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5n
Q29weSh3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KG1lc3NhZ2Up
LCBqc1ZhbHVlLCBOVUxMKTsKKyAgICBzaXplX3QgbWF4U2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11
bVVURjhDU3RyaW5nU2l6ZShqc1N0cmluZyk7CisgICAgaWYgKCFtYXhTaXplKSB7CisgICAgICAg
IEpTU3RyaW5nUmVsZWFzZShqc1N0cmluZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2hhciAqbWVzc2FnZVN0cmluZyA9IGdfbWFsbG9jKG1heFNpemUpOworICAgIEpTU3RyaW5nR2V0
VVRGOENTdHJpbmcoanNTdHJpbmcsIG1lc3NhZ2VTdHJpbmcsIG1heFNpemUpOworICAgIEpTU3Ry
aW5nUmVsZWFzZShqc1N0cmluZyk7CisKKyAgICBjaGFyICoqdG9rZW5zID0gZ19zdHJzcGxpdCht
ZXNzYWdlU3RyaW5nLCAiOiIsIDMpOworICAgIGdfZnJlZShtZXNzYWdlU3RyaW5nKTsKKworICAg
IHVuc2lnbmVkIHRva2VuQ291bnQgPSBnX3N0cnZfbGVuZ3RoKHRva2Vucyk7CisgICAgaWYgKCF0
b2tlbnMgfHwgdG9rZW5Db3VudCA8IDIpIHsKKyAgICAgICAgZ19zdHJmcmVldih0b2tlbnMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ3VpbnQ2NCBwYWdlSUQgPSBnX2FzY2lpX3N0
cnRvdWxsKHRva2Vuc1sxXSwgTlVMTCwgMTApOworICAgIEFib3V0RGF0YVJlcXVlc3QgKnJlcXVl
c3QgPSBhYm91dERhdGFSZXF1ZXN0Rm9yVmlldyhwYWdlSUQpOworICAgIGlmICghcmVxdWVzdCkg
eworICAgICAgICBnX3N0cmZyZWV2KHRva2Vucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVs
dCgpKTsKKyAgICBpZiAodG9rZW5Db3VudCA9PSAyKSB7CisgICAgICAgIGlmIChnX3N0cl9lcXVh
bCh0b2tlbnNbMF0sICJtZW1vcnkiKSkKKyAgICAgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9jbGVhcl9tZW1vcnlfY2FjaGUobWFuYWdlciwgTlVMTCwgKEdBc3luY1JlYWR5Q2Fs
bGJhY2spbWVtb3J5Q2FjaGVDbGVhcmVkQ2FsbGJhY2ssIHJlcXVlc3QpOworICAgICAgICBlbHNl
IGlmIChnX3N0cl9lcXVhbCh0b2tlbnNbMF0sICJkaXNrIikpCisgICAgICAgICAgICB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZGlza19jYWNoZShtYW5hZ2VyLCBOVUxMLCAoR0Fz
eW5jUmVhZHlDYWxsYmFjaylkaXNrQ2FjaGVDbGVhcmVkQ2FsbGJhY2ssIHJlcXVlc3QpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGd1aW50NjQgb3JpZ2luSUQgPSBnX2FzY2lpX3N0cnRvdWxsKHRv
a2Vuc1syXSwgTlVMTCwgMTApOworICAgICAgICBpZiAoZ19zdHJfZXF1YWwodG9rZW5zWzBdLCAi
bWVtb3J5IikpIHsKKyAgICAgICAgICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luICpvcmlnaW4gPSBn
X2xpc3RfbnRoX2RhdGEocmVxdWVzdC0+bWVtb3J5Q2FjaGVPcmlnaW5zLCBvcmlnaW5JRCk7Cisg
ICAgICAgICAgICBpZiAob3JpZ2luKSB7CisgICAgICAgICAgICAgICAgR0xpc3Qgb3JpZ2lucyA9
IHsgb3JpZ2luLCBOVUxMLCBOVUxMIH07CisgICAgICAgICAgICAgICAgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2RlbGV0ZV9tZW1vcnlfY2FjaGVfZm9yX29yaWdpbnMobWFuYWdlciwgJm9y
aWdpbnMsIE5VTEwsIChHQXN5bmNSZWFkeUNhbGxiYWNrKW1lbW9yeUNhY2hlT3JpZ2luc0RlbGV0
ZWRDYWxsYmFjaywgcmVxdWVzdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
Z19zdHJfZXF1YWwodG9rZW5zWzBdLCAiZGlzayIpKSB7CisgICAgICAgICAgICBXZWJLaXRTZWN1
cml0eU9yaWdpbiAqb3JpZ2luID0gZ19saXN0X250aF9kYXRhKHJlcXVlc3QtPmRpc2tDYWNoZU9y
aWdpbnMsIG9yaWdpbklEKTsKKyAgICAgICAgICAgIGlmIChvcmlnaW4pIHsKKyAgICAgICAgICAg
ICAgICBHTGlzdCBvcmlnaW5zID0geyBvcmlnaW4sIE5VTEwsIE5VTEwgfTsKKyAgICAgICAgICAg
ICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rpc2tfY2FjaGVfZm9yX29y
aWdpbnMobWFuYWdlciwgJm9yaWdpbnMsIE5VTEwsIChHQXN5bmNSZWFkeUNhbGxiYWNrKWRpc2tD
YWNoZU9yaWdpbnNEZWxldGVkQ2FsbGJhY2ssIHJlcXVlc3QpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGdfc3RyZnJlZXYodG9rZW5zKTsKK30KKworc3RhdGljIHZvaWQg
YWJvdXREYXRhRmlsbE9yaWdpbnNUYWJsZShHU3RyaW5nICpyZXN1bHQsIEdMaXN0ICpvcmlnaW5z
LCBjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqZGF0YVR5cGUsIGNvbnN0IGNoYXIgKmRh
dGFQYXRoLCBndWludDY0IHBhZ2VJRCkKK3sKKyAgICBpZiAoIW9yaWdpbnMpCisgICAgICAgIHJl
dHVybjsKKworICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYocmVzdWx0LCAiPGgxPiVzPC9oMT5c
bjx0YWJsZT5cbiIsIHRpdGxlKTsKKyAgICBpZiAoZGF0YVBhdGgpCisgICAgICAgIGdfc3RyaW5n
X2FwcGVuZF9wcmludGYocmVzdWx0LCAiPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPlBhdGg6ICVzPC90
ZD48L3RyPlxuIiwgZGF0YVBhdGgpOworCisgICAgR0xpc3QgKmw7CisgICAgdW5zaWduZWQgaW5k
ZXg7CisgICAgZm9yIChsID0gb3JpZ2lucywgaW5kZXggPSAwOyBsOyBsID0gZ19saXN0X25leHQo
bCksIGluZGV4KyspIHsKKyAgICAgICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4gKm9yaWdpbiA9IChX
ZWJLaXRTZWN1cml0eU9yaWdpbiAqKWwtPmRhdGE7CisgICAgICAgIGNoYXIgKmRpc3BsYXlOYW1l
OworICAgICAgICBpZiAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChvcmlnaW4pKQor
ICAgICAgICAgICAgZGlzcGxheU5hbWUgPSBnX3N0cmR1cF9wcmludGYoIiVzOiV1Iiwgd2Via2l0
X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdChvcmlnaW4pLCB3ZWJraXRfc2VjdXJpdHlfb3JpZ2lu
X2dldF9wb3J0KG9yaWdpbikpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkaXNwbGF5TmFt
ZSA9IGdfc3RyZHVwKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Qob3JpZ2luKSk7Cisg
ICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYocmVzdWx0LCAiPHRyPjx0ZD4lczwvdGQ+PHRk
PjxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJjbGVhclwiIG9uY2xpY2s9XCJjbGVhckRh
dGEoJyVzOiUiR19HVUlOVDY0X0ZPUk1BVCI6JXUnKTtcIj48L3RkPjwvdHI+XG4iLAorICAgICAg
ICAgICAgZGlzcGxheU5hbWUsIGRhdGFUeXBlLCBwYWdlSUQsIGluZGV4KTsKKyAgICAgICAgZ19m
cmVlKGRpc3BsYXlOYW1lKTsKKyAgICB9CisgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZihyZXN1
bHQsICI8dHI+PHRkPjxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJjbGVhciBhbGxcIiBv
bmNsaWNrPVwiY2xlYXJEYXRhKCclczolIkdfR1VJTlQ2NF9GT1JNQVQiJyk7XCI+PC90ZD48L3Ry
PjwvdGFibGU+XG4iLAorICAgICAgICBkYXRhVHlwZSwgcGFnZUlEKTsKK30KKworc3RhdGljIHZv
aWQgYWJvdXREYXRhSGFuZGxlRmluaXNoUmVxdWVzdElmQ29tcGxldGUoQWJvdXREYXRhUmVxdWVz
dCAqcmVxdWVzdCkKK3sKKyAgICBpZiAoIXJlcXVlc3QtPmdvdE1lbW9yeUNhY2hlT3JpZ2lucyB8
fCAhcmVxdWVzdC0+Z290RGlza0NhY2hlT3JpZ2lucykKKyAgICAgICAgcmV0dXJuOworCisgICAg
R1N0cmluZyAqcmVzdWx0ID0gZ19zdHJpbmdfbmV3KAorICAgICAgICAiPGh0bWw+PGhlYWQ+Igor
ICAgICAgICAiPHNjcmlwdD4iCisgICAgICAgICIgIGZ1bmN0aW9uIGNsZWFyRGF0YShvcmlnaW4p
IHsiCisgICAgICAgICIgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMuYWJvdXREYXRh
LnBvc3RNZXNzYWdlKG9yaWdpbik7IgorICAgICAgICAiICB9IgorICAgICAgICAiICBmdW5jdGlv
biBjbGVhckFsbERhdGEoZGF0YVR5cGUpIHsiCisgICAgICAgICIgICAgd2luZG93LndlYmtpdC5t
ZXNzYWdlSGFuZGxlcnMuYWJvdXREYXRhLnBvc3RNZXNzYWdlKGRhdGFUeXBlKTsiCisgICAgICAg
ICIgIH0iCisgICAgICAgICI8L3NjcmlwdD48L2hlYWQ+PGJvZHk+XG4iKTsKKworICAgIFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOworICAg
IGd1aW50NjQgcGFnZUlEID0gd2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHdlYmtpdF91cmlf
c2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92aWV3KHJlcXVlc3QtPnJlcXVlc3QpKTsKKyAgICBhYm91
dERhdGFGaWxsT3JpZ2luc1RhYmxlKHJlc3VsdCwgcmVxdWVzdC0+bWVtb3J5Q2FjaGVPcmlnaW5z
LCAiTWVtb3J5IENhY2hlIiwgIm1lbW9yeSIsIE5VTEwsIHBhZ2VJRCk7CisgICAgYWJvdXREYXRh
RmlsbE9yaWdpbnNUYWJsZShyZXN1bHQsIHJlcXVlc3QtPmRpc2tDYWNoZU9yaWdpbnMsICJEaXNr
IENhY2hlIiwgImRpc2siLCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2Fj
aGVfZGlyZWN0b3J5KG1hbmFnZXIpLCBwYWdlSUQpOworCisgICAgcmVzdWx0ID0gZ19zdHJpbmdf
YXBwZW5kKHJlc3VsdCwgIjwvYm9keT48L2h0bWw+Iik7CisgICAgZ3NpemUgc3RyZWFtTGVuZ3Ro
ID0gcmVzdWx0LT5sZW47CisgICAgR0lucHV0U3RyZWFtICpzdHJlYW0gPSBnX21lbW9yeV9pbnB1
dF9zdHJlYW1fbmV3X2Zyb21fZGF0YShnX3N0cmluZ19mcmVlKHJlc3VsdCwgRkFMU0UpLCBzdHJl
YW1MZW5ndGgsIGdfZnJlZSk7CisgICAgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2go
cmVxdWVzdC0+cmVxdWVzdCwgc3RyZWFtLCBzdHJlYW1MZW5ndGgsICJ0ZXh0L2h0bWwiKTsKK30K
Kworc3RhdGljIHZvaWQgZ290TWVtb3J5Q2FjaGVPcmlnaW5zQ2FsbGJhY2soV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgQWJvdXREYXRhUmVx
dWVzdCAqcmVxdWVzdCkKK3sKKyAgICByZXF1ZXN0LT5nb3RNZW1vcnlDYWNoZU9yaWdpbnMgPSBU
UlVFOworICAgIHJlcXVlc3QtPm1lbW9yeUNhY2hlT3JpZ2lucyA9IHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfb3JpZ2luc19pbl9tZW1vcnlfY2FjaGVfZmluaXNoKG1hbmFnZXIsIHJl
c3VsdCwgTlVMTCk7CisgICAgYWJvdXREYXRhSGFuZGxlRmluaXNoUmVxdWVzdElmQ29tcGxldGUo
cmVxdWVzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGdvdERpc2tDYWNoZU9yaWdpbnNDYWxsYmFjayhX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBB
Ym91dERhdGFSZXF1ZXN0ICpyZXF1ZXN0KQoreworICAgIHJlcXVlc3QtPmdvdERpc2tDYWNoZU9y
aWdpbnMgPSBUUlVFOworICAgIHJlcXVlc3QtPmRpc2tDYWNoZU9yaWdpbnMgPSB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fZGlza19jYWNoZV9maW5pc2gobWFuYWdl
ciwgcmVzdWx0LCBOVUxMKTsKKyAgICBhYm91dERhdGFIYW5kbGVGaW5pc2hSZXF1ZXN0SWZDb21w
bGV0ZShyZXF1ZXN0KTsKK30KKworc3RhdGljIHZvaWQgYWJvdXREYXRhSGFuZGxlUmVxdWVzdChX
ZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0KQoreworICAgIEFib3V0RGF0YVJlcXVlc3Qg
KmRhdGFSZXF1ZXN0ID0gYWJvdXREYXRhUmVxdWVzdE5ldyhyZXF1ZXN0KTsKKyAgICBXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKKyAgICB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29yaWdpbnNfaW5fbWVtb3J5X2NhY2hlKG1h
bmFnZXIsIE5VTEwsIChHQXN5bmNSZWFkeUNhbGxiYWNrKWdvdE1lbW9yeUNhY2hlT3JpZ2luc0Nh
bGxiYWNrLCBkYXRhUmVxdWVzdCk7CisgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dl
dF9vcmlnaW5zX2luX2Rpc2tfY2FjaGUobWFuYWdlciwgTlVMTCwgKEdBc3luY1JlYWR5Q2FsbGJh
Y2spZ290RGlza0NhY2hlT3JpZ2luc0NhbGxiYWNrLCBkYXRhUmVxdWVzdCk7Cit9CisKK3N0YXRp
YyB2b2lkIGFib3V0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrKFdlYktpdFVSSVNjaGVtZVJlcXVl
c3QgKnJlcXVlc3QsIGdwb2ludGVyIHVzZXJEYXRhKQogewogICAgIEdJbnB1dFN0cmVhbSAqc3Ry
ZWFtOwogICAgIGdzaXplIHN0cmVhbUxlbmd0aDsKQEAgLTI1Miw3ICs0NDUsOSBAQCBhYm91dFVS
SVNjaGVtZVJlcXVlc3RDYWxsYmFjayhXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0LCBn
cG9pbnRlciB1c2VyRGF0YQogCiAgICAgICAgIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmlu
aXNoKHJlcXVlc3QsIHN0cmVhbSwgc3RyZWFtTGVuZ3RoLCAidGV4dC9odG1sIik7CiAgICAgICAg
IGdfb2JqZWN0X3VucmVmKHN0cmVhbSk7Ci0gICAgfSBlbHNlIHsKKyAgICB9IGVsc2UgaWYgKCFn
X3N0cmNtcDAocGF0aCwgImRhdGEiKSkKKyAgICAgICAgYWJvdXREYXRhSGFuZGxlUmVxdWVzdChy
ZXF1ZXN0KTsKKyAgICBlbHNlIHsKICAgICAgICAgZXJyb3IgPSBnX2Vycm9yX25ldyhNSU5JX0JS
T1dTRVJfRVJST1IsIE1JTklfQlJPV1NFUl9FUlJPUl9JTlZBTElEX0FCT1VUX1BBVEgsICJJbnZh
bGlkIGFib3V0OiVzIHBhZ2UuIiwgcGF0aCk7CiAgICAgICAgIHdlYmtpdF91cmlfc2NoZW1lX3Jl
cXVlc3RfZmluaXNoX2Vycm9yKHJlcXVlc3QsIGVycm9yKTsKICAgICAgICAgZ19lcnJvcl9mcmVl
KGVycm9yKTsKQEAgLTI5NSwxMyArNDkwLDE3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICph
cmd2W10pCiAKICAgICB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSh3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgbWluaUJyb3dzZXJBYm91dFNjaGVtZSwgYWJv
dXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2ssIE5VTEwsIE5VTEwpOwogCisgICAgV2ViS2l0VXNl
ckNvbnRlbnRNYW5hZ2VyICp1c2VyQ29udGVudE1hbmFnZXIgPSB3ZWJraXRfdXNlcl9jb250ZW50
X21hbmFnZXJfbmV3KCk7CisgICAgd2Via2l0X3VzZXJfY29udGVudF9tYW5hZ2VyX3JlZ2lzdGVy
X3NjcmlwdF9tZXNzYWdlX2hhbmRsZXIodXNlckNvbnRlbnRNYW5hZ2VyLCAiYWJvdXREYXRhIik7
CisgICAgZ19zaWduYWxfY29ubmVjdCh1c2VyQ29udGVudE1hbmFnZXIsICJzY3JpcHQtbWVzc2Fn
ZS1yZWNlaXZlZDo6YWJvdXREYXRhIiwgR19DQUxMQkFDSyhhYm91dERhdGFTY3JpcHRNZXNzYWdl
UmVjZWl2ZWRDYWxsYmFjayksIE5VTEwpOworCiAgICAgaWYgKHVyaUFyZ3VtZW50cykgewogICAg
ICAgICBpbnQgaTsKIAogICAgICAgICBmb3IgKGkgPSAwOyB1cmlBcmd1bWVudHNbaV07IGkrKykK
LSAgICAgICAgICAgIGNyZWF0ZUJyb3dzZXJXaW5kb3codXJpQXJndW1lbnRzW2ldLCB3ZWJraXRT
ZXR0aW5ncyk7CisgICAgICAgICAgICBjcmVhdGVCcm93c2VyV2luZG93KHVyaUFyZ3VtZW50c1tp
XSwgd2Via2l0U2V0dGluZ3MsIHVzZXJDb250ZW50TWFuYWdlcik7CiAgICAgfSBlbHNlCi0gICAg
ICAgIGNyZWF0ZUJyb3dzZXJXaW5kb3coQlJPV1NFUl9ERUZBVUxUX1VSTCwgd2Via2l0U2V0dGlu
Z3MpOworICAgICAgICBjcmVhdGVCcm93c2VyV2luZG93KEJST1dTRVJfREVGQVVMVF9VUkwsIHdl
YmtpdFNldHRpbmdzLCB1c2VyQ29udGVudE1hbmFnZXIpOwogCiAgICAgZ19jbGVhcl9vYmplY3Qo
JndlYmtpdFNldHRpbmdzKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggOTZhMzRi
MS4uOTI3YTZiMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBzdGF0aWMgV2ViS2l0VGVzdFNl
cnZlcioga1NlcnZlcjsKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrSHR0cHNTZXJ2ZXI7CiAK
IHN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RGVmYXVsdChUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQogewpAQCAtNTQ5LDExICs1NTAsMjQyIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0
U2VjdXJpdHlGaWxlWEhSKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIHdl
YmtpdF9zZXR0aW5nc19zZXRfYWxsb3dfZmlsZV9hY2Nlc3NfZnJvbV9maWxlX3VybHMod2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBGQUxTRSk7CiB9CiAKK2Ns
YXNzIFdlYnNpdGVEYXRhVGVzdCA6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShXZWJzaXRlRGF0YVRlc3QpOworCisgICAgZW51bSBjbGFz
cyBEYXRhVHlwZSB7CisgICAgICAgIE1lbW9yeUNhY2hlLAorICAgICAgICBEaXNrQ2FjaGUKKyAg
ICB9OworCisgICAgV2Vic2l0ZURhdGFUZXN0KCkKKyAgICAgICAgOiBXZWJWaWV3VGVzdChXRUJL
SVRfUFJPQ0VTU19NT0RFTF9NVUxUSVBMRV9TRUNPTkRBUllfUFJPQ0VTU0VTKQorICAgICAgICAs
IG1fbWFuYWdlcih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdl
YmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpKSkKKyAgICAgICAgLCBtX2RhdGFU
eXBlKERhdGFUeXBlOjpNZW1vcnlDYWNoZSkKKyAgICAgICAgLCBtX29yaWdpbnMobnVsbHB0cikK
KyAgICB7CisgICAgfQorCisgICAgfldlYnNpdGVEYXRhVGVzdCgpCisgICAgeworICAgICAgICBj
bGVhck9yaWdpbnMoKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyT3JpZ2lucygpCisgICAgewor
ICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fb3JpZ2lucywgcmVpbnRlcnByZXRfY2FzdDxHRGVz
dHJveU5vdGlmeT4od2Via2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZikpOworICAgICAgICBtX29y
aWdpbnMgPSBudWxscHRyOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZldGNoT3JpZ2luc0Nh
bGxiYWNrKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIFdlYnNpdGVEYXRhVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGVz
dC0+bV9kYXRhVHlwZSkgeworICAgICAgICBjYXNlIERhdGFUeXBlOjpNZW1vcnlDYWNoZToKKyAg
ICAgICAgICAgIHRlc3QtPm1fb3JpZ2lucyA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfb3JpZ2luc19pbl9tZW1vcnlfY2FjaGVfZmluaXNoKG1hbmFnZXIsIHJlc3VsdCwgbnVsbHB0
cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhVHlwZTo6RGlza0NhY2hl
OgorICAgICAgICAgICAgdGVzdC0+bV9vcmlnaW5zID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF9vcmlnaW5zX2luX2Rpc2tfY2FjaGVfZmluaXNoKG1hbmFnZXIsIHJlc3VsdCwgbnVs
bHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgdGVzdC0+cXVpdE1h
aW5Mb29wKCk7CisgICAgfQorCisgICAgR0xpc3QqIGZldGNoT3JpZ2lucyhEYXRhVHlwZSBkYXRh
VHlwZSkKKyAgICB7CisgICAgICAgIGNsZWFyT3JpZ2lucygpOworICAgICAgICBtX2RhdGFUeXBl
ID0gZGF0YVR5cGU7CisgICAgICAgIHN3aXRjaCAobV9kYXRhVHlwZSkgeworICAgICAgICBjYXNl
IERhdGFUeXBlOjpNZW1vcnlDYWNoZToKKyAgICAgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9nZXRfb3JpZ2luc19pbl9tZW1vcnlfY2FjaGUobV9tYW5hZ2VyLCBudWxscHRyLCBy
ZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGZldGNoT3JpZ2luc0NhbGxiYWNr
KSwgdGhpcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhVHlwZTo6RGlz
a0NhY2hlOgorICAgICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vcmln
aW5zX2luX2Rpc2tfY2FjaGUobV9tYW5hZ2VyLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdB
c3luY1JlYWR5Q2FsbGJhY2s+KGZldGNoT3JpZ2luc0NhbGxiYWNrKSwgdGhpcyk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9y
ZWFjaGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OworICAgICAgICByZXR1cm4gbV9vcmlnaW5zOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRl
bGV0ZU9yaWdpbnNDYWxsYmFjayhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIsIEdB
c3luY1Jlc3VsdCogcmVzdWx0LCBXZWJzaXRlRGF0YVRlc3QqIHRlc3QpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHRlc3QtPm1fZGF0YVR5cGUpIHsKKyAgICAgICAgY2FzZSBEYXRhVHlwZTo6TWVt
b3J5Q2FjaGU6CisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfZGVsZXRlX21lbW9yeV9jYWNoZV9mb3Jfb3JpZ2luc19maW5pc2gobWFuYWdlciwgcmVzdWx0
LCBudWxscHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhVHlwZTo6
RGlza0NhY2hlOgorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2RlbGV0ZV9kaXNrX2NhY2hlX2Zvcl9vcmlnaW5zX2ZpbmlzaChtYW5hZ2VyLCByZXN1bHQs
IG51bGxwdHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgfQorICAgICAgICB0ZXN0LT5x
dWl0TWFpbkxvb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGRlbGV0ZU9yaWdpbnNBbmRXYWl0VW50
aWxGaW5pc2hlZChEYXRhVHlwZSBkYXRhVHlwZSwgR0xpc3QqIG9yaWdpbnMpCisgICAgeworICAg
ICAgICBtX2RhdGFUeXBlID0gZGF0YVR5cGU7CisgICAgICAgIHN3aXRjaCAobV9kYXRhVHlwZSkg
eworICAgICAgICBjYXNlIERhdGFUeXBlOjpNZW1vcnlDYWNoZToKKyAgICAgICAgICAgIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9kZWxldGVfbWVtb3J5X2NhY2hlX2Zvcl9vcmlnaW5zKG1f
bWFuYWdlciwgb3JpZ2lucywgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNh
bGxiYWNrPihkZWxldGVPcmlnaW5zQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIERhdGFUeXBlOjpEaXNrQ2FjaGU6CisgICAgICAgICAgICB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZGVsZXRlX2Rpc2tfY2FjaGVfZm9yX29yaWdpbnMobV9tYW5h
Z2VyLCBvcmlnaW5zLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJh
Y2s+KGRlbGV0ZU9yaWdpbnNDYWxsYmFjayksIHRoaXMpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAg
ICAgICB9CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCBkZWxldGVBbGxPcmlnaW5zQ2FsbGJhY2soV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyKiBtYW5hZ2VyLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2Vic2l0ZURhdGFUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0ZXN0LT5tX2RhdGFUeXBlKSB7CisgICAgICAg
IGNhc2UgRGF0YVR5cGU6Ok1lbW9yeUNhY2hlOgorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX21lbW9yeV9jYWNoZV9maW5pc2gobWFuYWdlciwg
cmVzdWx0LCBudWxscHRyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRh
VHlwZTo6RGlza0NhY2hlOgorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2NsZWFyX2Rpc2tfY2FjaGVfZmluaXNoKG1hbmFnZXIsIHJlc3VsdCwgbnVsbHB0
cikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBn
X2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICB9CisgICAgICAgIHRlc3QtPnF1aXRNYWlu
TG9vcCgpOworICAgIH0KKworICAgIHZvaWQgZGVsZXRlQWxsT3JpZ2luc0FuZFdhaXRVbnRpbEZp
bmlzaGVkKERhdGFUeXBlIGRhdGFUeXBlKQorICAgIHsKKyAgICAgICAgbV9kYXRhVHlwZSA9IGRh
dGFUeXBlOworICAgICAgICBzd2l0Y2ggKG1fZGF0YVR5cGUpIHsKKyAgICAgICAgY2FzZSBEYXRh
VHlwZTo6TWVtb3J5Q2FjaGU6CisgICAgICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfY2xlYXJfbWVtb3J5X2NhY2hlKG1fbWFuYWdlciwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2Fz
dDxHQXN5bmNSZWFkeUNhbGxiYWNrPihkZWxldGVBbGxPcmlnaW5zQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERhdGFUeXBlOjpEaXNrQ2FjaGU6Cisg
ICAgICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZGlza19jYWNoZSht
X21hbmFnZXIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4o
ZGVsZXRlQWxsT3JpZ2luc0NhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAg
IFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbV9tYW5hZ2VyOworICAgIERhdGFUeXBlIG1fZGF0
YVR5cGU7CisgICAgR0xpc3QqIG1fb3JpZ2luczsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJD
b250ZXh0V2Vic2l0ZURhdGFDYWNoZShXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0
X3dlYl9jb250ZXh0X2dldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0
KCkpOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+
bV93ZWJDb250ZXh0LmdldCgpLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKwor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2VtcHR5IikuZGF0YSgp
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmxvYWRV
Ukkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZW1wdHkiKS5kYXRhKCkpOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBmaWxl
VVJMKGdfc3RyZHVwX3ByaW50ZigiZmlsZTovLyVzL3NpbXBsZS5odG1sIiwgVGVzdDo6Z2V0UmVz
b3VyY2VzRGlyKFRlc3Q6OldlYktpdDJSZXNvdXJjZXMpLmRhdGEoKSkpOworICAgIHRlc3QtPmxv
YWRVUkkoZmlsZVVSTC5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICBHTGlzdCogb3JpZ2lucyA9IHRlc3QtPmZldGNoT3JpZ2lucyhXZWJzaXRlRGF0YVRl
c3Q6OkRhdGFUeXBlOjpNZW1vcnlDYWNoZSk7CisgICAgZ19hc3NlcnQob3JpZ2lucyk7CisgICAg
Z19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgob3JpZ2lucyksID09LCAzKTsKKyAgICBXZWJL
aXRTZWN1cml0eU9yaWdpbiogaHR0cE9yaWdpbiA9IG51bGxwdHI7CisgICAgZm9yIChHTGlzdCog
bCA9IG9yaWdpbnM7IGw7IGwgPSBnX2xpc3RfbmV4dChsKSkgeworICAgICAgICBXZWJLaXRTZWN1
cml0eU9yaWdpbiogb3JpZ2luID0gc3RhdGljX2Nhc3Q8V2ViS2l0U2VjdXJpdHlPcmlnaW4qPihs
LT5kYXRhKTsKKyAgICAgICAgY29uc3QgY2hhciogcHJvdG9jb2wgPSB3ZWJraXRfc2VjdXJpdHlf
b3JpZ2luX2dldF9wcm90b2NvbChvcmlnaW4pOworICAgICAgICBnX2Fzc2VydChwcm90b2NvbCk7
CisgICAgICAgIGlmIChnX3N0cl9lcXVhbChwcm90b2NvbCwgImh0dHAiKSkgeworICAgICAgICAg
ICAgaHR0cE9yaWdpbiA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fcmVmKG9yaWdpbik7CisgICAg
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdChv
cmlnaW4pLCA9PSwga1NlcnZlci0+YmFzZVVSSSgpLT5ob3N0KTsKKyAgICAgICAgICAgIGdfYXNz
ZXJ0X2NtcGludCh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0KG9yaWdpbiksID09LCBr
U2VydmVyLT5iYXNlVVJJKCktPnBvcnQpOworICAgICAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHByb3RvY29sLCAiaHR0cHMiKSkgeworICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Qob3JpZ2luKSwgPT0sIGtIdHRwc1NlcnZlci0+YmFz
ZVVSSSgpLT5ob3N0KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX2dldF9wb3J0KG9yaWdpbiksID09LCBrSHR0cHNTZXJ2ZXItPmJhc2VVUkkoKS0+
cG9ydCk7CisgICAgICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocHJvdG9jb2wsICJmaWxlIikp
IHsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0
KG9yaWdpbikpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9zZWN1cml0eV9v
cmlnaW5fZ2V0X3BvcnQob3JpZ2luKSwgPT0sIDApOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorCisgICAgZ19hc3NlcnQoaHR0cE9y
aWdpbik7CisgICAgR0xpc3Qgb3JpZ2luc1RvRGVsZXRlID0geyBodHRwT3JpZ2luLCBudWxscHRy
LCBudWxscHRyIH07CisgICAgdGVzdC0+ZGVsZXRlT3JpZ2luc0FuZFdhaXRVbnRpbEZpbmlzaGVk
KFdlYnNpdGVEYXRhVGVzdDo6RGF0YVR5cGU6Ok1lbW9yeUNhY2hlLCAmb3JpZ2luc1RvRGVsZXRl
KTsKKyAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3VucmVmKGh0dHBPcmlnaW4pOworICAgIG9y
aWdpbnMgPSB0ZXN0LT5mZXRjaE9yaWdpbnMoV2Vic2l0ZURhdGFUZXN0OjpEYXRhVHlwZTo6TWVt
b3J5Q2FjaGUpOworICAgIGdfYXNzZXJ0KG9yaWdpbnMpOworICAgIGdfYXNzZXJ0X2NtcGludChn
X2xpc3RfbGVuZ3RoKG9yaWdpbnMpLCA9PSwgMik7CisgICAgZm9yIChHTGlzdCogbCA9IG9yaWdp
bnM7IGw7IGwgPSBnX2xpc3RfbmV4dChsKSkgeworICAgICAgICBXZWJLaXRTZWN1cml0eU9yaWdp
biogb3JpZ2luID0gc3RhdGljX2Nhc3Q8V2ViS2l0U2VjdXJpdHlPcmlnaW4qPihsLT5kYXRhKTsK
KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3Byb3Rv
Y29sKG9yaWdpbiksICE9LCAiaHR0cCIpOworICAgIH0KKworICAgIHRlc3QtPmRlbGV0ZUFsbE9y
aWdpbnNBbmRXYWl0VW50aWxGaW5pc2hlZChXZWJzaXRlRGF0YVRlc3Q6OkRhdGFUeXBlOjpNZW1v
cnlDYWNoZSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPmZldGNoT3JpZ2lucyhXZWJzaXRlRGF0YVRl
c3Q6OkRhdGFUeXBlOjpNZW1vcnlDYWNoZSkpOworCisgICAgLy8gRGlzayBjYWNoZSBkZWxheXMg
dGhlIHN0b3Jpbmcgb2YgaW5pdGlhbCByZXNvdXJjZXMgZm9yIDEgc2Vjb25kIHRvIGF2b2lkCisg
ICAgLy8gYWZmZWN0aW5nIGVhcmx5IHBhZ2UgbG9hZC4gU28sIHdhaXQgMSBzZWNvbmQgaGVyZSB0
byBtYWtlIHN1cmUgcmVzb3VyY2VzCisgICAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gc3RvcmVkLgor
ICAgIHRlc3QtPndhaXQoMSk7CisKKyAgICBvcmlnaW5zID0gdGVzdC0+ZmV0Y2hPcmlnaW5zKFdl
YnNpdGVEYXRhVGVzdDo6RGF0YVR5cGU6OkRpc2tDYWNoZSk7CisgICAgZ19hc3NlcnQob3JpZ2lu
cyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgob3JpZ2lucyksID09LCAyKTsK
KyAgICBodHRwT3JpZ2luID0gbnVsbHB0cjsKKyAgICBmb3IgKEdMaXN0KiBsID0gb3JpZ2luczsg
bDsgbCA9IGdfbGlzdF9uZXh0KGwpKSB7CisgICAgICAgIFdlYktpdFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4gPSBzdGF0aWNfY2FzdDxXZWJLaXRTZWN1cml0eU9yaWdpbio+KGwtPmRhdGEpOworICAg
ICAgICBjb25zdCBjaGFyKiBwcm90b2NvbCA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3By
b3RvY29sKG9yaWdpbik7CisgICAgICAgIGdfYXNzZXJ0KHByb3RvY29sKTsKKyAgICAgICAgaWYg
KGdfc3RyX2VxdWFsKHByb3RvY29sLCAiaHR0cCIpKSB7CisgICAgICAgICAgICBodHRwT3JpZ2lu
ID0gd2Via2l0X3NlY3VyaXR5X29yaWdpbl9yZWYob3JpZ2luKTsKKyAgICAgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9ob3N0KG9yaWdpbiksID09LCBr
U2VydmVyLT5iYXNlVVJJKCktPmhvc3QpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X3BvcnQob3JpZ2luKSwgPT0sIGtTZXJ2ZXItPmJhc2VV
UkkoKS0+cG9ydCk7CisgICAgICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocHJvdG9jb2wsICJo
dHRwcyIpKSB7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NlY3VyaXR5X29y
aWdpbl9nZXRfaG9zdChvcmlnaW4pLCA9PSwga0h0dHBzU2VydmVyLT5iYXNlVVJJKCktPmhvc3Qp
OworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0
X3BvcnQob3JpZ2luKSwgPT0sIGtIdHRwc1NlcnZlci0+YmFzZVVSSSgpLT5wb3J0KTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KKwor
ICAgIG9yaWdpbnNUb0RlbGV0ZS5kYXRhID0gaHR0cE9yaWdpbjsKKyAgICB0ZXN0LT5kZWxldGVP
cmlnaW5zQW5kV2FpdFVudGlsRmluaXNoZWQoV2Vic2l0ZURhdGFUZXN0OjpEYXRhVHlwZTo6RGlz
a0NhY2hlLCAmb3JpZ2luc1RvRGVsZXRlKTsKKyAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3Vu
cmVmKGh0dHBPcmlnaW4pOworICAgIG9yaWdpbnMgPSB0ZXN0LT5mZXRjaE9yaWdpbnMoV2Vic2l0
ZURhdGFUZXN0OjpEYXRhVHlwZTo6RGlza0NhY2hlKTsKKyAgICBnX2Fzc2VydChvcmlnaW5zKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChvcmlnaW5zKSwgPT0sIDEpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbChzdGF0
aWNfY2FzdDxXZWJLaXRTZWN1cml0eU9yaWdpbio+KG9yaWdpbnMtPmRhdGEpKSwgPT0sICJodHRw
cyIpOworCisgICAgdGVzdC0+ZGVsZXRlQWxsT3JpZ2luc0FuZFdhaXRVbnRpbEZpbmlzaGVkKFdl
YnNpdGVEYXRhVGVzdDo6RGF0YVR5cGU6OkRpc2tDYWNoZSk7CisgICAgZ19hc3NlcnQoIXRlc3Qt
PmZldGNoT3JpZ2lucyhXZWJzaXRlRGF0YVRlc3Q6OkRhdGFUeXBlOjpEaXNrQ2FjaGUpKTsKKwor
ICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV93ZWJD
b250ZXh0LmdldCgpLCBvcmlnaW5hbFBvbGljeSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RTZWN1
cml0eU9yaWdpbkJhc2ljKFRlc3QqLCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4gPSB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX25ldygiaHR0cCIsICIx
MjcuMC4wLjEiLCAxMjM0KTsKKyAgICBnX2Fzc2VydChvcmlnaW4pOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbChvcmlnaW4pLCA9PSwgImh0
dHAiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9z
dChvcmlnaW4pLCA9PSwgIjEyNy4wLjAuMSIpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX2dldF9wb3J0KG9yaWdpbiksID09LCAxMjM0KTsKKyAgICB3ZWJraXRf
c2VjdXJpdHlfb3JpZ2luX3VucmVmKG9yaWdpbik7Cit9CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsK
ICAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKICAgICBrU2VydmVyLT5ydW4o
c2VydmVyQ2FsbGJhY2spOwogCisgICAga0h0dHBzU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2
ZXIoV2ViS2l0VGVzdFNlcnZlcjo6U2VydmVySFRUUFMpOworICAgIGtIdHRwc1NlcnZlci0+cnVu
KHNlcnZlckNhbGxiYWNrKTsKKwogICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJk
ZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViQ29udGV4dERlZmF1bHQpOwogICAgIFdlYlZpZXdUZXN0
OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiY29uZmlndXJhdGlvbiIsIHRlc3RXZWJDb250ZXh0
Q29uZmlndXJhdGlvbik7CiAgICAgUGx1Z2luc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIs
ICJnZXQtcGx1Z2lucyIsIHRlc3RXZWJDb250ZXh0R2V0UGx1Z2lucyk7CkBAIC01NjIsOSArNzk0
LDEyIEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJD
b250ZXh0IiwgImxhbmd1YWdlcyIsIHRlc3RXZWJDb250ZXh0TGFuZ3VhZ2VzKTsKICAgICBTZWN1
cml0eVBvbGljeVRlc3Q6OmFkZCgiV2ViS2l0U2VjdXJpdHlNYW5hZ2VyIiwgInNlY3VyaXR5LXBv
bGljeSIsIHRlc3RXZWJDb250ZXh0U2VjdXJpdHlQb2xpY3kpOwogICAgIFdlYlZpZXdUZXN0Ojph
ZGQoIldlYktpdFNlY3VyaXR5TWFuYWdlciIsICJmaWxlLXhociIsIHRlc3RXZWJDb250ZXh0U2Vj
dXJpdHlGaWxlWEhSKTsKKyAgICBXZWJzaXRlRGF0YVRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4
dCIsICJ3ZWJzaXRlLWRhdGEvY2FjaGUiLCB0ZXN0V2ViQ29udGV4dFdlYnNpdGVEYXRhQ2FjaGUp
OworICAgIFRlc3Q6OmFkZCgiV2ViS2l0U2VjdXJpdHlPcmlnaW4iLCAiYmFzaWMiLCB0ZXN0U2Vj
dXJpdHlPcmlnaW5CYXNpYyk7CiB9CiAKIHZvaWQgYWZ0ZXJBbGwoKQogewogICAgIGRlbGV0ZSBr
U2VydmVyOworICAgIGRlbGV0ZSBrSHR0cHNTZXJ2ZXI7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmggYi9Ub29scy9UZXN0V2ViS2l0
QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmgKaW5kZXggNjA1NGZlMC4uM2YzNTc1ZiAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvVGVzdE1haW4uaApAQCAtNjUs
NyArNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHRlc3QtPmluaXRpYWxpemVXZWJFeHRlbnNpb25z
KCk7CiAgICAgfQogCi0gICAgVGVzdCgpCisgICAgVGVzdChXZWJLaXRQcm9jZXNzTW9kZWwgcHJv
Y2Vzc01vZGVsID0gV0VCS0lUX1BST0NFU1NfTU9ERUxfU0hBUkVEX1NFQ09OREFSWV9QUk9DRVNT
KQogICAgIHsKICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnko
Z19idWlsZF9maWxlbmFtZShkYXRhRGlyZWN0b3J5KCksICJsb2NhbC1zdG9yYWdlIiwgbnVsbHB0
cikpOwogICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGluZGV4ZWREQkRpcmVjdG9yeShnX2J1aWxk
X2ZpbGVuYW1lKGRhdGFEaXJlY3RvcnkoKSwgImluZGV4ZWRkYiIsIG51bGxwdHIpKTsKQEAgLTc4
LDYgKzc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgIndlYnNxbC1kaXJlY3RvcnkiLCB3ZWJT
UUxEaXJlY3RvcnkuZ2V0KCksIG51bGxwdHIpKTsKIAogICAgICAgICBtX3dlYkNvbnRleHQgPSBh
ZG9wdEdSZWYod2Via2l0X3dlYl9jb250ZXh0X25ld193aXRoX3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
KHdlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpOworICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X3Byb2Nlc3NfbW9kZWwobV93ZWJDb250ZXh0LmdldCgpLCBwcm9jZXNzTW9kZWwpOwogICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViQ29udGV4dC5nZXQoKSwgImluaXRpYWxpemUtd2Vi
LWV4dGVuc2lvbnMiLCBHX0NBTExCQUNLKGluaXRpYWxpemVXZWJFeHRlbnNpb25zQ2FsbGJhY2sp
LCB0aGlzKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dl
YktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0
Mkd0ay9XZWJWaWV3VGVzdC5jcHAKaW5kZXggMTRmMmMxNC4uMzVjMGYyNyAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHAKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHAKQEAgLTI4
LDExICsyOCwxNSBAQAogV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KFdlYktpdFVzZXJDb250ZW50
TWFuYWdlciogdXNlckNvbnRlbnRNYW5hZ2VyKQogICAgIDogbV93ZWJWaWV3KFdFQktJVF9XRUJf
VklFVyhnX29iamVjdF9yZWZfc2luayhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcs
ICJ3ZWItY29udGV4dCIsIG1fd2ViQ29udGV4dC5nZXQoKSwgInVzZXItY29udGVudC1tYW5hZ2Vy
IiwgdXNlckNvbnRlbnRNYW5hZ2VyLCBudWxscHRyKSkpKQogICAgICwgbV9tYWluTG9vcChnX21h
aW5fbG9vcF9uZXcobnVsbHB0ciwgVFJVRSkpCi0gICAgLCBtX3BhcmVudFdpbmRvdyhudWxscHRy
KQotICAgICwgbV9qYXZhc2NyaXB0UmVzdWx0KG51bGxwdHIpCi0gICAgLCBtX3Jlc291cmNlRGF0
YVNpemUoMCkKLSAgICAsIG1fc3VyZmFjZShudWxscHRyKQotICAgICwgbV9leHBlY3RlZFdlYlBy
b2Nlc3NDcmFzaChmYWxzZSkKK3sKKyAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKG1fd2ViVmlldykpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJW
aWV3LCAid2ViLXByb2Nlc3MtY3Jhc2hlZCIsIEdfQ0FMTEJBQ0soV2ViVmlld1Rlc3Q6OndlYlBy
b2Nlc3NDcmFzaGVkKSwgdGhpcyk7Cit9CisKK1dlYlZpZXdUZXN0OjpXZWJWaWV3VGVzdChXZWJL
aXRQcm9jZXNzTW9kZWwgcHJvY2Vzc01vZGVsKQorICAgIDogVGVzdChwcm9jZXNzTW9kZWwpCisg
ICAgLCBtX3dlYlZpZXcoV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X3JlZl9zaW5rKHdlYmtpdF93
ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0KG1fd2ViQ29udGV4dC5nZXQoKSkpKSkKKyAgICAsIG1f
bWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KG51bGxwdHIsIFRSVUUpKQogewogICAgIGFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV93ZWJWaWV3KSk7CiAgICAg
Z19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJ3ZWItcHJvY2Vzcy1jcmFzaGVkIiwgR19DQUxM
QkFDSyhXZWJWaWV3VGVzdDo6d2ViUHJvY2Vzc0NyYXNoZWQpLCB0aGlzKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuaCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuaAppbmRleCAzZjk5ZDIx
Li5kZjFiMjAyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3Rr
L1dlYlZpZXdUZXN0LmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9X
ZWJWaWV3VGVzdC5oCkBAIC0yOSw2ICsyOSw3IEBAIGNsYXNzIFdlYlZpZXdUZXN0OiBwdWJsaWMg
VGVzdCB7CiBwdWJsaWM6CiAgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShXZWJWaWV3VGVzdCk7
CiAgICAgV2ViVmlld1Rlc3QoV2ViS2l0VXNlckNvbnRlbnRNYW5hZ2VyKiA9IG51bGxwdHIpOwor
ICAgIFdlYlZpZXdUZXN0KFdlYktpdFByb2Nlc3NNb2RlbCk7CiAgICAgdmlydHVhbCB+V2ViVmll
d1Rlc3QoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSk7CkBA
IC04MywxNCArODQsMTQgQEAgcHVibGljOgogICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsK
ICAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CiAgICAgQ1N0cmluZyBtX2FjdGl2ZVVSSTsKLSAg
ICBHdGtXaWRnZXQqIG1fcGFyZW50V2luZG93OworICAgIEd0a1dpZGdldCogbV9wYXJlbnRXaW5k
b3cgeyBudWxscHRyIH07CiAgICAgQ1N0cmluZyBtX2V4cGVjdGVkVGl0bGU7Ci0gICAgV2ViS2l0
SmF2YXNjcmlwdFJlc3VsdCogbV9qYXZhc2NyaXB0UmVzdWx0OwotICAgIEdFcnJvcioqIG1famF2
YXNjcmlwdEVycm9yOworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIG1famF2YXNjcmlwdFJl
c3VsdCB7IG51bGxwdHIgfTsKKyAgICBHRXJyb3IqKiBtX2phdmFzY3JpcHRFcnJvciB7IG51bGxw
dHIgfTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IG1fcmVzb3VyY2VEYXRhOwotICAgIHNpemVfdCBt
X3Jlc291cmNlRGF0YVNpemU7Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBtX3N1cmZhY2U7Ci0gICAg
Ym9vbCBtX2V4cGVjdGVkV2ViUHJvY2Vzc0NyYXNoOworICAgIHNpemVfdCBtX3Jlc291cmNlRGF0
YVNpemUgeyAwIH07CisgICAgY2Fpcm9fc3VyZmFjZV90KiBtX3N1cmZhY2UgeyBudWxscHRyIH07
CisgICAgYm9vbCBtX2V4cGVjdGVkV2ViUHJvY2Vzc0NyYXNoIHsgZmFsc2UgfTsKIAogcHJpdmF0
ZToKICAgICB2b2lkIGRvTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUsIGludCwgaW50LCB1
bnNpZ25lZCwgdW5zaWduZWQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299429</attachid>
            <date>2017-01-21 02:16:15 -0800</date>
            <delta_ts>2017-01-22 17:46:28 -0800</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-website-data.diff</filename>
            <type>text/plain</type>
            <size>87626</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzYmFjN2EwMTMyZC4uMDliOTVjMzRkNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw0NCBAQAogMjAxNy0wMS0yMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKKyAgICAgICAgW0dUS10gQWRkIEFQSSB0byBXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIgdG8gaGFuZGxlIHdlYnNpdGUgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2NTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYktpdFdlYnNpdGVEYXRhIGJveGVkIHR5cGUgdG8g
d3JhcCBhIFdlYnNpdGVEYXRhUmVjb3JkIGFuZCBuZXcgbWV0aG9kcyB0byBXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIgdG8KKyAgICAgICAgZmV0Y2gsIHJlbW92ZSBhbmQgY2xlYXIgd2Vic2l0ZSBk
YXRhLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZCBuZXcgZmlsZXMgdG8gY29t
cGlsYXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRXZWJzaXRlRGF0YTo6X1dlYktpdFdlYnNpdGVE
YXRhKToKKyAgICAgICAgKHJlY29yZENvbnRhaW5zU3VwcG9ydGVkRGF0YVR5cGVzKTogSGVscGVy
IGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBXZWJzaXRlRGF0YVJlY29yZCBjb250YWlucyBhbnkg
dHlwZSBleHBvc2VkCisgICAgICAgIGJ5IG91ciBBUEkuCisgICAgICAgICh0b1dlYktpdFdlYnNp
dGVEYXRhVHlwZXMpOiBDb252ZXJ0IGZyb20gV2ViS2l0OjpXZWJzaXRlRGF0YVR5cGUgdG8gdGhl
IEdUSysgcHVibGljIEFQSSB0eXBlcy4KKyAgICAgICAgKHdlYmtpdFdlYnNpdGVEYXRhQ3JlYXRl
KTogQ3JlYXRlIGEgbmV3IFdlYktpdFdlYnNpdGVEYXRhIGZvciB0aGUgZ2l2ZW4gV2Vic2l0ZURh
dGFSZWNvcmQgaWYgaXQgY29udGFpbnMgYW55CisgICAgICAgIHN1cHBvcnRlZCB0eXBlLgorICAg
ICAgICAod2Via2l0V2Vic2l0ZURhdGFHZXRSZWNvcmQpOiBSZXR1cm5zIHRoZSB3cmFwcGVkIFdl
YnNpdGVEYXRhUmVjb3JkLgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9yZWYpOgorICAg
ICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV91bnJlZik6CisgICAgICAgICh3ZWJraXRfd2Vic2l0
ZV9kYXRhX2dldF9uYW1lKTogUmV0dXJuIHRoZSBkaXNwbGF5IG5hbWUuCisgICAgICAgICh3ZWJr
aXRfd2Vic2l0ZV9kYXRhX2dldF90eXBlcyk6IFJldHVybnMgdGhlIG1hc2sgb2YgdHlwZXMuCisg
ICAgICAgICh3ZWJraXRfd2Vic2l0ZV9kYXRhX2dldF9zaXplKTogUmV0dXJucyB0aGUgc2l6ZSBm
b3IgdGhlIGdpdmVuIHR5cGVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YnNpdGVEYXRhLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YnNpdGVEYXRhTWFuYWdlci5jcHA6CisgICAgICAgICh0b1dlYnNpdGVEYXRhVHlwZXMpOiBDb252
ZXJ0IGZyb20gR1RLKyBwdWJsaWMgQVBJIHR5cGVzIHRvIFdlYktpdDo6V2Vic2l0ZURhdGFUeXBl
LgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoKTogRmV0Y2ggd2Vi
c2l0ZSBkYXRhIG9mIHRoZSBnaXZlbiB0eXBlcy4KKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9mZXRjaF9maW5pc2gpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX3JlbW92ZSk6IFJlbW92ZSB0aGUgd2Vic2l0ZSBkYXRhIG9mIHRoZSBnaXZlbiB0eXBl
cyBmb3IgdGhlIGdpdmVuIFdlYktpdFdlYnNpdGVEYXRhIGxpc3QuCisgICAgICAgICh3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfcmVtb3ZlX2ZpbmlzaCk6CisgICAgICAgICh3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfY2xlYXIpOiBDbGVhciBhbGwgd2Vic2l0ZSBkYXRhIG9mIHRoZSBn
aXZlbiB0eXBlcyBtb2RpZmllZCBzaW5jZSB0aGUgZ2l2ZW4gdGltZSBzcGFuLgorICAgICAgICAo
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX2ZpbmlzaCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFQcml2YXRlLmg6IEFkZGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0OiBB
ZGQgbmV3IHN5bWJvbHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLWRvY3Muc2dtbDogQWRkIG5ldyBzZWN0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDIuaDogSW5sY3VkZSBXZWJLaXRXZWJzaXRlRGF0YS5oCisKKzIwMTctMDEtMjEg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMTEwMTIuCiAKICAgICAgICAgSXQgY2F1c2VkIGEgbG90
IG9mIGNyYXNoZXMgaW4gdGhlIG5ldHdvcmsgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFr
ZQppbmRleCA1MTU0MTE3MTk2Ny4uNzU1YzJiYTVkMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNt
YWtlCkBAIC0yNzAsNiArMjcwLDkgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1Nlc3Npb25TdGF0ZS5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3U2Vzc2lvblN0YXRlLmgKICAgICBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3U2Vzc2lvblN0YXRlUHJpdmF0ZS5oCisgICAgVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2Vic2l0ZURhdGEuaAorICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRh
UHJpdmF0ZS5oCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oCiAg
ICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCkBA
IC01NTQsNiArNTU3LDcgQEAgc2V0KFdlYktpdDJHVEtfSU5TVEFMTEVEX0hFQURFUlMKICAgICAk
e1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKICAgICAke1dF
QktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5oCiAgICAgJHtX
RUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1Nlc3Npb25TdGF0ZS5o
CisgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEu
aAogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRh
TWFuYWdlci5oCiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2lu
ZG93UHJvcGVydGllcy5oCiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mi5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJzaXRlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJzaXRlRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmYxZTYzN2M3YTA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuY3BwCkBAIC0wLDAgKzEsMjI4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRXZWJzaXRlRGF0YS5oIgorCisjaW5jbHVkZSAiV2ViS2l0U2VjdXJpdHlPcmln
aW5Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFQcml2YXRlLmgiCisjaW5j
bHVkZSA8Z2xpYi9naTE4bi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVGFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogU0VD
VElPTjogV2ViS2l0V2Vic2l0ZURhdGEKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogV2Vic2l0ZSBk
YXRhCisgKiBAVGl0bGU6IFdlYktpdFdlYnNpdGVEYXRhCisgKiBAU2VlX2Fsc286ICNXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIKKyAqCisgKiBXZWJLaXRXZWJzaXRlRGF0YSByZXByZXNlbnRzIGRh
dGEgc3RvcmVkIGluIHRoZSBjbGllbnQgYnkgYSBwYXJ0aWN1bGFyIHdlYnNpdGUuCisgKiBBIHdl
YnNpdGUgaXMgbm9ybWFsbHkgYSBzZXQgb2YgVVJMcyBncm91cGVkIGJ5IGRvbWFpbiBuYW1lIHVz
aW5nIHRoZSBwdWJsaWMgc3VmZml4IGxpc3QuCisgKiBZb3UgY2FuIGdlIHRoZSB3ZWJzaXRlIG5h
bWUsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGRvbWFpbiwgd2l0aCB3ZWJraXRfd2Vic2l0ZV9kYXRh
X2dldF9uYW1lKCkuCisgKiBEb2N1bWVudHMgbG9hZGVkIGZyb20gdGhlIGZpbGUgc3lzdGVtLCBs
aWtlIGZpbGU6Ly8gVVJJcywgYXJlIGFsbCBncm91cGVkIGluIHRoZSBzYW1lIFdlYktpdFdlYnNp
dGVEYXRhCisgKiB3aXRoIHRoZSBuYW1lICJMb2NhbCBmaWxlcyIuCisgKiBBIHdlYnNpdGUgY2Fu
IHN0b3JlIGRpZmZlcmVudCB0eXBlcyBvZiBkYXRhIGluIHRoZSBjbGllbnQgc2lkZS4gI1dlYktp
dFdlYnNpdGVEYXRhVHlwZXMgaXMgYW4gZW51bSBjb250YWluaW5nCisgKiBhbGwgdGhlIHBvc3Np
YmxlIGRhdGEgdHlwZXMsIHVzZSB3ZWJraXRfd2Vic2l0ZV9kYXRhX2dldF90eXBlcygpIHRvIGdl
dCB0aGUgYml0bWFzayBvZiBkYXRhIHR5cGVzLgorICogSXQncyBhbHNvIHBvc3NpYmxlIHRvIGtu
b3cgdGhlIHNpemUgb2YgdGhlIGRhdGEgc3RvcmVkIGZvciBzb21lIG9mIHRoZSAjV2ViS2l0V2Vi
c2l0ZURhdGFUeXBlcyBieSB1c2luZworICogd2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfc2l6ZSgp
LgorICoKKyAqIEEgbGlzdCBvZiBXZWJLaXRXZWJzaXRlRGF0YSBjYW4gYmUgcmV0cmlldmVkIHdp
dGggd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoKCkuIFNlZSAjV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyCisgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBTaW5jZTogMi4x
NgorICovCitzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhIHsKKyAgICBleHBsaWNpdCBfV2ViS2l0
V2Vic2l0ZURhdGEoV2Vic2l0ZURhdGFSZWNvcmQmJiB3ZWJzaXRlRGF0YURlY29yZCkKKyAgICAg
ICAgOiByZWNvcmQoV1RGTW92ZSh3ZWJzaXRlRGF0YURlY29yZCkpCisgICAgeworICAgIH0KKwor
ICAgIFdlYnNpdGVEYXRhUmVjb3JkIHJlY29yZDsKKyAgICBDU3RyaW5nIGRpc3BsYXlOYW1lOwor
ICAgIGludCByZWZlcmVuY2VDb3VudCB7IDEgfTsKK307CisKK0dfREVGSU5FX0JPWEVEX1RZUEUo
V2ViS2l0V2Vic2l0ZURhdGEsIHdlYmtpdF93ZWJzaXRlX2RhdGEsIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfcmVmLCB3ZWJraXRfd2Vic2l0ZV9kYXRhX3VucmVmKQorCitzdGF0aWMgYm9vbCByZWNvcmRD
b250YWluc1N1cHBvcnRlZERhdGFUeXBlcyhjb25zdCBXZWJzaXRlRGF0YVJlY29yZCYgcmVjb3Jk
KQoreworICAgIHN0YXRpYyBjb25zdCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlc1N1
cHBvcnRlZCA9IHsKKyAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZSwKKyAgICAg
ICAgV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUsCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6
T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUsCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6U2Vz
c2lvblN0b3JhZ2UsCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlLAorICAg
ICAgICBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcywKKyAgICAgICAgV2Vic2l0ZURh
dGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMsCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6UGx1
Z0luRGF0YQorICAgIH07CisgICAgcmV0dXJuIHJlY29yZC50eXBlcy5jb250YWlucyh0eXBlc1N1
cHBvcnRlZCk7Cit9CisKK3N0YXRpYyBXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIHRvV2ViS2l0V2Vi
c2l0ZURhdGFUeXBlcyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKK3sKKyAgICB1
aW50MzJfdCByZXR1cm5WYWx1ZSA9IDA7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6TWVtb3J5Q2FjaGUpKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VC
U0lURV9EQVRBX01FTU9SWV9DQUNIRTsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpEaXNrQ2FjaGUpKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lU
RV9EQVRBX0RJU0tfQ0FDSEU7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUpKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBX
RUJLSVRfV0VCU0lURV9EQVRBX09GRkxJTkVfQVBQTElDQVRJT05fQ0FDSEU7CisgICAgaWYgKHR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpKQorICAgICAgICBy
ZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRBX1NFU1NJT05fU1RPUkFHRTsKKyAgICBp
ZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKQorICAgICAg
ICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRBX0xPQ0FMX1NUT1JBR0U7CisgICAg
aWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzKSkKKyAg
ICAgICAgcmV0dXJuVmFsdWUgfD0gV0VCS0lUX1dFQlNJVEVfREFUQV9XRUJTUUxfREFUQUJBU0VT
OworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFi
YXNlcykpCisgICAgICAgIHJldHVyblZhbHVlIHw9IFdFQktJVF9XRUJTSVRFX0RBVEFfSU5ERVhF
RERCX0RBVEFCQVNFUzsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpQ
bHVnSW5EYXRhKSkKKyAgICAgICAgcmV0dXJuVmFsdWUgfD0gV0VCS0lUX1dFQlNJVEVfREFUQV9Q
TFVHSU5fREFUQTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGFUeXBl
cz4ocmV0dXJuVmFsdWUpOworfQorCitXZWJLaXRXZWJzaXRlRGF0YSogd2Via2l0V2Vic2l0ZURh
dGFDcmVhdGUoV2Vic2l0ZURhdGFSZWNvcmQmJiByZWNvcmQpCit7CisgICAgaWYgKCFyZWNvcmRD
b250YWluc1N1cHBvcnRlZERhdGFUeXBlcyhyZWNvcmQpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIFdlYktpdFdlYnNpdGVEYXRhKiB3ZWJzaXRlRGF0YSA9IHN0YXRpY19jYXN0PFdl
YktpdFdlYnNpdGVEYXRhKj4oZmFzdE1hbGxvYyhzaXplb2YoV2ViS2l0V2Vic2l0ZURhdGEpKSk7
CisgICAgbmV3ICh3ZWJzaXRlRGF0YSkgV2ViS2l0V2Vic2l0ZURhdGEoV1RGTW92ZShyZWNvcmQp
KTsKKyAgICByZXR1cm4gd2Vic2l0ZURhdGE7Cit9CisKK2NvbnN0IFdlYktpdDo6V2Vic2l0ZURh
dGFSZWNvcmQmIHdlYmtpdFdlYnNpdGVEYXRhR2V0UmVjb3JkKFdlYktpdFdlYnNpdGVEYXRhKiB3
ZWJzaXRlRGF0YSkKK3sKKyAgICBBU1NFUlQod2Vic2l0ZURhdGEpOworICAgIHJldHVybiB3ZWJz
aXRlRGF0YS0+cmVjb3JkOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfcmVmOgor
ICogQHdlYnNpdGVfZGF0YTogYSAjV2ViS2l0V2Vic2l0ZURhdGEKKyAqCisgKiBBdG9taWNhbGx5
IGluY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBAd2Vic2l0ZV9kYXRhIGJ5IG9uZS4K
KyAqIFRoaXMgZnVuY3Rpb24gaXMgTVQtc2FmZSBhbmQgbWF5IGJlIGNhbGxlZCBmcm9tIGFueSB0
aHJlYWQuCisgKgorICogUmV0dXJuczogVGhlIHBhc3NlZCAjV2ViS2l0V2Vic2l0ZURhdGEKKyAq
CisgKiBTaW5jZTogMi4xNgorICovCitXZWJLaXRXZWJzaXRlRGF0YSogd2Via2l0X3dlYnNpdGVf
ZGF0YV9yZWYoV2ViS2l0V2Vic2l0ZURhdGEqIHdlYnNpdGVEYXRhKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHdlYnNpdGVEYXRhLCBudWxscHRyKTsKKworICAgIGdfYXRvbWljX2ludF9p
bmMoJndlYnNpdGVEYXRhLT5yZWZlcmVuY2VDb3VudCk7CisgICAgcmV0dXJuIHdlYnNpdGVEYXRh
OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfdW5yZWY6CisgKiBAd2Vic2l0ZV9k
YXRhOiBBICNXZWJLaXRXZWJzaXRlRGF0YQorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyB0
aGUgcmVmZXJlbmNlIGNvdW50IG9mIEB3ZWJzaXRlX2RhdGEgYnkgb25lLgorICogSWYgdGhlIHJl
ZmVyZW5jZSBjb3VudCBkcm9wcyB0byAwLCBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieQorICogI1dl
YktpdFdlYnNpdGVEYXRhIGlzIHJlbGVhc2VkLiBUaGlzIGZ1bmN0aW9uIGlzIE1ULXNhZmUgYW5k
IG1heSBiZQorICogY2FsbGVkIGZyb20gYW55IHRocmVhZC4KKyAqCisgKiBTaW5jZTogMi4xNgor
ICovCit2b2lkIHdlYmtpdF93ZWJzaXRlX2RhdGFfdW5yZWYoV2ViS2l0V2Vic2l0ZURhdGEqIHdl
YnNpdGVEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwod2Vic2l0ZURhdGEpOworCisgICAg
aWYgKGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QoJndlYnNpdGVEYXRhLT5yZWZlcmVuY2VDb3Vu
dCkpIHsKKyAgICAgICAgd2Vic2l0ZURhdGEtPn5XZWJLaXRXZWJzaXRlRGF0YSgpOworICAgICAg
ICBmYXN0RnJlZSh3ZWJzaXRlRGF0YSk7CisgICAgfQorfQorCisvKioKKyAqIHdlYmtpdF93ZWJz
aXRlX2RhdGFfZ2V0X25hbWU6CisgKiBAd2Vic2l0ZV9kYXRhOiBhICNXZWJLaXRXZWJzaXRlRGF0
YQorICoKKyAqIEdldHMgdGhlIG5hbWUgb2YgI1dlYktpdFdlYnNpdGVEYXRhLiBUaGlzIGlzIHRo
ZSB3ZWJzaXRlIG5hbWUsIG5vcm1hbGx5IHJlcHJlc2VudGVkIGJ5CisgKiBhIGRvbWFpbiBvciBo
b3N0IG5hbWUuIEFsbCBsb2NhbCBkb2N1bWVudHMgYXJlIGdyb3VwZWQgaW4gdGhlIHNhbWUgI1dl
YktpdFdlYnNpdGVEYXRhIHVzaW5nCisgKiB0aGUgbmFtZSAiTG9jYWwgZmlsZXMiLgorICoKKyAq
IFJldHVybnM6IHRoZSB3ZWJzaXRlIG5hbWUgb2YgQHdlYnNpdGVfZGF0YS4KKyAqCisgKiBTaW5j
ZTogMi4xNgorICovCitjb25zdCBjaGFyKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX2dldF9uYW1lKFdl
YktpdFdlYnNpdGVEYXRhKiB3ZWJzaXRlRGF0YSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bCh3ZWJzaXRlRGF0YSwgbnVsbHB0cik7CisKKyAgICBpZiAod2Vic2l0ZURhdGEtPmRpc3BsYXlO
YW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGlmICh3ZWJzaXRlRGF0YS0+cmVjb3JkLmRpc3BsYXlO
YW1lID09ICJMb2NhbCBkb2N1bWVudHMgb24geW91ciBjb21wdXRlciIpCisgICAgICAgICAgICB3
ZWJzaXRlRGF0YS0+ZGlzcGxheU5hbWUgPSBfKCJMb2NhbCBmaWxlcyIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS0+ZGlzcGxheU5hbWUgPSB3ZWJzaXRlRGF0YS0+cmVj
b3JkLmRpc3BsYXlOYW1lLnV0ZjgoKTsKKyAgICB9CisgICAgcmV0dXJuIHdlYnNpdGVEYXRhLT5k
aXNwbGF5TmFtZS5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9nZXRf
dHlwZXM6CisgKiBAd2Vic2l0ZV9kYXRhOiBhICNXZWJLaXRXZWJzaXRlRGF0YQorICoKKyAqIEdl
dHMgdGhlIHR5cGVzIG9mIGRhdGEgc3RvcmVkIGluIHRoZSBjbGllbnQgZm9yIGEgI1dlYktpdFdl
YnNpdGVEYXRhLiBUaGVzZSBhcmUgdGhlCisgKiB0eXBlcyBhY3R1YWxseSBmb3VuZCwgbm90IHRo
ZSB0eXBlcyBxdWVyaWVkIHdpdGggd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoKCku
CisgKgorICogUmV0dXJuczogYSBiaXRtYXNrIG9mICNXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIGlu
IEB3ZWJzaXRlX2RhdGEKKyAqCisgKiBTaW5jZTogMi4xNgorICovCitXZWJLaXRXZWJzaXRlRGF0
YVR5cGVzIHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3R5cGVzKFdlYktpdFdlYnNpdGVEYXRhKiB3
ZWJzaXRlRGF0YSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh3ZWJzaXRlRGF0YSwgc3Rh
dGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGFUeXBlcz4oMCkpOworCisgICAgcmV0dXJuIHRvV2Vi
S2l0V2Vic2l0ZURhdGFUeXBlcyh3ZWJzaXRlRGF0YS0+cmVjb3JkLnR5cGVzKTsKK30KKworLyoq
CisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX2dldF9zaXplOgorICogQHdlYnNpdGVfZGF0YTogYSAj
V2ViS2l0V2Vic2l0ZURhdGEKKyAqIEB0eXBlczogYSBiaXRtYXNrICBvZiAjV2ViS2l0V2Vic2l0
ZURhdGFUeXBlcworICoKKyAqIEdldHMgdGhlIHNpemUgb2YgdGhlIGRhdGEgb2YgdHlwZXMgQHR5
cGVzIGluIGEgI1dlYktpdFdlYnNpdGVEYXRhLgorICogTm90ZSB0aGF0IGN1cnJlbnRseSB0aGUg
ZGF0YSBzaXplIGlzIG9ubHkga25vd24gZm9yICVXRUJLSVRfV0VCU0lURV9EQVRBX0RJU0tfQ0FD
SEUgZGF0YSB0eXBlCisgKiBzbyBmb3IgYWxsIG90aGVyIHR5cGVzIDAgd2lsbCBiZSByZXR1cm5l
ZC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgc2l6ZSBvZiBAd2Vic2l0ZV9kYXRhIGZvciB0aGUgZ2l2
ZW4gQHR5cGVzLgorICoKKyAqIFNpbmNlOiAyLjE2CisgKi8KK2d1aW50NjQgd2Via2l0X3dlYnNp
dGVfZGF0YV9nZXRfc2l6ZShXZWJLaXRXZWJzaXRlRGF0YSogd2Vic2l0ZURhdGEsIFdlYktpdFdl
YnNpdGVEYXRhVHlwZXMgdHlwZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwod2Vic2l0
ZURhdGEsIDApOworCisgICAgaWYgKCF0eXBlcyB8fCAhd2Vic2l0ZURhdGEtPnJlY29yZC5zaXpl
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGd1aW50NjQgdG90YWxTaXplID0gMDsKKyAgICBm
b3IgKGF1dG8gdHlwZSA6IHdlYnNpdGVEYXRhLT5yZWNvcmQuc2l6ZS0+dHlwZVNpemVzLmtleXMo
KSkgeworICAgICAgICBpZiAodHlwZSAmIHR5cGVzKQorICAgICAgICAgICAgdG90YWxTaXplICs9
IHdlYnNpdGVEYXRhLT5yZWNvcmQuc2l6ZS0+dHlwZVNpemVzLmdldCh0eXBlKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdG90YWxTaXplOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjVlOGI2Yzg3ZDRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaApAQCAtMCwwICsxLDg1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNl
cnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRXZWJzaXRlRGF0YV9oCisjZGVmaW5lIFdlYktpdFdl
YnNpdGVEYXRhX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQ
RV9XRUJTSVRFX0RBVEEgKHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3R5cGUoKSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhIFdlYktpdFdlYnNpdGVEYXRhOworCisvKioKKyAq
IFdlYktpdFdlYnNpdGVEYXRhVHlwZXM6CisgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9NRU1PUllf
Q0FDSEU6IE1lbW9yeSBjYWNoZS4KKyAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0RJU0tfQ0FDSEU6
IEhUVFAgZGlzayBjYWNoZS4KKyAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX09GRkxJTkVfQVBQTElD
QVRJT05fQ0FDSEU6IE9mZmxpbmUgd2ViIGFwcGxpY2F0aW9uIGNhY2hlLgorICogQFdFQktJVF9X
RUJTSVRFX0RBVEFfU0VTU0lPTl9TVE9SQUdFOiBTZXNzaW9uIHN0b3JhZ2UgZGF0YS4KKyAqIEBX
RUJLSVRfV0VCU0lURV9EQVRBX0xPQ0FMX1NUT1JBR0U6IExvY2FsIHN0b3JhZ2UgZGF0YS4KKyAq
IEBXRUJLSVRfV0VCU0lURV9EQVRBX1dFQlNRTF9EQVRBQkFTRVM6IFdlYlNRTCBkYXRhYmFzZXMu
CisgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTOiBJbmRleGVkREIg
ZGF0YWJhc2VzLgorICogQFdFQktJVF9XRUJTSVRFX0RBVEFfUExVR0lOX0RBVEE6IFBsdWdpbnMg
ZGF0YS4KKyAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTDogQWxsIHR5cGVzLgorICoKKyAqIEVu
dW0gdmFsdWVzIHdpdGggZmxhZ3MgcmVwcmVzZW50aW5nIHR5cGVzIG9mIFdlYnNpdGUgZGF0YS4K
KyAqCisgKiBTaW5jZTogMi4xNgorICovCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9XRUJT
SVRFX0RBVEFfTUVNT1JZX0NBQ0hFICAgICAgICAgICAgICA9IDEgPDwgMCwKKyAgICBXRUJLSVRf
V0VCU0lURV9EQVRBX0RJU0tfQ0FDSEUgICAgICAgICAgICAgICAgPSAxIDw8IDEsCisgICAgV0VC
S0lUX1dFQlNJVEVfREFUQV9PRkZMSU5FX0FQUExJQ0FUSU9OX0NBQ0hFID0gMSA8PCAyLAorICAg
IFdFQktJVF9XRUJTSVRFX0RBVEFfU0VTU0lPTl9TVE9SQUdFICAgICAgICAgICA9IDEgPDwgMywK
KyAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0xPQ0FMX1NUT1JBR0UgICAgICAgICAgICAgPSAxIDw8
IDQsCisgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9XRUJTUUxfREFUQUJBU0VTICAgICAgICAgID0g
MSA8PCA1LAorICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfSU5ERVhFRERCX0RBVEFCQVNFUyAgICAg
ICA9IDEgPDwgNiwKKyAgICBXRUJLSVRfV0VCU0lURV9EQVRBX1BMVUdJTl9EQVRBICAgICAgICAg
ICAgICAgPSAxIDw8IDcsCisgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwgICAgICAgICAgICAg
ICAgICAgICAgID0gKDEgPDwgOCkgLSAxCit9IFdlYktpdFdlYnNpdGVEYXRhVHlwZXM7CisKK1dF
QktJVF9BUEkgR1R5cGUKK3dlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3R5cGUgICAgICAodm9pZCk7
CisKK1dFQktJVF9BUEkgV2ViS2l0V2Vic2l0ZURhdGEgKgord2Via2l0X3dlYnNpdGVfZGF0YV9y
ZWYgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YSAgICAgKndlYnNpdGVfZGF0YSk7CisKK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X3dlYnNpdGVfZGF0YV91bnJlZiAgICAgICAgIChXZWJLaXRX
ZWJzaXRlRGF0YSAgICAgKndlYnNpdGVfZGF0YSk7CisKK1dFQktJVF9BUEkgY29uc3QgY2hhciAq
Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX2dldF9uYW1lICAgICAgKFdlYktpdFdlYnNpdGVEYXRhICAg
ICAqd2Vic2l0ZV9kYXRhKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YVR5cGVzCit3
ZWJraXRfd2Vic2l0ZV9kYXRhX2dldF90eXBlcyAgICAgKFdlYktpdFdlYnNpdGVEYXRhICAgICAq
d2Vic2l0ZV9kYXRhKTsKKworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfd2Vic2l0ZV9kYXRh
X2dldF9zaXplICAgICAgKFdlYktpdFdlYnNpdGVEYXRhICAgICAqd2Vic2l0ZV9kYXRhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIHR5
cGVzKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdFdlYnNpdGVEYXRhX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNp
dGVEYXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCmluZGV4IDFjMzU1MjQ1NTkzLi41NjZlMjA2NGIyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCkBAIC0yMiw2ICsyMiw4IEBACiAKICNpbmNsdWRl
ICJBUElXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYnNpdGVEYXRhUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYnNpdGVEYXRhRmV0Y2hPcHRpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVT
eXN0ZW0uaD4KICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUgPHd0Zi9nbGli
L0dVbmlxdWVQdHIuaD4KQEAgLTMyLDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
ICAqIFNFQ1RJT046IFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgogICogQFNob3J0X2Rlc2NyaXB0
aW9uOiBXZWJzaXRlIGRhdGEgbWFuYWdlcgogICogQFRpdGxlOiBXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIKLSAqIEBTZWVfYWxzbzogI1dlYktpdFdlYkNvbnRleHQKKyAqIEBTZWVfYWxzbzogI1dl
YktpdFdlYkNvbnRleHQsICNXZWJLaXRXZWJzaXRlRGF0YQogICoKICAqIFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlciBhbGxvd3MgeW91IHRvIG1hbmFnZSB0aGUgZGF0YSB0aGF0IHdlYnNpdGVzCiAg
KiBjYW4gc3RvcmUgaW4gdGhlIGNsaWVudCBmaWxlIHN5c3RlbSBsaWtlIGRhdGFiYXNlcyBvciBj
YWNoZXMuCkBAIC01NCw2ICs1NiwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogICogd2l0
aCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLiBUbyBnZXQgdGhlIFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciBvZiBhICNXZWJLaXRXZWJDb250ZXh0CiAgKiB5b3UgY2FuIHVzZSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKCkuCiAgKgorICogV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyIGNhbiBhbHNvIGJlIHVzZWQgdG8gZmV0Y2ggd2Vic2l0ZXMgZGF0YSwgcmVt
b3ZlIGRhdGEKKyAqIHN0b3JlZCBieSBwYXJ0aWN1bGFyIHdlYnNpdGVzLCBvciBjbGVhciBkYXRh
IGZvciBhbGwgd2Vic2l0ZXMgbW9kaWZpZWQgc2luY2UgYSBnaXZlbgorICogcGVyaW9kIG9mIHRp
bWUuCisgKgogICogU2luY2U6IDIuMTAKICAqLwogCkBAIC00ODMsMyArNDg5LDE4OCBAQCBjb25z
dCBnY2hhciogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5
KFdlYktpdFdlYnNpdGVEYXRhTQogICAgICAgICBwcml2LT53ZWJTUUxEaXJlY3RvcnkucmVzZXQo
Z19zdHJkdXAoQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJl
Y3RvcnkoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgcmV0dXJuIHByaXYtPndlYlNRTERpcmVjdG9y
eS5nZXQoKTsKIH0KKworc3RhdGljIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHRvV2Vic2l0
ZURhdGFUeXBlcyhXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIHR5cGVzKQoreworICAgIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IHJldHVyblZhbHVlOworICAgIGlmICh0eXBlcyAmIFdFQktJVF9X
RUJTSVRFX0RBVEFfTUVNT1JZX0NBQ0hFKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXZWJzaXRl
RGF0YVR5cGU6Ok1lbW9yeUNhY2hlOworICAgIGlmICh0eXBlcyAmIFdFQktJVF9XRUJTSVRFX0RB
VEFfRElTS19DQUNIRSkKKyAgICAgICAgcmV0dXJuVmFsdWUgfD0gV2Vic2l0ZURhdGFUeXBlOjpE
aXNrQ2FjaGU7CisgICAgaWYgKHR5cGVzICYgV0VCS0lUX1dFQlNJVEVfREFUQV9PRkZMSU5FX0FQ
UExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXZWJzaXRlRGF0YVR5cGU6
Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlOworICAgIGlmICh0eXBlcyAmIFdFQktJVF9XRUJT
SVRFX0RBVEFfU0VTU0lPTl9TVE9SQUdFKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXZWJzaXRl
RGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlOworICAgIGlmICh0eXBlcyAmIFdFQktJVF9XRUJTSVRF
X0RBVEFfTE9DQUxfU1RPUkFHRSkKKyAgICAgICAgcmV0dXJuVmFsdWUgfD0gV2Vic2l0ZURhdGFU
eXBlOjpMb2NhbFN0b3JhZ2U7CisgICAgaWYgKHR5cGVzICYgV0VCS0lUX1dFQlNJVEVfREFUQV9X
RUJTUUxfREFUQUJBU0VTKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXZWJzaXRlRGF0YVR5cGU6
OldlYlNRTERhdGFiYXNlczsKKyAgICBpZiAodHlwZXMgJiBXRUJLSVRfV0VCU0lURV9EQVRBX0lO
REVYRUREQl9EQVRBQkFTRVMpCisgICAgICAgIHJldHVyblZhbHVlIHw9IFdlYnNpdGVEYXRhVHlw
ZTo6SW5kZXhlZERCRGF0YWJhc2VzOworICAgIGlmICh0eXBlcyAmIFdFQktJVF9XRUJTSVRFX0RB
VEFfUExVR0lOX0RBVEEpCisgICAgICAgIHJldHVyblZhbHVlIHw9IFdlYnNpdGVEYXRhVHlwZTo6
UGx1Z0luRGF0YTsKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKKy8qKgorICogd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoOgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNp
dGVEYXRhTWFuYWdlcgorICogQHR5cGVzOiAjV2ViS2l0V2Vic2l0ZURhdGFUeXBlcworICogQGNh
bmNlbGxhYmxlOiAoYWxsb3ctbm9uZSk6IGEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTCB0byBpZ25v
cmUKKyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0
byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiAoY2xv
c3VyZSk6IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3lu
Y2hyb25vdXNseSBnZXQgdGhlIGxpc3Qgb2YgI1dlYktpdFdlYnNpdGVEYXRhIGZvciB0aGUgZ2l2
ZW4gQHR5cGVzLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxi
YWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2ZldGNoX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVy
YXRpb24uCisgKgorICogU2luY2U6IDIuMTYKKyAqLwordm9pZCB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZmV0Y2goV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJLaXRX
ZWJzaXRlRGF0YVR5cGVzIHR5cGVzLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNS
ZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSk7CisKKyAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworICAgIG1hbmFnZXItPnByaXYtPndlYnNp
dGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5mZXRjaERhdGEodG9XZWJzaXRlRGF0YVR5
cGVzKHR5cGVzKSwgV2Vic2l0ZURhdGFGZXRjaE9wdGlvbjo6Q29tcHV0ZVNpemVzLCBbdGFzayA9
IFdURk1vdmUodGFzayldIChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+IHJlY29yZHMpIHsKKyAg
ICAgICAgR0xpc3QqIGRhdGFMaXN0ID0gbnVsbHB0cjsKKyAgICAgICAgd2hpbGUgKCFyZWNvcmRz
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGRhdGEgPSB3ZWJraXRXZWJzaXRl
RGF0YUNyZWF0ZShyZWNvcmRzLnRha2VMYXN0KCkpKQorICAgICAgICAgICAgICAgIGRhdGFMaXN0
ID0gZ19saXN0X3ByZXBlbmQoZGF0YUxpc3QsIGRhdGEpOworICAgICAgICB9CisKKyAgICAgICAg
Z190YXNrX3JldHVybl9wb2ludGVyKHRhc2suZ2V0KCksIGRhdGFMaXN0LCBbXShncG9pbnRlciBk
YXRhKSB7CisgICAgICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKHN0YXRpY19jYXN0PEdMaXN0Kj4o
ZGF0YSksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KHdlYmtpdF93ZWJzaXRlX2Rh
dGFfdW5yZWYpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKKy8qKgorICogd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoX2ZpbmlzaDoKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVycm9y
OiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAqIEZp
bmlzaCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfZmV0Y2goKS4KKyAqCisgKiBSZXR1cm5zOiAoZWxlbWVudC10eXBlIFdl
YktpdFdlYnNpdGVEYXRhKSAodHJhbnNmZXIgZnVsbCk6IGEgI0dMaXN0IG9mICNXZWJLaXRXZWJz
aXRlRGF0YS4gWW91IG11c3QgZnJlZSB0aGUgI0dMaXN0IHdpdGgKKyAqICAgIGdfbGlzdF9mcmVl
KCkgYW5kIHVucmVmIHRoZSAjV2ViS2l0V2Vic2l0ZURhdGE8IS0tIC0tPnMgd2l0aCB3ZWJraXRf
d2Vic2l0ZV9kYXRhX3VucmVmKCkgd2hlbiB5b3UncmUgZG9uZSB3aXRoIHRoZW0uCisgKgorICog
U2luY2U6IDIuMTYKKyAqLworR0xpc3QqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9mZXRj
aF9maW5pc2goV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBHQXN5bmNSZXN1bHQq
IHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpLCBudWxscHRyKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgbnVsbHB0
cik7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpc3QqPihnX3Rhc2tfcHJvcGFnYXRlX3Bv
aW50ZXIoR19UQVNLKHJlc3VsdCksIGVycm9yKSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX3JlbW92ZToKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIKKyAqIEB0eXBlczogI1dlYktpdFdlYnNpdGVEYXRhVHlwZXMKKyAqIEB3ZWJzaXRl
X2RhdGE6IChlbGVtZW50LXR5cGUgV2ViS2l0V2Vic2l0ZURhdGEpOiBhICNHTGlzdCBvZiAjV2Vi
S2l0V2Vic2l0ZURhdGEKKyAqIEBjYW5jZWxsYWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2Vs
bGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEg
I0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmll
ZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNr
IGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgcmVtb3ZlcyB0aGUgd2Vic2l0ZSBkYXRh
IG9mIHRoZSBmb3IgdGhlIGdpdmVuIEB0eXBlcyBmb3Igd2Vic2l0ZXMgaW4gdGhlIGdpdmVuIEB3
ZWJzaXRlX2RhdGEgbGlzdC4KKyAqIFVzZSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xl
YXIoKSBpZiB5b3Ugd2FudCB0byByZW1vdmUgdGhlIHdlYnNpdGUgZGF0YSBmb3IgYWxsIHNpdGVz
LgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwg
YmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX3JlbW92ZV9maW5pc2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgor
ICoKKyAqIFNpbmNlOiAyLjE2CisgKi8KK3ZvaWQgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X3JlbW92ZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIsIFdlYktpdFdlYnNpdGVE
YXRhVHlwZXMgdHlwZXMsIEdMaXN0KiB3ZWJzaXRlRGF0YSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxs
YWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFu
YWdlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwod2Vic2l0ZURhdGEpOworCisgICAgVmVjdG9y
PFdlYnNpdGVEYXRhUmVjb3JkPiByZWNvcmRzOworICAgIGZvciAoR0xpc3QqIGl0ZW0gPSB3ZWJz
aXRlRGF0YTsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIFdlYktp
dFdlYnNpdGVEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGEqPihpdGVt
LT5kYXRhKTsKKworICAgICAgICBpZiAod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfdHlwZXMoZGF0
YSkgJiB0eXBlcykKKyAgICAgICAgICAgIHJlY29yZHMuYXBwZW5kKHdlYmtpdFdlYnNpdGVEYXRh
R2V0UmVjb3JkKGRhdGEpKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRv
cHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0
YSkpOworICAgIGlmIChyZWNvcmRzLmlzRW1wdHkoKSkgeworICAgICAgICBnX3Rhc2tfcmV0dXJu
X2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtYW5hZ2VyLT5wcml2LT53ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkucmVt
b3ZlRGF0YSh0b1dlYnNpdGVEYXRhVHlwZXModHlwZXMpLCByZWNvcmRzLCBbdGFzayA9IFdURk1v
dmUodGFzayldIHsKKyAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRS
VUUpOworICAgIH0pOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9y
ZW1vdmVfZmluaXNoOgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgor
ICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJldHVybiBsb2NhdGlvbiBm
b3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNoIGFuIGFzeW5jaHJvbm91
cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9yZW1v
dmUoKS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB3ZWJzaXRlIGRhdGEgcmVzb3VyY2VzIHdl
cmUgc3VjY2VzZnVsbHkgcmVtb3ZlZCwgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5j
ZTogMi4xNgorICovCitnYm9vbGVhbiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfcmVtb3Zl
X2ZpbmlzaChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIsIEdBc3luY1Jlc3VsdCog
cmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlciksIEZBTFNFKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgRkFMU0UpOwor
CisgICAgcmV0dXJuIGdfdGFza19wcm9wYWdhdGVfYm9vbGVhbihHX1RBU0socmVzdWx0KSwgZXJy
b3IpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcjoKKyAq
IEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEB0eXBlczogI1dlYktp
dFdlYnNpdGVEYXRhVHlwZXMKKyAqIEB0aW1lc3BhbjogYSAjR1RpbWVTcGFuCisgKiBAY2FuY2Vs
bGFibGU6IChhbGxvdy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQor
ICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNh
bGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJl
KTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJv
bm91c2x5IGNsZWFyIHRoZSB3ZWJzaXRlIGRhdGEgb2YgdGhlIGdpdmVuIEB0eXBlcyBtb2RpZmll
ZCBzaW5jZSB0aGUgZ2l2ZW4gQHRpbWVzcGFuLgorICogSWYgQHRpbWVzcGFuIGlzIDAgYWxsIHdl
YnNpdGUgZGF0YSB3aWxsIGJlIHJlbW92ZWQuCisgKgorICogV2hlbiB0aGUgb3BlcmF0aW9uIGlz
IGZpbmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhlbiBjYWxsCisg
KiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZmluaXNoKCkgdG8gZ2V0IHRoZSBy
ZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBTaW5jZTogMi4xNgorICovCit2b2lkIHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcihXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIq
IG1hbmFnZXIsIFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgdHlwZXMsIEdUaW1lU3BhbiB0aW1lU3Bh
biwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFj
aywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
V0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlcikpOworCisgICAgc3RkOjpjaHJvbm86OnN5c3Rl
bV9jbG9jazo6dGltZV9wb2ludCB0aW1lUG9pbnQgPSB0aW1lU3BhbiA/IHN0ZDo6Y2hyb25vOjpz
eXN0ZW1fY2xvY2s6Om5vdygpIC0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyh0aW1lU3Bhbikg
OiBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVfdCgwKTsKKyAgICBHUmVmUHRy
PEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUs
IGNhbGxiYWNrLCB1c2VyRGF0YSkpOworICAgIG1hbmFnZXItPnByaXYtPndlYnNpdGVEYXRhU3Rv
cmUtPndlYnNpdGVEYXRhU3RvcmUoKS5yZW1vdmVEYXRhKHRvV2Vic2l0ZURhdGFUeXBlcyh0eXBl
cyksIHRpbWVQb2ludCwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSB7CisgICAgICAgIGdfdGFza19y
ZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZmluaXNoOgorICogQG1hbmFnZXI6IGEg
I1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0Cisg
KiBAZXJyb3I6IHJldHVybiBsb2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisg
KgorICogRmluaXNoIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcigpCisgKgorICogUmV0dXJuczogJVRSVUUgaWYg
d2Vic2l0ZSBkYXRhIHdhcyBzdWNjZXNmdWxseSBjbGVhcmVkLCBvciAlRkFMU0Ugb3RoZXJ3aXNl
LgorICoKKyAqIFNpbmNlOiAyLjE2CisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9jbGVhcl9maW5pc2goV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBH
QXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpLCBGQUxTRSk7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3VsdCwgbWFuYWdl
ciksIEZBTFNFKTsKKworICAgIHJldHVybiBnX3Rhc2tfcHJvcGFnYXRlX2Jvb2xlYW4oR19UQVNL
KHJlc3VsdCksIGVycm9yKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmgKaW5kZXggZTlkODU5MThj
MDMuLjIxNjI0YWEzYzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaApAQCAtMjQsOCArMjQsOSBA
QAogI2lmbmRlZiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJfaAogI2RlZmluZSBXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXJfaAogCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxn
aW8vZ2lvLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXRXZWJzaXRlRGF0YS5oPgogCiBHX0JFR0lOX0RFQ0xTCiAKQEAgLTU2LDMx
ICs1Nyw2NyBAQCBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlckNsYXNzIHsKIH07CiAK
IFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdHlwZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOword2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lk
KTsKIAogV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKgotd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Y29uc3QgZ2NoYXIgICAgICAgICAgICAgICpmaXJzdF9vcHRpb25fbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC4uLik7Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGdjaGFyICAgICAgICAgICAgICAqZmlyc3Rfb3B0
aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiBXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoK
LXdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFzZV9kYXRhX2RpcmVjdG9yeSAgICAg
ICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7Cit3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfZGF0YV9kaXJlY3RvcnkgICAgICAgICAgICAg
ICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CiAKIFdFQktJVF9BUEkg
Y29uc3QgZ2NoYXIgKgotd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2NhY2hl
X2RpcmVjdG9yeSAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFu
YWdlcik7Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2FjaGVfZGlyZWN0
b3J5ICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7
CiAKIFdFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgotd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9yeSAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyICptYW5hZ2VyKTsKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9j
YWxfc3RvcmFnZV9kaXJlY3RvcnkgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyICptYW5hZ2VyKTsKIAogV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCi13ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5ICAgICAgICAgICAgICAgIChX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOword2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSAgICAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOwogCiBXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoK
LXdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9hcHBsaWNhdGlvbl9jYWNo
ZV9kaXJlY3RvcnkgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7Cit3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25fY2FjaGVfZGlyZWN0
b3J5ICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CiAKIFdFQktJVF9BUEkg
Y29uc3QgZ2NoYXIgKgotd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pbmRleGVkZGJf
ZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5h
Z2VyKTsKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRiX2RpcmVjdG9y
eSAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsK
IAogV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCi13ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Z2V0X3dlYnNxbF9kaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIgKm1hbmFnZXIpOword2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJz
cWxfZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIgKm1hbmFnZXIpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9mZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJzaXRlRGF0
YVR5cGVzICAgIHR5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAg
KmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgIGNh
bGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgIHVzZXJfZGF0
YSk7CisKK1dFQktJVF9BUEkgR0xpc3QgKgord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2Zl
dGNoX2ZpbmlzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAg
ICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAqKmVycm9y
KTsKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3JlbW92ZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIgKm1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgICAgdHlw
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMaXN0ICAgICAgICAgICAgICAgICAgICAqd2Vic2l0ZV9kYXRh
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgIGNhbGxiYWNrLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfcmVtb3ZlX2ZpbmlzaCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICpyZXN1bHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhciAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgICAgdHlwZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHVGltZVNwYW4gICAgICAgICAgICAgICAgIHRpbWVzcGFuLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9p
bnRlciAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9maW5pc2ggICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0Vycm9yICAgICAgICAgICAgICAgICAgKiplcnJvcik7CiAKIEdfRU5EX0RFQ0xTCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVE
YXRhUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
c2l0ZURhdGFQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjZiODdiMDNjZjkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFQcml2YXRlLmgKQEAgLTAsMCArMSwyNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJzaXRlRGF0YS5oIgorI2lu
Y2x1ZGUgIldlYnNpdGVEYXRhUmVjb3JkLmgiCisKK1dlYktpdFdlYnNpdGVEYXRhKiB3ZWJraXRX
ZWJzaXRlRGF0YUNyZWF0ZShXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkJiYpOworY29uc3QgV2Vi
S2l0OjpXZWJzaXRlRGF0YVJlY29yZCYgd2Via2l0V2Vic2l0ZURhdGFHZXRSZWNvcmQoV2ViS2l0
V2Vic2l0ZURhdGEqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKaW5kZXggYTM3
NGM2MzgwZWUuLjA1MzU0NTQyOGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4
dApAQCAtMTI0NCw2ICsxMjQ0LDEyIEBAIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
ZGlza19jYWNoZV9kaXJlY3RvcnkKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2Zm
bGluZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9nZXRfaW5kZXhlZGRiX2RpcmVjdG9yeQogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF93ZWJzcWxfZGlyZWN0b3J5Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2gK
K3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9mZXRjaF9maW5pc2gKK3dlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9yZW1vdmUKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9yZW1vdmVf
ZmluaXNoCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXIKK3dlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9jbGVhcl9maW5pc2gKIAogPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CiBXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXJDbGFzcwpAQCAtMTI2MCw2ICsxMjY2LDIzIEBAIHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdHlwZQogPC9TRUNUSU9OPgogCiA8U0VDVElPTj4KKzxG
SUxFPldlYktpdFdlYnNpdGVEYXRhPC9GSUxFPgorV2ViS2l0V2Vic2l0ZURhdGEKK1dlYktpdFdl
YnNpdGVEYXRhVHlwZXMKK3dlYmtpdF93ZWJzaXRlX2RhdGFfcmVmCit3ZWJraXRfd2Vic2l0ZV9k
YXRhX3VucmVmCit3ZWJraXRfd2Vic2l0ZV9kYXRhX2dldF9uYW1lCit3ZWJraXRfd2Vic2l0ZV9k
YXRhX2dldF90eXBlcword2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfc2l6ZQorCis8U1VCU0VDVElP
TiBTdGFuZGFyZD4KK1dFQktJVF9UWVBFX1dFQlNJVEVfREFUQQorCis8U1VCU0VDVElPTiBQcml2
YXRlPgord2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElP
Tj4KIDxGSUxFPldlYktpdE5ldHdvcmtQcm94eVNldHRpbmdzPC9GSUxFPgogV2ViS2l0TmV0d29y
a1Byb3h5U2V0dGluZ3MKIHdlYmtpdF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzX25ldwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRv
Y3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1kb2NzLnNnbWwKaW5kZXggOGRjM2U2MTc0MDguLjIxNTBlNTdjNTVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21s
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1k
b2NzLnNnbWwKQEAgLTUzLDYgKzUzLDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2Vi
S2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdFNlY3VyaXR5T3JpZ2luLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIueG1sIi8+CisgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdFdlYnNpdGVEYXRhLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9
InhtbC9XZWJLaXROZXR3b3JrUHJveHlTZXR0aW5ncy54bWwiLz4KICAgPC9jaGFwdGVyPgogCkBA
IC0xMDYsNSArMTA3LDE1IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2FwaS1pbmRleC0y
LjEyLnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNsdWRlPgogICA8L2luZGV4PgogCisgIDxp
bmRleCBpZD0iYXBpLWluZGV4LTItMTQiIHJvbGU9IjIuMTQiPgorICAgIDx0aXRsZT5JbmRleCBv
ZiBuZXcgc3ltYm9scyBpbiAyLjE0PC90aXRsZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwv
YXBpLWluZGV4LTIuMTQueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+CisgIDwvaW5k
ZXg+CisKKyAgPGluZGV4IGlkPSJhcGktaW5kZXgtMi0xNiIgcm9sZT0iMi4xNiI+CisgICAgPHRp
dGxlPkluZGV4IG9mIG5ldyBzeW1ib2xzIGluIDIuMTY8L3RpdGxlPgorICAgIDx4aTppbmNsdWRl
IGhyZWY9InhtbC9hcGktaW5kZXgtMi4xNi54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVk
ZT4KKyAgPC9pbmRleD4KKwogICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYW5ub3RhdGlvbi1nbG9z
c2FyeS54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KIDwvYm9vaz4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCA5OGZlMTI5MmFjYi4uMzRi
MTJhOGM5MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dl
YmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgK
QEAgLTc3LDYgKzc3LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXcuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRXZWJWaWV3U2Vzc2lvblN0YXRlLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJz
aXRlRGF0YS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmg+CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiMDg3NTgwZTkyZS4u
OGM5NTkyM2E5ZDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxNy0wMS0yMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIEFQSSB0byBXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIgdG8gaGFuZGxlIHdlYnNpdGUgZGF0YQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2NTg5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFib3V0OmRhdGEgaGFuZGxlciB0
byBNaW5pQnJvd3NlciB0byBtYW51YWxseSB0ZXN0IHRoZSB3ZWJzaXRlIGRhdGEgQVBJLiBBbHNv
IGFkZCB1bml0IHRlc3RzIHRvIHRlc3QgYWxsIHRoZQorICAgICAgICBuZXcgQVBJLCBtb3Zpbmcg
dGhlIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBjb25maWd1cmF0aW9uIEFQSSB0byB0aGUgbmV3
IGZpbGUgdG9vLgorCisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYzoK
KyAgICAgICAgKHdlYlZpZXdEZWNpZGVQb2xpY3kpOgorICAgICAgICAobmV3VGFiQ2FsbGJhY2sp
OgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9tYWluLmM6CisgICAgICAgIChjcmVhdGVCcm93
c2VyVGFiKToKKyAgICAgICAgKGFib3V0RGF0YVJlcXVlc3RGcmVlKToKKyAgICAgICAgKGFib3V0
RGF0YVJlcXVlc3ROZXcpOgorICAgICAgICAoYWJvdXREYXRhUmVxdWVzdEZvclZpZXcpOgorICAg
ICAgICAod2Vic2l0ZURhdGFSZW1vdmVkQ2FsbGJhY2spOgorICAgICAgICAod2Vic2l0ZURhdGFD
bGVhcmVkQ2FsbGJhY2spOgorICAgICAgICAoYWJvdXREYXRhU2NyaXB0TWVzc2FnZVJlY2VpdmVk
Q2FsbGJhY2spOgorICAgICAgICAoZG9tYWluTGlzdEZyZWUpOgorICAgICAgICAoYWJvdXREYXRh
RmlsbFRhYmxlKToKKyAgICAgICAgKGdvdFdlYnNpdGVEYXRhQ2FsbGJhY2spOgorICAgICAgICAo
YWJvdXREYXRhSGFuZGxlUmVxdWVzdCk6CisgICAgICAgIChhYm91dFVSSVNjaGVtZVJlcXVlc3RD
YWxsYmFjayk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHNlcnZlckNh
bGxiYWNrKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJzaXRlRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoc2Vy
dmVyQ2FsbGJhY2spOgorICAgICAgICAoV2Vic2l0ZURhdGFUZXN0OjpXZWJzaXRlRGF0YVRlc3Qp
OgorICAgICAgICAoV2Vic2l0ZURhdGFUZXN0Ojp+V2Vic2l0ZURhdGFUZXN0KToKKyAgICAgICAg
KFdlYnNpdGVEYXRhVGVzdDo6ZmV0Y2gpOgorICAgICAgICAoV2Vic2l0ZURhdGFUZXN0OjpyZW1v
dmUpOgorICAgICAgICAoV2Vic2l0ZURhdGFUZXN0OjpjbGVhcik6CisgICAgICAgICh0ZXN0V2Vi
c2l0ZURhdGFDb25maWd1cmF0aW9uKToKKyAgICAgICAgKHRlc3RXZWJzaXRlRGF0YUNhY2hlKToK
KyAgICAgICAgKHRlc3RXZWJzaXRlRGF0YVN0b3JhZ2UpOgorICAgICAgICAodGVzdFdlYnNpdGVE
YXRhRGF0YWJhc2VzKToKKyAgICAgICAgKHRlc3RXZWJzaXRlRGF0YUFwcGNhY2hlKToKKyAgICAg
ICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisKIDIwMTctMDEtMjAgIFlvdWVu
biBGYWJsZXQgIDx5b3Vlbm5mQGdtYWlsLmNvbT4KIAogICAgICAgICBbV2ViUlRDXSBVcGRhdGUg
YnVpbGQgc3lzdGVtIHRvIG1ha2UgRzcxMSBvcHRpb25hbCBpbiBsaWJ3ZWJydGMKZGlmZiAtLWdp
dCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmMgYi9Ub29scy9NaW5pQnJv
d3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCmluZGV4IGJiYjVhYjU2YTJiLi5mNDMyNmRkYTU4ZSAx
MDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYworKysgYi9U
b29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCkBAIC0zMzAsNyArMzMwLDExIEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3RGVjaWRlUG9saWN5KFdlYktpdFdlYlZpZXcgKndlYlZp
ZXcsIFdlYktpdFBvbGljeURlY2lzaW9uCiAgICAgICAgIHJldHVybiBGQUxTRTsKIAogICAgIC8q
IE9wZW5pbmcgYSBuZXcgdGFiIGlmIGxpbmsgY2xpY2tlZCB3aXRoIHRoZSBtaWRkbGUgYnV0dG9u
LiAqLwotICAgIFdlYktpdFdlYlZpZXcgKm5ld1dlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0
KHdlYlZpZXcpKSk7CisgICAgV2ViS2l0V2ViVmlldyAqbmV3V2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCisgICAgICAgICJ3ZWItY29u
dGV4dCIsIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3KSwKKyAgICAgICAgInNl
dHRpbmdzIiwgd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwKKyAgICAgICAg
InVzZXItY29udGVudC1tYW5hZ2VyIiwgd2Via2l0X3dlYl92aWV3X2dldF91c2VyX2NvbnRlbnRf
bWFuYWdlcih3ZWJWaWV3KSwKKyAgICAgICAgTlVMTCkpOwogICAgIGJyb3dzZXJfd2luZG93X2Fw
cGVuZF92aWV3KHdpbmRvdywgbmV3V2ViVmlldyk7CiAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
cmVxdWVzdChuZXdXZWJWaWV3LCB3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X3JlcXVlc3Qo
bmF2aWdhdGlvbkFjdGlvbikpOwogCkBAIC00NjYsOCArNDcwLDEyIEBAIHN0YXRpYyB2b2lkIG5l
d1RhYkNhbGxiYWNrKEJyb3dzZXJXaW5kb3cgKndpbmRvdykKICAgICBXZWJLaXRXZWJWaWV3ICp3
ZWJWaWV3ID0gYnJvd3Nlcl90YWJfZ2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKTsKICAg
ICBpZiAod2Via2l0X3dlYl92aWV3X2lzX2VkaXRhYmxlKHdlYlZpZXcpKQogICAgICAgICByZXR1
cm47Ci0gICAgV2ViS2l0U2V0dGluZ3MgKnNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9z
ZXR0aW5ncyh3ZWJWaWV3KTsKLSAgICBicm93c2VyX3dpbmRvd19hcHBlbmRfdmlldyh3aW5kb3cs
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfc2V0dGluZ3Moc2V0dGlu
Z3MpKSk7CisKKyAgICBicm93c2VyX3dpbmRvd19hcHBlbmRfdmlldyh3aW5kb3csIFdFQktJVF9X
RUJfVklFVyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCisgICAgICAgICJ3ZWIt
Y29udGV4dCIsIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3KSwKKyAgICAgICAg
InNldHRpbmdzIiwgd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwKKyAgICAg
ICAgInVzZXItY29udGVudC1tYW5hZ2VyIiwgd2Via2l0X3dlYl92aWV3X2dldF91c2VyX2NvbnRl
bnRfbWFuYWdlcih3ZWJWaWV3KSwKKyAgICAgICAgTlVMTCkpKTsKICAgICBndGtfbm90ZWJvb2tf
c2V0X2N1cnJlbnRfcGFnZShHVEtfTk9URUJPT0sod2luZG93LT5ub3RlYm9vayksIC0xKTsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYyBiL1Rvb2xzL01pbmlC
cm93c2VyL2d0ay9tYWluLmMKaW5kZXggMzRiOWE4NTY3OTEuLjhiYjg3YjY0ZDk0IDEwMDY0NAot
LS0gYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCisrKyBiL1Rvb2xzL01pbmlCcm93c2Vy
L2d0ay9tYWluLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjbWFrZWNvbmZpZy5oIgog
CiAjaW5jbHVkZSAiQnJvd3NlcldpbmRvdy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNp
bmNsdWRlIDxzdHJpbmcuaD4KQEAgLTU5LDkgKzYwLDkgQEAgc3RhdGljIGdjaGFyICphcmd1bWVu
dFRvVVJMKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogICAgIHJldHVybiBmaWxlVVJMOwogfQogCi1z
dGF0aWMgV2ViS2l0V2ViVmlldyAqY3JlYXRlQnJvd3NlclRhYihCcm93c2VyV2luZG93ICp3aW5k
b3csIFdlYktpdFNldHRpbmdzICp3ZWJraXRTZXR0aW5ncykKK3N0YXRpYyBXZWJLaXRXZWJWaWV3
ICpjcmVhdGVCcm93c2VyVGFiKEJyb3dzZXJXaW5kb3cgKndpbmRvdywgV2ViS2l0U2V0dGluZ3Mg
KndlYmtpdFNldHRpbmdzLCBXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIgKnVzZXJDb250ZW50TWFu
YWdlcikKIHsKLSAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfdXNlcl9jb250ZW50X21hbmFnZXIo
dXNlckNvbnRlbnRNYW5hZ2VyKSk7CiAgICAgaWYgKHdlYmtpdFNldHRpbmdzKQogICAgICAgICB3
ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKHdlYlZpZXcsIHdlYmtpdFNldHRpbmdzKTsKICAg
ICBpZiAoZWRpdG9yTW9kZSkKQEAgLTIyNSw2ICsyMjYsMTk0IEBAIHN0YXRpYyBnYm9vbGVhbiBh
ZGRTZXR0aW5nc0dyb3VwVG9Db250ZXh0KEdPcHRpb25Db250ZXh0ICpjb250ZXh0LCBXZWJLaXRT
ZXR0aW5nCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJL
aXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0OworICAgIEdMaXN0ICpkYXRhTGlzdDsKKyAgICBH
SGFzaFRhYmxlICpkYXRhTWFwOworfSBBYm91dERhdGFSZXF1ZXN0OworCitzdGF0aWMgR0hhc2hU
YWJsZSAqYWJvdXREYXRhUmVxdWVzdE1hcDsKKworc3RhdGljIHZvaWQgYWJvdXREYXRhUmVxdWVz
dEZyZWUoQWJvdXREYXRhUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICBpZiAoIXJlcXVlc3QpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdfbGlzdF9mcmVlX2Z1bGwocmVxdWVzdC0+ZGF0YUxpc3Qs
IGdfb2JqZWN0X3VucmVmKTsKKworICAgIGlmIChyZXF1ZXN0LT5yZXF1ZXN0KQorICAgICAgICBn
X29iamVjdF91bnJlZihyZXF1ZXN0LT5yZXF1ZXN0KTsKKyAgICBpZiAocmVxdWVzdC0+ZGF0YU1h
cCkKKyAgICAgICAgZ19oYXNoX3RhYmxlX2Rlc3Ryb3kocmVxdWVzdC0+ZGF0YU1hcCk7CisKKyAg
ICBnX3NsaWNlX2ZyZWUoQWJvdXREYXRhUmVxdWVzdCwgcmVxdWVzdCk7Cit9CisKK3N0YXRpYyBB
Ym91dERhdGFSZXF1ZXN0KiBhYm91dERhdGFSZXF1ZXN0TmV3KFdlYktpdFVSSVNjaGVtZVJlcXVl
c3QgKnVyaVJlcXVlc3QpCit7CisgICAgaWYgKCFhYm91dERhdGFSZXF1ZXN0TWFwKQorICAgICAg
ICBhYm91dERhdGFSZXF1ZXN0TWFwID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfZGlyZWN0X2hh
c2gsIGdfZGlyZWN0X2VxdWFsLCBOVUxMLCAoR0Rlc3Ryb3lOb3RpZnkpYWJvdXREYXRhUmVxdWVz
dEZyZWUpOworCisgICAgQWJvdXREYXRhUmVxdWVzdCAqcmVxdWVzdCA9IGdfc2xpY2VfbmV3MChB
Ym91dERhdGFSZXF1ZXN0KTsKKyAgICByZXF1ZXN0LT5yZXF1ZXN0ID0gZ19vYmplY3RfcmVmKHVy
aVJlcXVlc3QpOworICAgIGdfaGFzaF90YWJsZV9pbnNlcnQoYWJvdXREYXRhUmVxdWVzdE1hcCwg
R1VJTlRfVE9fUE9JTlRFUih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQod2Via2l0X3VyaV9z
Y2hlbWVfcmVxdWVzdF9nZXRfd2ViX3ZpZXcocmVxdWVzdC0+cmVxdWVzdCkpKSwgcmVxdWVzdCk7
CisKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworc3RhdGljIEFib3V0RGF0YVJlcXVlc3QgKmFi
b3V0RGF0YVJlcXVlc3RGb3JWaWV3KGd1aW50NjQgcGFnZUlEKQoreworICAgIHJldHVybiBhYm91
dERhdGFSZXF1ZXN0TWFwID8gZ19oYXNoX3RhYmxlX2xvb2t1cChhYm91dERhdGFSZXF1ZXN0TWFw
LCBHVUlOVF9UT19QT0lOVEVSKHBhZ2VJRCkpIDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgd2Vi
c2l0ZURhdGFSZW1vdmVkQ2FsbGJhY2soV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2Vy
LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgQWJvdXREYXRhUmVxdWVzdCAqZGF0YVJlcXVlc3QpCit7
CisgICAgaWYgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9yZW1vdmVfZmluaXNoKG1hbmFn
ZXIsIHJlc3VsdCwgTlVMTCkpCisgICAgICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQod2Via2l0
X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfd2ViX3ZpZXcoZGF0YVJlcXVlc3QtPnJlcXVlc3QpKTsK
K30KKworc3RhdGljIHZvaWQgd2Vic2l0ZURhdGFDbGVhcmVkQ2FsbGJhY2soV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgQWJvdXREYXRhUmVx
dWVzdCAqZGF0YVJlcXVlc3QpCit7CisgICAgaWYgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9jbGVhcl9maW5pc2gobWFuYWdlciwgcmVzdWx0LCBOVUxMKSkKKyAgICAgICAgd2Via2l0X3dl
Yl92aWV3X3JlbG9hZCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF93ZWJfdmlldyhkYXRh
UmVxdWVzdC0+cmVxdWVzdCkpOworfQorCitzdGF0aWMgdm9pZCBhYm91dERhdGFTY3JpcHRNZXNz
YWdlUmVjZWl2ZWRDYWxsYmFjayhXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIgKnVzZXJDb250ZW50
TWFuYWdlciwgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCAqbWVzc2FnZSkKK3sKKyAgICBKU1ZhbHVl
UmVmIGpzVmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3ZhbHVlKG1lc3NhZ2Up
OworICAgIEpTU3RyaW5nUmVmIGpzU3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weSh3ZWJraXRf
amF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KG1lc3NhZ2UpLCBqc1ZhbHVlLCBO
VUxMKTsKKyAgICBzaXplX3QgbWF4U2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5n
U2l6ZShqc1N0cmluZyk7CisgICAgaWYgKCFtYXhTaXplKSB7CisgICAgICAgIEpTU3RyaW5nUmVs
ZWFzZShqc1N0cmluZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2hhciAqbWVzc2Fn
ZVN0cmluZyA9IGdfbWFsbG9jKG1heFNpemUpOworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmco
anNTdHJpbmcsIG1lc3NhZ2VTdHJpbmcsIG1heFNpemUpOworICAgIEpTU3RyaW5nUmVsZWFzZShq
c1N0cmluZyk7CisKKyAgICBjaGFyICoqdG9rZW5zID0gZ19zdHJzcGxpdChtZXNzYWdlU3RyaW5n
LCAiOiIsIDMpOworICAgIGdfZnJlZShtZXNzYWdlU3RyaW5nKTsKKworICAgIHVuc2lnbmVkIHRv
a2VuQ291bnQgPSBnX3N0cnZfbGVuZ3RoKHRva2Vucyk7CisgICAgaWYgKCF0b2tlbnMgfHwgdG9r
ZW5Db3VudCA8IDIpIHsKKyAgICAgICAgZ19zdHJmcmVldih0b2tlbnMpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZ3VpbnQ2NCBwYWdlSUQgPSBnX2FzY2lpX3N0cnRvdWxsKHRva2Vu
c1swXSwgTlVMTCwgMTApOworICAgIEFib3V0RGF0YVJlcXVlc3QgKmRhdGFSZXF1ZXN0ID0gYWJv
dXREYXRhUmVxdWVzdEZvclZpZXcocGFnZUlEKTsKKyAgICBpZiAoIWRhdGFSZXF1ZXN0KSB7Cisg
ICAgICAgIGdfc3RyZnJlZXYodG9rZW5zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkp
OworICAgIGd1aW50NjQgdHlwZXMgPSBnX2FzY2lpX3N0cnRvdWxsKHRva2Vuc1sxXSwgTlVMTCwg
MTApOworICAgIGlmICh0b2tlbkNvdW50ID09IDIpCisgICAgICAgIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9jbGVhcihtYW5hZ2VyLCB0eXBlcywgMCwgTlVMTCwgKEdBc3luY1JlYWR5Q2Fs
bGJhY2spd2Vic2l0ZURhdGFDbGVhcmVkQ2FsbGJhY2ssIGRhdGFSZXF1ZXN0KTsKKyAgICBlbHNl
IHsKKyAgICAgICAgZ3VpbnQ2NCBkb21haW5JRCA9IGdfYXNjaWlfc3RydG91bGwodG9rZW5zWzJd
LCBOVUxMLCAxMCk7CisgICAgICAgIEdMaXN0ICpkYXRhTGlzdCA9IGdfaGFzaF90YWJsZV9sb29r
dXAoZGF0YVJlcXVlc3QtPmRhdGFNYXAsIEdVSU5UX1RPX1BPSU5URVIodHlwZXMpKTsKKyAgICAg
ICAgV2ViS2l0V2Vic2l0ZURhdGEgKmRhdGEgPSBnX2xpc3RfbnRoX2RhdGEoZGF0YUxpc3QsIGRv
bWFpbklEKTsKKyAgICAgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgICAgIEdMaXN0IGRhdGFMaXN0
ID0geyBkYXRhLCBOVUxMLCBOVUxMIH07CisgICAgICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfcmVtb3ZlKG1hbmFnZXIsIHR5cGVzLCAmZGF0YUxpc3QsIE5VTEwsIChHQXN5bmNS
ZWFkeUNhbGxiYWNrKXdlYnNpdGVEYXRhUmVtb3ZlZENhbGxiYWNrLCBkYXRhUmVxdWVzdCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZ19zdHJmcmVldih0b2tlbnMpOworfQorCitzdGF0aWMgdm9p
ZCBkb21haW5MaXN0RnJlZShHTGlzdCAqZG9tYWlucykKK3sKKyAgICBnX2xpc3RfZnJlZV9mdWxs
KGRvbWFpbnMsIChHRGVzdHJveU5vdGlmeSl3ZWJraXRfd2Vic2l0ZV9kYXRhX3VucmVmKTsKK30K
Kworc3RhdGljIHZvaWQgYWJvdXREYXRhRmlsbFRhYmxlKEdTdHJpbmcgKnJlc3VsdCwgQWJvdXRE
YXRhUmVxdWVzdCAqZGF0YVJlcXVlc3QsIEdMaXN0KiBkYXRhTGlzdCwgY29uc3QgY2hhciAqdGl0
bGUsIFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgdHlwZXMsIGNvbnN0IGNoYXIgKmRhdGFQYXRoLCBn
dWludDY0IHBhZ2VJRCkKK3sKKyAgICBndWludDY0IHRvdGFsRGF0YVNpemUgPSAwOworICAgIEdM
aXN0ICpkb21haW5zID0gTlVMTDsKKyAgICBHTGlzdCAqbDsKKyAgICBmb3IgKGwgPSBkYXRhTGlz
dDsgbDsgbCA9IGdfbGlzdF9uZXh0KGwpKSB7CisgICAgICAgIFdlYktpdFdlYnNpdGVEYXRhICpk
YXRhID0gKFdlYktpdFdlYnNpdGVEYXRhICopbC0+ZGF0YTsKKworICAgICAgICBpZiAod2Via2l0
X3dlYnNpdGVfZGF0YV9nZXRfdHlwZXMoZGF0YSkgJiB0eXBlcykgeworICAgICAgICAgICAgZG9t
YWlucyA9IGdfbGlzdF9wcmVwZW5kKGRvbWFpbnMsIHdlYmtpdF93ZWJzaXRlX2RhdGFfcmVmKGRh
dGEpKTsKKyAgICAgICAgICAgIHRvdGFsRGF0YVNpemUgKz0gd2Via2l0X3dlYnNpdGVfZGF0YV9n
ZXRfc2l6ZShkYXRhLCB0eXBlcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFkb21haW5z
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWRhdGFSZXF1ZXN0LT5kYXRhTWFwKQorICAg
ICAgICBkYXRhUmVxdWVzdC0+ZGF0YU1hcCA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX2RpcmVj
dF9oYXNoLCBnX2RpcmVjdF9lcXVhbCwgTlVMTCwgKEdEZXN0cm95Tm90aWZ5KWRvbWFpbkxpc3RG
cmVlKTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KGRhdGFSZXF1ZXN0LT5kYXRhTWFwLCBHVUlO
VF9UT19QT0lOVEVSKHR5cGVzKSwgZG9tYWlucyk7CisKKyAgICBpZiAodG90YWxEYXRhU2l6ZSkg
eworICAgICAgICBjaGFyICp0b3RhbERhdGFTaXplU3RyID0gZ19mb3JtYXRfc2l6ZSh0b3RhbERh
dGFTaXplKTsKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZihyZXN1bHQsICI8aDE+JXMg
KCVzKTwvaDE+XG48dGFibGU+XG4iLCB0aXRsZSwgdG90YWxEYXRhU2l6ZVN0cik7CisgICAgICAg
IGdfZnJlZSh0b3RhbERhdGFTaXplU3RyKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ19zdHJpbmdf
YXBwZW5kX3ByaW50ZihyZXN1bHQsICI8aDE+JXM8L2gxPlxuPHRhYmxlPlxuIiwgdGl0bGUpOwor
ICAgIGlmIChkYXRhUGF0aCkKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZihyZXN1bHQs
ICI8dHI+PHRkIGNvbHNwYW49XCIyXCI+UGF0aDogJXM8L3RkPjwvdHI+XG4iLCBkYXRhUGF0aCk7
CisKKyAgICB1bnNpZ25lZCBpbmRleDsKKyAgICBmb3IgKGwgPSBkb21haW5zLCBpbmRleCA9IDA7
IGw7IGwgPSBnX2xpc3RfbmV4dChsKSwgaW5kZXgrKykgeworICAgICAgICBXZWJLaXRXZWJzaXRl
RGF0YSAqZGF0YSA9IChXZWJLaXRXZWJzaXRlRGF0YSAqKWwtPmRhdGE7CisgICAgICAgIGNvbnN0
IGNoYXIgKmRpc3BsYXlOYW1lID0gd2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfbmFtZShkYXRhKTsK
KyAgICAgICAgZ3VpbnQ2NCBkYXRhU2l6ZSA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3NpemUo
ZGF0YSwgdHlwZXMpOworICAgICAgICBpZiAoZGF0YVNpemUpIHsKKyAgICAgICAgICAgIGNoYXIg
KmRhdGFTaXplU3RyID0gZ19mb3JtYXRfc2l6ZShkYXRhU2l6ZSk7CisgICAgICAgICAgICBnX3N0
cmluZ19hcHBlbmRfcHJpbnRmKHJlc3VsdCwgIjx0cj48dGQ+JXMgKCVzKTwvdGQ+IiwgZGlzcGxh
eU5hbWUsIGRhdGFTaXplU3RyKTsKKyAgICAgICAgICAgIGdfZnJlZShkYXRhU2l6ZVN0cik7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZihyZXN1bHQs
ICI8dHI+PHRkPiVzPC90ZD4iLCBkaXNwbGF5TmFtZSk7CisgICAgICAgIGdfc3RyaW5nX2FwcGVu
ZF9wcmludGYocmVzdWx0LCAiPHRkPjxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJSZW1v
dmVcIiBvbmNsaWNrPVwicmVtb3ZlRGF0YSgnJSJHX0dVSU5UNjRfRk9STUFUIjoldToldScpO1wi
PjwvdGQ+PC90cj5cbiIsCisgICAgICAgICAgICBwYWdlSUQsIHR5cGVzLCBpbmRleCk7CisgICAg
fQorICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYocmVzdWx0LCAiPHRyPjx0ZD48aW5wdXQgdHlw
ZT1cImJ1dHRvblwiIHZhbHVlPVwiQ2xlYXIgYWxsXCIgb25jbGljaz1cImNsZWFyRGF0YSgnJSJH
X0dVSU5UNjRfRk9STUFUIjoldScpO1wiPjwvdGQ+PC90cj48L3RhYmxlPlxuIiwKKyAgICAgICAg
cGFnZUlELCB0eXBlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGdvdFdlYnNpdGVEYXRhQ2FsbGJhY2so
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1bHQgKmFzeW5jUmVz
dWx0LCBBYm91dERhdGFSZXF1ZXN0ICpkYXRhUmVxdWVzdCkKK3sKKyAgICBHTGlzdCAqZGF0YUxp
c3QgPSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2hfZmluaXNoKG1hbmFnZXIsIGFz
eW5jUmVzdWx0LCBOVUxMKTsKKworICAgIEdTdHJpbmcgKnJlc3VsdCA9IGdfc3RyaW5nX25ldygK
KyAgICAgICAgIjxodG1sPjxoZWFkPiIKKyAgICAgICAgIjxzY3JpcHQ+IgorICAgICAgICAiICBm
dW5jdGlvbiByZW1vdmVEYXRhKGRvbWFpbikgeyIKKyAgICAgICAgIiAgICB3aW5kb3cud2Via2l0
Lm1lc3NhZ2VIYW5kbGVycy5hYm91dERhdGEucG9zdE1lc3NhZ2UoZG9tYWluKTsiCisgICAgICAg
ICIgIH0iCisgICAgICAgICIgIGZ1bmN0aW9uIGNsZWFyRGF0YShkYXRhVHlwZSkgeyIKKyAgICAg
ICAgIiAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5hYm91dERhdGEucG9zdE1lc3Nh
Z2UoZGF0YVR5cGUpOyIKKyAgICAgICAgIiAgfSIKKyAgICAgICAgIjwvc2NyaXB0PjwvaGVhZD48
Ym9keT5cbiIpOworCisgICAgZ3VpbnQ2NCBwYWdlSUQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Bh
Z2VfaWQod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfd2ViX3ZpZXcoZGF0YVJlcXVlc3Qt
PnJlcXVlc3QpKTsKKyAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVxdWVzdCwg
ZGF0YUxpc3QsICJNZW1vcnkgQ2FjaGUiLCBXRUJLSVRfV0VCU0lURV9EQVRBX01FTU9SWV9DQUNI
RSwgTlVMTCwgcGFnZUlEKTsKKyAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVx
dWVzdCwgZGF0YUxpc3QsICJEaXNrIENhY2hlIiwgV0VCS0lUX1dFQlNJVEVfREFUQV9ESVNLX0NB
Q0hFLCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5
KG1hbmFnZXIpLCBwYWdlSUQpOworICAgIGFib3V0RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFS
ZXF1ZXN0LCBkYXRhTGlzdCwgIlNlc3Npb24gU3RvcmFnZSIsIFdFQktJVF9XRUJTSVRFX0RBVEFf
U0VTU0lPTl9TVE9SQUdFLCBOVUxMLCBwYWdlSUQpOworICAgIGFib3V0RGF0YUZpbGxUYWJsZShy
ZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIkxvY2FsIFN0b3JhZ2UiLCBXRUJLSVRfV0VC
U0lURV9EQVRBX0xPQ0FMX1NUT1JBR0UsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
bG9jYWxfc3RvcmFnZV9kaXJlY3RvcnkobWFuYWdlciksIHBhZ2VJRCk7CisgICAgYWJvdXREYXRh
RmlsbFRhYmxlKHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiV2ViU1FMIERhdGFiYXNl
cyIsIFdFQktJVF9XRUJTSVRFX0RBVEFfV0VCU1FMX0RBVEFCQVNFUywgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5KG1hbmFnZXIpLCBwYWdlSUQpOworICAg
IGFib3V0RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIkluZGV4
ZWREQiBEYXRhYmFzZXMiLCBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVMs
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRiX2RpcmVjdG9yeShtYW5h
Z2VyKSwgcGFnZUlEKTsKKyAgICBhYm91dERhdGFGaWxsVGFibGUocmVzdWx0LCBkYXRhUmVxdWVz
dCwgZGF0YUxpc3QsICJQbHVnaW5zIERhdGEiLCBXRUJLSVRfV0VCU0lURV9EQVRBX1BMVUdJTl9E
QVRBLCBOVUxMLCBwYWdlSUQpOworICAgIGFib3V0RGF0YUZpbGxUYWJsZShyZXN1bHQsIGRhdGFS
ZXF1ZXN0LCBkYXRhTGlzdCwgIk9mZmxpbmUgV2ViIEFwcGxpY2F0aW9ucyBDYWNoZSIsIFdFQktJ
VF9XRUJTSVRFX0RBVEFfT0ZGTElORV9BUFBMSUNBVElPTl9DQUNIRSwgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2RpcmVjdG9yeShtYW5h
Z2VyKSwgcGFnZUlEKTsKKworICAgIHJlc3VsdCA9IGdfc3RyaW5nX2FwcGVuZChyZXN1bHQsICI8
L2JvZHk+PC9odG1sPiIpOworICAgIGdzaXplIHN0cmVhbUxlbmd0aCA9IHJlc3VsdC0+bGVuOwor
ICAgIEdJbnB1dFN0cmVhbSAqc3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ld19mcm9t
X2RhdGEoZ19zdHJpbmdfZnJlZShyZXN1bHQsIEZBTFNFKSwgc3RyZWFtTGVuZ3RoLCBnX2ZyZWUp
OworICAgIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmluaXNoKGRhdGFSZXF1ZXN0LT5yZXF1
ZXN0LCBzdHJlYW0sIHN0cmVhbUxlbmd0aCwgInRleHQvaHRtbCIpOworICAgIGdfbGlzdF9mcmVl
X2Z1bGwoZGF0YUxpc3QsIChHRGVzdHJveU5vdGlmeSl3ZWJraXRfd2Vic2l0ZV9kYXRhX3VucmVm
KTsKK30KKworc3RhdGljIHZvaWQgYWJvdXREYXRhSGFuZGxlUmVxdWVzdChXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0ICpyZXF1ZXN0KQoreworICAgIEFib3V0RGF0YVJlcXVlc3QgKmRhdGFSZXF1ZXN0
ID0gYWJvdXREYXRhUmVxdWVzdE5ldyhyZXF1ZXN0KTsKKyAgICBXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIgKm1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKKyAgICB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfZmV0Y2gobWFuYWdlciwgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwsIE5V
TEwsIChHQXN5bmNSZWFkeUNhbGxiYWNrKWdvdFdlYnNpdGVEYXRhQ2FsbGJhY2ssIGRhdGFSZXF1
ZXN0KTsKK30KKwogc3RhdGljIHZvaWQgYWJvdXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2soV2Vi
S2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwgZ3BvaW50ZXIgdXNlckRhdGEpCiB7CiAgICAg
R0lucHV0U3RyZWFtICpzdHJlYW07CkBAIC0yNDQsNyArNDMzLDkgQEAgc3RhdGljIHZvaWQgYWJv
dXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVz
dCwgZ3BvaW4KIAogICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaChyZXF1
ZXN0LCBzdHJlYW0sIHN0cmVhbUxlbmd0aCwgInRleHQvaHRtbCIpOwogICAgICAgICBnX29iamVj
dF91bnJlZihzdHJlYW0pOwotICAgIH0gZWxzZSB7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAw
KHBhdGgsICJkYXRhIikpCisgICAgICAgIGFib3V0RGF0YUhhbmRsZVJlcXVlc3QocmVxdWVzdCk7
CisgICAgZWxzZSB7CiAgICAgICAgIGVycm9yID0gZ19lcnJvcl9uZXcoTUlOSV9CUk9XU0VSX0VS
Uk9SLCBNSU5JX0JST1dTRVJfRVJST1JfSU5WQUxJRF9BQk9VVF9QQVRILCAiSW52YWxpZCBhYm91
dDolcyBwYWdlLiIsIHBhdGgpOwogICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2Zp
bmlzaF9lcnJvcihyZXF1ZXN0LCBlcnJvcik7CiAgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7
CkBAIC0yODgsNiArNDc5LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAK
ICAgICB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSh3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X2RlZmF1bHQoKSwgQlJPV1NFUl9BQk9VVF9TQ0hFTUUsIGFib3V0VVJJU2NoZW1l
UmVxdWVzdENhbGxiYWNrLCBOVUxMLCBOVUxMKTsKIAorICAgIFdlYktpdFVzZXJDb250ZW50TWFu
YWdlciAqdXNlckNvbnRlbnRNYW5hZ2VyID0gd2Via2l0X3VzZXJfY29udGVudF9tYW5hZ2VyX25l
dygpOworICAgIHdlYmtpdF91c2VyX2NvbnRlbnRfbWFuYWdlcl9yZWdpc3Rlcl9zY3JpcHRfbWVz
c2FnZV9oYW5kbGVyKHVzZXJDb250ZW50TWFuYWdlciwgImFib3V0RGF0YSIpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QodXNlckNvbnRlbnRNYW5hZ2VyLCAic2NyaXB0LW1lc3NhZ2UtcmVjZWl2ZWQ6
OmFib3V0RGF0YSIsIEdfQ0FMTEJBQ0soYWJvdXREYXRhU2NyaXB0TWVzc2FnZVJlY2VpdmVkQ2Fs
bGJhY2spLCBOVUxMKTsKKwogICAgIEJyb3dzZXJXaW5kb3cgKm1haW5XaW5kb3cgPSBCUk9XU0VS
X1dJTkRPVyhicm93c2VyX3dpbmRvd19uZXcoTlVMTCkpOwogICAgIGlmIChnZW9tZXRyeSkKICAg
ICAgICAgZ3RrX3dpbmRvd19wYXJzZV9nZW9tZXRyeShHVEtfV0lORE9XKG1haW5XaW5kb3cpLCBn
ZW9tZXRyeSk7CkBAIC0yOTcsNyArNDkyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy
Z3ZbXSkKICAgICAgICAgaW50IGk7CiAKICAgICAgICAgZm9yIChpID0gMDsgdXJpQXJndW1lbnRz
W2ldOyBpKyspIHsKLSAgICAgICAgICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBjcmVhdGVC
cm93c2VyVGFiKG1haW5XaW5kb3csIHdlYmtpdFNldHRpbmdzKTsKKyAgICAgICAgICAgIFdlYktp
dFdlYlZpZXcgKndlYlZpZXcgPSBjcmVhdGVCcm93c2VyVGFiKG1haW5XaW5kb3csIHdlYmtpdFNl
dHRpbmdzLCB1c2VyQ29udGVudE1hbmFnZXIpOwogICAgICAgICAgICAgaWYgKCFpKQogICAgICAg
ICAgICAgICAgIGZpcnN0VGFiID0gR1RLX1dJREdFVCh3ZWJWaWV3KTsKICAgICAgICAgICAgIGdj
aGFyICp1cmwgPSBhcmd1bWVudFRvVVJMKHVyaUFyZ3VtZW50c1tpXSk7CkBAIC0zMDUsNyArNTAw
LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKICAgICAgICAgICAgIGdfZnJl
ZSh1cmwpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgV2ViS2l0V2ViVmlldyAq
d2ViVmlldyA9IGNyZWF0ZUJyb3dzZXJUYWIobWFpbldpbmRvdywgd2Via2l0U2V0dGluZ3MpOwor
ICAgICAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gY3JlYXRlQnJvd3NlclRhYihtYWluV2lu
ZG93LCB3ZWJraXRTZXR0aW5ncywgdXNlckNvbnRlbnRNYW5hZ2VyKTsKICAgICAgICAgZmlyc3RU
YWIgPSBHVEtfV0lER0VUKHdlYlZpZXcpOwogCiAgICAgICAgIGlmIChiYWNrZ3JvdW5kQ29sb3Ip
CkBAIC0zMjMsNiArNTE4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKICAg
ICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChtYWluV2luZG93KSk7CiAKICAgICBnX2NsZWFy
X29iamVjdCgmd2Via2l0U2V0dGluZ3MpOworICAgIGdfY2xlYXJfb2JqZWN0KCZ1c2VyQ29udGVu
dE1hbmFnZXIpOwogCiAgICAgZ3RrX21haW4oKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL0NNYWtlTGlzdHMudHh0CmluZGV4IDI1ODRkZjI2ZWI0Li42
NDY0MGY1MWNjNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9DTWFrZUxpc3RzLnR4dApAQCAtMTI1LDYgKzEyNSw3IEBAIEFERF9XSzJfVEVTVChUZXN0
V2ViVmlld0VkaXRvciBUZXN0V2ViVmlld0VkaXRvci5jcHApCiBBRERfV0syX1RFU1QoVGVzdFdl
YktpdFdlYkNvbnRleHQgVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwKQogQUREX1dLMl9URVNUKFRl
c3RXZWJLaXRXZWJWaWV3IFRlc3RXZWJLaXRXZWJWaWV3LmNwcCkKIEFERF9XSzJfVEVTVChUZXN0
V2ViS2l0VXNlckNvbnRlbnRNYW5hZ2VyIFRlc3RXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIuY3Bw
KQorQUREX1dLMl9URVNUKFRlc3RXZWJzaXRlRGF0YSBUZXN0V2Vic2l0ZURhdGEuY3BwKQogQURE
X1dLMl9URVNUKFRlc3RFZGl0b3IgVGVzdEVkaXRvci5jcHApCiBBRERfV0syX1RFU1QoVGVzdENv
bnNvbGVNZXNzYWdlIFRlc3RDb25zb2xlTWVzc2FnZS5jcHApCiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRl
eHQuY3BwCmluZGV4IDMxNGU3ODAzMzlhLi4xOTdiNzc3MTdiMCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNv
bnRleHQuY3BwCkBAIC00MCw4OCArNDAsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERl
ZmF1bHQoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2RlZmF1bHQoKSAhPSB0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkpOwogfQog
Ci1zdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dENvbmZpZ3VyYXRpb24oV2ViVmlld1Rlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5h
Z2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5t
X3dlYkNvbnRleHQuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJTSVRFX0RBVEFf
TUFOQUdFUihtYW5hZ2VyKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyhHX09CSkVDVChtYW5hZ2VyKSk7Ci0KLSAgICAvLyBCYXNlIGRpcmVjdG9yaWVz
IGFyZSBub3QgdXNlZCBieSBUZXN0TWFpbi4KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2RhdGFfZGlyZWN0b3J5KG1hbmFnZXIpKTsKLSAgICBnX2Fz
c2VydCghd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2NhY2hlX2RpcmVjdG9y
eShtYW5hZ2VyKSk7Ci0KLSAgICBHVW5pcXVlUHRyPGNoYXI+IGxvY2FsU3RvcmFnZURpcmVjdG9y
eShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgImxvY2FsLXN0b3JhZ2Ui
LCBudWxscHRyKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGxvY2FsU3RvcmFnZURpcmVjdG9yeS5n
ZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9jYWxfc3RvcmFnZV9k
aXJlY3RvcnkobWFuYWdlcikpOwotICAgIGdfYXNzZXJ0KGdfZmlsZV90ZXN0KGxvY2FsU3RvcmFn
ZURpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfRElSKSk7Ci0KLSAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lbXB0eSIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRV
bnRpbEZpbmlzaGVkKCJ3aW5kb3cuaW5kZXhlZERCLm9wZW4oJ1Rlc3REYXRhYmFzZScpOyIsIG51
bGxwdHIpOwotICAgIEdVbmlxdWVQdHI8Y2hhcj4gaW5kZXhlZERCRGlyZWN0b3J5KGdfYnVpbGRf
ZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiaW5kZXhlZGRiIiwgbnVsbHB0cikpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihpbmRleGVkREJEaXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3RvcnkobWFuYWdlcikpOwot
ICAgIGdfYXNzZXJ0KGdfZmlsZV90ZXN0KGluZGV4ZWREQkRpcmVjdG9yeS5nZXQoKSwgR19GSUxF
X1RFU1RfSVNfRElSKSk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9hcHBjYWNoZSIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KGdfYnVp
bGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiYXBwY2FjaGUiLCBudWxscHRyKSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0KCksID09
LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25fY2Fj
aGVfZGlyZWN0b3J5KG1hbmFnZXIpKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IGFwcGxpY2F0aW9u
Q2FjaGVEYXRhYmFzZShnX2J1aWxkX2ZpbGVuYW1lKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rvcnku
Z2V0KCksICJBcHBsaWNhdGlvbkNhY2hlLmRiIiwgbnVsbHB0cikpOwotICAgIHVuc2lnbmVkIHRy
aWVzQ291bnQgPSA0OwotICAgIHdoaWxlICghZ19maWxlX3Rlc3QoYXBwbGljYXRpb25DYWNoZURh
dGFiYXNlLmdldCgpLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSAmJiAtLXRyaWVzQ291bnQpCi0g
ICAgICAgIHRlc3QtPndhaXQoMC4yNSk7Ci0gICAgZ19hc3NlcnQodHJpZXNDb3VudCk7Ci0KLQot
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gd2ViU1FMRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVz
dDo6ZGF0YURpcmVjdG9yeSgpLCAid2Vic3FsIiwgbnVsbHB0cikpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJTUUxEaXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkobWFuYWdlcikpOwotICAgIHRlc3QtPnJ1bkphdmFTY3Jp
cHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZGIgPSBvcGVuRGF0YWJhc2UoXCJUZXN0RGF0YWJhc2Vc
IiwgXCIxLjBcIiwgXCJUZXN0RGF0YWJhc2VcIiwgMSk7IiwgbnVsbHB0cik7Ci0gICAgZ19hc3Nl
cnQoZ19maWxlX3Rlc3Qod2ViU1FMRGlyZWN0b3J5LmdldCgpLCBHX0ZJTEVfVEVTVF9JU19ESVIp
KTsKLQotICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGlza0NhY2hlRGlyZWN0b3J5KGdfYnVpbGRfZmls
ZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiZGlzay1jYWNoZSIsIG51bGxwdHIpKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIoZGlza0NhY2hlRGlyZWN0b3J5LmdldCgpLCA9PSwgd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShtYW5hZ2VyKSk7Ci0g
ICAgZ19hc3NlcnQoZ19maWxlX3Rlc3QoZGlza0NhY2hlRGlyZWN0b3J5LmdldCgpLCBHX0ZJTEVf
VEVTVF9JU19ESVIpKTsKLQotICAgIC8vIFRoZSBkZWZhdWx0IGNvbnRleHQgc2hvdWxkIGhhdmUg
YSBkaWZmZXJlbnQgbWFuYWdlciB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9uLgotICAgIFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGVmYXVsdE1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVs
dCgpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIoZGVmYXVs
dE1hbmFnZXIpKTsKLSAgICBnX2Fzc2VydChtYW5hZ2VyICE9IGRlZmF1bHRNYW5hZ2VyKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9sb2NhbF9z
dG9yYWdlX2RpcmVjdG9yeShtYW5hZ2VyKSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfbG9jYWxfc3RvcmFnZV9kaXJlY3RvcnkoZGVmYXVsdE1hbmFnZXIpKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pbmRleGVkZGJfZGly
ZWN0b3J5KG1hbmFnZXIpLCAhPSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pbmRl
eGVkZGJfZGlyZWN0b3J5KGRlZmF1bHRNYW5hZ2VyKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkobWFuYWdl
ciksICE9LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0
b3J5KGRlZmF1bHRNYW5hZ2VyKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkobWFu
YWdlciksICE9LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGlj
YXRpb25fY2FjaGVfZGlyZWN0b3J5KGRlZmF1bHRNYW5hZ2VyKSk7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeShtYW5h
Z2VyKSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9y
eShkZWZhdWx0TWFuYWdlcikpOwotCi0gICAgLy8gVXNpbmcgVGVzdDo6ZGF0YURpcmVjdG9yeSgp
IHdlIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGJ1dCBmb3IgYSBkaWZmZXJyZW50IHBy
ZWZpeC4KLSAgICBHUmVmUHRyPFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcj4gYmFzZURhdGFNYW5h
Z2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImJhc2UtZGF0
YS1kaXJlY3RvcnkiLCBUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJiYXNlLWNhY2hlLWRpcmVjdG9y
eSIsIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgbnVsbHB0cikpOwotICAgIGdfYXNzZXJ0KFdFQktJ
VF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihiYXNlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKLQotICAg
IGxvY2FsU3RvcmFnZURpcmVjdG9yeS5yZXNldChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmRhdGFE
aXJlY3RvcnkoKSwgImxvY2Fsc3RvcmFnZSIsIG51bGxwdHIpKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9y
eShiYXNlRGF0YU1hbmFnZXIuZ2V0KCkpLCA9PSwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5LmdldCgp
KTsKLQotICAgIGluZGV4ZWREQkRpcmVjdG9yeS5yZXNldChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6
OmRhdGFEaXJlY3RvcnkoKSwgImRhdGFiYXNlcyIsICJpbmRleGVkZGIiLCBudWxscHRyKSk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhl
ZGRiX2RpcmVjdG9yeShiYXNlRGF0YU1hbmFnZXIuZ2V0KCkpLCA9PSwgaW5kZXhlZERCRGlyZWN0
b3J5LmdldCgpKTsKLQotICAgIGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkucmVzZXQoZ19idWls
ZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJhcHBsaWNhdGlvbnMiLCBudWxscHRy
KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
b2ZmbGluZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkoYmFzZURhdGFNYW5hZ2VyLmdldCgp
KSwgPT0sIGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0KCkpOwotCi0gICAgd2ViU1FMRGly
ZWN0b3J5LnJlc2V0KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiZGF0
YWJhc2VzIiwgbnVsbHB0cikpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkoYmFzZURhdGFNYW5hZ2VyLmdldCgpKSwg
PT0sIHdlYlNRTERpcmVjdG9yeS5nZXQoKSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShiYXNlRGF0YU1h
bmFnZXIuZ2V0KCkpLCA9PSwgVGVzdDo6ZGF0YURpcmVjdG9yeSgpKTsKLQotICAgIC8vIEFueSBz
cGVjaWZpYyBjb25maWd1cmF0aW9uIHByb3ZpZGVkIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBiYXNl
IGRpcnMuCi0gICAgaW5kZXhlZERCRGlyZWN0b3J5LnJlc2V0KGdfYnVpbGRfZmlsZW5hbWUoVGVz
dDo6ZGF0YURpcmVjdG9yeSgpLCAibXljdXN0b21pbmRleGVkZGIiLCBudWxscHRyKSk7Ci0gICAg
YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeS5yZXNldChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmRh
dGFEaXJlY3RvcnkoKSwgIm15Y3VzdG9tYXBwY2FjaGUiLCBudWxscHRyKSk7Ci0gICAgYmFzZURh
dGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcoImJh
c2UtZGF0YS1kaXJlY3RvcnkiLCBUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJiYXNlLWNhY2hlLWRp
cmVjdG9yeSIsIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwKLSAgICAgICAgImluZGV4ZWRkYi1kaXJl
Y3RvcnkiLCBpbmRleGVkREJEaXJlY3RvcnkuZ2V0KCksICJvZmZsaW5lLWFwcGxpY2F0aW9uLWNh
Y2hlLWRpcmVjdG9yeSIsIGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0KCksIG51bGxwdHIp
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9p
bmRleGVkZGJfZGlyZWN0b3J5KGJhc2VEYXRhTWFuYWdlci5nZXQoKSksID09LCBpbmRleGVkREJE
aXJlY3RvcnkuZ2V0KCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25fY2FjaGVfZGlyZWN0b3J5KGJhc2VEYXRh
TWFuYWdlci5nZXQoKSksID09LCBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LmdldCgpKTsKLSAg
ICAvLyBUaGUgcmVzdXRsIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBwcmV2aW91cyBtYW5hZ2VyLgot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2Fs
X3N0b3JhZ2VfZGlyZWN0b3J5KGJhc2VEYXRhTWFuYWdlci5nZXQoKSksID09LCBsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkuZ2V0KCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkoYmFzZURhdGFNYW5hZ2VyLmdldCgpKSwg
PT0sIHdlYlNRTERpcmVjdG9yeS5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkoYmFzZURhdGFNYW5h
Z2VyLmdldCgpKSwgPT0sIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSk7Ci19Ci0KIGNsYXNzIFBsdWdp
bnNUZXN0OiBwdWJsaWMgVGVzdCB7CiBwdWJsaWM6CiAgICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShQbHVnaW5zVGVzdCk7CkBAIC01MzYsMjAgKzQ1NCw2IEBAIHN0YXRpYyB2b2lkIHNlcnZlckNh
bGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNo
YXIqCiAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9i
b2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGVtcHR5SFRNTCwgc3RybGVuKGVtcHR5SFRNTCkpOwog
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5
KTsKICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
T0spOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9hcHBjYWNoZSIpKSB7Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIGFwcGNhY2hlSFRNTCA9ICI8aHRtbCBtYW5pZmVzdD1hcHBjYWNo
ZS5tYW5pZmVzdD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGFw
cGNhY2hlSFRNTCwgc3RybGVuKGFwcGNhY2hlSFRNTCkpOwotICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgIH0gZWxzZSBpZiAo
Z19zdHJfZXF1YWwocGF0aCwgIi9hcHBjYWNoZS5tYW5pZmVzdCIpKSB7Ci0gICAgICAgIGNvbnN0
IGNoYXIqIGFwcGNhY2hlTWFuaWZlc3QgPSAiQ0FDSEUgTUFOSUZFU1RcbkNBQ0hFOlxuYXBwY2Fj
aGUvZm9vLnR4dFxuIjsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXBwY2FjaGVNYW5pZmVzdCwgc3Ry
bGVuKGFwcGNhY2hlTWFuaWZlc3QpKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxl
dGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHBhdGgsICIvYXBwY2FjaGUvZm9vLnR4dCIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsICJmb28i
LCAzKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX09LKTsKICAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZWNob1BvcnQi
KSkgewogICAgICAgICBjaGFyKiBwb3J0ID0gZ19zdHJkdXBfcHJpbnRmKCIldSIsIHNvdXBfc2Vy
dmVyX2dldF9wb3J0KHNlcnZlcikpOwogICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQo
bWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgcG9ydCwgc3RybGVuKHBv
cnQpKTsKQEAgLTc5NSw3ICs2OTksNiBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAga1NlcnZlci0+
cnVuKHNlcnZlckNhbGxiYWNrKTsKIAogICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIs
ICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViQ29udGV4dERlZmF1bHQpOwotICAgIFdlYlZpZXdU
ZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiY29uZmlndXJhdGlvbiIsIHRlc3RXZWJDb250
ZXh0Q29uZmlndXJhdGlvbik7CiAgICAgUGx1Z2luc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4
dCIsICJnZXQtcGx1Z2lucyIsIHRlc3RXZWJDb250ZXh0R2V0UGx1Z2lucyk7CiAgICAgVVJJU2No
ZW1lVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgInVyaS1zY2hlbWUiLCB0ZXN0V2ViQ29u
dGV4dFVSSVNjaGVtZSk7CiAgICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgInNwZWxs
LWNoZWNrZXIiLCB0ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcik7CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYnNpdGVEYXRhLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2Vic2l0ZURhdGEuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNjkwMmMwNTA1NQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2Vi
c2l0ZURhdGEuY3BwCkBAIC0wLDAgKzEsNDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJLaXRUZXN0
U2VydmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKworc3RhdGljIFdlYktpdFRlc3RT
ZXJ2ZXIqIGtTZXJ2ZXI7CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIq
IHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFi
bGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5t
ZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9lbXB0eSIpKSB7CisgICAg
ICAgIGNvbnN0IGNoYXIqIGVtcHR5SFRNTCA9ICI8aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPiI7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9TVEFUSUMsIGVtcHR5SFRNTCwgc3RybGVuKGVtcHR5SFRNTCkpOworICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsK
KyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0sp
OworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9hcHBjYWNoZSIpKSB7CisgICAg
ICAgIGNvbnN0IGNoYXIqIGFwcGNhY2hlSFRNTCA9ICI8aHRtbCBtYW5pZmVzdD1hcHBjYWNoZS5t
YW5pZmVzdD48Ym9keT48L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGFwcGNh
Y2hlSFRNTCwgc3RybGVuKGFwcGNhY2hlSFRNTCkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9k
eV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIH0gZWxzZSBpZiAoZ19z
dHJfZXF1YWwocGF0aCwgIi9hcHBjYWNoZS5tYW5pZmVzdCIpKSB7CisgICAgICAgIGNvbnN0IGNo
YXIqIGFwcGNhY2hlTWFuaWZlc3QgPSAiQ0FDSEUgTUFOSUZFU1RcbkNBQ0hFOlxuYXBwY2FjaGUv
Zm9vLnR4dFxuIjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJl
c3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXBwY2FjaGVNYW5pZmVzdCwgc3RybGVu
KGFwcGNhY2hlTWFuaWZlc3QpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUo
bWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBh
dGgsICIvYXBwY2FjaGUvZm9vLnR4dCIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsICJmb28iLCAz
KTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX09LKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvc2Vzc2lvbnN0b3Jh
Z2UiKSkgeworICAgICAgICBjb25zdCBjaGFyKiBzZXNzaW9uU3RvcmFnZUhUTUwgPSAiPGh0bWw+
PGJvZHkgb25sb2FkPVwic2Vzc2lvblN0b3JhZ2UuZm9vID0gJ2Jhcic7XCI+PC9ib2R5PjwvaHRt
bD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfU1RBVElDLCBzZXNzaW9uU3RvcmFnZUhUTUwsIHN0cmxlbihzZXNz
aW9uU3RvcmFnZUhUTUwpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvbG9jYWxzdG9yYWdlIikpIHsKKyAgICAgICAgY29uc3QgY2hhciogbG9jYWxTdG9yYWdlSFRN
TCA9ICI8aHRtbD48Ym9keSBvbmxvYWQ9XCJsb2NhbFN0b3JhZ2UuZm9vID0gJ2Jhcic7XCI+PC9i
b2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBsb2NhbFN0b3JhZ2VIVE1MLCBzdHJs
ZW4obG9jYWxTdG9yYWdlSFRNTCkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0
ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIH0gZWxzZQorICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworfQorCitj
bGFzcyBXZWJzaXRlRGF0YVRlc3QgOiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoV2Vic2l0ZURhdGFUZXN0KTsKKworCisgICAgV2Vic2l0
ZURhdGFUZXN0KCkKKyAgICAgICAgOiBtX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF93
ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3
KSkpCisgICAgeworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFH
RVIobV9tYW5hZ2VyKSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1QobV9tYW5hZ2VyKSk7CisgICAgICAgIC8vIFdlYnNpdGVEYXRhU3RvcmUg
Y3JlYXRlcyBhIG5ldyBXZWJQcm9jZXNzUG9vbCB3aGVuIHVzZWQgYmVmb3JlIGFueSBzZWNvbmRh
cnkgcHJvY2VzcyBoYXMgYmVlbiBjcmVhdGVkLgorICAgICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBh
IHdlYiBwcm9jZXNzIGJ5IGFsd2F5cyBsb2FkaW5nIGFib3V0OmJsYW5rIGhlcmUuCisgICAgICAg
IGxvYWRVUkkoImFib3V0OmJsYW5rIik7CisgICAgICAgIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworICAgIH0KKworICAgIH5XZWJzaXRlRGF0YVRlc3QoKQorICAgIHsKKyAgICAgICAgZ19saXN0
X2ZyZWVfZnVsbChtX2RhdGFMaXN0LCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pih3
ZWJraXRfd2Vic2l0ZV9kYXRhX3VucmVmKSk7CisgICAgfQorCisgICAgR0xpc3QqIGZldGNoKFdl
YktpdFdlYnNpdGVEYXRhVHlwZXMgdHlwZXMpCisgICAgeworICAgICAgICBpZiAobV9kYXRhTGlz
dCkgeworICAgICAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChtX2RhdGFMaXN0LCByZWludGVycHJl
dF9jYXN0PEdEZXN0cm95Tm90aWZ5Pih3ZWJraXRfd2Vic2l0ZV9kYXRhX3VucmVmKSk7CisgICAg
ICAgICAgICBtX2RhdGFMaXN0ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2gobV9tYW5hZ2VyLCB0eXBlcywgbnVsbHB0ciwgW10o
R09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAg
ICAgICAgICAgV2Vic2l0ZURhdGFUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8V2Vic2l0ZURhdGFU
ZXN0Kj4odXNlckRhdGEpOworICAgICAgICAgICAgdGVzdC0+bV9kYXRhTGlzdCA9IHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9mZXRjaF9maW5pc2godGVzdC0+bV9tYW5hZ2VyLCByZXN1bHQs
IG51bGxwdHIpOworICAgICAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgICAgIH0s
IHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJl
dHVybiBtX2RhdGFMaXN0OworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlKFdlYktpdFdlYnNpdGVE
YXRhVHlwZXMgdHlwZXMsIEdMaXN0KiBkYXRhTGlzdCkKKyAgICB7CisgICAgICAgIHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9yZW1vdmUobV9tYW5hZ2VyLCB0eXBlcywgZGF0YUxpc3QsIG51
bGxwdHIsIFtdKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRh
dGEpIHsKKyAgICAgICAgICAgIFdlYnNpdGVEYXRhVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PFdl
YnNpdGVEYXRhVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9yZW1vdmVfZmluaXNoKHRlc3QtPm1fbWFuYWdlciwgcmVzdWx0
LCBudWxscHRyKSk7CisgICAgICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAgICAgICAg
fSwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisK
KyAgICB2b2lkIGNsZWFyKFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgdHlwZXMsIEdUaW1lU3BhbiB0
aW1lU3BhbikKKyAgICB7CisgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVh
cihtX21hbmFnZXIsIHR5cGVzLCB0aW1lU3BhbiwgbnVsbHB0ciwgW10oR09iamVjdCosIEdBc3lu
Y1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgV2Vic2l0
ZURhdGFUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8V2Vic2l0ZURhdGFUZXN0Kj4odXNlckRhdGEp
OworICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFy
X2ZpbmlzaCh0ZXN0LT5tX21hbmFnZXIsIHJlc3VsdCwgbnVsbHB0cikpOworICAgICAgICAgICAg
dGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgICAgIH0sIHRoaXMpOworICAgICAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyKiBtX21hbmFnZXI7CisgICAgR0xpc3QqIG1fZGF0YUxpc3QgeyBudWxscHRyIH07Cit9Owor
CitzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9uKFdlYnNpdGVEYXRhVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBCYXNlIGRpcmVjdG9yaWVzIGFyZSBu
b3QgdXNlZCBieSBUZXN0TWFpbi4KKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2dldF9iYXNlX2RhdGFfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlcikpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2FjaGVfZGlyZWN0
b3J5KHRlc3QtPm1fbWFuYWdlcikpOworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJsb2Nh
bC1zdG9yYWdlIiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihsb2NhbFN0b3JhZ2VE
aXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2Fs
X3N0b3JhZ2VfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlcikpOworICAgIGdfYXNzZXJ0KGdfZmls
ZV90ZXN0KGxvY2FsU3RvcmFnZURpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfRElSKSk7
CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lbXB0eSIpLmRh
dGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgdGVzdC0+cnVu
SmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuaW5kZXhlZERCLm9wZW4oJ1Rl
c3REYXRhYmFzZScpOyIsIG51bGxwdHIpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gaW5kZXhlZERC
RGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiaW5kZXhl
ZGRiIiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpbmRleGVkREJEaXJlY3Rvcnku
Z2V0KCksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJl
Y3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7CisgICAgZ19hc3NlcnQoZ19maWxlX3Rlc3QoaW5kZXhl
ZERCRGlyZWN0b3J5LmdldCgpLCBHX0ZJTEVfVEVTVF9JU19ESVIpKTsKKworICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gd2ViU1FMRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVj
dG9yeSgpLCAid2Vic3FsIiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJTUUxE
aXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3dlYnNx
bF9kaXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7CisgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCJkYiA9IG9wZW5EYXRhYmFzZShcIlRlc3REYXRhYmFzZVwiLCBc
IjEuMFwiLCBcIlRlc3REYXRhYmFzZVwiLCAxKTsiLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydChn
X2ZpbGVfdGVzdCh3ZWJTUUxEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9URVNUX0lTX0RJUikpOwor
CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXBwY2FjaGUiKS5k
YXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6
OmRhdGFEaXJlY3RvcnkoKSwgImFwcGNhY2hlIiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LmdldCgpLCA9PSwgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2RpcmVjdG9yeSh0ZXN0
LT5tX21hbmFnZXIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGFwcGxpY2F0aW9uQ2FjaGVEYXRh
YmFzZShnX2J1aWxkX2ZpbGVuYW1lKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0KCksICJB
cHBsaWNhdGlvbkNhY2hlLmRiIiwgbnVsbHB0cikpOworICAgIHVuc2lnbmVkIHRyaWVzQ291bnQg
PSA0OworICAgIHdoaWxlICghZ19maWxlX3Rlc3QoYXBwbGljYXRpb25DYWNoZURhdGFiYXNlLmdl
dCgpLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSAmJiAtLXRyaWVzQ291bnQpCisgICAgICAgIHRl
c3QtPndhaXQoMC4yNSk7CisgICAgZ19hc3NlcnQodHJpZXNDb3VudCk7CisKKyAgICBHVW5pcXVl
UHRyPGNoYXI+IGRpc2tDYWNoZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmRhdGFE
aXJlY3RvcnkoKSwgImRpc2stY2FjaGUiLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KGRpc2tDYWNoZURpcmVjdG9yeS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7CisgICAgZ19hc3Nl
cnQoZ19maWxlX3Rlc3QoZGlza0NhY2hlRGlyZWN0b3J5LmdldCgpLCBHX0ZJTEVfVEVTVF9JU19E
SVIpKTsKKworICAgIC8vIENsZWFyIGFsbCBwZXJzaXN0ZW50IGNhY2hlcywgc2luY2UgdGhlIGRh
dGEgZGlyIGlzIGNvbW1vbiB0byBhbGwgdGVzdCBjYXNlcy4KKyAgICBzdGF0aWMgY29uc3QgV2Vi
S2l0V2Vic2l0ZURhdGFUeXBlcyBwZXJzaXN0ZW50Q2FjaGVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0
V2Vic2l0ZURhdGFUeXBlcz4oV0VCS0lUX1dFQlNJVEVfREFUQV9ESVNLX0NBQ0hFIHwgV0VCS0lU
X1dFQlNJVEVfREFUQV9MT0NBTF9TVE9SQUdFCisgICAgICAgIHwgV0VCS0lUX1dFQlNJVEVfREFU
QV9XRUJTUUxfREFUQUJBU0VTIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFUQUJB
U0VTIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9PRkZMSU5FX0FQUExJQ0FUSU9OX0NBQ0hFKTsKKyAg
ICB0ZXN0LT5jbGVhcihwZXJzaXN0ZW50Q2FjaGVzLCAwKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+
ZmV0Y2gocGVyc2lzdGVudENhY2hlcykpOworCisgICAgLy8gVGhlIGRlZmF1bHQgY29udGV4dCBz
aG91bGQgaGF2ZSBhIGRpZmZlcmVudCBtYW5hZ2VyIHdpdGggZGlmZmVyZW50IGNvbmZpZ3VyYXRp
b24uCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkZWZhdWx0TWFuYWdlciA9IHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0
X2dldF9kZWZhdWx0KCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFO
QUdFUihkZWZhdWx0TWFuYWdlcikpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWFuYWdlciAhPSBk
ZWZhdWx0TWFuYWdlcik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9nZXRfbG9jYWxfc3RvcmFnZV9kaXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSwgIT0s
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9jYWxfc3RvcmFnZV9kaXJlY3Rvcnko
ZGVmYXVsdE1hbmFnZXIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF9pbmRleGVkZGJfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlciksICE9LCB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3RvcnkoZGVmYXVs
dE1hbmFnZXIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSh0ZXN0LT5tX21hbmFnZXIpLCAhPSwgd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShkZWZhdWx0TWFu
YWdlcikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Z2V0X29mZmxpbmVfYXBwbGljYXRpb25fY2FjaGVfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlciks
ICE9LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25f
Y2FjaGVfZGlyZWN0b3J5KGRlZmF1bHRNYW5hZ2VyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeSh0ZXN0LT5tX21h
bmFnZXIpLCAhPSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0
b3J5KGRlZmF1bHRNYW5hZ2VyKSk7CisKKyAgICAvLyBVc2luZyBUZXN0OjpkYXRhRGlyZWN0b3J5
KCkgd2UgZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYnV0IGZvciBhIGRpZmZlcnJlbnQg
cHJlZml4LgorICAgIEdSZWZQdHI8V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyPiBiYXNlRGF0YU1h
bmFnZXIgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygiYmFzZS1k
YXRhLWRpcmVjdG9yeSIsIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgImJhc2UtY2FjaGUtZGlyZWN0
b3J5IiwgVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKGJhc2VEYXRhTWFuYWdlci5nZXQoKSkpOworCisg
ICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5LnJlc2V0KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0
YURpcmVjdG9yeSgpLCAibG9jYWxzdG9yYWdlIiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2VfZGlyZWN0
b3J5KGJhc2VEYXRhTWFuYWdlci5nZXQoKSksID09LCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZ2V0
KCkpOworCisgICAgaW5kZXhlZERCRGlyZWN0b3J5LnJlc2V0KGdfYnVpbGRfZmlsZW5hbWUoVGVz
dDo6ZGF0YURpcmVjdG9yeSgpLCAiZGF0YWJhc2VzIiwgImluZGV4ZWRkYiIsIG51bGxwdHIpKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pbmRl
eGVkZGJfZGlyZWN0b3J5KGJhc2VEYXRhTWFuYWdlci5nZXQoKSksID09LCBpbmRleGVkREJEaXJl
Y3RvcnkuZ2V0KCkpOworCisgICAgYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeS5yZXNldChnX2J1
aWxkX2ZpbGVuYW1lKFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgImFwcGxpY2F0aW9ucyIsIG51bGxw
dHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dl
dF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2RpcmVjdG9yeShiYXNlRGF0YU1hbmFnZXIuZ2V0
KCkpLCA9PSwgYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeS5nZXQoKSk7CisKKyAgICB3ZWJTUUxE
aXJlY3RvcnkucmVzZXQoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJk
YXRhYmFzZXMiLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeShiYXNlRGF0YU1hbmFnZXIuZ2V0KCkp
LCA9PSwgd2ViU1FMRGlyZWN0b3J5LmdldCgpKTsKKworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KGJhc2VEYXRh
TWFuYWdlci5nZXQoKSksID09LCBUZXN0OjpkYXRhRGlyZWN0b3J5KCkpOworCisgICAgLy8gQW55
IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGJh
c2UgZGlycy4KKyAgICBpbmRleGVkREJEaXJlY3RvcnkucmVzZXQoZ19idWlsZF9maWxlbmFtZShU
ZXN0OjpkYXRhRGlyZWN0b3J5KCksICJteWN1c3RvbWluZGV4ZWRkYiIsIG51bGxwdHIpKTsKKyAg
ICBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LnJlc2V0KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6
ZGF0YURpcmVjdG9yeSgpLCAibXljdXN0b21hcHBjYWNoZSIsIG51bGxwdHIpKTsKKyAgICBiYXNl
RGF0YU1hbmFnZXIgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygi
YmFzZS1kYXRhLWRpcmVjdG9yeSIsIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgImJhc2UtY2FjaGUt
ZGlyZWN0b3J5IiwgVGVzdDo6ZGF0YURpcmVjdG9yeSgpLAorICAgICAgICAiaW5kZXhlZGRiLWRp
cmVjdG9yeSIsIGluZGV4ZWREQkRpcmVjdG9yeS5nZXQoKSwgIm9mZmxpbmUtYXBwbGljYXRpb24t
Y2FjaGUtZGlyZWN0b3J5IiwgYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeS5nZXQoKSwgbnVsbHB0
cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0
X2luZGV4ZWRkYl9kaXJlY3RvcnkoYmFzZURhdGFNYW5hZ2VyLmdldCgpKSwgPT0sIGluZGV4ZWRE
QkRpcmVjdG9yeS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkoYmFzZURh
dGFNYW5hZ2VyLmdldCgpKSwgPT0sIGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0KCkpOwor
ICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHByZXZpb3VzIG1hbmFnZXIu
CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9j
YWxfc3RvcmFnZV9kaXJlY3RvcnkoYmFzZURhdGFNYW5hZ2VyLmdldCgpKSwgPT0sIGxvY2FsU3Rv
cmFnZURpcmVjdG9yeS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeShiYXNlRGF0YU1hbmFnZXIuZ2V0KCkp
LCA9PSwgd2ViU1FMRGlyZWN0b3J5LmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShiYXNlRGF0YU1h
bmFnZXIuZ2V0KCkpLCA9PSwgVGVzdDo6ZGF0YURpcmVjdG9yeSgpKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdFdlYnNpdGVEYXRhQ2FjaGUoV2Vic2l0ZURhdGFUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIHN0YXRpYyBjb25zdCBXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIGNhY2hlVHlw
ZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YVR5cGVzPihXRUJLSVRfV0VCU0lURV9E
QVRBX01FTU9SWV9DQUNIRSB8IFdFQktJVF9XRUJTSVRFX0RBVEFfRElTS19DQUNIRSk7CisgICAg
R0xpc3QqIGRhdGFMaXN0ID0gdGVzdC0+ZmV0Y2goY2FjaGVUeXBlcyk7CisgICAgZ19hc3NlcnQo
IWRhdGFMaXN0KTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2VtcHR5IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIC8vIERpc2sgY2FjaGUgZGVsYXlzIHRoZSBzdG9yaW5nIG9mIGluaXRpYWwgcmVzb3VyY2Vz
IGZvciAxIHNlY29uZCB0byBhdm9pZAorICAgIC8vIGFmZmVjdGluZyBlYXJseSBwYWdlIGxvYWQu
IFNvLCB3YWl0IDEgc2Vjb25kIGhlcmUgdG8gbWFrZSBzdXJlIHJlc291cmNlcworICAgIC8vIGhh
dmUgYWxyZWFkeSBiZWVuIHN0b3JlZC4KKyAgICB0ZXN0LT53YWl0KDEpOworCisgICAgZGF0YUxp
c3QgPSB0ZXN0LT5mZXRjaChjYWNoZVR5cGVzKTsKKyAgICBnX2Fzc2VydChkYXRhTGlzdCk7Cisg
ICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3RoKGRhdGFMaXN0KSwgPT0sIDEpOworICAg
IFdlYktpdFdlYnNpdGVEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGEq
PihkYXRhTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnQoZGF0YSk7CisgICAgV2ViS2l0U2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3X2Zvcl91cmkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJzaXRlX2RhdGFfZ2V0X25hbWUoZGF0YSksID09LCB3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9ob3N0KG9yaWdpbikpOworICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fdW5yZWYo
b3JpZ2luKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3R5
cGVzKGRhdGEpLCA9PSwgY2FjaGVUeXBlcyk7CisgICAgLy8gTWVtb3J5IGNhY2hlIHNpemUgaXMg
dW5rbm93bi4KKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3Np
emUoZGF0YSwgV0VCS0lUX1dFQlNJVEVfREFUQV9NRU1PUllfQ0FDSEUpLCA9PSwgMCk7CisgICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfd2Vic2l0ZV9kYXRhX2dldF9zaXplKGRhdGEsIFdFQktJ
VF9XRUJTSVRFX0RBVEFfRElTS19DQUNIRSksID4sIDApOworCisgICAgLy8gVHJ5IGFnYWluIGJ1
dCBvbmx5IGdldHRpbmcgZGlzayBjYWNoZS4KKyAgICBkYXRhTGlzdCA9IHRlc3QtPmZldGNoKFdF
QktJVF9XRUJTSVRFX0RBVEFfRElTS19DQUNIRSk7CisgICAgZ19hc3NlcnQoZGF0YUxpc3QpOwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19saXN0X2xlbmd0aChkYXRhTGlzdCksID09LCAxKTsKKyAg
ICBkYXRhID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGEqPihkYXRhTGlzdC0+ZGF0YSk7
CisgICAgZ19hc3NlcnQoZGF0YSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYnNpdGVfZGF0YV9n
ZXRfdHlwZXMoZGF0YSkgJiBXRUJLSVRfV0VCU0lURV9EQVRBX0RJU0tfQ0FDSEUpOworICAgIGdf
YXNzZXJ0KCEod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfdHlwZXMoZGF0YSkgJiBXRUJLSVRfV0VC
U0lURV9EQVRBX01FTU9SWV9DQUNIRSkpOworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBmaWxlVVJM
KGdfc3RyZHVwX3ByaW50ZigiZmlsZTovLyVzL3NpbXBsZS5odG1sIiwgVGVzdDo6Z2V0UmVzb3Vy
Y2VzRGlyKFRlc3Q6OldlYktpdDJSZXNvdXJjZXMpLmRhdGEoKSkpOworICAgIHRlc3QtPmxvYWRV
UkkoZmlsZVVSTC5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICBmaWxlVVJMLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiZmlsZTovLyVzL3NpbXBsZTIuaHRt
bCIsIFRlc3Q6OmdldFJlc291cmNlc0RpcihUZXN0OjpXZWJLaXQyUmVzb3VyY2VzKS5kYXRhKCkp
KTsKKyAgICB0ZXN0LT5sb2FkVVJJKGZpbGVVUkwuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgLy8gTG9jYWwgZmlsZXMgYXJlIGdyb3VwZWQuCisgICAg
ZGF0YUxpc3QgPSB0ZXN0LT5mZXRjaChjYWNoZVR5cGVzKTsKKyAgICBnX2Fzc2VydChkYXRhTGlz
dCk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3RoKGRhdGFMaXN0KSwgPT0sIDIp
OworICAgIEdMaXN0KiBpdGVtTGlzdCA9IGdfbGlzdF9maW5kX2N1c3RvbShkYXRhTGlzdCwgbnVs
bHB0ciwgW10oZ2NvbnN0cG9pbnRlciBpdGVtLCBnY29uc3Rwb2ludGVyKSAtPiBpbnQgeworICAg
ICAgICBXZWJLaXRXZWJzaXRlRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFdlYktpdFdlYnNpdGVE
YXRhKj4oY29uc3RfY2FzdDxncG9pbnRlcj4oaXRlbSkpOworICAgICAgICByZXR1cm4gZ19zdHJj
bXAwKHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X25hbWUoZGF0YSksICJMb2NhbCBmaWxlcyIpOwor
ICAgIH0pOworICAgIGdfYXNzZXJ0KGl0ZW1MaXN0KTsKKyAgICBkYXRhID0gc3RhdGljX2Nhc3Q8
V2ViS2l0V2Vic2l0ZURhdGEqPihpdGVtTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnQoZGF0YSk7
CisgICAgZ19hc3NlcnQod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfdHlwZXMoZGF0YSkgJiBXRUJL
SVRfV0VCU0lURV9EQVRBX01FTU9SWV9DQUNIRSk7CisgICAgLy8gTG9jYWwgZmlsZXMgYXJlIG5l
dmVyIHN0b3JlZCBpbiBkaXNrIGNhY2hlLgorICAgIGdfYXNzZXJ0KCEod2Via2l0X3dlYnNpdGVf
ZGF0YV9nZXRfdHlwZXMoZGF0YSkgJiBXRUJLSVRfV0VCU0lURV9EQVRBX0RJU0tfQ0FDSEUpKTsK
KworICAgIC8vIENsZWFyIGRhdGEgbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QgbWljcm9zZWNvbmQg
c2hvdWxkIG5vdCBjbGVhciBhbnl0aGluZy4KKyAgICAvLyBVc2UgZGlzay1jYWNoZSBiZWNhdXNl
IG1lbW9yeSBjYWNoZSBpZ25vcmVzIHRoZSBtb2RpZmllZCBzaW5jZS4KKyAgICB0ZXN0LT5jbGVh
cihXRUJLSVRfV0VCU0lURV9EQVRBX0RJU0tfQ0FDSEUsIDEpOworICAgIGRhdGFMaXN0ID0gdGVz
dC0+ZmV0Y2goY2FjaGVUeXBlcyk7CisgICAgZ19hc3NlcnQoZGF0YUxpc3QpOworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoZ19saXN0X2xlbmd0aChkYXRhTGlzdCksID09LCAyKTsKKworICAgIC8vIFJl
bW92ZSBtZW1vcnkgY2FjaGUgb25seSBmb3IgbG9jYWwgZmlsZXMuCisgICAgaXRlbUxpc3QgPSBn
X2xpc3RfZmluZF9jdXN0b20oZGF0YUxpc3QsIG51bGxwdHIsIFtdKGdjb25zdHBvaW50ZXIgaXRl
bSwgZ2NvbnN0cG9pbnRlcikgLT4gaW50IHsKKyAgICAgICAgV2ViS2l0V2Vic2l0ZURhdGEqIGRh
dGEgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YSo+KGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+
KGl0ZW0pKTsKKyAgICAgICAgcmV0dXJuIGdfc3RyY21wMCh3ZWJraXRfd2Vic2l0ZV9kYXRhX2dl
dF9uYW1lKGRhdGEpLCAiTG9jYWwgZmlsZXMiKTsKKyAgICB9KTsKKyAgICBnX2Fzc2VydChpdGVt
TGlzdCk7CisgICAgR0xpc3QgcmVtb3ZlTGlzdCA9IHsgaXRlbUxpc3QtPmRhdGEsIG51bGxwdHIs
IG51bGxwdHIgfTsKKyAgICB0ZXN0LT5yZW1vdmUoV0VCS0lUX1dFQlNJVEVfREFUQV9NRU1PUllf
Q0FDSEUsICZyZW1vdmVMaXN0KTsKKyAgICBkYXRhTGlzdCA9IHRlc3QtPmZldGNoKGNhY2hlVHlw
ZXMpOworICAgIGdfYXNzZXJ0KGRhdGFMaXN0KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlz
dF9sZW5ndGgoZGF0YUxpc3QpLCA9PSwgMSk7CisgICAgZGF0YSA9IHN0YXRpY19jYXN0PFdlYktp
dFdlYnNpdGVEYXRhKj4oZGF0YUxpc3QtPmRhdGEpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJz
aXRlX2RhdGFfZ2V0X3R5cGVzKGRhdGEpICYgV0VCS0lUX1dFQlNJVEVfREFUQV9ESVNLX0NBQ0hF
KTsKKworICAgIC8vIENsZWFyIGFsbC4KKyAgICB0ZXN0LT5jbGVhcihjYWNoZVR5cGVzLCAwKTsK
KyAgICBkYXRhTGlzdCA9IHRlc3QtPmZldGNoKGNhY2hlVHlwZXMpOworICAgIGdfYXNzZXJ0KCFk
YXRhTGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJzaXRlRGF0YVN0b3JhZ2UoV2Vic2l0
ZURhdGFUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBXZWJL
aXRXZWJzaXRlRGF0YVR5cGVzIHN0b3JhZ2VUeXBlcyA9IHN0YXRpY19jYXN0PFdlYktpdFdlYnNp
dGVEYXRhVHlwZXM+KFdFQktJVF9XRUJTSVRFX0RBVEFfU0VTU0lPTl9TVE9SQUdFIHwgV0VCS0lU
X1dFQlNJVEVfREFUQV9MT0NBTF9TVE9SQUdFKTsKKyAgICBHTGlzdCogZGF0YUxpc3QgPSB0ZXN0
LT5mZXRjaChzdG9yYWdlVHlwZXMpOworICAgIGdfYXNzZXJ0KCFkYXRhTGlzdCk7CisKKyAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9zZXNzaW9uc3RvcmFnZSIpLmRh
dGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9sb2NhbHN0b3JhZ2UiKS5kYXRhKCkpOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgLy8gTG9jYWwgc3RvcmFn
ZSB1c2VzIGEgMSBzZWNvbmQgdGltZXIgdG8gdXBkYXRlIHRoZSBkYXRhYmFzZS4KKyAgICB0ZXN0
LT53YWl0KDEpOworCisgICAgZGF0YUxpc3QgPSB0ZXN0LT5mZXRjaChzdG9yYWdlVHlwZXMpOwor
ICAgIGdfYXNzZXJ0KGRhdGFMaXN0KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlzdF9sZW5n
dGgoZGF0YUxpc3QpLCA9PSwgMSk7CisgICAgV2ViS2l0V2Vic2l0ZURhdGEqIGRhdGEgPSBzdGF0
aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YSo+KGRhdGFMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2Vy
dChkYXRhKTsKKyAgICBXZWJLaXRTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gd2Via2l0X3NlY3Vy
aXR5X29yaWdpbl9uZXdfZm9yX3VyaShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgp
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfbmFtZShkYXRh
KSwgPT0sIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fZ2V0X2hvc3Qob3JpZ2luKSk7CisgICAgd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl91bnJlZihvcmlnaW4pOworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfdHlwZXMoZGF0YSksID09LCBzdG9yYWdlVHlwZXMpOwor
ICAgIC8vIFN0b3JhZ2Ugc2l6ZXMgYXJlIHVua25vd24uCisgICAgZ19hc3NlcnRfY21wdWludCh3
ZWJraXRfd2Vic2l0ZV9kYXRhX2dldF9zaXplKGRhdGEsIFdFQktJVF9XRUJTSVRFX0RBVEFfU0VT
U0lPTl9TVE9SQUdFKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYnNp
dGVfZGF0YV9nZXRfc2l6ZShkYXRhLCBXRUJLSVRfV0VCU0lURV9EQVRBX0xPQ0FMX1NUT1JBR0Up
LCA9PSwgMCk7CisKKyAgICAvLyBHZXQgYWxzbyBjYWNoZWQgZGF0YSwgYW5kIGNsZWFyIGl0Lgor
ICAgIHN0YXRpYyBjb25zdCBXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIGNhY2hlQW5kU3RvcmFnZVR5
cGVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGFUeXBlcz4oc3RvcmFnZVR5cGVzIHwg
V0VCS0lUX1dFQlNJVEVfREFUQV9NRU1PUllfQ0FDSEUgfCBXRUJLSVRfV0VCU0lURV9EQVRBX0RJ
U0tfQ0FDSEUpOworICAgIGRhdGFMaXN0ID0gdGVzdC0+ZmV0Y2goY2FjaGVBbmRTdG9yYWdlVHlw
ZXMpOworICAgIGdfYXNzZXJ0KGRhdGFMaXN0KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlz
dF9sZW5ndGgoZGF0YUxpc3QpLCA9PSwgMSk7CisgICAgZGF0YSA9IHN0YXRpY19jYXN0PFdlYktp
dFdlYnNpdGVEYXRhKj4oZGF0YUxpc3QtPmRhdGEpOworICAgIGdfYXNzZXJ0KGRhdGEpOworICAg
IGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfdHlwZXMoZGF0YSksID09
LCBjYWNoZUFuZFN0b3JhZ2VUeXBlcyk7CisgICAgdGVzdC0+Y2xlYXIoc3RhdGljX2Nhc3Q8V2Vi
S2l0V2Vic2l0ZURhdGFUeXBlcz4oV0VCS0lUX1dFQlNJVEVfREFUQV9NRU1PUllfQ0FDSEUgfCBX
RUJLSVRfV0VCU0lURV9EQVRBX0RJU0tfQ0FDSEUpLCAwKTsKKworICAgIC8vIEdldCBhbGwgdHlw
ZXMgYWdhaW4sIGJ1dCBvbmx5IHN0b3JhZ2UgaXMgcmV0cmlldmVkIG5vdy4KKyAgICBkYXRhTGlz
dCA9IHRlc3QtPmZldGNoKGNhY2hlQW5kU3RvcmFnZVR5cGVzKTsKKyAgICBnX2Fzc2VydChkYXRh
TGlzdCk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3RoKGRhdGFMaXN0KSwgPT0s
IDEpOworICAgIGRhdGEgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YSo+KGRhdGFMaXN0
LT5kYXRhKTsKKyAgICBnX2Fzc2VydChkYXRhKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtp
dF93ZWJzaXRlX2RhdGFfZ2V0X3R5cGVzKGRhdGEpLCA9PSwgc3RvcmFnZVR5cGVzKTsKKworICAg
IC8vIFJlbW92ZSB0aGUgc2Vzc2lvbiBzdG9yYWdlLgorICAgIEdMaXN0IHJlbW92ZUxpc3QgPSB7
IGRhdGEsIG51bGxwdHIsIG51bGxwdHIgfTsKKyAgICB0ZXN0LT5yZW1vdmUoV0VCS0lUX1dFQlNJ
VEVfREFUQV9TRVNTSU9OX1NUT1JBR0UsICZyZW1vdmVMaXN0KTsKKyAgICBkYXRhTGlzdCA9IHRl
c3QtPmZldGNoKHN0b3JhZ2VUeXBlcyk7CisgICAgZ19hc3NlcnQoZGF0YUxpc3QpOworICAgIGdf
YXNzZXJ0X2NtcHVpbnQoZ19saXN0X2xlbmd0aChkYXRhTGlzdCksID09LCAxKTsKKyAgICBkYXRh
ID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGEqPihkYXRhTGlzdC0+ZGF0YSk7CisgICAg
Z19hc3NlcnQoISh3ZWJraXRfd2Vic2l0ZV9kYXRhX2dldF90eXBlcyhkYXRhKSAmIFdFQktJVF9X
RUJTSVRFX0RBVEFfU0VTU0lPTl9TVE9SQUdFKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYnNp
dGVfZGF0YV9nZXRfdHlwZXMoZGF0YSkgJiBXRUJLSVRfV0VCU0lURV9EQVRBX0xPQ0FMX1NUT1JB
R0UpOworCisgICAgLy8gQ2xlYXIgYWxsLgorICAgIHRlc3QtPmNsZWFyKGNhY2hlQW5kU3RvcmFn
ZVR5cGVzLCAwKTsKKyAgICBkYXRhTGlzdCA9IHRlc3QtPmZldGNoKGNhY2hlQW5kU3RvcmFnZVR5
cGVzKTsKKyAgICBnX2Fzc2VydCghZGF0YUxpc3QpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
c2l0ZURhdGFEYXRhYmFzZXMoV2Vic2l0ZURhdGFUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIHN0YXRpYyBjb25zdCBXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIGRhdGFiYXNlVHlwZXMg
PSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YVR5cGVzPihXRUJLSVRfV0VCU0lURV9EQVRB
X1dFQlNRTF9EQVRBQkFTRVMgfCBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9EQVRBQkFT
RVMpOworICAgIEdMaXN0KiBkYXRhTGlzdCA9IHRlc3QtPmZldGNoKGRhdGFiYXNlVHlwZXMpOwor
ICAgIGdfYXNzZXJ0KCFkYXRhTGlzdCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9lbXB0eSIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3
aW5kb3cuaW5kZXhlZERCLm9wZW4oJ1Rlc3REYXRhYmFzZScpOyIsIG51bGxwdHIpOworCisgICAg
ZGF0YUxpc3QgPSB0ZXN0LT5mZXRjaChkYXRhYmFzZVR5cGVzKTsKKyAgICBnX2Fzc2VydChkYXRh
TGlzdCk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3RoKGRhdGFMaXN0KSwgPT0s
IDEpOworICAgIFdlYktpdFdlYnNpdGVEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vi
c2l0ZURhdGEqPihkYXRhTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnQoZGF0YSk7CisgICAgV2Vi
S2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3X2Zv
cl91cmkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X25hbWUoZGF0YSksID09LCB3ZWJraXRfc2Vj
dXJpdHlfb3JpZ2luX2dldF9ob3N0KG9yaWdpbikpOworICAgIHdlYmtpdF9zZWN1cml0eV9vcmln
aW5fdW5yZWYob3JpZ2luKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJzaXRlX2Rh
dGFfZ2V0X3R5cGVzKGRhdGEpLCA9PSwgV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJfREFU
QUJBU0VTKTsKKyAgICAvLyBEYXRhYmFzZSBzaXplcyBhcmUgdW5rbm93bi4KKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3NpemUoZGF0YSwgV0VCS0lUX1dFQlNJ
VEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTKSwgPT0sIDApOworCisgICAgdGVzdC0+cnVuSmF2
YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkYiA9IG9wZW5EYXRhYmFzZShcIlRlc3REYXRh
YmFzZVwiLCBcIjEuMFwiLCBcIlRlc3REYXRhYmFzZVwiLCAxKTsiLCBudWxscHRyKTsKKyAgICBk
YXRhTGlzdCA9IHRlc3QtPmZldGNoKGRhdGFiYXNlVHlwZXMpOworICAgIGdfYXNzZXJ0KGRhdGFM
aXN0KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlzdF9sZW5ndGgoZGF0YUxpc3QpLCA9PSwg
MSk7CisgICAgZGF0YSA9IHN0YXRpY19jYXN0PFdlYktpdFdlYnNpdGVEYXRhKj4oZGF0YUxpc3Qt
PmRhdGEpOworICAgIGdfYXNzZXJ0KGRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X3dlYnNpdGVfZGF0YV9nZXRfdHlwZXMoZGF0YSksID09LCBkYXRhYmFzZVR5cGVzKTsKKyAgICAv
LyBEYXRhYmFzZSBzaXplcyBhcmUgdW5rbm93bi4KKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtp
dF93ZWJzaXRlX2RhdGFfZ2V0X3NpemUoZGF0YSwgV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVE
REJfREFUQUJBU0VTKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYnNp
dGVfZGF0YV9nZXRfc2l6ZShkYXRhLCBXRUJLSVRfV0VCU0lURV9EQVRBX1dFQlNRTF9EQVRBQkFT
RVMpLCA9PSwgMCk7CisKKyAgICAvLyBSZW1vdmUgYWxsIGRhdGFiYXNlcyBhdCBvbmNlLgorICAg
IEdMaXN0IHJlbW92ZUxpc3QgPSB7IGRhdGEsIG51bGxwdHIsIG51bGxwdHIgfTsKKyAgICB0ZXN0
LT5yZW1vdmUoZGF0YWJhc2VUeXBlcywgJnJlbW92ZUxpc3QpOworICAgIGRhdGFMaXN0ID0gdGVz
dC0+ZmV0Y2goZGF0YWJhc2VUeXBlcyk7CisgICAgZ19hc3NlcnQoIWRhdGFMaXN0KTsKKworICAg
IC8vIENsZWFyIGFsbC4KKyAgICBzdGF0aWMgY29uc3QgV2ViS2l0V2Vic2l0ZURhdGFUeXBlcyBj
YWNoZUFuZERhdGFiYXNlVHlwZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YVR5cGVz
PihkYXRhYmFzZVR5cGVzIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9NRU1PUllfQ0FDSEUgfCBXRUJL
SVRfV0VCU0lURV9EQVRBX0RJU0tfQ0FDSEUpOworICAgIHRlc3QtPmNsZWFyKGNhY2hlQW5kRGF0
YWJhc2VUeXBlcywgMCk7CisgICAgZGF0YUxpc3QgPSB0ZXN0LT5mZXRjaChjYWNoZUFuZERhdGFi
YXNlVHlwZXMpOworICAgIGdfYXNzZXJ0KCFkYXRhTGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RXZWJzaXRlRGF0YUFwcGNhY2hlKFdlYnNpdGVEYXRhVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICBHTGlzdCogZGF0YUxpc3QgPSB0ZXN0LT5mZXRjaChXRUJLSVRfV0VCU0lURV9E
QVRBX09GRkxJTkVfQVBQTElDQVRJT05fQ0FDSEUpOworICAgIGdfYXNzZXJ0KCFkYXRhTGlzdCk7
CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hcHBjYWNoZSIp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0
LT53YWl0KDEpOworICAgIGRhdGFMaXN0ID0gdGVzdC0+ZmV0Y2goV0VCS0lUX1dFQlNJVEVfREFU
QV9PRkZMSU5FX0FQUExJQ0FUSU9OX0NBQ0hFKTsKKyAgICBnX2Fzc2VydChkYXRhTGlzdCk7Cisg
ICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3RoKGRhdGFMaXN0KSwgPT0sIDEpOworICAg
IFdlYktpdFdlYnNpdGVEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGEq
PihkYXRhTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnQoZGF0YSk7CisgICAgV2ViS2l0U2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiA9IHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fbmV3X2Zvcl91cmkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJzaXRlX2RhdGFfZ2V0X25hbWUoZGF0YSksID09LCB3ZWJraXRfc2VjdXJpdHlfb3Jp
Z2luX2dldF9ob3N0KG9yaWdpbikpOworICAgIHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fdW5yZWYo
b3JpZ2luKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3R5
cGVzKGRhdGEpLCA9PSwgV0VCS0lUX1dFQlNJVEVfREFUQV9PRkZMSU5FX0FQUExJQ0FUSU9OX0NB
Q0hFKTsKKyAgICAvLyBBcHBjYWNoZSBzaXplIGlzIHVua25vd24uCisgICAgZ19hc3NlcnRfY21w
dWludCh3ZWJraXRfd2Vic2l0ZV9kYXRhX2dldF9zaXplKGRhdGEsIFdFQktJVF9XRUJTSVRFX0RB
VEFfT0ZGTElORV9BUFBMSUNBVElPTl9DQUNIRSksID09LCAwKTsKKworICAgIEdMaXN0IHJlbW92
ZUxpc3QgPSB7IGRhdGEsIG51bGxwdHIsIG51bGxwdHIgfTsKKyAgICB0ZXN0LT5yZW1vdmUoV0VC
S0lUX1dFQlNJVEVfREFUQV9PRkZMSU5FX0FQUExJQ0FUSU9OX0NBQ0hFLCAmcmVtb3ZlTGlzdCk7
CisgICAgZGF0YUxpc3QgPSB0ZXN0LT5mZXRjaChXRUJLSVRfV0VCU0lURV9EQVRBX09GRkxJTkVf
QVBQTElDQVRJT05fQ0FDSEUpOworICAgIGdfYXNzZXJ0KCFkYXRhTGlzdCk7CisKKyAgICAvLyBD
bGVhciBhbGwuCisgICAgc3RhdGljIGNvbnN0IFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgY2FjaGVB
bmRBcHBjYWNoZVR5cGVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGFUeXBlcz4oV0VC
S0lUX1dFQlNJVEVfREFUQV9PRkZMSU5FX0FQUExJQ0FUSU9OX0NBQ0hFIHwgV0VCS0lUX1dFQlNJ
VEVfREFUQV9NRU1PUllfQ0FDSEUgfCBXRUJLSVRfV0VCU0lURV9EQVRBX0RJU0tfQ0FDSEUpOwor
ICAgIHRlc3QtPmNsZWFyKGNhY2hlQW5kQXBwY2FjaGVUeXBlcywgMCk7CisgICAgZGF0YUxpc3Qg
PSB0ZXN0LT5mZXRjaChjYWNoZUFuZEFwcGNhY2hlVHlwZXMpOworICAgIGdfYXNzZXJ0KCFkYXRh
TGlzdCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2VydmVyID0gbmV3IFdlYktp
dFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAg
V2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImNvbmZpZ3VyYXRpb24i
LCB0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9uKTsKKyAgICBXZWJzaXRlRGF0YVRlc3Q6OmFk
ZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAiY2FjaGUiLCB0ZXN0V2Vic2l0ZURhdGFDYWNoZSk7Cisg
ICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgInN0b3JhZ2UiLCB0
ZXN0V2Vic2l0ZURhdGFTdG9yYWdlKTsKKyAgICBXZWJzaXRlRGF0YVRlc3Q6OmFkZCgiV2ViS2l0
V2Vic2l0ZURhdGEiLCAiZGF0YWJhc2VzIiwgdGVzdFdlYnNpdGVEYXRhRGF0YWJhc2VzKTsKKyAg
ICBXZWJzaXRlRGF0YVRlc3Q6OmFkZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAiYXBwY2FjaGUiLCB0
ZXN0V2Vic2l0ZURhdGFBcHBjYWNoZSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRl
bGV0ZSBrU2VydmVyOworfQo=
</data>
<flag name="review"
          id="321381"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>