<?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>177932</bug_id>
          
          <creation_ts>2017-10-05 04:28:12 -0700</creation_ts>
          <short_desc>[GTK] New API to add, retrieve and delete cookies via WebKitCookieManager</short_desc>
          <delta_ts>2017-11-20 14:02:54 -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>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>juanpablougarte</cc>
    
    <cc>lantw44</cc>
    
    <cc>leonidas</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1356966</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-10-05 04:28:12 -0700</bug_when>
    <thetext>As discussed during the Web Engines Hackfest, it would be great to have a way to add and retrieve (full) cookies into/out-of a running session via the WebKitCookieManager, since that would make it possible to improve the integration between the desktop and apps.

For instance, in Endless OS (a desktop based on GNOME) we&apos;d like to be able to reuse the cookie stored by gnome-online-accounts so that you don&apos;t have to login again in your favourite online service from the browser (or from any app) if you already did it in g-o-a, for which this API would be very useful.

I&apos;ll be sending a mail to the mailing list in a few min to discuss the details of the proposed API itself, so filing this bug to track the actual work here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356970</commentid>
    <comment_count>1</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-10-05 04:35:26 -0700</bug_when>
    <thetext>Mailing list discussion here: https://lists.webkit.org/pipermail/webkit-gtk/2017-October/003154.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358749</commentid>
    <comment_count>2</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-10-10 06:39:14 -0700</bug_when>
    <thetext>I&apos;ve updated the name of this bug to reflect that I&apos;m also adding a delete_cookie() method now, as mentioned in the mailing list:
https://lists.webkit.org/pipermail/webkit-gtk/2017-October/003155.html
https://lists.webkit.org/pipermail/webkit-gtk/2017-October/003157.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358750</commentid>
    <comment_count>3</comment_count>
      <attachid>323302</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-10-10 06:44:44 -0700</bug_when>
    <thetext>Created attachment 323302
Patch proposal

See a patch proposal attached. The only change I did compared to my original proposal in the mailing list is that the functions add_cookie() and get_cookies() now receive a SoupURI* parameter instead of a const char*, to make sure that they are valid HTTP/HTTPs URLs (and also because it&apos;s easier and more natural to validate that those are valid URIs for HTTP/HTTPs right at the beginning of the functions).

Please review, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358773</commentid>
    <comment_count>4</comment_count>
      <attachid>323310</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-10-10 08:42:37 -0700</bug_when>
    <thetext>Created attachment 323310
Patch proposal

Let&apos;s try to fix the WPE bot (and fix some minor errors in the previous patch along the way)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359274</commentid>
    <comment_count>5</comment_count>
      <attachid>323310</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2017-10-11 11:32:53 -0700</bug_when>
    <thetext>Comment on attachment 323310
Patch proposal

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

Informal review: r- 

It would be r+ if there wasn&apos;t doubts about error handling (is it missing?
is it uneeded?). Please check the inline comments below regarding this.

Otherwise, the added API looks good to me, and you did a good job adding
the tests for the API. Thanks a lot for working on this patch!

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:246
&gt; + * request specified by @uri, which must be either and HTTP or an HTTP URL. In case the

Probably you meant “either an HTTP or an HTTPS URL”.

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:280
&gt; +        g_task_return_boolean(task.get(), error == CallbackBase::Error::None);

What if the error is other than CallbackBase::Error::None? This is never
returning an error in that case e.g. using g_task_return_new_error(). I
would expect this to be something like:

  if (error == CallbackBase::Error::None) {
      g_task_return_boolen(task.get(), TRUE);
  } else {
      g_task_return_error(task.get(), toGError(error));
  }

If the current behavior is intended, you can remove the GError argument to
webkit_cookie_manager_add_cookie_finish() — read move below.

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:294
&gt; +gboolean webkit_cookie_manager_add_cookie_finish(WebKitCookieManager *manager, GAsyncResult *result, GError **error)

The GError argument may not be needed if the WebCore/WebKit error
will not be converted to a GError, as argumented above. Either
remove it here, or add the conversion to GError above as suggested.

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:305
&gt; + * @uri: the #SoupURI for which the list of cookies will be retrieved from

I think this should have the same parameter description as the
webkit_cookie_manager_add_cookie() function above, for consistency:

  @uri: the #SoupURI with the URI of the originating request

(Also, as a bonus this wording parses more easily in my head.)

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:311
&gt; + * must be either and HTTP or an HTTP URL.

Ditto, probably you wanted “either an HTTP or an HTTPS URL” here as well.

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:328
&gt; +    processPools[0]-&gt;supplement&lt;WebCookieManagerProxy&gt;()-&gt;getCookies(sessionID, WebCore::URL(uri), [task = WTFMove(task)](const Vector&lt;WebCore::Cookie&gt;&amp; cookies, CallbackBase::Error error) {

The “error” argument is never checked. If it&apos;s guaranteed to always
indicate a successful operation, then please add an assertion:

  ASSERT_EQ(error, CallbackBase::Error::None);

otherwise, please add the needed bits to convert the error codes to
GError values and to report them to the code using this API.

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:395
&gt; +        g_task_return_boolean(task.get(), error == CallbackBase::Error::None);

Same comment as for webkit_cookie_manager_add_cookie(): How about converting
errors to GError, or removing the GError parameter to the _finish() function
(whichever fits in this case)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363235</commentid>
    <comment_count>6</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-10-23 03:00:13 -0700</bug_when>
    <thetext>Hey Adrián! Not sure what happened with the my mail filters for wk bugmail, but I didn&apos;t see your review until now (many thanks, btw!). I&apos;m a bit busy at the moment with WK-unrelated matters, but I will be taking a look to your comments as soon as possible (hopefully this week). WebKit has changed quite a bit since the last time I touched it &quot;seriously&quot; and I need to wrap my head around a few things before I&apos;m able to productively engage with your review, but I hope that will happen soon enough anyway :-)

In the meantime, if anyone has any other comments I&apos;d appreciate them too, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365988</commentid>
    <comment_count>7</comment_count>
      <attachid>323310</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-10-30 05:13:46 -0700</bug_when>
    <thetext>Comment on attachment 323310
Patch proposal

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

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:246
&gt;&gt; + * request specified by @uri, which must be either and HTTP or an HTTP URL. In case the
&gt; 
&gt; Probably you meant “either an HTTP or an HTTPS URL”.

Oops! Will fix that

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:280
&gt;&gt; +        g_task_return_boolean(task.get(), error == CallbackBase::Error::None);
&gt; 
&gt; What if the error is other than CallbackBase::Error::None? This is never
&gt; returning an error in that case e.g. using g_task_return_new_error(). I
&gt; would expect this to be something like:
&gt; 
&gt;   if (error == CallbackBase::Error::None) {
&gt;       g_task_return_boolen(task.get(), TRUE);
&gt;   } else {
&gt;       g_task_return_error(task.get(), toGError(error));
&gt;   }
&gt; 
&gt; If the current behavior is intended, you can remove the GError argument to
&gt; webkit_cookie_manager_add_cookie_finish() — read move below.

Another &quot;Ooops!&quot;, but this one is actually worse. TL;DR: I think you&apos;re right, I&apos;ll change it

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:294
&gt;&gt; +gboolean webkit_cookie_manager_add_cookie_finish(WebKitCookieManager *manager, GAsyncResult *result, GError **error)
&gt; 
&gt; The GError argument may not be needed if the WebCore/WebKit error
&gt; will not be converted to a GError, as argumented above. Either
&gt; remove it here, or add the conversion to GError above as suggested.

I think the GError should be filled, even if it&apos;s with a generic G_IO_ERROR_CANCELLED, in case something went wrong, so I&apos;ll keep it.

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:305
&gt;&gt; + * @uri: the #SoupURI for which the list of cookies will be retrieved from
&gt; 
&gt; I think this should have the same parameter description as the
&gt; webkit_cookie_manager_add_cookie() function above, for consistency:
&gt; 
&gt;   @uri: the #SoupURI with the URI of the originating request
&gt; 
&gt; (Also, as a bonus this wording parses more easily in my head.)

Fair enough

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:311
&gt;&gt; + * must be either and HTTP or an HTTP URL.
&gt; 
&gt; Ditto, probably you wanted “either an HTTP or an HTTPS URL” here as well.

Yep

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:328
&gt;&gt; +    processPools[0]-&gt;supplement&lt;WebCookieManagerProxy&gt;()-&gt;getCookies(sessionID, WebCore::URL(uri), [task = WTFMove(task)](const Vector&lt;WebCore::Cookie&gt;&amp; cookies, CallbackBase::Error error) {
&gt; 
&gt; The “error” argument is never checked. If it&apos;s guaranteed to always
&gt; indicate a successful operation, then please add an assertion:
&gt; 
&gt;   ASSERT_EQ(error, CallbackBase::Error::None);
&gt; 
&gt; otherwise, please add the needed bits to convert the error codes to
&gt; GError values and to report them to the code using this API.

I think I&apos;ll add the needed bits to return an GError in case it failed, for the same reasons explained above

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:395
&gt;&gt; +        g_task_return_boolean(task.get(), error == CallbackBase::Error::None);
&gt; 
&gt; Same comment as for webkit_cookie_manager_add_cookie(): How about converting
&gt; errors to GError, or removing the GError parameter to the _finish() function
&gt; (whichever fits in this case)?

Providing a proper GError sounds good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366058</commentid>
    <comment_count>8</comment_count>
      <attachid>325357</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-10-30 09:57:40 -0700</bug_when>
    <thetext>Created attachment 325357
Patch proposal

See attached a re-worked version of my previous patch after considering the review comments from Adrián along with yet-one-more-change to the API add_cookie() API, whose signature is now as follows:

   void webkit_cookie_manager_add_cookie(WebKitCookieManager *manager, SoupCookie *cookie, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer userData)

You might have noticed that I removed the SoupURI* uri parameter, and the reason is because I realized that it was not only unnecessary but even wrong for this API: while it&apos;s important to use setCookies(Vector&lt;Cookie&gt; cookies, URL url, URL mainDocumentURL) when adding cookies as the result of the web engine loading resources from the web (so that it can be considered whether cookies come from 1st or 3rd parties), this API is meant to be used from other applications/components using the WebKit2GTK+ API to interact with the underlying cookie jar in a much more direct way, meaning that page loading stuff is not really relevant and thus passing URLs here besides the `domain` property that is already (mandatory) part of SoupCookie doesn&apos;t really buy us anything.

Actually, is not only that it doesn&apos;t buy us anything, but also that such URL would be plainly ignored by the soup layer when adding the cookie to the jar, since all the soup_cookie_jar_add_cookie() API takes is a reference to the Jar and to the SoupCookie, from which it extracts the domain to later on know which cookies it needs to send to which websites when loading them.

So, there&apos;s no URL-checking code in WebCore when adding a new cookie to the jar, how is it checked that a cookie being loaded from a random website can actually be added? Well, that&apos;s via soup_cookie_jar_set_accept_policy() -already exposed by the WebKitCookieManager API-, which allows deciding whether libsoup should add or not a set of cookies depending on whether that cookie came with an HTTP response that belongs to a 1st or a 3rd party. And to know that information, the soup-based network layer in WebCore takes care of calling soup_message_set_first_party() for the messages that come from the same domain than the one loaded in the main document, so that when soup_cookie_jar_add_cookie() is called later on, libsoup knows what to do.

Anyway, long way of saying that both the API and its internals can be simplified now and the only thing that needs to be passed to add_cookie() is, unsurprisingly, a SoupCookie with the name, domain, path and value properties properly initialized, and WebKit will take care of the rest when adding it to the underlying storage. For that reason, I also moved from using setCookies(Vector&lt;Cookie&gt; cookies, URL url, URL mainDocumentURL) to using setCookie(Cookie* cookie) instead -and implementing it-, since that&apos;s really all we need.

Last, I&apos;ve also updated/extended the unit tests to make sure that I tested everything I could think of, and I think it&apos;s now even in better shape than before.

Please review again, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366064</commentid>
    <comment_count>9</comment_count>
      <attachid>325359</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-10-30 10:36:30 -0700</bug_when>
    <thetext>Created attachment 325359
Patch proposal

Spotted a missing line and a couple of confusing comments, new patch attached</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366355</commentid>
    <comment_count>10</comment_count>
      <attachid>325431</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-10-31 04:27:27 -0700</bug_when>
    <thetext>Created attachment 325431
Patch Proposal

Rebased patch on top of latest changes in trunk, which broke the WPE build with this fix landed (see bug 178964)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369181</commentid>
    <comment_count>11</comment_count>
    <who name="Leo Ufimtsev">leonidas</who>
    <bug_when>2017-11-07 13:41:12 -0800</bug_when>
    <thetext>We are in need of this api, looking forward to testing/using it.
(We = Eclipse&apos;s SWT on Linux, the Browser widget uses webkit2gtk underneath).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369249</commentid>
    <comment_count>12</comment_count>
      <attachid>325431</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-07 15:28:41 -0800</bug_when>
    <thetext>Comment on attachment 325431
Patch Proposal

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

Sorry for the delay getting a review.

On the one hand, I think this really should block on bug #175265, because I would hate to add new API that won&apos;t work properly in an important case. On the other hand... that bug is kinda stalled, and it would be nice to land this. So I&apos;m going to say it looks good. r=me.

Technically, since you&apos;re a GTK reviewer yourself, you *could* land it with just my approval (as you are allowed to count yourself as the second API reviewer). But I&apos;m sure Carlos Garcia will want to review the new API, so I&apos;ll leave the r? for him.

&gt; Source/WebCore/platform/network/soup/CookieSoup.cpp:34
&gt; +Cookie::Cookie(SoupCookie *cookie)

The * hangs on the type, not the variable name.

That should be the case in the header file as well, but I see the surrounding code does not respect our coding style in the header.

&gt; Source/WebCore/platform/network/soup/CookieSoup.cpp:57
&gt; +Cookie::operator SoupCookie *() const

This is too risky IMO. We can&apos;t have implicit conversion operators returning newly-allocated memory: that&apos;s a recipe for accidental leaks. You can achieve almost the same result by adding a static toSoupCookie() method, with the benefit that it has to be called explicitly.

&gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:-303
&gt; -static SoupCookie* toSoupCookie(const Cookie&amp; cookie)

Oh... there was already a toSoupCookie method. So I would move this to Cookie.[cpp,h], where it can replace the implicit conversion.

&gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:297
&gt; -        soup_cookie_jar_add_cookie(cookieStorage(), toSoupCookie(cookie));
&gt; +        soup_cookie_jar_add_cookie(cookieStorage(), cookie);

Yeah, this is a great example of why the implicit conversion is not a great idea. In this case, the code is correct, as you really do want to transfer ownership of the newly-constructed SoupCookie here. But that&apos;s a really hidden way of constructing a new object and transferring ownership. Developers are inevitably going to get confused and mess this up in the future. It will probably be me, if I&apos;m the next person to touch it. ;)

&gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:326
&gt; +    GUniquePtr&lt;SoupCookie&gt; targetCookie(cookie);
&gt; +    GUniquePtr&lt;GSList&gt; cookiesList(soup_cookie_jar_get_cookie_list(cookieStorage(), uri.get(), TRUE));
&gt; +    for (GSList* item = cookiesList.get(); item; item = g_slist_next(item)) {
&gt; +        GUniquePtr&lt;SoupCookie&gt; soupCookie(static_cast&lt;SoupCookie*&gt;(item-&gt;data));
&gt; +
&gt; +        // Use (name, domain, path) as the primary key to identify the cookie.
&gt; +        if (g_strcmp0(soup_cookie_get_name(soupCookie.get()), soup_cookie_get_name(targetCookie.get()))
&gt; +            || g_strcmp0(soup_cookie_get_domain(soupCookie.get()), soup_cookie_get_domain(targetCookie.get()))
&gt; +            || g_strcmp0(soup_cookie_get_path(soupCookie.get()), soup_cookie_get_path(targetCookie.get())))
&gt; +            continue;
&gt; +
&gt; +        soup_cookie_jar_delete_cookie(cookieStorage(), soupCookie.get());
&gt; +        break;

This is inefficient. Imagine deleting a list of cookies... it should be O(n) but now it&apos;s O(n^2) because you have to loop through roughly half the list each time. Fortunately, I don&apos;t think we need to store the SoupCookies in some other data structure to make this work, because soup_cookie_jar_delete_cookie() doesn&apos;t work by comparing pointer values, it works by checking the domain, name, value, and path of the cookie. So I think you don&apos;t need to get the SoupCookie from the cookie jar: you can just construct a new one yourself, and it should work. So you shouldn&apos;t need this loop at all.

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:257
&gt; +    Vector&lt;WebCore::Cookie&gt; cookies;
&gt; +    cookies.append(WebCore::Cookie(cookie));

This is unused.

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:265
&gt; +    // of the process we access to them from, so just use the first process pool.

&quot;we access them from&quot;

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:271
&gt; +            // This can only happen in cases where the web process is not available,
&gt; +            // consider the operation &quot;cancelled&quot; from the point of view of the client.
&gt; +            g_task_return_new_error(task.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED, _(&quot;Operation was cancelled&quot;));
&gt; +            return;

Ah, maybe this really should block on bug #175265, so we don&apos;t have to add an unnecessary error here.

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:387
&gt; +    // We only care about the name, domain and path, which is what will be used
&gt; +    // to identify the cookie in SoupCookieJar held by the other process. However,
&gt; +    // we still need to create the Cookie with a non-empty value not to get discarded
&gt; +    // on its way to the other process, so we just pass the name again there.

Good comment!

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:65
&gt; +        , m_cookies(0)
&gt; +        , m_cookieAdded(false)
&gt;          , m_cookiesChanged(false)
&gt; +        , m_cookieDeleted(false)

Use inline initialization for the new data members. Bonus points if you convert the entire initializer list to inline initialization. (It&apos;s project style to do small cleanups like that regularly in larger patches, rather than in separate patches as is common in GNOME.)

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:315
&gt; +    // Still one cookie, since (name, domain, path) are the same than the already existing

&quot;same as&quot;

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:336
&gt; +    // We have now 2 cookies that would apply to the passed URL, one is the cookie initially

Best to write out &quot;two&quot; in English (here and below)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369414</commentid>
    <comment_count>13</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-11-08 07:05:25 -0800</bug_when>
    <thetext>Thanks for the review Michael. TL;DR: I agree with your comments and will adapt the code accordingly ASAP but, before that, I&apos;d love to get a second review from Carlos since, as you suggest, he will probably want to do it anyway (and also because of some doubts with the implicit conversion).

More comments below...

(In reply to Michael Catanzaro from comment #12)
&gt; Comment on attachment 325431 [details]
&gt; Patch Proposal
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=325431&amp;action=review
&gt; 
&gt; Sorry for the delay getting a review.

No problem, it also took me some time to react to the first one from Adrián, so I won&apos;t be the one complaining about this taking too long :-)

&gt; On the one hand, I think this really should block on bug #175265, because I
&gt; would hate to add new API that won&apos;t work properly in an important case. On
&gt; the other hand... that bug is kinda stalled, and it would be nice to land
&gt; this. So I&apos;m going to say it looks good. r=me.

Thanks, I personally think it&apos;s feasible to move on, but I see your point too.

&gt; Technically, since you&apos;re a GTK reviewer yourself, you *could* land it with
&gt; just my approval (as you are allowed to count yourself as the second API
&gt; reviewer). But I&apos;m sure Carlos Garcia will want to review the new API, so
&gt; I&apos;ll leave the r? for him.

Even if I&apos;m a WebKit reviewer, it&apos;s been a while (as you know) since I contributed regularly to the codebase and even back when I was more active the main area I reviewed patches about was the accessibility layer so, personally, I would love to have a second (or third) reviewer taking a look if possible. 

&gt; &gt; Source/WebCore/platform/network/soup/CookieSoup.cpp:34
&gt; &gt; +Cookie::Cookie(SoupCookie *cookie)
&gt; 
&gt; The * hangs on the type, not the variable name.

Oops! I&apos;m surprised the check-webkit-style didn&apos;t catch that one, will fix it.

&gt; That should be the case in the header file as well, but I see the
&gt; surrounding code does not respect our coding style in the header.
&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/CookieSoup.cpp:57
&gt; &gt; +Cookie::operator SoupCookie *() const
&gt; 
&gt; This is too risky IMO. We can&apos;t have implicit conversion operators returning
&gt; newly-allocated memory: that&apos;s a recipe for accidental leaks. You can
&gt; achieve almost the same result by adding a static toSoupCookie() method,
&gt; with the benefit that it has to be called explicitly.

This was actually a suggestion made by Carlos in the hackfest, although it&apos;s entirely possible I misunderstood him. That said, I don&apos;t mind changing the code as you suggest, but I think I&apos;ll wait for his review first, just in case we are missing something.

&gt; &gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:-303
&gt; &gt; -static SoupCookie* toSoupCookie(const Cookie&amp; cookie)
&gt; 
&gt; Oh... there was already a toSoupCookie method. So I would move this to
&gt; Cookie.[cpp,h], where it can replace the implicit conversion.
&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:297
&gt; &gt; -        soup_cookie_jar_add_cookie(cookieStorage(), toSoupCookie(cookie));
&gt; &gt; +        soup_cookie_jar_add_cookie(cookieStorage(), cookie);
&gt; 
&gt; Yeah, this is a great example of why the implicit conversion is not a great
&gt; idea. In this case, the code is correct, as you really do want to transfer
&gt; ownership of the newly-constructed SoupCookie here. But that&apos;s a really
&gt; hidden way of constructing a new object and transferring ownership.
&gt; Developers are inevitably going to get confused and mess this up in the
&gt; future. It will probably be me, if I&apos;m the next person to touch it. ;)

I agree it&apos;s a bit obscure, yes. You&apos;r convincing me by the moment!

&gt; &gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:326
&gt; &gt; +    GUniquePtr&lt;SoupCookie&gt; targetCookie(cookie);
&gt; &gt; +    GUniquePtr&lt;GSList&gt; cookiesList(soup_cookie_jar_get_cookie_list(cookieStorage(), uri.get(), TRUE));
&gt; &gt; +    for (GSList* item = cookiesList.get(); item; item = g_slist_next(item)) {
&gt; &gt; +        GUniquePtr&lt;SoupCookie&gt; soupCookie(static_cast&lt;SoupCookie*&gt;(item-&gt;data));
&gt; &gt; +
&gt; &gt; +        // Use (name, domain, path) as the primary key to identify the cookie.
&gt; &gt; +        if (g_strcmp0(soup_cookie_get_name(soupCookie.get()), soup_cookie_get_name(targetCookie.get()))
&gt; &gt; +            || g_strcmp0(soup_cookie_get_domain(soupCookie.get()), soup_cookie_get_domain(targetCookie.get()))
&gt; &gt; +            || g_strcmp0(soup_cookie_get_path(soupCookie.get()), soup_cookie_get_path(targetCookie.get())))
&gt; &gt; +            continue;
&gt; &gt; +
&gt; &gt; +        soup_cookie_jar_delete_cookie(cookieStorage(), soupCookie.get());
&gt; &gt; +        break;
&gt; 
&gt; This is inefficient. Imagine deleting a list of cookies... it should be O(n)
&gt; but now it&apos;s O(n^2) because you have to loop through roughly half the list
&gt; each time. Fortunately, I don&apos;t think we need to store the SoupCookies in
&gt; some other data structure to make this work, because
&gt; soup_cookie_jar_delete_cookie() doesn&apos;t work by comparing pointer values, it
&gt; works by checking the domain, name, value, and path of the cookie. So I
&gt; think you don&apos;t need to get the SoupCookie from the cookie jar: you can just
&gt; construct a new one yourself, and it should work. So you shouldn&apos;t need this
&gt; loop at all.

Ah! That&apos;s a good point, I was too lazy to check libsoup&apos;s code and didn&apos;t know that internally that&apos;s how _delete_cookie() worked. If that&apos;s the case, then I agree simply constructing a dummy SoupCookie with the right values for name, domain and path should be better.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:257
&gt; &gt; +    Vector&lt;WebCore::Cookie&gt; cookies;
&gt; &gt; +    cookies.append(WebCore::Cookie(cookie));
&gt; 
&gt; This is unused.

I can&apos;t believe this slipped (from a previous version of the patch). Will remove it.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:265
&gt; &gt; +    // of the process we access to them from, so just use the first process pool.
&gt; 
&gt; &quot;we access them from&quot;

Almost 5 years living in the UK for this (and it&apos;s not like it&apos;s the only offender)... :-) will fix it too.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:271
&gt; &gt; +            // This can only happen in cases where the web process is not available,
&gt; &gt; +            // consider the operation &quot;cancelled&quot; from the point of view of the client.
&gt; &gt; +            g_task_return_new_error(task.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED, _(&quot;Operation was cancelled&quot;));
&gt; &gt; +            return;
&gt; 
&gt; Ah, maybe this really should block on bug #175265, so we don&apos;t have to add
&gt; an unnecessary error here.

Hmmm.. you sure? I feel like returning this error here, even it&apos;s kind of a generic catch-all kind of error is not a bad idea. Future is uncertain, as they say

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:387
&gt; &gt; +    // We only care about the name, domain and path, which is what will be used
&gt; &gt; +    // to identify the cookie in SoupCookieJar held by the other process. However,
&gt; &gt; +    // we still need to create the Cookie with a non-empty value not to get discarded
&gt; &gt; +    // on its way to the other process, so we just pass the name again there.
&gt; 
&gt; Good comment!

Thanks, my verbosity put towards a good cause to prevent confusion.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:65
&gt; &gt; +        , m_cookies(0)
&gt; &gt; +        , m_cookieAdded(false)
&gt; &gt;          , m_cookiesChanged(false)
&gt; &gt; +        , m_cookieDeleted(false)
&gt; 
&gt; Use inline initialization for the new data members. Bonus points if you
&gt; convert the entire initializer list to inline initialization. (It&apos;s project
&gt; style to do small cleanups like that regularly in larger patches, rather
&gt; than in separate patches as is common in GNOME.)

Sure, but to avoid me misunderstanding things again... would you mind posting a pointer to some other test that&apos;s already looking the way you suggest?

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:315
&gt; &gt; +    // Still one cookie, since (name, domain, path) are the same than the already existing
&gt; 
&gt; &quot;same as&quot;

Almost five years in the UK... 5 years! (PS: I&apos;ll fix it)

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:336
&gt; &gt; +    // We have now 2 cookies that would apply to the passed URL, one is the cookie initially
&gt; 
&gt; Best to write out &quot;two&quot; in English (here and below)

Ok, will change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369417</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-08 07:26:08 -0800</bug_when>
    <thetext>(In reply to Mario Sanchez Prada from comment #13)
&gt; &gt; &gt; Source/WebCore/platform/network/soup/CookieSoup.cpp:57
&gt; &gt; &gt; +Cookie::operator SoupCookie *() const
&gt; &gt; 
&gt; &gt; This is too risky IMO. We can&apos;t have implicit conversion operators returning
&gt; &gt; newly-allocated memory: that&apos;s a recipe for accidental leaks. You can
&gt; &gt; achieve almost the same result by adding a static toSoupCookie() method,
&gt; &gt; with the benefit that it has to be called explicitly.
&gt; 
&gt; This was actually a suggestion made by Carlos in the hackfest, although it&apos;s
&gt; entirely possible I misunderstood him. That said, I don&apos;t mind changing the
&gt; code as you suggest, but I think I&apos;ll wait for his review first, just in
&gt; case we are missing something.

Sometimes what seems to be a good idea is not, in fact, a good idea. Consider a few of the many ways this can go badly:

void someFunction(SoupCookie* transferNone);
WebCore::Cookie cookie;
someFunction(&amp;cookie); // hidden leak

or:

WebCore::Cookie cookie;
auto* cookie = static_cast&lt;SoupCookie*&gt;(&amp;cookie); // hidden leak

In both cases, it&apos;s pretty surprising that an allocation occurs at all.

&gt; I agree it&apos;s a bit obscure, yes. You&apos;r convincing me by the moment!

Good. ;)
 
&gt; &gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:271
&gt; &gt; &gt; +            // This can only happen in cases where the web process is not available,
&gt; &gt; &gt; +            // consider the operation &quot;cancelled&quot; from the point of view of the client.
&gt; &gt; &gt; +            g_task_return_new_error(task.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED, _(&quot;Operation was cancelled&quot;));
&gt; &gt; &gt; +            return;
&gt; &gt; 
&gt; &gt; Ah, maybe this really should block on bug #175265, so we don&apos;t have to add
&gt; &gt; an unnecessary error here.
&gt; 
&gt; Hmmm.. you sure? I feel like returning this error here, even it&apos;s kind of a
&gt; generic catch-all kind of error is not a bad idea. Future is uncertain, as
&gt; they say

Well, it&apos;s certainly a good idea to return the error until we have that bug fixed. Fixing that bug entails ensuring these functions work without a web process, so your patch actually complicates that work.
 
&gt; &gt; &gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:65
&gt; &gt; &gt; +        , m_cookies(0)
&gt; &gt; &gt; +        , m_cookieAdded(false)
&gt; &gt; &gt;          , m_cookiesChanged(false)
&gt; &gt; &gt; +        , m_cookieDeleted(false)
&gt; &gt; 
&gt; &gt; Use inline initialization for the new data members. Bonus points if you
&gt; &gt; convert the entire initializer list to inline initialization. (It&apos;s project
&gt; &gt; style to do small cleanups like that regularly in larger patches, rather
&gt; &gt; than in separate patches as is common in GNOME.)
&gt; 
&gt; Sure, but to avoid me misunderstanding things again... would you mind
&gt; posting a pointer to some other test that&apos;s already looking the way you
&gt; suggest?

Initialize them in the class declaration like this:

    WebKitCookieManager* m_cookieManager { nullptr };
    WebKitCookieAcceptPolicy m_acceptPolicy { WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY };
    char** m_domains { nullptr };
    bool m_cookiesChanged { false };
    bool m_finishLoopWhenCookiesChange { false };
    GUniquePtr&lt;char&gt; m_cookiesTextFile;
    GUniquePtr&lt;char&gt; m_cookiesSQLiteFile;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369965</commentid>
    <comment_count>15</comment_count>
      <attachid>326469</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-11-09 10:57:08 -0800</bug_when>
    <thetext>Created attachment 326469
Patch proposal

See attached a patch proposal where I think I&apos;ve addressed Michael&apos;s concerns</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369966</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-11-09 10:58:50 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370013</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-09 12:37:38 -0800</bug_when>
    <thetext>(In reply to Mario Sanchez Prada from comment #15)
&gt; Created attachment 326469 [details]
&gt; Patch proposal
&gt; 
&gt; See attached a patch proposal where I think I&apos;ve addressed Michael&apos;s concerns

Yes, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372565</commentid>
    <comment_count>18</comment_count>
      <attachid>326469</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-11-16 03:55:40 -0800</bug_when>
    <thetext>Comment on attachment 326469
Patch proposal

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

&gt; Source/WebCore/platform/network/soup/CookieSoup.cpp:43
&gt; +Cookie::Cookie(SoupCookie* cookie)
&gt; +{
&gt; +    name = String::fromUTF8(cookie-&gt;name);
&gt; +    value = String::fromUTF8(cookie-&gt;value);
&gt; +    domain = String::fromUTF8(cookie-&gt;domain);
&gt; +    path = String::fromUTF8(cookie-&gt;path);
&gt; +    expires = cookie-&gt;expires ? static_cast&lt;double&gt;(soup_date_to_time_t(cookie-&gt;expires)) * 1000 : 0;
&gt; +    httpOnly = cookie-&gt;http_only;
&gt; +    secure = cookie-&gt;secure;
&gt; +    session = !cookie-&gt;expires;

Use the member initialization instead

Cookie::Cookie(SoupCookie* cookie)
    : name(String::fromUTF8(cookie-&gt;name))
    , value(String::fromUTF8(cookie-&gt;value))
....

&gt; Source/WebCore/platform/network/soup/CookieSoup.cpp:60
&gt; +    if (name.isNull() || value.isNull() || domain.isNull() || path.isNull())
&gt; +        return nullptr;

Could we use isNull()?

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:246
&gt; + * Asynchronously add a #SoupCookie to the underlying storage, which is not persistent
&gt; + * unless you explicitly call webkit_cookie_manager_set_persistent_storage().

Asynchronously add @cookie to @cookie_manager ? I don&apos;t think we need to clarify the persistance here

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:250
&gt; + */

Since: 2.20

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:284
&gt; + */

Since: 2.20

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:296
&gt; + * @uri: the #SoupURI for the domain of the cookies to be retrieved

We don&apos;t expose SoupURI in our API, better use char* and create the soupURI internally if needed.

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:302
&gt; + * Asynchronously get a list of #SoupCookie from @cookie_manager associated with @uri, which
&gt; + * must be either and HTTP or an HTTPS URL.

and -&gt; an

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:306
&gt; + */

Since: 2.20

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:327
&gt; +        GList* cookies_list = nullptr;

cookies_list -&gt; cookieList

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:346
&gt; + * Returns: (element-type SoupCookie) (transfer full): A #GSList of #SoupCookie instances
&gt; + *    or %NULL in case of error.

If NULL means error, how can we return an empty list?

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:347
&gt; + */

Since: 2.20

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:361
&gt; + * @name: the name the cookie to be deleted
&gt; + * @domain: the domain of the cookie to be deleted
&gt; + * @path: the path of the cookie to be deleted

It&apos;s weird that this doesn&apos;t receive a SoupCookie, maybe we can document that name, domain and patch will be used to match the cookie.

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:371
&gt; + */

Since: 2.20

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:412
&gt; + * Returns: %TRUE if the cookie was added or %FALSE in case of error.

added -&gt; deleted

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:413
&gt; + */

Since: 2.20

&gt; Source/WebKit/UIProcess/API/wpe/WebKitCookieManager.h:131
&gt; +WEBKIT_API GList*

GList* -&gt; GList *

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:122
&gt; +        test-&gt;m_cookieAdded = added;

Does this make sense? we are asserting before if there&apos;s an error which is the only case where the cookie isn&apos;t added no?

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:148
&gt; +        g_list_free_full(m_cookies, reinterpret_cast&lt;GDestroyNotify&gt;(soup_cookie_free));

You should free the cookies in the destructor too.

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:149
&gt; +        m_cookies = 0;

nullptr

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:287
&gt; +    test-&gt;setAcceptPolicy(WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY);

No third party is already the default.

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:332
&gt; +    g_assert_nonnull(foundCookies);
&gt; +    g_assert_cmpint(g_list_length(foundCookies), ==, 2);

g_list_length returns 0 in case list is null, so we don&apos;t need the previous assert that isn&apos;t used in previous calls to getCookies() either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372657</commentid>
    <comment_count>19</comment_count>
      <attachid>326469</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-16 09:38:01 -0800</bug_when>
    <thetext>Comment on attachment 326469
Patch proposal

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

&gt; Source/WebCore/platform/Cookie.h:71
&gt; +    Cookie(SoupCookie*);

Also, though I think this conversion is OK, it&apos;d probably be less confusing to make it explicit. I usually make single-parameter constructors explicit by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373581</commentid>
    <comment_count>20</comment_count>
      <attachid>327321</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-11-18 13:26:51 -0800</bug_when>
    <thetext>Created attachment 327321
Patch proposal

Thanks for the review Carlos. I see you marked the patch as r+ but, since you suggested quite some changes and I&apos;m adding one more on top (see the end of this comment), I&apos;m attaching yet one more version of the patch where I addressed all your comments and I&apos;m now asking for one more final review, hope you don&apos;t mind.

Now see my comments below...

(In reply to Carlos Garcia Campos from comment #18)
&gt; Comment on attachment 326469 [details]
&gt; Patch proposal
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=326469&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/CookieSoup.cpp:43
&gt; &gt; +Cookie::Cookie(SoupCookie* cookie)
&gt; &gt; +{
&gt; &gt; +    name = String::fromUTF8(cookie-&gt;name);
&gt; &gt; +    value = String::fromUTF8(cookie-&gt;value);
&gt; &gt; +    domain = String::fromUTF8(cookie-&gt;domain);
&gt; &gt; +    path = String::fromUTF8(cookie-&gt;path);
&gt; &gt; +    expires = cookie-&gt;expires ? static_cast&lt;double&gt;(soup_date_to_time_t(cookie-&gt;expires)) * 1000 : 0;
&gt; &gt; +    httpOnly = cookie-&gt;http_only;
&gt; &gt; +    secure = cookie-&gt;secure;
&gt; &gt; +    session = !cookie-&gt;expires;
&gt; 
&gt; Use the member initialization instead

Fixed.

&gt; Cookie::Cookie(SoupCookie* cookie)
&gt;     : name(String::fromUTF8(cookie-&gt;name))
&gt;     , value(String::fromUTF8(cookie-&gt;value))
&gt; ....
&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/CookieSoup.cpp:60
&gt; &gt; +    if (name.isNull() || value.isNull() || domain.isNull() || path.isNull())
&gt; &gt; +        return nullptr;
&gt; 
&gt; Could we use isNull()?

Not really, since Cookie::isNull() returns `false` only when *all* the internal attributes (name, domain, path, value, expired...) are nullptr/0/false, and in here I want to return nullptr if *either* of these four things are null, since otherwise I could not create a SoupCookie object.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:246
&gt; &gt; + * Asynchronously add a #SoupCookie to the underlying storage, which is not persistent
&gt; &gt; + * unless you explicitly call webkit_cookie_manager_set_persistent_storage().
&gt; 
&gt; Asynchronously add @cookie to @cookie_manager ? I don&apos;t think we need to
&gt; clarify the persistance here

Fixed.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:250
&gt; &gt; + */
&gt; 
&gt; Since: 2.20

Fixed.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:284
&gt; &gt; + */
&gt; 
&gt; Since: 2.20

Fixed.
 
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:296
&gt; &gt; + * @uri: the #SoupURI for the domain of the cookies to be retrieved
&gt; 
&gt; We don&apos;t expose SoupURI in our API, better use char* and create the soupURI
&gt; internally if needed.

Fixed.
 
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:302
&gt; &gt; + * Asynchronously get a list of #SoupCookie from @cookie_manager associated with @uri, which
&gt; &gt; + * must be either and HTTP or an HTTPS URL.
&gt; 
&gt; and -&gt; an

Fixed.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:306
&gt; &gt; + */
&gt; 
&gt; Since: 2.20

Fixed.
 
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:327
&gt; &gt; +        GList* cookies_list = nullptr;
&gt; 
&gt; cookies_list -&gt; cookieList

Fixed.
 
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:346
&gt; &gt; + * Returns: (element-type SoupCookie) (transfer full): A #GSList of #SoupCookie instances
&gt; &gt; + *    or %NULL in case of error.
&gt; 
&gt; If NULL means error, how can we return an empty list?

Oops! Documentation bug, fixed!

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:347
&gt; &gt; + */
&gt; 
&gt; Since: 2.20

Fixed.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:361
&gt; &gt; + * @name: the name the cookie to be deleted
&gt; &gt; + * @domain: the domain of the cookie to be deleted
&gt; &gt; + * @path: the path of the cookie to be deleted
&gt; 
&gt; It&apos;s weird that this doesn&apos;t receive a SoupCookie, maybe we can document
&gt; that name, domain and patch will be used to match the cookie.

If you think that the triplet {name, domain, path} is what acts as a primary key to identify the cookie, then it&apos;s not that weird. Besides, it&apos;s particularly convenient since soup_cookie_new() doesn&apos;t allow you to pass a null value, which would force you to construct a SoupCookie with some fake/dummy value here just to delete it, which is quite weird IMHO.

For that reason, I think that simply passing the three strings that are needed to identify the cookie to be deleted is simpler, cleaner and more convenient, so I&apos;ve re-written a bit the documentation to try to make it more clear now:

&quot;&quot;&quot;
 Asynchronously delete a #SoupCookie from the current session, that will be uniquely                                
 identified in the internal cookie jar by its name, domain and path.  
&quot;&quot;&quot;
  
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:371
&gt; &gt; + */
&gt; 
&gt; Since: 2.20

Fixed.
 
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:412
&gt; &gt; + * Returns: %TRUE if the cookie was added or %FALSE in case of error.
&gt; 
&gt; added -&gt; deleted

Fixed.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:413
&gt; &gt; + */
&gt; 
&gt; Since: 2.20

Fixed.
 
&gt; &gt; Source/WebKit/UIProcess/API/wpe/WebKitCookieManager.h:131
&gt; &gt; +WEBKIT_API GList*
&gt; 
&gt; GList* -&gt; GList *

Fixed.
 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:122
&gt; &gt; +        test-&gt;m_cookieAdded = added;
&gt; 
&gt; Does this make sense? we are asserting before if there&apos;s an error which is
&gt; the only case where the cookie isn&apos;t added no?

You&apos;re right, it&apos;s not needed. And the same applies to m_cookieDeleted. Fixed (by removing both things).
 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:148
&gt; &gt; +        g_list_free_full(m_cookies, reinterpret_cast&lt;GDestroyNotify&gt;(soup_cookie_free));
&gt; 
&gt; You should free the cookies in the destructor too.

Fixed.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:149
&gt; &gt; +        m_cookies = 0;
&gt; 
&gt; nullptr

Fixed.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:287
&gt; &gt; +    test-&gt;setAcceptPolicy(WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY);
&gt; 
&gt; No third party is already the default.

Fixed (by removing this line).
 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:332
&gt; &gt; +    g_assert_nonnull(foundCookies);
&gt; &gt; +    g_assert_cmpint(g_list_length(foundCookies), ==, 2);
&gt; 
&gt; g_list_length returns 0 in case list is null, so we don&apos;t need the previous
&gt; assert that isn&apos;t used in previous calls to getCookies() either.

Fixed (by removing the unnecessary asserts).


(In reply to Michael Catanzaro from comment #19)
&gt; Comment on attachment 326469 [details]
&gt; Patch proposal
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=326469&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/Cookie.h:71
&gt; &gt; +    Cookie(SoupCookie*);
&gt; 
&gt; Also, though I think this conversion is OK, it&apos;d probably be less confusing
&gt; to make it explicit. I usually make single-parameter constructors explicit
&gt; by default.

Fixed.


Last, I realized (thanks to one of the unit tests I had added, that was failing!) that I needed to change the implementation of NetworkStorageSession::deleteCookie() back to how I had it in my initial proposal, before this review from Michael:

&gt; &gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:326
&gt; &gt; +    GUniquePtr&lt;SoupCookie&gt; targetCookie(cookie);
&gt; &gt; +    GUniquePtr&lt;GSList&gt; cookiesList(soup_cookie_jar_get_cookie_list(cookieStorage(), uri.get(), TRUE));
&gt; &gt; +    for (GSList* item = cookiesList.get(); item; item = g_slist_next(item)) {
&gt; &gt; +        GUniquePtr&lt;SoupCookie&gt; soupCookie(static_cast&lt;SoupCookie*&gt;(item-&gt;data));
&gt; &gt; +
&gt; &gt; +        // Use (name, domain, path) as the primary key to identify the cookie.
&gt; &gt; +        if (g_strcmp0(soup_cookie_get_name(soupCookie.get()), soup_cookie_get_name(targetCookie.get()))
&gt; &gt; +            || g_strcmp0(soup_cookie_get_domain(soupCookie.get()), soup_cookie_get_domain(targetCookie.get()))
&gt; &gt; +            || g_strcmp0(soup_cookie_get_path(soupCookie.get()), soup_cookie_get_path(targetCookie.get())))
&gt; &gt; +            continue;
&gt; &gt; +
&gt; &gt; +        soup_cookie_jar_delete_cookie(cookieStorage(), soupCookie.get());
&gt; &gt; +        break;
&gt; 
&gt; This is inefficient. Imagine deleting a list of cookies... it should be O(n)
&gt; but now it&apos;s O(n^2) because you have to loop through roughly half the list
&gt; each time. Fortunately, I don&apos;t think we need to store the SoupCookies in
&gt; some other data structure to make this work, because
&gt; soup_cookie_jar_delete_cookie() doesn&apos;t work by comparing pointer values, it
&gt; works by checking the domain, name, value, and path of the cookie. So I
&gt; think you don&apos;t need to get the SoupCookie from the cookie jar: you can just
&gt; construct a new one yourself, and it should work. So you shouldn&apos;t need this
&gt; loop at all.

Following this comment, I replaced all that code with a simple call to soup_cookie_jar_delete_cookie(targetCookie.get()), but the problem is that such a thing won&apos;t work because what  soup_cookie_jar_delete_cookie() does internally is to (1) retrieve a list of cookies for a given domain -out of a hash table indexed by domain- and then (2) iterate through that list using soup_cookie_equal() to decide which cookie to delete. And since soup_cookie_equal() uses **name, path &amp; value** (curiously enough, it doesn&apos;t use the domain) to match the cookie in the jar with the one that needs to be deleted, this approach won&apos;t work with the API we are proposing because what we use to match the cookie is name, domain &amp; path, but not the value (since we might not know it after all if all we want is to delete a cookie identifying it by what it constitutes the primary key).

So, this seems to me to be a good solution after all even if it&apos;s not ideal. I could create a hash table here to keep a parallel structure that we could check to use the actual SoupCookie we want to delete without having to do this loop but in my mind that&apos;s a bit overkill for a few reasons:
  1. It would require initializing that hash table when creating the cookie storage by adding every single cookie in the jar to it (which would consume memory), just in case we want to delete a cookie through this new API afterwards.
  2. It&apos;s not really true that this is O(n^2) where n == number of cookies stored: we call soup_cookie_jar_get_cookie_list() to retrieve a list of cookies *for the given domain*, and that&apos;s the list we iterate over, which doesn&apos;t necessarily have to be too big (or not as big as if it was iterating through ALL the cookies stored), so this is a fairly relative problem.
  3. Deleting a cookie is not a common use case (otherwise this API would have existed already), so I think I&apos;d optimize for not adding extra artifacts here (such the proposed hash table) just to make this a bit more efficient at the expense of always using more memory, specially when the performance impact doesn&apos;t have to be that bad since it&apos;s O(n^2) where n == list of cookies for a given domain, not all of them.

So, for these reasons I simply brought the original code I had in place back for now, which gets the unit tests passing now again.

Now, another alternative I can think of that would remove this &quot;burden&quot; from WebKit2GTK itself (by requiring some extra work from the client) would be to actually have webkit_cookie_manager_delete_cookie() receive a SoupCookie* instead of the {name, domain, path} triplet. By doing that it would no longer be possible to conveniently remove a cookie by simple specifying those three values (ignoring the value), as it would require that the app first had retrieved the cookie that it wants to delete from the cookie storage. The advantage, however, would be that there would be no need to do this loop in NetworkStorageSessionSoup.cpp as simply calling soup_cookie_jar_delete_cookie() with the cookie passed would work, since this time soup_cookie_equal() would be able to match the right cookie as the value attribute would be set.

Carlos, Michael... what is your preference?:

  a. Keep the API as it is in the current patch (with webkit_cookie_manager_delete_cookie(name, domain, path)) + the funny loop in WebCore to match the cookie to be deleted
  b. Change the API so that webkit_cookie_manager_delete_cookie() receives a SoupCookie, simplifying the logic in WebKit + forcing apps to specify a full cookie (including &quot;value&quot;) to delete it

I personally don&apos;t have any strong preference, as I think both could work fine, but I want to stress that I have no problem in changing from (a) to (b) if that&apos;s what looks better to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373586</commentid>
    <comment_count>21</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-18 13:45:04 -0800</bug_when>
    <thetext>My slight preference would be (a) since it means less work for applications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373740</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-11-19 23:59:20 -0800</bug_when>
    <thetext>It&apos;s difficult to decide without knowing the main use case of this API. This is one of the reasons why we decided not to add new API to WebKit2 without a real use case, an application needing that new API and hopefully with a patch ready. If the normal use case is getting the list the list of cookies, store it somewhere and then delete a particular cookie, then the most convenient API is receiving a SoupCookie and of course, compare also de value. How is the user supposed to know the domain, name and path without getting the list of cookies before? In this use case I don&apos;t expect the user to create a cookie to delete, but use an existing one. If this is not the use case, then of course it&apos;s more convenient to pass the triplet, but I would like to understand the use case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373753</commentid>
    <comment_count>23</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-11-20 02:06:04 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #22)
&gt; It&apos;s difficult to decide without knowing the main use case of this API. This
&gt; is one of the reasons why we decided not to add new API to WebKit2 without a
&gt; real use case, an application needing that new API and hopefully with a
&gt; patch ready. If the normal use case is getting the list the list of cookies,
&gt; store it somewhere and then delete a particular cookie, then the most
&gt; convenient API is receiving a SoupCookie and of course, compare also de
&gt; value. How is the user supposed to know the domain, name and path without
&gt; getting the list of cookies before? In this use case I don&apos;t expect the user
&gt; to create a cookie to delete, but use an existing one.

This is a really strong point and one that made me now lean towards (b) instead, since it&apos;s true it&apos;s hard to know domain, name and path for a cookie without having retrieved it first. Actually, domain and path you might be able to &quot;guess/generate&quot; them, but there&apos;s no way you can know the name to do the match without having retrieved the cookie first.

Besides, as Carlos pointed out to me on IRC, libsoup receives a full SoupCookie as a parameter to delete it from the jar, which is another hint on that perhaps that&apos;s the right thing to do.

&gt; If this is not the
&gt; use case, then of course it&apos;s more convenient to pass the triplet, but I
&gt; would like to understand the use case.

You kind of convinced me that (b) is the way to go now, but before going all ahead and change the patch now I&apos;ll talk to Juan Pablo (or get him to reply here too, if possible) who is the person from Endless&apos; apps team who came up with this requirements, so he might know better what would be best from the application&apos;s side.

I think, though, that the API he really needed was add() and get(), as we proposed delete() too just for the API to be complete IIRC, so we might not get more light on that from his side (in which case we might consider simply not adding it, although the API would be a bit unbalanced in that case).

Last, perhaps Leo Ufimtsev might have some opinion on the topic too, since he expressed his interest in this API as well in https://bugs.webkit.org/show_bug.cgi?id=177932#c11.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373767</commentid>
    <comment_count>24</comment_count>
    <who name="Juan Pablo Ugarte">juanpablougarte</who>
    <bug_when>2017-11-20 05:42:24 -0800</bug_when>
    <thetext>(In reply to Mario Sanchez Prada from comment #23)
[...] 
&gt; I think, though, that the API he really needed was add() and get(), as we
&gt; proposed delete() too just for the API to be complete IIRC, so we might not
&gt; get more light on that from his side (in which case we might consider simply
&gt; not adding it, although the API would be a bit unbalanced in that case).

Right, my use case only require add() and get() but we tough it would be better to have delete() for API completeness.

I agree is better to maintain consistency with libsoup API and make delete() take a SoupCookie *, specially if its makes the implementation easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373771</commentid>
    <comment_count>25</comment_count>
      <attachid>327360</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-11-20 06:39:29 -0800</bug_when>
    <thetext>Created attachment 327360
Patch proposal

(In reply to Juan Pablo Ugarte from comment #24)
&gt; (In reply to Mario Sanchez Prada from comment #23)
&gt; [...] 
&gt; &gt; I think, though, that the API he really needed was add() and get(), as we
&gt; &gt; proposed delete() too just for the API to be complete IIRC, so we might not
&gt; &gt; get more light on that from his side (in which case we might consider simply
&gt; &gt; not adding it, although the API would be a bit unbalanced in that case).
&gt; 
&gt; Right, my use case only require add() and get() but we tough it would be
&gt; better to have delete() for API completeness.
&gt; 
&gt; I agree is better to maintain consistency with libsoup API and make delete()
&gt; take a SoupCookie *, specially if its makes the implementation easier.

Thanks. So, considering that Michael said he _slightly_ preferred (a) if that means less work for apps but that&apos;s unclear to be the case since you need the name anyway, I think we might be all onboard then with (b), so here is a new patch. Hopefully the last one!

Please review, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373774</commentid>
    <comment_count>26</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-20 07:32:29 -0800</bug_when>
    <thetext>Yeah, you&apos;ve convinced me that (b) is best.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373788</commentid>
    <comment_count>27</comment_count>
      <attachid>327360</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-11-20 08:39:51 -0800</bug_when>
    <thetext>Comment on attachment 327360
Patch proposal

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

&gt; Source/WebCore/platform/network/soup/CookieSoup.cpp:39
&gt; +    , expires(0)

Would it be possible to initialize this here?

, expires(cookie-&gt;expires ? static_cast&lt;double&gt;(soup_date_to_time_t(cookie-&gt;expires)) * 1000 : 0)

&gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:350
&gt; + * Returns: (element-type SoupCookie) (transfer full): A #GSList of #SoupCookie instances.

It&apos;s not a GSList, but a GList. Even if transfer full is used, I would still clarify that user should free the list and its contents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373827</commentid>
    <comment_count>28</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-11-20 14:00:27 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #27)
&gt; Comment on attachment 327360 [details]
&gt; Patch proposal
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=327360&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/CookieSoup.cpp:39
&gt; &gt; +    , expires(0)
&gt; 
&gt; Would it be possible to initialize this here?
&gt; 
&gt; , expires(cookie-&gt;expires ?
&gt; static_cast&lt;double&gt;(soup_date_to_time_t(cookie-&gt;expires)) * 1000 : 0)

Sure, actually that was my first approach but I changed it because I was unsure that was the right style. Will change it back before landing.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp:350
&gt; &gt; + * Returns: (element-type SoupCookie) (transfer full): A #GSList of #SoupCookie instances.
&gt; 
&gt; It&apos;s not a GSList, but a GList. Even if transfer full is used, I would still
&gt; clarify that user should free the list and its contents.

Right, I&apos;ll fix that too before landing too.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373828</commentid>
    <comment_count>29</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2017-11-20 14:02:54 -0800</bug_when>
    <thetext>Committed r225054: &lt;https://trac.webkit.org/changeset/225054&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323302</attachid>
            <date>2017-10-10 06:44:44 -0700</date>
            <delta_ts>2017-10-10 08:42:37 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-GTK-New-API-to-add-retrieve-and-delete-cookies-via-W.patch</filename>
            <type>text/plain</type>
            <size>49124</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA1MmFmYzkyYTY1OTRmZjRhNTNmYmVhYzUyYWU5MzRlMTdjNmFlMjA4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpb0B3ZWJraXQub3Jn
PgpEYXRlOiBUdWUsIDEwIE9jdCAyMDE3IDE0OjE0OjMwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
W0dUS10gTmV3IEFQSSB0byBhZGQsIHJldHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEKIFdl
YktpdENvb2tpZU1hbmFnZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzkzMgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpBZGRlZCBuZXcgQVBJIHRvIFdl
YktpdENvb2tpZU1hbmFnZXIgdG8gYWRkLCByZXRyaWV2ZSBhbmQgZGVsZXRlIGNvbXBsZXRlCmNv
b2tpZXMgaW50by9vdXQtb2YgYSBydW5uaW5nIHNlc3Npb24sIGFuZCB1cGRhdGVkIGRvY3VtZW50
YXRpb24gc2VjdGlvbnMuCgoqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2Vy
LmNwcDoKKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKTogTmV3IGZ1bmN0aW9uLgoo
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKTogRGl0dG8uCih3ZWJraXRf
Y29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMpOiBEaXR0by4KKHdlYmtpdF9jb29raWVfbWFuYWdl
cl9nZXRfY29va2llc19maW5pc2gpOiBEaXR0by4KKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llKTogRGl0dG8uCih3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9m
aW5pc2gpOiBEaXR0by4KKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmg6
IEFkZGVkIG5ldyBmdW5jdGlvbnMuCiogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFu
YWdlci5oOiBEaXR0by4KKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNl
Y3Rpb25zLnR4dDogRGl0dG8uCgpJbXBsZW1lbnRlZCBnZXRDb29raWVzKCkgYW5kIGRlbGV0ZUNv
b2tpZSgpIGluIHRoZSBTb3VwIGJhY2tlbmQsCmFuZCByZWZhY3RvcmVkIHNvbWUgdXRpbGl0eSBm
dW5jdGlvbnMgYW5kIGNvbnZlcnNpb25zIG91dCBvZgpOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3Vw
IGludG8gYSBuZXcgQ29va2llU291cC5jcHAgZmlsZSwgc28KdGhhdCB3ZSBub3cgY2FuIGNvbnZl
cnQgYmV0d2VlbiBTb3VwQ29va2llKiBhbmQgV2ViQ29yZTo6Q29va2llCmVhc2lseSBmcm9tIGFu
eXdoZXJlICh0aGlzIGlzIG5vdyBuZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2VzcykuCgoqIFBsYXRm
b3JtR1RLLmNtYWtlOiBBZGQgQ29va2llU291cC5jcHAuCiogUGxhdGZvcm1XUEUuY21ha2U6IEFk
ZCBDb29raWVTb3VwLmNwcC4KKiBwbGF0Zm9ybS9Db29raWUuaDogQWRkIGRlY2xhcmF0aW9ucyBm
b3IgdGhlIG5ldyBpbXBsaWNpdCBjb252ZXJzaW9ucy4KKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Q29va2llU291cC5jcHA6IEFkZGVkLgooV2ViQ29yZTo6Q29va2llOjpDb29raWUpOiBOZXcgY29u
c3RydWN0b3IsIGNyZWF0ZXMgYSBXZWJDb3JlOjpDb29raWUgb3V0IG9mIGEgU291cENvb2tpZSou
CihXZWJDb3JlOjptc1RvU291cERhdGUpOiBNb3ZlZCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
blNvdXAuY3BwLgooV2ViQ29yZTo6Q29va2llOjpvcGVyYXRvciBTb3VwQ29va2llICogY29uc3Qp
OiBOZXcgb3ZlcnJpZGUsIGJhc2VkIG9uIHRvU291cENvb2tpZSgpLgoqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcDoKKFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyk6IFVzZWQgdGhlIG5ldyBpbXBsaWNpdCBjb252ZXJz
aW9uLgooV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUpOiBOZXds
eSBpbXBsZW1lbnRlZC4KKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0Q29va2ll
cyk6IE5ld2x5IGltcGxlbWVudGVkLgoKQWRkZWQgbmV3IHRlc3QgY2FzZXMgdG8gY292ZXIgdGhl
IG5ld2x5IGFkZGVkIEFQSSBmb3IgV2ViS2l0Q29va2llTWFuYWdlcjoKd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2FkZF9jb29raWUsIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyBhbmQK
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUuCgoqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R0xpYi9UZXN0Q29va2llTWFuYWdlci5jcHA6Cih0ZXN0Q29va2llTWFuYWdlckFk
ZENvb2tpZSk6IEFkZGVkLgoodGVzdENvb2tpZU1hbmFnZXJHZXRDb29raWVzKTogQWRkZWQuCih0
ZXN0Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZSk6IEFkZGVkLgooc2VydmVyQ2FsbGJhY2spOiBT
bWFsbCB1cGRhdGUgdG8gYXZvaWQgaGFyZGNvZGluZyBzdHJpbmdzIHdlIHJldXNlLgooYmVmb3Jl
QWxsKTogQWRkZWQgdGhlIG5ldyB0ZXN0IGNhc2VzIHRvIHRoZSB0ZXN0IHN1aXRlLgotLS0KIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI1ICsr
KwogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgICAgICAgICAgICAgICAgICAgfCAg
IDEgKwogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UgICAgICAgICAgICAgICAgICAg
fCAgIDEgKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llLmggICAgICAgICAgICAgICAg
ICAgfCAgIDMgKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAu
Y3BwICAgfCAgNzcgKysrKysrKwogLi4uL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Np
b25Tb3VwLmNwcCAgICAgfCAgNjQgKysrLS0tCiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAyMSArKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRDb29raWVNYW5hZ2VyLmNwcCAgICAgfCAxODEgKysrKysrKysrKysrKysrKwogLi4uL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmggfCAgNDAgKysrKwog
Li4uL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQgICAgICAgfCAgIDYg
KwogLi4uL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmggfCAg
MzkgKysrKwogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgMTggKysKIC4uLi9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVNYW5hZ2VyLmNwcCAg
ICAgICAgIHwgMjMxICsrKysrKysrKysrKysrKysrKysrLQogMTMgZmlsZXMgY2hhbmdlZCwgNjc0
IGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3VwLmNwcAoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCA1ODZlNTE4YjIzMi4uMDM2MDdkODgxMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBA
QAorMjAxNy0xMC0xMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvQGVuZGxlc3NtLmNvbT4K
KworICAgICAgICBbR1RLXSBOZXcgQVBJIHRvIGFkZCwgcmV0cmlldmUgYW5kIGRlbGV0ZSBjb29r
aWVzIHZpYSBXZWJLaXRDb29raWVNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBnZXRDb29raWVzKCkgYW5kIGRlbGV0ZUNv
b2tpZSgpIGluIHRoZSBTb3VwIGJhY2tlbmQsCisgICAgICAgIGFuZCByZWZhY3RvcmVkIHNvbWUg
dXRpbGl0eSBmdW5jdGlvbnMgYW5kIGNvbnZlcnNpb25zIG91dCBvZgorICAgICAgICBOZXR3b3Jr
U3RvcmFnZVNlc3Npb25Tb3VwIGludG8gYSBuZXcgQ29va2llU291cC5jcHAgZmlsZSwgc28KKyAg
ICAgICAgdGhhdCB3ZSBub3cgY2FuIGNvbnZlcnQgYmV0d2VlbiBTb3VwQ29va2llKiBhbmQgV2Vi
Q29yZTo6Q29va2llCisgICAgICAgIGVhc2lseSBmcm9tIGFueXdoZXJlICh0aGlzIGlzIG5vdyBu
ZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2VzcykuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFr
ZTogQWRkIENvb2tpZVNvdXAuY3BwLgorICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOiBBZGQg
Q29va2llU291cC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vQ29va2llLmg6IEFkZCBkZWNsYXJh
dGlvbnMgZm9yIHRoZSBuZXcgaW1wbGljaXQgY29udmVyc2lvbnMuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZTo6Q29va2llKTogTmV3IGNvbnN0cnVjdG9yLCBjcmVhdGVzIGEgV2ViQ29yZTo6Q29v
a2llIG91dCBvZiBhIFNvdXBDb29raWUqLgorICAgICAgICAoV2ViQ29yZTo6bXNUb1NvdXBEYXRl
KTogTW92ZWQgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZTo6b3BlcmF0b3IgU291cENvb2tpZSAqIGNvbnN0KTogTmV3IG92ZXJyaWRl
LCBiYXNlZCBvbiB0b1NvdXBDb29raWUoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMpOiBVc2VkIHRoZSBuZXcgaW1wbGljaXQgY29u
dmVyc2lvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRl
Q29va2llKTogTmV3bHkgaW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OmdldENvb2tpZXMpOiBOZXdseSBpbXBsZW1lbnRlZC4KKwogMjAxNy0xMC0x
MCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuZGVyT2Jq
ZWN0OjpkZXN0cm95KCkgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBhZnRlciByZW5kZXJlciBoYXMg
YmVlbiByZW1vdmVkIGZyb20gdGhlIHRyZWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXgg
YjA3MzljMDE2NmMuLmIzZjc4ZjkyNzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAt
MTE0LDYgKzExNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L25ldHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwCiAgICAgcGxhdGZv
cm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ29va2llSmFyU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2ll
U291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFnZVNvdXAuY3Bw
CiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0NyZWRlbnRpYWxTdG9yYWdlU291cC5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtV1BFLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21h
a2UKaW5kZXggNmZlNjNjZDg3ZTIuLjc3NDEyMDhiNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5j
bWFrZQpAQCAtMTA0LDYgKzEwNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL25ldHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5jcHAKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvQ29va2llU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFn
ZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0NyZWRlbnRpYWxTdG9yYWdlU291
cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ29va2llLmgKaW5kZXggMDkzM2NjYTA3M2MuLmUwM2FmY2ViZDFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Db29raWUuaApAQCAtNjcsNiArNjcsOSBAQCBzdHJ1Y3QgQ29va2llIHsKICNpZmRlZiBf
X09CSkNfXwogICAgIFdFQkNPUkVfRVhQT1JUIENvb2tpZShOU0hUVFBDb29raWUgKik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgTlNIVFRQQ29va2llICooKSBjb25zdDsKKyNlbGlmIFVT
RShTT1VQKQorICAgIENvb2tpZShTb3VwQ29va2llICopOworICAgIG9wZXJhdG9yIFNvdXBDb29r
aWUgKigpIGNvbnN0OwogI2VuZGlmCiAKICAgICBib29sIGlzTnVsbCgpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU291cC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU291cC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRiYWM4YTAyMjdkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNv
dXAuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb2tpZS5oIgorCisjaW5jbHVkZSA8
d3RmL0RhdGVNYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29va2llOjpDb29raWUo
U291cENvb2tpZSAqY29va2llKQoreworICAgIG5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KGNvb2tp
ZS0+bmFtZSk7CisgICAgdmFsdWUgPSBTdHJpbmc6OmZyb21VVEY4KGNvb2tpZS0+dmFsdWUpOwor
ICAgIGRvbWFpbiA9IFN0cmluZzo6ZnJvbVVURjgoY29va2llLT5kb21haW4pOworICAgIHBhdGgg
PSBTdHJpbmc6OmZyb21VVEY4KGNvb2tpZS0+cGF0aCk7CisgICAgZXhwaXJlcyA9IGNvb2tpZS0+
ZXhwaXJlcyA/IHN0YXRpY19jYXN0PGRvdWJsZT4oc291cF9kYXRlX3RvX3RpbWVfdChjb29raWUt
PmV4cGlyZXMpKSAqIDEwMDAgOiAwOworICAgIGh0dHBPbmx5ID0gY29va2llLT5odHRwX29ubHk7
CisgICAgc2VjdXJlID0gY29va2llLT5zZWN1cmU7CisgICAgc2Vzc2lvbiA9ICFjb29raWUtPmV4
cGlyZXM7Cit9CisKK3N0YXRpYyBTb3VwRGF0ZSogbXNUb1NvdXBEYXRlKGRvdWJsZSBtcykKK3sK
KyAgICBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKKyAgICBpbnQgZGF5T2ZZZWFyID0gZGF5SW5Z
ZWFyKG1zLCB5ZWFyKTsKKyAgICBib29sIGxlYXBZZWFyID0gaXNMZWFwWWVhcih5ZWFyKTsKKwor
ICAgIC8vIG1vbnRoRnJvbURheUluWWVhcigpIHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgWzAsMTFd
IHJhbmdlLCB3aGlsZSBzb3VwX2RhdGVfbmV3KCkgZXhwZWN0cworICAgIC8vIGEgdmFsdWUgaW4g
dGhlIFsxLDEyXSByYW5nZSwgbWVhbmluZyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGFkanVzdCB0aGUg
bW9udGggdmFsdWUuCisgICAgcmV0dXJuIHNvdXBfZGF0ZV9uZXcoeWVhciwgbW9udGhGcm9tRGF5
SW5ZZWFyKGRheU9mWWVhciwgbGVhcFllYXIpICsgMSwgZGF5SW5Nb250aEZyb21EYXlJblllYXIo
ZGF5T2ZZZWFyLCBsZWFwWWVhciksIG1zVG9Ib3VycyhtcyksIG1zVG9NaW51dGVzKG1zKSwgc3Rh
dGljX2Nhc3Q8aW50PihtcyAvIDEwMDApICUgNjApOworfQorCitDb29raWU6Om9wZXJhdG9yIFNv
dXBDb29raWUgKigpIGNvbnN0Cit7CisgICAgaWYgKG5hbWUuaXNOdWxsKCkgfHwgdmFsdWUuaXNO
dWxsKCkgfHwgZG9tYWluLmlzTnVsbCgpIHx8IHBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgU291cENvb2tpZSogc291cENvb2tpZSA9IHNvdXBfY29va2llX25l
dyhuYW1lLnV0ZjgoKS5kYXRhKCksIHZhbHVlLnV0ZjgoKS5kYXRhKCksCisgICAgICAgIGRvbWFp
bi51dGY4KCkuZGF0YSgpLCBwYXRoLnV0ZjgoKS5kYXRhKCksIC0xKTsKKworICAgIHNvdXBfY29v
a2llX3NldF9odHRwX29ubHkoc291cENvb2tpZSwgaHR0cE9ubHkpOworICAgIHNvdXBfY29va2ll
X3NldF9zZWN1cmUoc291cENvb2tpZSwgc2VjdXJlKTsKKworICAgIGlmICghc2Vzc2lvbikgewor
ICAgICAgICBTb3VwRGF0ZSogZGF0ZSA9IG1zVG9Tb3VwRGF0ZShleHBpcmVzKTsKKyAgICAgICAg
c291cF9jb29raWVfc2V0X2V4cGlyZXMoc291cENvb2tpZSwgZGF0ZSk7CisgICAgICAgIHNvdXBf
ZGF0ZV9mcmVlKGRhdGUpOworICAgIH0KKworICAgIHJldHVybiBzb3VwQ29va2llOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAK
aW5kZXggY2I4NjhjYzA3YjYuLmRlZDViNjFhZGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vz
c2lvblNvdXAuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb3VwTmV0d29ya1Nlc3Npb24uaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0dVbmlxdWVQdHJTb3VwLmg+CiAjaW5jbHVkZSA8bGlic291cC9z
b3VwLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KQEAgLTI4OSwzNSArMjkwLDEwIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpz
YXZlQ3JlZGVudGlhbFRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwCiAjZW5k
aWYKIH0KIAotc3RhdGljIFNvdXBEYXRlKiBtc1RvU291cERhdGUoZG91YmxlIG1zKQotewotICAg
IGludCB5ZWFyID0gbXNUb1llYXIobXMpOwotICAgIGludCBkYXlPZlllYXIgPSBkYXlJblllYXIo
bXMsIHllYXIpOwotICAgIGJvb2wgbGVhcFllYXIgPSBpc0xlYXBZZWFyKHllYXIpOwotCi0gICAg
Ly8gbW9udGhGcm9tRGF5SW5ZZWFyKCkgcmV0dXJucyBhIHZhbHVlIGluIHRoZSBbMCwxMV0gcmFu
Z2UsIHdoaWxlIHNvdXBfZGF0ZV9uZXcoKSBleHBlY3RzCi0gICAgLy8gYSB2YWx1ZSBpbiB0aGUg
WzEsMTJdIHJhbmdlLCBtZWFuaW5nIHdlIGhhdmUgdG8gbWFudWFsbHkgYWRqdXN0IHRoZSBtb250
aCB2YWx1ZS4KLSAgICByZXR1cm4gc291cF9kYXRlX25ldyh5ZWFyLCBtb250aEZyb21EYXlJblll
YXIoZGF5T2ZZZWFyLCBsZWFwWWVhcikgKyAxLCBkYXlJbk1vbnRoRnJvbURheUluWWVhcihkYXlP
ZlllYXIsIGxlYXBZZWFyKSwgbXNUb0hvdXJzKG1zKSwgbXNUb01pbnV0ZXMobXMpLCBzdGF0aWNf
Y2FzdDxpbnQ+KG1zIC8gMTAwMCkgJSA2MCk7Ci19Ci0KLXN0YXRpYyBTb3VwQ29va2llKiB0b1Nv
dXBDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCi17Ci0gICAgU291cENvb2tpZSogc291cENv
b2tpZSA9IHNvdXBfY29va2llX25ldyhjb29raWUubmFtZS51dGY4KCkuZGF0YSgpLCBjb29raWUu
dmFsdWUudXRmOCgpLmRhdGEoKSwKLSAgICAgICAgY29va2llLmRvbWFpbi51dGY4KCkuZGF0YSgp
LCBjb29raWUucGF0aC51dGY4KCkuZGF0YSgpLCAtMSk7Ci0gICAgc291cF9jb29raWVfc2V0X2h0
dHBfb25seShzb3VwQ29va2llLCBjb29raWUuaHR0cE9ubHkpOwotICAgIHNvdXBfY29va2llX3Nl
dF9zZWN1cmUoc291cENvb2tpZSwgY29va2llLnNlY3VyZSk7Ci0gICAgaWYgKCFjb29raWUuc2Vz
c2lvbikgewotICAgICAgICBTb3VwRGF0ZSogZGF0ZSA9IG1zVG9Tb3VwRGF0ZShjb29raWUuZXhw
aXJlcyk7Ci0gICAgICAgIHNvdXBfY29va2llX3NldF9leHBpcmVzKHNvdXBDb29raWUsIGRhdGUp
OwotICAgICAgICBzb3VwX2RhdGVfZnJlZShkYXRlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNvdXBD
b29raWU7Ci19Ci0KIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzKGNvbnN0
IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmKQogewogICAg
IGZvciAoYXV0byBjb29raWUgOiBjb29raWVzKQotICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfYWRk
X2Nvb2tpZShjb29raWVTdG9yYWdlKCksIHRvU291cENvb2tpZShjb29raWUpKTsKKyAgICAgICAg
c291cF9jb29raWVfamFyX2FkZF9jb29raWUoY29va2llU3RvcmFnZSgpLCBjb29raWUpOwogfQog
CiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llKGNvbnN0IENvb2tpZSYpCkBA
IC0zMjUsOSArMzAxLDI4IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWUo
Y29uc3QgQ29va2llJikKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXSzIgdG8gdXNlLgog
fQogCi12b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IENvb2tp
ZSYpCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IENvb2tp
ZSYgY29va2llKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCisg
ICAgLy8gV2UgbmVlZCB0byBzcGVjaWZ5IHRoZSBIVFRQIHNjaGVtZSB0byBjb25zdHJ1Y3QgYSB2
YWxpZCBTb3VwVVJJLAorICAgIC8vIHNvIHRoYXQgd2UgY2FuIGxvb2sgdXAgZm9yIHRoZSBIVFRQ
IGNvb2tpZSBpbiB0aGUgamFyLgorICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpKHNvdXBfdXJp
X25ldyhudWxscHRyKSk7CisgICAgc291cF91cmlfc2V0X3NjaGVtZSh1cmkuZ2V0KCksIFNPVVBf
VVJJX1NDSEVNRV9IVFRQKTsKKyAgICBzb3VwX3VyaV9zZXRfaG9zdCh1cmkuZ2V0KCksIGNvb2tp
ZS5kb21haW4udXRmOCgpLmRhdGEoKSk7CisgICAgc291cF91cmlfc2V0X3BhdGgodXJpLmdldCgp
LCBjb29raWUucGF0aC51dGY4KCkuZGF0YSgpKTsKKworICAgIEdVbmlxdWVQdHI8U291cENvb2tp
ZT4gdGFyZ2V0Q29va2llKGNvb2tpZSk7CisgICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXNM
aXN0KHNvdXBfY29va2llX2phcl9nZXRfY29va2llX2xpc3QoY29va2llU3RvcmFnZSgpLCB1cmku
Z2V0KCksIFRSVUUpKTsKKyAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXNMaXN0LmdldCgp
OyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIEdVbmlxdWVQdHI8
U291cENvb2tpZT4gc291cENvb2tpZShzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0
YSkpOworCisgICAgICAgIC8vIFVzZSAobmFtZSwgZG9tYWluLCBwYXRoKSBhcyB0aGUgcHJpbWFy
eSBrZXkgdG8gaWRlbnRpZnkgdGhlIGNvb2tpZS4KKyAgICAgICAgaWYgKGdfc3RyY21wMChzb3Vw
X2Nvb2tpZV9nZXRfbmFtZShzb3VwQ29va2llLmdldCgpKSwgc291cF9jb29raWVfZ2V0X25hbWUo
dGFyZ2V0Q29va2llLmdldCgpKSkKKyAgICAgICAgICAgIHx8IGdfc3RyY21wMChzb3VwX2Nvb2tp
ZV9nZXRfZG9tYWluKHNvdXBDb29raWUuZ2V0KCkpLCBzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKHRh
cmdldENvb2tpZS5nZXQoKSkpCisgICAgICAgICAgICB8fCBnX3N0cmNtcDAoc291cF9jb29raWVf
Z2V0X3BhdGgoc291cENvb2tpZS5nZXQoKSksIHNvdXBfY29va2llX2dldF9wYXRoKHRhcmdldENv
b2tpZS5nZXQoKSkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc291cF9jb29r
aWVfamFyX2RlbGV0ZV9jb29raWUoY29va2llU3RvcmFnZSgpLCBzb3VwQ29va2llLmdldCgpKTsK
KyAgICB9CiB9CiAKIFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0QWxs
Q29va2llcygpCkBAIC0zMzYsMTAgKzMzMSwxNyBAQCBWZWN0b3I8Q29va2llPiBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OmdldEFsbENvb2tpZXMoKQogICAgIHJldHVybiB7IH07CiB9CiAKLVZlY3Rv
cjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0Q29va2llcyhjb25zdCBVUkwmKQor
VmVjdG9yPENvb2tpZT4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRDb29raWVzKGNvbnN0IFVS
TCYgdXJsKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCi0gICAg
cmV0dXJuIHsgfTsKKyAgICBWZWN0b3I8Q29va2llPiBjb29raWVzOworICAgIEdVbmlxdWVQdHI8
U291cFVSST4gdXJpID0gdXJsLmNyZWF0ZVNvdXBVUkkoKTsKKyAgICBHVW5pcXVlUHRyPEdTTGlz
dD4gY29va2llc0xpc3Qoc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChjb29raWVTdG9y
YWdlKCksIHVyaS5nZXQoKSwgVFJVRSkpOworICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2ll
c0xpc3QuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAg
R1VuaXF1ZVB0cjxTb3VwQ29va2llPiBzb3VwQ29va2llKHN0YXRpY19jYXN0PFNvdXBDb29raWUq
PihpdGVtLT5kYXRhKSk7CisgICAgICAgIGNvb2tpZXMuYXBwZW5kKFdlYkNvcmU6OkNvb2tpZShz
b3VwQ29va2llLmdldCgpKSk7CisgICAgfQorCisgICAgcmV0dXJuIGNvb2tpZXM7CiB9CiAKIHZv
aWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpmbHVzaENvb2tpZVN0b3JlKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
YWIwZTQ5MjU3MmIuLjg4NTk5ZmJlYmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE3
LTEwLTEwICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW9AZW5kbGVzc20uY29tPgorCisgICAg
ICAgIFtHVEtdIE5ldyBBUEkgdG8gYWRkLCByZXRyaWV2ZSBhbmQgZGVsZXRlIGNvb2tpZXMgdmlh
IFdlYktpdENvb2tpZU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NzkzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIG5ldyBBUEkgdG8gV2ViS2l0Q29va2llTWFuYWdlciB0byBhZGQs
IHJldHJpZXZlIGFuZCBkZWxldGUgY29tcGxldGUKKyAgICAgICAgY29va2llcyBpbnRvL291dC1v
ZiBhIHJ1bm5pbmcgc2Vzc2lvbiwgYW5kIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbiBzZWN0aW9ucy4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKTogTmV3IGZ1bmN0aW9u
LgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKTogRGl0
dG8uCisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMpOiBEaXR0by4K
KyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llc19maW5pc2gpOiBEaXR0
by4KKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKTogRGl0dG8u
CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2gpOiBE
aXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmg6
IEFkZGVkIG5ldyBmdW5jdGlvbnMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0
Q29va2llTWFuYWdlci5oOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dDogRGl0dG8uCisKIDIwMTctMTAtMTAgIEFkcmlh
biBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1BFXSBC
dWlsZCBmYWlsdXJlIGR1ZSB0byBpbnZhbGlkIGNhc3Qgb2YgRUdMTmF0aXZlV2luZG93VHlwZSB3
aGVuIHRhcmdldHRpbmcgNjQtYml0IEFSTQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAppbmRleCBlZWQyNzAyNjY0
Ny4uZjNiMjY4ZjNkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMzMsNiArMjMzLDE4NyBAQCBX
ZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRf
cG9saWN5X2ZpbmlzaChXZWJLaXRDbwogfQogCiAvKioKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llOgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29raWVNYW5hZ2Vy
CisgKiBAdXJpOiB0aGUgI1NvdXBVUkkgd2l0aCB0aGUgVVJJIG9mIHRoZSBvcmlnaW5hdGluZyBy
ZXF1ZXN0CisgKiBAY29va2llOiB0aGUgI1NvdXBDb29raWUgdG8gYmUgYWRkZWQKKyAqIEBjYW5j
ZWxsYWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3Jl
CisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8g
Y2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1
cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNo
cm9ub3VzbHkgYWRkIGEgI1NvdXBDb29raWUgdG8gdGhlIGN1cnJlbnQgc2Vzc2lvbiwgYXNzb2Np
YXRlZCB0byB0aGUgb3JpZ2luYXRpbmcKKyAqIHJlcXVlc3Qgc3BlY2lmaWVkIGJ5IEB1cmksIHdo
aWNoIG11c3QgYmUgZWl0aGVyIGFuZCBIVFRQIG9yIGFuIEhUVFAgVVJMLiBJbiBjYXNlIHRoZQor
ICogI1NvdXBDb29raWUgcGFzc2VkIGFzIHRoZSBAY29va2llIHBhcmFtZXRlciBkb2VzIG5vdCBo
YXZlIGEgdmFsaWQgZG9tYWluIHNldCB5ZXQsCisgKiB0aGlzIG1ldGhvZCB3aWxsIGludGVybmFs
bHkgdXNlIHRoZSBob3N0IHBhcnQgb2YgdGhlIHBhc3NlZCBAdXJsIHBhcmFtZXRlciB0byBzZXQK
KyAqIHRoZSBjb29raWUncyBkb21haW4uCisgKgorICogV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZp
bmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhlbiBjYWxsCisgKiB3
ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZV9maW5pc2goKSB0byBnZXQgdGhlIHJlc3Vs
dCBvZiB0aGUgb3BlcmF0aW9uLgorICovCit2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRf
Y29va2llKFdlYktpdENvb2tpZU1hbmFnZXIgKm1hbmFnZXIsIFNvdXBVUkkgKnVyaSwgU291cENv
b2tpZSAqY29va2llLCBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxi
YWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bChTT1VQX1VSSV9WQUxJRF9GT1JfSFRUUCh1cmkpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNv
b2tpZSk7CisKKyAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBjb29raWVzOworICAgIGNvb2tp
ZXMuYXBwZW5kKFdlYkNvcmU6OkNvb2tpZShjb29raWUpKTsKKworICAgIEdSZWZQdHI8R1Rhc2s+
IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJh
Y2ssIHVzZXJEYXRhKSk7CisKKyAgICAvLyBXZWJDb29raWVNYW5hZ2VyUHJveHkgZXhwZWN0cyBh
biBVUkwgZm9yIHRoZSBkb21haW4gYXMgd2VsbCwgd2hpY2gKKyAgICAvLyB3aWxsIGVpdGhlciBi
ZSB0YWtlbiBmcm9tIHRoZSBkb21haW4gaW4gdGhlIFNvdXBDb29raWUgcGFzc2VkLCBpZgorICAg
IC8vIHByZXNlbnQsIG9yIHJpZ2h0IGZyb20gdGhlIFVSSSdzIGhvc3QsIHNvIHdlIGJ1aWxkIGl0
IGhlcmUuCisgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBkb21haW5VUkwoc291cF91cmlfbmV3KG51
bGxwdHIpKTsKKyAgICBjb25zdCBjaGFyKiBjb29raWVEb21haW4gPSBzb3VwX2Nvb2tpZV9nZXRf
ZG9tYWluKGNvb2tpZSk7CisgICAgc291cF91cmlfc2V0X3NjaGVtZShkb21haW5VUkwuZ2V0KCks
IHNvdXBfdXJpX2dldF9zY2hlbWUodXJpKSk7CisgICAgc291cF91cmlfc2V0X2hvc3QoZG9tYWlu
VVJMLmdldCgpLCBjb29raWVEb21haW4gPyBjb29raWVEb21haW4gOiBzb3VwX3VyaV9nZXRfaG9z
dCh1cmkpKTsKKyAgICBzb3VwX3VyaV9zZXRfcGF0aChkb21haW5VUkwuZ2V0KCksICIvIik7CisK
KyAgICBhdXRvIHNlc3Npb25JRCA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9y
ZShtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikud2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25J
RCgpOworICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7CisKKyAgICAv
LyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJh
c2Ugb24gZGlzayByZWdhcmRsZXNzCisgICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRv
IHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KKyAgICBwcm9j
ZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29r
aWVzKHNlc3Npb25JRCwgY29va2llcywgV2ViQ29yZTo6VVJMKHVyaSksIFdlYkNvcmU6OlVSTChk
b21haW5VUkwuZ2V0KCkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKENhbGxiYWNrQmFzZTo6RXJy
b3IgZXJyb3IpIHsKKyAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIGVy
cm9yID09IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOworICAgIH0pOworfQorCisvKioKKyAq
IHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaDoKKyAqIEBjb29raWVfbWFu
YWdlcjogYSAjV2ViS2l0Q29va2llTWFuYWdlcgorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0
CisgKiBAZXJyb3I6IHJldHVybiBsb2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3Jl
CisgKgorICogRmluaXNoIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKCkuCisgKgorICogUmV0dXJuczogJVRSVUUg
aWYgdGhlIGNvb2tpZSB3YXMgYWRkZWQgb3IgJUZBTFNFIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8K
K2dib29sZWFuIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaChXZWJLaXRD
b29raWVNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgR0Vycm9yICoqZXJy
b3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VS
KG1hbmFnZXIpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3Zh
bGlkKHJlc3VsdCwgbWFuYWdlciksIEZBTFNFKTsKKworICAgIHJldHVybiBnX3Rhc2tfcHJvcGFn
YXRlX2Jvb2xlYW4oR19UQVNLKHJlc3VsdCksIGVycm9yKTsKK30KKworLyoqCisgKiB3ZWJraXRf
Y29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXM6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktp
dENvb2tpZU1hbmFnZXIKKyAqIEB1cmk6IHRoZSAjU291cFVSSSBmb3Igd2hpY2ggdGhlIGxpc3Qg
b2YgY29va2llcyB3aWxsIGJlIHJldHJpZXZlZCBmcm9tCisgKiBAY2FuY2VsbGFibGU6IChhbGxv
dy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQorICogQGNhbGxiYWNr
OiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUg
cmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdGhlIGRhdGEg
dG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJvbm91c2x5IGdldCBh
IGxpc3Qgb2YgI1NvdXBDb29raWUgZnJvbSBAY29va2llX21hbmFnZXIgYXNzb2NpYXRlZCB3aXRo
IEB1cmksIHdoaWNoCisgKiBtdXN0IGJlIGVpdGhlciBhbmQgSFRUUCBvciBhbiBIVFRQIFVSTC4K
KyAqCisgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJl
IGNhbGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRf
Y29va2llc19maW5pc2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorICov
Cit2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5h
Z2VyICptYW5hZ2VyLCBTb3VwVVJJICp1cmksIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsIEdB
c3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFNPVVBfVVJJX1ZBTElEX0ZPUl9IVFRQKHVyaSkpOworCisgICAgR1Jl
ZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxh
YmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKKworICAgIGF1dG8gc2Vzc2lvbklEID0gd2Via2l0
V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KS53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCk7CisgICAgY29uc3QgYXV0byYgcHJvY2Vz
c1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKTsKKworICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBm
cm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKKyAgICAv
LyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdG8gdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUg
Zmlyc3QgcHJvY2VzcyBwb29sLgorICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMoc2Vzc2lvbklELCBXZWJDb3JlOjpVUkwo
dXJpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2ll
PiYgY29va2llcywgQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICBHTGlzdCog
Y29va2llc19saXN0ID0gbnVsbHB0cjsKKyAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29r
aWVzKQorICAgICAgICAgICAgY29va2llc19saXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2llc19s
aXN0LCBjb29raWUpOworCisgICAgICAgIGdfdGFza19yZXR1cm5fcG9pbnRlcih0YXNrLmdldCgp
LCBnX2xpc3RfcmV2ZXJzZShjb29raWVzX2xpc3QpLCBbXShncG9pbnRlciBkYXRhKSB7CisgICAg
ICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKHN0YXRpY19jYXN0PEdMaXN0Kj4oZGF0YSksIHJlaW50
ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KHNvdXBfY29va2llX2ZyZWUpKTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKKy8qKgorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29r
aWVzX2ZpbmlzaDoKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0Q29va2llTWFuYWdlcgor
ICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJldHVybiBsb2NhdGlvbiBm
b3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNoIGFuIGFzeW5jaHJvbm91
cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
cygpLgorICoKKyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgU291cENvb2tpZSkgKHRyYW5zZmVy
IGZ1bGwpOiBBICNHU0xpc3Qgb2YgI1NvdXBDb29raWUgaW5zdGFuY2VzCisgKiAgICBvciAlTlVM
TCBpbiBjYXNlIG9mIGVycm9yLgorICovCitHTGlzdCogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9jb29raWVzX2ZpbmlzaChXZWJLaXRDb29raWVNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1
bHQgKnJlc3VsdCwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpLCBudWxscHRyKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgbnVsbHB0cik7
CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxHTGlzdCo+KGdfdGFza19wcm9wYWdhdGVf
cG9pbnRlcihHX1RBU0socmVzdWx0KSwgZXJyb3IpKTsKK30KKworLyoqCisgKiB3ZWJraXRfY29v
a2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZToKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0
Q29va2llTWFuYWdlcgorICogQG5hbWU6IHRoZSBuYW1lIHRoZSBjb29raWUgdG8gYmUgZGVsZXRl
ZAorICogQGRvbWFpbjogdGhlIGRvbWFpbiBvZiB0aGUgY29va2llIHRvIGJlIGRlbGV0ZWQKKyAq
IEBwYXRoOiB0aGUgcGF0aCBvZiB0aGUgY29va2llIHRvIGJlIGRlbGV0ZWQKKyAqIEBjYW5jZWxs
YWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisg
KiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2Fs
bCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUp
OiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9u
b3VzbHkgZGVsZXRlIGEgI1NvdXBDb29raWUgZnJvbSB0aGUgY3VycmVudCBzZXNzaW9uLCBhcyB1
bmlxdWVsbHkgaWRlbnRpZmllZAorICogYnkgaXRzIG5hbWUsIGRvbWFpbiBhbmQgcGF0aC4KKyAq
CisgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNh
bGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVf
Y29va2llX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8K
K3ZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUoV2ViS2l0Q29va2llTWFu
YWdlciAqbWFuYWdlciwgY29uc3QgZ2NoYXIgKm5hbWUsIGNvbnN0IGdjaGFyICpkb21haW4sIGNv
bnN0IGdjaGFyICpwYXRoLCBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNh
bGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChuYW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGRvbWFpbik7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChwYXRoKTsKKworICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190
YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CisKKyAg
ICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIG5hbWUsIGRvbWFpbiBhbmQgcGF0aCwgd2hpY2gg
aXMgd2hhdCB3aWxsIGJlIHVzZWQKKyAgICAvLyB0byBpZGVudGlmeSB0aGUgY29va2llIGluIFNv
dXBDb29raWVKYXIgaGVsZCBieSB0aGUgb3RoZXIgcHJvY2Vzcy4gSG93ZXZlciwKKyAgICAvLyB3
ZSBzdGlsbCBuZWVkIHRvIGNyZWF0ZSB0aGUgQ29va2llIHdpdGggYSBub24tZW1wdHkgdmFsdWUg
bm90IHRvIGdldCBkaXNjYXJkZWQKKyAgICAvLyBvbiBpdHMgd2F5IHRvIHRoZSBvdGhlciBwcm9j
ZXNzLCBzbyB3ZSBqdXN0IHBhc3MgdGhlIG5hbWUgYWdhaW4gdGhlcmUuCisgICAgV2ViQ29yZTo6
Q29va2llIHRhcmdldENvb2tpZShTdHJpbmc6OmZyb21VVEY4KG5hbWUpLCBTdHJpbmc6OmZyb21V
VEY4KG5hbWUpLCBTdHJpbmc6OmZyb21VVEY4KGRvbWFpbiksIFN0cmluZzo6ZnJvbVVURjgocGF0
aCksIC0xLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBTdHJpbmcoKSwgV2ViQ29yZTo6VVJMKCksIFZl
Y3Rvcjx1aW50MTZfdD4geyB9KTsKKworICAgIGF1dG8gc2Vzc2lvbklEID0gd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKS53ZWJz
aXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCk7CisgICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKKworICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3Rv
IHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKKyAgICAvLyBvZiB0
aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdG8gdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3Qg
cHJvY2VzcyBwb29sLgorICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIHRhcmdldENvb2tpZSwgW3Rh
c2sgPSBXVEZNb3ZlKHRhc2spXShDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAg
IGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBlcnJvciA9PSBDYWxsYmFja0Jhc2U6
OkVycm9yOjpOb25lKTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3ZWJraXRfY29va2llX21hbmFn
ZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2g6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktpdENv
b2tpZU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVycm9yOiByZXR1
cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAqIEZpbmlzaCBh
biBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfY29va2llX21hbmFn
ZXJfZGVsZXRlX2Nvb2tpZSgpLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjb29raWUg
d2FzIGFkZGVkIG9yICVGQUxTRSBpbiBjYXNlIG9mIGVycm9yLgorICovCitnYm9vbGVhbiB3ZWJr
aXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2goV2ViS2l0Q29va2llTWFuYWdl
ciAqbWFuYWdlciwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIEdFcnJvciAqKmVycm9yKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSwg
RkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19pc192YWxpZChyZXN1bHQs
IG1hbmFnZXIpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gZ190YXNrX3Byb3BhZ2F0ZV9ib29sZWFu
KEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7Cit9CisKKy8qKgogICogd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2dldF9kb21haW5zX3dpdGhfY29va2llczoKICAqIEBjb29raWVfbWFuYWdlcjogYSAjV2Vi
S2l0Q29va2llTWFuYWdlcgogICogQGNhbmNlbGxhYmxlOiAoYWxsb3ctbm9uZSk6IGEgI0dDYW5j
ZWxsYWJsZSBvciAlTlVMTCB0byBpZ25vcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmgKaW5kZXggZWUxN2QyMjA0NDkuLjVi
N2MxYjg0M2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdENvb2tpZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdENvb2tpZU1hbmFnZXIuaApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSA8Z2lv
L2dpby5oPgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAKIEdfQkVHSU5fREVDTFMK
QEAgLTEwNyw2ICsxMDgsNDUgQEAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9s
aWN5X2ZpbmlzaCAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAg
ICAgICAgICAgICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOwog
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llICAgICAg
ICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFu
YWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTb3VwVVJJICAgICAgICAgICAgICAgICAgICAgICp1cmksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cENvb2tpZSAgICAgICAg
ICAgICAgICAgICAqY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxh
YmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAg
ICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtp
dF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaCAgICAgICAgICAgICAgIChXZWJLaXRD
b29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAg
ICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyAgICAg
ICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFu
YWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTb3VwVVJJICAgICAgICAgICAgICAgICAgICAgICp1cmksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAg
ICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICAgICAgY2Fs
bGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKKworV0VCS0lU
X0FQSSBHTGlzdCoKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llc19maW5pc2ggICAg
ICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAg
ICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdl
cl9kZWxldGVfY29va2llICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAg
ICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICpuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgKmRvbWFpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAg
ICAgICAgICAgICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAg
ICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9j
b29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaCAgICAgICAgICAgIChXZWJLaXRDb29r
aWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAg
ICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCiBX
RUJLSVRfREVQUkVDQVRFRF9GT1Iod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoKSB2
b2lkCiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzICAgICAg
ICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxh
YmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0IGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rp
b25zLnR4dAppbmRleCA5Y2M3YTZlMWIzNS4uZGNhYjA5ZmYyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50
eHQKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
NC4wLXNlY3Rpb25zLnR4dApAQCAtOTk4LDYgKzk5OCwxMiBAQCB3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2FjY2VwdF9wb2xpY3kKIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3Bv
bGljeV9maW5pc2gKIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tp
ZXMKIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXNfZmluaXNo
Cit3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZQord2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2FkZF9jb29raWVfZmluaXNoCit3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMKK3dl
YmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llc19maW5pc2gKK3dlYmtpdF9jb29raWVfbWFu
YWdlcl9kZWxldGVfY29va2llCit3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9m
aW5pc2gKIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llc19mb3JfZG9tYWluCiB3
ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2FsbF9jb29raWVzCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFuYWdlci5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmgKaW5kZXgg
NTk1NjNhZGQ4ODguLmUwNzIwNDk0YjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdENvb2tpZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvb2tpZU1hbmFnZXIuaApAQCAtMTA3LDYgKzEwNyw0NSBA
QCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3lfZmluaXNoICAgICAgICAo
V2ViS2l0Q29va2llTWFuYWdlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAgICAgKnJlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
RXJyb3IgICAgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CiAKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUgICAgICAgICAgICAgICAgICAgICAgKFdl
YktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXBVUkkgICAgICAg
ICAgICAgICAgICAgICAgKnVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTb3VwQ29va2llICAgICAgICAgICAgICAgICAgICpjb29raWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0NhbmNlbGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxs
YmFjayAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgdXNl
cl9kYXRhKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2Fk
ZF9jb29raWVfZmluaXNoICAgICAgICAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAg
ICAgKmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAgICAgKnJlc3VsdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
RXJyb3IgICAgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzICAgICAgICAgICAgICAgICAgICAgKFdl
YktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXBVUkkgICAgICAg
ICAgICAgICAgICAgICAgKnVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAgICAgICpjYW5jZWxs
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAg
ICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIEdMaXN0Kgord2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzX2ZpbmlzaCAgICAgICAgICAgICAgKFdlYktpdENv
b2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAg
ICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CisK
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUgICAg
ICAgICAgICAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5h
Z2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgKm5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAg
ICAgICAgICAgICAqZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgKnBhdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Nh
bmNlbGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFj
ayAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgdXNlcl9k
YXRhKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0
ZV9jb29raWVfZmluaXNoICAgICAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAg
KmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAgICAgKnJlc3VsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJy
b3IgICAgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CisKIFdFQktJVF9ERVBSRUNBVEVEX0ZP
Uih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2gpIHZvaWQKIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXMgICAgICAgIChXZWJLaXRDb29raWVNYW5h
Z2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAgICAg
ICpjYW5jZWxsYWJsZSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCAwNjI1OWI0MGE0MC4uNWMzZjAwN2UwNjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxNy0xMC0x
MCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvQGVuZGxlc3NtLmNvbT4KKworICAgICAgICBb
R1RLXSBOZXcgQVBJIHRvIGFkZCwgcmV0cmlldmUgYW5kIGRlbGV0ZSBjb29raWVzIHZpYSBXZWJL
aXRDb29raWVNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzc5MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRlZCBuZXcgdGVzdCBjYXNlcyB0byBjb3ZlciB0aGUgbmV3bHkgYWRkZWQgQVBJ
IGZvciBXZWJLaXRDb29raWVNYW5hZ2VyOgorICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZSwgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzIGFuZAorICAgICAg
ICB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0Q29va2llTWFuYWdlci5jcHA6CisgICAgICAg
ICh0ZXN0Q29va2llTWFuYWdlckFkZENvb2tpZSk6IEFkZGVkLgorICAgICAgICAodGVzdENvb2tp
ZU1hbmFnZXJHZXRDb29raWVzKTogQWRkZWQuCisgICAgICAgICh0ZXN0Q29va2llTWFuYWdlckRl
bGV0ZUNvb2tpZSk6IEFkZGVkLgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOiBTbWFsbCB1cGRh
dGUgdG8gYXZvaWQgaGFyZGNvZGluZyBzdHJpbmdzIHdlIHJldXNlLgorICAgICAgICAoYmVmb3Jl
QWxsKTogQWRkZWQgdGhlIG5ldyB0ZXN0IGNhc2VzIHRvIHRoZSB0ZXN0IHN1aXRlLgorCiAyMDE3
LTEwLTA5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBWZWN0
b3Igc2hvdWxkIGJlIGFibGUgdG8gZWFzaWx5IGNyZWF0ZSBmcm9tIGEgbGlzdCBvZiBtb3ZhYmxl
IG9ubHkgaXRlbXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R0xpYi9UZXN0Q29va2llTWFuYWdlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFiZThjYzBkMDYwLi4wYTZiNDcw
MTkxMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rl
c3RDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0yMSwxMiArMjEsMTggQEAKIAogI2luY2x1
ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKICNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvR1VuaXF1ZVB0clNvdXAuaD4KICNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgog
CiBzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKIAogc3RhdGljIGNvbnN0IGNoYXIq
IGtGaXJzdFBhcnR5RG9tYWluID0gIjEyNy4wLjAuMSI7CiBzdGF0aWMgY29uc3QgY2hhcioga1Ro
aXJkUGFydHlEb21haW4gPSAibG9jYWxob3N0IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtDb29r
aWVOYW1lID0gImZvbyI7CitzdGF0aWMgY29uc3QgY2hhcioga0Nvb2tpZVZhbHVlID0gImJhciI7
CitzdGF0aWMgY29uc3QgY2hhcioga0Nvb2tpZVBhdGggPSAiLyI7CisKIHN0YXRpYyBjb25zdCBj
aGFyKiBrSW5kZXhIdG1sRm9ybWF0ID0KICAgICAiPGh0bWw+PGJvZHk+IgogICAgICIgPHA+V2Vi
S2l0R1RLKyBDb29raWUgTWFuYWdlciB0ZXN0PC9wPiIKQEAgLTQ5LDcgKzU1LDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2Nvb2tpZU1hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29r
aWVfbWFuYWdlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSkpCiAgICAg
ICAgICwgbV9hY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJE
X1BBUlRZKQogICAgICAgICAsIG1fZG9tYWlucygwKQorICAgICAgICAsIG1fY29va2llcygwKQor
ICAgICAgICAsIG1fY29va2llQWRkZWQoZmFsc2UpCiAgICAgICAgICwgbV9jb29raWVzQ2hhbmdl
ZChmYWxzZSkKKyAgICAgICAgLCBtX2Nvb2tpZURlbGV0ZWQoZmFsc2UpCiAgICAgICAgICwgbV9m
aW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UoZmFsc2UpCiAgICAgewogICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Nvb2tpZV9tYW5hZ2VyKHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dldF9j
b250ZXh0KG1fd2ViVmlldykpKSA9PSBtX2Nvb2tpZU1hbmFnZXIpOwpAQCAtMTA2LDYgKzExNSw2
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2FjY2VwdFBvbGljeTsKICAgICB9CiAKKyAg
ICBzdGF0aWMgdm9pZCBhZGRDb29raWVSZWFkeUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0Fz
eW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgR1Vu
aXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICBib29sIGFkZGVkID0gd2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmpl
Y3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvci5n
ZXQoKSk7CisKKyAgICAgICAgQ29va2llTWFuYWdlclRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxD
b29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+bV9jb29raWVBZGRl
ZCA9IGFkZGVkOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwor
ICAgIH0KKworICAgIGJvb2wgYWRkQ29va2llKFNvdXBVUkkqIHVyaSwgU291cENvb2tpZSogY29v
a2llKQorICAgIHsKKyAgICAgICAgbV9jb29raWVBZGRlZCA9IGZhbHNlOworICAgICAgICB3ZWJr
aXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShtX2Nvb2tpZU1hbmFnZXIsIHVyaSwgY29va2ll
LCAwLCBhZGRDb29raWVSZWFkeUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOworCisgICAgICAgIHJldHVybiBtX2Nvb2tpZUFkZGVkOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGdldENvb2tpZXNSZWFkeUNhbGxiYWNrKEdPYmplY3QqIG9iamVj
dCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAg
ICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICBHTGlzdCogY29va2llcyA9
IHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llc19maW5pc2goV0VCS0lUX0NPT0tJRV9N
QU5BR0VSKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3Nl
cnQoIWVycm9yLmdldCgpKTsKKworICAgICAgICBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0
YXRpY19jYXN0PENvb2tpZU1hbmFnZXJUZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5t
X2Nvb2tpZXMgPSBjb29raWVzOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFp
bkxvb3ApOworICAgIH0KKworICAgIEdMaXN0KiBnZXRDb29raWVzKFNvdXBVUkkqIHVyaSkKKyAg
ICB7CisgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9jb29raWVzLCByZWludGVycHJldF9jYXN0
PEdEZXN0cm95Tm90aWZ5Pihzb3VwX2Nvb2tpZV9mcmVlKSk7CisgICAgICAgIG1fY29va2llcyA9
IDA7CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhtX2Nvb2tpZU1h
bmFnZXIsIHVyaSwgMCwgZ2V0Q29va2llc1JlYWR5Q2FsbGJhY2ssIHRoaXMpOworICAgICAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICAgICAgcmV0dXJuIG1fY29va2llczsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVDb29raWVSZWFkeUNhbGxiYWNrKEdPYmpl
Y3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQorICAg
IHsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICBib29sIGFk
ZGVkID0gd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVfZmluaXNoKFdFQktJVF9D
T09LSUVfTUFOQUdFUihvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAg
IGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisKKyAgICAgICAgQ29va2llTWFuYWdlclRlc3QqIHRl
c3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAg
dGVzdC0+bV9jb29raWVBZGRlZCA9IGFkZGVkOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRl
c3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIGJvb2wgZGVsZXRlQ29va2llKGNvbnN0IGNo
YXIqIG5hbWUsIGNvbnN0IGNoYXIqIGRvbWFpbiwgY29uc3QgY2hhciogcGF0aCkKKyAgICB7Cisg
ICAgICAgIG1fY29va2llRGVsZXRlZCA9IGZhbHNlOworICAgICAgICB3ZWJraXRfY29va2llX21h
bmFnZXJfZGVsZXRlX2Nvb2tpZShtX2Nvb2tpZU1hbmFnZXIsIG5hbWUsIGRvbWFpbiwgcGF0aCwg
MCwgZGVsZXRlQ29va2llUmVhZHlDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKKworICAgICAgICByZXR1cm4gbV9jb29raWVEZWxldGVkOworICAg
IH0KKwogICAgIHZvaWQgc2V0QWNjZXB0UG9saWN5KFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3kpCiAgICAgewogICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9w
b2xpY3kobV9jb29raWVNYW5hZ2VyLCBwb2xpY3kpOwpAQCAtMTczLDcgKzI0MywxMCBAQCBwdWJs
aWM6CiAgICAgV2ViS2l0Q29va2llTWFuYWdlciogbV9jb29raWVNYW5hZ2VyOwogICAgIFdlYktp
dENvb2tpZUFjY2VwdFBvbGljeSBtX2FjY2VwdFBvbGljeTsKICAgICBjaGFyKiogbV9kb21haW5z
OworICAgIEdMaXN0KiBtX2Nvb2tpZXM7CisgICAgYm9vbCBtX2Nvb2tpZUFkZGVkOwogICAgIGJv
b2wgbV9jb29raWVzQ2hhbmdlZDsKKyAgICBib29sIG1fY29va2llRGVsZXRlZDsKICAgICBib29s
IG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gbV9j
b29raWVzVGV4dEZpbGU7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBtX2Nvb2tpZXNTUUxpdGVGaWxl
OwpAQCAtMjExLDYgKzI4NCwxNTUgQEAgc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJBY2Nl
cHRQb2xpY3koQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIKICAgICBnX2Fz
c2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDApOwogfQogCitzdGF0aWMg
dm9pZCB0ZXN0Q29va2llTWFuYWdlckFkZENvb2tpZShDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJ
RV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICAvLyBEZWxldGUgYWxsIGNvb2tpZXMgZmlyc3QsIHNvIHRoYXQg
d2UgY2FuIG91ciBvd24uCisgICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOworICAgIGdfYXNz
ZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKKwor
ICAgIC8vIENyZWF0ZSBhIG5ldyBjb29raWUgYW5kIGFkZCBpdCwgdXNpbmcgYSBIVFRQIFVSTC4K
KyAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IGZpcnN0Q29va2llKHNvdXBfY29va2llX25ldyhr
Q29va2llTmFtZSwga0Nvb2tpZVZhbHVlLCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGgs
IFNPVVBfQ09PS0lFX01BWF9BR0VfT05FX0hPVVIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHRh
cmdldFVSTChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwg
a0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaShzb3VwX3Vy
aV9uZXcodGFyZ2V0VVJMLmdldCgpKSk7CisgICAgdGVzdC0+YWRkQ29va2llKHVyaS5nZXQoKSwg
Zmlyc3RDb29raWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRl
c3QtPmdldERvbWFpbnMoKSksID09LCAxKTsKKworICAgIC8vIFJldHJpZXZlIHRoZSBjb29raWUg
d2UganVzdCBhZGRlZCBhbmQgY29tcGFyZS4KKyAgICBHTGlzdCogZm91bmRDb29raWVzID0gdGVz
dC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworICAgIGdfYXNzZXJ0X25vbm51bGwoZm91bmRDb29r
aWVzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tpZXMpLCA9
PSwgMSk7CisKKyAgICBTb3VwQ29va2llKiBmb3VuZENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBD
b29raWUqPihmb3VuZENvb2tpZXMtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nv
b2tpZV9nZXRfbmFtZShmb3VuZENvb2tpZSksID09LCBrQ29va2llTmFtZSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHNvdXBfY29va2llX2dldF92YWx1ZShmb3VuZENvb2tpZSksID09LCBrQ29va2ll
VmFsdWUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfcGF0aChmb3VuZENv
b2tpZSksID09LCBrQ29va2llUGF0aCk7CisKKyAgICAvLyBOb3cgY2hlY2sgdGhhdCB0aGUgdGhp
cmQgcGFydHkgZG9tYWluIGRvZXNuJ3QgaGF2ZSBjb29raWVzIGFkZGVkIHlldC4KKyAgICB0YXJn
ZXRVUkwucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlczovLyVzIiwgU09VUF9VUklfU0NIRU1FX0hU
VFAsIGtUaGlyZFBhcnR5RG9tYWluKSk7CisgICAgdXJpLnJlc2V0KHNvdXBfdXJpX25ldyh0YXJn
ZXRVUkwuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9udWxsKHRlc3QtPmdldENvb2tpZXModXJpLmdl
dCgpKSk7CisKKyAgICAvLyBDcmVhdGUgYSBzZWNvbmQgY29va2llLCB0aGlzIHRpbWUgdXNpbmcg
YW5kIEhUVFBTIFVSTC4KKyAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IHNlY29uZENvb2tpZShz
b3VwX2Nvb2tpZV9uZXcoa0Nvb2tpZU5hbWUsIGtDb29raWVWYWx1ZSwga1RoaXJkUGFydHlEb21h
aW4sIGtDb29raWVQYXRoLCBTT1VQX0NPT0tJRV9NQVhfQUdFX09ORV9IT1VSKSk7CisgICAgICAg
IHRhcmdldFVSTC5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hF
TUVfSFRUUFMsIGtUaGlyZFBhcnR5RG9tYWluKSk7CisgICAgdXJpLnJlc2V0KHNvdXBfdXJpX25l
dyh0YXJnZXRVUkwuZ2V0KCkpKTsKKyAgICB0ZXN0LT5hZGRDb29raWUodXJpLmdldCgpLCBzZWNv
bmRDb29raWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3Qt
PmdldERvbWFpbnMoKSksID09LCAyKTsKKworICAgIC8vIFJldHJpZXZlIHRoZSBjb29raWUgd2Ug
anVzdCBhZGRlZCBhbmQgY29tcGFyZS4KKyAgICBmb3VuZENvb2tpZXMgPSB0ZXN0LT5nZXRDb29r
aWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChmb3VuZENvb2tpZXMpOworICAg
IGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAxKTsKKwor
ICAgIGZvdW5kQ29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGZvdW5kQ29va2llcy0+
ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9uYW1lKGZvdW5kQ29v
a2llKSwgPT0sIGtDb29raWVOYW1lKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVf
Z2V0X3ZhbHVlKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVWYWx1ZSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHNvdXBfY29va2llX2dldF9wYXRoKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVQYXRo
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJHZXRDb29raWVzKENvb2tpZU1h
bmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNldEFjY2VwdFBv
bGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIERlbGV0ZSBhbGwgY29va2ll
cyBmaXJzdCwgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIG91ciBvd24uCisgICAgdGVzdC0+ZGVsZXRl
QWxsQ29va2llcygpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdl
dERvbWFpbnMoKSksID09LCAwKTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBjb29raWUgYW5kIGFk
ZCBpdCwgdXNpbmcgYSBIVFRQIFVSTC4KKyAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IGZpcnN0
Q29va2llKHNvdXBfY29va2llX25ldyhrQ29va2llTmFtZSwga0Nvb2tpZVZhbHVlLCBrRmlyc3RQ
YXJ0eURvbWFpbiwga0Nvb2tpZVBhdGgsIFNPVVBfQ09PS0lFX01BWF9BR0VfT05FX0hPVVIpKTsK
KyAgICBHVW5pcXVlUHRyPGNoYXI+IHRhcmdldFVSTChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMi
LCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICBHVW5pcXVl
UHRyPFNvdXBVUkk+IHVyaShzb3VwX3VyaV9uZXcodGFyZ2V0VVJMLmdldCgpKSk7CisgICAgdGVz
dC0+YWRkQ29va2llKHVyaS5nZXQoKSwgZmlyc3RDb29raWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0
X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAxKTsKKworICAg
IC8vIFJldHJpZXZlIHRoZSBjb29raWUgd2UganVzdCBhZGRlZCBhbmQgY29tcGFyZS4KKyAgICBH
TGlzdCogZm91bmRDb29raWVzID0gdGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworICAgIGdf
YXNzZXJ0X25vbm51bGwoZm91bmRDb29raWVzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0
X2xlbmd0aChmb3VuZENvb2tpZXMpLCA9PSwgMSk7CisKKyAgICBTb3VwQ29va2llKiBmb3VuZENv
b2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihmb3VuZENvb2tpZXMtPmRhdGEpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFtZShmb3VuZENvb2tpZSksID09LCBr
Q29va2llTmFtZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF92YWx1ZShm
b3VuZENvb2tpZSksID09LCBrQ29va2llVmFsdWUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3Vw
X2Nvb2tpZV9nZXRfcGF0aChmb3VuZENvb2tpZSksID09LCBrQ29va2llUGF0aCk7CisKKyAgICAv
LyBDaGVjayBpdCdzIHBvc3NpYmxlIHRvIHJldHJpZXZlIHRoZSBzYW1lIGNvb2tpZSB1c2luZyBh
IEhUVFBTIFVSTCBpbnN0ZWFkLgorICAgIHRhcmdldFVSTC5yZXNldChnX3N0cmR1cF9wcmludGYo
IiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUFMsIGtGaXJzdFBhcnR5RG9tYWluKSk7Cisg
ICAgdXJpLnJlc2V0KHNvdXBfdXJpX25ldyh0YXJnZXRVUkwuZ2V0KCkpKTsKKyAgICBmb3VuZENv
b2tpZXMgPSB0ZXN0LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfbm9ubnVs
bChmb3VuZENvb2tpZXMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5k
Q29va2llcyksID09LCAxKTsKKworICAgIGZvdW5kQ29va2llID0gc3RhdGljX2Nhc3Q8U291cENv
b2tpZSo+KGZvdW5kQ29va2llcy0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29v
a2llX2dldF9uYW1lKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVOYW1lKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3ZhbHVlKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVW
YWx1ZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9wYXRoKGZvdW5kQ29v
a2llKSwgPT0sIGtDb29raWVQYXRoKTsKKworICAgIC8vIENyZWF0ZSBhIHNlY29uZCBjb29raWUs
IHRoaXMgdGltZSB1c2luZyBhbmQgSFRUUFMgVVJMLgorICAgIEdVbmlxdWVQdHI8U291cENvb2tp
ZT4gc2Vjb25kQ29va2llKHNvdXBfY29va2llX25ldyhrQ29va2llTmFtZSwga0Nvb2tpZVZhbHVl
LCBrVGhpcmRQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGgsIFNPVVBfQ09PS0lFX01BWF9BR0VfT05F
X0hPVVIpKTsKKyAgICAgICAgdGFyZ2V0VVJMLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJXM6Ly8l
cyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQUywga1RoaXJkUGFydHlEb21haW4pKTsKKyAgICB1cmku
cmVzZXQoc291cF91cmlfbmV3KHRhcmdldFVSTC5nZXQoKSkpOworICAgIHRlc3QtPmFkZENvb2tp
ZSh1cmkuZ2V0KCksIHNlY29uZENvb2tpZS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdf
c3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgLy8gUmV0cmll
dmUgdGhlIGNvb2tpZSB3ZSBqdXN0IGFkZGVkIGFuZCBjb21wYXJlLgorICAgIGZvdW5kQ29va2ll
cyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGZv
dW5kQ29va2llcyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29r
aWVzKSwgPT0sIDEpOworCisgICAgZm91bmRDb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2ll
Kj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVf
Z2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzb3VwX2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVl
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3BhdGgoZm91bmRDb29raWUp
LCA9PSwga0Nvb2tpZVBhdGgpOworCisgICAgLy8gQ2hlY2sgaXQncyBwb3NzaWJsZSB0byByZXRy
aWV2ZSB0aGUgc2FtZSBjb29raWUgdXNpbmcgYSBIVFRQIFVSTCBpbnN0ZWFkLgorICAgIHRhcmdl
dFVSTC5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRU
UCwga1RoaXJkUGFydHlEb21haW4pKTsKKyAgICB1cmkucmVzZXQoc291cF91cmlfbmV3KHRhcmdl
dFVSTC5nZXQoKSkpOworICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdl
dCgpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGZvdW5kQ29va2llcyk7CisgICAgZ19hc3NlcnRf
Y21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDEpOworCisgICAgZm91bmRD
b29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwg
a0Nvb2tpZU5hbWUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfdmFsdWUo
Zm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291
cF9jb29raWVfZ2V0X3BhdGgoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVBhdGgpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZShDb29raWVNYW5hZ2VyVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VC
S0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICAvLyBJbml0aWFsbHksIHRoZXJlIHNob3VsZCBi
ZSAyIGNvb2tpZXMgYXZhaWxhYmxlLgorICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3Ro
KHRlc3QtPmdldERvbWFpbnMoKSksID09LCAyKTsKKworICAgIC8vIERlbGV0ZSB0aGUgY29va2ll
IGZvciB0aGUgZmlyc3QgcGFydHkgZG9tYWluLgorICAgIHRlc3QtPmRlbGV0ZUNvb2tpZShrQ29v
a2llTmFtZSwga0ZpcnN0UGFydHlEb21haW4sIGtDb29raWVQYXRoKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisKKyAgICAv
LyBUcnkgZGVsZXRpbmcgYSBub24tZXhpc3RlbnQgY29va2llICh3cm9uZyBuYW1lKS4KKyAgICB0
ZXN0LT5kZWxldGVDb29raWUoIndyb25nLW5hbWUiLCBrVGhpcmRQYXJ0eURvbWFpbiwga0Nvb2tp
ZVBhdGgpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFp
bnMoKSksID09LCAxKTsKKworICAgIC8vIFRyeSBkZWxldGluZyBhIG5vbi1leGlzdGVudCBjb29r
aWUgKHdyb25nIHBhdGgpLgorICAgIHRlc3QtPmRlbGV0ZUNvb2tpZShrQ29va2llTmFtZSwgIndy
b25nLWRvbWFpbiIsIGtDb29raWVQYXRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xl
bmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisKKyAgICAvLyBUcnkgZGVsZXRpbmcg
YSBub24tZXhpc3RlbnQgY29va2llICh3cm9uZyBwYXRoKS4KKyAgICB0ZXN0LT5kZWxldGVDb29r
aWUoa0Nvb2tpZU5hbWUsIGtUaGlyZFBhcnR5RG9tYWluLCAid3JvbmctcGF0aCIpOworICAgIGdf
YXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAxKTsK
KworICAgIC8vIERlbGV0ZSB0aGUgY29va2llIGZvciB0aGUgdGhpcmQgcGFydHkgZG9tYWluLgor
ICAgIHRlc3QtPmRlbGV0ZUNvb2tpZShrQ29va2llTmFtZSwga1RoaXJkUGFydHlEb21haW4sIGtD
b29raWVQYXRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXRE
b21haW5zKCkpLCA9PSwgMCk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyRGVs
ZXRlQ29va2llcyhDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAg
ICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZ
Uyk7CkBAIC0zNjAsMTIgKzU4MiwxNCBAQCBzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3Vw
U2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKgogICAgIH0K
IAogICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsK
KyAgICBnY2hhciogaGVhZGVyX3N0ciA9IGdfc3RyZHVwX3ByaW50ZigiJXM9JXM7IE1heC1BZ2U9
NjAiLCBrQ29va2llTmFtZSwga0Nvb2tpZVZhbHVlKTsKKwogICAgIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL2luZGV4Lmh0bWwiKSkgewogICAgICAgICBjaGFyKiBpbmRleEh0bWwgPSBnX3N0cmR1
cF9wcmludGYoa0luZGV4SHRtbEZvcm1hdCwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UobWVzc2FnZS0+cmVzcG9uc2Vf
aGVhZGVycywgIlNldC1Db29raWUiLCAiZm9vPWJhcjsgTWF4LUFnZT02MCIpOworICAgICAgICBz
b3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJT
ZXQtQ29va2llIiwgaGVhZGVyX3N0cik7CiAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBpbmRleEh0bWwsIHN0
cmxlbihpbmRleEh0bWwpKTsKICAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW1h
Z2UucG5nIikpCi0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UobWVzc2FnZS0+
cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29raWUiLCAiYmF6PXF1eDsgTWF4LUFnZT02MCIpOwor
ICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hl
YWRlcnMsICJTZXQtQ29va2llIiwgaGVhZGVyX3N0cik7CiAgICAgZWxzZQogICAgICAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwogICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwpAQCAt
Mzc3LDYgKzYwMSw5IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBrU2VydmVyLT5ydW4oc2VydmVy
Q2FsbGJhY2spOwogCiAgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFu
YWdlciIsICJhY2NlcHQtcG9saWN5IiwgdGVzdENvb2tpZU1hbmFnZXJBY2NlcHRQb2xpY3kpOwor
ICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiYWRkLWNv
b2tpZSIsIHRlc3RDb29raWVNYW5hZ2VyQWRkQ29va2llKTsKKyAgICBDb29raWVNYW5hZ2VyVGVz
dDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImdldC1jb29raWVzIiwgdGVzdENvb2tpZU1h
bmFnZXJHZXRDb29raWVzKTsKKyAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29r
aWVNYW5hZ2VyIiwgImRlbGV0ZS1jb29raWUiLCB0ZXN0Q29va2llTWFuYWdlckRlbGV0ZUNvb2tp
ZSk7CiAgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJk
ZWxldGUtY29va2llcyIsIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyk7CiAgICAgQ29v
a2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJjb29raWVzLWNoYW5n
ZWQiLCB0ZXN0Q29va2llTWFuYWdlckNvb2tpZXNDaGFuZ2VkKTsKICAgICBDb29raWVNYW5hZ2Vy
VGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgInBlcnNpc3RlbnQtc3RvcmFnZSIsIHRl
c3RDb29raWVNYW5hZ2VyUGVyc2lzdGVudFN0b3JhZ2UpOwotLSAKMi4xMy41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323310</attachid>
            <date>2017-10-10 08:42:37 -0700</date>
            <delta_ts>2017-10-30 09:57:40 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-GTK-New-API-to-add-retrieve-and-delete-cookies-via-W.patch</filename>
            <type>text/plain</type>
            <size>50529</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBhZjA0ZmE1MjA3Y2YwZDNiMWJmOTgxZjJiZDJkNTM2NmMwNmUxZjRmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpb0B3ZWJraXQub3Jn
PgpEYXRlOiBUdWUsIDEwIE9jdCAyMDE3IDE0OjE0OjMwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
W0dUS10gTmV3IEFQSSB0byBhZGQsIHJldHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEKIFdl
YktpdENvb2tpZU1hbmFnZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzkzMgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpBZGRlZCBuZXcgQVBJIHRvIFdl
YktpdENvb2tpZU1hbmFnZXIgdG8gYWRkLCByZXRyaWV2ZSBhbmQgZGVsZXRlIGNvbXBsZXRlCmNv
b2tpZXMgaW50by9vdXQtb2YgYSBydW5uaW5nIHNlc3Npb24sIGFuZCB1cGRhdGVkIGRvY3VtZW50
YXRpb24gc2VjdGlvbnMuCgoqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2Vy
LmNwcDoKKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKTogTmV3IGZ1bmN0aW9uLgoo
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKTogRGl0dG8uCih3ZWJraXRf
Y29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMpOiBEaXR0by4KKHdlYmtpdF9jb29raWVfbWFuYWdl
cl9nZXRfY29va2llc19maW5pc2gpOiBEaXR0by4KKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llKTogRGl0dG8uCih3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9m
aW5pc2gpOiBEaXR0by4KKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmg6
IEFkZGVkIG5ldyBmdW5jdGlvbnMuCiogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFu
YWdlci5oOiBEaXR0by4KKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNl
Y3Rpb25zLnR4dDogRGl0dG8uCgpJbXBsZW1lbnRlZCBnZXRDb29raWVzKCkgYW5kIGRlbGV0ZUNv
b2tpZSgpIGluIHRoZSBTb3VwIGJhY2tlbmQsCmFuZCByZWZhY3RvcmVkIHNvbWUgdXRpbGl0eSBm
dW5jdGlvbnMgYW5kIGNvbnZlcnNpb25zIG91dCBvZgpOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3Vw
IGludG8gYSBuZXcgQ29va2llU291cC5jcHAgZmlsZSwgc28KdGhhdCB3ZSBub3cgY2FuIGNvbnZl
cnQgYmV0d2VlbiBTb3VwQ29va2llKiBhbmQgV2ViQ29yZTo6Q29va2llCmVhc2lseSBmcm9tIGFu
eXdoZXJlICh0aGlzIGlzIG5vdyBuZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2VzcykuCgoqIFBsYXRm
b3JtR1RLLmNtYWtlOiBBZGQgQ29va2llU291cC5jcHAuCiogUGxhdGZvcm1XUEUuY21ha2U6IEFk
ZCBDb29raWVTb3VwLmNwcC4KKiBwbGF0Zm9ybS9Db29raWUuaDogQWRkIGRlY2xhcmF0aW9ucyBm
b3IgdGhlIG5ldyBpbXBsaWNpdCBjb252ZXJzaW9ucy4KKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Q29va2llU291cC5jcHA6IEFkZGVkLgooV2ViQ29yZTo6Q29va2llOjpDb29raWUpOiBOZXcgY29u
c3RydWN0b3IsIGNyZWF0ZXMgYSBXZWJDb3JlOjpDb29raWUgb3V0IG9mIGEgU291cENvb2tpZSou
CihXZWJDb3JlOjptc1RvU291cERhdGUpOiBNb3ZlZCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
blNvdXAuY3BwLgooV2ViQ29yZTo6Q29va2llOjpvcGVyYXRvciBTb3VwQ29va2llICogY29uc3Qp
OiBOZXcgb3ZlcnJpZGUsIGJhc2VkIG9uIHRvU291cENvb2tpZSgpLgoqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcDoKKFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyk6IFVzZWQgdGhlIG5ldyBpbXBsaWNpdCBjb252ZXJz
aW9uLgooV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUpOiBOZXds
eSBpbXBsZW1lbnRlZC4KKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0Q29va2ll
cyk6IE5ld2x5IGltcGxlbWVudGVkLgoKQWRkZWQgbmV3IHRlc3QgY2FzZXMgdG8gY292ZXIgdGhl
IG5ld2x5IGFkZGVkIEFQSSBmb3IgV2ViS2l0Q29va2llTWFuYWdlcjoKd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2FkZF9jb29raWUsIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyBhbmQK
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUuCgoqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R0xpYi9UZXN0Q29va2llTWFuYWdlci5jcHA6Cih0ZXN0Q29va2llTWFuYWdlckFk
ZENvb2tpZSk6IEFkZGVkLgoodGVzdENvb2tpZU1hbmFnZXJHZXRDb29raWVzKTogQWRkZWQuCih0
ZXN0Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZSk6IEFkZGVkLgooc2VydmVyQ2FsbGJhY2spOiBT
bWFsbCB1cGRhdGUgdG8gYXZvaWQgaGFyZGNvZGluZyBzdHJpbmdzIHdlIHJldXNlLgooYmVmb3Jl
QWxsKTogQWRkZWQgdGhlIG5ldyB0ZXN0IGNhc2VzIHRvIHRoZSB0ZXN0IHN1aXRlLgotLS0KIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI1ICsr
KwogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgICAgICAgICAgICAgICAgICAgfCAg
IDEgKwogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UgICAgICAgICAgICAgICAgICAg
fCAgIDEgKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llLmggICAgICAgICAgICAgICAg
ICAgfCAgIDMgKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAu
Y3BwICAgfCAgNzcgKysrKysrKwogLi4uL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Np
b25Tb3VwLmNwcCAgICAgfCAgNjUgKysrLS0tCiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAyMSArKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRDb29raWVNYW5hZ2VyLmNwcCAgICAgfCAxODIgKysrKysrKysrKysrKysrKwogLi4uL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmggfCAgNDEgKysrKwog
Li4uL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQgICAgICAgfCAgIDYg
KwogLi4uL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmggfCAg
NDEgKysrKwogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgMTggKysKIC4uLi9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVNYW5hZ2VyLmNwcCAg
ICAgICAgIHwgMjMyICsrKysrKysrKysrKysrKysrKysrLQogMTMgZmlsZXMgY2hhbmdlZCwgNjgw
IGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3VwLmNwcAoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCA1ODZlNTE4YjIzMi4uMDM2MDdkODgxMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBA
QAorMjAxNy0xMC0xMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvQGVuZGxlc3NtLmNvbT4K
KworICAgICAgICBbR1RLXSBOZXcgQVBJIHRvIGFkZCwgcmV0cmlldmUgYW5kIGRlbGV0ZSBjb29r
aWVzIHZpYSBXZWJLaXRDb29raWVNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBnZXRDb29raWVzKCkgYW5kIGRlbGV0ZUNv
b2tpZSgpIGluIHRoZSBTb3VwIGJhY2tlbmQsCisgICAgICAgIGFuZCByZWZhY3RvcmVkIHNvbWUg
dXRpbGl0eSBmdW5jdGlvbnMgYW5kIGNvbnZlcnNpb25zIG91dCBvZgorICAgICAgICBOZXR3b3Jr
U3RvcmFnZVNlc3Npb25Tb3VwIGludG8gYSBuZXcgQ29va2llU291cC5jcHAgZmlsZSwgc28KKyAg
ICAgICAgdGhhdCB3ZSBub3cgY2FuIGNvbnZlcnQgYmV0d2VlbiBTb3VwQ29va2llKiBhbmQgV2Vi
Q29yZTo6Q29va2llCisgICAgICAgIGVhc2lseSBmcm9tIGFueXdoZXJlICh0aGlzIGlzIG5vdyBu
ZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2VzcykuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFr
ZTogQWRkIENvb2tpZVNvdXAuY3BwLgorICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOiBBZGQg
Q29va2llU291cC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vQ29va2llLmg6IEFkZCBkZWNsYXJh
dGlvbnMgZm9yIHRoZSBuZXcgaW1wbGljaXQgY29udmVyc2lvbnMuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZTo6Q29va2llKTogTmV3IGNvbnN0cnVjdG9yLCBjcmVhdGVzIGEgV2ViQ29yZTo6Q29v
a2llIG91dCBvZiBhIFNvdXBDb29raWUqLgorICAgICAgICAoV2ViQ29yZTo6bXNUb1NvdXBEYXRl
KTogTW92ZWQgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZTo6b3BlcmF0b3IgU291cENvb2tpZSAqIGNvbnN0KTogTmV3IG92ZXJyaWRl
LCBiYXNlZCBvbiB0b1NvdXBDb29raWUoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMpOiBVc2VkIHRoZSBuZXcgaW1wbGljaXQgY29u
dmVyc2lvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRl
Q29va2llKTogTmV3bHkgaW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OmdldENvb2tpZXMpOiBOZXdseSBpbXBsZW1lbnRlZC4KKwogMjAxNy0xMC0x
MCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuZGVyT2Jq
ZWN0OjpkZXN0cm95KCkgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBhZnRlciByZW5kZXJlciBoYXMg
YmVlbiByZW1vdmVkIGZyb20gdGhlIHRyZWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXgg
YjA3MzljMDE2NmMuLmIzZjc4ZjkyNzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAt
MTE0LDYgKzExNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L25ldHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwCiAgICAgcGxhdGZv
cm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ29va2llSmFyU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2ll
U291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFnZVNvdXAuY3Bw
CiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0NyZWRlbnRpYWxTdG9yYWdlU291cC5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtV1BFLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21h
a2UKaW5kZXggNmZlNjNjZDg3ZTIuLjc3NDEyMDhiNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5j
bWFrZQpAQCAtMTA0LDYgKzEwNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL25ldHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5jcHAKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvQ29va2llU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFn
ZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0NyZWRlbnRpYWxTdG9yYWdlU291
cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ29va2llLmgKaW5kZXggMDkzM2NjYTA3M2MuLmUwM2FmY2ViZDFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Db29raWUuaApAQCAtNjcsNiArNjcsOSBAQCBzdHJ1Y3QgQ29va2llIHsKICNpZmRlZiBf
X09CSkNfXwogICAgIFdFQkNPUkVfRVhQT1JUIENvb2tpZShOU0hUVFBDb29raWUgKik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgTlNIVFRQQ29va2llICooKSBjb25zdDsKKyNlbGlmIFVT
RShTT1VQKQorICAgIENvb2tpZShTb3VwQ29va2llICopOworICAgIG9wZXJhdG9yIFNvdXBDb29r
aWUgKigpIGNvbnN0OwogI2VuZGlmCiAKICAgICBib29sIGlzTnVsbCgpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU291cC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU291cC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjViMDBhZDBiYmNhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNv
dXAuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ29va2llLmgiCisKKyNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitDb29raWU6OkNvb2tpZShTb3VwQ29va2llICpjb29raWUpCit7
CisgICAgbmFtZSA9IFN0cmluZzo6ZnJvbVVURjgoY29va2llLT5uYW1lKTsKKyAgICB2YWx1ZSA9
IFN0cmluZzo6ZnJvbVVURjgoY29va2llLT52YWx1ZSk7CisgICAgZG9tYWluID0gU3RyaW5nOjpm
cm9tVVRGOChjb29raWUtPmRvbWFpbik7CisgICAgcGF0aCA9IFN0cmluZzo6ZnJvbVVURjgoY29v
a2llLT5wYXRoKTsKKyAgICBleHBpcmVzID0gY29va2llLT5leHBpcmVzID8gc3RhdGljX2Nhc3Q8
ZG91YmxlPihzb3VwX2RhdGVfdG9fdGltZV90KGNvb2tpZS0+ZXhwaXJlcykpICogMTAwMCA6IDA7
CisgICAgaHR0cE9ubHkgPSBjb29raWUtPmh0dHBfb25seTsKKyAgICBzZWN1cmUgPSBjb29raWUt
PnNlY3VyZTsKKyAgICBzZXNzaW9uID0gIWNvb2tpZS0+ZXhwaXJlczsKK30KKworc3RhdGljIFNv
dXBEYXRlKiBtc1RvU291cERhdGUoZG91YmxlIG1zKQoreworICAgIGludCB5ZWFyID0gbXNUb1ll
YXIobXMpOworICAgIGludCBkYXlPZlllYXIgPSBkYXlJblllYXIobXMsIHllYXIpOworICAgIGJv
b2wgbGVhcFllYXIgPSBpc0xlYXBZZWFyKHllYXIpOworCisgICAgLy8gbW9udGhGcm9tRGF5SW5Z
ZWFyKCkgcmV0dXJucyBhIHZhbHVlIGluIHRoZSBbMCwxMV0gcmFuZ2UsIHdoaWxlIHNvdXBfZGF0
ZV9uZXcoKSBleHBlY3RzCisgICAgLy8gYSB2YWx1ZSBpbiB0aGUgWzEsMTJdIHJhbmdlLCBtZWFu
aW5nIHdlIGhhdmUgdG8gbWFudWFsbHkgYWRqdXN0IHRoZSBtb250aCB2YWx1ZS4KKyAgICByZXR1
cm4gc291cF9kYXRlX25ldyh5ZWFyLCBtb250aEZyb21EYXlJblllYXIoZGF5T2ZZZWFyLCBsZWFw
WWVhcikgKyAxLCBkYXlJbk1vbnRoRnJvbURheUluWWVhcihkYXlPZlllYXIsIGxlYXBZZWFyKSwg
bXNUb0hvdXJzKG1zKSwgbXNUb01pbnV0ZXMobXMpLCBzdGF0aWNfY2FzdDxpbnQ+KG1zIC8gMTAw
MCkgJSA2MCk7Cit9CisKK0Nvb2tpZTo6b3BlcmF0b3IgU291cENvb2tpZSAqKCkgY29uc3QKK3sK
KyAgICBpZiAobmFtZS5pc051bGwoKSB8fCB2YWx1ZS5pc051bGwoKSB8fCBkb21haW4uaXNOdWxs
KCkgfHwgcGF0aC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBTb3Vw
Q29va2llKiBzb3VwQ29va2llID0gc291cF9jb29raWVfbmV3KG5hbWUudXRmOCgpLmRhdGEoKSwg
dmFsdWUudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgZG9tYWluLnV0ZjgoKS5kYXRhKCksIHBhdGgu
dXRmOCgpLmRhdGEoKSwgLTEpOworCisgICAgc291cF9jb29raWVfc2V0X2h0dHBfb25seShzb3Vw
Q29va2llLCBodHRwT25seSk7CisgICAgc291cF9jb29raWVfc2V0X3NlY3VyZShzb3VwQ29va2ll
LCBzZWN1cmUpOworCisgICAgaWYgKCFzZXNzaW9uKSB7CisgICAgICAgIFNvdXBEYXRlKiBkYXRl
ID0gbXNUb1NvdXBEYXRlKGV4cGlyZXMpOworICAgICAgICBzb3VwX2Nvb2tpZV9zZXRfZXhwaXJl
cyhzb3VwQ29va2llLCBkYXRlKTsKKyAgICAgICAgc291cF9kYXRlX2ZyZWUoZGF0ZSk7CisgICAg
fQorCisgICAgcmV0dXJuIHNvdXBDb29raWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcAppbmRleCBjYjg2OGNjMDdiNi4uYzdj
YWI1NWUyMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKQEAgLTIsNiAr
Miw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgRW5kbGVzcyBNb2JpbGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzMsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU291cE5ldHdvcmtTZXNzaW9uLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9HVW5pcXVlUHRyU291cC5oPgogI2luY2x1ZGUgPGxpYnNvdXAvc291
cC5oPgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CkBAIC0yODksMzUgKzI5MSwxMCBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2F2
ZUNyZWRlbnRpYWxUb1BlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcAogI2VuZGlm
CiB9CiAKLXN0YXRpYyBTb3VwRGF0ZSogbXNUb1NvdXBEYXRlKGRvdWJsZSBtcykKLXsKLSAgICBp
bnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKLSAgICBpbnQgZGF5T2ZZZWFyID0gZGF5SW5ZZWFyKG1z
LCB5ZWFyKTsKLSAgICBib29sIGxlYXBZZWFyID0gaXNMZWFwWWVhcih5ZWFyKTsKLQotICAgIC8v
IG1vbnRoRnJvbURheUluWWVhcigpIHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgWzAsMTFdIHJhbmdl
LCB3aGlsZSBzb3VwX2RhdGVfbmV3KCkgZXhwZWN0cwotICAgIC8vIGEgdmFsdWUgaW4gdGhlIFsx
LDEyXSByYW5nZSwgbWVhbmluZyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGFkanVzdCB0aGUgbW9udGgg
dmFsdWUuCi0gICAgcmV0dXJuIHNvdXBfZGF0ZV9uZXcoeWVhciwgbW9udGhGcm9tRGF5SW5ZZWFy
KGRheU9mWWVhciwgbGVhcFllYXIpICsgMSwgZGF5SW5Nb250aEZyb21EYXlJblllYXIoZGF5T2ZZ
ZWFyLCBsZWFwWWVhciksIG1zVG9Ib3VycyhtcyksIG1zVG9NaW51dGVzKG1zKSwgc3RhdGljX2Nh
c3Q8aW50PihtcyAvIDEwMDApICUgNjApOwotfQotCi1zdGF0aWMgU291cENvb2tpZSogdG9Tb3Vw
Q29va2llKGNvbnN0IENvb2tpZSYgY29va2llKQotewotICAgIFNvdXBDb29raWUqIHNvdXBDb29r
aWUgPSBzb3VwX2Nvb2tpZV9uZXcoY29va2llLm5hbWUudXRmOCgpLmRhdGEoKSwgY29va2llLnZh
bHVlLnV0ZjgoKS5kYXRhKCksCi0gICAgICAgIGNvb2tpZS5kb21haW4udXRmOCgpLmRhdGEoKSwg
Y29va2llLnBhdGgudXRmOCgpLmRhdGEoKSwgLTEpOwotICAgIHNvdXBfY29va2llX3NldF9odHRw
X29ubHkoc291cENvb2tpZSwgY29va2llLmh0dHBPbmx5KTsKLSAgICBzb3VwX2Nvb2tpZV9zZXRf
c2VjdXJlKHNvdXBDb29raWUsIGNvb2tpZS5zZWN1cmUpOwotICAgIGlmICghY29va2llLnNlc3Np
b24pIHsKLSAgICAgICAgU291cERhdGUqIGRhdGUgPSBtc1RvU291cERhdGUoY29va2llLmV4cGly
ZXMpOwotICAgICAgICBzb3VwX2Nvb2tpZV9zZXRfZXhwaXJlcyhzb3VwQ29va2llLCBkYXRlKTsK
LSAgICAgICAgc291cF9kYXRlX2ZyZWUoZGF0ZSk7Ci0gICAgfQotICAgIHJldHVybiBzb3VwQ29v
a2llOwotfQotCiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyhjb25zdCBW
ZWN0b3I8Q29va2llPiYgY29va2llcywgY29uc3QgVVJMJiwgY29uc3QgVVJMJikKIHsKICAgICBm
b3IgKGF1dG8gY29va2llIDogY29va2llcykKLSAgICAgICAgc291cF9jb29raWVfamFyX2FkZF9j
b29raWUoY29va2llU3RvcmFnZSgpLCB0b1NvdXBDb29raWUoY29va2llKSk7CisgICAgICAgIHNv
dXBfY29va2llX2phcl9hZGRfY29va2llKGNvb2tpZVN0b3JhZ2UoKSwgY29va2llKTsKIH0KIAog
dm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZShjb25zdCBDb29raWUmKQpAQCAt
MzI1LDkgKzMwMiwyOCBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llKGNv
bnN0IENvb2tpZSYpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV0syIHRvIHVzZS4KIH0K
IAotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25zdCBDb29raWUm
KQordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25zdCBDb29raWUm
IGNvb2tpZSkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXSzIgdG8gdXNlLgorICAg
IC8vIFdlIG5lZWQgdG8gc3BlY2lmeSB0aGUgSFRUUCBzY2hlbWUgdG8gY29uc3RydWN0IGEgdmFs
aWQgU291cFVSSSwKKyAgICAvLyBzbyB0aGF0IHdlIGNhbiBsb29rIHVwIGZvciB0aGUgSFRUUCBj
b29raWUgaW4gdGhlIGphci4KKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaShzb3VwX3VyaV9u
ZXcobnVsbHB0cikpOworICAgIHNvdXBfdXJpX3NldF9zY2hlbWUodXJpLmdldCgpLCBTT1VQX1VS
SV9TQ0hFTUVfSFRUUCk7CisgICAgc291cF91cmlfc2V0X2hvc3QodXJpLmdldCgpLCBjb29raWUu
ZG9tYWluLnV0ZjgoKS5kYXRhKCkpOworICAgIHNvdXBfdXJpX3NldF9wYXRoKHVyaS5nZXQoKSwg
Y29va2llLnBhdGgudXRmOCgpLmRhdGEoKSk7CisKKyAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+
IHRhcmdldENvb2tpZShjb29raWUpOworICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzTGlz
dChzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGNvb2tpZVN0b3JhZ2UoKSwgdXJpLmdl
dCgpLCBUUlVFKSk7CisgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29raWVzTGlzdC5nZXQoKTsg
aXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBHVW5pcXVlUHRyPFNv
dXBDb29raWU+IHNvdXBDb29raWUoc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEp
KTsKKworICAgICAgICAvLyBVc2UgKG5hbWUsIGRvbWFpbiwgcGF0aCkgYXMgdGhlIHByaW1hcnkg
a2V5IHRvIGlkZW50aWZ5IHRoZSBjb29raWUuCisgICAgICAgIGlmIChnX3N0cmNtcDAoc291cF9j
b29raWVfZ2V0X25hbWUoc291cENvb2tpZS5nZXQoKSksIHNvdXBfY29va2llX2dldF9uYW1lKHRh
cmdldENvb2tpZS5nZXQoKSkpCisgICAgICAgICAgICB8fCBnX3N0cmNtcDAoc291cF9jb29raWVf
Z2V0X2RvbWFpbihzb3VwQ29va2llLmdldCgpKSwgc291cF9jb29raWVfZ2V0X2RvbWFpbih0YXJn
ZXRDb29raWUuZ2V0KCkpKQorICAgICAgICAgICAgfHwgZ19zdHJjbXAwKHNvdXBfY29va2llX2dl
dF9wYXRoKHNvdXBDb29raWUuZ2V0KCkpLCBzb3VwX2Nvb2tpZV9nZXRfcGF0aCh0YXJnZXRDb29r
aWUuZ2V0KCkpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNvdXBfY29va2ll
X2phcl9kZWxldGVfY29va2llKGNvb2tpZVN0b3JhZ2UoKSwgc291cENvb2tpZS5nZXQoKSk7Cisg
ICAgfQogfQogCiBWZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEFsbENv
b2tpZXMoKQpAQCAtMzM2LDEwICszMzIsMTcgQEAgVmVjdG9yPENvb2tpZT4gTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpnZXRBbGxDb29raWVzKCkKICAgICByZXR1cm4geyB9OwogfQogCi1WZWN0b3I8
Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldENvb2tpZXMoY29uc3QgVVJMJikKK1Zl
Y3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0Q29va2llcyhjb25zdCBVUkwm
IHVybCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXSzIgdG8gdXNlLgotICAgIHJl
dHVybiB7IH07CisgICAgVmVjdG9yPENvb2tpZT4gY29va2llczsKKyAgICBHVW5pcXVlUHRyPFNv
dXBVUkk+IHVyaSA9IHVybC5jcmVhdGVTb3VwVVJJKCk7CisgICAgR1VuaXF1ZVB0cjxHU0xpc3Q+
IGNvb2tpZXNMaXN0KHNvdXBfY29va2llX2phcl9nZXRfY29va2llX2xpc3QoY29va2llU3RvcmFn
ZSgpLCB1cmkuZ2V0KCksIFRSVUUpKTsKKyAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXNM
aXN0LmdldCgpOyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIEdV
bmlxdWVQdHI8U291cENvb2tpZT4gc291cENvb2tpZShzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4o
aXRlbS0+ZGF0YSkpOworICAgICAgICBjb29raWVzLmFwcGVuZChXZWJDb3JlOjpDb29raWUoc291
cENvb2tpZS5nZXQoKSkpOworICAgIH0KKworICAgIHJldHVybiBjb29raWVzOwogfQogCiB2b2lk
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Zmx1c2hDb29raWVTdG9yZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGFi
MGU0OTI1NzJiLi44ODU5OWZiZWJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxNy0x
MC0xMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvQGVuZGxlc3NtLmNvbT4KKworICAgICAg
ICBbR1RLXSBOZXcgQVBJIHRvIGFkZCwgcmV0cmlldmUgYW5kIGRlbGV0ZSBjb29raWVzIHZpYSBX
ZWJLaXRDb29raWVNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzc5MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBuZXcgQVBJIHRvIFdlYktpdENvb2tpZU1hbmFnZXIgdG8gYWRkLCBy
ZXRyaWV2ZSBhbmQgZGVsZXRlIGNvbXBsZXRlCisgICAgICAgIGNvb2tpZXMgaW50by9vdXQtb2Yg
YSBydW5uaW5nIHNlc3Npb24sIGFuZCB1cGRhdGVkIGRvY3VtZW50YXRpb24gc2VjdGlvbnMuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6Cisg
ICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZSk6IE5ldyBmdW5jdGlvbi4K
KyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaCk6IERpdHRv
LgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKTogRGl0dG8uCisg
ICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNoKTogRGl0dG8u
CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6IERpdHRvLgor
ICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVfZmluaXNoKTogRGl0
dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oOiBB
ZGRlZCBuZXcgZnVuY3Rpb25zLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENv
b2tpZU1hbmFnZXIuaDogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6IERpdHRvLgorCiAyMDE3LTEwLTEwICBBZHJpYW4g
UGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gQnVp
bGQgZmFpbHVyZSBkdWUgdG8gaW52YWxpZCBjYXN0IG9mIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2hl
biB0YXJnZXR0aW5nIDY0LWJpdCBBUk0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKaW5kZXggZWVkMjcwMjY2NDcu
LjJjOGFiYmMzNDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRs
ZXNzIE1vYmlsZSwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIzMyw2ICsyMzQsMTg3IEBA
IFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2Vw
dF9wb2xpY3lfZmluaXNoKFdlYktpdENvCiB9CiAKIC8qKgorICogd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2FkZF9jb29raWU6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktpdENvb2tpZU1hbmFn
ZXIKKyAqIEB1cmk6IHRoZSAjU291cFVSSSB3aXRoIHRoZSBVUkkgb2YgdGhlIG9yaWdpbmF0aW5n
IHJlcXVlc3QKKyAqIEBjb29raWU6IHRoZSAjU291cENvb2tpZSB0byBiZSBhZGRlZAorICogQGNh
bmNlbGxhYmxlOiAoYWxsb3ctbm9uZSk6IGEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTCB0byBpZ25v
cmUKKyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0
byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiAoY2xv
c3VyZSk6IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3lu
Y2hyb25vdXNseSBhZGQgYSAjU291cENvb2tpZSB0byB0aGUgY3VycmVudCBzZXNzaW9uLCBhc3Nv
Y2lhdGVkIHRvIHRoZSBvcmlnaW5hdGluZworICogcmVxdWVzdCBzcGVjaWZpZWQgYnkgQHVyaSwg
d2hpY2ggbXVzdCBiZSBlaXRoZXIgYW5kIEhUVFAgb3IgYW4gSFRUUCBVUkwuIEluIGNhc2UgdGhl
CisgKiAjU291cENvb2tpZSBwYXNzZWQgYXMgdGhlIEBjb29raWUgcGFyYW1ldGVyIGRvZXMgbm90
IGhhdmUgYSB2YWxpZCBkb21haW4gc2V0IHlldCwKKyAqIHRoaXMgbWV0aG9kIHdpbGwgaW50ZXJu
YWxseSB1c2UgdGhlIGhvc3QgcGFydCBvZiB0aGUgcGFzc2VkIEB1cmwgcGFyYW1ldGVyIHRvIHNl
dAorICogdGhlIGNvb2tpZSdzIGRvbWFpbi4KKyAqCisgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMg
ZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAq
IHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVz
dWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3ZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2Fk
ZF9jb29raWUoV2ViS2l0Q29va2llTWFuYWdlciAqbWFuYWdlciwgU291cFVSSSAqdXJpLCBTb3Vw
Q29va2llICpjb29raWUsIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFNPVVBfVVJJX1ZBTElEX0ZPUl9IVFRQKHVyaSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
Y29va2llKTsKKworICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGNvb2tpZXM7CisgICAgY29v
a2llcy5hcHBlbmQoV2ViQ29yZTo6Q29va2llKGNvb2tpZSkpOworCisgICAgR1JlZlB0cjxHVGFz
az4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxs
YmFjaywgdXNlckRhdGEpKTsKKworICAgIC8vIFdlYkNvb2tpZU1hbmFnZXJQcm94eSBleHBlY3Rz
IGFuIFVSTCBmb3IgdGhlIGRvbWFpbiBhcyB3ZWxsLCB3aGljaAorICAgIC8vIHdpbGwgZWl0aGVy
IGJlIHRha2VuIGZyb20gdGhlIGRvbWFpbiBpbiB0aGUgU291cENvb2tpZSBwYXNzZWQsIGlmCisg
ICAgLy8gcHJlc2VudCwgb3IgcmlnaHQgZnJvbSB0aGUgVVJJJ3MgaG9zdCwgc28gd2UgYnVpbGQg
aXQgaGVyZS4KKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IGRvbWFpblVSTChzb3VwX3VyaV9uZXco
bnVsbHB0cikpOworICAgIGNvbnN0IGNoYXIqIGNvb2tpZURvbWFpbiA9IHNvdXBfY29va2llX2dl
dF9kb21haW4oY29va2llKTsKKyAgICBzb3VwX3VyaV9zZXRfc2NoZW1lKGRvbWFpblVSTC5nZXQo
KSwgc291cF91cmlfZ2V0X3NjaGVtZSh1cmkpKTsKKyAgICBzb3VwX3VyaV9zZXRfaG9zdChkb21h
aW5VUkwuZ2V0KCksIGNvb2tpZURvbWFpbiA/IGNvb2tpZURvbWFpbiA6IHNvdXBfdXJpX2dldF9o
b3N0KHVyaSkpOworICAgIHNvdXBfdXJpX3NldF9wYXRoKGRvbWFpblVSTC5nZXQoKSwgIi8iKTsK
KworICAgIGF1dG8gc2Vzc2lvbklEID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0
b3JlKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKS53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lv
bklEKCk7CisgICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFN
YW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKKworICAg
IC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRh
YmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKKyAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3Mg
dG8gdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgorICAgIHBy
b2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENv
b2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCBXZWJDb3JlOjpVUkwodXJpKSwgV2ViQ29yZTo6VVJM
KGRvbWFpblVSTC5nZXQoKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oQ2FsbGJhY2tCYXNlOjpF
cnJvciBlcnJvcikgeworICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwg
ZXJyb3IgPT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7CisgICAgfSk7Cit9CisKKy8qKgor
ICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoOgorICogQGNvb2tpZV9t
YW5hZ2VyOiBhICNXZWJLaXRDb29raWVNYW5hZ2VyCisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1
bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBpZ25v
cmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdpdGgg
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoKS4KKyAqCisgKiBSZXR1cm5zOiAlVFJV
RSBpZiB0aGUgY29va2llIHdhcyBhZGRlZCBvciAlRkFMU0UgaW4gY2FzZSBvZiBlcnJvci4KKyAq
LworZ2Jvb2xlYW4gd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKFdlYktp
dENvb2tpZU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBHRXJyb3IgKipl
cnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFH
RVIobWFuYWdlciksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNf
dmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgRkFMU0UpOworCisgICAgcmV0dXJuIGdfdGFza19wcm9w
YWdhdGVfYm9vbGVhbihHX1RBU0socmVzdWx0KSwgZXJyb3IpOworfQorCisvKioKKyAqIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llczoKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2Vi
S2l0Q29va2llTWFuYWdlcgorICogQHVyaTogdGhlICNTb3VwVVJJIGZvciB3aGljaCB0aGUgbGlz
dCBvZiBjb29raWVzIHdpbGwgYmUgcmV0cmlldmVkIGZyb20KKyAqIEBjYW5jZWxsYWJsZTogKGFs
bG93LW5vbmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBAY2FsbGJh
Y2s6IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRo
ZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0
YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgZ2V0
IGEgbGlzdCBvZiAjU291cENvb2tpZSBmcm9tIEBjb29raWVfbWFuYWdlciBhc3NvY2lhdGVkIHdp
dGggQHVyaSwgd2hpY2gKKyAqIG11c3QgYmUgZWl0aGVyIGFuZCBIVFRQIG9yIGFuIEhUVFAgVVJM
LgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwg
YmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9jb29raWVzX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisg
Ki8KK3ZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKFdlYktpdENvb2tpZU1h
bmFnZXIgKm1hbmFnZXIsIFNvdXBVUkkgKnVyaSwgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwg
R0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoU09VUF9VUklfVkFMSURfRk9SX0hUVFAodXJpKSk7CisKKyAgICBH
UmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2Vs
bGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworCisgICAgYXV0byBzZXNzaW9uSUQgPSB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFn
ZXIpLndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKTsKKyAgICBjb25zdCBhdXRvJiBwcm9j
ZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdl
ci0+cHJpdi0+ZGF0YU1hbmFnZXIpOworCisgICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVu
IGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcworICAg
IC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0byB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRo
ZSBmaXJzdCBwcm9jZXNzIHBvb2wuCisgICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llcyhzZXNzaW9uSUQsIFdlYkNvcmU6OlVS
TCh1cmkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+JiBjb29raWVzLCBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIEdMaXN0
KiBjb29raWVzX2xpc3QgPSBudWxscHRyOworICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNv
b2tpZXMpCisgICAgICAgICAgICBjb29raWVzX2xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVz
X2xpc3QsIGNvb2tpZSk7CisKKyAgICAgICAgZ190YXNrX3JldHVybl9wb2ludGVyKHRhc2suZ2V0
KCksIGdfbGlzdF9yZXZlcnNlKGNvb2tpZXNfbGlzdCksIFtdKGdwb2ludGVyIGRhdGEpIHsKKyAg
ICAgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwoc3RhdGljX2Nhc3Q8R0xpc3QqPihkYXRhKSwgcmVp
bnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oc291cF9jb29raWVfZnJlZSkpOworICAgICAg
ICB9KTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nv
b2tpZXNfZmluaXNoOgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29raWVNYW5hZ2Vy
CisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0aW9u
IGZvciBlcnJvciBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNocm9u
b3VzIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29r
aWVzKCkuCisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBTb3VwQ29va2llKSAodHJhbnNm
ZXIgZnVsbCk6IEEgI0dTTGlzdCBvZiAjU291cENvb2tpZSBpbnN0YW5jZXMKKyAqICAgIG9yICVO
VUxMIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK0dMaXN0KiB3ZWJraXRfY29va2llX21hbmFnZXJf
Z2V0X2Nvb2tpZXNfZmluaXNoKFdlYktpdENvb2tpZU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jl
c3VsdCAqcmVzdWx0LCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlciksIG51bGxwdHIpOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19pc192YWxpZChyZXN1bHQsIG1hbmFnZXIpLCBudWxscHRy
KTsKKworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEdMaXN0Kj4oZ190YXNrX3Byb3BhZ2F0
ZV9wb2ludGVyKEdfVEFTSyhyZXN1bHQpLCBlcnJvcikpOworfQorCisvKioKKyAqIHdlYmtpdF9j
b29raWVfbWFuYWdlcl9kZWxldGVfY29va2llOgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJL
aXRDb29raWVNYW5hZ2VyCisgKiBAbmFtZTogdGhlIG5hbWUgdGhlIGNvb2tpZSB0byBiZSBkZWxl
dGVkCisgKiBAZG9tYWluOiB0aGUgZG9tYWluIG9mIHRoZSBjb29raWUgdG8gYmUgZGVsZXRlZAor
ICogQHBhdGg6IHRoZSBwYXRoIG9mIHRoZSBjb29raWUgdG8gYmUgZGVsZXRlZAorICogQGNhbmNl
bGxhYmxlOiAoYWxsb3ctbm9uZSk6IGEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTCB0byBpZ25vcmUK
KyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBj
YWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiAoY2xvc3Vy
ZSk6IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3luY2hy
b25vdXNseSBkZWxldGUgYSAjU291cENvb2tpZSBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24sIGFz
IHVuaXF1ZWxseSBpZGVudGlmaWVkCisgKiBieSBpdHMgbmFtZSwgZG9tYWluIGFuZCBwYXRoLgor
ICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUg
Y2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0
ZV9jb29raWVfZmluaXNoKCkgdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAq
Lwordm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVN
YW5hZ2VyICptYW5hZ2VyLCBjb25zdCBnY2hhciAqbmFtZSwgY29uc3QgZ2NoYXIgKmRvbWFpbiwg
Y29uc3QgZ2NoYXIgKnBhdGgsIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5
Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKG5hbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZG9tYWluKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHBhdGgpOworCisgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihn
X3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKKwor
ICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgbmFtZSwgZG9tYWluIGFuZCBwYXRoLCB3aGlj
aCBpcyB3aGF0IHdpbGwgYmUgdXNlZAorICAgIC8vIHRvIGlkZW50aWZ5IHRoZSBjb29raWUgaW4g
U291cENvb2tpZUphciBoZWxkIGJ5IHRoZSBvdGhlciBwcm9jZXNzLiBIb3dldmVyLAorICAgIC8v
IHdlIHN0aWxsIG5lZWQgdG8gY3JlYXRlIHRoZSBDb29raWUgd2l0aCBhIG5vbi1lbXB0eSB2YWx1
ZSBub3QgdG8gZ2V0IGRpc2NhcmRlZAorICAgIC8vIG9uIGl0cyB3YXkgdG8gdGhlIG90aGVyIHBy
b2Nlc3MsIHNvIHdlIGp1c3QgcGFzcyB0aGUgbmFtZSBhZ2FpbiB0aGVyZS4KKyAgICBXZWJDb3Jl
OjpDb29raWUgdGFyZ2V0Q29va2llKFN0cmluZzo6ZnJvbVVURjgobmFtZSksIFN0cmluZzo6ZnJv
bVVURjgobmFtZSksIFN0cmluZzo6ZnJvbVVURjgoZG9tYWluKSwgU3RyaW5nOjpmcm9tVVRGOChw
YXRoKSwgLTEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIFN0cmluZygpLCBXZWJDb3JlOjpVUkwoKSwg
VmVjdG9yPHVpbnQxNl90PiB7IH0pOworCisgICAgYXV0byBzZXNzaW9uSUQgPSB3ZWJraXRXZWJz
aXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpLndl
YnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKTsKKyAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9v
bHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpOworCisgICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20v
dG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcworICAgIC8vIG9m
IHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0byB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJz
dCBwcm9jZXNzIHBvb2wuCisgICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29va2llKHNlc3Npb25JRCwgdGFyZ2V0Q29va2llLCBb
dGFzayA9IFdURk1vdmUodGFzayldKENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAg
ICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIGVycm9yID09IENhbGxiYWNrQmFz
ZTo6RXJyb3I6Ok5vbmUpOworICAgIH0pOworfQorCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFu
YWdlcl9kZWxldGVfY29va2llX2ZpbmlzaDoKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0
Q29va2llTWFuYWdlcgorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJl
dHVybiBsb2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNo
IGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF9jb29raWVfbWFu
YWdlcl9kZWxldGVfY29va2llKCkuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNvb2tp
ZSB3YXMgYWRkZWQgb3IgJUZBTFNFIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK2dib29sZWFuIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaChXZWJLaXRDb29raWVNYW5h
Z2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgR0Vycm9yICoqZXJyb3IpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIp
LCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3Vs
dCwgbWFuYWdlciksIEZBTFNFKTsKKworICAgIHJldHVybiBnX3Rhc2tfcHJvcGFnYXRlX2Jvb2xl
YW4oR19UQVNLKHJlc3VsdCksIGVycm9yKTsKK30KKworLyoqCiAgKiB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzOgogICogQGNvb2tpZV9tYW5hZ2VyOiBhICNX
ZWJLaXRDb29raWVNYW5hZ2VyCiAgKiBAY2FuY2VsbGFibGU6IChhbGxvdy1ub25lKTogYSAjR0Nh
bmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaAppbmRleCBlZTE3ZDIyMDQ0OS4u
Yjk3MGM3NDEyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0Q29va2llTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Q29va2llTWFuYWdlci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEVuZGxlc3MgTW9i
aWxlLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNiArMjcsNyBAQAogCiAjaW5jbHVk
ZSA8Z2lvL2dpby5oPgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGlic291
cC9zb3VwLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAKIEdfQkVHSU5f
REVDTFMKQEAgLTEwNyw2ICsxMDksNDUgQEAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2Nl
cHRfcG9saWN5X2ZpbmlzaCAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQg
ICAgICAgICAgICAgICAgICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJy
b3IpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2ll
ICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29r
aWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTb3VwVVJJICAgICAgICAgICAgICAgICAgICAgICp1cmksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cENvb2tpZSAg
ICAgICAgICAgICAgICAgICAqY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNh
bmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVy
ICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaCAgICAgICAgICAgICAgIChX
ZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQg
ICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJy
b3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
cyAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29r
aWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTb3VwVVJJICAgICAgICAgICAgICAgICAgICAgICp1cmksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxl
ICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICAg
ICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKKwor
V0VCS0lUX0FQSSBHTGlzdCoKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llc19maW5p
c2ggICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFu
YWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAg
ICAgICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVf
bWFuYWdlcl9kZWxldGVfY29va2llICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5h
Z2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAg
ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgKmRvbWFpbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAg
ICAgICAgICAgICAgICAgICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNl
bGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAg
ICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaCAgICAgICAgICAgIChXZWJL
aXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAg
ICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3Ip
OworCiBXRUJLSVRfREVQUkVDQVRFRF9GT1Iod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2Zl
dGNoKSB2b2lkCiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVz
ICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Nh
bmNlbGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMu
dHh0IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4w
LXNlY3Rpb25zLnR4dAppbmRleCA5Y2M3YTZlMWIzNS4uZGNhYjA5ZmYyNTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0
aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstNC4wLXNlY3Rpb25zLnR4dApAQCAtOTk4LDYgKzk5OCwxMiBAQCB3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kKIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNj
ZXB0X3BvbGljeV9maW5pc2gKIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRo
X2Nvb2tpZXMKIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXNf
ZmluaXNoCit3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZQord2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2FkZF9jb29raWVfZmluaXNoCit3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tp
ZXMKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llc19maW5pc2gKK3dlYmtpdF9jb29r
aWVfbWFuYWdlcl9kZWxldGVfY29va2llCit3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nv
b2tpZV9maW5pc2gKIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llc19mb3JfZG9t
YWluCiB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2FsbF9jb29raWVzCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFuYWdlci5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmgK
aW5kZXggNTk1NjNhZGQ4ODguLjRhMGI5ZGI5YmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvb2tpZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvb2tpZU1hbmFnZXIuaApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDYg
KzI3LDcgQEAKIAogI2luY2x1ZGUgPGdpby9naW8uaD4KICNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogI2luY2x1ZGUgPHdwZS9XZWJLaXREZWZpbmVz
Lmg+CiAKIEdfQkVHSU5fREVDTFMKQEAgLTEwNyw2ICsxMDksNDUgQEAgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5X2ZpbmlzaCAgICAgICAgKFdlYktpdENvb2tpZU1hbmFn
ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAg
ICAgICAgICAgICoqZXJyb3IpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2Vy
ICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VwVVJJICAgICAgICAgICAgICAgICAgICAgICp1
cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU291cENvb2tpZSAgICAgICAgICAgICAgICAgICAqY29va2llLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAg
ICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNh
bGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaCAg
ICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAg
ICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfY29va2llcyAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2Vy
ICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VwVVJJICAgICAgICAgICAgICAgICAgICAgICp1
cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlD
YWxsYmFjayAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAg
dXNlcl9kYXRhKTsKKworV0VCS0lUX0FQSSBHTGlzdCoKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9n
ZXRfY29va2llc19maW5pc2ggICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAg
ICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llICAgICAgICAgICAgICAgICAgIChX
ZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAg
ICAgICAgICAgICAgICAgICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgKmRvbWFp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICpwYXRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAg
ICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxi
YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9B
UEkgZ2Jvb2xlYW4KK3dlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaCAg
ICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAg
ICAgICAgICoqZXJyb3IpOworCiBXRUJLSVRfREVQUkVDQVRFRF9GT1Iod2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2ZldGNoKSB2b2lkCiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFp
bnNfd2l0aF9jb29raWVzICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29v
a2llX21hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDYyNTli
NDBhNDAuLjVjM2YwMDdlMDYwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTctMTAtMTAgIE1hcmlvIFNhbmNoZXog
UHJhZGEgIDxtYXJpb0BlbmRsZXNzbS5jb20+CisKKyAgICAgICAgW0dUS10gTmV3IEFQSSB0byBh
ZGQsIHJldHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEgV2ViS2l0Q29va2llTWFuYWdlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTMyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3
IHRlc3QgY2FzZXMgdG8gY292ZXIgdGhlIG5ld2x5IGFkZGVkIEFQSSBmb3IgV2ViS2l0Q29va2ll
TWFuYWdlcjoKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUsIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyBhbmQKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2RlbGV0ZV9jb29raWUuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAodGVzdENvb2tpZU1hbmFn
ZXJBZGRDb29raWUpOiBBZGRlZC4KKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyR2V0Q29va2ll
cyk6IEFkZGVkLgorICAgICAgICAodGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWUpOiBBZGRl
ZC4KKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKTogU21hbGwgdXBkYXRlIHRvIGF2b2lkIGhhcmRj
b2Rpbmcgc3RyaW5ncyB3ZSByZXVzZS4KKyAgICAgICAgKGJlZm9yZUFsbCk6IEFkZGVkIHRoZSBu
ZXcgdGVzdCBjYXNlcyB0byB0aGUgdGVzdCBzdWl0ZS4KKwogMjAxNy0xMC0wOSAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgVmVjdG9yIHNob3VsZCBiZSBhYmxl
IHRvIGVhc2lseSBjcmVhdGUgZnJvbSBhIGxpc3Qgb2YgbW92YWJsZSBvbmx5IGl0ZW1zCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1h
bmFnZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29r
aWVNYW5hZ2VyLmNwcAppbmRleCAxYmU4Y2MwZDA2MC4uM2MwYTFkNGJkZGMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0Q29va2llTWFuYWdlci5j
cHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVN
YW5hZ2VyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMSwxMiArMjIsMTggQEAKIAogI2luY2x1ZGUgIldlYktpdFRl
c3RTZXJ2ZXIuaCIKICNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
R1VuaXF1ZVB0clNvdXAuaD4KICNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgogCiBzdGF0aWMgV2Vi
S2l0VGVzdFNlcnZlcioga1NlcnZlcjsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGtGaXJzdFBhcnR5
RG9tYWluID0gIjEyNy4wLjAuMSI7CiBzdGF0aWMgY29uc3QgY2hhcioga1RoaXJkUGFydHlEb21h
aW4gPSAibG9jYWxob3N0IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtDb29raWVOYW1lID0gImZv
byI7CitzdGF0aWMgY29uc3QgY2hhcioga0Nvb2tpZVZhbHVlID0gImJhciI7CitzdGF0aWMgY29u
c3QgY2hhcioga0Nvb2tpZVBhdGggPSAiLyI7CisKIHN0YXRpYyBjb25zdCBjaGFyKiBrSW5kZXhI
dG1sRm9ybWF0ID0KICAgICAiPGh0bWw+PGJvZHk+IgogICAgICIgPHA+V2ViS2l0R1RLKyBDb29r
aWUgTWFuYWdlciB0ZXN0PC9wPiIKQEAgLTQ5LDcgKzU2LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX2Nvb2tpZU1hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcih3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSkpCiAgICAgICAgICwgbV9hY2Nl
cHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKQogICAg
ICAgICAsIG1fZG9tYWlucygwKQorICAgICAgICAsIG1fY29va2llcygwKQorICAgICAgICAsIG1f
Y29va2llQWRkZWQoZmFsc2UpCiAgICAgICAgICwgbV9jb29raWVzQ2hhbmdlZChmYWxzZSkKKyAg
ICAgICAgLCBtX2Nvb2tpZURlbGV0ZWQoZmFsc2UpCiAgICAgICAgICwgbV9maW5pc2hMb29wV2hl
bkNvb2tpZXNDaGFuZ2UoZmFsc2UpCiAgICAgewogICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Nvb2tpZV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2Vi
VmlldykpKSA9PSBtX2Nvb2tpZU1hbmFnZXIpOwpAQCAtMTA2LDYgKzExNiw2NyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX2FjY2VwdFBvbGljeTsKICAgICB9CiAKKyAgICBzdGF0aWMgdm9p
ZCBhZGRDb29raWVSZWFkeUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxH
RXJyb3I+IGVycm9yOworICAgICAgICBib29sIGFkZGVkID0gd2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2FkZF9jb29raWVfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmplY3QpLCByZXN1bHQs
ICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisKKyAg
ICAgICAgQ29va2llTWFuYWdlclRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2Vy
VGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+bV9jb29raWVBZGRlZCA9IGFkZGVkOwor
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAg
IGJvb2wgYWRkQ29va2llKFNvdXBVUkkqIHVyaSwgU291cENvb2tpZSogY29va2llKQorICAgIHsK
KyAgICAgICAgbV9jb29raWVBZGRlZCA9IGZhbHNlOworICAgICAgICB3ZWJraXRfY29va2llX21h
bmFnZXJfYWRkX2Nvb2tpZShtX2Nvb2tpZU1hbmFnZXIsIHVyaSwgY29va2llLCAwLCBhZGRDb29r
aWVSZWFkeUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxv
b3ApOworCisgICAgICAgIHJldHVybiBtX2Nvb2tpZUFkZGVkOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIGdldENvb2tpZXNSZWFkeUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVz
dWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgR1VuaXF1ZU91
dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICBHTGlzdCogY29va2llcyA9IHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9nZXRfY29va2llc19maW5pc2goV0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iamVj
dCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdl
dCgpKTsKKworICAgICAgICBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENv
b2tpZU1hbmFnZXJUZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5tX2Nvb2tpZXMgPSBj
b29raWVzOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAg
IH0KKworICAgIEdMaXN0KiBnZXRDb29raWVzKFNvdXBVUkkqIHVyaSkKKyAgICB7CisgICAgICAg
IGdfbGlzdF9mcmVlX2Z1bGwobV9jb29raWVzLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90
aWZ5Pihzb3VwX2Nvb2tpZV9mcmVlKSk7CisgICAgICAgIG1fY29va2llcyA9IDA7CisgICAgICAg
IHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhtX2Nvb2tpZU1hbmFnZXIsIHVyaSwg
MCwgZ2V0Q29va2llc1JlYWR5Q2FsbGJhY2ssIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7CisKKyAgICAgICAgcmV0dXJuIG1fY29va2llczsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCBkZWxldGVDb29raWVSZWFkeUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAg
R1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICBib29sIGFkZGVkID0gd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdF
UihvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFl
cnJvci5nZXQoKSk7CisKKyAgICAgICAgQ29va2llTWFuYWdlclRlc3QqIHRlc3QgPSBzdGF0aWNf
Y2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+bV9jb29r
aWVBZGRlZCA9IGFkZGVkOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxv
b3ApOworICAgIH0KKworICAgIGJvb2wgZGVsZXRlQ29va2llKGNvbnN0IGNoYXIqIG5hbWUsIGNv
bnN0IGNoYXIqIGRvbWFpbiwgY29uc3QgY2hhciogcGF0aCkKKyAgICB7CisgICAgICAgIG1fY29v
a2llRGVsZXRlZCA9IGZhbHNlOworICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRl
X2Nvb2tpZShtX2Nvb2tpZU1hbmFnZXIsIG5hbWUsIGRvbWFpbiwgcGF0aCwgMCwgZGVsZXRlQ29v
a2llUmVhZHlDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKKworICAgICAgICByZXR1cm4gbV9jb29raWVEZWxldGVkOworICAgIH0KKwogICAgIHZv
aWQgc2V0QWNjZXB0UG9saWN5KFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCiAgICAg
ewogICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kobV9jb29r
aWVNYW5hZ2VyLCBwb2xpY3kpOwpAQCAtMTczLDcgKzI0NCwxMCBAQCBwdWJsaWM6CiAgICAgV2Vi
S2l0Q29va2llTWFuYWdlciogbV9jb29raWVNYW5hZ2VyOwogICAgIFdlYktpdENvb2tpZUFjY2Vw
dFBvbGljeSBtX2FjY2VwdFBvbGljeTsKICAgICBjaGFyKiogbV9kb21haW5zOworICAgIEdMaXN0
KiBtX2Nvb2tpZXM7CisgICAgYm9vbCBtX2Nvb2tpZUFkZGVkOwogICAgIGJvb2wgbV9jb29raWVz
Q2hhbmdlZDsKKyAgICBib29sIG1fY29va2llRGVsZXRlZDsKICAgICBib29sIG1fZmluaXNoTG9v
cFdoZW5Db29raWVzQ2hhbmdlOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gbV9jb29raWVzVGV4dEZp
bGU7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBtX2Nvb2tpZXNTUUxpdGVGaWxlOwpAQCAtMjExLDYg
KzI4NSwxNTUgQEAgc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJBY2NlcHRQb2xpY3koQ29v
a2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIKICAgICBnX2Fzc2VydF9jbXBpbnQo
Z19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDApOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0Q29v
a2llTWFuYWdlckFkZENvb2tpZShDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUND
RVBUX0FMV0FZUyk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
aW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICAvLyBEZWxldGUgYWxsIGNvb2tpZXMgZmlyc3QsIHNvIHRoYXQgd2UgY2FuIG91ciBv
d24uCisgICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOworICAgIGdfYXNzZXJ0X2NtcGludChn
X3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKKworICAgIC8vIENyZWF0
ZSBhIG5ldyBjb29raWUgYW5kIGFkZCBpdCwgdXNpbmcgYSBIVFRQIFVSTC4KKyAgICBHVW5pcXVl
UHRyPFNvdXBDb29raWU+IGZpcnN0Q29va2llKHNvdXBfY29va2llX25ldyhrQ29va2llTmFtZSwg
a0Nvb2tpZVZhbHVlLCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGgsIFNPVVBfQ09PS0lF
X01BWF9BR0VfT05FX0hPVVIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHRhcmdldFVSTChnX3N0
cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlE
b21haW4pKTsKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaShzb3VwX3VyaV9uZXcodGFyZ2V0
VVJMLmdldCgpKSk7CisgICAgdGVzdC0+YWRkQ29va2llKHVyaS5nZXQoKSwgZmlyc3RDb29raWUu
Z2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFp
bnMoKSksID09LCAxKTsKKworICAgIC8vIFJldHJpZXZlIHRoZSBjb29raWUgd2UganVzdCBhZGRl
ZCBhbmQgY29tcGFyZS4KKyAgICBHTGlzdCogZm91bmRDb29raWVzID0gdGVzdC0+Z2V0Q29va2ll
cyh1cmkuZ2V0KCkpOworICAgIGdfYXNzZXJ0X25vbm51bGwoZm91bmRDb29raWVzKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tpZXMpLCA9PSwgMSk7CisKKyAg
ICBTb3VwQ29va2llKiBmb3VuZENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihmb3Vu
ZENvb2tpZXMtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFt
ZShmb3VuZENvb2tpZSksID09LCBrQ29va2llTmFtZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNv
dXBfY29va2llX2dldF92YWx1ZShmb3VuZENvb2tpZSksID09LCBrQ29va2llVmFsdWUpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfcGF0aChmb3VuZENvb2tpZSksID09LCBr
Q29va2llUGF0aCk7CisKKyAgICAvLyBOb3cgY2hlY2sgdGhhdCB0aGUgdGhpcmQgcGFydHkgZG9t
YWluIGRvZXNuJ3QgaGF2ZSBjb29raWVzIGFkZGVkIHlldC4KKyAgICB0YXJnZXRVUkwucmVzZXQo
Z19zdHJkdXBfcHJpbnRmKCIlczovLyVzIiwgU09VUF9VUklfU0NIRU1FX0hUVFAsIGtUaGlyZFBh
cnR5RG9tYWluKSk7CisgICAgdXJpLnJlc2V0KHNvdXBfdXJpX25ldyh0YXJnZXRVUkwuZ2V0KCkp
KTsKKyAgICBnX2Fzc2VydF9udWxsKHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKSk7CisKKyAg
ICAvLyBDcmVhdGUgYSBzZWNvbmQgY29va2llLCB0aGlzIHRpbWUgdXNpbmcgYW5kIEhUVFBTIFVS
TC4KKyAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IHNlY29uZENvb2tpZShzb3VwX2Nvb2tpZV9u
ZXcoa0Nvb2tpZU5hbWUsIGtDb29raWVWYWx1ZSwga1RoaXJkUGFydHlEb21haW4sIGtDb29raWVQ
YXRoLCBTT1VQX0NPT0tJRV9NQVhfQUdFX09ORV9IT1VSKSk7CisgICAgdGFyZ2V0VVJMLnJlc2V0
KGdfc3RyZHVwX3ByaW50ZigiJXM6Ly8lcyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQUywga1RoaXJk
UGFydHlEb21haW4pKTsKKyAgICB1cmkucmVzZXQoc291cF91cmlfbmV3KHRhcmdldFVSTC5nZXQo
KSkpOworICAgIHRlc3QtPmFkZENvb2tpZSh1cmkuZ2V0KCksIHNlY29uZENvb2tpZS5nZXQoKSk7
CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwg
PT0sIDIpOworCisgICAgLy8gUmV0cmlldmUgdGhlIGNvb2tpZSB3ZSBqdXN0IGFkZGVkIGFuZCBj
b21wYXJlLgorICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsK
KyAgICBnX2Fzc2VydF9ub25udWxsKGZvdW5kQ29va2llcyk7CisgICAgZ19hc3NlcnRfY21waW50
KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDEpOworCisgICAgZm91bmRDb29raWUg
PSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tp
ZU5hbWUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRD
b29raWUpLCA9PSwga0Nvb2tpZVZhbHVlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29r
aWVfZ2V0X3BhdGgoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVBhdGgpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0Q29va2llTWFuYWdlckdldENvb2tpZXMoQ29va2llTWFuYWdlclRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09L
SUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworCisgICAgLy8gRGVsZXRlIGFsbCBjb29raWVzIGZpcnN0LCBzbyB0aGF0
IHdlIGNhbiBjcmVhdGUgb3VyIG93bi4KKyAgICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0s
IDApOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IGNvb2tpZSBhbmQgYWRkIGl0LCB1c2luZyBhIEhU
VFAgVVJMLgorICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4gZmlyc3RDb29raWUoc291cF9jb29r
aWVfbmV3KGtDb29raWVOYW1lLCBrQ29va2llVmFsdWUsIGtGaXJzdFBhcnR5RG9tYWluLCBrQ29v
a2llUGF0aCwgU09VUF9DT09LSUVfTUFYX0FHRV9PTkVfSE9VUikpOworICAgIEdVbmlxdWVQdHI8
Y2hhcj4gdGFyZ2V0VVJMKGdfc3RyZHVwX3ByaW50ZigiJXM6Ly8lcyIsIFNPVVBfVVJJX1NDSEVN
RV9IVFRQLCBrRmlyc3RQYXJ0eURvbWFpbikpOworICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJp
KHNvdXBfdXJpX25ldyh0YXJnZXRVUkwuZ2V0KCkpKTsKKyAgICB0ZXN0LT5hZGRDb29raWUodXJp
LmdldCgpLCBmaXJzdENvb2tpZS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9s
ZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOworCisgICAgLy8gUmV0cmlldmUgdGhl
IGNvb2tpZSB3ZSBqdXN0IGFkZGVkIGFuZCBjb21wYXJlLgorICAgIEdMaXN0KiBmb3VuZENvb2tp
ZXMgPSB0ZXN0LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChm
b3VuZENvb2tpZXMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29v
a2llcyksID09LCAxKTsKKworICAgIFNvdXBDb29raWUqIGZvdW5kQ29va2llID0gc3RhdGljX2Nh
c3Q8U291cENvb2tpZSo+KGZvdW5kQ29va2llcy0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHNvdXBfY29va2llX2dldF9uYW1lKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVOYW1lKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3ZhbHVlKGZvdW5kQ29va2llKSwgPT0s
IGtDb29raWVWYWx1ZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9wYXRo
KGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVQYXRoKTsKKworICAgIC8vIENoZWNrIGl0J3MgcG9z
c2libGUgdG8gcmV0cmlldmUgdGhlIHNhbWUgY29va2llIHVzaW5nIGEgSFRUUFMgVVJMIGluc3Rl
YWQuCisgICAgdGFyZ2V0VVJMLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJXM6Ly8lcyIsIFNPVVBf
VVJJX1NDSEVNRV9IVFRQUywga0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICB1cmkucmVzZXQoc291
cF91cmlfbmV3KHRhcmdldFVSTC5nZXQoKSkpOworICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdl
dENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGZvdW5kQ29va2llcyk7
CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDEp
OworCisgICAgZm91bmRDb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oZm91bmRDb29r
aWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X25hbWUoZm91
bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nv
b2tpZV9nZXRfdmFsdWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVlKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3BhdGgoZm91bmRDb29raWUpLCA9PSwga0Nvb2tp
ZVBhdGgpOworCisgICAgLy8gQ3JlYXRlIGEgc2Vjb25kIGNvb2tpZSwgdGhpcyB0aW1lIHVzaW5n
IGFuZCBIVFRQUyBVUkwuCisgICAgR1VuaXF1ZVB0cjxTb3VwQ29va2llPiBzZWNvbmRDb29raWUo
c291cF9jb29raWVfbmV3KGtDb29raWVOYW1lLCBrQ29va2llVmFsdWUsIGtUaGlyZFBhcnR5RG9t
YWluLCBrQ29va2llUGF0aCwgU09VUF9DT09LSUVfTUFYX0FHRV9PTkVfSE9VUikpOworICAgIHRh
cmdldFVSTC5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hFTUVf
SFRUUFMsIGtUaGlyZFBhcnR5RG9tYWluKSk7CisgICAgdXJpLnJlc2V0KHNvdXBfdXJpX25ldyh0
YXJnZXRVUkwuZ2V0KCkpKTsKKyAgICB0ZXN0LT5hZGRDb29raWUodXJpLmdldCgpLCBzZWNvbmRD
b29raWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdl
dERvbWFpbnMoKSksID09LCAyKTsKKworICAgIC8vIFJldHJpZXZlIHRoZSBjb29raWUgd2UganVz
dCBhZGRlZCBhbmQgY29tcGFyZS4KKyAgICBmb3VuZENvb2tpZXMgPSB0ZXN0LT5nZXRDb29raWVz
KHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChmb3VuZENvb2tpZXMpOworICAgIGdf
YXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAxKTsKKworICAg
IGZvdW5kQ29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGZvdW5kQ29va2llcy0+ZGF0
YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9uYW1lKGZvdW5kQ29va2ll
KSwgPT0sIGtDb29raWVOYW1lKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0
X3ZhbHVlKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVWYWx1ZSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHNvdXBfY29va2llX2dldF9wYXRoKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVQYXRoKTsK
KworICAgIC8vIENoZWNrIGl0J3MgcG9zc2libGUgdG8gcmV0cmlldmUgdGhlIHNhbWUgY29va2ll
IHVzaW5nIGEgSFRUUCBVUkwgaW5zdGVhZC4KKyAgICB0YXJnZXRVUkwucmVzZXQoZ19zdHJkdXBf
cHJpbnRmKCIlczovLyVzIiwgU09VUF9VUklfU0NIRU1FX0hUVFAsIGtUaGlyZFBhcnR5RG9tYWlu
KSk7CisgICAgdXJpLnJlc2V0KHNvdXBfdXJpX25ldyh0YXJnZXRVUkwuZ2V0KCkpKTsKKyAgICBm
b3VuZENvb2tpZXMgPSB0ZXN0LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRf
bm9ubnVsbChmb3VuZENvb2tpZXMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3Ro
KGZvdW5kQ29va2llcyksID09LCAxKTsKKworICAgIGZvdW5kQ29va2llID0gc3RhdGljX2Nhc3Q8
U291cENvb2tpZSo+KGZvdW5kQ29va2llcy0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNv
dXBfY29va2llX2dldF9uYW1lKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVOYW1lKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3ZhbHVlKGZvdW5kQ29va2llKSwgPT0sIGtD
b29raWVWYWx1ZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9wYXRoKGZv
dW5kQ29va2llKSwgPT0sIGtDb29raWVQYXRoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdENvb2tp
ZU1hbmFnZXJEZWxldGVDb29raWUoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FD
Q0VQVF9BTFdBWVMpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2luZGV4Lmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgLy8gSW5pdGlhbGx5LCB0aGVyZSBzaG91bGQgYmUgMiBjb29raWVzIGF2YWlsYWJs
ZS4KKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkp
LCA9PSwgMik7CisKKyAgICAvLyBEZWxldGUgdGhlIGNvb2tpZSBmb3IgdGhlIGZpcnN0IHBhcnR5
IGRvbWFpbi4KKyAgICB0ZXN0LT5kZWxldGVDb29raWUoa0Nvb2tpZU5hbWUsIGtGaXJzdFBhcnR5
RG9tYWluLCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgo
dGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOworCisgICAgLy8gVHJ5IGRlbGV0aW5nIGEgbm9u
LWV4aXN0ZW50IGNvb2tpZSAod3JvbmcgbmFtZSkuCisgICAgdGVzdC0+ZGVsZXRlQ29va2llKCJ3
cm9uZy1uYW1lIiwga1RoaXJkUGFydHlEb21haW4sIGtDb29raWVQYXRoKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisKKyAg
ICAvLyBUcnkgZGVsZXRpbmcgYSBub24tZXhpc3RlbnQgY29va2llICh3cm9uZyBwYXRoKS4KKyAg
ICB0ZXN0LT5kZWxldGVDb29raWUoa0Nvb2tpZU5hbWUsICJ3cm9uZy1kb21haW4iLCBrQ29va2ll
UGF0aCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlu
cygpKSwgPT0sIDEpOworCisgICAgLy8gVHJ5IGRlbGV0aW5nIGEgbm9uLWV4aXN0ZW50IGNvb2tp
ZSAod3JvbmcgcGF0aCkuCisgICAgdGVzdC0+ZGVsZXRlQ29va2llKGtDb29raWVOYW1lLCBrVGhp
cmRQYXJ0eURvbWFpbiwgIndyb25nLXBhdGgiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2
X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisKKyAgICAvLyBEZWxldGUgdGhl
IGNvb2tpZSBmb3IgdGhlIHRoaXJkIHBhcnR5IGRvbWFpbi4KKyAgICB0ZXN0LT5kZWxldGVDb29r
aWUoa0Nvb2tpZU5hbWUsIGtUaGlyZFBhcnR5RG9tYWluLCBrQ29va2llUGF0aCk7CisgICAgZ19h
c3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOwor
fQorCiBzdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZXMoQ29va2llTWFu
YWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgdGVzdC0+c2V0QWNjZXB0UG9s
aWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwpAQCAtMzYwLDEyICs1ODMs
MTQgQEAgc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3Vw
TWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhcioKICAgICB9CiAKICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgZ2NoYXIqIGhlYWRlcl9z
dHIgPSBnX3N0cmR1cF9wcmludGYoIiVzPSVzOyBNYXgtQWdlPTYwIiwga0Nvb2tpZU5hbWUsIGtD
b29raWVWYWx1ZSk7CisKICAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbmRleC5odG1sIikp
IHsKICAgICAgICAgY2hhciogaW5kZXhIdG1sID0gZ19zdHJkdXBfcHJpbnRmKGtJbmRleEh0bWxG
b3JtYXQsIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOwotICAgICAgICBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQtQ29va2ll
IiwgImZvbz1iYXI7IE1heC1BZ2U9NjAiKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNf
cmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsIGhlYWRlcl9z
dHIpOwogICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfVEFLRSwgaW5kZXhIdG1sLCBzdHJsZW4oaW5kZXhIdG1sKSk7CiAg
ICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ltYWdlLnBuZyIpKQotICAgICAgICBz
b3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJT
ZXQtQ29va2llIiwgImJhej1xdXg7IE1heC1BZ2U9NjAiKTsKKyAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIs
IGhlYWRlcl9zdHIpOwogICAgIGVsc2UKICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKICAgICBzb3VwX21lc3NhZ2VfYm9keV9j
b21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKQEAgLTM3Nyw2ICs2MDIsOSBAQCB2b2lk
IGJlZm9yZUFsbCgpCiAgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKIAogICAgIENv
b2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiYWNjZXB0LXBvbGlj
eSIsIHRlc3RDb29raWVNYW5hZ2VyQWNjZXB0UG9saWN5KTsKKyAgICBDb29raWVNYW5hZ2VyVGVz
dDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImFkZC1jb29raWUiLCB0ZXN0Q29va2llTWFu
YWdlckFkZENvb2tpZSk7CisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2ll
TWFuYWdlciIsICJnZXQtY29va2llcyIsIHRlc3RDb29raWVNYW5hZ2VyR2V0Q29va2llcyk7Cisg
ICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJkZWxldGUt
Y29va2llIiwgdGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWUpOwogICAgIENvb2tpZU1hbmFn
ZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiZGVsZXRlLWNvb2tpZXMiLCB0ZXN0
Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZXMpOwogICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQo
IldlYktpdENvb2tpZU1hbmFnZXIiLCAiY29va2llcy1jaGFuZ2VkIiwgdGVzdENvb2tpZU1hbmFn
ZXJDb29raWVzQ2hhbmdlZCk7CiAgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29v
a2llTWFuYWdlciIsICJwZXJzaXN0ZW50LXN0b3JhZ2UiLCB0ZXN0Q29va2llTWFuYWdlclBlcnNp
c3RlbnRTdG9yYWdlKTsKLS0gCjIuMTMuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325357</attachid>
            <date>2017-10-30 09:57:40 -0700</date>
            <delta_ts>2017-10-30 10:36:30 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-GTK-New-API-to-add-retrieve-and-delete-cookies-via-W.patch</filename>
            <type>text/plain</type>
            <size>54913</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA5MjU5MDcyN2VlNjQyNTY0ODM4MTYyZGQ4YWFkYmUwNGUxNzdlZWFmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpb0B3ZWJraXQub3Jn
PgpEYXRlOiBNb24sIDIzIE9jdCAyMDE3IDEzOjEzOjU3ICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
W0dUS10gTmV3IEFQSSB0byBhZGQsIHJldHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEKIFdl
YktpdENvb2tpZU1hbmFnZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzkzMgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpTb3VyY2UvV2ViQ29yZToKCklt
cGxlbWVudGVkIHNldENvb2tpZSgpLCBnZXRDb29raWVzKCkgYW5kIGRlbGV0ZUNvb2tpZSgpIGlu
IHRoZSBTb3VwCmJhY2tlbmQsIGFuZCByZWZhY3RvcmVkIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMg
YW5kIGNvbnZlcnNpb25zIG91dCBvZgpOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwIGludG8gYSBu
ZXcgQ29va2llU291cC5jcHAgZmlsZSwgc28KdGhhdCB3ZSBub3cgY2FuIGNvbnZlcnQgYmV0d2Vl
biBTb3VwQ29va2llKiBhbmQgV2ViQ29yZTo6Q29va2llCmVhc2lseSBmcm9tIGFueXdoZXJlICh0
aGlzIGlzIG5vdyBuZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2VzcykuCgoqIFBsYXRmb3JtR1RLLmNt
YWtlOiBBZGQgQ29va2llU291cC5jcHAuCiogUGxhdGZvcm1XUEUuY21ha2U6IEFkZCBDb29raWVT
b3VwLmNwcC4KKiBwbGF0Zm9ybS9Db29raWUuaDogQWRkIGRlY2xhcmF0aW9ucyBmb3IgdGhlIG5l
dyBpbXBsaWNpdCBjb252ZXJzaW9ucy4KKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU291
cC5jcHA6IEFkZGVkLgooV2ViQ29yZTo6Q29va2llOjpDb29raWUpOiBOZXcgY29uc3RydWN0b3Is
IGNyZWF0ZXMgYSBXZWJDb3JlOjpDb29raWUgb3V0IG9mIGEgU291cENvb2tpZSouCihXZWJDb3Jl
Ojptc1RvU291cERhdGUpOiBNb3ZlZCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3Bw
LgooV2ViQ29yZTo6Q29va2llOjpvcGVyYXRvciBTb3VwQ29va2llICogY29uc3QpOiBOZXcgb3Zl
cnJpZGUsIGJhc2VkIG9uIHRvU291cENvb2tpZSgpLgoqIHBsYXRmb3JtL25ldHdvcmsvc291cC9O
ZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcDoKKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6c2V0Q29va2llcyk6IFVzZWQgdGhlIG5ldyBpbXBsaWNpdCBjb252ZXJzaW9uLgooV2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWUpOiBOZXdseSBpbXBsZW1lbnRl
ZC4KKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKTogTmV3bHkg
aW1wbGVtZW50ZWQuCihXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldENvb2tpZXMp
OiBOZXdseSBpbXBsZW1lbnRlZC4KClNvdXJjZS9XZWJLaXQ6CgpBZGRlZCBuZXcgQVBJIHRvIFdl
YktpdENvb2tpZU1hbmFnZXIgdG8gYWRkLCByZXRyaWV2ZSBhbmQgZGVsZXRlIGNvbXBsZXRlCmNv
b2tpZXMgaW50by9vdXQtb2YgYSBydW5uaW5nIHNlc3Npb24sIGFuZCB1cGRhdGVkIGRvY3VtZW50
YXRpb24gc2VjdGlvbnMuCgoqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2Vy
LmNwcDoKKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKTogTmV3IGZ1bmN0aW9uLgoo
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKTogRGl0dG8uCih3ZWJraXRf
Y29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMpOiBEaXR0by4KKHdlYmtpdF9jb29raWVfbWFuYWdl
cl9nZXRfY29va2llc19maW5pc2gpOiBEaXR0by4KKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llKTogRGl0dG8uCih3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9m
aW5pc2gpOiBEaXR0by4KKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmg6
IEFkZGVkIG5ldyBmdW5jdGlvbnMuCiogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFu
YWdlci5oOiBEaXR0by4KKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNl
Y3Rpb25zLnR4dDogRGl0dG8uCgpUb29sczoKCkFkZGVkIG5ldyB0ZXN0IGNhc2VzIHRvIGNvdmVy
IHRoZSBuZXdseSBhZGRlZCBBUEkgZm9yIFdlYktpdENvb2tpZU1hbmFnZXI6CndlYmtpdF9jb29r
aWVfbWFuYWdlcl9hZGRfY29va2llLCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMg
YW5kCndlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llLgoKKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwOgoodGVzdENvb2tpZU1hbmFn
ZXJBZGRDb29raWUpOiBBZGRlZC4KKHRlc3RDb29raWVNYW5hZ2VyR2V0Q29va2llcyk6IEFkZGVk
LgoodGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWUpOiBBZGRlZC4KKHNlcnZlckNhbGxiYWNr
KTogU21hbGwgdXBkYXRlIHRvIGF2b2lkIGhhcmRjb2Rpbmcgc3RyaW5ncyB3ZSByZXVzZS4KKGJl
Zm9yZUFsbCk6IEFkZGVkIHRoZSBuZXcgdGVzdCBjYXNlcyB0byB0aGUgdGVzdCBzdWl0ZS4KLS0t
CiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAy
NiArKwogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgICAgICAgICAgICAgICAgICAg
fCAgIDEgKwogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UgICAgICAgICAgICAgICAg
ICAgfCAgIDEgKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llLmggICAgICAgICAgICAg
ICAgICAgfCAgIDMgKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNv
dXAuY3BwICAgfCAgNzcgKysrKysrCiAuLi4vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vz
c2lvblNvdXAuY3BwICAgICB8ICA2OSArKy0tLQogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjEgKysKIC4uLi9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0Q29va2llTWFuYWdlci5jcHAgICAgIHwgMTkwICsrKysrKysrKysrKysKIC4uLi9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oIHwgIDQwICsrKwogLi4u
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQgICAgICAgfCAgIDYgKwog
Li4uL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmggfCAgNDAg
KysrCiBUb29scy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAxOCArKwogLi4uL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwICAgICAg
ICAgfCAzMDQgKysrKysrKysrKysrKysrKysrKystCiAxMyBmaWxlcyBjaGFuZ2VkLCA3NjEgaW5z
ZXJ0aW9ucygrKSwgMzUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDA5ZDRlODhlMzk3Li5lNWM4MzZmZjZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisy
MDE3LTEwLTIzICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW9AZW5kbGVzc20uY29tPgorCisg
ICAgICAgIFtHVEtdIE5ldyBBUEkgdG8gYWRkLCByZXRyaWV2ZSBhbmQgZGVsZXRlIGNvb2tpZXMg
dmlhIFdlYktpdENvb2tpZU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NzkzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIHNldENvb2tpZSgpLCBnZXRDb29raWVzKCkgYW5k
IGRlbGV0ZUNvb2tpZSgpIGluIHRoZSBTb3VwCisgICAgICAgIGJhY2tlbmQsIGFuZCByZWZhY3Rv
cmVkIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIGNvbnZlcnNpb25zIG91dCBvZgorICAgICAg
ICBOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwIGludG8gYSBuZXcgQ29va2llU291cC5jcHAgZmls
ZSwgc28KKyAgICAgICAgdGhhdCB3ZSBub3cgY2FuIGNvbnZlcnQgYmV0d2VlbiBTb3VwQ29va2ll
KiBhbmQgV2ViQ29yZTo6Q29va2llCisgICAgICAgIGVhc2lseSBmcm9tIGFueXdoZXJlICh0aGlz
IGlzIG5vdyBuZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2VzcykuCisKKyAgICAgICAgKiBQbGF0Zm9y
bUdUSy5jbWFrZTogQWRkIENvb2tpZVNvdXAuY3BwLgorICAgICAgICAqIFBsYXRmb3JtV1BFLmNt
YWtlOiBBZGQgQ29va2llU291cC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vQ29va2llLmg6IEFk
ZCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBuZXcgaW1wbGljaXQgY29udmVyc2lvbnMuCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZTo6Q29va2llKTogTmV3IGNvbnN0cnVjdG9yLCBjcmVhdGVzIGEgV2Vi
Q29yZTo6Q29va2llIG91dCBvZiBhIFNvdXBDb29raWUqLgorICAgICAgICAoV2ViQ29yZTo6bXNU
b1NvdXBEYXRlKTogTW92ZWQgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZTo6b3BlcmF0b3IgU291cENvb2tpZSAqIGNvbnN0KTogTmV3
IG92ZXJyaWRlLCBiYXNlZCBvbiB0b1NvdXBDb29raWUoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMpOiBVc2VkIHRoZSBuZXcgaW1w
bGljaXQgY29udmVyc2lvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6c2V0Q29va2llKTogTmV3bHkgaW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSk6IE5ld2x5IGltcGxlbWVudGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRDb29raWVzKTogTmV3bHkg
aW1wbGVtZW50ZWQuCisKIDIwMTctMTAtMzAgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxl
LmNvbT4KIAogICAgICAgICBbV2ViIEFuaW1hdGlvbnNdIEV4cG9zZSB0aGUgcGxheWJhY2tSYXRl
IHByb3BlcnR5IG9uIEFuaW1hdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBiMDcz
OWMwMTY2Yy4uYjNmNzhmOTI3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0xMTQs
NiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0
d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291
cC9Db29raWVKYXJTb3VwLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3Vw
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTdG9yYWdlU291cC5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ3JlZGVudGlhbFN0b3JhZ2VTb3VwLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvc291cC9ETlNTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFrZQpp
bmRleCA2ZmU2M2NkODdlMi4uNzc0MTIwOGI3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV1BFLmNtYWtl
CkBAIC0xMDQsNiArMTA0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vbmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmNwcAogICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9D
b29raWVTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTdG9yYWdlU291
cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ3JlZGVudGlhbFN0b3JhZ2VTb3VwLmNw
cAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9ETlNTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
b29raWUuaAppbmRleCAwOTMzY2NhMDczYy4uZTAzYWZjZWJkMWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0Nvb2tpZS5oCkBAIC02Nyw2ICs2Nyw5IEBAIHN0cnVjdCBDb29raWUgewogI2lmZGVmIF9fT0JK
Q19fCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29va2llKE5TSFRUUENvb2tpZSAqKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBvcGVyYXRvciBOU0hUVFBDb29raWUgKigpIGNvbnN0OworI2VsaWYgVVNFKFNP
VVApCisgICAgQ29va2llKFNvdXBDb29raWUgKik7CisgICAgb3BlcmF0b3IgU291cENvb2tpZSAq
KCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3VwLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3VwLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWIwMGFkMGJiY2EKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU291cC5j
cHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5M
LgorICogQ29weXJpZ2h0IChDKSAyMDE3IEVuZGxlc3MgTW9iaWxlLCBJbmMuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDb29raWUuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0Nvb2tpZTo6Q29va2llKFNvdXBDb29raWUgKmNvb2tpZSkKK3sKKyAg
ICBuYW1lID0gU3RyaW5nOjpmcm9tVVRGOChjb29raWUtPm5hbWUpOworICAgIHZhbHVlID0gU3Ry
aW5nOjpmcm9tVVRGOChjb29raWUtPnZhbHVlKTsKKyAgICBkb21haW4gPSBTdHJpbmc6OmZyb21V
VEY4KGNvb2tpZS0+ZG9tYWluKTsKKyAgICBwYXRoID0gU3RyaW5nOjpmcm9tVVRGOChjb29raWUt
PnBhdGgpOworICAgIGV4cGlyZXMgPSBjb29raWUtPmV4cGlyZXMgPyBzdGF0aWNfY2FzdDxkb3Vi
bGU+KHNvdXBfZGF0ZV90b190aW1lX3QoY29va2llLT5leHBpcmVzKSkgKiAxMDAwIDogMDsKKyAg
ICBodHRwT25seSA9IGNvb2tpZS0+aHR0cF9vbmx5OworICAgIHNlY3VyZSA9IGNvb2tpZS0+c2Vj
dXJlOworICAgIHNlc3Npb24gPSAhY29va2llLT5leHBpcmVzOworfQorCitzdGF0aWMgU291cERh
dGUqIG1zVG9Tb3VwRGF0ZShkb3VibGUgbXMpCit7CisgICAgaW50IHllYXIgPSBtc1RvWWVhciht
cyk7CisgICAgaW50IGRheU9mWWVhciA9IGRheUluWWVhcihtcywgeWVhcik7CisgICAgYm9vbCBs
ZWFwWWVhciA9IGlzTGVhcFllYXIoeWVhcik7CisKKyAgICAvLyBtb250aEZyb21EYXlJblllYXIo
KSByZXR1cm5zIGEgdmFsdWUgaW4gdGhlIFswLDExXSByYW5nZSwgd2hpbGUgc291cF9kYXRlX25l
dygpIGV4cGVjdHMKKyAgICAvLyBhIHZhbHVlIGluIHRoZSBbMSwxMl0gcmFuZ2UsIG1lYW5pbmcg
d2UgaGF2ZSB0byBtYW51YWxseSBhZGp1c3QgdGhlIG1vbnRoIHZhbHVlLgorICAgIHJldHVybiBz
b3VwX2RhdGVfbmV3KHllYXIsIG1vbnRoRnJvbURheUluWWVhcihkYXlPZlllYXIsIGxlYXBZZWFy
KSArIDEsIGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKGRheU9mWWVhciwgbGVhcFllYXIpLCBtc1Rv
SG91cnMobXMpLCBtc1RvTWludXRlcyhtcyksIHN0YXRpY19jYXN0PGludD4obXMgLyAxMDAwKSAl
IDYwKTsKK30KKworQ29va2llOjpvcGVyYXRvciBTb3VwQ29va2llICooKSBjb25zdAoreworICAg
IGlmIChuYW1lLmlzTnVsbCgpIHx8IHZhbHVlLmlzTnVsbCgpIHx8IGRvbWFpbi5pc051bGwoKSB8
fCBwYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFNvdXBDb29r
aWUqIHNvdXBDb29raWUgPSBzb3VwX2Nvb2tpZV9uZXcobmFtZS51dGY4KCkuZGF0YSgpLCB2YWx1
ZS51dGY4KCkuZGF0YSgpLAorICAgICAgICBkb21haW4udXRmOCgpLmRhdGEoKSwgcGF0aC51dGY4
KCkuZGF0YSgpLCAtMSk7CisKKyAgICBzb3VwX2Nvb2tpZV9zZXRfaHR0cF9vbmx5KHNvdXBDb29r
aWUsIGh0dHBPbmx5KTsKKyAgICBzb3VwX2Nvb2tpZV9zZXRfc2VjdXJlKHNvdXBDb29raWUsIHNl
Y3VyZSk7CisKKyAgICBpZiAoIXNlc3Npb24pIHsKKyAgICAgICAgU291cERhdGUqIGRhdGUgPSBt
c1RvU291cERhdGUoZXhwaXJlcyk7CisgICAgICAgIHNvdXBfY29va2llX3NldF9leHBpcmVzKHNv
dXBDb29raWUsIGRhdGUpOworICAgICAgICBzb3VwX2RhdGVfZnJlZShkYXRlKTsKKyAgICB9CisK
KyAgICByZXR1cm4gc291cENvb2tpZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9y
YWdlU2Vzc2lvblNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCmluZGV4IGNiODY4Y2MwN2I2Li4wZjkyNDM3
YmUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05l
dHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcApAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb3VwTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0dVbmlxdWVQdHJTb3VwLmg+CiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
QEAgLTI4OSw0NSArMjkxLDM5IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzYXZlQ3Jl
ZGVudGlhbFRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwCiAjZW5kaWYKIH0K
IAotc3RhdGljIFNvdXBEYXRlKiBtc1RvU291cERhdGUoZG91YmxlIG1zKQotewotICAgIGludCB5
ZWFyID0gbXNUb1llYXIobXMpOwotICAgIGludCBkYXlPZlllYXIgPSBkYXlJblllYXIobXMsIHll
YXIpOwotICAgIGJvb2wgbGVhcFllYXIgPSBpc0xlYXBZZWFyKHllYXIpOwotCi0gICAgLy8gbW9u
dGhGcm9tRGF5SW5ZZWFyKCkgcmV0dXJucyBhIHZhbHVlIGluIHRoZSBbMCwxMV0gcmFuZ2UsIHdo
aWxlIHNvdXBfZGF0ZV9uZXcoKSBleHBlY3RzCi0gICAgLy8gYSB2YWx1ZSBpbiB0aGUgWzEsMTJd
IHJhbmdlLCBtZWFuaW5nIHdlIGhhdmUgdG8gbWFudWFsbHkgYWRqdXN0IHRoZSBtb250aCB2YWx1
ZS4KLSAgICByZXR1cm4gc291cF9kYXRlX25ldyh5ZWFyLCBtb250aEZyb21EYXlJblllYXIoZGF5
T2ZZZWFyLCBsZWFwWWVhcikgKyAxLCBkYXlJbk1vbnRoRnJvbURheUluWWVhcihkYXlPZlllYXIs
IGxlYXBZZWFyKSwgbXNUb0hvdXJzKG1zKSwgbXNUb01pbnV0ZXMobXMpLCBzdGF0aWNfY2FzdDxp
bnQ+KG1zIC8gMTAwMCkgJSA2MCk7Ci19Ci0KLXN0YXRpYyBTb3VwQ29va2llKiB0b1NvdXBDb29r
aWUoY29uc3QgQ29va2llJiBjb29raWUpCi17Ci0gICAgU291cENvb2tpZSogc291cENvb2tpZSA9
IHNvdXBfY29va2llX25ldyhjb29raWUubmFtZS51dGY4KCkuZGF0YSgpLCBjb29raWUudmFsdWUu
dXRmOCgpLmRhdGEoKSwKLSAgICAgICAgY29va2llLmRvbWFpbi51dGY4KCkuZGF0YSgpLCBjb29r
aWUucGF0aC51dGY4KCkuZGF0YSgpLCAtMSk7Ci0gICAgc291cF9jb29raWVfc2V0X2h0dHBfb25s
eShzb3VwQ29va2llLCBjb29raWUuaHR0cE9ubHkpOwotICAgIHNvdXBfY29va2llX3NldF9zZWN1
cmUoc291cENvb2tpZSwgY29va2llLnNlY3VyZSk7Ci0gICAgaWYgKCFjb29raWUuc2Vzc2lvbikg
ewotICAgICAgICBTb3VwRGF0ZSogZGF0ZSA9IG1zVG9Tb3VwRGF0ZShjb29raWUuZXhwaXJlcyk7
Ci0gICAgICAgIHNvdXBfY29va2llX3NldF9leHBpcmVzKHNvdXBDb29raWUsIGRhdGUpOwotICAg
ICAgICBzb3VwX2RhdGVfZnJlZShkYXRlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNvdXBDb29raWU7
Ci19Ci0KIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzKGNvbnN0IFZlY3Rv
cjxDb29raWU+JiBjb29raWVzLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmKQogewogICAgIGZvciAo
YXV0byBjb29raWUgOiBjb29raWVzKQotICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tp
ZShjb29raWVTdG9yYWdlKCksIHRvU291cENvb2tpZShjb29raWUpKTsKKyAgICAgICAgc291cF9j
b29raWVfamFyX2FkZF9jb29raWUoY29va2llU3RvcmFnZSgpLCBjb29raWUpOwogfQogCi12b2lk
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llKGNvbnN0IENvb2tpZSYpCit2b2lkIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llKGNvbnN0IENvb2tpZSYgY29va2llKQogewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCisgICAgc291cF9jb29raWVf
amFyX2FkZF9jb29raWUoY29va2llU3RvcmFnZSgpLCBjb29raWUpOwogfQogCi12b2lkIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IENvb2tpZSYpCit2b2lkIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IENvb2tpZSYgY29va2llKQogewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCisgICAgLy8gV2UgbmVlZCB0
byBzcGVjaWZ5IHRoZSBIVFRQIHNjaGVtZSB0byBjb25zdHJ1Y3QgYSB2YWxpZCBTb3VwVVJJLAor
ICAgIC8vIHNvIHRoYXQgd2UgY2FuIGxvb2sgdXAgZm9yIHRoZSBIVFRQIGNvb2tpZSBpbiB0aGUg
amFyLgorICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpKHNvdXBfdXJpX25ldyhudWxscHRyKSk7
CisgICAgc291cF91cmlfc2V0X3NjaGVtZSh1cmkuZ2V0KCksIFNPVVBfVVJJX1NDSEVNRV9IVFRQ
KTsKKyAgICBzb3VwX3VyaV9zZXRfaG9zdCh1cmkuZ2V0KCksIGNvb2tpZS5kb21haW4udXRmOCgp
LmRhdGEoKSk7CisgICAgc291cF91cmlfc2V0X3BhdGgodXJpLmdldCgpLCBjb29raWUucGF0aC51
dGY4KCkuZGF0YSgpKTsKKworICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4gdGFyZ2V0Q29va2ll
KGNvb2tpZSk7CisgICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXNMaXN0KHNvdXBfY29va2ll
X2phcl9nZXRfY29va2llX2xpc3QoY29va2llU3RvcmFnZSgpLCB1cmkuZ2V0KCksIFRSVUUpKTsK
KyAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXNMaXN0LmdldCgpOyBpdGVtOyBpdGVtID0g
Z19zbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4gc291
cENvb2tpZShzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSkpOworCisgICAgICAg
IC8vIFVzZSAobmFtZSwgZG9tYWluLCBwYXRoKSBhcyB0aGUgcHJpbWFyeSBrZXkgdG8gaWRlbnRp
ZnkgdGhlIGNvb2tpZS4KKyAgICAgICAgaWYgKGdfc3RyY21wMChzb3VwX2Nvb2tpZV9nZXRfbmFt
ZShzb3VwQ29va2llLmdldCgpKSwgc291cF9jb29raWVfZ2V0X25hbWUodGFyZ2V0Q29va2llLmdl
dCgpKSkKKyAgICAgICAgICAgIHx8IGdfc3RyY21wMChzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKHNv
dXBDb29raWUuZ2V0KCkpLCBzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKHRhcmdldENvb2tpZS5nZXQo
KSkpCisgICAgICAgICAgICB8fCBnX3N0cmNtcDAoc291cF9jb29raWVfZ2V0X3BhdGgoc291cENv
b2tpZS5nZXQoKSksIHNvdXBfY29va2llX2dldF9wYXRoKHRhcmdldENvb2tpZS5nZXQoKSkpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9j
b29raWUoY29va2llU3RvcmFnZSgpLCBzb3VwQ29va2llLmdldCgpKTsKKyAgICB9CiB9CiAKIFZl
Y3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0QWxsQ29va2llcygpCkBAIC0z
MzYsMTAgKzMzMiwxNyBAQCBWZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246Omdl
dEFsbENvb2tpZXMoKQogICAgIHJldHVybiB7IH07CiB9CiAKLVZlY3RvcjxDb29raWU+IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Z2V0Q29va2llcyhjb25zdCBVUkwmKQorVmVjdG9yPENvb2tpZT4g
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRDb29raWVzKGNvbnN0IFVSTCYgdXJsKQogewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCi0gICAgcmV0dXJuIHsgfTsKKyAg
ICBWZWN0b3I8Q29va2llPiBjb29raWVzOworICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0g
dXJsLmNyZWF0ZVNvdXBVUkkoKTsKKyAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llc0xpc3Qo
c291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChjb29raWVTdG9yYWdlKCksIHVyaS5nZXQo
KSwgVFJVRSkpOworICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llc0xpc3QuZ2V0KCk7IGl0
ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgR1VuaXF1ZVB0cjxTb3Vw
Q29va2llPiBzb3VwQ29va2llKHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKSk7
CisgICAgICAgIGNvb2tpZXMuYXBwZW5kKFdlYkNvcmU6OkNvb2tpZShzb3VwQ29va2llLmdldCgp
KSk7CisgICAgfQorCisgICAgcmV0dXJuIGNvb2tpZXM7CiB9CiAKIHZvaWQgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpmbHVzaENvb2tpZVN0b3JlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmE2NzE2NjE3MjUuLmE2
NDIxYTU2YjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE3LTEwLTIzICBNYXJpbyBT
YW5jaGV6IFByYWRhICA8bWFyaW9AZW5kbGVzc20uY29tPgorCisgICAgICAgIFtHVEtdIE5ldyBB
UEkgdG8gYWRkLCByZXRyaWV2ZSBhbmQgZGVsZXRlIGNvb2tpZXMgdmlhIFdlYktpdENvb2tpZU1h
bmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzkzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZGVkIG5ldyBBUEkgdG8gV2ViS2l0Q29va2llTWFuYWdlciB0byBhZGQsIHJldHJpZXZlIGFuZCBk
ZWxldGUgY29tcGxldGUKKyAgICAgICAgY29va2llcyBpbnRvL291dC1vZiBhIHJ1bm5pbmcgc2Vz
c2lvbiwgYW5kIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbiBzZWN0aW9ucy4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKHdlYmtp
dF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKTogTmV3IGZ1bmN0aW9uLgorICAgICAgICAod2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKTogRGl0dG8uCisgICAgICAgICh3
ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llc19maW5pc2gpOiBEaXR0by4KKyAgICAgICAgKHdl
YmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKTogRGl0dG8uCisgICAgICAgICh3ZWJr
aXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2gpOiBEaXR0by4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmg6IEFkZGVkIG5ldyBmdW5j
dGlvbnMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFuYWdlci5o
OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4w
LXNlY3Rpb25zLnR4dDogRGl0dG8uCisKIDIwMTctMTAtMzAgIE1pY2hhZWwgQ2F0YW56YXJvICA8
bWNhdGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXUEVdW0dUS10gRXhwb3NlIGF2YWls
YWJpbGl0eSBvZiBjZXJ0YWluIGVkaXRpbmcgY29tbWFuZHMgaW4gV2ViS2l0RWRpdG9yU3RhdGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tp
ZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29v
a2llTWFuYWdlci5jcHAKaW5kZXggZWVkMjcwMjY2NDcuLmEzOTdjOWQ4NTRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5h
Z2VyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI3LDYgKzI4LDcgQEAKICNpbmNsdWRlICJXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFSZWNvcmQuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxp
Yi5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KQEAgLTIzMyw2ICsyMzUsMTk0
IEBAIFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Fj
Y2VwdF9wb2xpY3lfZmluaXNoKFdlYktpdENvCiB9CiAKIC8qKgorICogd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2FkZF9jb29raWU6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktpdENvb2tpZU1h
bmFnZXIKKyAqIEBjb29raWU6IHRoZSAjU291cENvb2tpZSB0byBiZSBhZGRlZAorICogQGNhbmNl
bGxhYmxlOiAoYWxsb3ctbm9uZSk6IGEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTCB0byBpZ25vcmUK
KyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBj
YWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiAoY2xvc3Vy
ZSk6IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3luY2hy
b25vdXNseSBhZGQgYSAjU291cENvb2tpZSB0byB0aGUgdW5kZXJseWluZyBzdG9yYWdlLCB3aGlj
aCBpcyBub3QgcGVyc2lzdGVudAorICogdW5sZXNzIHlvdSBleHBsaWNpdGx5IGNhbGwgd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UoKS4KKyAqCisgKiBXaGVuIHRo
ZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4gWW91IGNh
biB0aGVuIGNhbGwKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaCgp
IHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3ZvaWQgd2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2ViS2l0Q29va2llTWFuYWdlciAqbWFuYWdlciwgU291
cENvb2tpZSAqY29va2llLCBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNh
bGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChjb29raWUpOworCisgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gY29va2llczsKKyAg
ICBjb29raWVzLmFwcGVuZChXZWJDb3JlOjpDb29raWUoY29va2llKSk7CisKKyAgICBHUmVmUHRy
PEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUs
IGNhbGxiYWNrLCB1c2VyRGF0YSkpOworCisgICAgYXV0byBzZXNzaW9uSUQgPSB3ZWJraXRXZWJz
aXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpLndl
YnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKTsKKyAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9v
bHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpOworCisgICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20v
dG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcworICAgIC8vIG9m
IHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0byB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJz
dCBwcm9jZXNzIHBvb2wuCisgICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llKHNlc3Npb25JRCwgY29va2llLCBbdGFzayA9IFdU
Rk1vdmUodGFzayldKENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgaWYgKGVy
cm9yICE9IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpIHsKKyAgICAgICAgICAgIC8vIFRoaXMg
Y2FuIG9ubHkgaGFwcGVuIGluIGNhc2VzIHdoZXJlIHRoZSB3ZWIgcHJvY2VzcyBpcyBub3QgYXZh
aWxhYmxlLAorICAgICAgICAgICAgLy8gY29uc2lkZXIgdGhlIG9wZXJhdGlvbiAiY2FuY2VsbGVk
IiBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBjbGllbnQuCisgICAgICAgICAgICBnX3Rh
c2tfcmV0dXJuX25ld19lcnJvcih0YXNrLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NB
TkNFTExFRCwgXygiT3BlcmF0aW9uIHdhcyBjYW5jZWxsZWQiKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQo
KSwgVFJVRSk7CisgICAgfSk7Cit9CisKKy8qKgorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2Fk
ZF9jb29raWVfZmluaXNoOgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29raWVNYW5h
Z2VyCisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0
aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNo
cm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9j
b29raWUoKS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY29va2llIHdhcyBhZGRlZCBv
ciAlRkFMU0UgaW4gY2FzZSBvZiBlcnJvci4KKyAqLworZ2Jvb2xlYW4gd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKFdlYktpdENvb2tpZU1hbmFnZXIgKm1hbmFnZXIsIEdB
c3luY1Jlc3VsdCAqcmVzdWx0LCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlciksIEZBTFNFKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgRkFM
U0UpOworCisgICAgcmV0dXJuIGdfdGFza19wcm9wYWdhdGVfYm9vbGVhbihHX1RBU0socmVzdWx0
KSwgZXJyb3IpOworfQorCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
czoKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0Q29va2llTWFuYWdlcgorICogQHVyaTog
dGhlICNTb3VwVVJJIGZvciB0aGUgZG9tYWluIG9mIHRoZSBjb29raWVzIHRvIGJlIHJldHJpZXZl
ZAorICogQGNhbmNlbGxhYmxlOiAoYWxsb3ctbm9uZSk6IGEgI0dDYW5jZWxsYWJsZSBvciAlTlVM
TCB0byBpZ25vcmUKKyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0FzeW5jUmVhZHlD
YWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9k
YXRhOiAoY2xvc3VyZSk6IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAq
CisgKiBBc3luY2hyb25vdXNseSBnZXQgYSBsaXN0IG9mICNTb3VwQ29va2llIGZyb20gQGNvb2tp
ZV9tYW5hZ2VyIGFzc29jaWF0ZWQgd2l0aCBAdXJpLCB3aGljaAorICogbXVzdCBiZSBlaXRoZXIg
YW5kIEhUVFAgb3IgYW4gSFRUUFMgVVJMLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBm
aW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICog
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVz
dWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3ZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9jb29raWVzKFdlYktpdENvb2tpZU1hbmFnZXIgKm1hbmFnZXIsIFNvdXBVUkkgKnVyaSwgR0Nh
bmNlbGxhYmxlICpjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3Bv
aW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lF
X01BTkFHRVIobWFuYWdlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoU09VUF9VUklfVkFMSURf
Rk9SX0hUVFAodXJpKSk7CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdf
dGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworCisg
ICAgYXV0byBzZXNzaW9uSUQgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpLndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQo
KTsKKyAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFn
ZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOworCisgICAgLy8g
Q29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNl
IG9uIGRpc2sgcmVnYXJkbGVzcworICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0byB0
aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCisgICAgcHJvY2Vz
c1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2ll
cyhzZXNzaW9uSUQsIFdlYkNvcmU6OlVSTCh1cmkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDYWxsYmFja0Jhc2U6OkVycm9y
IGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvciAhPSBDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25l
KSB7CisgICAgICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpbiBjYXNlcyB3aGVyZSB0
aGUgd2ViIHByb2Nlc3MgaXMgbm90IGF2YWlsYWJsZSwKKyAgICAgICAgICAgIC8vIGNvbnNpZGVy
IHRoZSBvcGVyYXRpb24gImNhbmNlbGxlZCIgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUg
Y2xpZW50LgorICAgICAgICAgICAgZ190YXNrX3JldHVybl9uZXdfZXJyb3IodGFzay5nZXQoKSwg
R19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQsIF8oIk9wZXJhdGlvbiB3YXMgY2FuY2Vs
bGVkIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgR0xpc3Qq
IGNvb2tpZXNfbGlzdCA9IG51bGxwdHI7CisgICAgICAgIGZvciAoYXV0byYgY29va2llIDogY29v
a2llcykKKyAgICAgICAgICAgIGNvb2tpZXNfbGlzdCA9IGdfbGlzdF9wcmVwZW5kKGNvb2tpZXNf
bGlzdCwgY29va2llKTsKKworICAgICAgICBnX3Rhc2tfcmV0dXJuX3BvaW50ZXIodGFzay5nZXQo
KSwgZ19saXN0X3JldmVyc2UoY29va2llc19saXN0KSwgW10oZ3BvaW50ZXIgZGF0YSkgeworICAg
ICAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChzdGF0aWNfY2FzdDxHTGlzdCo+KGRhdGEpLCByZWlu
dGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihzb3VwX2Nvb2tpZV9mcmVlKSk7CisgICAgICAg
IH0pOworICAgIH0pOworfQorCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29v
a2llc19maW5pc2g6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktpdENvb2tpZU1hbmFnZXIK
KyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVycm9yOiByZXR1cm4gbG9jYXRpb24g
Zm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAqIEZpbmlzaCBhbiBhc3luY2hyb25v
dXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tp
ZXMoKS4KKyAqCisgKiBSZXR1cm5zOiAoZWxlbWVudC10eXBlIFNvdXBDb29raWUpICh0cmFuc2Zl
ciBmdWxsKTogQSAjR1NMaXN0IG9mICNTb3VwQ29va2llIGluc3RhbmNlcworICogICAgb3IgJU5V
TEwgaW4gY2FzZSBvZiBlcnJvci4KKyAqLworR0xpc3QqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9n
ZXRfY29va2llc19maW5pc2goV2ViS2l0Q29va2llTWFuYWdlciAqbWFuYWdlciwgR0FzeW5jUmVz
dWx0ICpyZXN1bHQsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSwgbnVsbHB0cik7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3VsdCwgbWFuYWdlciksIG51bGxwdHIp
OworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpc3QqPihnX3Rhc2tfcHJvcGFnYXRl
X3BvaW50ZXIoR19UQVNLKHJlc3VsdCksIGVycm9yKSk7Cit9CisKKy8qKgorICogd2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWU6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktp
dENvb2tpZU1hbmFnZXIKKyAqIEBuYW1lOiB0aGUgbmFtZSB0aGUgY29va2llIHRvIGJlIGRlbGV0
ZWQKKyAqIEBkb21haW46IHRoZSBkb21haW4gb2YgdGhlIGNvb2tpZSB0byBiZSBkZWxldGVkCisg
KiBAcGF0aDogdGhlIHBhdGggb2YgdGhlIGNvb2tpZSB0byBiZSBkZWxldGVkCisgKiBAY2FuY2Vs
bGFibGU6IChhbGxvdy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQor
ICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNh
bGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJl
KTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJv
bm91c2x5IGRlbGV0ZSBhICNTb3VwQ29va2llIGZyb20gdGhlIGN1cnJlbnQgc2Vzc2lvbiwgYXMg
dW5pcXVlbGx5IGlkZW50aWZpZWQKKyAqIGJ5IGl0cyBuYW1lLCBkb21haW4gYW5kIHBhdGguCisg
KgorICogV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBj
YWxsZWQuIFlvdSBjYW4gdGhlbiBjYWxsCisgKiB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRl
X2Nvb2tpZV9maW5pc2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorICov
Cit2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKFdlYktpdENvb2tpZU1h
bmFnZXIgKm1hbmFnZXIsIGNvbnN0IGdjaGFyICpuYW1lLCBjb25zdCBnY2hhciAqZG9tYWluLCBj
b25zdCBnY2hhciAqcGF0aCwgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlD
YWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwobmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChkb21haW4pOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwocGF0aCk7CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdf
dGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworCisg
ICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHRoZSBuYW1lLCBkb21haW4gYW5kIHBhdGgsIHdoaWNo
IGlzIHdoYXQgd2lsbCBiZSB1c2VkCisgICAgLy8gdG8gaWRlbnRpZnkgdGhlIGNvb2tpZSBpbiBT
b3VwQ29va2llSmFyIGhlbGQgYnkgdGhlIG90aGVyIHByb2Nlc3MuIEhvd2V2ZXIsCisgICAgLy8g
d2Ugc3RpbGwgbmVlZCB0byBjcmVhdGUgdGhlIENvb2tpZSB3aXRoIGEgbm9uLWVtcHR5IHZhbHVl
IG5vdCB0byBnZXQgZGlzY2FyZGVkCisgICAgLy8gb24gaXRzIHdheSB0byB0aGUgb3RoZXIgcHJv
Y2Vzcywgc28gd2UganVzdCBwYXNzIHRoZSBuYW1lIGFnYWluIHRoZXJlLgorICAgIFdlYkNvcmU6
OkNvb2tpZSB0YXJnZXRDb29raWUoU3RyaW5nOjpmcm9tVVRGOChuYW1lKSwgU3RyaW5nOjpmcm9t
VVRGOChuYW1lKSwgU3RyaW5nOjpmcm9tVVRGOChkb21haW4pLCBTdHJpbmc6OmZyb21VVEY4KHBh
dGgpLCAtMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgU3RyaW5nKCksIFdlYkNvcmU6OlVSTCgpLCBW
ZWN0b3I8dWludDE2X3Q+IHsgfSk7CisKKyAgICBhdXRvIHNlc3Npb25JRCA9IHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikud2Vi
c2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpOworICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29s
cyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2
LT5kYXRhTWFuYWdlcik7CisKKyAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90
byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCisgICAgLy8gb2Yg
dGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRvIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0
IHByb2Nlc3MgcG9vbC4KKyAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUoc2Vzc2lvbklELCB0YXJnZXRDb29raWUsIFt0
YXNrID0gV1RGTW92ZSh0YXNrKV0oQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAg
ICBpZiAoZXJyb3IgIT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgeworICAgICAgICAgICAg
Ly8gVGhpcyBjYW4gb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlcmUgdGhlIHdlYiBwcm9jZXNzIGlz
IG5vdCBhdmFpbGFibGUsCisgICAgICAgICAgICAvLyBjb25zaWRlciB0aGUgb3BlcmF0aW9uICJj
YW5jZWxsZWQiIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhlIGNsaWVudC4KKyAgICAgICAg
ICAgIGdfdGFza19yZXR1cm5fbmV3X2Vycm9yKHRhc2suZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9f
RVJST1JfQ0FOQ0VMTEVELCBfKCJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0
YXNrLmdldCgpLCBUUlVFKTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3ZWJraXRfY29va2llX21h
bmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2g6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktp
dENvb2tpZU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVycm9yOiBy
ZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAqIEZpbmlz
aCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfY29va2llX21h
bmFnZXJfZGVsZXRlX2Nvb2tpZSgpLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjb29r
aWUgd2FzIGFkZGVkIG9yICVGQUxTRSBpbiBjYXNlIG9mIGVycm9yLgorICovCitnYm9vbGVhbiB3
ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2goV2ViS2l0Q29va2llTWFu
YWdlciAqbWFuYWdlciwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIEdFcnJvciAqKmVycm9yKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2Vy
KSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19pc192YWxpZChyZXN1
bHQsIG1hbmFnZXIpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gZ190YXNrX3Byb3BhZ2F0ZV9ib29s
ZWFuKEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7Cit9CisKKy8qKgogICogd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llczoKICAqIEBjb29raWVfbWFuYWdlcjogYSAj
V2ViS2l0Q29va2llTWFuYWdlcgogICogQGNhbmNlbGxhYmxlOiAoYWxsb3ctbm9uZSk6IGEgI0dD
YW5jZWxsYWJsZSBvciAlTlVMTCB0byBpZ25vcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmgKaW5kZXggZWUxN2QyMjA0NDku
LjBlNGYwMTExNDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdENvb2tpZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1v
YmlsZSwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgPGdpby9naW8uaD4KICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgogCiBHX0JFR0lO
X0RFQ0xTCkBAIC0xMDcsNiArMTA5LDQ0IEBAIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNj
ZXB0X3BvbGljeV9maW5pc2ggICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0
ICAgICAgICAgICAgICAgICAqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAqKmVy
cm9yKTsKIAorV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tp
ZSAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29v
a2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU291cENvb2tpZSAgICAgICAgICAgICAgICAgICAqY29va2llLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxs
YWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAg
ICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7
CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2ll
X2ZpbmlzaCAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29r
aWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAg
ICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9j
b29raWVfbWFuYWdlcl9nZXRfY29va2llcyAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29r
aWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VwVVJJICAgICAgICAgICAgICAg
ICAgICAgICp1cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Fz
eW5jUmVhZHlDYWxsYmFjayAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAg
ICAgICAgICAgdXNlcl9kYXRhKTsKKworV0VCS0lUX0FQSSBHTGlzdCoKK3dlYmtpdF9jb29raWVf
bWFuYWdlcl9nZXRfY29va2llc19maW5pc2ggICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5h
Z2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAg
ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llICAgICAgICAgICAg
ICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnY2hhciAgICAgICAgICAgICAgICAgICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAg
ICAgKmRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICpwYXRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJs
ZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAg
ICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisK
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2ll
X2ZpbmlzaCAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVf
bWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAg
ICAgICAgICAgICAgICAgICoqZXJyb3IpOworCiBXRUJLSVRfREVQUkVDQVRFRF9GT1Iod2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoKSB2b2lkCiB3ZWJraXRfY29va2llX21hbmFnZXJf
Z2V0X2RvbWFpbnNfd2l0aF9jb29raWVzICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAg
ICAgICAqY29va2llX21hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2Vs
bGFibGUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dAppbmRleCAzNmY0ZmYzZDI3NS4u
MDFhNGViMzUzMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dApAQCAtMTAwNCw2
ICsxMDA0LDEyIEBAIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeQogd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5X2ZpbmlzaAogd2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llcwogd2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2dldF9kb21haW5zX3dpdGhfY29va2llc19maW5pc2gKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9h
ZGRfY29va2llCit3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZV9maW5pc2gKK3dlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcword2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9j
b29raWVzX2ZpbmlzaAord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUKK3dlYmtp
dF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaAogd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2RlbGV0ZV9jb29raWVzX2Zvcl9kb21haW4KIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfYWxsX2Nvb2tpZXMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1dlYktpdENvb2tpZU1hbmFnZXIuaAppbmRleCA1OTU2M2FkZDg4OC4uZGJlYTc4NDgyYWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2ll
TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29v
a2llTWFuYWdlci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEVuZGxlc3MgTW9iaWxlLCBJbmMuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNiArMjcsNyBAQAogCiAjaW5jbHVkZSA8Z2lvL2dpby5o
PgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAj
aW5jbHVkZSA8d3BlL1dlYktpdERlZmluZXMuaD4KIAogR19CRUdJTl9ERUNMUwpAQCAtMTA3LDYg
KzEwOSw0NCBAQCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3lfZmluaXNo
ICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAgICAg
KnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CiAKK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUgICAgICAgICAgICAgICAg
ICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXBD
b29raWUgICAgICAgICAgICAgICAgICAgKmNvb2tpZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAg
ICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgICAgICBjYWxsYmFjaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cG9pbnRlciAgICAgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZV9maW5pc2ggICAgICAgICAg
ICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5j
UmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAg
ICAqKmVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0
X2Nvb2tpZXMgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAg
ICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU291cFVSSSAgICAgICAgICAgICAgICAgICAgICAqdXJpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5j
ZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sg
ICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0
YSk7CisKK1dFQktJVF9BUEkgR0xpc3QqCit3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tp
ZXNfZmluaXNoICAgICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29v
a2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAg
ICAgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
Y29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSAgICAgICAgICAgICAgICAgICAoV2ViS2l0Q29v
a2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAg
ICAgICAgICAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICpkb21haW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2NoYXIgICAgICAgICAgICAgICAgICAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAgICAg
ICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgICAgICBjYWxsYmFjaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9p
bnRlciAgICAgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIGdib29s
ZWFuCit3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2ggICAgICAgICAg
ICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVz
dWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAq
KmVycm9yKTsKKwogV0VCS0lUX0RFUFJFQ0FURURfRk9SKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9mZXRjaCkgdm9pZAogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhf
Y29va2llcyAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5h
Z2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLApkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDFkZjg3ODY4YmYyLi4w
NTkxMzM3M2E3YyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTEwLTIzICBNYXJpbyBTYW5jaGV6IFByYWRhICA8
bWFyaW9AZW5kbGVzc20uY29tPgorCisgICAgICAgIFtHVEtdIE5ldyBBUEkgdG8gYWRkLCByZXRy
aWV2ZSBhbmQgZGVsZXRlIGNvb2tpZXMgdmlhIFdlYktpdENvb2tpZU1hbmFnZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzkzMgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5ldyB0ZXN0IGNh
c2VzIHRvIGNvdmVyIHRoZSBuZXdseSBhZGRlZCBBUEkgZm9yIFdlYktpdENvb2tpZU1hbmFnZXI6
CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llLCB3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X2Nvb2tpZXMgYW5kCisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9k
ZWxldGVfY29va2llLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGli
L1Rlc3RDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyQWRkQ29v
a2llKTogQWRkZWQuCisgICAgICAgICh0ZXN0Q29va2llTWFuYWdlckdldENvb2tpZXMpOiBBZGRl
ZC4KKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llKTogQWRkZWQuCisgICAg
ICAgIChzZXJ2ZXJDYWxsYmFjayk6IFNtYWxsIHVwZGF0ZSB0byBhdm9pZCBoYXJkY29kaW5nIHN0
cmluZ3Mgd2UgcmV1c2UuCisgICAgICAgIChiZWZvcmVBbGwpOiBBZGRlZCB0aGUgbmV3IHRlc3Qg
Y2FzZXMgdG8gdGhlIHRlc3Qgc3VpdGUuCisKIDIwMTctMTAtMTIgIEZyZWRlcmljIFdhbmcgIDxm
d2FuZ0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBydW5uaW5nIHNh
ZmFyaSBvbiB0aGUgaU9TIHNpbXVsYXRvciB3aXRoIFhjb2RlIDwgOS4wCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVNYW5hZ2Vy
LmNwcAppbmRleCAxYmU4Y2MwZDA2MC4uMDZkZGQzNGQ3MzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0Q29va2llTWFuYWdlci5jcHAKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVNYW5hZ2VyLmNw
cApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMSwxMiArMjIsMjEgQEAKIAogI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIu
aCIKICNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR1VuaXF1ZVB0
clNvdXAuaD4KICNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgogCiBzdGF0aWMgV2ViS2l0VGVzdFNl
cnZlcioga1NlcnZlcjsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGtGaXJzdFBhcnR5RG9tYWluID0g
IjEyNy4wLjAuMSI7CiBzdGF0aWMgY29uc3QgY2hhcioga1RoaXJkUGFydHlEb21haW4gPSAibG9j
YWxob3N0IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtDb29raWVOYW1lID0gImZvbyI7CitzdGF0
aWMgY29uc3QgY2hhcioga0Nvb2tpZVZhbHVlID0gImJhciI7CitzdGF0aWMgY29uc3QgY2hhciog
a0Nvb2tpZVBhdGggPSAiLyI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBrQ29va2llUGF0aE5ldyA9
ICIvbmV3IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrQ29va2llVmFsdWVOZXcgPSAibmV3LXZhbHVl
IjsKKwogc3RhdGljIGNvbnN0IGNoYXIqIGtJbmRleEh0bWxGb3JtYXQgPQogICAgICI8aHRtbD48
Ym9keT4iCiAgICAgIiA8cD5XZWJLaXRHVEsrIENvb2tpZSBNYW5hZ2VyIHRlc3Q8L3A+IgpAQCAt
NDksNyArNTksMTAgQEAgcHVibGljOgogICAgICAgICAsIG1fY29va2llTWFuYWdlcih3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4
dChtX3dlYlZpZXcpKSkKICAgICAgICAgLCBtX2FjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BP
TElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpCiAgICAgICAgICwgbV9kb21haW5zKDApCisgICAg
ICAgICwgbV9jb29raWVzKDApCisgICAgICAgICwgbV9jb29raWVBZGRlZChmYWxzZSkKICAgICAg
ICAgLCBtX2Nvb2tpZXNDaGFuZ2VkKGZhbHNlKQorICAgICAgICAsIG1fY29va2llRGVsZXRlZChm
YWxzZSkKICAgICAgICAgLCBtX2ZpbmlzaExvb3BXaGVuQ29va2llc0NoYW5nZShmYWxzZSkKICAg
ICB7CiAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfY29v
a2llX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSkpID09IG1fY29va2llTWFuYWdl
cik7CkBAIC0xMDYsNiArMTE5LDY3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYWNjZXB0
UG9saWN5OwogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGFkZENvb2tpZVJlYWR5Q2FsbGJhY2so
R09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEp
CisgICAgeworICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGJv
b2wgYWRkZWQgPSB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZV9maW5pc2goV0VCS0lU
X0NPT0tJRV9NQU5BR0VSKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAg
ICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKworICAgICAgICBDb29raWVNYW5hZ2VyVGVzdCog
dGVzdCA9IHN0YXRpY19jYXN0PENvb2tpZU1hbmFnZXJUZXN0Kj4odXNlckRhdGEpOworICAgICAg
ICB0ZXN0LT5tX2Nvb2tpZUFkZGVkID0gYWRkZWQ7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
dGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgYm9vbCBhZGRDb29raWUoU291cENvb2tp
ZSogY29va2llKQorICAgIHsKKyAgICAgICAgbV9jb29raWVBZGRlZCA9IGZhbHNlOworICAgICAg
ICB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShtX2Nvb2tpZU1hbmFnZXIsIGNvb2tp
ZSwgMCwgYWRkQ29va2llUmVhZHlDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKKworICAgICAgICByZXR1cm4gbV9jb29raWVBZGRlZDsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCBnZXRDb29raWVzUmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmpl
Y3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7CisgICAg
ICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgR0xpc3QqIGNvb2tpZXMg
PSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNoKFdFQktJVF9DT09LSUVf
TUFOQUdFUihvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KCFlcnJvci5nZXQoKSk7CisKKyAgICAgICAgQ29va2llTWFuYWdlclRlc3QqIHRlc3QgPSBz
dGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+
bV9jb29raWVzID0gY29va2llczsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21h
aW5Mb29wKTsKKyAgICB9CisKKyAgICBHTGlzdCogZ2V0Q29va2llcyhTb3VwVVJJKiB1cmkpCisg
ICAgeworICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fY29va2llcywgcmVpbnRlcnByZXRfY2Fz
dDxHRGVzdHJveU5vdGlmeT4oc291cF9jb29raWVfZnJlZSkpOworICAgICAgICBtX2Nvb2tpZXMg
PSAwOworICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMobV9jb29raWVN
YW5hZ2VyLCB1cmksIDAsIGdldENvb2tpZXNSZWFkeUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAg
Z19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgICAgIHJldHVybiBtX2Nvb2tpZXM7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVsZXRlQ29va2llUmVhZHlDYWxsYmFjayhHT2Jq
ZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAg
ICB7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgYm9vbCBh
ZGRlZCA9IHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaChXRUJLSVRf
Q09PS0lFX01BTkFHRVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAg
ICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworCisgICAgICAgIENvb2tpZU1hbmFnZXJUZXN0KiB0
ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2llTWFuYWdlclRlc3QqPih1c2VyRGF0YSk7CisgICAgICAg
IHRlc3QtPm1fY29va2llQWRkZWQgPSBhZGRlZDsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0
ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBib29sIGRlbGV0ZUNvb2tpZShjb25zdCBj
aGFyKiBuYW1lLCBjb25zdCBjaGFyKiBkb21haW4sIGNvbnN0IGNoYXIqIHBhdGgpCisgICAgewor
ICAgICAgICBtX2Nvb2tpZURlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2RlbGV0ZV9jb29raWUobV9jb29raWVNYW5hZ2VyLCBuYW1lLCBkb21haW4sIHBhdGgs
IDAsIGRlbGV0ZUNvb2tpZVJlYWR5Q2FsbGJhY2ssIHRoaXMpOworICAgICAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7CisKKyAgICAgICAgcmV0dXJuIG1fY29va2llRGVsZXRlZDsKKyAg
ICB9CisKICAgICB2b2lkIHNldEFjY2VwdFBvbGljeShXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kg
cG9saWN5KQogICAgIHsKICAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRf
cG9saWN5KG1fY29va2llTWFuYWdlciwgcG9saWN5KTsKQEAgLTE3Myw3ICsyNDcsMTAgQEAgcHVi
bGljOgogICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1fY29va2llTWFuYWdlcjsKICAgICBXZWJL
aXRDb29raWVBY2NlcHRQb2xpY3kgbV9hY2NlcHRQb2xpY3k7CiAgICAgY2hhcioqIG1fZG9tYWlu
czsKKyAgICBHTGlzdCogbV9jb29raWVzOworICAgIGJvb2wgbV9jb29raWVBZGRlZDsKICAgICBi
b29sIG1fY29va2llc0NoYW5nZWQ7CisgICAgYm9vbCBtX2Nvb2tpZURlbGV0ZWQ7CiAgICAgYm9v
bCBtX2ZpbmlzaExvb3BXaGVuQ29va2llc0NoYW5nZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IG1f
Y29va2llc1RleHRGaWxlOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gbV9jb29raWVzU1FMaXRlRmls
ZTsKQEAgLTIxMSw2ICsyODgsMjI0IEBAIHN0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyQWNj
ZXB0UG9saWN5KENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyCiAgICAgZ19h
c3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAwKTsKIH0KIAorc3RhdGlj
IHZvaWQgdGVzdENvb2tpZU1hbmFnZXJBZGRDb29raWUoQ29va2llTWFuYWdlclRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gTG9hZCB0aGUgaHRtbCBjb250ZW50LCB3aXRoIEFM
V0FZUyBhY2NlcHQgcG9saWN5LCB3aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkgYWRkIG9uZSBjb29r
aWUuCisgICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQ
VF9OT19USElSRF9QQVJUWSk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlu
cygpKSwgPT0sIDEpOworCisgICAgLy8gQ2hlY2sgdGhlIGNvb2tpZXMgdGhhdCBoYXZlIGJlZW4g
YWRkZWQgZm9yIHRoZSBkb21haW4uCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBkb21haW5VUkwoZ19z
dHJkdXBfcHJpbnRmKCIlczovLyVzIiwgU09VUF9VUklfU0NIRU1FX0hUVFAsIGtGaXJzdFBhcnR5
RG9tYWluKSk7CisgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkoc291cF91cmlfbmV3KGRvbWFp
blVSTC5nZXQoKSkpOworICAgIEdMaXN0KiBmb3VuZENvb2tpZXMgPSB0ZXN0LT5nZXRDb29raWVz
KHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29r
aWVzKSwgPT0sIDEpOworCisgICAgU291cENvb2tpZSogZm91bmRDb29raWUgPSBzdGF0aWNfY2Fz
dDxTb3VwQ29va2llKj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
c291cF9jb29raWVfZ2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2llKSwgPT0s
IGtGaXJzdFBhcnR5RG9tYWluKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0
X3BhdGgoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihzb3VwX2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVlKTsK
KworICAgIC8vIFRyeSB0byBhZGQgbm93IGEgY29va2llIHdpdGggc2FtZSAobmFtZSwgZG9tYWlu
LCBwYXRoKSB0aGFuIHRoZSBvbmVzIGFscmVhZHkgYWRkZWQuCisgICAgR1VuaXF1ZVB0cjxTb3Vw
Q29va2llPiBmaXJzdENvb2tpZShzb3VwX2Nvb2tpZV9uZXcoa0Nvb2tpZU5hbWUsIGtDb29raWVW
YWx1ZU5ldywga0ZpcnN0UGFydHlEb21haW4sIGtDb29raWVQYXRoLCBTT1VQX0NPT0tJRV9NQVhf
QUdFX09ORV9IT1VSKSk7CisgICAgdGVzdC0+YWRkQ29va2llKGZpcnN0Q29va2llLmdldCgpKTsK
KworICAgIC8vIFN0aWxsIG9uZSBjb29raWUsIHNpbmNlIChuYW1lLCBkb21haW4sIHBhdGgpIGFy
ZSB0aGUgc2FtZSB0aGFuIHRoZSBhbHJlYWR5IGV4aXN0aW5nCisgICAgLy8gb25lLCBidXQgdGhl
IG5ldyB2YWx1ZSBpcyBub3cgc3RvcmVkIGFzIHJlcGxhY2VkIGJ5IHRoZSByZWNlbnRseSBhZGRl
ZCBjb29raWUuCisgICAgZm91bmRDb29raWVzID0gdGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkp
OworICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAx
KTsKKworICAgIGZvdW5kQ29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGZvdW5kQ29v
a2llcy0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9uYW1lKGZv
dW5kQ29va2llKSwgPT0sIGtDb29raWVOYW1lKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9j
b29raWVfZ2V0X2RvbWFpbihmb3VuZENvb2tpZSksID09LCBrRmlyc3RQYXJ0eURvbWFpbik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9wYXRoKGZvdW5kQ29va2llKSwgPT0s
IGtDb29raWVQYXRoKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3ZhbHVl
KGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVWYWx1ZU5ldyk7CisKKyAgICAvLyBOb3cgY3JlYXRl
IGFub3RoZXIgY29va2llIHdpdGggYSBkaWZmZXJlbnQgcGF0aCBhbmQgYWRkIGl0LCB1c2luZyBh
IEhUVFBTIFVSTCB0aGlzIHRpbWUuCisgICAgR1VuaXF1ZVB0cjxTb3VwQ29va2llPiBzZWNvbmRD
b29raWUoc291cF9jb29raWVfbmV3KGtDb29raWVOYW1lLCBrQ29va2llVmFsdWVOZXcsIGtGaXJz
dFBhcnR5RG9tYWluLCBrQ29va2llUGF0aE5ldywgU09VUF9DT09LSUVfTUFYX0FHRV9PTkVfSE9V
UikpOworICAgIHRlc3QtPmFkZENvb2tpZShzZWNvbmRDb29raWUuZ2V0KCkpOworICAgIGdfYXNz
ZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAxKTsKKwor
ICAgIC8vIFJldHJpZXZlIHRoZSBsaXN0IG9mIGNvb2tpZXMgZm9yIHRoZSBzYW1lIGRvbWFpbiBh
Z2FpbiBub3cgYW5kIGNoZWNrLgorICAgIGRvbWFpblVSTC5yZXNldChnX3N0cmR1cF9wcmludGYo
IiVzOi8vJXMlcyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQLCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nv
b2tpZVBhdGhOZXcpKTsKKyAgICB1cmkucmVzZXQoc291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQo
KSkpOworICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKwor
ICAgIC8vIFdlIGhhdmUgbm93IDIgY29va2llcyB0aGF0IHdvdWxkIGFwcGx5IHRvIHRoZSBwYXNz
ZWQgVVJMLCBvbmUgaXMgdGhlIGNvb2tpZSBpbml0aWFsbHkKKyAgICAvLyBsb2FkZWQgd2l0aCB0
aGUgd2ViIGNvbnRlbnQgYW5kIHRoZSBvdGhlciBjb29raWUgdGhlIG9uZSB3ZSBtYW51YWxseSBh
ZGRlZC4KKyAgICBnX2Fzc2VydF9ub25udWxsKGZvdW5kQ29va2llcyk7CisgICAgZ19hc3NlcnRf
Y21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDIpOworCisgICAgLy8gQWRk
IGEgdGhpcmQgbmV3IGNvb2tpZSBmb3IgYSBkaWZmZXJlbnQgZG9tYWluIHRoYW4gdGhlIHByZXZp
b3VzIG9uZXMuCisgICAgR1VuaXF1ZVB0cjxTb3VwQ29va2llPiB0aGlyZENvb2tpZShzb3VwX2Nv
b2tpZV9uZXcoa0Nvb2tpZU5hbWUsIGtDb29raWVWYWx1ZU5ldywga1RoaXJkUGFydHlEb21haW4s
IGtDb29raWVQYXRoTmV3LCBTT1VQX0NPT0tJRV9NQVhfQUdFX09ORV9IT1VSKSk7CisgICAgdGVz
dC0+YWRkQ29va2llKHRoaXJkQ29va2llLmdldCgpKTsKKworICAgIC8vIE9ubHkgb25lIGNvb2tp
ZSBub3csIHNpbmNlIHRoZSBkb21haW4gaXMgZGlmZmVyZW50LgorICAgIGRvbWFpblVSTC5yZXNl
dChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMlcyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQLCBrVGhp
cmRQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcpKTsKKyAgICB1cmkucmVzZXQoc291cF91cmlf
bmV3KGRvbWFpblVSTC5nZXQoKSkpOworICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tp
ZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENv
b2tpZXMpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+
Z2V0RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgZm91bmRDb29raWUgPSBzdGF0aWNfY2FzdDxT
b3VwQ29va2llKj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291
cF9jb29raWVfZ2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOworICAgIGdf
YXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2llKSwgPT0sIGtU
aGlyZFBhcnR5RG9tYWluKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3Bh
dGgoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVBhdGhOZXcpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihzb3VwX2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVlTmV3
KTsKKworICAgIC8vIEZpbmFsbHksIGRlbGV0ZSBhbGwgY29va2llcyBhbmQgY2hlY2sgdGhleSBh
cmUgYWxsIGdvbmUuCisgICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOworICAgIGdfYXNzZXJ0
X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJHZXRDb29raWVzKENvb2tpZU1hbmFnZXJUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIExvYWQgdGhlIGh0bWwgY29udGVudCBh
bmQgcmV0cmlldmUgdGhlIDIgY29va2llcyBhdXRvbWF0aWNhbGx5IGFkZGVkLgorICAgIHRlc3Qt
PnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0
YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMik7CisKKyAgICAv
LyBSZXRyaWV2ZSB0aGUgZmlyc3QgY29va2llIHVzaW5nIGEgSFRUUCBzY2hlbWUuCisgICAgR1Vu
aXF1ZVB0cjxjaGFyPiBkb21haW5VUkwoZ19zdHJkdXBfcHJpbnRmKCIlczovLyVzIiwgU09VUF9V
UklfU0NIRU1FX0hUVFAsIGtGaXJzdFBhcnR5RG9tYWluKSk7CisgICAgR1VuaXF1ZVB0cjxTb3Vw
VVJJPiB1cmkoc291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkpOworICAgIEdMaXN0KiBmb3Vu
ZENvb2tpZXMgPSB0ZXN0LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfbm9u
bnVsbChmb3VuZENvb2tpZXMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZv
dW5kQ29va2llcyksID09LCAxKTsKKworICAgIFNvdXBDb29raWUqIGZvdW5kQ29va2llID0gc3Rh
dGljX2Nhc3Q8U291cENvb2tpZSo+KGZvdW5kQ29va2llcy0+ZGF0YSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHNvdXBfY29va2llX2dldF9uYW1lKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVOYW1l
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X2RvbWFpbihmb3VuZENvb2tp
ZSksID09LCBrRmlyc3RQYXJ0eURvbWFpbik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29v
a2llX2dldF9wYXRoKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVQYXRoKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3ZhbHVlKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVW
YWx1ZSk7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgc2Vjb25kIGNvb2tpZSB1c2luZyBhIEhUVFBT
IHNjaGVtZS4KKyAgICBkb21haW5VUkwucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlczovLyVzIiwg
U09VUF9VUklfU0NIRU1FX0hUVFBTLCBrVGhpcmRQYXJ0eURvbWFpbikpOworICAgIHVyaS5yZXNl
dChzb3VwX3VyaV9uZXcoZG9tYWluVVJMLmdldCgpKSk7CisgICAgZm91bmRDb29raWVzID0gdGVz
dC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworICAgIGdfYXNzZXJ0X25vbm51bGwoZm91bmRDb29r
aWVzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tpZXMpLCA9
PSwgMSk7CisKKyAgICBmb3VuZENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihmb3Vu
ZENvb2tpZXMtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFt
ZShmb3VuZENvb2tpZSksID09LCBrQ29va2llTmFtZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNv
dXBfY29va2llX2dldF9kb21haW4oZm91bmRDb29raWUpLCA9PSwga1RoaXJkUGFydHlEb21haW4p
OworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfcGF0aChmb3VuZENvb2tpZSks
ID09LCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF92
YWx1ZShmb3VuZENvb2tpZSksID09LCBrQ29va2llVmFsdWUpOworCisgICAgLy8gQ3JlYXRlIGEg
bmV3IGNvb2tpZSBhbmQgYWRkIGl0IHRvIHRoZSBmaXJzdCBkb21haW4uCisgICAgR1VuaXF1ZVB0
cjxTb3VwQ29va2llPiBuZXdDb29raWUoc291cF9jb29raWVfbmV3KGtDb29raWVOYW1lLCBrQ29v
a2llVmFsdWVOZXcsIGtGaXJzdFBhcnR5RG9tYWluLCBrQ29va2llUGF0aE5ldywgU09VUF9DT09L
SUVfTUFYX0FHRV9PTkVfSE9VUikpOworICAgIHRlc3QtPmFkZENvb2tpZShuZXdDb29raWUuZ2V0
KCkpOworCisgICAgLy8gV2Ugc2hvdWxkIGdldCAyIGNvb2tpZXMgdGhhdCB3b3VsZCBhcHBseSB0
byB0aGUgc2FtZSBVUkwgcGFzc2VkLCBzaW5jZQorICAgIC8vIGh0dHA6Ly8xMjcuMC4wLjEvbmV3
IGlzIGEgc3Vic2V0IG9mIHRoZSBodHRwOi8vMTI3LjAuMC4xLyBVUkwuCisgICAgZG9tYWluVVJM
LnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJXM6Ly8lcyVzIiwgU09VUF9VUklfU0NIRU1FX0hUVFAs
IGtGaXJzdFBhcnR5RG9tYWluLCBrQ29va2llUGF0aE5ldykpOworICAgIHVyaS5yZXNldChzb3Vw
X3VyaV9uZXcoZG9tYWluVVJMLmdldCgpKSk7CisgICAgZm91bmRDb29raWVzID0gdGVzdC0+Z2V0
Q29va2llcyh1cmkuZ2V0KCkpOworICAgIGdfYXNzZXJ0X25vbm51bGwoZm91bmRDb29raWVzKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tpZXMpLCA9PSwgMik7
CisKKyAgICAvLyBXZSBoYXZlIG5vdyAyIGNvb2tpZXMgdGhhdCB3b3VsZCBhcHBseSB0byB0aGUg
cGFzc2VkIFVSTCwgb25lIGlzIHRoZSBjb29raWUgaW5pdGlhbGx5CisgICAgLy8gbG9hZGVkIHdp
dGggdGhlIHdlYiBjb250ZW50IGFuZCB0aGUgb3RoZXIgY29va2llIHRoZSBvbmUgd2UgbWFudWFs
bHkgYWRkZWQuCisgICAgZ19hc3NlcnRfbm9ubnVsbChmb3VuZENvb2tpZXMpOworICAgIGdfYXNz
ZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAyKTsKKworICAgIGJv
b2wgbmV3UGF0aENoZWNrZWQgPSBmYWxzZTsKKyAgICBjb25zdCBjaGFyKiBwYXRoRm91bmQgPSBu
dWxscHRyOworICAgIGNvbnN0IGNoYXIqIHZhbHVlRm91bmQgPSBudWxscHRyOworICAgIGZvciAo
dWludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBmb3VuZENvb2tpZSA9IHN0YXRpY19j
YXN0PFNvdXBDb29raWUqPihnX2xpc3RfbnRoX2RhdGEoZm91bmRDb29raWVzLCBpKSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFtZShmb3VuZENvb2tpZSksID09
LCBrQ29va2llTmFtZSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRf
ZG9tYWluKGZvdW5kQ29va2llKSwgPT0sIGtGaXJzdFBhcnR5RG9tYWluKTsKKworICAgICAgICAv
LyBDb29raWVzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIGZvciAndmFsdWUnIGFuZCAncGF0
aCcsIHNvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgIC8vIHdlIGNoZWNrIGZvciBib3RoIHBvc3Np
YmlsaXRpZXMsIGJ1dCBkaWZmZXJlbnQgb25lcyBmb3IgZWFjaCBjb29raWUgZm91bmQuCisgICAg
ICAgIHBhdGhGb3VuZCA9IHNvdXBfY29va2llX2dldF9wYXRoKGZvdW5kQ29va2llKTsKKyAgICAg
ICAgdmFsdWVGb3VuZCA9IHNvdXBfY29va2llX2dldF92YWx1ZShmb3VuZENvb2tpZSk7CisgICAg
ICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgaWYgKG5ld1BhdGhDaGVja2VkKSB7CisgICAg
ICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHBhdGhGb3VuZCwgPT0sIGtDb29raWVQYXRoKTsK
KyAgICAgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVGb3VuZCwgPT0sIGtDb29raWVW
YWx1ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cihwYXRoRm91bmQsID09LCBrQ29va2llUGF0aE5ldyk7CisgICAgICAgICAgICAgICAgZ19h
c3NlcnRfY21wc3RyKHZhbHVlRm91bmQsID09LCBrQ29va2llVmFsdWVOZXcpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGdfc3RyY21wMChwYXRoRm91
bmQsIGtDb29raWVQYXRoKSkgeworICAgICAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihwYXRo
Rm91bmQsID09LCBrQ29va2llUGF0aE5ldyk7CisgICAgICAgICAgICAgICAgZ19hc3NlcnRfY21w
c3RyKHZhbHVlRm91bmQsID09LCBrQ29va2llVmFsdWVOZXcpOworICAgICAgICAgICAgICAgIG5l
d1BhdGhDaGVja2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGdf
c3RyY21wMChwYXRoRm91bmQsIGtDb29raWVQYXRoTmV3KSkgeworICAgICAgICAgICAgICAgIGdf
YXNzZXJ0X2NtcHN0cihwYXRoRm91bmQsID09LCBrQ29va2llUGF0aCk7CisgICAgICAgICAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlRm91bmQsID09LCBrQ29va2llVmFsdWUpOworICAgICAg
ICAgICAgICAgIG5ld1BhdGhDaGVja2VkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBXZSBzaG91bGQgZ2V0IDEgY29va2llIG9ubHkgaWYgd2Ugc3Bl
Y2lmeSBodHRwOi8vMTI3LjAuMC4xLywgdGhvdWdoLgorICAgIGRvbWFpblVSTC5yZXNldChnX3N0
cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlE
b21haW4pKTsKKyAgICB1cmkucmVzZXQoc291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkpOwor
ICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fz
c2VydF9ub25udWxsKGZvdW5kQ29va2llcyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9s
ZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDEpOworCisgICAgZm91bmRDb29raWUgPSBzdGF0aWNf
Y2FzdDxTb3VwQ29va2llKj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoc291cF9jb29raWVfZ2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2llKSwg
PT0sIGtGaXJzdFBhcnR5RG9tYWluKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVf
Z2V0X3BhdGgoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzb3VwX2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVl
KTsKKworICAgIC8vIEZpbmFsbHksIGRlbGV0ZSBhbGwgY29va2llcyBhbmQgdHJ5IHRvIHJldHJp
ZXZlIHRoZW0gYWdhaW4sIG9uZSBieSBvbmUuCisgICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygp
OworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSks
ID09LCAwKTsKKworICAgIGRvbWFpblVSTC5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMi
LCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICB1cmkucmVz
ZXQoc291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkpOworICAgIGZvdW5kQ29va2llcyA9IHRl
c3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9udWxsKGZvdW5kQ29va2ll
cyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llKENvb2tp
ZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNldEFjY2Vw
dFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIEluaXRpYWxseSwgdGhl
cmUgc2hvdWxkIGJlIDIgY29va2llcyBhdmFpbGFibGUuCisgICAgZ19hc3NlcnRfY21waW50KGdf
c3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgLy8gRGVsZXRl
IHRoZSBjb29raWUgZm9yIHRoZSBmaXJzdCBwYXJ0eSBkb21haW4uCisgICAgdGVzdC0+ZGVsZXRl
Q29va2llKGtDb29raWVOYW1lLCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGgpOworICAg
IGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAx
KTsKKworICAgIC8vIFRyeSBkZWxldGluZyBhIG5vbi1leGlzdGVudCBjb29raWUgKHdyb25nIG5h
bWUpLgorICAgIHRlc3QtPmRlbGV0ZUNvb2tpZSgid3JvbmctbmFtZSIsIGtUaGlyZFBhcnR5RG9t
YWluLCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVz
dC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOworCisgICAgLy8gVHJ5IGRlbGV0aW5nIGEgbm9uLWV4
aXN0ZW50IGNvb2tpZSAod3JvbmcgZG9tYWluKS4KKyAgICB0ZXN0LT5kZWxldGVDb29raWUoa0Nv
b2tpZU5hbWUsICJ3cm9uZy1kb21haW4iLCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOworCisgICAgLy8g
VHJ5IGRlbGV0aW5nIGEgbm9uLWV4aXN0ZW50IGNvb2tpZSAod3JvbmcgcGF0aCkuCisgICAgdGVz
dC0+ZGVsZXRlQ29va2llKGtDb29raWVOYW1lLCBrVGhpcmRQYXJ0eURvbWFpbiwgIndyb25nLXBh
dGgiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5z
KCkpLCA9PSwgMSk7CisKKyAgICAvLyBEZWxldGUgdGhlIGNvb2tpZSBmb3IgdGhlIHRoaXJkIHBh
cnR5IGRvbWFpbi4KKyAgICB0ZXN0LT5kZWxldGVDb29raWUoa0Nvb2tpZU5hbWUsIGtUaGlyZFBh
cnR5RG9tYWluLCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5n
dGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworCisgICAgLy8gRmluYWxseSwgYWRkIGEg
bmV3IGNvb2tpZSBub3cgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5kIGRlbGV0ZSBpdCBhZnRlcndhcmRz
LgorICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4gbmV3Q29va2llKHNvdXBfY29va2llX25ldyhr
Q29va2llTmFtZSwga0Nvb2tpZVZhbHVlTmV3LCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBh
dGhOZXcsIFNPVVBfQ09PS0lFX01BWF9BR0VfT05FX0hPVVIpKTsKKyAgICB0ZXN0LT5hZGRDb29r
aWUobmV3Q29va2llLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0
ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisgICAgdGVzdC0+ZGVsZXRlQ29va2llKGtDb29r
aWVOYW1lLCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcpOworICAgIGdfYXNzZXJ0
X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKK30KKwog
c3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzKENvb2tpZU1hbmFnZXJU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShX
RUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKQEAgLTM2MCwxMiArNjU1LDE0IEBA
IHN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3Nh
Z2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqCiAgICAgfQogCiAgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIGdjaGFyKiBoZWFkZXJfc3RyID0g
Z19zdHJkdXBfcHJpbnRmKCIlcz0lczsgTWF4LUFnZT02MCIsIGtDb29raWVOYW1lLCBrQ29va2ll
VmFsdWUpOworCiAgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW5kZXguaHRtbCIpKSB7CiAg
ICAgICAgIGNoYXIqIGluZGV4SHRtbCA9IGdfc3RyZHVwX3ByaW50ZihrSW5kZXhIdG1sRm9ybWF0
LCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hl
YWRlcnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsICJm
b289YmFyOyBNYXgtQWdlPTYwIik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxh
Y2UobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29raWUiLCBoZWFkZXJfc3RyKTsK
ICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHks
IFNPVVBfTUVNT1JZX1RBS0UsIGluZGV4SHRtbCwgc3RybGVuKGluZGV4SHRtbCkpOwogICAgIH0g
ZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbWFnZS5wbmciKSkKLSAgICAgICAgc291cF9t
ZXNzYWdlX2hlYWRlcnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNv
b2tpZSIsICJiYXo9cXV4OyBNYXgtQWdlPTYwIik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX3JlcGxhY2UobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29raWUiLCBoZWFk
ZXJfc3RyKTsKICAgICBlbHNlCiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CiAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxl
dGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CkBAIC0zNzcsNiArNjc0LDkgQEAgdm9pZCBiZWZv
cmVBbGwoKQogICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CiAKICAgICBDb29raWVN
YW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImFjY2VwdC1wb2xpY3kiLCB0
ZXN0Q29va2llTWFuYWdlckFjY2VwdFBvbGljeSk7CisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFk
ZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJhZGQtY29va2llIiwgdGVzdENvb2tpZU1hbmFnZXJB
ZGRDb29raWUpOworICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFn
ZXIiLCAiZ2V0LWNvb2tpZXMiLCB0ZXN0Q29va2llTWFuYWdlckdldENvb2tpZXMpOworICAgIENv
b2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiZGVsZXRlLWNvb2tp
ZSIsIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llKTsKICAgICBDb29raWVNYW5hZ2VyVGVz
dDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImRlbGV0ZS1jb29raWVzIiwgdGVzdENvb2tp
ZU1hbmFnZXJEZWxldGVDb29raWVzKTsKICAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJL
aXRDb29raWVNYW5hZ2VyIiwgImNvb2tpZXMtY2hhbmdlZCIsIHRlc3RDb29raWVNYW5hZ2VyQ29v
a2llc0NoYW5nZWQpOwogICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1h
bmFnZXIiLCAicGVyc2lzdGVudC1zdG9yYWdlIiwgdGVzdENvb2tpZU1hbmFnZXJQZXJzaXN0ZW50
U3RvcmFnZSk7Ci0tIAoyLjEzLjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325359</attachid>
            <date>2017-10-30 10:36:30 -0700</date>
            <delta_ts>2017-10-31 04:27:27 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-GTK-New-API-to-add-retrieve-and-delete-cookies-via-W.patch</filename>
            <type>text/plain</type>
            <size>55030</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBiMTg1MWIwMmMzMTU4YzQ0YzgzMGQ3ZWRkYWQ2MTgzYzA1ZWIxNTBiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpb0B3ZWJraXQub3Jn
PgpEYXRlOiBNb24sIDMwIE9jdCAyMDE3IDE3OjI1OjM4ICswMDAwClN1YmplY3Q6IFtQQVRDSF0g
W0dUS10gTmV3IEFQSSB0byBhZGQsIHJldHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEKIFdl
YktpdENvb2tpZU1hbmFnZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzkzMgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpTb3VyY2UvV2ViQ29yZToKCklt
cGxlbWVudGVkIHNldENvb2tpZSgpLCBnZXRDb29raWVzKCkgYW5kIGRlbGV0ZUNvb2tpZSgpIGlu
IHRoZSBTb3VwCmJhY2tlbmQsIGFuZCByZWZhY3RvcmVkIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMg
YW5kIGNvbnZlcnNpb25zIG91dCBvZgpOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwIGludG8gYSBu
ZXcgQ29va2llU291cC5jcHAgZmlsZSwgc28KdGhhdCB3ZSBub3cgY2FuIGNvbnZlcnQgYmV0d2Vl
biBTb3VwQ29va2llKiBhbmQgV2ViQ29yZTo6Q29va2llCmVhc2lseSBmcm9tIGFueXdoZXJlICh0
aGlzIGlzIG5vdyBuZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2VzcykuCgoqIFBsYXRmb3JtR1RLLmNt
YWtlOiBBZGQgQ29va2llU291cC5jcHAuCiogUGxhdGZvcm1XUEUuY21ha2U6IEFkZCBDb29raWVT
b3VwLmNwcC4KKiBwbGF0Zm9ybS9Db29raWUuaDogQWRkIGRlY2xhcmF0aW9ucyBmb3IgdGhlIG5l
dyBpbXBsaWNpdCBjb252ZXJzaW9ucy4KKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU291
cC5jcHA6IEFkZGVkLgooV2ViQ29yZTo6Q29va2llOjpDb29raWUpOiBOZXcgY29uc3RydWN0b3Is
IGNyZWF0ZXMgYSBXZWJDb3JlOjpDb29raWUgb3V0IG9mIGEgU291cENvb2tpZSouCihXZWJDb3Jl
Ojptc1RvU291cERhdGUpOiBNb3ZlZCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3Bw
LgooV2ViQ29yZTo6Q29va2llOjpvcGVyYXRvciBTb3VwQ29va2llICogY29uc3QpOiBOZXcgb3Zl
cnJpZGUsIGJhc2VkIG9uIHRvU291cENvb2tpZSgpLgoqIHBsYXRmb3JtL25ldHdvcmsvc291cC9O
ZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcDoKKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6c2V0Q29va2llcyk6IFVzZWQgdGhlIG5ldyBpbXBsaWNpdCBjb252ZXJzaW9uLgooV2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWUpOiBOZXdseSBpbXBsZW1lbnRl
ZC4KKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKTogTmV3bHkg
aW1wbGVtZW50ZWQuCihXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldENvb2tpZXMp
OiBOZXdseSBpbXBsZW1lbnRlZC4KClNvdXJjZS9XZWJLaXQ6CgpBZGRlZCBuZXcgQVBJIHRvIFdl
YktpdENvb2tpZU1hbmFnZXIgdG8gYWRkLCByZXRyaWV2ZSBhbmQgZGVsZXRlIGNvbXBsZXRlCmNv
b2tpZXMgaW50by9vdXQtb2YgYSBydW5uaW5nIHNlc3Npb24sIGFuZCB1cGRhdGVkIGRvY3VtZW50
YXRpb24gc2VjdGlvbnMuCgoqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2Vy
LmNwcDoKKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKTogTmV3IGZ1bmN0aW9uLgoo
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKTogRGl0dG8uCih3ZWJraXRf
Y29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMpOiBEaXR0by4KKHdlYmtpdF9jb29raWVfbWFuYWdl
cl9nZXRfY29va2llc19maW5pc2gpOiBEaXR0by4KKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llKTogRGl0dG8uCih3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9m
aW5pc2gpOiBEaXR0by4KKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmg6
IEFkZGVkIG5ldyBmdW5jdGlvbnMuCiogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFu
YWdlci5oOiBEaXR0by4KKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNl
Y3Rpb25zLnR4dDogRGl0dG8uCgpUb29sczoKCkFkZGVkIG5ldyB0ZXN0IGNhc2VzIHRvIGNvdmVy
IHRoZSBuZXdseSBhZGRlZCBBUEkgZm9yIFdlYktpdENvb2tpZU1hbmFnZXI6CndlYmtpdF9jb29r
aWVfbWFuYWdlcl9hZGRfY29va2llLCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMg
YW5kCndlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llLgoKKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwOgoodGVzdENvb2tpZU1hbmFn
ZXJBZGRDb29raWUpOiBBZGRlZC4KKHRlc3RDb29raWVNYW5hZ2VyR2V0Q29va2llcyk6IEFkZGVk
LgoodGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWUpOiBBZGRlZC4KKHNlcnZlckNhbGxiYWNr
KTogU21hbGwgdXBkYXRlIHRvIGF2b2lkIGhhcmRjb2Rpbmcgc3RyaW5ncyB3ZSByZXVzZS4KKGJl
Zm9yZUFsbCk6IEFkZGVkIHRoZSBuZXcgdGVzdCBjYXNlcyB0byB0aGUgdGVzdCBzdWl0ZS4KLS0t
CiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAy
NiArKwogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgICAgICAgICAgICAgICAgICAg
fCAgIDEgKwogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UgICAgICAgICAgICAgICAg
ICAgfCAgIDEgKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llLmggICAgICAgICAgICAg
ICAgICAgfCAgIDMgKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNv
dXAuY3BwICAgfCAgNzcgKysrKysrCiAuLi4vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vz
c2lvblNvdXAuY3BwICAgICB8ICA3MCArKy0tLQogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjEgKysKIC4uLi9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0Q29va2llTWFuYWdlci5jcHAgICAgIHwgMTkwICsrKysrKysrKysrKysKIC4uLi9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oIHwgIDQwICsrKwogLi4u
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQgICAgICAgfCAgIDYgKwog
Li4uL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmggfCAgNDAg
KysrCiBUb29scy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAxOCArKwogLi4uL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwICAgICAg
ICAgfCAzMDQgKysrKysrKysrKysrKysrKysrKystCiAxMyBmaWxlcyBjaGFuZ2VkLCA3NjIgaW5z
ZXJ0aW9ucygrKSwgMzUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGUxNTc1NTQwZjYzLi5lMDAyZDkyN2JmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisy
MDE3LTEwLTMwICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW9AZW5kbGVzc20uY29tPgorCisg
ICAgICAgIFtHVEtdIE5ldyBBUEkgdG8gYWRkLCByZXRyaWV2ZSBhbmQgZGVsZXRlIGNvb2tpZXMg
dmlhIFdlYktpdENvb2tpZU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NzkzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIHNldENvb2tpZSgpLCBnZXRDb29raWVzKCkgYW5k
IGRlbGV0ZUNvb2tpZSgpIGluIHRoZSBTb3VwCisgICAgICAgIGJhY2tlbmQsIGFuZCByZWZhY3Rv
cmVkIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIGNvbnZlcnNpb25zIG91dCBvZgorICAgICAg
ICBOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwIGludG8gYSBuZXcgQ29va2llU291cC5jcHAgZmls
ZSwgc28KKyAgICAgICAgdGhhdCB3ZSBub3cgY2FuIGNvbnZlcnQgYmV0d2VlbiBTb3VwQ29va2ll
KiBhbmQgV2ViQ29yZTo6Q29va2llCisgICAgICAgIGVhc2lseSBmcm9tIGFueXdoZXJlICh0aGlz
IGlzIG5vdyBuZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2VzcykuCisKKyAgICAgICAgKiBQbGF0Zm9y
bUdUSy5jbWFrZTogQWRkIENvb2tpZVNvdXAuY3BwLgorICAgICAgICAqIFBsYXRmb3JtV1BFLmNt
YWtlOiBBZGQgQ29va2llU291cC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vQ29va2llLmg6IEFk
ZCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBuZXcgaW1wbGljaXQgY29udmVyc2lvbnMuCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZTo6Q29va2llKTogTmV3IGNvbnN0cnVjdG9yLCBjcmVhdGVzIGEgV2Vi
Q29yZTo6Q29va2llIG91dCBvZiBhIFNvdXBDb29raWUqLgorICAgICAgICAoV2ViQ29yZTo6bXNU
b1NvdXBEYXRlKTogTW92ZWQgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZTo6b3BlcmF0b3IgU291cENvb2tpZSAqIGNvbnN0KTogTmV3
IG92ZXJyaWRlLCBiYXNlZCBvbiB0b1NvdXBDb29raWUoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMpOiBVc2VkIHRoZSBuZXcgaW1w
bGljaXQgY29udmVyc2lvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6c2V0Q29va2llKTogTmV3bHkgaW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSk6IE5ld2x5IGltcGxlbWVudGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRDb29raWVzKTogTmV3bHkg
aW1wbGVtZW50ZWQuCisKIDIwMTctMTAtMjMgIE1pZ3VlbCBHb21leiAgPG1hZ29tZXpAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbVGV4TWFwXSBSZW1vdmUgR3JhcGhpY3NDb250ZXh0M0QgdXNhZ2Ug
ZnJvbSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpp
bmRleCBiMDczOWMwMTY2Yy4uYjNmNzhmOTI3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0xMTQsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vbmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmNwcAogICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9D
b29raWVTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTdG9yYWdlU291
cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ3JlZGVudGlhbFN0b3JhZ2VTb3VwLmNw
cAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9ETlNTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQ
RS5jbWFrZQppbmRleCA2ZmU2M2NkODdlMi4uNzc0MTIwOGI3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V1BFLmNtYWtlCkBAIC0xMDQsNiArMTA0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5j
cHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ2VydGlmaWNhdGVJbmZvLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAorICAgIHBsYXRmb3JtL25ldHdv
cmsvc291cC9Db29raWVTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVT
dG9yYWdlU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ3JlZGVudGlhbFN0b3Jh
Z2VTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9ETlNTb3VwLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Db29raWUuaAppbmRleCAwOTMzY2NhMDczYy4uZTAzYWZjZWJkMWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0Nvb2tpZS5oCkBAIC02Nyw2ICs2Nyw5IEBAIHN0cnVjdCBDb29raWUgewogI2lm
ZGVmIF9fT0JKQ19fCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29va2llKE5TSFRUUENvb2tpZSAqKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBOU0hUVFBDb29raWUgKigpIGNvbnN0OworI2Vs
aWYgVVNFKFNPVVApCisgICAgQ29va2llKFNvdXBDb29raWUgKik7CisgICAgb3BlcmF0b3IgU291
cENvb2tpZSAqKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3Vw
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3VwLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWIwMGFkMGJiY2EKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29v
a2llU291cC5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJ
Z2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEVuZGxlc3MgTW9iaWxlLCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDb29raWUuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Nvb2tpZTo6Q29va2llKFNvdXBDb29raWUgKmNvb2tp
ZSkKK3sKKyAgICBuYW1lID0gU3RyaW5nOjpmcm9tVVRGOChjb29raWUtPm5hbWUpOworICAgIHZh
bHVlID0gU3RyaW5nOjpmcm9tVVRGOChjb29raWUtPnZhbHVlKTsKKyAgICBkb21haW4gPSBTdHJp
bmc6OmZyb21VVEY4KGNvb2tpZS0+ZG9tYWluKTsKKyAgICBwYXRoID0gU3RyaW5nOjpmcm9tVVRG
OChjb29raWUtPnBhdGgpOworICAgIGV4cGlyZXMgPSBjb29raWUtPmV4cGlyZXMgPyBzdGF0aWNf
Y2FzdDxkb3VibGU+KHNvdXBfZGF0ZV90b190aW1lX3QoY29va2llLT5leHBpcmVzKSkgKiAxMDAw
IDogMDsKKyAgICBodHRwT25seSA9IGNvb2tpZS0+aHR0cF9vbmx5OworICAgIHNlY3VyZSA9IGNv
b2tpZS0+c2VjdXJlOworICAgIHNlc3Npb24gPSAhY29va2llLT5leHBpcmVzOworfQorCitzdGF0
aWMgU291cERhdGUqIG1zVG9Tb3VwRGF0ZShkb3VibGUgbXMpCit7CisgICAgaW50IHllYXIgPSBt
c1RvWWVhcihtcyk7CisgICAgaW50IGRheU9mWWVhciA9IGRheUluWWVhcihtcywgeWVhcik7Cisg
ICAgYm9vbCBsZWFwWWVhciA9IGlzTGVhcFllYXIoeWVhcik7CisKKyAgICAvLyBtb250aEZyb21E
YXlJblllYXIoKSByZXR1cm5zIGEgdmFsdWUgaW4gdGhlIFswLDExXSByYW5nZSwgd2hpbGUgc291
cF9kYXRlX25ldygpIGV4cGVjdHMKKyAgICAvLyBhIHZhbHVlIGluIHRoZSBbMSwxMl0gcmFuZ2Us
IG1lYW5pbmcgd2UgaGF2ZSB0byBtYW51YWxseSBhZGp1c3QgdGhlIG1vbnRoIHZhbHVlLgorICAg
IHJldHVybiBzb3VwX2RhdGVfbmV3KHllYXIsIG1vbnRoRnJvbURheUluWWVhcihkYXlPZlllYXIs
IGxlYXBZZWFyKSArIDEsIGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKGRheU9mWWVhciwgbGVhcFll
YXIpLCBtc1RvSG91cnMobXMpLCBtc1RvTWludXRlcyhtcyksIHN0YXRpY19jYXN0PGludD4obXMg
LyAxMDAwKSAlIDYwKTsKK30KKworQ29va2llOjpvcGVyYXRvciBTb3VwQ29va2llICooKSBjb25z
dAoreworICAgIGlmIChuYW1lLmlzTnVsbCgpIHx8IHZhbHVlLmlzTnVsbCgpIHx8IGRvbWFpbi5p
c051bGwoKSB8fCBwYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IFNvdXBDb29raWUqIHNvdXBDb29raWUgPSBzb3VwX2Nvb2tpZV9uZXcobmFtZS51dGY4KCkuZGF0
YSgpLCB2YWx1ZS51dGY4KCkuZGF0YSgpLAorICAgICAgICBkb21haW4udXRmOCgpLmRhdGEoKSwg
cGF0aC51dGY4KCkuZGF0YSgpLCAtMSk7CisKKyAgICBzb3VwX2Nvb2tpZV9zZXRfaHR0cF9vbmx5
KHNvdXBDb29raWUsIGh0dHBPbmx5KTsKKyAgICBzb3VwX2Nvb2tpZV9zZXRfc2VjdXJlKHNvdXBD
b29raWUsIHNlY3VyZSk7CisKKyAgICBpZiAoIXNlc3Npb24pIHsKKyAgICAgICAgU291cERhdGUq
IGRhdGUgPSBtc1RvU291cERhdGUoZXhwaXJlcyk7CisgICAgICAgIHNvdXBfY29va2llX3NldF9l
eHBpcmVzKHNvdXBDb29raWUsIGRhdGUpOworICAgICAgICBzb3VwX2RhdGVfZnJlZShkYXRlKTsK
KyAgICB9CisKKyAgICByZXR1cm4gc291cENvb2tpZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05l
dHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCmluZGV4IGNiODY4Y2MwN2I2
Li5kMzZjYzU4N2FhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcApAQCAt
Miw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb3VwTmV0d29ya1Nlc3Npb24u
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dVbmlxdWVQdHJTb3VwLmg+CiAjaW5jbHVkZSA8bGlic291
cC9zb3VwLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KQEAgLTI4OSw0NSArMjkxLDQwIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpzYXZlQ3JlZGVudGlhbFRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwCiAj
ZW5kaWYKIH0KIAotc3RhdGljIFNvdXBEYXRlKiBtc1RvU291cERhdGUoZG91YmxlIG1zKQotewot
ICAgIGludCB5ZWFyID0gbXNUb1llYXIobXMpOwotICAgIGludCBkYXlPZlllYXIgPSBkYXlJblll
YXIobXMsIHllYXIpOwotICAgIGJvb2wgbGVhcFllYXIgPSBpc0xlYXBZZWFyKHllYXIpOwotCi0g
ICAgLy8gbW9udGhGcm9tRGF5SW5ZZWFyKCkgcmV0dXJucyBhIHZhbHVlIGluIHRoZSBbMCwxMV0g
cmFuZ2UsIHdoaWxlIHNvdXBfZGF0ZV9uZXcoKSBleHBlY3RzCi0gICAgLy8gYSB2YWx1ZSBpbiB0
aGUgWzEsMTJdIHJhbmdlLCBtZWFuaW5nIHdlIGhhdmUgdG8gbWFudWFsbHkgYWRqdXN0IHRoZSBt
b250aCB2YWx1ZS4KLSAgICByZXR1cm4gc291cF9kYXRlX25ldyh5ZWFyLCBtb250aEZyb21EYXlJ
blllYXIoZGF5T2ZZZWFyLCBsZWFwWWVhcikgKyAxLCBkYXlJbk1vbnRoRnJvbURheUluWWVhcihk
YXlPZlllYXIsIGxlYXBZZWFyKSwgbXNUb0hvdXJzKG1zKSwgbXNUb01pbnV0ZXMobXMpLCBzdGF0
aWNfY2FzdDxpbnQ+KG1zIC8gMTAwMCkgJSA2MCk7Ci19Ci0KLXN0YXRpYyBTb3VwQ29va2llKiB0
b1NvdXBDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCi17Ci0gICAgU291cENvb2tpZSogc291
cENvb2tpZSA9IHNvdXBfY29va2llX25ldyhjb29raWUubmFtZS51dGY4KCkuZGF0YSgpLCBjb29r
aWUudmFsdWUudXRmOCgpLmRhdGEoKSwKLSAgICAgICAgY29va2llLmRvbWFpbi51dGY4KCkuZGF0
YSgpLCBjb29raWUucGF0aC51dGY4KCkuZGF0YSgpLCAtMSk7Ci0gICAgc291cF9jb29raWVfc2V0
X2h0dHBfb25seShzb3VwQ29va2llLCBjb29raWUuaHR0cE9ubHkpOwotICAgIHNvdXBfY29va2ll
X3NldF9zZWN1cmUoc291cENvb2tpZSwgY29va2llLnNlY3VyZSk7Ci0gICAgaWYgKCFjb29raWUu
c2Vzc2lvbikgewotICAgICAgICBTb3VwRGF0ZSogZGF0ZSA9IG1zVG9Tb3VwRGF0ZShjb29raWUu
ZXhwaXJlcyk7Ci0gICAgICAgIHNvdXBfY29va2llX3NldF9leHBpcmVzKHNvdXBDb29raWUsIGRh
dGUpOwotICAgICAgICBzb3VwX2RhdGVfZnJlZShkYXRlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNv
dXBDb29raWU7Ci19Ci0KIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzKGNv
bnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmKQogewog
ICAgIGZvciAoYXV0byBjb29raWUgOiBjb29raWVzKQotICAgICAgICBzb3VwX2Nvb2tpZV9qYXJf
YWRkX2Nvb2tpZShjb29raWVTdG9yYWdlKCksIHRvU291cENvb2tpZShjb29raWUpKTsKKyAgICAg
ICAgc291cF9jb29raWVfamFyX2FkZF9jb29raWUoY29va2llU3RvcmFnZSgpLCBjb29raWUpOwog
fQogCi12b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llKGNvbnN0IENvb2tpZSYp
Cit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llKGNvbnN0IENvb2tpZSYgY29v
a2llKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCisgICAgc291
cF9jb29raWVfamFyX2FkZF9jb29raWUoY29va2llU3RvcmFnZSgpLCBjb29raWUpOwogfQogCi12
b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IENvb2tpZSYpCit2
b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IENvb2tpZSYgY29v
a2llKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCisgICAgLy8g
V2UgbmVlZCB0byBzcGVjaWZ5IHRoZSBIVFRQIHNjaGVtZSB0byBjb25zdHJ1Y3QgYSB2YWxpZCBT
b3VwVVJJLAorICAgIC8vIHNvIHRoYXQgd2UgY2FuIGxvb2sgdXAgZm9yIHRoZSBIVFRQIGNvb2tp
ZSBpbiB0aGUgamFyLgorICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpKHNvdXBfdXJpX25ldyhu
dWxscHRyKSk7CisgICAgc291cF91cmlfc2V0X3NjaGVtZSh1cmkuZ2V0KCksIFNPVVBfVVJJX1ND
SEVNRV9IVFRQKTsKKyAgICBzb3VwX3VyaV9zZXRfaG9zdCh1cmkuZ2V0KCksIGNvb2tpZS5kb21h
aW4udXRmOCgpLmRhdGEoKSk7CisgICAgc291cF91cmlfc2V0X3BhdGgodXJpLmdldCgpLCBjb29r
aWUucGF0aC51dGY4KCkuZGF0YSgpKTsKKworICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4gdGFy
Z2V0Q29va2llKGNvb2tpZSk7CisgICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXNMaXN0KHNv
dXBfY29va2llX2phcl9nZXRfY29va2llX2xpc3QoY29va2llU3RvcmFnZSgpLCB1cmkuZ2V0KCks
IFRSVUUpKTsKKyAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXNMaXN0LmdldCgpOyBpdGVt
OyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIEdVbmlxdWVQdHI8U291cENv
b2tpZT4gc291cENvb2tpZShzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSkpOwor
CisgICAgICAgIC8vIFVzZSAobmFtZSwgZG9tYWluLCBwYXRoKSBhcyB0aGUgcHJpbWFyeSBrZXkg
dG8gaWRlbnRpZnkgdGhlIGNvb2tpZS4KKyAgICAgICAgaWYgKGdfc3RyY21wMChzb3VwX2Nvb2tp
ZV9nZXRfbmFtZShzb3VwQ29va2llLmdldCgpKSwgc291cF9jb29raWVfZ2V0X25hbWUodGFyZ2V0
Q29va2llLmdldCgpKSkKKyAgICAgICAgICAgIHx8IGdfc3RyY21wMChzb3VwX2Nvb2tpZV9nZXRf
ZG9tYWluKHNvdXBDb29raWUuZ2V0KCkpLCBzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKHRhcmdldENv
b2tpZS5nZXQoKSkpCisgICAgICAgICAgICB8fCBnX3N0cmNtcDAoc291cF9jb29raWVfZ2V0X3Bh
dGgoc291cENvb2tpZS5nZXQoKSksIHNvdXBfY29va2llX2dldF9wYXRoKHRhcmdldENvb2tpZS5n
ZXQoKSkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc291cF9jb29raWVfamFy
X2RlbGV0ZV9jb29raWUoY29va2llU3RvcmFnZSgpLCBzb3VwQ29va2llLmdldCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogfQogCiBWZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmdldEFsbENvb2tpZXMoKQpAQCAtMzM2LDEwICszMzMsMTcgQEAgVmVjdG9yPENvb2tpZT4g
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRBbGxDb29raWVzKCkKICAgICByZXR1cm4geyB9Owog
fQogCi1WZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldENvb2tpZXMoY29u
c3QgVVJMJikKK1ZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0Q29va2ll
cyhjb25zdCBVUkwmIHVybCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBXSzIgdG8g
dXNlLgotICAgIHJldHVybiB7IH07CisgICAgVmVjdG9yPENvb2tpZT4gY29va2llczsKKyAgICBH
VW5pcXVlUHRyPFNvdXBVUkk+IHVyaSA9IHVybC5jcmVhdGVTb3VwVVJJKCk7CisgICAgR1VuaXF1
ZVB0cjxHU0xpc3Q+IGNvb2tpZXNMaXN0KHNvdXBfY29va2llX2phcl9nZXRfY29va2llX2xpc3Qo
Y29va2llU3RvcmFnZSgpLCB1cmkuZ2V0KCksIFRSVUUpKTsKKyAgICBmb3IgKEdTTGlzdCogaXRl
bSA9IGNvb2tpZXNMaXN0LmdldCgpOyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7
CisgICAgICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4gc291cENvb2tpZShzdGF0aWNfY2FzdDxT
b3VwQ29va2llKj4oaXRlbS0+ZGF0YSkpOworICAgICAgICBjb29raWVzLmFwcGVuZChXZWJDb3Jl
OjpDb29raWUoc291cENvb2tpZS5nZXQoKSkpOworICAgIH0KKworICAgIHJldHVybiBjb29raWVz
OwogfQogCiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Zmx1c2hDb29raWVTdG9yZSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IDYxMzU0YTNhZjZlLi5lNzIyNDU3MDIwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
NCBAQAorMjAxNy0xMC0zMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvQGVuZGxlc3NtLmNv
bT4KKworICAgICAgICBbR1RLXSBOZXcgQVBJIHRvIGFkZCwgcmV0cmlldmUgYW5kIGRlbGV0ZSBj
b29raWVzIHZpYSBXZWJLaXRDb29raWVNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQVBJIHRvIFdlYktpdENvb2tpZU1hbmFn
ZXIgdG8gYWRkLCByZXRyaWV2ZSBhbmQgZGVsZXRlIGNvbXBsZXRlCisgICAgICAgIGNvb2tpZXMg
aW50by9vdXQtb2YgYSBydW5uaW5nIHNlc3Npb24sIGFuZCB1cGRhdGVkIGRvY3VtZW50YXRpb24g
c2VjdGlvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFu
YWdlci5jcHA6CisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZSk6IE5l
dyBmdW5jdGlvbi4KKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2Zp
bmlzaCk6IERpdHRvLgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVz
KTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmlu
aXNoKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tp
ZSk6IERpdHRvLgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVf
ZmluaXNoKTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2ll
TWFuYWdlci5oOiBBZGRlZCBuZXcgZnVuY3Rpb25zLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
d3BlL1dlYktpdENvb2tpZU1hbmFnZXIuaDogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6IERpdHRvLgorCiAyMDE3LTEw
LTIyICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtp
T1NdIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzIHNwZW5kcyB+MTUwbXMgc3Bpbm5p
bmcgdXAgQVZTeXN0ZW1Db250cm9sbGVyIG9uIHNvbWUgZGV2aWNlcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApp
bmRleCBlZWQyNzAyNjY0Ny4uYTM5N2M5ZDg1NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEVuZGxlc3MgTW9iaWxlLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAt
MjcsNiArMjgsNyBAQAogI2luY2x1ZGUgIldlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUu
aCIKICNpbmNsdWRlICJXZWJLaXRXZWJzaXRlRGF0YVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJz
aXRlRGF0YVJlY29yZC5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8
cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgpAQCAtMjMyLDYgKzIzNCwxOTQgQEAgV2ViS2l0Q29va2ll
QWNjZXB0UG9saWN5IHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeV9maW5p
c2goV2ViS2l0Q28KICAgICByZXR1cm4gcmV0dXJuVmFsdWUgPT0gLTEgPyBXRUJLSVRfQ09PS0lF
X1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkgOiBzdGF0aWNfY2FzdDxXZWJLaXRDb29raWVB
Y2NlcHRQb2xpY3k+KHJldHVyblZhbHVlKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfY29va2llX21h
bmFnZXJfYWRkX2Nvb2tpZToKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0Q29va2llTWFu
YWdlcgorICogQGNvb2tpZTogdGhlICNTb3VwQ29va2llIHRvIGJlIGFkZGVkCisgKiBAY2FuY2Vs
bGFibGU6IChhbGxvdy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQor
ICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNh
bGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJl
KTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJv
bm91c2x5IGFkZCBhICNTb3VwQ29va2llIHRvIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UsIHdoaWNo
IGlzIG5vdCBwZXJzaXN0ZW50CisgKiB1bmxlc3MgeW91IGV4cGxpY2l0bHkgY2FsbCB3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSgpLgorICoKKyAqIFdoZW4gdGhl
IG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2Fu
IHRoZW4gY2FsbAorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKCkg
dG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqLwordm9pZCB3ZWJraXRfY29v
a2llX21hbmFnZXJfYWRkX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2VyICptYW5hZ2VyLCBTb3Vw
Q29va2llICpjb29raWUsIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKGNvb2tpZSk7CisKKyAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBjb29raWVzOworICAg
IGNvb2tpZXMuYXBwZW5kKFdlYkNvcmU6OkNvb2tpZShjb29raWUpKTsKKworICAgIEdSZWZQdHI8
R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwg
Y2FsbGJhY2ssIHVzZXJEYXRhKSk7CisKKyAgICBhdXRvIHNlc3Npb25JRCA9IHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikud2Vi
c2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpOworICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29s
cyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2
LT5kYXRhTWFuYWdlcik7CisKKyAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90
byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCisgICAgLy8gb2Yg
dGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRvIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0
IHByb2Nlc3MgcG9vbC4KKyAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5zZXRDb29raWUoc2Vzc2lvbklELCBjb29raWUsIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICBpZiAoZXJy
b3IgIT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgeworICAgICAgICAgICAgLy8gVGhpcyBj
YW4gb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlcmUgdGhlIHdlYiBwcm9jZXNzIGlzIG5vdCBhdmFp
bGFibGUsCisgICAgICAgICAgICAvLyBjb25zaWRlciB0aGUgb3BlcmF0aW9uICJjYW5jZWxsZWQi
IGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhlIGNsaWVudC4KKyAgICAgICAgICAgIGdfdGFz
a19yZXR1cm5fbmV3X2Vycm9yKHRhc2suZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FO
Q0VMTEVELCBfKCJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgp
LCBUUlVFKTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3ZWJraXRfY29va2llX21hbmFnZXJfYWRk
X2Nvb2tpZV9maW5pc2g6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktpdENvb2tpZU1hbmFn
ZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVycm9yOiByZXR1cm4gbG9jYXRp
b24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAqIEZpbmlzaCBhbiBhc3luY2hy
b25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nv
b2tpZSgpLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjb29raWUgd2FzIGFkZGVkIG9y
ICVGQUxTRSBpbiBjYXNlIG9mIGVycm9yLgorICovCitnYm9vbGVhbiB3ZWJraXRfY29va2llX21h
bmFnZXJfYWRkX2Nvb2tpZV9maW5pc2goV2ViS2l0Q29va2llTWFuYWdlciAqbWFuYWdlciwgR0Fz
eW5jUmVzdWx0ICpyZXN1bHQsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSwgRkFMU0UpOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19pc192YWxpZChyZXN1bHQsIG1hbmFnZXIpLCBGQUxT
RSk7CisKKyAgICByZXR1cm4gZ190YXNrX3Byb3BhZ2F0ZV9ib29sZWFuKEdfVEFTSyhyZXN1bHQp
LCBlcnJvcik7Cit9CisKKy8qKgorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVz
OgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29raWVNYW5hZ2VyCisgKiBAdXJpOiB0
aGUgI1NvdXBVUkkgZm9yIHRoZSBkb21haW4gb2YgdGhlIGNvb2tpZXMgdG8gYmUgcmV0cmlldmVk
CisgKiBAY2FuY2VsbGFibGU6IChhbGxvdy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxM
IHRvIGlnbm9yZQorICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNh
bGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2Rh
dGE6IChjbG9zdXJlKTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoK
KyAqIEFzeW5jaHJvbm91c2x5IGdldCBhIGxpc3Qgb2YgI1NvdXBDb29raWUgZnJvbSBAY29va2ll
X21hbmFnZXIgYXNzb2NpYXRlZCB3aXRoIEB1cmksIHdoaWNoCisgKiBtdXN0IGJlIGVpdGhlciBh
bmQgSFRUUCBvciBhbiBIVFRQUyBVUkwuCisgKgorICogV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZp
bmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhlbiBjYWxsCisgKiB3
ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNoKCkgdG8gZ2V0IHRoZSByZXN1
bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqLwordm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0
X2Nvb2tpZXMoV2ViS2l0Q29va2llTWFuYWdlciAqbWFuYWdlciwgU291cFVSSSAqdXJpLCBHQ2Fu
Y2VsbGFibGUgKmNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9p
bnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVf
TUFOQUdFUihtYW5hZ2VyKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChTT1VQX1VSSV9WQUxJRF9G
T1JfSFRUUCh1cmkpKTsKKworICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190
YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CisKKyAg
ICBhdXRvIHNlc3Npb25JRCA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZSht
YW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikud2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgp
OworICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7CisKKyAgICAvLyBD
b29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ug
b24gZGlzayByZWdhcmRsZXNzCisgICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRvIHRo
ZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KKyAgICBwcm9jZXNz
UG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVz
KHNlc3Npb25JRCwgV2ViQ29yZTo6VVJMKHVyaSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENhbGxiYWNrQmFzZTo6RXJyb3Ig
ZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yICE9IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUp
IHsKKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGluIGNhc2VzIHdoZXJlIHRo
ZSB3ZWIgcHJvY2VzcyBpcyBub3QgYXZhaWxhYmxlLAorICAgICAgICAgICAgLy8gY29uc2lkZXIg
dGhlIG9wZXJhdGlvbiAiY2FuY2VsbGVkIiBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBj
bGllbnQuCisgICAgICAgICAgICBnX3Rhc2tfcmV0dXJuX25ld19lcnJvcih0YXNrLmdldCgpLCBH
X0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCwgXygiT3BlcmF0aW9uIHdhcyBjYW5jZWxs
ZWQiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBHTGlzdCog
Y29va2llc19saXN0ID0gbnVsbHB0cjsKKyAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29r
aWVzKQorICAgICAgICAgICAgY29va2llc19saXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2llc19s
aXN0LCBjb29raWUpOworCisgICAgICAgIGdfdGFza19yZXR1cm5fcG9pbnRlcih0YXNrLmdldCgp
LCBnX2xpc3RfcmV2ZXJzZShjb29raWVzX2xpc3QpLCBbXShncG9pbnRlciBkYXRhKSB7CisgICAg
ICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKHN0YXRpY19jYXN0PEdMaXN0Kj4oZGF0YSksIHJlaW50
ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KHNvdXBfY29va2llX2ZyZWUpKTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKKy8qKgorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29r
aWVzX2ZpbmlzaDoKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0Q29va2llTWFuYWdlcgor
ICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJldHVybiBsb2NhdGlvbiBm
b3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNoIGFuIGFzeW5jaHJvbm91
cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
cygpLgorICoKKyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgU291cENvb2tpZSkgKHRyYW5zZmVy
IGZ1bGwpOiBBICNHU0xpc3Qgb2YgI1NvdXBDb29raWUgaW5zdGFuY2VzCisgKiAgICBvciAlTlVM
TCBpbiBjYXNlIG9mIGVycm9yLgorICovCitHTGlzdCogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9jb29raWVzX2ZpbmlzaChXZWJLaXRDb29raWVNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1
bHQgKnJlc3VsdCwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpLCBudWxscHRyKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgbnVsbHB0cik7
CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxHTGlzdCo+KGdfdGFza19wcm9wYWdhdGVf
cG9pbnRlcihHX1RBU0socmVzdWx0KSwgZXJyb3IpKTsKK30KKworLyoqCisgKiB3ZWJraXRfY29v
a2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZToKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0
Q29va2llTWFuYWdlcgorICogQG5hbWU6IHRoZSBuYW1lIHRoZSBjb29raWUgdG8gYmUgZGVsZXRl
ZAorICogQGRvbWFpbjogdGhlIGRvbWFpbiBvZiB0aGUgY29va2llIHRvIGJlIGRlbGV0ZWQKKyAq
IEBwYXRoOiB0aGUgcGF0aCBvZiB0aGUgY29va2llIHRvIGJlIGRlbGV0ZWQKKyAqIEBjYW5jZWxs
YWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisg
KiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2Fs
bCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUp
OiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9u
b3VzbHkgZGVsZXRlIGEgI1NvdXBDb29raWUgZnJvbSB0aGUgY3VycmVudCBzZXNzaW9uLCBhcyB1
bmlxdWVsbHkgaWRlbnRpZmllZAorICogYnkgaXRzIG5hbWUsIGRvbWFpbiBhbmQgcGF0aC4KKyAq
CisgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNh
bGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVf
Y29va2llX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8K
K3ZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUoV2ViS2l0Q29va2llTWFu
YWdlciAqbWFuYWdlciwgY29uc3QgZ2NoYXIgKm5hbWUsIGNvbnN0IGdjaGFyICpkb21haW4sIGNv
bnN0IGdjaGFyICpwYXRoLCBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNh
bGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChuYW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGRvbWFpbik7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChwYXRoKTsKKworICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190
YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CisKKyAg
ICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIG5hbWUsIGRvbWFpbiBhbmQgcGF0aCwgd2hpY2gg
aXMgd2hhdCB3aWxsIGJlIHVzZWQKKyAgICAvLyB0byBpZGVudGlmeSB0aGUgY29va2llIGluIFNv
dXBDb29raWVKYXIgaGVsZCBieSB0aGUgb3RoZXIgcHJvY2Vzcy4gSG93ZXZlciwKKyAgICAvLyB3
ZSBzdGlsbCBuZWVkIHRvIGNyZWF0ZSB0aGUgQ29va2llIHdpdGggYSBub24tZW1wdHkgdmFsdWUg
bm90IHRvIGdldCBkaXNjYXJkZWQKKyAgICAvLyBvbiBpdHMgd2F5IHRvIHRoZSBvdGhlciBwcm9j
ZXNzLCBzbyB3ZSBqdXN0IHBhc3MgdGhlIG5hbWUgYWdhaW4gdGhlcmUuCisgICAgV2ViQ29yZTo6
Q29va2llIHRhcmdldENvb2tpZShTdHJpbmc6OmZyb21VVEY4KG5hbWUpLCBTdHJpbmc6OmZyb21V
VEY4KG5hbWUpLCBTdHJpbmc6OmZyb21VVEY4KGRvbWFpbiksIFN0cmluZzo6ZnJvbVVURjgocGF0
aCksIC0xLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBTdHJpbmcoKSwgV2ViQ29yZTo6VVJMKCksIFZl
Y3Rvcjx1aW50MTZfdD4geyB9KTsKKworICAgIGF1dG8gc2Vzc2lvbklEID0gd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKS53ZWJz
aXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCk7CisgICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKKworICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3Rv
IHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKKyAgICAvLyBvZiB0
aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdG8gdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3Qg
cHJvY2VzcyBwb29sLgorICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIHRhcmdldENvb2tpZSwgW3Rh
c2sgPSBXVEZNb3ZlKHRhc2spXShDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAg
IGlmIChlcnJvciAhPSBDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKSB7CisgICAgICAgICAgICAv
LyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpbiBjYXNlcyB3aGVyZSB0aGUgd2ViIHByb2Nlc3MgaXMg
bm90IGF2YWlsYWJsZSwKKyAgICAgICAgICAgIC8vIGNvbnNpZGVyIHRoZSBvcGVyYXRpb24gImNh
bmNlbGxlZCIgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgY2xpZW50LgorICAgICAgICAg
ICAgZ190YXNrX3JldHVybl9uZXdfZXJyb3IodGFzay5nZXQoKSwgR19JT19FUlJPUiwgR19JT19F
UlJPUl9DQU5DRUxMRUQsIF8oIk9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkIikpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRh
c2suZ2V0KCksIFRSVUUpOworICAgIH0pOworfQorCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFu
YWdlcl9kZWxldGVfY29va2llX2ZpbmlzaDoKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0
Q29va2llTWFuYWdlcgorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJl
dHVybiBsb2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNo
IGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF9jb29raWVfbWFu
YWdlcl9kZWxldGVfY29va2llKCkuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNvb2tp
ZSB3YXMgYWRkZWQgb3IgJUZBTFNFIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK2dib29sZWFuIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaChXZWJLaXRDb29raWVNYW5h
Z2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgR0Vycm9yICoqZXJyb3IpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIp
LCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3Vs
dCwgbWFuYWdlciksIEZBTFNFKTsKKworICAgIHJldHVybiBnX3Rhc2tfcHJvcGFnYXRlX2Jvb2xl
YW4oR19UQVNLKHJlc3VsdCksIGVycm9yKTsKK30KKwogLyoqCiAgKiB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzOgogICogQGNvb2tpZV9tYW5hZ2VyOiBhICNX
ZWJLaXRDb29raWVNYW5hZ2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oCmluZGV4IGVlMTdkMjIwNDQ5Li4wZTRmMDExMTQ5
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29r
aWVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRD
b29raWVNYW5hZ2VyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgRW5kbGVzcyBNb2JpbGUsIEluYy4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNiw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDxnaW8vZ2lv
Lmg+CiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KIAogR19CRUdJTl9ERUNMUwpAQCAt
MTA3LDYgKzEwOSw0NCBAQCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3lf
ZmluaXNoICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlcgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAg
ICAgICAgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CiAKK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUgICAgICAgICAg
ICAgICAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2Vy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNvdXBDb29raWUgICAgICAgICAgICAgICAgICAgKmNvb2tpZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAg
ICAgICAgICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgICAgICBjYWxs
YmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZV9maW5pc2ggICAg
ICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAg
ICAgICAgICAqKmVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2Nvb2tpZXMgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAg
ICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU291cFVSSSAgICAgICAgICAgICAgICAgICAgICAqdXJp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgIHVz
ZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgR0xpc3QqCit3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0
X2Nvb2tpZXNfZmluaXNoICAgICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAg
ICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdF
cnJvciAgICAgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAg
ICAgICAgICAgICAgICAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICpkb21haW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAg
ICAgICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgICAgICBjYWxsYmFj
aywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2ggICAg
ICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Fz
eW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAg
ICAgICAqKmVycm9yKTsKKwogV0VCS0lUX0RFUFJFQ0FURURfRk9SKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9mZXRjaCkgdm9pZAogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5z
X3dpdGhfY29va2llcyAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tp
ZV9tYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
NC4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKaW5kZXggM2Y3ZDgyOGU1ZDcuLmVhZTEwODk2YzU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0
Mmd0ay00LjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTk5OSw2ICs5OTksMTIgQEAg
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5CiB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3lfZmluaXNoCiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0
X2RvbWFpbnNfd2l0aF9jb29raWVzCiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNf
d2l0aF9jb29raWVzX2ZpbmlzaAord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUKK3dl
YmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaAord2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2dldF9jb29raWVzCit3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNo
Cit3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZQord2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2RlbGV0ZV9jb29raWVfZmluaXNoCiB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nv
b2tpZXNfZm9yX2RvbWFpbgogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9hbGxfY29va2ll
cwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENv
b2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29v
a2llTWFuYWdlci5oCmluZGV4IDU5NTYzYWRkODg4Li5kYmVhNzg0ODJhYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmgK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgRW5kbGVzcyBNb2JpbGUsIEluYy4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC0yNiw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDxnaW8vZ2lvLmg+CiAjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KICNpbmNsdWRlIDx3cGUv
V2ViS2l0RGVmaW5lcy5oPgogCiBHX0JFR0lOX0RFQ0xTCkBAIC0xMDcsNiArMTA5LDQ0IEBAIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeV9maW5pc2ggICAgICAgIChXZWJL
aXRDb29raWVNYW5hZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJv
ciAgICAgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKIAorV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZSAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cENvb2tpZSAgICAgICAg
ICAgICAgICAgICAqY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxh
YmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAg
ICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtp
dF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaCAgICAgICAgICAgICAgIChXZWJLaXRD
b29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAg
ICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyAgICAg
ICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFu
YWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTb3VwVVJJICAgICAgICAgICAgICAgICAgICAgICp1cmksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAg
ICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICAgICAgY2Fs
bGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKKworV0VCS0lU
X0FQSSBHTGlzdCoKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llc19maW5pc2ggICAg
ICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAg
ICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdl
cl9kZWxldGVfY29va2llICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAg
ICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICpuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgKmRvbWFpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAg
ICAgICAgICAgICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAg
ICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9j
b29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaCAgICAgICAgICAgIChXZWJLaXRDb29r
aWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAg
ICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCiBX
RUJLSVRfREVQUkVDQVRFRF9GT1Iod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoKSB2
b2lkCiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzICAgICAg
ICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxh
YmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTUxM2U1NjY1ZTQuLjliZDIxYTRiZTM2IDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTctMTAtMzAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpb0BlbmRsZXNz
bS5jb20+CisKKyAgICAgICAgW0dUS10gTmV3IEFQSSB0byBhZGQsIHJldHJpZXZlIGFuZCBkZWxl
dGUgY29va2llcyB2aWEgV2ViS2l0Q29va2llTWFuYWdlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3IHRlc3QgY2FzZXMgdG8gY292ZXIg
dGhlIG5ld2x5IGFkZGVkIEFQSSBmb3IgV2ViS2l0Q29va2llTWFuYWdlcjoKKyAgICAgICAgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUsIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRf
Y29va2llcyBhbmQKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUu
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1h
bmFnZXIuY3BwOgorICAgICAgICAodGVzdENvb2tpZU1hbmFnZXJBZGRDb29raWUpOiBBZGRlZC4K
KyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyR2V0Q29va2llcyk6IEFkZGVkLgorICAgICAgICAo
dGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWUpOiBBZGRlZC4KKyAgICAgICAgKHNlcnZlckNh
bGxiYWNrKTogU21hbGwgdXBkYXRlIHRvIGF2b2lkIGhhcmRjb2Rpbmcgc3RyaW5ncyB3ZSByZXVz
ZS4KKyAgICAgICAgKGJlZm9yZUFsbCk6IEFkZGVkIHRoZSBuZXcgdGVzdCBjYXNlcyB0byB0aGUg
dGVzdCBzdWl0ZS4KKwogMjAxNy0xMC0yMSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KIAogICAgICAgICBUdXJuIG9uIGNjYWNoZSBmb3IgTWFjIGNtYWtlIGJ1aWxkcyBi
eSBkZWZhdWx0CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdM
aWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHTGliL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAppbmRleCAxYmU4Y2MwZDA2MC4uYTRhNjcyMmZi
ZjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0
Q29va2llTWFuYWdlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
TGliL1Rlc3RDb29raWVNYW5hZ2VyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1v
YmlsZSwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSwxMiArMjIsMjEgQEAKIAogI2lu
Y2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKICNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR1VuaXF1ZVB0clNvdXAuaD4KICNpbmNsdWRlIDxnbGliL2dzdGRpby5o
PgogCiBzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKIAogc3RhdGljIGNvbnN0IGNo
YXIqIGtGaXJzdFBhcnR5RG9tYWluID0gIjEyNy4wLjAuMSI7CiBzdGF0aWMgY29uc3QgY2hhciog
a1RoaXJkUGFydHlEb21haW4gPSAibG9jYWxob3N0IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtD
b29raWVOYW1lID0gImZvbyI7CitzdGF0aWMgY29uc3QgY2hhcioga0Nvb2tpZVZhbHVlID0gImJh
ciI7CitzdGF0aWMgY29uc3QgY2hhcioga0Nvb2tpZVBhdGggPSAiLyI7CisKK3N0YXRpYyBjb25z
dCBjaGFyKiBrQ29va2llUGF0aE5ldyA9ICIvbmV3IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrQ29v
a2llVmFsdWVOZXcgPSAibmV3LXZhbHVlIjsKKwogc3RhdGljIGNvbnN0IGNoYXIqIGtJbmRleEh0
bWxGb3JtYXQgPQogICAgICI8aHRtbD48Ym9keT4iCiAgICAgIiA8cD5XZWJLaXRHVEsrIENvb2tp
ZSBNYW5hZ2VyIHRlc3Q8L3A+IgpAQCAtNDksNyArNTksMTAgQEAgcHVibGljOgogICAgICAgICAs
IG1fY29va2llTWFuYWdlcih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyKHdl
YmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpKSkKICAgICAgICAgLCBtX2FjY2Vw
dFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpCiAgICAg
ICAgICwgbV9kb21haW5zKDApCisgICAgICAgICwgbV9jb29raWVzKDApCisgICAgICAgICwgbV9j
b29raWVBZGRlZChmYWxzZSkKICAgICAgICAgLCBtX2Nvb2tpZXNDaGFuZ2VkKGZhbHNlKQorICAg
ICAgICAsIG1fY29va2llRGVsZXRlZChmYWxzZSkKICAgICAgICAgLCBtX2ZpbmlzaExvb3BXaGVu
Q29va2llc0NoYW5nZShmYWxzZSkKICAgICB7CiAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9nZXRfY29va2llX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dl
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJW
aWV3KSkpID09IG1fY29va2llTWFuYWdlcik7CkBAIC0xMDYsNiArMTE5LDY3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fYWNjZXB0UG9saWN5OwogICAgIH0KIAorICAgIHN0YXRpYyB2b2lk
IGFkZENvb2tpZVJlYWR5Q2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJl
c3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBHVW5pcXVlT3V0UHRyPEdF
cnJvcj4gZXJyb3I7CisgICAgICAgIGJvb2wgYWRkZWQgPSB3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZV9maW5pc2goV0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iamVjdCksIHJlc3VsdCwg
JmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKworICAg
ICAgICBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvb2tpZU1hbmFnZXJU
ZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5tX2Nvb2tpZUFkZGVkID0gYWRkZWQ7Cisg
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAg
Ym9vbCBhZGRDb29raWUoU291cENvb2tpZSogY29va2llKQorICAgIHsKKyAgICAgICAgbV9jb29r
aWVBZGRlZCA9IGZhbHNlOworICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tp
ZShtX2Nvb2tpZU1hbmFnZXIsIGNvb2tpZSwgMCwgYWRkQ29va2llUmVhZHlDYWxsYmFjaywgdGhp
cyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKworICAgICAgICByZXR1
cm4gbV9jb29raWVBZGRlZDsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBnZXRDb29raWVzUmVh
ZHlDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRl
ciB1c2VyRGF0YSkKKyAgICB7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsK
KyAgICAgICAgR0xpc3QqIGNvb2tpZXMgPSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tp
ZXNfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmplY3QpLCByZXN1bHQsICZlcnJvci5v
dXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisKKyAgICAgICAgQ29v
a2llTWFuYWdlclRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVz
ZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+bV9jb29raWVzID0gY29va2llczsKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHTGlzdCogZ2V0
Q29va2llcyhTb3VwVVJJKiB1cmkpCisgICAgeworICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1f
Y29va2llcywgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oc291cF9jb29raWVfZnJl
ZSkpOworICAgICAgICBtX2Nvb2tpZXMgPSAwOworICAgICAgICB3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2Nvb2tpZXMobV9jb29raWVNYW5hZ2VyLCB1cmksIDAsIGdldENvb2tpZXNSZWFkeUNh
bGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisg
ICAgICAgIHJldHVybiBtX2Nvb2tpZXM7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVsZXRl
Q29va2llUmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0
LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9y
PiBlcnJvcjsKKyAgICAgICAgYm9vbCBhZGRlZCA9IHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llX2ZpbmlzaChXRUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KSwgcmVzdWx0LCAm
ZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworCisgICAg
ICAgIENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2llTWFuYWdlclRl
c3QqPih1c2VyRGF0YSk7CisgICAgICAgIHRlc3QtPm1fY29va2llQWRkZWQgPSBhZGRlZDsKKyAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBi
b29sIGRlbGV0ZUNvb2tpZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBkb21haW4sIGNv
bnN0IGNoYXIqIHBhdGgpCisgICAgeworICAgICAgICBtX2Nvb2tpZURlbGV0ZWQgPSBmYWxzZTsK
KyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUobV9jb29raWVNYW5h
Z2VyLCBuYW1lLCBkb21haW4sIHBhdGgsIDAsIGRlbGV0ZUNvb2tpZVJlYWR5Q2FsbGJhY2ssIHRo
aXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICAgICAgcmV0
dXJuIG1fY29va2llRGVsZXRlZDsKKyAgICB9CisKICAgICB2b2lkIHNldEFjY2VwdFBvbGljeShX
ZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQogICAgIHsKICAgICAgICAgd2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdlciwgcG9saWN5KTsK
QEAgLTE3Myw3ICsyNDcsMTAgQEAgcHVibGljOgogICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1f
Y29va2llTWFuYWdlcjsKICAgICBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgbV9hY2NlcHRQb2xp
Y3k7CiAgICAgY2hhcioqIG1fZG9tYWluczsKKyAgICBHTGlzdCogbV9jb29raWVzOworICAgIGJv
b2wgbV9jb29raWVBZGRlZDsKICAgICBib29sIG1fY29va2llc0NoYW5nZWQ7CisgICAgYm9vbCBt
X2Nvb2tpZURlbGV0ZWQ7CiAgICAgYm9vbCBtX2ZpbmlzaExvb3BXaGVuQ29va2llc0NoYW5nZTsK
ICAgICBHVW5pcXVlUHRyPGNoYXI+IG1fY29va2llc1RleHRGaWxlOwogICAgIEdVbmlxdWVQdHI8
Y2hhcj4gbV9jb29raWVzU1FMaXRlRmlsZTsKQEAgLTIxMSw2ICsyODgsMjI0IEBAIHN0YXRpYyB2
b2lkIHRlc3RDb29raWVNYW5hZ2VyQWNjZXB0UG9saWN5KENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyCiAgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlu
cyksID09LCAwKTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJBZGRDb29raWUo
Q29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gTG9hZCB0
aGUgaHRtbCBjb250ZW50LCB3aXRoIE5PX1RISVJEX1BBUlRZIGFjY2VwdCBwb2xpY3ksIHdoaWNo
IHdpbGwgYXV0b21hdGljYWxseSBhZGQgb25lIGNvb2tpZS4KKyAgICB0ZXN0LT5zZXRBY2NlcHRQ
b2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgp
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisKKyAgICAvLyBD
aGVjayB0aGUgY29va2llcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBmb3IgdGhlIGRvbWFpbi4KKyAg
ICBHVW5pcXVlUHRyPGNoYXI+IGRvbWFpblVSTChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBT
T1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICBHVW5pcXVlUHRy
PFNvdXBVUkk+IHVyaShzb3VwX3VyaV9uZXcoZG9tYWluVVJMLmdldCgpKSk7CisgICAgR0xpc3Qq
IGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tpZXMpLCA9PSwgMSk7CisKKyAgICBTb3Vw
Q29va2llKiBmb3VuZENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihmb3VuZENvb2tp
ZXMtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFtZShmb3Vu
ZENvb2tpZSksID09LCBrQ29va2llTmFtZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29v
a2llX2dldF9kb21haW4oZm91bmRDb29raWUpLCA9PSwga0ZpcnN0UGFydHlEb21haW4pOworICAg
IGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfcGF0aChmb3VuZENvb2tpZSksID09LCBr
Q29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF92YWx1ZShm
b3VuZENvb2tpZSksID09LCBrQ29va2llVmFsdWUpOworCisgICAgLy8gVHJ5IHRvIGFkZCBub3cg
YSBjb29raWUgd2l0aCBzYW1lIChuYW1lLCBkb21haW4sIHBhdGgpIHRoYW4gdGhlIG9uZXMgYWxy
ZWFkeSBhZGRlZC4KKyAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IGZpcnN0Q29va2llKHNvdXBf
Y29va2llX25ldyhrQ29va2llTmFtZSwga0Nvb2tpZVZhbHVlTmV3LCBrRmlyc3RQYXJ0eURvbWFp
biwga0Nvb2tpZVBhdGgsIFNPVVBfQ09PS0lFX01BWF9BR0VfT05FX0hPVVIpKTsKKyAgICB0ZXN0
LT5hZGRDb29raWUoZmlyc3RDb29raWUuZ2V0KCkpOworCisgICAgLy8gU3RpbGwgb25lIGNvb2tp
ZSwgc2luY2UgKG5hbWUsIGRvbWFpbiwgcGF0aCkgYXJlIHRoZSBzYW1lIHRoYW4gdGhlIGFscmVh
ZHkgZXhpc3RpbmcKKyAgICAvLyBvbmUsIGJ1dCB0aGUgbmV3IHZhbHVlIGlzIG5vdyBzdG9yZWQg
YXMgcmVwbGFjZWQgYnkgdGhlIHJlY2VudGx5IGFkZGVkIGNvb2tpZS4KKyAgICBmb3VuZENvb2tp
ZXMgPSB0ZXN0LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdf
bGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDEpOworCisgICAgZm91bmRDb29raWUgPSBz
dGF0aWNfY2FzdDxTb3VwQ29va2llKj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoc291cF9jb29raWVfZ2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZU5h
bWUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKGZvdW5kQ29v
a2llKSwgPT0sIGtGaXJzdFBhcnR5RG9tYWluKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9j
b29raWVfZ2V0X3BhdGgoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tp
ZVZhbHVlTmV3KTsKKworICAgIC8vIE5vdyBjcmVhdGUgYW5vdGhlciBjb29raWUgd2l0aCBhIGRp
ZmZlcmVudCBwYXRoIGFuZCBhZGQgaXQsIHVzaW5nIGEgSFRUUFMgVVJMIHRoaXMgdGltZS4KKyAg
ICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IHNlY29uZENvb2tpZShzb3VwX2Nvb2tpZV9uZXcoa0Nv
b2tpZU5hbWUsIGtDb29raWVWYWx1ZU5ldywga0ZpcnN0UGFydHlEb21haW4sIGtDb29raWVQYXRo
TmV3LCBTT1VQX0NPT0tJRV9NQVhfQUdFX09ORV9IT1VSKSk7CisgICAgdGVzdC0+YWRkQ29va2ll
KHNlY29uZENvb2tpZS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgo
dGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOworCisgICAgLy8gUmV0cmlldmUgdGhlIGxpc3Qg
b2YgY29va2llcyBmb3IgdGhlIHNhbWUgZG9tYWluIGFuZCBwYXRoIGFnYWluIG5vdyBhbmQgY2hl
Y2suCisgICAgZG9tYWluVVJMLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJXM6Ly8lcyVzIiwgU09V
UF9VUklfU0NIRU1FX0hUVFAsIGtGaXJzdFBhcnR5RG9tYWluLCBrQ29va2llUGF0aE5ldykpOwor
ICAgIHVyaS5yZXNldChzb3VwX3VyaV9uZXcoZG9tYWluVVJMLmdldCgpKSk7CisgICAgZm91bmRD
b29raWVzID0gdGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworCisgICAgLy8gV2UgaGF2ZSBu
b3cgMiBjb29raWVzIHRoYXQgd291bGQgYXBwbHkgdG8gdGhlIHBhc3NlZCBVUkwsIG9uZSBpcyB0
aGUgY29va2llIGluaXRpYWxseQorICAgIC8vIGxvYWRlZCB3aXRoIHRoZSB3ZWIgY29udGVudCBh
bmQgdGhlIG90aGVyIGNvb2tpZSB0aGUgb25lIHdlIG1hbnVhbGx5IGFkZGVkLgorICAgIGdfYXNz
ZXJ0X25vbm51bGwoZm91bmRDb29raWVzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xl
bmd0aChmb3VuZENvb2tpZXMpLCA9PSwgMik7CisKKyAgICAvLyBBZGQgYSB0aGlyZCBuZXcgY29v
a2llIGZvciBhIGRpZmZlcmVudCBkb21haW4gdGhhbiB0aGUgcHJldmlvdXMgb25lcy4KKyAgICBH
VW5pcXVlUHRyPFNvdXBDb29raWU+IHRoaXJkQ29va2llKHNvdXBfY29va2llX25ldyhrQ29va2ll
TmFtZSwga0Nvb2tpZVZhbHVlTmV3LCBrVGhpcmRQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcs
IFNPVVBfQ09PS0lFX01BWF9BR0VfT05FX0hPVVIpKTsKKyAgICB0ZXN0LT5hZGRDb29raWUodGhp
cmRDb29raWUuZ2V0KCkpOworCisgICAgLy8gT25seSBvbmUgY29va2llIG5vdywgc2luY2UgdGhl
IGRvbWFpbiBpcyBkaWZmZXJlbnQuCisgICAgZG9tYWluVVJMLnJlc2V0KGdfc3RyZHVwX3ByaW50
ZigiJXM6Ly8lcyVzIiwgU09VUF9VUklfU0NIRU1FX0hUVFAsIGtUaGlyZFBhcnR5RG9tYWluLCBr
Q29va2llUGF0aE5ldykpOworICAgIHVyaS5yZXNldChzb3VwX3VyaV9uZXcoZG9tYWluVVJMLmdl
dCgpKSk7CisgICAgZm91bmRDb29raWVzID0gdGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAxKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9
PSwgMik7CisKKyAgICBmb3VuZENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihmb3Vu
ZENvb2tpZXMtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFt
ZShmb3VuZENvb2tpZSksID09LCBrQ29va2llTmFtZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNv
dXBfY29va2llX2dldF9kb21haW4oZm91bmRDb29raWUpLCA9PSwga1RoaXJkUGFydHlEb21haW4p
OworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfcGF0aChmb3VuZENvb2tpZSks
ID09LCBrQ29va2llUGF0aE5ldyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dl
dF92YWx1ZShmb3VuZENvb2tpZSksID09LCBrQ29va2llVmFsdWVOZXcpOworCisgICAgLy8gRmlu
YWxseSwgZGVsZXRlIGFsbCBjb29raWVzIGFuZCBjaGVjayB0aGV5IGFyZSBhbGwgZ29uZS4KKyAg
ICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9s
ZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
Q29va2llTWFuYWdlckdldENvb2tpZXMoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgLy8gTG9hZCB0aGUgaHRtbCBjb250ZW50IGFuZCByZXRyaWV2ZSB0aGUg
MiBjb29raWVzIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2l0aCBBTFdBWVMgcG9saWN5LgorICAgIHRl
c3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsK
KyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIiku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMik7CisKKyAg
ICAvLyBSZXRyaWV2ZSB0aGUgZmlyc3QgY29va2llIHVzaW5nIGEgSFRUUCBzY2hlbWUuCisgICAg
R1VuaXF1ZVB0cjxjaGFyPiBkb21haW5VUkwoZ19zdHJkdXBfcHJpbnRmKCIlczovLyVzIiwgU09V
UF9VUklfU0NIRU1FX0hUVFAsIGtGaXJzdFBhcnR5RG9tYWluKSk7CisgICAgR1VuaXF1ZVB0cjxT
b3VwVVJJPiB1cmkoc291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkpOworICAgIEdMaXN0KiBm
b3VuZENvb2tpZXMgPSB0ZXN0LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRf
bm9ubnVsbChmb3VuZENvb2tpZXMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3Ro
KGZvdW5kQ29va2llcyksID09LCAxKTsKKworICAgIFNvdXBDb29raWUqIGZvdW5kQ29va2llID0g
c3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGZvdW5kQ29va2llcy0+ZGF0YSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHNvdXBfY29va2llX2dldF9uYW1lKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVO
YW1lKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X2RvbWFpbihmb3VuZENv
b2tpZSksID09LCBrRmlyc3RQYXJ0eURvbWFpbik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBf
Y29va2llX2dldF9wYXRoKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVQYXRoKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3ZhbHVlKGZvdW5kQ29va2llKSwgPT0sIGtDb29r
aWVWYWx1ZSk7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgc2Vjb25kIGNvb2tpZSB1c2luZyBhIEhU
VFBTIHNjaGVtZS4KKyAgICBkb21haW5VUkwucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlczovLyVz
IiwgU09VUF9VUklfU0NIRU1FX0hUVFBTLCBrVGhpcmRQYXJ0eURvbWFpbikpOworICAgIHVyaS5y
ZXNldChzb3VwX3VyaV9uZXcoZG9tYWluVVJMLmdldCgpKSk7CisgICAgZm91bmRDb29raWVzID0g
dGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworICAgIGdfYXNzZXJ0X25vbm51bGwoZm91bmRD
b29raWVzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tpZXMp
LCA9PSwgMSk7CisKKyAgICBmb3VuZENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihm
b3VuZENvb2tpZXMtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRf
bmFtZShmb3VuZENvb2tpZSksID09LCBrQ29va2llTmFtZSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHNvdXBfY29va2llX2dldF9kb21haW4oZm91bmRDb29raWUpLCA9PSwga1RoaXJkUGFydHlEb21h
aW4pOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfcGF0aChmb3VuZENvb2tp
ZSksID09LCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dl
dF92YWx1ZShmb3VuZENvb2tpZSksID09LCBrQ29va2llVmFsdWUpOworCisgICAgLy8gQ3JlYXRl
IGEgbmV3IGNvb2tpZSBhbmQgYWRkIGl0IHRvIHRoZSBmaXJzdCBkb21haW4uCisgICAgR1VuaXF1
ZVB0cjxTb3VwQ29va2llPiBuZXdDb29raWUoc291cF9jb29raWVfbmV3KGtDb29raWVOYW1lLCBr
Q29va2llVmFsdWVOZXcsIGtGaXJzdFBhcnR5RG9tYWluLCBrQ29va2llUGF0aE5ldywgU09VUF9D
T09LSUVfTUFYX0FHRV9PTkVfSE9VUikpOworICAgIHRlc3QtPmFkZENvb2tpZShuZXdDb29raWUu
Z2V0KCkpOworCisgICAgLy8gV2Ugc2hvdWxkIGdldCAyIGNvb2tpZXMgdGhhdCB3b3VsZCBhcHBs
eSB0byB0aGUgc2FtZSBVUkwgcGFzc2VkLCBzaW5jZQorICAgIC8vIGh0dHA6Ly8xMjcuMC4wLjEv
bmV3IGlzIGEgc3Vic2V0IG9mIHRoZSBodHRwOi8vMTI3LjAuMC4xLyBVUkwuCisgICAgZG9tYWlu
VVJMLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJXM6Ly8lcyVzIiwgU09VUF9VUklfU0NIRU1FX0hU
VFAsIGtGaXJzdFBhcnR5RG9tYWluLCBrQ29va2llUGF0aE5ldykpOworICAgIHVyaS5yZXNldChz
b3VwX3VyaV9uZXcoZG9tYWluVVJMLmdldCgpKSk7CisgICAgZm91bmRDb29raWVzID0gdGVzdC0+
Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworICAgIGdfYXNzZXJ0X25vbm51bGwoZm91bmRDb29raWVz
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tpZXMpLCA9PSwg
Mik7CisKKyAgICAvLyBXZSBoYXZlIG5vdyAyIGNvb2tpZXMgdGhhdCB3b3VsZCBhcHBseSB0byB0
aGUgcGFzc2VkIFVSTCwgb25lIGlzIHRoZSBjb29raWUgaW5pdGlhbGx5CisgICAgLy8gbG9hZGVk
IHdpdGggdGhlIHdlYiBjb250ZW50IGFuZCB0aGUgb3RoZXIgY29va2llIHRoZSBvbmUgd2UgbWFu
dWFsbHkgYWRkZWQuCisgICAgZ19hc3NlcnRfbm9ubnVsbChmb3VuZENvb2tpZXMpOworICAgIGdf
YXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAyKTsKKworICAg
IGJvb2wgbmV3UGF0aENoZWNrZWQgPSBmYWxzZTsKKyAgICBjb25zdCBjaGFyKiBwYXRoRm91bmQg
PSBudWxscHRyOworICAgIGNvbnN0IGNoYXIqIHZhbHVlRm91bmQgPSBudWxscHRyOworICAgIGZv
ciAodWludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBmb3VuZENvb2tpZSA9IHN0YXRp
Y19jYXN0PFNvdXBDb29raWUqPihnX2xpc3RfbnRoX2RhdGEoZm91bmRDb29raWVzLCBpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFtZShmb3VuZENvb2tpZSks
ID09LCBrQ29va2llTmFtZSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9n
ZXRfZG9tYWluKGZvdW5kQ29va2llKSwgPT0sIGtGaXJzdFBhcnR5RG9tYWluKTsKKworICAgICAg
ICAvLyBDb29raWVzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIGZvciAndmFsdWUnIGFuZCAn
cGF0aCcsIHNvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgIC8vIHdlIGNoZWNrIGZvciBib3RoIHBv
c3NpYmlsaXRpZXMsIGJ1dCBkaWZmZXJlbnQgb25lcyBmb3IgZWFjaCBjb29raWUgZm91bmQuCisg
ICAgICAgIHBhdGhGb3VuZCA9IHNvdXBfY29va2llX2dldF9wYXRoKGZvdW5kQ29va2llKTsKKyAg
ICAgICAgdmFsdWVGb3VuZCA9IHNvdXBfY29va2llX2dldF92YWx1ZShmb3VuZENvb2tpZSk7Cisg
ICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgaWYgKG5ld1BhdGhDaGVja2VkKSB7Cisg
ICAgICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHBhdGhGb3VuZCwgPT0sIGtDb29raWVQYXRo
KTsKKyAgICAgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVGb3VuZCwgPT0sIGtDb29r
aWVWYWx1ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGdfYXNzZXJ0
X2NtcHN0cihwYXRoRm91bmQsID09LCBrQ29va2llUGF0aE5ldyk7CisgICAgICAgICAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHZhbHVlRm91bmQsID09LCBrQ29va2llVmFsdWVOZXcpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGdfc3RyY21wMChwYXRo
Rm91bmQsIGtDb29raWVQYXRoKSkgeworICAgICAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihw
YXRoRm91bmQsID09LCBrQ29va2llUGF0aE5ldyk7CisgICAgICAgICAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHZhbHVlRm91bmQsID09LCBrQ29va2llVmFsdWVOZXcpOworICAgICAgICAgICAgICAg
IG5ld1BhdGhDaGVja2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGdfc3RyY21wMChwYXRoRm91bmQsIGtDb29raWVQYXRoTmV3KSkgeworICAgICAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cihwYXRoRm91bmQsID09LCBrQ29va2llUGF0aCk7CisgICAgICAgICAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlRm91bmQsID09LCBrQ29va2llVmFsdWUpOworICAg
ICAgICAgICAgICAgIG5ld1BhdGhDaGVja2VkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBXZSBzaG91bGQgZ2V0IDEgY29va2llIG9ubHkgaWYgd2Ug
c3BlY2lmeSBodHRwOi8vMTI3LjAuMC4xLywgdGhvdWdoLgorICAgIGRvbWFpblVSTC5yZXNldChn
X3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFy
dHlEb21haW4pKTsKKyAgICB1cmkucmVzZXQoc291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkp
OworICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBn
X2Fzc2VydF9ub25udWxsKGZvdW5kQ29va2llcyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlz
dF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDEpOworCisgICAgZm91bmRDb29raWUgPSBzdGF0
aWNfY2FzdDxTb3VwQ29va2llKj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoc291cF9jb29raWVfZ2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2ll
KSwgPT0sIGtGaXJzdFBhcnR5RG9tYWluKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29r
aWVfZ2V0X3BhdGgoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZh
bHVlKTsKKworICAgIC8vIEZpbmFsbHksIGRlbGV0ZSBhbGwgY29va2llcyBhbmQgdHJ5IHRvIHJl
dHJpZXZlIHRoZW0gYWdhaW4sIG9uZSBieSBvbmUuCisgICAgdGVzdC0+ZGVsZXRlQWxsQ29va2ll
cygpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMo
KSksID09LCAwKTsKKworICAgIGRvbWFpblVSTC5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8v
JXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICB1cmku
cmVzZXQoc291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkpOworICAgIGZvdW5kQ29va2llcyA9
IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9udWxsKGZvdW5kQ29v
a2llcyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llKENv
b2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNldEFj
Y2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIEluaXRpYWxseSwg
dGhlcmUgc2hvdWxkIGJlIDIgY29va2llcyBhdmFpbGFibGUuCisgICAgZ19hc3NlcnRfY21waW50
KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgLy8gRGVs
ZXRlIHRoZSBjb29raWUgZm9yIHRoZSBmaXJzdCBwYXJ0eSBkb21haW4uCisgICAgdGVzdC0+ZGVs
ZXRlQ29va2llKGtDb29raWVOYW1lLCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGgpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09
LCAxKTsKKworICAgIC8vIFRyeSBkZWxldGluZyBhIG5vbi1leGlzdGVudCBjb29raWUgKHdyb25n
IG5hbWUpLgorICAgIHRlc3QtPmRlbGV0ZUNvb2tpZSgid3JvbmctbmFtZSIsIGtUaGlyZFBhcnR5
RG9tYWluLCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgo
dGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOworCisgICAgLy8gVHJ5IGRlbGV0aW5nIGEgbm9u
LWV4aXN0ZW50IGNvb2tpZSAod3JvbmcgZG9tYWluKS4KKyAgICB0ZXN0LT5kZWxldGVDb29raWUo
a0Nvb2tpZU5hbWUsICJ3cm9uZy1kb21haW4iLCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOworCisgICAg
Ly8gVHJ5IGRlbGV0aW5nIGEgbm9uLWV4aXN0ZW50IGNvb2tpZSAod3JvbmcgcGF0aCkuCisgICAg
dGVzdC0+ZGVsZXRlQ29va2llKGtDb29raWVOYW1lLCBrVGhpcmRQYXJ0eURvbWFpbiwgIndyb25n
LXBhdGgiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21h
aW5zKCkpLCA9PSwgMSk7CisKKyAgICAvLyBEZWxldGUgdGhlIGNvb2tpZSBmb3IgdGhlIHRoaXJk
IHBhcnR5IGRvbWFpbi4KKyAgICB0ZXN0LT5kZWxldGVDb29raWUoa0Nvb2tpZU5hbWUsIGtUaGly
ZFBhcnR5RG9tYWluLCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9s
ZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworCisgICAgLy8gRmluYWxseSwgYWRk
IGEgbmV3IGNvb2tpZSBub3cgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5kIGRlbGV0ZSBpdCBhZnRlcndh
cmRzLgorICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4gbmV3Q29va2llKHNvdXBfY29va2llX25l
dyhrQ29va2llTmFtZSwga0Nvb2tpZVZhbHVlTmV3LCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tp
ZVBhdGhOZXcsIFNPVVBfQ09PS0lFX01BWF9BR0VfT05FX0hPVVIpKTsKKyAgICB0ZXN0LT5hZGRD
b29raWUobmV3Q29va2llLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0
aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisgICAgdGVzdC0+ZGVsZXRlQ29va2llKGtD
b29raWVOYW1lLCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcpOworICAgIGdfYXNz
ZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKK30K
Kwogc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzKENvb2tpZU1hbmFn
ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIHRlc3QtPnNldEFjY2VwdFBvbGlj
eShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKQEAgLTM2MCwxMiArNjU1LDE0
IEBAIHN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1l
c3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqCiAgICAgfQogCiAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIGdjaGFyKiBoZWFkZXJfc3Ry
ID0gZ19zdHJkdXBfcHJpbnRmKCIlcz0lczsgTWF4LUFnZT02MCIsIGtDb29raWVOYW1lLCBrQ29v
a2llVmFsdWUpOworCiAgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW5kZXguaHRtbCIpKSB7
CiAgICAgICAgIGNoYXIqIGluZGV4SHRtbCA9IGdfc3RyZHVwX3ByaW50ZihrSW5kZXhIdG1sRm9y
bWF0LCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKLSAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIs
ICJmb289YmFyOyBNYXgtQWdlPTYwIik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3Jl
cGxhY2UobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29raWUiLCBoZWFkZXJfc3Ry
KTsKICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1RBS0UsIGluZGV4SHRtbCwgc3RybGVuKGluZGV4SHRtbCkpOwogICAg
IH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbWFnZS5wbmciKSkKLSAgICAgICAgc291
cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0
LUNvb2tpZSIsICJiYXo9cXV4OyBNYXgtQWdlPTYwIik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX3JlcGxhY2UobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29raWUiLCBo
ZWFkZXJfc3RyKTsKICAgICBlbHNlCiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CiAgICAgc291cF9tZXNzYWdlX2JvZHlfY29t
cGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CkBAIC0zNzcsNiArNjc0LDkgQEAgdm9pZCBi
ZWZvcmVBbGwoKQogICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CiAKICAgICBDb29r
aWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImFjY2VwdC1wb2xpY3ki
LCB0ZXN0Q29va2llTWFuYWdlckFjY2VwdFBvbGljeSk7CisgICAgQ29va2llTWFuYWdlclRlc3Q6
OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJhZGQtY29va2llIiwgdGVzdENvb2tpZU1hbmFn
ZXJBZGRDb29raWUpOworICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1h
bmFnZXIiLCAiZ2V0LWNvb2tpZXMiLCB0ZXN0Q29va2llTWFuYWdlckdldENvb2tpZXMpOworICAg
IENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiZGVsZXRlLWNv
b2tpZSIsIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llKTsKICAgICBDb29raWVNYW5hZ2Vy
VGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImRlbGV0ZS1jb29raWVzIiwgdGVzdENv
b2tpZU1hbmFnZXJEZWxldGVDb29raWVzKTsKICAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJX
ZWJLaXRDb29raWVNYW5hZ2VyIiwgImNvb2tpZXMtY2hhbmdlZCIsIHRlc3RDb29raWVNYW5hZ2Vy
Q29va2llc0NoYW5nZWQpOwogICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tp
ZU1hbmFnZXIiLCAicGVyc2lzdGVudC1zdG9yYWdlIiwgdGVzdENvb2tpZU1hbmFnZXJQZXJzaXN0
ZW50U3RvcmFnZSk7Ci0tIAoyLjE0LjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325431</attachid>
            <date>2017-10-31 04:27:27 -0700</date>
            <delta_ts>2017-11-09 10:57:08 -0800</delta_ts>
            <desc>Patch Proposal</desc>
            <filename>0001-GTK-New-API-to-add-retrieve-and-delete-cookies-via-W.patch</filename>
            <type>text/plain</type>
            <size>55025</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBmMDVlMjhiY2RiZjcyNTRhZGJlNWUyM2UyNDhlMWM4NWM3NGJlNjg0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpb0B3ZWJraXQub3Jn
PgpEYXRlOiBNb24sIDMwIE9jdCAyMDE3IDE3OjI1OjM4ICswMDAwClN1YmplY3Q6IFtQQVRDSF0g
W0dUS10gTmV3IEFQSSB0byBhZGQsIHJldHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEKIFdl
YktpdENvb2tpZU1hbmFnZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzkzMgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpTb3VyY2UvV2ViQ29yZToKCklt
cGxlbWVudGVkIHNldENvb2tpZSgpLCBnZXRDb29raWVzKCkgYW5kIGRlbGV0ZUNvb2tpZSgpIGlu
IHRoZSBTb3VwCmJhY2tlbmQsIGFuZCByZWZhY3RvcmVkIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMg
YW5kIGNvbnZlcnNpb25zIG91dCBvZgpOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwIGludG8gYSBu
ZXcgQ29va2llU291cC5jcHAgZmlsZSwgc28KdGhhdCB3ZSBub3cgY2FuIGNvbnZlcnQgYmV0d2Vl
biBTb3VwQ29va2llKiBhbmQgV2ViQ29yZTo6Q29va2llCmVhc2lseSBmcm9tIGFueXdoZXJlICh0
aGlzIGlzIG5vdyBuZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2VzcykuCgoqIFBsYXRmb3JtR1RLLmNt
YWtlOiBBZGQgQ29va2llU291cC5jcHAuCiogcGxhdGZvcm0vQ29va2llLmg6IEFkZCBkZWNsYXJh
dGlvbnMgZm9yIHRoZSBuZXcgaW1wbGljaXQgY29udmVyc2lvbnMuCiogcGxhdGZvcm0vU291cmNl
c1NvdXAudHh0OiBBZGQgQ29va2llU291cC5jcHAuCiogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nv
b2tpZVNvdXAuY3BwOiBBZGRlZC4KKFdlYkNvcmU6OkNvb2tpZTo6Q29va2llKTogTmV3IGNvbnN0
cnVjdG9yLCBjcmVhdGVzIGEgV2ViQ29yZTo6Q29va2llIG91dCBvZiBhIFNvdXBDb29raWUqLgoo
V2ViQ29yZTo6bXNUb1NvdXBEYXRlKTogTW92ZWQgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb25T
b3VwLmNwcC4KKFdlYkNvcmU6OkNvb2tpZTo6b3BlcmF0b3IgU291cENvb2tpZSAqIGNvbnN0KTog
TmV3IG92ZXJyaWRlLCBiYXNlZCBvbiB0b1NvdXBDb29raWUoKS4KKiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHA6CihXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OnNldENvb2tpZXMpOiBVc2VkIHRoZSBuZXcgaW1wbGljaXQgY29udmVyc2lv
bi4KKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llKTogTmV3bHkgaW1w
bGVtZW50ZWQuCihXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSk6
IE5ld2x5IGltcGxlbWVudGVkLgooV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRD
b29raWVzKTogTmV3bHkgaW1wbGVtZW50ZWQuCgpTb3VyY2UvV2ViS2l0OgoKQWRkZWQgbmV3IEFQ
SSB0byBXZWJLaXRDb29raWVNYW5hZ2VyIHRvIGFkZCwgcmV0cmlldmUgYW5kIGRlbGV0ZSBjb21w
bGV0ZQpjb29raWVzIGludG8vb3V0LW9mIGEgcnVubmluZyBzZXNzaW9uLCBhbmQgdXBkYXRlZCBk
b2N1bWVudGF0aW9uIHNlY3Rpb25zLgoKKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2ll
TWFuYWdlci5jcHA6Cih3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZSk6IE5ldyBmdW5j
dGlvbi4KKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaCk6IERpdHRvLgoo
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKTogRGl0dG8uCih3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNoKTogRGl0dG8uCih3ZWJraXRfY29va2llX21hbmFn
ZXJfZGVsZXRlX2Nvb2tpZSk6IERpdHRvLgood2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9j
b29raWVfZmluaXNoKTogRGl0dG8uCiogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFu
YWdlci5oOiBBZGRlZCBuZXcgZnVuY3Rpb25zLgoqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENv
b2tpZU1hbmFnZXIuaDogRGl0dG8uCiogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LTQuMC1zZWN0aW9ucy50eHQ6IERpdHRvLgoKVG9vbHM6CgpBZGRlZCBuZXcgdGVzdCBjYXNlcyB0
byBjb3ZlciB0aGUgbmV3bHkgYWRkZWQgQVBJIGZvciBXZWJLaXRDb29raWVNYW5hZ2VyOgp3ZWJr
aXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZSwgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9j
b29raWVzIGFuZAp3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZS4KCiogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVNYW5hZ2VyLmNwcDoKKHRlc3RDb29r
aWVNYW5hZ2VyQWRkQ29va2llKTogQWRkZWQuCih0ZXN0Q29va2llTWFuYWdlckdldENvb2tpZXMp
OiBBZGRlZC4KKHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llKTogQWRkZWQuCihzZXJ2ZXJD
YWxsYmFjayk6IFNtYWxsIHVwZGF0ZSB0byBhdm9pZCBoYXJkY29kaW5nIHN0cmluZ3Mgd2UgcmV1
c2UuCihiZWZvcmVBbGwpOiBBZGRlZCB0aGUgbmV3IHRlc3QgY2FzZXMgdG8gdGhlIHRlc3Qgc3Vp
dGUuCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgMjYgKysKIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlICAgICAgICAgICAg
ICAgICAgIHwgICAxICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oICAgICAgICAg
ICAgICAgICAgIHwgICAzICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNTb3VwLnR4
dCAgICAgICAgICAgIHwgICAxICsKIC4uLi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9D
b29raWVTb3VwLmNwcCAgIHwgIDc3ICsrKysrKwogLi4uL25ldHdvcmsvc291cC9OZXR3b3JrU3Rv
cmFnZVNlc3Npb25Tb3VwLmNwcCAgICAgfCAgNzAgKystLS0KIFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIxICsrCiAuLi4vVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwICAgICB8IDE5MCArKysrKysrKysrKysrCiAu
Li4vV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaCB8ICA0MCAr
KysKIC4uLi9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0ICAgICAgIHwg
ICA2ICsKIC4uLi9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFuYWdlci5o
IHwgIDQwICsrKwogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMTggKysKIC4uLi9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVNYW5hZ2VyLmNw
cCAgICAgICAgIHwgMzA0ICsrKysrKysrKysrKysrKysrKysrLQogMTMgZmlsZXMgY2hhbmdlZCwg
NzYyIGluc2VydGlvbnMoKyksIDM1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3VwLmNwcAoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAzZWU0OTYxZTU3MS4uY2ZkYzJhMTBiODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
OSBAQAorMjAxNy0xMC0zMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvQGVuZGxlc3NtLmNv
bT4KKworICAgICAgICBbR1RLXSBOZXcgQVBJIHRvIGFkZCwgcmV0cmlldmUgYW5kIGRlbGV0ZSBj
b29raWVzIHZpYSBXZWJLaXRDb29raWVNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBzZXRDb29raWUoKSwgZ2V0Q29va2ll
cygpIGFuZCBkZWxldGVDb29raWUoKSBpbiB0aGUgU291cAorICAgICAgICBiYWNrZW5kLCBhbmQg
cmVmYWN0b3JlZCBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCBjb252ZXJzaW9ucyBvdXQgb2YK
KyAgICAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cCBpbnRvIGEgbmV3IENvb2tpZVNvdXAu
Y3BwIGZpbGUsIHNvCisgICAgICAgIHRoYXQgd2Ugbm93IGNhbiBjb252ZXJ0IGJldHdlZW4gU291
cENvb2tpZSogYW5kIFdlYkNvcmU6OkNvb2tpZQorICAgICAgICBlYXNpbHkgZnJvbSBhbnl3aGVy
ZSAodGhpcyBpcyBub3cgbmVlZGVkIGZyb20gdGhlIFVJIFByb2Nlc3MpLgorCisgICAgICAgICog
UGxhdGZvcm1HVEsuY21ha2U6IEFkZCBDb29raWVTb3VwLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9Db29raWUuaDogQWRkIGRlY2xhcmF0aW9ucyBmb3IgdGhlIG5ldyBpbXBsaWNpdCBjb252ZXJz
aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzU291cC50eHQ6IEFkZCBDb29raWVTb3Vw
LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU291cC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29va2llOjpDb29raWUpOiBOZXcgY29uc3RydWN0b3Is
IGNyZWF0ZXMgYSBXZWJDb3JlOjpDb29raWUgb3V0IG9mIGEgU291cENvb2tpZSouCisgICAgICAg
IChXZWJDb3JlOjptc1RvU291cERhdGUpOiBNb3ZlZCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
blNvdXAuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q29va2llOjpvcGVyYXRvciBTb3VwQ29va2ll
ICogY29uc3QpOiBOZXcgb3ZlcnJpZGUsIGJhc2VkIG9uIHRvU291cENvb2tpZSgpLgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyk6IFVz
ZWQgdGhlIG5ldyBpbXBsaWNpdCBjb252ZXJzaW9uLgorICAgICAgICAoV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWUpOiBOZXdseSBpbXBsZW1lbnRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKTogTmV3bHkgaW1w
bGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldENv
b2tpZXMpOiBOZXdseSBpbXBsZW1lbnRlZC4KKwogMjAxNy0xMC0zMCAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBc3NlcnQgdGhhdCBubyBzY3JpcHQgaXMgZXhl
Y3V0ZWQgZHVyaW5nIExheW91dFBoYXNlOjpJblJlbmRlclRyZWVMYXlvdXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1HVEsuY21ha2UKaW5kZXggYjA3MzljMDE2NmMuLmIzZjc4ZjkyNzI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZQpAQCAtMTE0LDYgKzExNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNv
dXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKKyAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQ29va2llU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29v
a2llU3RvcmFnZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0NyZWRlbnRpYWxT
dG9yYWdlU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ29va2llLmgKaW5kZXggMDkzM2NjYTA3M2MuLmUwM2FmY2ViZDFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Db29raWUuaApAQCAtNjcsNiArNjcsOSBAQCBzdHJ1Y3QgQ29va2llIHsK
ICNpZmRlZiBfX09CSkNfXwogICAgIFdFQkNPUkVfRVhQT1JUIENvb2tpZShOU0hUVFBDb29raWUg
Kik7CiAgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgTlNIVFRQQ29va2llICooKSBjb25zdDsK
KyNlbGlmIFVTRShTT1VQKQorICAgIENvb2tpZShTb3VwQ29va2llICopOworICAgIG9wZXJhdG9y
IFNvdXBDb29raWUgKigpIGNvbnN0OwogI2VuZGlmCiAKICAgICBib29sIGlzTnVsbCgpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzU291cC50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzU291cC50eHQKaW5kZXggZWJkYzg5ZjE2NDMu
LjhlNDdkNjJhMzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2Vz
U291cC50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc1NvdXAudHh0CkBA
IC0yNCw2ICsyNCw3IEBACiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VTb3VwLmNwcAogcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5jcHAK
IHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAorcGxhdGZvcm0vbmV0d29y
ay9zb3VwL0Nvb2tpZVNvdXAuY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFn
ZVNvdXAuY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ3JlZGVudGlhbFN0b3JhZ2VTb3VwLmNw
cAogcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1NvdXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU291cC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU291cC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjViMDBhZDBiYmNhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwCkBAIC0w
LDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29va2llLmgiCisKKyNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDb29raWU6OkNvb2tpZShTb3VwQ29va2llICpjb29raWUpCit7CisgICAgbmFtZSA9
IFN0cmluZzo6ZnJvbVVURjgoY29va2llLT5uYW1lKTsKKyAgICB2YWx1ZSA9IFN0cmluZzo6ZnJv
bVVURjgoY29va2llLT52YWx1ZSk7CisgICAgZG9tYWluID0gU3RyaW5nOjpmcm9tVVRGOChjb29r
aWUtPmRvbWFpbik7CisgICAgcGF0aCA9IFN0cmluZzo6ZnJvbVVURjgoY29va2llLT5wYXRoKTsK
KyAgICBleHBpcmVzID0gY29va2llLT5leHBpcmVzID8gc3RhdGljX2Nhc3Q8ZG91YmxlPihzb3Vw
X2RhdGVfdG9fdGltZV90KGNvb2tpZS0+ZXhwaXJlcykpICogMTAwMCA6IDA7CisgICAgaHR0cE9u
bHkgPSBjb29raWUtPmh0dHBfb25seTsKKyAgICBzZWN1cmUgPSBjb29raWUtPnNlY3VyZTsKKyAg
ICBzZXNzaW9uID0gIWNvb2tpZS0+ZXhwaXJlczsKK30KKworc3RhdGljIFNvdXBEYXRlKiBtc1Rv
U291cERhdGUoZG91YmxlIG1zKQoreworICAgIGludCB5ZWFyID0gbXNUb1llYXIobXMpOworICAg
IGludCBkYXlPZlllYXIgPSBkYXlJblllYXIobXMsIHllYXIpOworICAgIGJvb2wgbGVhcFllYXIg
PSBpc0xlYXBZZWFyKHllYXIpOworCisgICAgLy8gbW9udGhGcm9tRGF5SW5ZZWFyKCkgcmV0dXJu
cyBhIHZhbHVlIGluIHRoZSBbMCwxMV0gcmFuZ2UsIHdoaWxlIHNvdXBfZGF0ZV9uZXcoKSBleHBl
Y3RzCisgICAgLy8gYSB2YWx1ZSBpbiB0aGUgWzEsMTJdIHJhbmdlLCBtZWFuaW5nIHdlIGhhdmUg
dG8gbWFudWFsbHkgYWRqdXN0IHRoZSBtb250aCB2YWx1ZS4KKyAgICByZXR1cm4gc291cF9kYXRl
X25ldyh5ZWFyLCBtb250aEZyb21EYXlJblllYXIoZGF5T2ZZZWFyLCBsZWFwWWVhcikgKyAxLCBk
YXlJbk1vbnRoRnJvbURheUluWWVhcihkYXlPZlllYXIsIGxlYXBZZWFyKSwgbXNUb0hvdXJzKG1z
KSwgbXNUb01pbnV0ZXMobXMpLCBzdGF0aWNfY2FzdDxpbnQ+KG1zIC8gMTAwMCkgJSA2MCk7Cit9
CisKK0Nvb2tpZTo6b3BlcmF0b3IgU291cENvb2tpZSAqKCkgY29uc3QKK3sKKyAgICBpZiAobmFt
ZS5pc051bGwoKSB8fCB2YWx1ZS5pc051bGwoKSB8fCBkb21haW4uaXNOdWxsKCkgfHwgcGF0aC5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBTb3VwQ29va2llKiBzb3Vw
Q29va2llID0gc291cF9jb29raWVfbmV3KG5hbWUudXRmOCgpLmRhdGEoKSwgdmFsdWUudXRmOCgp
LmRhdGEoKSwKKyAgICAgICAgZG9tYWluLnV0ZjgoKS5kYXRhKCksIHBhdGgudXRmOCgpLmRhdGEo
KSwgLTEpOworCisgICAgc291cF9jb29raWVfc2V0X2h0dHBfb25seShzb3VwQ29va2llLCBodHRw
T25seSk7CisgICAgc291cF9jb29raWVfc2V0X3NlY3VyZShzb3VwQ29va2llLCBzZWN1cmUpOwor
CisgICAgaWYgKCFzZXNzaW9uKSB7CisgICAgICAgIFNvdXBEYXRlKiBkYXRlID0gbXNUb1NvdXBE
YXRlKGV4cGlyZXMpOworICAgICAgICBzb3VwX2Nvb2tpZV9zZXRfZXhwaXJlcyhzb3VwQ29va2ll
LCBkYXRlKTsKKyAgICAgICAgc291cF9kYXRlX2ZyZWUoZGF0ZSk7CisgICAgfQorCisgICAgcmV0
dXJuIHNvdXBDb29raWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Np
b25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Tb3VwLmNwcAppbmRleCBjYjg2OGNjMDdiNi4uZDM2Y2M1ODdhYTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3Rv
cmFnZVNlc3Npb25Tb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgRW5kbGVzcyBNb2JpbGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzMsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlLmgiCiAjaW5jbHVkZSAiU291cE5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9HVW5pcXVlUHRyU291cC5oPgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogI2luY2x1
ZGUgPHd0Zi9EYXRlTWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC0yODks
NDUgKzI5MSw0MCBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2F2ZUNyZWRlbnRpYWxU
b1BlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcAogI2VuZGlmCiB9CiAKLXN0YXRp
YyBTb3VwRGF0ZSogbXNUb1NvdXBEYXRlKGRvdWJsZSBtcykKLXsKLSAgICBpbnQgeWVhciA9IG1z
VG9ZZWFyKG1zKTsKLSAgICBpbnQgZGF5T2ZZZWFyID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKLSAg
ICBib29sIGxlYXBZZWFyID0gaXNMZWFwWWVhcih5ZWFyKTsKLQotICAgIC8vIG1vbnRoRnJvbURh
eUluWWVhcigpIHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgWzAsMTFdIHJhbmdlLCB3aGlsZSBzb3Vw
X2RhdGVfbmV3KCkgZXhwZWN0cwotICAgIC8vIGEgdmFsdWUgaW4gdGhlIFsxLDEyXSByYW5nZSwg
bWVhbmluZyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGFkanVzdCB0aGUgbW9udGggdmFsdWUuCi0gICAg
cmV0dXJuIHNvdXBfZGF0ZV9uZXcoeWVhciwgbW9udGhGcm9tRGF5SW5ZZWFyKGRheU9mWWVhciwg
bGVhcFllYXIpICsgMSwgZGF5SW5Nb250aEZyb21EYXlJblllYXIoZGF5T2ZZZWFyLCBsZWFwWWVh
ciksIG1zVG9Ib3VycyhtcyksIG1zVG9NaW51dGVzKG1zKSwgc3RhdGljX2Nhc3Q8aW50PihtcyAv
IDEwMDApICUgNjApOwotfQotCi1zdGF0aWMgU291cENvb2tpZSogdG9Tb3VwQ29va2llKGNvbnN0
IENvb2tpZSYgY29va2llKQotewotICAgIFNvdXBDb29raWUqIHNvdXBDb29raWUgPSBzb3VwX2Nv
b2tpZV9uZXcoY29va2llLm5hbWUudXRmOCgpLmRhdGEoKSwgY29va2llLnZhbHVlLnV0ZjgoKS5k
YXRhKCksCi0gICAgICAgIGNvb2tpZS5kb21haW4udXRmOCgpLmRhdGEoKSwgY29va2llLnBhdGgu
dXRmOCgpLmRhdGEoKSwgLTEpOwotICAgIHNvdXBfY29va2llX3NldF9odHRwX29ubHkoc291cENv
b2tpZSwgY29va2llLmh0dHBPbmx5KTsKLSAgICBzb3VwX2Nvb2tpZV9zZXRfc2VjdXJlKHNvdXBD
b29raWUsIGNvb2tpZS5zZWN1cmUpOwotICAgIGlmICghY29va2llLnNlc3Npb24pIHsKLSAgICAg
ICAgU291cERhdGUqIGRhdGUgPSBtc1RvU291cERhdGUoY29va2llLmV4cGlyZXMpOwotICAgICAg
ICBzb3VwX2Nvb2tpZV9zZXRfZXhwaXJlcyhzb3VwQ29va2llLCBkYXRlKTsKLSAgICAgICAgc291
cF9kYXRlX2ZyZWUoZGF0ZSk7Ci0gICAgfQotICAgIHJldHVybiBzb3VwQ29va2llOwotfQotCiB2
b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyhjb25zdCBWZWN0b3I8Q29va2ll
PiYgY29va2llcywgY29uc3QgVVJMJiwgY29uc3QgVVJMJikKIHsKICAgICBmb3IgKGF1dG8gY29v
a2llIDogY29va2llcykKLSAgICAgICAgc291cF9jb29raWVfamFyX2FkZF9jb29raWUoY29va2ll
U3RvcmFnZSgpLCB0b1NvdXBDb29raWUoY29va2llKSk7CisgICAgICAgIHNvdXBfY29va2llX2ph
cl9hZGRfY29va2llKGNvb2tpZVN0b3JhZ2UoKSwgY29va2llKTsKIH0KIAotdm9pZCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OnNldENvb2tpZShjb25zdCBDb29raWUmKQordm9pZCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OnNldENvb2tpZShjb25zdCBDb29raWUmIGNvb2tpZSkKIHsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IGZvciBXSzIgdG8gdXNlLgorICAgIHNvdXBfY29va2llX2phcl9hZGRf
Y29va2llKGNvb2tpZVN0b3JhZ2UoKSwgY29va2llKTsKIH0KIAotdm9pZCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25zdCBDb29raWUmKQordm9pZCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25zdCBDb29raWUmIGNvb2tpZSkKIHsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IGZvciBXSzIgdG8gdXNlLgorICAgIC8vIFdlIG5lZWQgdG8gc3BlY2lm
eSB0aGUgSFRUUCBzY2hlbWUgdG8gY29uc3RydWN0IGEgdmFsaWQgU291cFVSSSwKKyAgICAvLyBz
byB0aGF0IHdlIGNhbiBsb29rIHVwIGZvciB0aGUgSFRUUCBjb29raWUgaW4gdGhlIGphci4KKyAg
ICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaShzb3VwX3VyaV9uZXcobnVsbHB0cikpOworICAgIHNv
dXBfdXJpX3NldF9zY2hlbWUodXJpLmdldCgpLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCk7CisgICAg
c291cF91cmlfc2V0X2hvc3QodXJpLmdldCgpLCBjb29raWUuZG9tYWluLnV0ZjgoKS5kYXRhKCkp
OworICAgIHNvdXBfdXJpX3NldF9wYXRoKHVyaS5nZXQoKSwgY29va2llLnBhdGgudXRmOCgpLmRh
dGEoKSk7CisKKyAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IHRhcmdldENvb2tpZShjb29raWUp
OworICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzTGlzdChzb3VwX2Nvb2tpZV9qYXJfZ2V0
X2Nvb2tpZV9saXN0KGNvb2tpZVN0b3JhZ2UoKSwgdXJpLmdldCgpLCBUUlVFKSk7CisgICAgZm9y
IChHU0xpc3QqIGl0ZW0gPSBjb29raWVzTGlzdC5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3Rf
bmV4dChpdGVtKSkgeworICAgICAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IHNvdXBDb29raWUo
c3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpKTsKKworICAgICAgICAvLyBVc2Ug
KG5hbWUsIGRvbWFpbiwgcGF0aCkgYXMgdGhlIHByaW1hcnkga2V5IHRvIGlkZW50aWZ5IHRoZSBj
b29raWUuCisgICAgICAgIGlmIChnX3N0cmNtcDAoc291cF9jb29raWVfZ2V0X25hbWUoc291cENv
b2tpZS5nZXQoKSksIHNvdXBfY29va2llX2dldF9uYW1lKHRhcmdldENvb2tpZS5nZXQoKSkpCisg
ICAgICAgICAgICB8fCBnX3N0cmNtcDAoc291cF9jb29raWVfZ2V0X2RvbWFpbihzb3VwQ29va2ll
LmdldCgpKSwgc291cF9jb29raWVfZ2V0X2RvbWFpbih0YXJnZXRDb29raWUuZ2V0KCkpKQorICAg
ICAgICAgICAgfHwgZ19zdHJjbXAwKHNvdXBfY29va2llX2dldF9wYXRoKHNvdXBDb29raWUuZ2V0
KCkpLCBzb3VwX2Nvb2tpZV9nZXRfcGF0aCh0YXJnZXRDb29raWUuZ2V0KCkpKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGNv
b2tpZVN0b3JhZ2UoKSwgc291cENvb2tpZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
IH0KIAogVmVjdG9yPENvb2tpZT4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRBbGxDb29raWVz
KCkKQEAgLTMzNiwxMCArMzMzLDE3IEBAIFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6Z2V0QWxsQ29va2llcygpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotVmVjdG9yPENvb2tp
ZT4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRDb29raWVzKGNvbnN0IFVSTCYpCitWZWN0b3I8
Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldENvb2tpZXMoY29uc3QgVVJMJiB1cmwp
CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV0syIHRvIHVzZS4KLSAgICByZXR1cm4g
eyB9OworICAgIFZlY3RvcjxDb29raWU+IGNvb2tpZXM7CisgICAgR1VuaXF1ZVB0cjxTb3VwVVJJ
PiB1cmkgPSB1cmwuY3JlYXRlU291cFVSSSgpOworICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29r
aWVzTGlzdChzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGNvb2tpZVN0b3JhZ2UoKSwg
dXJpLmdldCgpLCBUUlVFKSk7CisgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29raWVzTGlzdC5n
ZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBHVW5pcXVl
UHRyPFNvdXBDb29raWU+IHNvdXBDb29raWUoc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0t
PmRhdGEpKTsKKyAgICAgICAgY29va2llcy5hcHBlbmQoV2ViQ29yZTo6Q29va2llKHNvdXBDb29r
aWUuZ2V0KCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29va2llczsKIH0KIAogdm9pZCBOZXR3
b3JrU3RvcmFnZVNlc3Npb246OmZsdXNoQ29va2llU3RvcmUoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBiMjRkODM0
MmVlOC4uYzdlOGQ5ZmRkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTctMTAtMzAg
IE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpb0BlbmRsZXNzbS5jb20+CisKKyAgICAgICAgW0dU
S10gTmV3IEFQSSB0byBhZGQsIHJldHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEgV2ViS2l0
Q29va2llTWFuYWdlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc3OTMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkZWQgbmV3IEFQSSB0byBXZWJLaXRDb29raWVNYW5hZ2VyIHRvIGFkZCwgcmV0cmll
dmUgYW5kIGRlbGV0ZSBjb21wbGV0ZQorICAgICAgICBjb29raWVzIGludG8vb3V0LW9mIGEgcnVu
bmluZyBzZXNzaW9uLCBhbmQgdXBkYXRlZCBkb2N1bWVudGF0aW9uIHNlY3Rpb25zLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwOgorICAgICAg
ICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUpOiBOZXcgZnVuY3Rpb24uCisgICAg
ICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZV9maW5pc2gpOiBEaXR0by4KKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyk6IERpdHRvLgorICAgICAg
ICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzX2ZpbmlzaCk6IERpdHRvLgorICAg
ICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUpOiBEaXR0by4KKyAgICAg
ICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaCk6IERpdHRvLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaDogQWRkZWQg
bmV3IGZ1bmN0aW9ucy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb29raWVN
YW5hZ2VyLmg6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0
Mmd0ay00LjAtc2VjdGlvbnMudHh0OiBEaXR0by4KKwogMjAxNy0xMC0zMCAgRnVqaWkgSGlyb25v
cmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBVc2UgTGF6eU5ldmVyRGVz
dHJveWVkIGluc3RlYWQgb2YgREVGSU5FX0dMT0JBTCBmb3IgWE1MTmFtZXMsIEhUTUxOYW1lcywg
TWF0aE1MTmFtZXMgYW5kIFNWR05hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IGVlZDI3MDI2NjQ3
Li5hMzk3YzlkODU0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgRW5k
bGVzcyBNb2JpbGUsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNyw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldl
YktpdFdlYnNpdGVEYXRhUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhUmVjb3JkLmgi
CisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+
CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdU
eXBlLmg+CkBAIC0yMzIsNiArMjM0LDE5NCBAQCBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5X2ZpbmlzaChXZWJLaXRDbwogICAg
IHJldHVybiByZXR1cm5WYWx1ZSA9PSAtMSA/IFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9O
T19USElSRF9QQVJUWSA6IHN0YXRpY19jYXN0PFdlYktpdENvb2tpZUFjY2VwdFBvbGljeT4ocmV0
dXJuVmFsdWUpOwogfQogCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2ll
OgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29raWVNYW5hZ2VyCisgKiBAY29va2ll
OiB0aGUgI1NvdXBDb29raWUgdG8gYmUgYWRkZWQKKyAqIEBjYW5jZWxsYWJsZTogKGFsbG93LW5v
bmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBAY2FsbGJhY2s6IChz
Y29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1
ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0YSB0byBw
YXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgYWRkIGEgI1Nv
dXBDb29raWUgdG8gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSwgd2hpY2ggaXMgbm90IHBlcnNpc3Rl
bnQKKyAqIHVubGVzcyB5b3UgZXhwbGljaXRseSBjYWxsIHdlYmtpdF9jb29raWVfbWFuYWdlcl9z
ZXRfcGVyc2lzdGVudF9zdG9yYWdlKCkuCisgKgorICogV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZp
bmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhlbiBjYWxsCisgKiB3
ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZV9maW5pc2goKSB0byBnZXQgdGhlIHJlc3Vs
dCBvZiB0aGUgb3BlcmF0aW9uLgorICovCit2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRf
Y29va2llKFdlYktpdENvb2tpZU1hbmFnZXIgKm1hbmFnZXIsIFNvdXBDb29raWUgKmNvb2tpZSwg
R0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywg
Z3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09P
S0lFX01BTkFHRVIobWFuYWdlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29va2llKTsKKwor
ICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGNvb2tpZXM7CisgICAgY29va2llcy5hcHBlbmQo
V2ViQ29yZTo6Q29va2llKGNvb2tpZSkpOworCisgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFk
b3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRh
dGEpKTsKKworICAgIGF1dG8gc2Vzc2lvbklEID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
RGF0YVN0b3JlKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKS53ZWJzaXRlRGF0YVN0b3JlKCku
c2Vzc2lvbklEKCk7CisgICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsK
KworICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0
ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKKyAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBh
Y2Nlc3MgdG8gdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgor
ICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShDYWxs
YmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvciAhPSBDYWxsYmFja0Jh
c2U6OkVycm9yOjpOb25lKSB7CisgICAgICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBp
biBjYXNlcyB3aGVyZSB0aGUgd2ViIHByb2Nlc3MgaXMgbm90IGF2YWlsYWJsZSwKKyAgICAgICAg
ICAgIC8vIGNvbnNpZGVyIHRoZSBvcGVyYXRpb24gImNhbmNlbGxlZCIgZnJvbSB0aGUgcG9pbnQg
b2YgdmlldyBvZiB0aGUgY2xpZW50LgorICAgICAgICAgICAgZ190YXNrX3JldHVybl9uZXdfZXJy
b3IodGFzay5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQsIF8oIk9wZXJh
dGlvbiB3YXMgY2FuY2VsbGVkIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOworICAgIH0p
OworfQorCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaDoK
KyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0Q29va2llTWFuYWdlcgorICogQHJlc3VsdDog
YSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJldHVybiBsb2NhdGlvbiBmb3IgZXJyb3Igb3Ig
JU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNoIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24g
c3RhcnRlZCB3aXRoIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKCkuCisgKgorICog
UmV0dXJuczogJVRSVUUgaWYgdGhlIGNvb2tpZSB3YXMgYWRkZWQgb3IgJUZBTFNFIGluIGNhc2Ug
b2YgZXJyb3IuCisgKi8KK2dib29sZWFuIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2ll
X2ZpbmlzaChXZWJLaXRDb29raWVNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1bHQgKnJlc3Vs
dCwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoZ190YXNrX2lzX3ZhbGlkKHJlc3VsdCwgbWFuYWdlciksIEZBTFNFKTsKKworICAgIHJldHVy
biBnX3Rhc2tfcHJvcGFnYXRlX2Jvb2xlYW4oR19UQVNLKHJlc3VsdCksIGVycm9yKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXM6CisgKiBAY29va2llX21h
bmFnZXI6IGEgI1dlYktpdENvb2tpZU1hbmFnZXIKKyAqIEB1cmk6IHRoZSAjU291cFVSSSBmb3Ig
dGhlIGRvbWFpbiBvZiB0aGUgY29va2llcyB0byBiZSByZXRyaWV2ZWQKKyAqIEBjYW5jZWxsYWJs
ZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBA
Y2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3
aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0
aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9ub3Vz
bHkgZ2V0IGEgbGlzdCBvZiAjU291cENvb2tpZSBmcm9tIEBjb29raWVfbWFuYWdlciBhc3NvY2lh
dGVkIHdpdGggQHVyaSwgd2hpY2gKKyAqIG11c3QgYmUgZWl0aGVyIGFuZCBIVFRQIG9yIGFuIEhU
VFBTIFVSTC4KKyAqCisgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFj
ayB3aWxsIGJlIGNhbGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAqIHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfY29va2llc19maW5pc2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0
aW9uLgorICovCit2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRD
b29raWVNYW5hZ2VyICptYW5hZ2VyLCBTb3VwVVJJICp1cmksIEdDYW5jZWxsYWJsZSAqY2FuY2Vs
bGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFNPVVBfVVJJX1ZBTElEX0ZPUl9IVFRQKHVyaSkpOwor
CisgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIs
IGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKKworICAgIGF1dG8gc2Vzc2lvbklE
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKG1hbmFnZXItPnByaXYtPmRh
dGFNYW5hZ2VyKS53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCk7CisgICAgY29uc3QgYXV0
byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xz
KG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKKworICAgIC8vIENvb2tpZXMgYXJlIHJlYWQv
d3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxl
c3MKKyAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdG8gdGhlbSBmcm9tLCBzbyBqdXN0
IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgorICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMoc2Vzc2lvbklELCBXZWJD
b3JlOjpVUkwodXJpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiYgY29va2llcywgQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAg
ICBpZiAoZXJyb3IgIT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgeworICAgICAgICAgICAg
Ly8gVGhpcyBjYW4gb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlcmUgdGhlIHdlYiBwcm9jZXNzIGlz
IG5vdCBhdmFpbGFibGUsCisgICAgICAgICAgICAvLyBjb25zaWRlciB0aGUgb3BlcmF0aW9uICJj
YW5jZWxsZWQiIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhlIGNsaWVudC4KKyAgICAgICAg
ICAgIGdfdGFza19yZXR1cm5fbmV3X2Vycm9yKHRhc2suZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9f
RVJST1JfQ0FOQ0VMTEVELCBfKCJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEdMaXN0KiBjb29raWVzX2xpc3QgPSBu
dWxscHRyOworICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCisgICAgICAgICAg
ICBjb29raWVzX2xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzX2xpc3QsIGNvb2tpZSk7CisK
KyAgICAgICAgZ190YXNrX3JldHVybl9wb2ludGVyKHRhc2suZ2V0KCksIGdfbGlzdF9yZXZlcnNl
KGNvb2tpZXNfbGlzdCksIFtdKGdwb2ludGVyIGRhdGEpIHsKKyAgICAgICAgICAgIGdfbGlzdF9m
cmVlX2Z1bGwoc3RhdGljX2Nhc3Q8R0xpc3QqPihkYXRhKSwgcmVpbnRlcnByZXRfY2FzdDxHRGVz
dHJveU5vdGlmeT4oc291cF9jb29raWVfZnJlZSkpOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
KworLyoqCisgKiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNoOgorICog
QGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29raWVNYW5hZ2VyCisgKiBAcmVzdWx0OiBhICNH
QXN5bmNSZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvciBvciAlTlVM
TCB0byBpZ25vcmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBzdGFy
dGVkIHdpdGggd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKCkuCisgKgorICogUmV0
dXJuczogKGVsZW1lbnQtdHlwZSBTb3VwQ29va2llKSAodHJhbnNmZXIgZnVsbCk6IEEgI0dTTGlz
dCBvZiAjU291cENvb2tpZSBpbnN0YW5jZXMKKyAqICAgIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJy
b3IuCisgKi8KK0dMaXN0KiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNo
KFdlYktpdENvb2tpZU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBHRXJy
b3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09PS0lF
X01BTkFHRVIobWFuYWdlciksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdf
dGFza19pc192YWxpZChyZXN1bHQsIG1hbmFnZXIpLCBudWxscHRyKTsKKworICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PEdMaXN0Kj4oZ190YXNrX3Byb3BhZ2F0ZV9wb2ludGVyKEdfVEFTSyhy
ZXN1bHQpLCBlcnJvcikpOworfQorCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llOgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29raWVNYW5hZ2VyCisg
KiBAbmFtZTogdGhlIG5hbWUgdGhlIGNvb2tpZSB0byBiZSBkZWxldGVkCisgKiBAZG9tYWluOiB0
aGUgZG9tYWluIG9mIHRoZSBjb29raWUgdG8gYmUgZGVsZXRlZAorICogQHBhdGg6IHRoZSBwYXRo
IG9mIHRoZSBjb29raWUgdG8gYmUgZGVsZXRlZAorICogQGNhbmNlbGxhYmxlOiAoYWxsb3ctbm9u
ZSk6IGEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTCB0byBpZ25vcmUKKyAqIEBjYWxsYmFjazogKHNj
b3BlIGFzeW5jKTogYSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVl
c3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHRoZSBkYXRhIHRvIHBh
c3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3luY2hyb25vdXNseSBkZWxldGUgYSAj
U291cENvb2tpZSBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24sIGFzIHVuaXF1ZWxseSBpZGVudGlm
aWVkCisgKiBieSBpdHMgbmFtZSwgZG9tYWluIGFuZCBwYXRoLgorICoKKyAqIFdoZW4gdGhlIG9w
ZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRo
ZW4gY2FsbAorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVfZmluaXNoKCkg
dG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqLwordm9pZCB3ZWJraXRfY29v
a2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2VyICptYW5hZ2VyLCBj
b25zdCBnY2hhciAqbmFtZSwgY29uc3QgZ2NoYXIgKmRvbWFpbiwgY29uc3QgZ2NoYXIgKnBhdGgs
IEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ss
IGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NP
T0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWUpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoZG9tYWluKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHBhdGgpOwor
CisgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIs
IGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKKworICAgIC8vIFdlIG9ubHkgY2Fy
ZSBhYm91dCB0aGUgbmFtZSwgZG9tYWluIGFuZCBwYXRoLCB3aGljaCBpcyB3aGF0IHdpbGwgYmUg
dXNlZAorICAgIC8vIHRvIGlkZW50aWZ5IHRoZSBjb29raWUgaW4gU291cENvb2tpZUphciBoZWxk
IGJ5IHRoZSBvdGhlciBwcm9jZXNzLiBIb3dldmVyLAorICAgIC8vIHdlIHN0aWxsIG5lZWQgdG8g
Y3JlYXRlIHRoZSBDb29raWUgd2l0aCBhIG5vbi1lbXB0eSB2YWx1ZSBub3QgdG8gZ2V0IGRpc2Nh
cmRlZAorICAgIC8vIG9uIGl0cyB3YXkgdG8gdGhlIG90aGVyIHByb2Nlc3MsIHNvIHdlIGp1c3Qg
cGFzcyB0aGUgbmFtZSBhZ2FpbiB0aGVyZS4KKyAgICBXZWJDb3JlOjpDb29raWUgdGFyZ2V0Q29v
a2llKFN0cmluZzo6ZnJvbVVURjgobmFtZSksIFN0cmluZzo6ZnJvbVVURjgobmFtZSksIFN0cmlu
Zzo6ZnJvbVVURjgoZG9tYWluKSwgU3RyaW5nOjpmcm9tVVRGOChwYXRoKSwgLTEsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsIFN0cmluZygpLCBXZWJDb3JlOjpVUkwoKSwgVmVjdG9yPHVpbnQxNl90PiB7
IH0pOworCisgICAgYXV0byBzZXNzaW9uSUQgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRE
YXRhU3RvcmUobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpLndlYnNpdGVEYXRhU3RvcmUoKS5z
ZXNzaW9uSUQoKTsKKyAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwor
CisgICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRl
IGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcworICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFj
Y2VzcyB0byB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCisg
ICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+
ZGVsZXRlQ29va2llKHNlc3Npb25JRCwgdGFyZ2V0Q29va2llLCBbdGFzayA9IFdURk1vdmUodGFz
ayldKENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yICE9IENh
bGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIG9ubHkg
aGFwcGVuIGluIGNhc2VzIHdoZXJlIHRoZSB3ZWIgcHJvY2VzcyBpcyBub3QgYXZhaWxhYmxlLAor
ICAgICAgICAgICAgLy8gY29uc2lkZXIgdGhlIG9wZXJhdGlvbiAiY2FuY2VsbGVkIiBmcm9tIHRo
ZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBjbGllbnQuCisgICAgICAgICAgICBnX3Rhc2tfcmV0dXJu
X25ld19lcnJvcih0YXNrLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCwg
XygiT3BlcmF0aW9uIHdhcyBjYW5jZWxsZWQiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7
CisgICAgfSk7Cit9CisKKy8qKgorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29r
aWVfZmluaXNoOgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29raWVNYW5hZ2VyCisg
KiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0aW9uIGZv
ciBlcnJvciBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNocm9ub3Vz
IG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29r
aWUoKS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY29va2llIHdhcyBhZGRlZCBvciAl
RkFMU0UgaW4gY2FzZSBvZiBlcnJvci4KKyAqLworZ2Jvb2xlYW4gd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2RlbGV0ZV9jb29raWVfZmluaXNoKFdlYktpdENvb2tpZU1hbmFnZXIgKm1hbmFnZXIsIEdB
c3luY1Jlc3VsdCAqcmVzdWx0LCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlciksIEZBTFNFKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgRkFM
U0UpOworCisgICAgcmV0dXJuIGdfdGFza19wcm9wYWdhdGVfYm9vbGVhbihHX1RBU0socmVzdWx0
KSwgZXJyb3IpOworfQorCiAvKioKICAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWlu
c193aXRoX2Nvb2tpZXM6CiAgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktpdENvb2tpZU1hbmFn
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29v
a2llTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29r
aWVNYW5hZ2VyLmgKaW5kZXggZWUxN2QyMjA0NDkuLjBlNGYwMTExNDk2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKQEAgLTI2LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGdpby9naW8uaD4KICNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0RGVmaW5lcy5oPgogCiBHX0JFR0lOX0RFQ0xTCkBAIC0xMDcsNiArMTA5LDQ0IEBA
IHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeV9maW5pc2ggICAgICAgIChX
ZWJLaXRDb29raWVNYW5hZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdF
cnJvciAgICAgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKIAorV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZSAgICAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cENvb2tpZSAgICAg
ICAgICAgICAgICAgICAqY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNl
bGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAg
ICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaCAgICAgICAgICAgICAgIChXZWJL
aXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAg
ICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3Ip
OworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyAg
ICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVf
bWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTb3VwVVJJICAgICAgICAgICAgICAgICAgICAgICp1cmksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAg
ICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICAgICAg
Y2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKKworV0VC
S0lUX0FQSSBHTGlzdCoKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llc19maW5pc2gg
ICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAg
ICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFu
YWdlcl9kZWxldGVfY29va2llICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2Vy
ICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICpu
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgKmRvbWFpbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAg
ICAgICAgICAgICAgICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxh
YmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAg
ICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtp
dF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaCAgICAgICAgICAgIChXZWJLaXRD
b29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAg
ICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOwor
CiBXRUJLSVRfREVQUkVDQVRFRF9GT1Iod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNo
KSB2b2lkCiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzICAg
ICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNl
bGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNl
Y3Rpb25zLnR4dAppbmRleCAzNmY0ZmYzZDI3NS4uMDFhNGViMzUzMWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9u
cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstNC4wLXNlY3Rpb25zLnR4dApAQCAtMTAwNCw2ICsxMDA0LDEyIEBAIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeQogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2Nl
cHRfcG9saWN5X2ZpbmlzaAogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhf
Y29va2llcwogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llc19m
aW5pc2gKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llCit3ZWJraXRfY29va2llX21h
bmFnZXJfYWRkX2Nvb2tpZV9maW5pc2gKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
cword2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzX2ZpbmlzaAord2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29v
a2llX2ZpbmlzaAogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVzX2Zvcl9kb21h
aW4KIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nvb2tpZXMKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvb2tpZU1hbmFnZXIuaApp
bmRleCA1OTU2M2FkZDg4OC4uZGJlYTc4NDgyYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFuYWdlci5oCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEVuZGxlc3MgTW9iaWxlLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNiAr
MjcsNyBAQAogCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+
CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdERlZmluZXMu
aD4KIAogR19CRUdJTl9ERUNMUwpAQCAtMTA3LDYgKzEwOSw0NCBAQCB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3lfZmluaXNoICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdl
cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAgICAgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAg
ICAgICAgICAgKiplcnJvcik7CiAKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2FkZF9jb29raWUgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIg
ICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXBDb29raWUgICAgICAgICAgICAgICAgICAgKmNv
b2tpZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAgICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFk
eUNhbGxiYWNrICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAg
ICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfY29va2llX21hbmFn
ZXJfYWRkX2Nvb2tpZV9maW5pc2ggICAgICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAg
ICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVz
dWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKKworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMgICAgICAgICAgICAgICAgICAg
ICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cFVSSSAg
ICAgICAgICAgICAgICAgICAgICAqdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNh
bmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVy
ICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgR0xpc3QqCit3
ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNoICAgICAgICAgICAgICAoV2Vi
S2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAg
ICAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAqKmVycm9y
KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tp
ZSAgICAgICAgICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2ll
X21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICAqbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAg
ICAgICAgICAgICAgICAgICpkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICAqcGF0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAgICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNh
bGxiYWNrICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICB1
c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfY29va2llX21hbmFnZXJf
ZGVsZXRlX2Nvb2tpZV9maW5pc2ggICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAg
ICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKKwogV0VCS0lUX0RFUFJFQ0FU
RURfRk9SKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9mZXRjaCkgdm9pZAogd2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llcyAgICAgICAgKFdlYktpdENvb2tp
ZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAg
ICAgICAgKmNhbmNlbGxhYmxlLApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IGY5ZGRjNzU4MGI5Li4wMDUxNWUyMWY4OCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3
LTEwLTMwICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW9AZW5kbGVzc20uY29tPgorCisgICAg
ICAgIFtHVEtdIE5ldyBBUEkgdG8gYWRkLCByZXRyaWV2ZSBhbmQgZGVsZXRlIGNvb2tpZXMgdmlh
IFdlYktpdENvb2tpZU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NzkzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIG5ldyB0ZXN0IGNhc2VzIHRvIGNvdmVyIHRoZSBuZXdseSBhZGRl
ZCBBUEkgZm9yIFdlYktpdENvb2tpZU1hbmFnZXI6CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llLCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMgYW5kCisg
ICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKHRlc3RDb29raWVNYW5hZ2VyQWRkQ29va2llKTogQWRkZWQuCisgICAgICAgICh0ZXN0
Q29va2llTWFuYWdlckdldENvb2tpZXMpOiBBZGRlZC4KKyAgICAgICAgKHRlc3RDb29raWVNYW5h
Z2VyRGVsZXRlQ29va2llKTogQWRkZWQuCisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6IFNtYWxs
IHVwZGF0ZSB0byBhdm9pZCBoYXJkY29kaW5nIHN0cmluZ3Mgd2UgcmV1c2UuCisgICAgICAgIChi
ZWZvcmVBbGwpOiBBZGRlZCB0aGUgbmV3IHRlc3QgY2FzZXMgdG8gdGhlIHRlc3Qgc3VpdGUuCisK
IDIwMTctMTAtMzAgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFdLQnVuZGxlUGFnZVdpbGxTZW5kU3VibWl0RXZlbnRDYWxsYmFjayBpcyBjYWxs
ZWQgd2l0aCBpbmNvcnJlY3QgZnJhbWUgcGFyYW1ldGVyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAppbmRl
eCAxYmU4Y2MwZDA2MC4uMjM3YjAxYmQxZTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0Q29va2llTWFuYWdlci5jcHAKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVNYW5hZ2VyLmNwcApAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqIENvcHly
aWdodCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMSwxMiArMjIsMjEgQEAKIAogI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKICNpbmNs
dWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR1VuaXF1ZVB0clNvdXAuaD4K
ICNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgogCiBzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1Nl
cnZlcjsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGtGaXJzdFBhcnR5RG9tYWluID0gIjEyNy4wLjAu
MSI7CiBzdGF0aWMgY29uc3QgY2hhcioga1RoaXJkUGFydHlEb21haW4gPSAibG9jYWxob3N0IjsK
Kworc3RhdGljIGNvbnN0IGNoYXIqIGtDb29raWVOYW1lID0gImZvbyI7CitzdGF0aWMgY29uc3Qg
Y2hhcioga0Nvb2tpZVZhbHVlID0gImJhciI7CitzdGF0aWMgY29uc3QgY2hhcioga0Nvb2tpZVBh
dGggPSAiLyI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBrQ29va2llUGF0aE5ldyA9ICIvbmV3IjsK
K3N0YXRpYyBjb25zdCBjaGFyKiBrQ29va2llVmFsdWVOZXcgPSAibmV3LXZhbHVlIjsKKwogc3Rh
dGljIGNvbnN0IGNoYXIqIGtJbmRleEh0bWxGb3JtYXQgPQogICAgICI8aHRtbD48Ym9keT4iCiAg
ICAgIiA8cD5XZWJLaXRHVEsrIENvb2tpZSBNYW5hZ2VyIHRlc3Q8L3A+IgpAQCAtNDksNyArNTks
MTAgQEAgcHVibGljOgogICAgICAgICAsIG1fY29va2llTWFuYWdlcih3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZp
ZXcpKSkKICAgICAgICAgLCBtX2FjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NF
UFRfTk9fVEhJUkRfUEFSVFkpCiAgICAgICAgICwgbV9kb21haW5zKDApCisgICAgICAgICwgbV9j
b29raWVzKDApCisgICAgICAgICwgbV9jb29raWVBZGRlZChmYWxzZSkKICAgICAgICAgLCBtX2Nv
b2tpZXNDaGFuZ2VkKGZhbHNlKQorICAgICAgICAsIG1fY29va2llRGVsZXRlZChmYWxzZSkKICAg
ICAgICAgLCBtX2ZpbmlzaExvb3BXaGVuQ29va2llc0NoYW5nZShmYWxzZSkKICAgICB7CiAgICAg
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfY29va2llX21hbmFn
ZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSkpID09IG1fY29va2llTWFuYWdlcik7CkBAIC0x
MDYsNiArMTE5LDY3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYWNjZXB0UG9saWN5Owog
ICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGFkZENvb2tpZVJlYWR5Q2FsbGJhY2soR09iamVjdCog
b2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgewor
ICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGJvb2wgYWRkZWQg
PSB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZV9maW5pc2goV0VCS0lUX0NPT0tJRV9N
QU5BR0VSKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3Nl
cnQoIWVycm9yLmdldCgpKTsKKworICAgICAgICBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0
YXRpY19jYXN0PENvb2tpZU1hbmFnZXJUZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5t
X2Nvb2tpZUFkZGVkID0gYWRkZWQ7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9t
YWluTG9vcCk7CisgICAgfQorCisgICAgYm9vbCBhZGRDb29raWUoU291cENvb2tpZSogY29va2ll
KQorICAgIHsKKyAgICAgICAgbV9jb29raWVBZGRlZCA9IGZhbHNlOworICAgICAgICB3ZWJraXRf
Y29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShtX2Nvb2tpZU1hbmFnZXIsIGNvb2tpZSwgMCwgYWRk
Q29va2llUmVhZHlDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKKworICAgICAgICByZXR1cm4gbV9jb29raWVBZGRlZDsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCBnZXRDb29raWVzUmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3lu
Y1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7CisgICAgICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgR0xpc3QqIGNvb2tpZXMgPSB3ZWJraXRf
Y29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihv
YmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJv
ci5nZXQoKSk7CisKKyAgICAgICAgQ29va2llTWFuYWdlclRlc3QqIHRlc3QgPSBzdGF0aWNfY2Fz
dDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+bV9jb29raWVz
ID0gY29va2llczsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsK
KyAgICB9CisKKyAgICBHTGlzdCogZ2V0Q29va2llcyhTb3VwVVJJKiB1cmkpCisgICAgeworICAg
ICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fY29va2llcywgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJv
eU5vdGlmeT4oc291cF9jb29raWVfZnJlZSkpOworICAgICAgICBtX2Nvb2tpZXMgPSAwOworICAg
ICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMobV9jb29raWVNYW5hZ2VyLCB1
cmksIDAsIGdldENvb2tpZXNSZWFkeUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xv
b3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgICAgIHJldHVybiBtX2Nvb2tpZXM7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgZGVsZXRlQ29va2llUmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmpl
Y3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7CisgICAg
ICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgYm9vbCBhZGRlZCA9IHdl
YmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaChXRUJLSVRfQ09PS0lFX01B
TkFHRVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBnX2Fzc2Vy
dCghZXJyb3IuZ2V0KCkpOworCisgICAgICAgIENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0ID0gc3Rh
dGljX2Nhc3Q8Q29va2llTWFuYWdlclRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgIHRlc3QtPm1f
Y29va2llQWRkZWQgPSBhZGRlZDsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21h
aW5Mb29wKTsKKyAgICB9CisKKyAgICBib29sIGRlbGV0ZUNvb2tpZShjb25zdCBjaGFyKiBuYW1l
LCBjb25zdCBjaGFyKiBkb21haW4sIGNvbnN0IGNoYXIqIHBhdGgpCisgICAgeworICAgICAgICBt
X2Nvb2tpZURlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2Rl
bGV0ZV9jb29raWUobV9jb29raWVNYW5hZ2VyLCBuYW1lLCBkb21haW4sIHBhdGgsIDAsIGRlbGV0
ZUNvb2tpZVJlYWR5Q2FsbGJhY2ssIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7CisKKyAgICAgICAgcmV0dXJuIG1fY29va2llRGVsZXRlZDsKKyAgICB9CisKICAg
ICB2b2lkIHNldEFjY2VwdFBvbGljeShXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQog
ICAgIHsKICAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KG1f
Y29va2llTWFuYWdlciwgcG9saWN5KTsKQEAgLTE3Myw3ICsyNDcsMTAgQEAgcHVibGljOgogICAg
IFdlYktpdENvb2tpZU1hbmFnZXIqIG1fY29va2llTWFuYWdlcjsKICAgICBXZWJLaXRDb29raWVB
Y2NlcHRQb2xpY3kgbV9hY2NlcHRQb2xpY3k7CiAgICAgY2hhcioqIG1fZG9tYWluczsKKyAgICBH
TGlzdCogbV9jb29raWVzOworICAgIGJvb2wgbV9jb29raWVBZGRlZDsKICAgICBib29sIG1fY29v
a2llc0NoYW5nZWQ7CisgICAgYm9vbCBtX2Nvb2tpZURlbGV0ZWQ7CiAgICAgYm9vbCBtX2Zpbmlz
aExvb3BXaGVuQ29va2llc0NoYW5nZTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IG1fY29va2llc1Rl
eHRGaWxlOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gbV9jb29raWVzU1FMaXRlRmlsZTsKQEAgLTIx
MSw2ICsyODgsMjI0IEBAIHN0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyQWNjZXB0UG9saWN5
KENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyCiAgICAgZ19hc3NlcnRfY21w
aW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAwKTsKIH0KIAorc3RhdGljIHZvaWQgdGVz
dENvb2tpZU1hbmFnZXJBZGRDb29raWUoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgLy8gTG9hZCB0aGUgaHRtbCBjb250ZW50LCB3aXRoIE5PX1RISVJEX1BB
UlRZIGFjY2VwdCBwb2xpY3ksIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBhZGQgb25lIGNvb2tp
ZS4KKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBU
X05PX1RISVJEX1BBUlRZKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5z
KCkpLCA9PSwgMSk7CisKKyAgICAvLyBDaGVjayB0aGUgY29va2llcyB0aGF0IGhhdmUgYmVlbiBh
ZGRlZCBmb3IgdGhlIGRvbWFpbi4KKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRvbWFpblVSTChnX3N0
cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlE
b21haW4pKTsKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaShzb3VwX3VyaV9uZXcoZG9tYWlu
VVJMLmdldCgpKSk7CisgICAgR0xpc3QqIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXMo
dXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tp
ZXMpLCA9PSwgMSk7CisKKyAgICBTb3VwQ29va2llKiBmb3VuZENvb2tpZSA9IHN0YXRpY19jYXN0
PFNvdXBDb29raWUqPihmb3VuZENvb2tpZXMtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihz
b3VwX2Nvb2tpZV9nZXRfbmFtZShmb3VuZENvb2tpZSksID09LCBrQ29va2llTmFtZSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9kb21haW4oZm91bmRDb29raWUpLCA9PSwg
a0ZpcnN0UGFydHlEb21haW4pOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRf
cGF0aChmb3VuZENvb2tpZSksID09LCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHNvdXBfY29va2llX2dldF92YWx1ZShmb3VuZENvb2tpZSksID09LCBrQ29va2llVmFsdWUpOwor
CisgICAgLy8gVHJ5IHRvIGFkZCBub3cgYSBjb29raWUgd2l0aCBzYW1lIChuYW1lLCBkb21haW4s
IHBhdGgpIHRoYW4gdGhlIG9uZXMgYWxyZWFkeSBhZGRlZC4KKyAgICBHVW5pcXVlUHRyPFNvdXBD
b29raWU+IGZpcnN0Q29va2llKHNvdXBfY29va2llX25ldyhrQ29va2llTmFtZSwga0Nvb2tpZVZh
bHVlTmV3LCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGgsIFNPVVBfQ09PS0lFX01BWF9B
R0VfT05FX0hPVVIpKTsKKyAgICB0ZXN0LT5hZGRDb29raWUoZmlyc3RDb29raWUuZ2V0KCkpOwor
CisgICAgLy8gU3RpbGwgb25lIGNvb2tpZSwgc2luY2UgKG5hbWUsIGRvbWFpbiwgcGF0aCkgYXJl
IHRoZSBzYW1lIHRoYW4gdGhlIGFscmVhZHkgZXhpc3RpbmcKKyAgICAvLyBvbmUsIGJ1dCB0aGUg
bmV3IHZhbHVlIGlzIG5vdyBzdG9yZWQgYXMgcmVwbGFjZWQgYnkgdGhlIHJlY2VudGx5IGFkZGVk
IGNvb2tpZS4KKyAgICBmb3VuZENvb2tpZXMgPSB0ZXN0LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7
CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDEp
OworCisgICAgZm91bmRDb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oZm91bmRDb29r
aWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X25hbWUoZm91
bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nv
b2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2llKSwgPT0sIGtGaXJzdFBhcnR5RG9tYWluKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3BhdGgoZm91bmRDb29raWUpLCA9PSwg
a0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfdmFsdWUo
Zm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVlTmV3KTsKKworICAgIC8vIE5vdyBjcmVhdGUg
YW5vdGhlciBjb29raWUgd2l0aCBhIGRpZmZlcmVudCBwYXRoIGFuZCBhZGQgaXQuCisgICAgR1Vu
aXF1ZVB0cjxTb3VwQ29va2llPiBzZWNvbmRDb29raWUoc291cF9jb29raWVfbmV3KGtDb29raWVO
YW1lLCBrQ29va2llVmFsdWVOZXcsIGtGaXJzdFBhcnR5RG9tYWluLCBrQ29va2llUGF0aE5ldywg
U09VUF9DT09LSUVfTUFYX0FHRV9PTkVfSE9VUikpOworICAgIHRlc3QtPmFkZENvb2tpZShzZWNv
bmRDb29raWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3Qt
PmdldERvbWFpbnMoKSksID09LCAxKTsKKworICAgIC8vIFJldHJpZXZlIHRoZSBsaXN0IG9mIGNv
b2tpZXMgZm9yIHRoZSBzYW1lIGRvbWFpbiBhbmQgcGF0aCBhZ2FpbiBub3cgYW5kIGNoZWNrLgor
ICAgIGRvbWFpblVSTC5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMlcyIsIFNPVVBfVVJJ
X1NDSEVNRV9IVFRQLCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcpKTsKKyAgICB1
cmkucmVzZXQoc291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkpOworICAgIGZvdW5kQ29va2ll
cyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKworICAgIC8vIFdlIGhhdmUgbm93IDIg
Y29va2llcyB0aGF0IHdvdWxkIGFwcGx5IHRvIHRoZSBwYXNzZWQgVVJMLCBvbmUgaXMgdGhlIGNv
b2tpZSBpbml0aWFsbHkKKyAgICAvLyBsb2FkZWQgd2l0aCB0aGUgd2ViIGNvbnRlbnQgYW5kIHRo
ZSBvdGhlciBjb29raWUgdGhlIG9uZSB3ZSBtYW51YWxseSBhZGRlZC4KKyAgICBnX2Fzc2VydF9u
b25udWxsKGZvdW5kQ29va2llcyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgo
Zm91bmRDb29raWVzKSwgPT0sIDIpOworCisgICAgLy8gQWRkIGEgdGhpcmQgbmV3IGNvb2tpZSBm
b3IgYSBkaWZmZXJlbnQgZG9tYWluIHRoYW4gdGhlIHByZXZpb3VzIG9uZXMuCisgICAgR1VuaXF1
ZVB0cjxTb3VwQ29va2llPiB0aGlyZENvb2tpZShzb3VwX2Nvb2tpZV9uZXcoa0Nvb2tpZU5hbWUs
IGtDb29raWVWYWx1ZU5ldywga1RoaXJkUGFydHlEb21haW4sIGtDb29raWVQYXRoTmV3LCBTT1VQ
X0NPT0tJRV9NQVhfQUdFX09ORV9IT1VSKSk7CisgICAgdGVzdC0+YWRkQ29va2llKHRoaXJkQ29v
a2llLmdldCgpKTsKKworICAgIC8vIE9ubHkgb25lIGNvb2tpZSBub3csIHNpbmNlIHRoZSBkb21h
aW4gaXMgZGlmZmVyZW50LgorICAgIGRvbWFpblVSTC5yZXNldChnX3N0cmR1cF9wcmludGYoIiVz
Oi8vJXMlcyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQLCBrVGhpcmRQYXJ0eURvbWFpbiwga0Nvb2tp
ZVBhdGhOZXcpKTsKKyAgICB1cmkucmVzZXQoc291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkp
OworICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tpZXMpLCA9PSwgMSk7CisgICAg
Z19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIp
OworCisgICAgZm91bmRDb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oZm91bmRDb29r
aWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X25hbWUoZm91
bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nv
b2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2llKSwgPT0sIGtUaGlyZFBhcnR5RG9tYWluKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3BhdGgoZm91bmRDb29raWUpLCA9PSwg
a0Nvb2tpZVBhdGhOZXcpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfdmFs
dWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVlTmV3KTsKKworICAgIC8vIEZpbmFsbHks
IGRlbGV0ZSBhbGwgY29va2llcyBhbmQgY2hlY2sgdGhleSBhcmUgYWxsIGdvbmUuCisgICAgdGVz
dC0+ZGVsZXRlQWxsQ29va2llcygpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3Ro
KHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKK30KKworc3RhdGljIHZvaWQgdGVzdENvb2tp
ZU1hbmFnZXJHZXRDb29raWVzKENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIC8vIExvYWQgdGhlIGh0bWwgY29udGVudCBhbmQgcmV0cmlldmUgdGhlIDIgY29v
a2llcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHdpdGggQUxXQVlTIHBvbGljeS4KKyAgICB0ZXN0LT5z
ZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgLy8g
UmV0cmlldmUgdGhlIGZpcnN0IGNvb2tpZSB1c2luZyBhIEhUVFAgc2NoZW1lLgorICAgIEdVbmlx
dWVQdHI8Y2hhcj4gZG9tYWluVVJMKGdfc3RyZHVwX3ByaW50ZigiJXM6Ly8lcyIsIFNPVVBfVVJJ
X1NDSEVNRV9IVFRQLCBrRmlyc3RQYXJ0eURvbWFpbikpOworICAgIEdVbmlxdWVQdHI8U291cFVS
ST4gdXJpKHNvdXBfdXJpX25ldyhkb21haW5VUkwuZ2V0KCkpKTsKKyAgICBHTGlzdCogZm91bmRD
b29raWVzID0gdGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworICAgIGdfYXNzZXJ0X25vbm51
bGwoZm91bmRDb29raWVzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3Vu
ZENvb2tpZXMpLCA9PSwgMSk7CisKKyAgICBTb3VwQ29va2llKiBmb3VuZENvb2tpZSA9IHN0YXRp
Y19jYXN0PFNvdXBDb29raWUqPihmb3VuZENvb2tpZXMtPmRhdGEpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFtZShmb3VuZENvb2tpZSksID09LCBrQ29va2llTmFtZSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9kb21haW4oZm91bmRDb29raWUp
LCA9PSwga0ZpcnN0UGFydHlEb21haW4pOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tp
ZV9nZXRfcGF0aChmb3VuZENvb2tpZSksID09LCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHNvdXBfY29va2llX2dldF92YWx1ZShmb3VuZENvb2tpZSksID09LCBrQ29va2llVmFs
dWUpOworCisgICAgLy8gUmV0cmlldmUgdGhlIHNlY29uZCBjb29raWUgdXNpbmcgYSBIVFRQUyBz
Y2hlbWUuCisgICAgZG9tYWluVVJMLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJXM6Ly8lcyIsIFNP
VVBfVVJJX1NDSEVNRV9IVFRQUywga1RoaXJkUGFydHlEb21haW4pKTsKKyAgICB1cmkucmVzZXQo
c291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkpOworICAgIGZvdW5kQ29va2llcyA9IHRlc3Qt
PmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGZvdW5kQ29va2ll
cyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0s
IDEpOworCisgICAgZm91bmRDb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oZm91bmRD
b29raWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X25hbWUo
Zm91bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3Vw
X2Nvb2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2llKSwgPT0sIGtUaGlyZFBhcnR5RG9tYWluKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3BhdGgoZm91bmRDb29raWUpLCA9
PSwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfdmFs
dWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVlKTsKKworICAgIC8vIENyZWF0ZSBhIG5l
dyBjb29raWUgYW5kIGFkZCBpdCB0byB0aGUgZmlyc3QgZG9tYWluLgorICAgIEdVbmlxdWVQdHI8
U291cENvb2tpZT4gbmV3Q29va2llKHNvdXBfY29va2llX25ldyhrQ29va2llTmFtZSwga0Nvb2tp
ZVZhbHVlTmV3LCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcsIFNPVVBfQ09PS0lF
X01BWF9BR0VfT05FX0hPVVIpKTsKKyAgICB0ZXN0LT5hZGRDb29raWUobmV3Q29va2llLmdldCgp
KTsKKworICAgIC8vIFdlIHNob3VsZCBnZXQgMiBjb29raWVzIHRoYXQgd291bGQgYXBwbHkgdG8g
dGhlIHNhbWUgVVJMIHBhc3NlZCwgc2luY2UKKyAgICAvLyBodHRwOi8vMTI3LjAuMC4xL25ldyBp
cyBhIHN1YnNldCBvZiB0aGUgaHR0cDovLzEyNy4wLjAuMS8gVVJMLgorICAgIGRvbWFpblVSTC5y
ZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMlcyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQLCBr
Rmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcpKTsKKyAgICB1cmkucmVzZXQoc291cF91
cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkpOworICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENv
b2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGZvdW5kQ29va2llcyk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDIpOwor
CisgICAgLy8gV2UgaGF2ZSBub3cgMiBjb29raWVzIHRoYXQgd291bGQgYXBwbHkgdG8gdGhlIHBh
c3NlZCBVUkwsIG9uZSBpcyB0aGUgY29va2llIGluaXRpYWxseQorICAgIC8vIGxvYWRlZCB3aXRo
IHRoZSB3ZWIgY29udGVudCBhbmQgdGhlIG90aGVyIGNvb2tpZSB0aGUgb25lIHdlIG1hbnVhbGx5
IGFkZGVkLgorICAgIGdfYXNzZXJ0X25vbm51bGwoZm91bmRDb29raWVzKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tpZXMpLCA9PSwgMik7CisKKyAgICBib29s
IG5ld1BhdGhDaGVja2VkID0gZmFsc2U7CisgICAgY29uc3QgY2hhciogcGF0aEZvdW5kID0gbnVs
bHB0cjsKKyAgICBjb25zdCBjaGFyKiB2YWx1ZUZvdW5kID0gbnVsbHB0cjsKKyAgICBmb3IgKHVp
bnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAgZm91bmRDb29raWUgPSBzdGF0aWNfY2Fz
dDxTb3VwQ29va2llKj4oZ19saXN0X250aF9kYXRhKGZvdW5kQ29va2llcywgaSkpOworICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwg
a0Nvb2tpZU5hbWUpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X2Rv
bWFpbihmb3VuZENvb2tpZSksID09LCBrRmlyc3RQYXJ0eURvbWFpbik7CisKKyAgICAgICAgLy8g
Q29va2llcyB3aWxsIGhhdmUgZGlmZmVyZW50IHZhbHVlcyBmb3IgJ3ZhbHVlJyBhbmQgJ3BhdGgn
LCBzbyBtYWtlIHN1cmUgdGhhdAorICAgICAgICAvLyB3ZSBjaGVjayBmb3IgYm90aCBwb3NzaWJp
bGl0aWVzLCBidXQgZGlmZmVyZW50IG9uZXMgZm9yIGVhY2ggY29va2llIGZvdW5kLgorICAgICAg
ICBwYXRoRm91bmQgPSBzb3VwX2Nvb2tpZV9nZXRfcGF0aChmb3VuZENvb2tpZSk7CisgICAgICAg
IHZhbHVlRm91bmQgPSBzb3VwX2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRDb29raWUpOworICAgICAg
ICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChuZXdQYXRoQ2hlY2tlZCkgeworICAgICAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihwYXRoRm91bmQsID09LCBrQ29va2llUGF0aCk7Cisg
ICAgICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlRm91bmQsID09LCBrQ29va2llVmFs
dWUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBnX2Fzc2VydF9jbXBz
dHIocGF0aEZvdW5kLCA9PSwga0Nvb2tpZVBhdGhOZXcpOworICAgICAgICAgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih2YWx1ZUZvdW5kLCA9PSwga0Nvb2tpZVZhbHVlTmV3KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChnX3N0cmNtcDAocGF0aEZvdW5k
LCBrQ29va2llUGF0aCkpIHsKKyAgICAgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIocGF0aEZv
dW5kLCA9PSwga0Nvb2tpZVBhdGhOZXcpOworICAgICAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0
cih2YWx1ZUZvdW5kLCA9PSwga0Nvb2tpZVZhbHVlTmV3KTsKKyAgICAgICAgICAgICAgICBuZXdQ
YXRoQ2hlY2tlZCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChnX3N0
cmNtcDAocGF0aEZvdW5kLCBrQ29va2llUGF0aE5ldykpIHsKKyAgICAgICAgICAgICAgICBnX2Fz
c2VydF9jbXBzdHIocGF0aEZvdW5kLCA9PSwga0Nvb2tpZVBhdGgpOworICAgICAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cih2YWx1ZUZvdW5kLCA9PSwga0Nvb2tpZVZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBuZXdQYXRoQ2hlY2tlZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgLy8gV2Ugc2hvdWxkIGdldCAxIGNvb2tpZSBvbmx5IGlmIHdlIHNwZWNp
ZnkgaHR0cDovLzEyNy4wLjAuMS8sIHRob3VnaC4KKyAgICBkb21haW5VUkwucmVzZXQoZ19zdHJk
dXBfcHJpbnRmKCIlczovLyVzIiwgU09VUF9VUklfU0NIRU1FX0hUVFAsIGtGaXJzdFBhcnR5RG9t
YWluKSk7CisgICAgdXJpLnJlc2V0KHNvdXBfdXJpX25ldyhkb21haW5VUkwuZ2V0KCkpKTsKKyAg
ICBmb3VuZENvb2tpZXMgPSB0ZXN0LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3Nl
cnRfbm9ubnVsbChmb3VuZENvb2tpZXMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVu
Z3RoKGZvdW5kQ29va2llcyksID09LCAxKTsKKworICAgIGZvdW5kQ29va2llID0gc3RhdGljX2Nh
c3Q8U291cENvb2tpZSo+KGZvdW5kQ29va2llcy0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHNvdXBfY29va2llX2dldF9uYW1lKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVOYW1lKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X2RvbWFpbihmb3VuZENvb2tpZSksID09
LCBrRmlyc3RQYXJ0eURvbWFpbik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dl
dF9wYXRoKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVQYXRoKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoc291cF9jb29raWVfZ2V0X3ZhbHVlKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVWYWx1ZSk7
CisKKyAgICAvLyBGaW5hbGx5LCBkZWxldGUgYWxsIGNvb2tpZXMgYW5kIHRyeSB0byByZXRyaWV2
ZSB0aGVtIGFnYWluLCBvbmUgYnkgb25lLgorICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9
PSwgMCk7CisKKyAgICBkb21haW5VUkwucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlczovLyVzIiwg
U09VUF9VUklfU0NIRU1FX0hUVFAsIGtGaXJzdFBhcnR5RG9tYWluKSk7CisgICAgdXJpLnJlc2V0
KHNvdXBfdXJpX25ldyhkb21haW5VUkwuZ2V0KCkpKTsKKyAgICBmb3VuZENvb2tpZXMgPSB0ZXN0
LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfbnVsbChmb3VuZENvb2tpZXMp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZShDb29raWVN
YW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRBY2NlcHRQ
b2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICAvLyBJbml0aWFsbHksIHRoZXJl
IHNob3VsZCBiZSAyIGNvb2tpZXMgYXZhaWxhYmxlLgorICAgIGdfYXNzZXJ0X2NtcGludChnX3N0
cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAyKTsKKworICAgIC8vIERlbGV0ZSB0
aGUgY29va2llIGZvciB0aGUgZmlyc3QgcGFydHkgZG9tYWluLgorICAgIHRlc3QtPmRlbGV0ZUNv
b2tpZShrQ29va2llTmFtZSwga0ZpcnN0UGFydHlEb21haW4sIGtDb29raWVQYXRoKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7
CisKKyAgICAvLyBUcnkgZGVsZXRpbmcgYSBub24tZXhpc3RlbnQgY29va2llICh3cm9uZyBuYW1l
KS4KKyAgICB0ZXN0LT5kZWxldGVDb29raWUoIndyb25nLW5hbWUiLCBrVGhpcmRQYXJ0eURvbWFp
biwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3Qt
PmdldERvbWFpbnMoKSksID09LCAxKTsKKworICAgIC8vIFRyeSBkZWxldGluZyBhIG5vbi1leGlz
dGVudCBjb29raWUgKHdyb25nIGRvbWFpbikuCisgICAgdGVzdC0+ZGVsZXRlQ29va2llKGtDb29r
aWVOYW1lLCAid3JvbmctZG9tYWluIiwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAxKTsKKworICAgIC8vIFRy
eSBkZWxldGluZyBhIG5vbi1leGlzdGVudCBjb29raWUgKHdyb25nIHBhdGgpLgorICAgIHRlc3Qt
PmRlbGV0ZUNvb2tpZShrQ29va2llTmFtZSwga1RoaXJkUGFydHlEb21haW4sICJ3cm9uZy1wYXRo
Iik7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygp
KSwgPT0sIDEpOworCisgICAgLy8gRGVsZXRlIHRoZSBjb29raWUgZm9yIHRoZSB0aGlyZCBwYXJ0
eSBkb21haW4uCisgICAgdGVzdC0+ZGVsZXRlQ29va2llKGtDb29raWVOYW1lLCBrVGhpcmRQYXJ0
eURvbWFpbiwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3Ro
KHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKKworICAgIC8vIEZpbmFsbHksIGFkZCBhIG5l
dyBjb29raWUgbm93IHdlIGRvbid0IGhhdmUgYW55IGFuZCBkZWxldGUgaXQgYWZ0ZXJ3YXJkcy4K
KyAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IG5ld0Nvb2tpZShzb3VwX2Nvb2tpZV9uZXcoa0Nv
b2tpZU5hbWUsIGtDb29raWVWYWx1ZU5ldywga0ZpcnN0UGFydHlEb21haW4sIGtDb29raWVQYXRo
TmV3LCBTT1VQX0NPT0tJRV9NQVhfQUdFX09ORV9IT1VSKSk7CisgICAgdGVzdC0+YWRkQ29va2ll
KG5ld0Nvb2tpZS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVz
dC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOworICAgIHRlc3QtPmRlbGV0ZUNvb2tpZShrQ29va2ll
TmFtZSwga0ZpcnN0UGFydHlEb21haW4sIGtDb29raWVQYXRoTmV3KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7Cit9CisKIHN0
YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyhDb29raWVNYW5hZ2VyVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VC
S0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CkBAIC0zNjAsMTIgKzY1NSwxNCBAQCBz
dGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdl
KiBtZXNzYWdlLCBjb25zdCBjaGFyKgogICAgIH0KIAogICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBnY2hhciogaGVhZGVyX3N0ciA9IGdf
c3RyZHVwX3ByaW50ZigiJXM9JXM7IE1heC1BZ2U9NjAiLCBrQ29va2llTmFtZSwga0Nvb2tpZVZh
bHVlKTsKKwogICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2luZGV4Lmh0bWwiKSkgewogICAg
ICAgICBjaGFyKiBpbmRleEh0bWwgPSBnX3N0cmR1cF9wcmludGYoa0luZGV4SHRtbEZvcm1hdCwg
c291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX3JlcGxhY2UobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29raWUiLCAiZm9v
PWJhcjsgTWF4LUFnZT02MCIpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNl
KG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQtQ29va2llIiwgaGVhZGVyX3N0cik7CiAg
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBT
T1VQX01FTU9SWV9UQUtFLCBpbmRleEh0bWwsIHN0cmxlbihpbmRleEh0bWwpKTsKICAgICB9IGVs
c2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW1hZ2UucG5nIikpCi0gICAgICAgIHNvdXBfbWVz
c2FnZV9oZWFkZXJzX3JlcGxhY2UobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29r
aWUiLCAiYmF6PXF1eDsgTWF4LUFnZT02MCIpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQtQ29va2llIiwgaGVhZGVy
X3N0cik7CiAgICAgZWxzZQogICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdl
LCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwogICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwpAQCAtMzc3LDYgKzY3NCw5IEBAIHZvaWQgYmVmb3Jl
QWxsKCkKICAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwogCiAgICAgQ29va2llTWFu
YWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJhY2NlcHQtcG9saWN5IiwgdGVz
dENvb2tpZU1hbmFnZXJBY2NlcHRQb2xpY3kpOworICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQo
IldlYktpdENvb2tpZU1hbmFnZXIiLCAiYWRkLWNvb2tpZSIsIHRlc3RDb29raWVNYW5hZ2VyQWRk
Q29va2llKTsKKyAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2Vy
IiwgImdldC1jb29raWVzIiwgdGVzdENvb2tpZU1hbmFnZXJHZXRDb29raWVzKTsKKyAgICBDb29r
aWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImRlbGV0ZS1jb29raWUi
LCB0ZXN0Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZSk7CiAgICAgQ29va2llTWFuYWdlclRlc3Q6
OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJkZWxldGUtY29va2llcyIsIHRlc3RDb29raWVN
YW5hZ2VyRGVsZXRlQ29va2llcyk7CiAgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0
Q29va2llTWFuYWdlciIsICJjb29raWVzLWNoYW5nZWQiLCB0ZXN0Q29va2llTWFuYWdlckNvb2tp
ZXNDaGFuZ2VkKTsKICAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5h
Z2VyIiwgInBlcnNpc3RlbnQtc3RvcmFnZSIsIHRlc3RDb29raWVNYW5hZ2VyUGVyc2lzdGVudFN0
b3JhZ2UpOwotLSAKMi4xNC4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326469</attachid>
            <date>2017-11-09 10:57:08 -0800</date>
            <delta_ts>2017-11-18 13:26:51 -0800</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-GTK-New-API-to-add-retrieve-and-delete-cookies-via.patch</filename>
            <type>text/plain</type>
            <size>53487</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBiYWRkMzdiOGQxZTYxNjRhMzQ1MDBlMzA3NGM5NGQyNWRlODNiNjYyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpb0B3ZWJraXQub3Jn
PgpEYXRlOiBUaHUsIDkgTm92IDIwMTcgMTg6Mjk6MzUgKzAwMDAKU3ViamVjdDogW1BBVENIXSBb
R1RLXSBOZXcgQVBJIHRvIGFkZCwgcmV0cmlldmUgYW5kIGRlbGV0ZSBjb29raWVzIHZpYSAKIFdl
YktpdENvb2tpZU1hbmFnZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzkzMgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpTb3VyY2UvV2ViQ29yZToKCklt
cGxlbWVudGVkIHNldENvb2tpZSgpLCBnZXRDb29raWVzKCkgYW5kIGRlbGV0ZUNvb2tpZSgpIGlu
IHRoZSBTb3VwCmJhY2tlbmQsIGFuZCByZWZhY3RvcmVkIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMg
YW5kIGNvbnZlcnNpb25zIG91dCBvZgpOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwIGludG8gYSBu
ZXcgQ29va2llU291cC5jcHAgZmlsZSwgc28KdGhhdCB3ZSBub3cgY2FuIGNvbnZlcnQgYmV0d2Vl
biBTb3VwQ29va2llKiBhbmQgV2ViQ29yZTo6Q29va2llCmVhc2lseSBmcm9tIGFueXdoZXJlICh0
aGlzIGlzIG5vdyBuZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2VzcykuCgoqIHBsYXRmb3JtL0Nvb2tp
ZS5oOiBBZGQgZGVjbGFyYXRpb25zIGZvciB0aGUgbmV3IGNvbnZlcnNpb25zLgoqIHBsYXRmb3Jt
L1NvdXJjZXNTb3VwLnR4dDogQWRkIENvb2tpZVNvdXAuY3BwLgoqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9Db29raWVTb3VwLmNwcDogQWRkZWQuCihXZWJDb3JlOjpDb29raWU6OkNvb2tpZSk6IE5l
dyBjb25zdHJ1Y3RvciwgY3JlYXRlcyBhIFdlYkNvcmU6OkNvb2tpZSBvdXQgb2YgYSBTb3VwQ29v
a2llKi4KKFdlYkNvcmU6Om1zVG9Tb3VwRGF0ZSk6IE1vdmVkIGZyb20gTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uU291cC5jcHAuCihXZWJDb3JlOjpDb29raWU6OnRvU291cENvb2tpZSk6IE5ldywgYmFz
ZWQgb24gdG9Tb3VwQ29va2llKCkgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcC4K
KiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHA6CihX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMpOiBVc2VkIHRoZSBuZXcg
aW1wbGljaXQgY29udmVyc2lvbi4KKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0
Q29va2llKTogTmV3bHkgaW1wbGVtZW50ZWQuCihXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmRlbGV0ZUNvb2tpZSk6IE5ld2x5IGltcGxlbWVudGVkLgooV2ViQ29yZTo6TmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpnZXRDb29raWVzKTogTmV3bHkgaW1wbGVtZW50ZWQuCgpTb3VyY2UvV2Vi
S2l0OgoKQWRkZWQgbmV3IEFQSSB0byBXZWJLaXRDb29raWVNYW5hZ2VyIHRvIGFkZCwgcmV0cmll
dmUgYW5kIGRlbGV0ZSBjb21wbGV0ZQpjb29raWVzIGludG8vb3V0LW9mIGEgcnVubmluZyBzZXNz
aW9uLCBhbmQgdXBkYXRlZCBkb2N1bWVudGF0aW9uIHNlY3Rpb25zLgoKKiBVSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6Cih3ZWJraXRfY29va2llX21hbmFnZXJfYWRk
X2Nvb2tpZSk6IE5ldyBmdW5jdGlvbi4KKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2ll
X2ZpbmlzaCk6IERpdHRvLgood2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKTogRGl0
dG8uCih3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNoKTogRGl0dG8uCih3
ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6IERpdHRvLgood2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVfZmluaXNoKTogRGl0dG8uCiogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Q29va2llTWFuYWdlci5oOiBBZGRlZCBuZXcgZnVuY3Rpb25zLgoqIFVJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdENvb2tpZU1hbmFnZXIuaDogRGl0dG8uCiogVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6IERpdHRvLgoKVG9vbHM6CgpBZGRl
ZCBuZXcgdGVzdCBjYXNlcyB0byBjb3ZlciB0aGUgbmV3bHkgYWRkZWQgQVBJIGZvciBXZWJLaXRD
b29raWVNYW5hZ2VyOgp3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZSwgd2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2dldF9jb29raWVzIGFuZAp3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRl
X2Nvb2tpZS4KCiogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVNYW5h
Z2VyLmNwcDoKKHRlc3RDb29raWVNYW5hZ2VyQWRkQ29va2llKTogQWRkZWQuCih0ZXN0Q29va2ll
TWFuYWdlckdldENvb2tpZXMpOiBBZGRlZC4KKHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2ll
KTogQWRkZWQuCihzZXJ2ZXJDYWxsYmFjayk6IFNtYWxsIHVwZGF0ZSB0byBhdm9pZCBoYXJkY29k
aW5nIHN0cmluZ3Mgd2UgcmV1c2UuCihiZWZvcmVBbGwpOiBBZGRlZCB0aGUgbmV3IHRlc3QgY2Fz
ZXMgdG8gdGhlIHRlc3Qgc3VpdGUuCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMjUgKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nv
b2tpZS5oICAgICAgICAgICAgICAgICAgIHwgICAzICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NvdXJjZXNTb3VwLnR4dCAgICAgICAgICAgIHwgICAxICsKIC4uLi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9Db29raWVTb3VwLmNwcCAgIHwgIDc3ICsrKysrCiAuLi4vbmV0d29yay9z
b3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwICAgICB8ICA1MSArKy0tCiBTb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMSArKwogLi4u
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCAgICAgfCAxODcgKysr
KysrKysrKysrCiAuLi4vV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFn
ZXIuaCB8ICA0MCArKysKIC4uLi9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMu
dHh0ICAgICAgIHwgICA2ICsKIC4uLi9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29v
a2llTWFuYWdlci5oIHwgIDQwICsrKwogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMTggKysKIC4uLi9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29r
aWVNYW5hZ2VyLmNwcCAgICAgICAgIHwgMzE1ICsrKysrKysrKysrKysrKysrKysrLQogMTIgZmls
ZXMgY2hhbmdlZCwgNzQwIGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3Vw
LmNwcAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAxZjQyOWNiYjg0Ni4uNGI1OWY3ZjBjYTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyOCBAQAorMjAxNy0xMS0wOSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlv
QGVuZGxlc3NtLmNvbT4KKworICAgICAgICBbR1RLXSBOZXcgQVBJIHRvIGFkZCwgcmV0cmlldmUg
YW5kIGRlbGV0ZSBjb29raWVzIHZpYSBXZWJLaXRDb29raWVNYW5hZ2VyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc5MzIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBzZXRDb29raWUo
KSwgZ2V0Q29va2llcygpIGFuZCBkZWxldGVDb29raWUoKSBpbiB0aGUgU291cAorICAgICAgICBi
YWNrZW5kLCBhbmQgcmVmYWN0b3JlZCBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCBjb252ZXJz
aW9ucyBvdXQgb2YKKyAgICAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cCBpbnRvIGEgbmV3
IENvb2tpZVNvdXAuY3BwIGZpbGUsIHNvCisgICAgICAgIHRoYXQgd2Ugbm93IGNhbiBjb252ZXJ0
IGJldHdlZW4gU291cENvb2tpZSogYW5kIFdlYkNvcmU6OkNvb2tpZQorICAgICAgICBlYXNpbHkg
ZnJvbSBhbnl3aGVyZSAodGhpcyBpcyBub3cgbmVlZGVkIGZyb20gdGhlIFVJIFByb2Nlc3MpLgor
CisgICAgICAgICogcGxhdGZvcm0vQ29va2llLmg6IEFkZCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBu
ZXcgY29udmVyc2lvbnMuCisgICAgICAgICogcGxhdGZvcm0vU291cmNlc1NvdXAudHh0OiBBZGQg
Q29va2llU291cC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNv
dXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZTo6Q29va2llKTogTmV3IGNv
bnN0cnVjdG9yLCBjcmVhdGVzIGEgV2ViQ29yZTo6Q29va2llIG91dCBvZiBhIFNvdXBDb29raWUq
LgorICAgICAgICAoV2ViQ29yZTo6bXNUb1NvdXBEYXRlKTogTW92ZWQgZnJvbSBOZXR3b3JrU3Rv
cmFnZVNlc3Npb25Tb3VwLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZTo6dG9Tb3VwQ29v
a2llKTogTmV3LCBiYXNlZCBvbiB0b1NvdXBDb29raWUoKSBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvblNvdXAuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3Rv
cmFnZVNlc3Npb25Tb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6c2V0Q29va2llcyk6IFVzZWQgdGhlIG5ldyBpbXBsaWNpdCBjb252ZXJzaW9uLgorICAg
ICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWUpOiBOZXdseSBp
bXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVs
ZXRlQ29va2llKTogTmV3bHkgaW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmdldENvb2tpZXMpOiBOZXdseSBpbXBsZW1lbnRlZC4KKwogMjAxNy0x
MS0wOSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMYXlvdXRT
dGF0ZSBjbGVhbnVwXSBMYXlvdVN0YXRlOjptX2xpbmVHcmlkIHNob3VsZCBiZSBhIHdlYWsgcG9p
bnRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWUuaAppbmRleCAwOTMzY2NhMDczYy4uODRiZWJjOWRi
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oCkBAIC02Nyw2ICs2Nyw5IEBAIHN0cnVjdCBD
b29raWUgewogI2lmZGVmIF9fT0JKQ19fCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29va2llKE5TSFRU
UENvb2tpZSAqKTsKICAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBOU0hUVFBDb29raWUgKigp
IGNvbnN0OworI2VsaWYgVVNFKFNPVVApCisgICAgQ29va2llKFNvdXBDb29raWUqKTsKKyAgICBT
b3VwQ29va2llKiB0b1NvdXBDb29raWUoKSBjb25zdDsKICNlbmRpZgogCiAgICAgYm9vbCBpc051
bGwoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc1Nv
dXAudHh0IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc1NvdXAudHh0CmluZGV4IGVi
ZGM4OWYxNjQzLi44ZTQ3ZDYyYTM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU291cmNlc1NvdXAudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNT
b3VwLnR4dApAQCAtMjQsNiArMjQsNyBAQAogcGxhdGZvcm0vbmV0d29yay9zb3VwL0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKIHBsYXRmb3JtL25ldHdvcmsvc291cC9DZXJ0aWZpY2F0
ZUluZm8uY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKK3BsYXRm
b3JtL25ldHdvcmsvc291cC9Db29raWVTb3VwLmNwcAogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nv
b2tpZVN0b3JhZ2VTb3VwLmNwcAogcGxhdGZvcm0vbmV0d29yay9zb3VwL0NyZWRlbnRpYWxTdG9y
YWdlU291cC5jcHAKIHBsYXRmb3JtL25ldHdvcmsvc291cC9ETlNTb3VwLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lZGU3Njg2YTQyNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3Vw
LmNwcApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBT
LkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgRW5kbGVzcyBNb2JpbGUsIEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNvb2tpZS5oIgorCisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworQ29va2llOjpDb29raWUoU291cENvb2tpZSogY29va2llKQorewor
ICAgIG5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KGNvb2tpZS0+bmFtZSk7CisgICAgdmFsdWUgPSBT
dHJpbmc6OmZyb21VVEY4KGNvb2tpZS0+dmFsdWUpOworICAgIGRvbWFpbiA9IFN0cmluZzo6ZnJv
bVVURjgoY29va2llLT5kb21haW4pOworICAgIHBhdGggPSBTdHJpbmc6OmZyb21VVEY4KGNvb2tp
ZS0+cGF0aCk7CisgICAgZXhwaXJlcyA9IGNvb2tpZS0+ZXhwaXJlcyA/IHN0YXRpY19jYXN0PGRv
dWJsZT4oc291cF9kYXRlX3RvX3RpbWVfdChjb29raWUtPmV4cGlyZXMpKSAqIDEwMDAgOiAwOwor
ICAgIGh0dHBPbmx5ID0gY29va2llLT5odHRwX29ubHk7CisgICAgc2VjdXJlID0gY29va2llLT5z
ZWN1cmU7CisgICAgc2Vzc2lvbiA9ICFjb29raWUtPmV4cGlyZXM7Cit9CisKK3N0YXRpYyBTb3Vw
RGF0ZSogbXNUb1NvdXBEYXRlKGRvdWJsZSBtcykKK3sKKyAgICBpbnQgeWVhciA9IG1zVG9ZZWFy
KG1zKTsKKyAgICBpbnQgZGF5T2ZZZWFyID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKKyAgICBib29s
IGxlYXBZZWFyID0gaXNMZWFwWWVhcih5ZWFyKTsKKworICAgIC8vIG1vbnRoRnJvbURheUluWWVh
cigpIHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgWzAsMTFdIHJhbmdlLCB3aGlsZSBzb3VwX2RhdGVf
bmV3KCkgZXhwZWN0cworICAgIC8vIGEgdmFsdWUgaW4gdGhlIFsxLDEyXSByYW5nZSwgbWVhbmlu
ZyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGFkanVzdCB0aGUgbW9udGggdmFsdWUuCisgICAgcmV0dXJu
IHNvdXBfZGF0ZV9uZXcoeWVhciwgbW9udGhGcm9tRGF5SW5ZZWFyKGRheU9mWWVhciwgbGVhcFll
YXIpICsgMSwgZGF5SW5Nb250aEZyb21EYXlJblllYXIoZGF5T2ZZZWFyLCBsZWFwWWVhciksIG1z
VG9Ib3VycyhtcyksIG1zVG9NaW51dGVzKG1zKSwgc3RhdGljX2Nhc3Q8aW50PihtcyAvIDEwMDAp
ICUgNjApOworfQorCitTb3VwQ29va2llKiBDb29raWU6OnRvU291cENvb2tpZSgpIGNvbnN0Cit7
CisgICAgaWYgKG5hbWUuaXNOdWxsKCkgfHwgdmFsdWUuaXNOdWxsKCkgfHwgZG9tYWluLmlzTnVs
bCgpIHx8IHBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgU291
cENvb2tpZSogc291cENvb2tpZSA9IHNvdXBfY29va2llX25ldyhuYW1lLnV0ZjgoKS5kYXRhKCks
IHZhbHVlLnV0ZjgoKS5kYXRhKCksCisgICAgICAgIGRvbWFpbi51dGY4KCkuZGF0YSgpLCBwYXRo
LnV0ZjgoKS5kYXRhKCksIC0xKTsKKworICAgIHNvdXBfY29va2llX3NldF9odHRwX29ubHkoc291
cENvb2tpZSwgaHR0cE9ubHkpOworICAgIHNvdXBfY29va2llX3NldF9zZWN1cmUoc291cENvb2tp
ZSwgc2VjdXJlKTsKKworICAgIGlmICghc2Vzc2lvbikgeworICAgICAgICBTb3VwRGF0ZSogZGF0
ZSA9IG1zVG9Tb3VwRGF0ZShleHBpcmVzKTsKKyAgICAgICAgc291cF9jb29raWVfc2V0X2V4cGly
ZXMoc291cENvb2tpZSwgZGF0ZSk7CisgICAgICAgIHNvdXBfZGF0ZV9mcmVlKGRhdGUpOworICAg
IH0KKworICAgIHJldHVybiBzb3VwQ29va2llOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKaW5kZXggY2I4NjhjYzA3YjYuLjJh
OGI1M2NkMmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCkBAIC0yLDYg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEVuZGxlc3MgTW9iaWxlLCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMzLDYgKzM0LDcgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvR1VuaXF1ZVB0clNvdXAuaD4KICNpbmNsdWRlIDxsaWJzb3VwL3Nv
dXAuaD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgpAQCAtMjg5LDQ1ICsyOTEsMjEgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNh
dmVDcmVkZW50aWFsVG9QZXJzaXN0ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3AKICNlbmRp
ZgogfQogCi1zdGF0aWMgU291cERhdGUqIG1zVG9Tb3VwRGF0ZShkb3VibGUgbXMpCi17Ci0gICAg
aW50IHllYXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgaW50IGRheU9mWWVhciA9IGRheUluWWVhciht
cywgeWVhcik7Ci0gICAgYm9vbCBsZWFwWWVhciA9IGlzTGVhcFllYXIoeWVhcik7Ci0KLSAgICAv
LyBtb250aEZyb21EYXlJblllYXIoKSByZXR1cm5zIGEgdmFsdWUgaW4gdGhlIFswLDExXSByYW5n
ZSwgd2hpbGUgc291cF9kYXRlX25ldygpIGV4cGVjdHMKLSAgICAvLyBhIHZhbHVlIGluIHRoZSBb
MSwxMl0gcmFuZ2UsIG1lYW5pbmcgd2UgaGF2ZSB0byBtYW51YWxseSBhZGp1c3QgdGhlIG1vbnRo
IHZhbHVlLgotICAgIHJldHVybiBzb3VwX2RhdGVfbmV3KHllYXIsIG1vbnRoRnJvbURheUluWWVh
cihkYXlPZlllYXIsIGxlYXBZZWFyKSArIDEsIGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKGRheU9m
WWVhciwgbGVhcFllYXIpLCBtc1RvSG91cnMobXMpLCBtc1RvTWludXRlcyhtcyksIHN0YXRpY19j
YXN0PGludD4obXMgLyAxMDAwKSAlIDYwKTsKLX0KLQotc3RhdGljIFNvdXBDb29raWUqIHRvU291
cENvb2tpZShjb25zdCBDb29raWUmIGNvb2tpZSkKLXsKLSAgICBTb3VwQ29va2llKiBzb3VwQ29v
a2llID0gc291cF9jb29raWVfbmV3KGNvb2tpZS5uYW1lLnV0ZjgoKS5kYXRhKCksIGNvb2tpZS52
YWx1ZS51dGY4KCkuZGF0YSgpLAotICAgICAgICBjb29raWUuZG9tYWluLnV0ZjgoKS5kYXRhKCks
IGNvb2tpZS5wYXRoLnV0ZjgoKS5kYXRhKCksIC0xKTsKLSAgICBzb3VwX2Nvb2tpZV9zZXRfaHR0
cF9vbmx5KHNvdXBDb29raWUsIGNvb2tpZS5odHRwT25seSk7Ci0gICAgc291cF9jb29raWVfc2V0
X3NlY3VyZShzb3VwQ29va2llLCBjb29raWUuc2VjdXJlKTsKLSAgICBpZiAoIWNvb2tpZS5zZXNz
aW9uKSB7Ci0gICAgICAgIFNvdXBEYXRlKiBkYXRlID0gbXNUb1NvdXBEYXRlKGNvb2tpZS5leHBp
cmVzKTsKLSAgICAgICAgc291cF9jb29raWVfc2V0X2V4cGlyZXMoc291cENvb2tpZSwgZGF0ZSk7
Ci0gICAgICAgIHNvdXBfZGF0ZV9mcmVlKGRhdGUpOwotICAgIH0KLSAgICByZXR1cm4gc291cENv
b2tpZTsKLX0KLQogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMoY29uc3Qg
VmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYpCiB7CiAgICAg
Zm9yIChhdXRvIGNvb2tpZSA6IGNvb2tpZXMpCi0gICAgICAgIHNvdXBfY29va2llX2phcl9hZGRf
Y29va2llKGNvb2tpZVN0b3JhZ2UoKSwgdG9Tb3VwQ29va2llKGNvb2tpZSkpOworICAgICAgICBz
b3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZShjb29raWVTdG9yYWdlKCksIGNvb2tpZS50b1NvdXBD
b29raWUoKSk7CiB9CiAKLXZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWUoY29u
c3QgQ29va2llJikKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWUoY29uc3Qg
Q29va2llJiBjb29raWUpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV0syIHRvIHVz
ZS4KKyAgICBzb3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZShjb29raWVTdG9yYWdlKCksIGNvb2tp
ZS50b1NvdXBDb29raWUoKSk7CiB9CiAKLXZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxl
dGVDb29raWUoY29uc3QgQ29va2llJikKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxl
dGVDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCBmb3IgV0syIHRvIHVzZS4KKyAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IHRhcmdldENvb2tp
ZShjb29raWUudG9Tb3VwQ29va2llKCkpOworICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29v
a2llKGNvb2tpZVN0b3JhZ2UoKSwgdGFyZ2V0Q29va2llLmdldCgpKTsKIH0KIAogVmVjdG9yPENv
b2tpZT4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRBbGxDb29raWVzKCkKQEAgLTMzNiwxMCAr
MzE0LDE3IEBAIFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0QWxsQ29v
a2llcygpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotVmVjdG9yPENvb2tpZT4gTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpnZXRDb29raWVzKGNvbnN0IFVSTCYpCitWZWN0b3I8Q29va2llPiBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmdldENvb2tpZXMoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCBmb3IgV0syIHRvIHVzZS4KLSAgICByZXR1cm4geyB9OworICAgIFZlY3Rv
cjxDb29raWU+IGNvb2tpZXM7CisgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkgPSB1cmwuY3Jl
YXRlU291cFVSSSgpOworICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzTGlzdChzb3VwX2Nv
b2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGNvb2tpZVN0b3JhZ2UoKSwgdXJpLmdldCgpLCBUUlVF
KSk7CisgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBjb29raWVzTGlzdC5nZXQoKTsgaXRlbTsgaXRl
bSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+
IHNvdXBDb29raWUoc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpKTsKKyAgICAg
ICAgY29va2llcy5hcHBlbmQoV2ViQ29yZTo6Q29va2llKHNvdXBDb29raWUuZ2V0KCkpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gY29va2llczsKIH0KIAogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmZsdXNoQ29va2llU3RvcmUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmMjdkNGM3OWRmYS4uZjA4NzFmYWM0
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTctMTEtMDkgIE1hcmlvIFNhbmNoZXog
UHJhZGEgIDxtYXJpb0BlbmRsZXNzbS5jb20+CisKKyAgICAgICAgW0dUS10gTmV3IEFQSSB0byBh
ZGQsIHJldHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEgV2ViS2l0Q29va2llTWFuYWdlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTMyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3
IEFQSSB0byBXZWJLaXRDb29raWVNYW5hZ2VyIHRvIGFkZCwgcmV0cmlldmUgYW5kIGRlbGV0ZSBj
b21wbGV0ZQorICAgICAgICBjb29raWVzIGludG8vb3V0LW9mIGEgcnVubmluZyBzZXNzaW9uLCBh
bmQgdXBkYXRlZCBkb2N1bWVudGF0aW9uIHNlY3Rpb25zLgorCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2FkZF9jb29raWUpOiBOZXcgZnVuY3Rpb24uCisgICAgICAgICh3ZWJraXRfY29v
a2llX21hbmFnZXJfYWRkX2Nvb2tpZV9maW5pc2gpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9j
b29raWVfbWFuYWdlcl9nZXRfY29va2llcyk6IERpdHRvLgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9jb29raWVzX2ZpbmlzaCk6IERpdHRvLgorICAgICAgICAod2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaCk6IERpdHRvLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaDogQWRkZWQgbmV3IGZ1bmN0aW9ucy4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmg6IERpdHRv
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlv
bnMudHh0OiBEaXR0by4KKwogMjAxNy0xMS0wOSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBs
ZS5jb20+CiAKICAgICAgICAgU2VydmljZVdvcmtlckNsaWVudEZldGNoIHNob3VsZCBjcmVhdGUg
bm90IG51bGwgUmVzb3VyY2VFcnJvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAppbmRleCBlZWQyNzAyNjY0Ny4u
ZTc2YTE0YWI2NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEVuZGxl
c3MgTW9iaWxlLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIldlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJL
aXRXZWJzaXRlRGF0YVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVJlY29yZC5oIgor
I2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgog
I2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlw
ZS5oPgpAQCAtMjMyLDYgKzIzNCwxOTEgQEAgV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IHdlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeV9maW5pc2goV2ViS2l0Q28KICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWUgPT0gLTEgPyBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTk9f
VEhJUkRfUEFSVFkgOiBzdGF0aWNfY2FzdDxXZWJLaXRDb29raWVBY2NlcHRQb2xpY3k+KHJldHVy
blZhbHVlKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZToK
KyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0Q29va2llTWFuYWdlcgorICogQGNvb2tpZTog
dGhlICNTb3VwQ29va2llIHRvIGJlIGFkZGVkCisgKiBAY2FuY2VsbGFibGU6IChhbGxvdy1ub25l
KTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQorICogQGNhbGxiYWNrOiAoc2Nv
cGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVz
dCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdGhlIGRhdGEgdG8gcGFz
cyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJvbm91c2x5IGFkZCBhICNTb3Vw
Q29va2llIHRvIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UsIHdoaWNoIGlzIG5vdCBwZXJzaXN0ZW50
CisgKiB1bmxlc3MgeW91IGV4cGxpY2l0bHkgY2FsbCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0
X3BlcnNpc3RlbnRfc3RvcmFnZSgpLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5p
c2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICogd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKCkgdG8gZ2V0IHRoZSByZXN1bHQg
b2YgdGhlIG9wZXJhdGlvbi4KKyAqLwordm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nv
b2tpZShXZWJLaXRDb29raWVNYW5hZ2VyICptYW5hZ2VyLCBTb3VwQ29va2llICpjb29raWUsIEdD
YW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdw
b2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJ
RV9NQU5BR0VSKG1hbmFnZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CisKKyAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworCisgICAgYXV0byBzZXNzaW9uSUQgPSB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUobWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIpLndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKTsKKyAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOworCisgICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0
dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwor
ICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRo
ZSBmaXJzdCBwcm9jZXNzIHBvb2wuCisgICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llKHNlc3Npb25JRCwgY29va2llLCBbdGFz
ayA9IFdURk1vdmUodGFzayldKENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAg
aWYgKGVycm9yICE9IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpIHsKKyAgICAgICAgICAgIC8v
IFRoaXMgY2FuIG9ubHkgaGFwcGVuIGluIGNhc2VzIHdoZXJlIHRoZSB3ZWIgcHJvY2VzcyBpcyBu
b3QgYXZhaWxhYmxlLAorICAgICAgICAgICAgLy8gY29uc2lkZXIgdGhlIG9wZXJhdGlvbiAiY2Fu
Y2VsbGVkIiBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBjbGllbnQuCisgICAgICAgICAg
ICBnX3Rhc2tfcmV0dXJuX25ld19lcnJvcih0YXNrLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VS
Uk9SX0NBTkNFTExFRCwgXygiT3BlcmF0aW9uIHdhcyBjYW5jZWxsZWQiKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFz
ay5nZXQoKSwgVFJVRSk7CisgICAgfSk7Cit9CisKKy8qKgorICogd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2FkZF9jb29raWVfZmluaXNoOgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29r
aWVNYW5hZ2VyCisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJu
IGxvY2F0aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBGaW5pc2ggYW4g
YXN5bmNocm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2FkZF9jb29raWUoKS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY29va2llIHdhcyBh
ZGRlZCBvciAlRkFMU0UgaW4gY2FzZSBvZiBlcnJvci4KKyAqLworZ2Jvb2xlYW4gd2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKFdlYktpdENvb2tpZU1hbmFnZXIgKm1hbmFn
ZXIsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlciksIEZBTFNFKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5hZ2Vy
KSwgRkFMU0UpOworCisgICAgcmV0dXJuIGdfdGFza19wcm9wYWdhdGVfYm9vbGVhbihHX1RBU0so
cmVzdWx0KSwgZXJyb3IpOworfQorCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRf
Y29va2llczoKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0Q29va2llTWFuYWdlcgorICog
QHVyaTogdGhlICNTb3VwVVJJIGZvciB0aGUgZG9tYWluIG9mIHRoZSBjb29raWVzIHRvIGJlIHJl
dHJpZXZlZAorICogQGNhbmNlbGxhYmxlOiAoYWxsb3ctbm9uZSk6IGEgI0dDYW5jZWxsYWJsZSBv
ciAlTlVMTCB0byBpZ25vcmUKKyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0FzeW5j
UmVhZHlDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBA
dXNlcl9kYXRhOiAoY2xvc3VyZSk6IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rp
b24KKyAqCisgKiBBc3luY2hyb25vdXNseSBnZXQgYSBsaXN0IG9mICNTb3VwQ29va2llIGZyb20g
QGNvb2tpZV9tYW5hZ2VyIGFzc29jaWF0ZWQgd2l0aCBAdXJpLCB3aGljaAorICogbXVzdCBiZSBl
aXRoZXIgYW5kIEhUVFAgb3IgYW4gSFRUUFMgVVJMLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlv
biBpcyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2Fs
bAorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzX2ZpbmlzaCgpIHRvIGdldCB0
aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3ZvaWQgd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2dldF9jb29raWVzKFdlYktpdENvb2tpZU1hbmFnZXIgKm1hbmFnZXIsIFNvdXBVUkkgKnVy
aSwgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFj
aywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
Q09PS0lFX01BTkFHRVIobWFuYWdlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoU09VUF9VUklf
VkFMSURfRk9SX0hUVFAodXJpKSk7CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRH
UmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkp
OworCisgICAgYXV0byBzZXNzaW9uSUQgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRh
U3RvcmUobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpLndlYnNpdGVEYXRhU3RvcmUoKS5zZXNz
aW9uSUQoKTsKKyAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOworCisg
ICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRh
dGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcworICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2Vz
cyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCisgICAgcHJv
Y2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29v
a2llcyhzZXNzaW9uSUQsIFdlYkNvcmU6OlVSTCh1cmkpLCBbdGFzayA9IFdURk1vdmUodGFzayld
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDYWxsYmFja0Jhc2U6OkVy
cm9yIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvciAhPSBDYWxsYmFja0Jhc2U6OkVycm9yOjpO
b25lKSB7CisgICAgICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpbiBjYXNlcyB3aGVy
ZSB0aGUgd2ViIHByb2Nlc3MgaXMgbm90IGF2YWlsYWJsZSwKKyAgICAgICAgICAgIC8vIGNvbnNp
ZGVyIHRoZSBvcGVyYXRpb24gImNhbmNlbGxlZCIgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0
aGUgY2xpZW50LgorICAgICAgICAgICAgZ190YXNrX3JldHVybl9uZXdfZXJyb3IodGFzay5nZXQo
KSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQsIF8oIk9wZXJhdGlvbiB3YXMgY2Fu
Y2VsbGVkIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgR0xp
c3QqIGNvb2tpZXNfbGlzdCA9IG51bGxwdHI7CisgICAgICAgIGZvciAoYXV0byYgY29va2llIDog
Y29va2llcykKKyAgICAgICAgICAgIGNvb2tpZXNfbGlzdCA9IGdfbGlzdF9wcmVwZW5kKGNvb2tp
ZXNfbGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKKworICAgICAgICBnX3Rhc2tfcmV0dXJu
X3BvaW50ZXIodGFzay5nZXQoKSwgZ19saXN0X3JldmVyc2UoY29va2llc19saXN0KSwgW10oZ3Bv
aW50ZXIgZGF0YSkgeworICAgICAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChzdGF0aWNfY2FzdDxH
TGlzdCo+KGRhdGEpLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihzb3VwX2Nvb2tp
ZV9mcmVlKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCisvKioKKyAqIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9nZXRfY29va2llc19maW5pc2g6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dl
YktpdENvb2tpZU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVycm9y
OiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAqIEZp
bmlzaCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X2Nvb2tpZXMoKS4KKyAqCisgKiBSZXR1cm5zOiAoZWxlbWVudC10eXBlIFNv
dXBDb29raWUpICh0cmFuc2ZlciBmdWxsKTogQSAjR1NMaXN0IG9mICNTb3VwQ29va2llIGluc3Rh
bmNlcworICogICAgb3IgJU5VTEwgaW4gY2FzZSBvZiBlcnJvci4KKyAqLworR0xpc3QqIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llc19maW5pc2goV2ViS2l0Q29va2llTWFuYWdlciAq
bWFuYWdlciwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSwgbnVs
bHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3VsdCwg
bWFuYWdlciksIG51bGxwdHIpOworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpc3Qq
PihnX3Rhc2tfcHJvcGFnYXRlX3BvaW50ZXIoR19UQVNLKHJlc3VsdCksIGVycm9yKSk7Cit9CisK
Ky8qKgorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWU6CisgKiBAY29va2ll
X21hbmFnZXI6IGEgI1dlYktpdENvb2tpZU1hbmFnZXIKKyAqIEBuYW1lOiB0aGUgbmFtZSB0aGUg
Y29va2llIHRvIGJlIGRlbGV0ZWQKKyAqIEBkb21haW46IHRoZSBkb21haW4gb2YgdGhlIGNvb2tp
ZSB0byBiZSBkZWxldGVkCisgKiBAcGF0aDogdGhlIHBhdGggb2YgdGhlIGNvb2tpZSB0byBiZSBk
ZWxldGVkCisgKiBAY2FuY2VsbGFibGU6IChhbGxvdy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9y
ICVOVUxMIHRvIGlnbm9yZQorICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNS
ZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1
c2VyX2RhdGE6IChjbG9zdXJlKTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlv
bgorICoKKyAqIEFzeW5jaHJvbm91c2x5IGRlbGV0ZSBhICNTb3VwQ29va2llIGZyb20gdGhlIGN1
cnJlbnQgc2Vzc2lvbiwgYXMgdW5pcXVlbGx5IGlkZW50aWZpZWQKKyAqIGJ5IGl0cyBuYW1lLCBk
b21haW4gYW5kIHBhdGguCisgKgorICogV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBA
Y2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhlbiBjYWxsCisgKiB3ZWJraXRfY29v
a2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0
aGUgb3BlcmF0aW9uLgorICovCit2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29v
a2llKFdlYktpdENvb2tpZU1hbmFnZXIgKm1hbmFnZXIsIGNvbnN0IGdjaGFyICpuYW1lLCBjb25z
dCBnY2hhciAqZG9tYWluLCBjb25zdCBnY2hhciAqcGF0aCwgR0NhbmNlbGxhYmxlICpjYW5jZWxs
YWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChkb21h
aW4pOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocGF0aCk7CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0
YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNr
LCB1c2VyRGF0YSkpOworCisgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHRoZSBuYW1lLCBkb21h
aW4gYW5kIHBhdGgsIHdoaWNoIGlzIHdoYXQgd2lsbCBiZSB1c2VkCisgICAgLy8gdG8gaWRlbnRp
ZnkgdGhlIGNvb2tpZSBpbiBTb3VwQ29va2llSmFyIGhlbGQgYnkgdGhlIG90aGVyIHByb2Nlc3Mu
IEhvd2V2ZXIsCisgICAgLy8gd2Ugc3RpbGwgbmVlZCB0byBjcmVhdGUgdGhlIENvb2tpZSB3aXRo
IGEgbm9uLWVtcHR5IHZhbHVlIG5vdCB0byBnZXQgZGlzY2FyZGVkCisgICAgLy8gb24gaXRzIHdh
eSB0byB0aGUgb3RoZXIgcHJvY2Vzcywgc28gd2UganVzdCBwYXNzIHRoZSBuYW1lIGFnYWluIHRo
ZXJlLgorICAgIFdlYkNvcmU6OkNvb2tpZSB0YXJnZXRDb29raWUoU3RyaW5nOjpmcm9tVVRGOChu
YW1lKSwgU3RyaW5nOjpmcm9tVVRGOChuYW1lKSwgU3RyaW5nOjpmcm9tVVRGOChkb21haW4pLCBT
dHJpbmc6OmZyb21VVEY4KHBhdGgpLCAtMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgU3RyaW5nKCks
IFdlYkNvcmU6OlVSTCgpLCBWZWN0b3I8dWludDE2X3Q+IHsgfSk7CisKKyAgICBhdXRvIHNlc3Np
b25JRCA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShtYW5hZ2VyLT5wcml2
LT5kYXRhTWFuYWdlcikud2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpOworICAgIGNvbnN0
IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQ
b29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7CisKKyAgICAvLyBDb29raWVzIGFyZSBy
ZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdh
cmRsZXNzCisgICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVz
dCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KKyAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUoc2Vzc2lvbklELCB0
YXJnZXRDb29raWUsIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oQ2FsbGJhY2tCYXNlOjpFcnJvciBl
cnJvcikgeworICAgICAgICBpZiAoZXJyb3IgIT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkg
eworICAgICAgICAgICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlcmUgdGhl
IHdlYiBwcm9jZXNzIGlzIG5vdCBhdmFpbGFibGUsCisgICAgICAgICAgICAvLyBjb25zaWRlciB0
aGUgb3BlcmF0aW9uICJjYW5jZWxsZWQiIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhlIGNs
aWVudC4KKyAgICAgICAgICAgIGdfdGFza19yZXR1cm5fbmV3X2Vycm9yKHRhc2suZ2V0KCksIEdf
SU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVELCBfKCJPcGVyYXRpb24gd2FzIGNhbmNlbGxl
ZCIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdfdGFza19y
ZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3
ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2g6CisgKiBAY29va2llX21h
bmFnZXI6IGEgI1dlYktpdENvb2tpZU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3Vs
dAorICogQGVycm9yOiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9y
ZQorICoKKyAqIEZpbmlzaCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3
ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSgpLgorICoKKyAqIFJldHVybnM6ICVU
UlVFIGlmIHRoZSBjb29raWUgd2FzIGFkZGVkIG9yICVGQUxTRSBpbiBjYXNlIG9mIGVycm9yLgor
ICovCitnYm9vbGVhbiB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2go
V2ViS2l0Q29va2llTWFuYWdlciAqbWFuYWdlciwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIEdFcnJv
ciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVf
TUFOQUdFUihtYW5hZ2VyKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFz
a19pc192YWxpZChyZXN1bHQsIG1hbmFnZXIpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gZ190YXNr
X3Byb3BhZ2F0ZV9ib29sZWFuKEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7Cit9CisKIC8qKgogICog
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llczoKICAqIEBjb29r
aWVfbWFuYWdlcjogYSAjV2ViS2l0Q29va2llTWFuYWdlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaAppbmRleCBlZTE3ZDIy
MDQ0OS4uMGU0ZjAxMTE0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEVuZGxl
c3MgTW9iaWxlLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSA8Z2lvL2dpby5oPgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAKIEdf
QkVHSU5fREVDTFMKQEAgLTEwNyw2ICsxMDksNDQgQEAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9hY2NlcHRfcG9saWN5X2ZpbmlzaCAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNS
ZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAg
ICoqZXJyb3IpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRf
Y29va2llICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAg
ICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTb3VwQ29va2llICAgICAgICAgICAgICAgICAgICpjb29raWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Nh
bmNlbGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFj
ayAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgdXNlcl9k
YXRhKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9j
b29raWVfZmluaXNoICAgICAgICAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAg
KmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAgICAgKnJlc3VsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJy
b3IgICAgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXBVUkkgICAgICAgICAg
ICAgICAgICAgICAgKnVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAgICAgICpjYW5jZWxsYWJs
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAg
ICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIEdMaXN0Kgord2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2dldF9jb29raWVzX2ZpbmlzaCAgICAgICAgICAgICAgKFdlYktpdENvb2tp
ZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAg
ICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CisKK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUgICAgICAg
ICAgICAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2Vy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgKm5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAg
ICAgICAgICAqZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgKnBhdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNl
bGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAg
ICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRh
KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9j
b29raWVfZmluaXNoICAgICAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNv
b2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3Ig
ICAgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CisKIFdFQktJVF9ERVBSRUNBVEVEX0ZPUih3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2gpIHZvaWQKIHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXMgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2Vy
ICAgICAgICAgICpjb29raWVfbWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAgICAgICpj
YW5jZWxsYWJsZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CmluZGV4IDM2ZjRmZjNk
Mjc1Li4wMWE0ZWIzNTMxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CkBAIC0x
MDA0LDYgKzEwMDQsMTIgQEAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5
CiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3lfZmluaXNoCiB3ZWJraXRf
Y29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzCiB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzX2ZpbmlzaAord2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2FkZF9jb29raWUKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaAor
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzCit3ZWJraXRfY29va2llX21hbmFnZXJf
Z2V0X2Nvb2tpZXNfZmluaXNoCit3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZQor
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVfZmluaXNoCiB3ZWJraXRfY29va2ll
X21hbmFnZXJfZGVsZXRlX2Nvb2tpZXNfZm9yX2RvbWFpbgogd2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2RlbGV0ZV9hbGxfY29va2llcwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdENvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0Q29va2llTWFuYWdlci5oCmluZGV4IDU5NTYzYWRkODg4Li5kYmVhNzg0
ODJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRD
b29raWVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJL
aXRDb29raWVNYW5hZ2VyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEyIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgRW5kbGVzcyBNb2JpbGUsIElu
Yy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNiw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDxnaW8v
Z2lvLmg+CiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAu
aD4KICNpbmNsdWRlIDx3cGUvV2ViS2l0RGVmaW5lcy5oPgogCiBHX0JFR0lOX0RFQ0xTCkBAIC0x
MDcsNiArMTA5LDQ0IEBAIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeV9m
aW5pc2ggICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAg
ICAgICAqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKIAorV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZSAgICAgICAgICAg
ICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U291cENvb2tpZSAgICAgICAgICAgICAgICAgICAqY29va2llLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAg
ICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxi
YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9B
UEkgZ2Jvb2xlYW4KK3dlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaCAgICAg
ICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAg
ICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdl
cl9nZXRfY29va2llcyAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAg
ICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTb3VwVVJJICAgICAgICAgICAgICAgICAgICAgICp1cmks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0NhbmNlbGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxs
YmFjayAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgdXNl
cl9kYXRhKTsKKworV0VCS0lUX0FQSSBHTGlzdCoKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRf
Y29va2llc19maW5pc2ggICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAg
ICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vy
cm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llICAgICAgICAgICAgICAgICAgIChXZWJL
aXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAg
ICAgICAgICAgICAgICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgKmRvbWFpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciAgICAgICAgICAgICAgICAgICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAg
ICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNr
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaCAgICAg
ICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5
bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAg
ICAgICoqZXJyb3IpOworCiBXRUJLSVRfREVQUkVDQVRFRF9GT1Iod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2ZldGNoKSB2b2lkCiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNf
d2l0aF9jb29raWVzICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2ll
X21hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODc5YzZkMmFj
NzAuLjI4MDQ0MTIwZGM0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTctMTEtMDkgIE1hcmlvIFNhbmNoZXogUHJh
ZGEgIDxtYXJpb0BlbmRsZXNzbS5jb20+CisKKyAgICAgICAgW0dUS10gTmV3IEFQSSB0byBhZGQs
IHJldHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEgV2ViS2l0Q29va2llTWFuYWdlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTMyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3IHRl
c3QgY2FzZXMgdG8gY292ZXIgdGhlIG5ld2x5IGFkZGVkIEFQSSBmb3IgV2ViS2l0Q29va2llTWFu
YWdlcjoKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUsIHdlYmtpdF9j
b29raWVfbWFuYWdlcl9nZXRfY29va2llcyBhbmQKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2RlbGV0ZV9jb29raWUuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAodGVzdENvb2tpZU1hbmFnZXJB
ZGRDb29raWUpOiBBZGRlZC4KKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyR2V0Q29va2llcyk6
IEFkZGVkLgorICAgICAgICAodGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWUpOiBBZGRlZC4K
KyAgICAgICAgKHNlcnZlckNhbGxiYWNrKTogU21hbGwgdXBkYXRlIHRvIGF2b2lkIGhhcmRjb2Rp
bmcgc3RyaW5ncyB3ZSByZXVzZS4KKyAgICAgICAgKGJlZm9yZUFsbCk6IEFkZGVkIHRoZSBuZXcg
dGVzdCBjYXNlcyB0byB0aGUgdGVzdCBzdWl0ZS4KKwogMjAxNy0xMS0wOSAgQnJlbnQgRnVsZ2hh
bSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBUZXN0IGZpeCBhZnRlciByMjI0NjA5
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENv
b2tpZU1hbmFnZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rl
c3RDb29raWVNYW5hZ2VyLmNwcAppbmRleCAxYmU4Y2MwZDA2MC4uNTVkNzIwNGQyMzAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0Q29va2llTWFu
YWdlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RD
b29raWVNYW5hZ2VyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5j
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSwxMiArMjIsMjEgQEAKIAogI2luY2x1ZGUgIldl
YktpdFRlc3RTZXJ2ZXIuaCIKICNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvR1VuaXF1ZVB0clNvdXAuaD4KICNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgogCiBzdGF0
aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGtGaXJz
dFBhcnR5RG9tYWluID0gIjEyNy4wLjAuMSI7CiBzdGF0aWMgY29uc3QgY2hhcioga1RoaXJkUGFy
dHlEb21haW4gPSAibG9jYWxob3N0IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtDb29raWVOYW1l
ID0gImZvbyI7CitzdGF0aWMgY29uc3QgY2hhcioga0Nvb2tpZVZhbHVlID0gImJhciI7CitzdGF0
aWMgY29uc3QgY2hhcioga0Nvb2tpZVBhdGggPSAiLyI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBr
Q29va2llUGF0aE5ldyA9ICIvbmV3IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrQ29va2llVmFsdWVO
ZXcgPSAibmV3LXZhbHVlIjsKKwogc3RhdGljIGNvbnN0IGNoYXIqIGtJbmRleEh0bWxGb3JtYXQg
PQogICAgICI8aHRtbD48Ym9keT4iCiAgICAgIiA8cD5XZWJLaXRHVEsrIENvb2tpZSBNYW5hZ2Vy
IHRlc3Q8L3A+IgpAQCAtNDcsMTAgKzU3LDYgQEAgcHVibGljOgogICAgIENvb2tpZU1hbmFnZXJU
ZXN0KCkKICAgICAgICAgOiBXZWJWaWV3VGVzdCgpCiAgICAgICAgICwgbV9jb29raWVNYW5hZ2Vy
KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2llX21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dl
dF9jb250ZXh0KG1fd2ViVmlldykpKQotICAgICAgICAsIG1fYWNjZXB0UG9saWN5KFdFQktJVF9D
T09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSkKLSAgICAgICAgLCBtX2RvbWFpbnMo
MCkKLSAgICAgICAgLCBtX2Nvb2tpZXNDaGFuZ2VkKGZhbHNlKQotICAgICAgICAsIG1fZmluaXNo
TG9vcFdoZW5Db29raWVzQ2hhbmdlKGZhbHNlKQogICAgIHsKICAgICAgICAgZ19hc3NlcnQod2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9jb29raWVfbWFuYWdlcih3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4
dChtX3dlYlZpZXcpKSkgPT0gbV9jb29raWVNYW5hZ2VyKTsKICAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX2Nvb2tpZU1hbmFnZXIsICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhjb29raWVzQ2hhbmdl
ZENhbGxiYWNrKSwgdGhpcyk7CkBAIC0xMDYsNiArMTEyLDY3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fYWNjZXB0UG9saWN5OwogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGFkZENvb2tp
ZVJlYWR5Q2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3Bv
aW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgICAgIGJvb2wgYWRkZWQgPSB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tp
ZV9maW5pc2goV0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91
dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKworICAgICAgICBDb29r
aWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvb2tpZU1hbmFnZXJUZXN0Kj4odXNl
ckRhdGEpOworICAgICAgICB0ZXN0LT5tX2Nvb2tpZUFkZGVkID0gYWRkZWQ7CisgICAgICAgIGdf
bWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgYm9vbCBhZGRD
b29raWUoU291cENvb2tpZSogY29va2llKQorICAgIHsKKyAgICAgICAgbV9jb29raWVBZGRlZCA9
IGZhbHNlOworICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShtX2Nvb2tp
ZU1hbmFnZXIsIGNvb2tpZSwgMCwgYWRkQ29va2llUmVhZHlDYWxsYmFjaywgdGhpcyk7CisgICAg
ICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKworICAgICAgICByZXR1cm4gbV9jb29r
aWVBZGRlZDsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBnZXRDb29raWVzUmVhZHlDYWxsYmFj
ayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0
YSkKKyAgICB7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAg
R0xpc3QqIGNvb2tpZXMgPSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNo
KFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7
CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisKKyAgICAgICAgQ29va2llTWFuYWdl
clRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsK
KyAgICAgICAgdGVzdC0+bV9jb29raWVzID0gY29va2llczsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHTGlzdCogZ2V0Q29va2llcyhT
b3VwVVJJKiB1cmkpCisgICAgeworICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fY29va2llcywg
cmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oc291cF9jb29raWVfZnJlZSkpOworICAg
ICAgICBtX2Nvb2tpZXMgPSAwOworICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nv
b2tpZXMobV9jb29raWVNYW5hZ2VyLCB1cmksIDAsIGdldENvb2tpZXNSZWFkeUNhbGxiYWNrLCB0
aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgICAgIHJl
dHVybiBtX2Nvb2tpZXM7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVsZXRlQ29va2llUmVh
ZHlDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRl
ciB1c2VyRGF0YSkKKyAgICB7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsK
KyAgICAgICAgYm9vbCBhZGRlZCA9IHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2ll
X2ZpbmlzaChXRUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0
UHRyKCkpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworCisgICAgICAgIENvb2tp
ZU1hbmFnZXJUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2llTWFuYWdlclRlc3QqPih1c2Vy
RGF0YSk7CisgICAgICAgIHRlc3QtPm1fY29va2llQWRkZWQgPSBhZGRlZDsKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBib29sIGRlbGV0
ZUNvb2tpZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBkb21haW4sIGNvbnN0IGNoYXIq
IHBhdGgpCisgICAgeworICAgICAgICBtX2Nvb2tpZURlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAg
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUobV9jb29raWVNYW5hZ2VyLCBuYW1l
LCBkb21haW4sIHBhdGgsIDAsIGRlbGV0ZUNvb2tpZVJlYWR5Q2FsbGJhY2ssIHRoaXMpOworICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICAgICAgcmV0dXJuIG1fY29v
a2llRGVsZXRlZDsKKyAgICB9CisKICAgICB2b2lkIHNldEFjY2VwdFBvbGljeShXZWJLaXRDb29r
aWVBY2NlcHRQb2xpY3kgcG9saWN5KQogICAgIHsKICAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX3NldF9hY2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdlciwgcG9saWN5KTsKQEAgLTE3MCwx
MSArMjM3LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFu
Z2UgPSBmYWxzZTsKICAgICB9CiAKLSAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtX2Nvb2tpZU1h
bmFnZXI7Ci0gICAgV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IG1fYWNjZXB0UG9saWN5OwotICAg
IGNoYXIqKiBtX2RvbWFpbnM7Ci0gICAgYm9vbCBtX2Nvb2tpZXNDaGFuZ2VkOwotICAgIGJvb2wg
bV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2U7CisgICAgV2ViS2l0Q29va2llTWFuYWdlciog
bV9jb29raWVNYW5hZ2VyIHsgbnVsbHB0ciB9OworICAgIFdlYktpdENvb2tpZUFjY2VwdFBvbGlj
eSBtX2FjY2VwdFBvbGljeSB7IFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9Q
QVJUWSB9OworICAgIGNoYXIqKiBtX2RvbWFpbnMgeyBudWxscHRyIH07CisgICAgR0xpc3QqIG1f
Y29va2llcyB7IG51bGxwdHIgfTsKKyAgICBib29sIG1fY29va2llQWRkZWQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9jb29raWVzQ2hhbmdlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2Nvb2tpZURl
bGV0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2Ug
eyBmYWxzZSB9OwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gbV9jb29raWVzVGV4dEZpbGU7CiAgICAg
R1VuaXF1ZVB0cjxjaGFyPiBtX2Nvb2tpZXNTUUxpdGVGaWxlOwogfTsKQEAgLTIxMSw2ICsyODEs
MjI0IEBAIHN0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyQWNjZXB0UG9saWN5KENvb2tpZU1h
bmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyCiAgICAgZ19hc3NlcnRfY21waW50KGdfc3Ry
dl9sZW5ndGgoZG9tYWlucyksID09LCAwKTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdENvb2tpZU1h
bmFnZXJBZGRDb29raWUoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgLy8gTG9hZCB0aGUgaHRtbCBjb250ZW50LCB3aXRoIE5PX1RISVJEX1BBUlRZIGFjY2Vw
dCBwb2xpY3ksIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBhZGQgb25lIGNvb2tpZS4KKyAgICB0
ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJE
X1BBUlRZKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRl
eC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwg
MSk7CisKKyAgICAvLyBDaGVjayB0aGUgY29va2llcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBmb3Ig
dGhlIGRvbWFpbi4KKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRvbWFpblVSTChnX3N0cmR1cF9wcmlu
dGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlEb21haW4pKTsK
KyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaShzb3VwX3VyaV9uZXcoZG9tYWluVVJMLmdldCgp
KSk7CisgICAgR0xpc3QqIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgp
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tpZXMpLCA9PSwg
MSk7CisKKyAgICBTb3VwQ29va2llKiBmb3VuZENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29r
aWUqPihmb3VuZENvb2tpZXMtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tp
ZV9nZXRfbmFtZShmb3VuZENvb2tpZSksID09LCBrQ29va2llTmFtZSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHNvdXBfY29va2llX2dldF9kb21haW4oZm91bmRDb29raWUpLCA9PSwga0ZpcnN0UGFy
dHlEb21haW4pOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfcGF0aChmb3Vu
ZENvb2tpZSksID09LCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29v
a2llX2dldF92YWx1ZShmb3VuZENvb2tpZSksID09LCBrQ29va2llVmFsdWUpOworCisgICAgLy8g
VHJ5IHRvIGFkZCBub3cgYSBjb29raWUgd2l0aCBzYW1lIChuYW1lLCBkb21haW4sIHBhdGgpIHRo
YW4gdGhlIG9uZXMgYWxyZWFkeSBhZGRlZC4KKyAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IGZp
cnN0Q29va2llKHNvdXBfY29va2llX25ldyhrQ29va2llTmFtZSwga0Nvb2tpZVZhbHVlTmV3LCBr
Rmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGgsIFNPVVBfQ09PS0lFX01BWF9BR0VfT05FX0hP
VVIpKTsKKyAgICB0ZXN0LT5hZGRDb29raWUoZmlyc3RDb29raWUuZ2V0KCkpOworCisgICAgLy8g
U3RpbGwgb25lIGNvb2tpZSwgc2luY2UgKG5hbWUsIGRvbWFpbiwgcGF0aCkgYXJlIHRoZSBzYW1l
IHRoYW4gdGhlIGFscmVhZHkgZXhpc3RpbmcKKyAgICAvLyBvbmUsIGJ1dCB0aGUgbmV3IHZhbHVl
IGlzIG5vdyBzdG9yZWQgYXMgcmVwbGFjZWQgYnkgdGhlIHJlY2VudGx5IGFkZGVkIGNvb2tpZS4K
KyAgICBmb3VuZENvb2tpZXMgPSB0ZXN0LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19h
c3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDEpOworCisgICAg
Zm91bmRDb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oZm91bmRDb29raWVzLT5kYXRh
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X25hbWUoZm91bmRDb29raWUp
LCA9PSwga0Nvb2tpZU5hbWUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRf
ZG9tYWluKGZvdW5kQ29va2llKSwgPT0sIGtGaXJzdFBhcnR5RG9tYWluKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3BhdGgoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVBh
dGgpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRDb29r
aWUpLCA9PSwga0Nvb2tpZVZhbHVlTmV3KTsKKworICAgIC8vIE5vdyBjcmVhdGUgYW5vdGhlciBj
b29raWUgd2l0aCBhIGRpZmZlcmVudCBwYXRoIGFuZCBhZGQgaXQuCisgICAgR1VuaXF1ZVB0cjxT
b3VwQ29va2llPiBzZWNvbmRDb29raWUoc291cF9jb29raWVfbmV3KGtDb29raWVOYW1lLCBrQ29v
a2llVmFsdWVOZXcsIGtGaXJzdFBhcnR5RG9tYWluLCBrQ29va2llUGF0aE5ldywgU09VUF9DT09L
SUVfTUFYX0FHRV9PTkVfSE9VUikpOworICAgIHRlc3QtPmFkZENvb2tpZShzZWNvbmRDb29raWUu
Z2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFp
bnMoKSksID09LCAxKTsKKworICAgIC8vIFJldHJpZXZlIHRoZSBsaXN0IG9mIGNvb2tpZXMgZm9y
IHRoZSBzYW1lIGRvbWFpbiBhbmQgcGF0aCBhZ2FpbiBub3cgYW5kIGNoZWNrLgorICAgIGRvbWFp
blVSTC5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMlcyIsIFNPVVBfVVJJX1NDSEVNRV9I
VFRQLCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcpKTsKKyAgICB1cmkucmVzZXQo
c291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkpOworICAgIGZvdW5kQ29va2llcyA9IHRlc3Qt
PmdldENvb2tpZXModXJpLmdldCgpKTsKKworICAgIC8vIFdlIGhhdmUgbm93IHR3byBjb29raWVz
IHRoYXQgd291bGQgYXBwbHkgdG8gdGhlIHBhc3NlZCBVUkwsIG9uZSBpcyB0aGUgY29va2llIGlu
aXRpYWxseQorICAgIC8vIGxvYWRlZCB3aXRoIHRoZSB3ZWIgY29udGVudCBhbmQgdGhlIG90aGVy
IGNvb2tpZSB0aGUgb25lIHdlIG1hbnVhbGx5IGFkZGVkLgorICAgIGdfYXNzZXJ0X25vbm51bGwo
Zm91bmRDb29raWVzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENv
b2tpZXMpLCA9PSwgMik7CisKKyAgICAvLyBBZGQgYSB0aGlyZCBuZXcgY29va2llIGZvciBhIGRp
ZmZlcmVudCBkb21haW4gdGhhbiB0aGUgcHJldmlvdXMgb25lcy4KKyAgICBHVW5pcXVlUHRyPFNv
dXBDb29raWU+IHRoaXJkQ29va2llKHNvdXBfY29va2llX25ldyhrQ29va2llTmFtZSwga0Nvb2tp
ZVZhbHVlTmV3LCBrVGhpcmRQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcsIFNPVVBfQ09PS0lF
X01BWF9BR0VfT05FX0hPVVIpKTsKKyAgICB0ZXN0LT5hZGRDb29raWUodGhpcmRDb29raWUuZ2V0
KCkpOworCisgICAgLy8gT25seSBvbmUgY29va2llIG5vdywgc2luY2UgdGhlIGRvbWFpbiBpcyBk
aWZmZXJlbnQuCisgICAgZG9tYWluVVJMLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJXM6Ly8lcyVz
IiwgU09VUF9VUklfU0NIRU1FX0hUVFAsIGtUaGlyZFBhcnR5RG9tYWluLCBrQ29va2llUGF0aE5l
dykpOworICAgIHVyaS5yZXNldChzb3VwX3VyaV9uZXcoZG9tYWluVVJMLmdldCgpKSk7CisgICAg
Zm91bmRDb29raWVzID0gdGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworICAgIGdfYXNzZXJ0
X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAxKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMik7CisKKyAg
ICBmb3VuZENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihmb3VuZENvb2tpZXMtPmRh
dGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFtZShmb3VuZENvb2tp
ZSksID09LCBrQ29va2llTmFtZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dl
dF9kb21haW4oZm91bmRDb29raWUpLCA9PSwga1RoaXJkUGFydHlEb21haW4pOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfcGF0aChmb3VuZENvb2tpZSksID09LCBrQ29va2ll
UGF0aE5ldyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF92YWx1ZShmb3Vu
ZENvb2tpZSksID09LCBrQ29va2llVmFsdWVOZXcpOworCisgICAgLy8gRmluYWxseSwgZGVsZXRl
IGFsbCBjb29raWVzIGFuZCBjaGVjayB0aGV5IGFyZSBhbGwgZ29uZS4KKyAgICB0ZXN0LT5kZWxl
dGVBbGxDb29raWVzKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+
Z2V0RG9tYWlucygpKSwgPT0sIDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdl
ckdldENvb2tpZXMoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgLy8gTG9hZCB0aGUgaHRtbCBjb250ZW50IGFuZCByZXRyaWV2ZSB0aGUgdHdvIGNvb2tpZXMg
YXV0b21hdGljYWxseSBhZGRlZCB3aXRoIEFMV0FZUyBwb2xpY3kuCisgICAgdGVzdC0+c2V0QWNj
ZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOworICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcGludChn
X3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAyKTsKKworICAgIC8vIFJldHJp
ZXZlIHRoZSBmaXJzdCBjb29raWUgdXNpbmcgYSBIVFRQIHNjaGVtZS4KKyAgICBHVW5pcXVlUHRy
PGNoYXI+IGRvbWFpblVSTChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hF
TUVfSFRUUCwga0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVy
aShzb3VwX3VyaV9uZXcoZG9tYWluVVJMLmdldCgpKSk7CisgICAgR0xpc3QqIGZvdW5kQ29va2ll
cyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGZv
dW5kQ29va2llcyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29r
aWVzKSwgPT0sIDEpOworCisgICAgU291cENvb2tpZSogZm91bmRDb29raWUgPSBzdGF0aWNfY2Fz
dDxTb3VwQ29va2llKj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
c291cF9jb29raWVfZ2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2llKSwgPT0s
IGtGaXJzdFBhcnR5RG9tYWluKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0
X3BhdGgoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihzb3VwX2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVlKTsK
KworICAgIC8vIFJldHJpZXZlIHRoZSBzZWNvbmQgY29va2llIHVzaW5nIGEgSFRUUFMgc2NoZW1l
LgorICAgIGRvbWFpblVSTC5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VS
SV9TQ0hFTUVfSFRUUFMsIGtUaGlyZFBhcnR5RG9tYWluKSk7CisgICAgdXJpLnJlc2V0KHNvdXBf
dXJpX25ldyhkb21haW5VUkwuZ2V0KCkpKTsKKyAgICBmb3VuZENvb2tpZXMgPSB0ZXN0LT5nZXRD
b29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfbm9ubnVsbChmb3VuZENvb2tpZXMpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAxKTsK
KworICAgIGZvdW5kQ29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGZvdW5kQ29va2ll
cy0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9uYW1lKGZvdW5k
Q29va2llKSwgPT0sIGtDb29raWVOYW1lKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29r
aWVfZ2V0X2RvbWFpbihmb3VuZENvb2tpZSksID09LCBrVGhpcmRQYXJ0eURvbWFpbik7CisgICAg
Z19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9wYXRoKGZvdW5kQ29va2llKSwgPT0sIGtD
b29raWVQYXRoKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3ZhbHVlKGZv
dW5kQ29va2llKSwgPT0sIGtDb29raWVWYWx1ZSk7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgY29v
a2llIGFuZCBhZGQgaXQgdG8gdGhlIGZpcnN0IGRvbWFpbi4KKyAgICBHVW5pcXVlUHRyPFNvdXBD
b29raWU+IG5ld0Nvb2tpZShzb3VwX2Nvb2tpZV9uZXcoa0Nvb2tpZU5hbWUsIGtDb29raWVWYWx1
ZU5ldywga0ZpcnN0UGFydHlEb21haW4sIGtDb29raWVQYXRoTmV3LCBTT1VQX0NPT0tJRV9NQVhf
QUdFX09ORV9IT1VSKSk7CisgICAgdGVzdC0+YWRkQ29va2llKG5ld0Nvb2tpZS5nZXQoKSk7CisK
KyAgICAvLyBXZSBzaG91bGQgZ2V0IHR3byBjb29raWVzIHRoYXQgd291bGQgYXBwbHkgdG8gdGhl
IHNhbWUgVVJMIHBhc3NlZCwgc2luY2UKKyAgICAvLyBodHRwOi8vMTI3LjAuMC4xL25ldyBpcyBh
IHN1YnNldCBvZiB0aGUgaHR0cDovLzEyNy4wLjAuMS8gVVJMLgorICAgIGRvbWFpblVSTC5yZXNl
dChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMlcyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQLCBrRmly
c3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcpKTsKKyAgICB1cmkucmVzZXQoc291cF91cmlf
bmV3KGRvbWFpblVSTC5nZXQoKSkpOworICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tp
ZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKGZvdW5kQ29va2llcyk7CisgICAg
Z19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDIpOworCisg
ICAgLy8gV2UgaGF2ZSBub3cgdHdvIGNvb2tpZXMgdGhhdCB3b3VsZCBhcHBseSB0byB0aGUgcGFz
c2VkIFVSTCwgb25lIGlzIHRoZSBjb29raWUgaW5pdGlhbGx5CisgICAgLy8gbG9hZGVkIHdpdGgg
dGhlIHdlYiBjb250ZW50IGFuZCB0aGUgb3RoZXIgY29va2llIHRoZSBvbmUgd2UgbWFudWFsbHkg
YWRkZWQuCisgICAgZ19hc3NlcnRfbm9ubnVsbChmb3VuZENvb2tpZXMpOworICAgIGdfYXNzZXJ0
X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAyKTsKKworICAgIGJvb2wg
bmV3UGF0aENoZWNrZWQgPSBmYWxzZTsKKyAgICBjb25zdCBjaGFyKiBwYXRoRm91bmQgPSBudWxs
cHRyOworICAgIGNvbnN0IGNoYXIqIHZhbHVlRm91bmQgPSBudWxscHRyOworICAgIGZvciAodWlu
dCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBmb3VuZENvb2tpZSA9IHN0YXRpY19jYXN0
PFNvdXBDb29raWUqPihnX2xpc3RfbnRoX2RhdGEoZm91bmRDb29raWVzLCBpKSk7CisgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFtZShmb3VuZENvb2tpZSksID09LCBr
Q29va2llTmFtZSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfZG9t
YWluKGZvdW5kQ29va2llKSwgPT0sIGtGaXJzdFBhcnR5RG9tYWluKTsKKworICAgICAgICAvLyBD
b29raWVzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIGZvciAndmFsdWUnIGFuZCAncGF0aCcs
IHNvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgIC8vIHdlIGNoZWNrIGZvciBib3RoIHBvc3NpYmls
aXRpZXMsIGJ1dCBkaWZmZXJlbnQgb25lcyBmb3IgZWFjaCBjb29raWUgZm91bmQuCisgICAgICAg
IHBhdGhGb3VuZCA9IHNvdXBfY29va2llX2dldF9wYXRoKGZvdW5kQ29va2llKTsKKyAgICAgICAg
dmFsdWVGb3VuZCA9IHNvdXBfY29va2llX2dldF92YWx1ZShmb3VuZENvb2tpZSk7CisgICAgICAg
IGlmIChpID4gMCkgeworICAgICAgICAgICAgaWYgKG5ld1BhdGhDaGVja2VkKSB7CisgICAgICAg
ICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHBhdGhGb3VuZCwgPT0sIGtDb29raWVQYXRoKTsKKyAg
ICAgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVGb3VuZCwgPT0sIGtDb29raWVWYWx1
ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0
cihwYXRoRm91bmQsID09LCBrQ29va2llUGF0aE5ldyk7CisgICAgICAgICAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHZhbHVlRm91bmQsID09LCBrQ29va2llVmFsdWVOZXcpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGdfc3RyY21wMChwYXRoRm91bmQs
IGtDb29raWVQYXRoKSkgeworICAgICAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihwYXRoRm91
bmQsID09LCBrQ29va2llUGF0aE5ldyk7CisgICAgICAgICAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHZhbHVlRm91bmQsID09LCBrQ29va2llVmFsdWVOZXcpOworICAgICAgICAgICAgICAgIG5ld1Bh
dGhDaGVja2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGdfc3Ry
Y21wMChwYXRoRm91bmQsIGtDb29raWVQYXRoTmV3KSkgeworICAgICAgICAgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cihwYXRoRm91bmQsID09LCBrQ29va2llUGF0aCk7CisgICAgICAgICAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHZhbHVlRm91bmQsID09LCBrQ29va2llVmFsdWUpOworICAgICAgICAg
ICAgICAgIG5ld1BhdGhDaGVja2VkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBXZSBzaG91bGQgZ2V0IDEgY29va2llIG9ubHkgaWYgd2Ugc3BlY2lm
eSBodHRwOi8vMTI3LjAuMC4xLywgdGhvdWdoLgorICAgIGRvbWFpblVSTC5yZXNldChnX3N0cmR1
cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlEb21h
aW4pKTsKKyAgICB1cmkucmVzZXQoc291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkpOworICAg
IGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dF9ub25udWxsKGZvdW5kQ29va2llcyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5n
dGgoZm91bmRDb29raWVzKSwgPT0sIDEpOworCisgICAgZm91bmRDb29raWUgPSBzdGF0aWNfY2Fz
dDxTb3VwQ29va2llKj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
c291cF9jb29raWVfZ2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2llKSwgPT0s
IGtGaXJzdFBhcnR5RG9tYWluKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0
X3BhdGgoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihzb3VwX2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVlKTsK
KworICAgIC8vIEZpbmFsbHksIGRlbGV0ZSBhbGwgY29va2llcyBhbmQgdHJ5IHRvIHJldHJpZXZl
IHRoZW0gYWdhaW4sIG9uZSBieSBvbmUuCisgICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09
LCAwKTsKKworICAgIGRvbWFpblVSTC5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBT
T1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICB1cmkucmVzZXQo
c291cF91cmlfbmV3KGRvbWFpblVSTC5nZXQoKSkpOworICAgIGZvdW5kQ29va2llcyA9IHRlc3Qt
PmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9udWxsKGZvdW5kQ29va2llcyk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llKENvb2tpZU1h
bmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNldEFjY2VwdFBv
bGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIEluaXRpYWxseSwgdGhlcmUg
c2hvdWxkIGJlIHR3byBjb29raWVzIGF2YWlsYWJsZS4KKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19z
dHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMik7CisKKyAgICAvLyBEZWxldGUg
dGhlIGNvb2tpZSBmb3IgdGhlIGZpcnN0IHBhcnR5IGRvbWFpbi4KKyAgICB0ZXN0LT5kZWxldGVD
b29raWUoa0Nvb2tpZU5hbWUsIGtGaXJzdFBhcnR5RG9tYWluLCBrQ29va2llUGF0aCk7CisgICAg
Z19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEp
OworCisgICAgLy8gVHJ5IGRlbGV0aW5nIGEgbm9uLWV4aXN0ZW50IGNvb2tpZSAod3JvbmcgbmFt
ZSkuCisgICAgdGVzdC0+ZGVsZXRlQ29va2llKCJ3cm9uZy1uYW1lIiwga1RoaXJkUGFydHlEb21h
aW4sIGtDb29raWVQYXRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0
LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisKKyAgICAvLyBUcnkgZGVsZXRpbmcgYSBub24tZXhp
c3RlbnQgY29va2llICh3cm9uZyBkb21haW4pLgorICAgIHRlc3QtPmRlbGV0ZUNvb2tpZShrQ29v
a2llTmFtZSwgIndyb25nLWRvbWFpbiIsIGtDb29raWVQYXRoKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisKKyAgICAvLyBU
cnkgZGVsZXRpbmcgYSBub24tZXhpc3RlbnQgY29va2llICh3cm9uZyBwYXRoKS4KKyAgICB0ZXN0
LT5kZWxldGVDb29raWUoa0Nvb2tpZU5hbWUsIGtUaGlyZFBhcnR5RG9tYWluLCAid3JvbmctcGF0
aCIpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMo
KSksID09LCAxKTsKKworICAgIC8vIERlbGV0ZSB0aGUgY29va2llIGZvciB0aGUgdGhpcmQgcGFy
dHkgZG9tYWluLgorICAgIHRlc3QtPmRlbGV0ZUNvb2tpZShrQ29va2llTmFtZSwga1RoaXJkUGFy
dHlEb21haW4sIGtDb29raWVQYXRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0
aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7CisKKyAgICAvLyBGaW5hbGx5LCBhZGQgYSBu
ZXcgY29va2llIG5vdyB3ZSBkb24ndCBoYXZlIGFueSBhbmQgZGVsZXRlIGl0IGFmdGVyd2FyZHMu
CisgICAgR1VuaXF1ZVB0cjxTb3VwQ29va2llPiBuZXdDb29raWUoc291cF9jb29raWVfbmV3KGtD
b29raWVOYW1lLCBrQ29va2llVmFsdWVOZXcsIGtGaXJzdFBhcnR5RG9tYWluLCBrQ29va2llUGF0
aE5ldywgU09VUF9DT09LSUVfTUFYX0FHRV9PTkVfSE9VUikpOworICAgIHRlc3QtPmFkZENvb2tp
ZShuZXdDb29raWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRl
c3QtPmdldERvbWFpbnMoKSksID09LCAxKTsKKyAgICB0ZXN0LT5kZWxldGVDb29raWUoa0Nvb2tp
ZU5hbWUsIGtGaXJzdFBhcnR5RG9tYWluLCBrQ29va2llUGF0aE5ldyk7CisgICAgZ19hc3NlcnRf
Y21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworfQorCiBz
dGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZXMoQ29va2llTWFuYWdlclRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdF
QktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwpAQCAtMzYwLDEyICs2NDgsMTQgQEAg
c3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2Fn
ZSogbWVzc2FnZSwgY29uc3QgY2hhcioKICAgICB9CiAKICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgZ2NoYXIqIGhlYWRlcl9zdHIgPSBn
X3N0cmR1cF9wcmludGYoIiVzPSVzOyBNYXgtQWdlPTYwIiwga0Nvb2tpZU5hbWUsIGtDb29raWVW
YWx1ZSk7CisKICAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbmRleC5odG1sIikpIHsKICAg
ICAgICAgY2hhciogaW5kZXhIdG1sID0gZ19zdHJkdXBfcHJpbnRmKGtJbmRleEh0bWxGb3JtYXQs
IHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQtQ29va2llIiwgImZv
bz1iYXI7IE1heC1BZ2U9NjAiKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFj
ZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsIGhlYWRlcl9zdHIpOwog
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfVEFLRSwgaW5kZXhIdG1sLCBzdHJsZW4oaW5kZXhIdG1sKSk7CiAgICAgfSBl
bHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ltYWdlLnBuZyIpKQotICAgICAgICBzb3VwX21l
c3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQtQ29v
a2llIiwgImJhej1xdXg7IE1heC1BZ2U9NjAiKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsIGhlYWRl
cl9zdHIpOwogICAgIGVsc2UKICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0
ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKQEAgLTM3Nyw2ICs2NjcsOSBAQCB2b2lkIGJlZm9y
ZUFsbCgpCiAgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKIAogICAgIENvb2tpZU1h
bmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiYWNjZXB0LXBvbGljeSIsIHRl
c3RDb29raWVNYW5hZ2VyQWNjZXB0UG9saWN5KTsKKyAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRk
KCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImFkZC1jb29raWUiLCB0ZXN0Q29va2llTWFuYWdlckFk
ZENvb2tpZSk7CisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdl
ciIsICJnZXQtY29va2llcyIsIHRlc3RDb29raWVNYW5hZ2VyR2V0Q29va2llcyk7CisgICAgQ29v
a2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJkZWxldGUtY29va2ll
IiwgdGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWUpOwogICAgIENvb2tpZU1hbmFnZXJUZXN0
OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiZGVsZXRlLWNvb2tpZXMiLCB0ZXN0Q29va2ll
TWFuYWdlckRlbGV0ZUNvb2tpZXMpOwogICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktp
dENvb2tpZU1hbmFnZXIiLCAiY29va2llcy1jaGFuZ2VkIiwgdGVzdENvb2tpZU1hbmFnZXJDb29r
aWVzQ2hhbmdlZCk7CiAgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFu
YWdlciIsICJwZXJzaXN0ZW50LXN0b3JhZ2UiLCB0ZXN0Q29va2llTWFuYWdlclBlcnNpc3RlbnRT
dG9yYWdlKTsKLS0gCjIuMTQuMgoK
</data>
<flag name="review"
          id="345781"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="346300"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327321</attachid>
            <date>2017-11-18 13:26:51 -0800</date>
            <delta_ts>2017-11-20 06:39:29 -0800</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-GTK-New-API-to-add-retrieve-and-delete-cookies-via-W.patch</filename>
            <type>text/plain</type>
            <size>54169</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA5NTllZTgyNzRiMjgwMWJhZjhiMThlZGIxNTAwMmNlN2I3YmM0NDZlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpb0B3ZWJraXQub3Jn
PgpEYXRlOiBTYXQsIDE4IE5vdiAyMDE3IDA5OjQ1OjA2ICswMDAwClN1YmplY3Q6IFtQQVRDSF0g
W0dUS10gTmV3IEFQSSB0byBhZGQsIHJldHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEKIFdl
YktpdENvb2tpZU1hbmFnZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzkzMgoKUmV2aWV3ZWQgYnkgQ2FybG9zIEdhcmNpYSBDYW1wb3MuCgpTb3VyY2UvV2ViQ29y
ZToKCkltcGxlbWVudGVkIHNldENvb2tpZSgpLCBnZXRDb29raWVzKCkgYW5kIGRlbGV0ZUNvb2tp
ZSgpIGluIHRoZSBTb3VwCmJhY2tlbmQsIGFuZCByZWZhY3RvcmVkIHNvbWUgdXRpbGl0eSBmdW5j
dGlvbnMgYW5kIGNvbnZlcnNpb25zIG91dCBvZgpOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwIGlu
dG8gYSBuZXcgQ29va2llU291cC5jcHAgZmlsZSwgc28KdGhhdCB3ZSBub3cgY2FuIGNvbnZlcnQg
YmV0d2VlbiBTb3VwQ29va2llKiBhbmQgV2ViQ29yZTo6Q29va2llCmVhc2lseSBmcm9tIGFueXdo
ZXJlICh0aGlzIGlzIG5vdyBuZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2VzcykuCgoqIHBsYXRmb3Jt
L0Nvb2tpZS5oOiBBZGQgZGVjbGFyYXRpb25zIGZvciB0aGUgbmV3IGNvbnZlcnNpb25zLgoqIHBs
YXRmb3JtL1NvdXJjZXNTb3VwLnR4dDogQWRkIENvb2tpZVNvdXAuY3BwLgoqIHBsYXRmb3JtL25l
dHdvcmsvc291cC9Db29raWVTb3VwLmNwcDogQWRkZWQuCihXZWJDb3JlOjpDb29raWU6OkNvb2tp
ZSk6IE5ldyBjb25zdHJ1Y3RvciwgY3JlYXRlcyBhIFdlYkNvcmU6OkNvb2tpZSBvdXQgb2YgYSBT
b3VwQ29va2llKi4KKFdlYkNvcmU6Om1zVG9Tb3VwRGF0ZSk6IE1vdmVkIGZyb20gTmV0d29ya1N0
b3JhZ2VTZXNzaW9uU291cC5jcHAuCihXZWJDb3JlOjpDb29raWU6OnRvU291cENvb2tpZSk6IE5l
dywgYmFzZWQgb24gdG9Tb3VwQ29va2llKCkgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3Vw
LmNwcC4KKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5j
cHA6CihXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMpOiBVc2VkIHRo
ZSBuZXcgaW1wbGljaXQgY29udmVyc2lvbi4KKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6c2V0Q29va2llKTogTmV3bHkgaW1wbGVtZW50ZWQuCihXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlbGV0ZUNvb2tpZSk6IE5ld2x5IGltcGxlbWVudGVkLgooV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRDb29raWVzKTogTmV3bHkgaW1wbGVtZW50ZWQuCgpTb3Vy
Y2UvV2ViS2l0OgoKQWRkZWQgbmV3IEFQSSB0byBXZWJLaXRDb29raWVNYW5hZ2VyIHRvIGFkZCwg
cmV0cmlldmUgYW5kIGRlbGV0ZSBjb21wbGV0ZQpjb29raWVzIGludG8vb3V0LW9mIGEgcnVubmlu
ZyBzZXNzaW9uLCBhbmQgdXBkYXRlZCBkb2N1bWVudGF0aW9uIHNlY3Rpb25zLgoKKiBVSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6Cih3ZWJraXRfY29va2llX21hbmFn
ZXJfYWRkX2Nvb2tpZSk6IE5ldyBmdW5jdGlvbi4KKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRf
Y29va2llX2ZpbmlzaCk6IERpdHRvLgood2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVz
KTogRGl0dG8uCih3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNoKTogRGl0
dG8uCih3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6IERpdHRvLgood2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVfZmluaXNoKTogRGl0dG8uCiogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oOiBBZGRlZCBuZXcgZnVuY3Rpb25zLgoqIFVJ
UHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvb2tpZU1hbmFnZXIuaDogRGl0dG8uCiogVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6IERpdHRvLgoKVG9vbHM6
CgpBZGRlZCBuZXcgdGVzdCBjYXNlcyB0byBjb3ZlciB0aGUgbmV3bHkgYWRkZWQgQVBJIGZvciBX
ZWJLaXRDb29raWVNYW5hZ2VyOgp3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZSwgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzIGFuZAp3ZWJraXRfY29va2llX21hbmFnZXJf
ZGVsZXRlX2Nvb2tpZS4KCiogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29r
aWVNYW5hZ2VyLmNwcDoKKHRlc3RDb29raWVNYW5hZ2VyQWRkQ29va2llKTogQWRkZWQuCih0ZXN0
Q29va2llTWFuYWdlckdldENvb2tpZXMpOiBBZGRlZC4KKHRlc3RDb29raWVNYW5hZ2VyRGVsZXRl
Q29va2llKTogQWRkZWQuCihzZXJ2ZXJDYWxsYmFjayk6IFNtYWxsIHVwZGF0ZSB0byBhdm9pZCBo
YXJkY29kaW5nIHN0cmluZ3Mgd2UgcmV1c2UuCihiZWZvcmVBbGwpOiBBZGRlZCB0aGUgbmV3IHRl
c3QgY2FzZXMgdG8gdGhlIHRlc3Qgc3VpdGUuCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjUgKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0Nvb2tpZS5oICAgICAgICAgICAgICAgICAgIHwgICAzICsKIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NvdXJjZXNTb3VwLnR4dCAgICAgICAgICAgIHwgICAxICsKIC4uLi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3VwLmNwcCAgIHwgIDgwICsrKysrKwogLi4uL25l
dHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcCAgICAgfCAgNzAgKystLS0K
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIx
ICsrCiAuLi4vVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwICAgICB8
IDE5NyArKysrKysrKysrKysrKwogLi4uL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRD
b29raWVNYW5hZ2VyLmggfCAgNDAgKysrCiAuLi4vQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4w
LXNlY3Rpb25zLnR4dCAgICAgICB8ICAgNiArCiAuLi4vV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1dlYktpdENvb2tpZU1hbmFnZXIuaCB8ICA0MCArKysKIFRvb2xzL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE4ICsrCiAuLi4vVGVzdHMvV2ViS2l0R0xp
Yi9UZXN0Q29va2llTWFuYWdlci5jcHAgICAgICAgICB8IDI5NSArKysrKysrKysrKysrKysrKysr
Ky0KIDEyIGZpbGVzIGNoYW5nZWQsIDc1MiBpbnNlcnRpb25zKCspLCA0NCBkZWxldGlvbnMoLSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Q29va2llU291cC5jcHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI3ZWE2ZWI2ZmIuLmRhNjkwZGE1ZmIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTctMTEtMTggIE1hcmlvIFNhbmNoZXogUHJh
ZGEgIDxtYXJpb0BlbmRsZXNzbS5jb20+CisKKyAgICAgICAgW0dUS10gTmV3IEFQSSB0byBhZGQs
IHJldHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEgV2ViS2l0Q29va2llTWFuYWdlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTMyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgQ2FybG9zIEdhcmNpYSBDYW1wb3MuCisKKyAgICAgICAgSW1wbGVt
ZW50ZWQgc2V0Q29va2llKCksIGdldENvb2tpZXMoKSBhbmQgZGVsZXRlQ29va2llKCkgaW4gdGhl
IFNvdXAKKyAgICAgICAgYmFja2VuZCwgYW5kIHJlZmFjdG9yZWQgc29tZSB1dGlsaXR5IGZ1bmN0
aW9ucyBhbmQgY29udmVyc2lvbnMgb3V0IG9mCisgICAgICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
blNvdXAgaW50byBhIG5ldyBDb29raWVTb3VwLmNwcCBmaWxlLCBzbworICAgICAgICB0aGF0IHdl
IG5vdyBjYW4gY29udmVydCBiZXR3ZWVuIFNvdXBDb29raWUqIGFuZCBXZWJDb3JlOjpDb29raWUK
KyAgICAgICAgZWFzaWx5IGZyb20gYW55d2hlcmUgKHRoaXMgaXMgbm93IG5lZWRlZCBmcm9tIHRo
ZSBVSSBQcm9jZXNzKS4KKworICAgICAgICAqIHBsYXRmb3JtL0Nvb2tpZS5oOiBBZGQgZGVjbGFy
YXRpb25zIGZvciB0aGUgbmV3IGNvbnZlcnNpb25zLgorICAgICAgICAqIHBsYXRmb3JtL1NvdXJj
ZXNTb3VwLnR4dDogQWRkIENvb2tpZVNvdXAuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9Db29raWVTb3VwLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb29raWU6
OkNvb2tpZSk6IE5ldyBjb25zdHJ1Y3RvciwgY3JlYXRlcyBhIFdlYkNvcmU6OkNvb2tpZSBvdXQg
b2YgYSBTb3VwQ29va2llKi4KKyAgICAgICAgKFdlYkNvcmU6Om1zVG9Tb3VwRGF0ZSk6IE1vdmVk
IGZyb20gTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpD
b29raWU6OnRvU291cENvb2tpZSk6IE5ldywgYmFzZWQgb24gdG9Tb3VwQ29va2llKCkgZnJvbSBO
ZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMpOiBVc2VkIHRoZSBuZXcgaW1wbGljaXQg
Y29udmVyc2lvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0
Q29va2llKTogTmV3bHkgaW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSk6IE5ld2x5IGltcGxlbWVudGVkLgorICAgICAgICAo
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRDb29raWVzKTogTmV3bHkgaW1wbGVt
ZW50ZWQuCisKIDIwMTctMTEtMTcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBbU2VydmljZSBXb3JrZXJzXSBJbXBsZW1lbnQgIk5vdGlmeSBDb250cm9sbGVyIENo
YW5nZSIgYWxnb3JpdGhtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29r
aWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oCmluZGV4IDA5MzNjY2EwNzNj
Li5hMzYzOTA0NjdkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2ll
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llLmgKQEAgLTY3LDYgKzY3LDkg
QEAgc3RydWN0IENvb2tpZSB7CiAjaWZkZWYgX19PQkpDX18KICAgICBXRUJDT1JFX0VYUE9SVCBD
b29raWUoTlNIVFRQQ29va2llICopOwogICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIE5TSFRU
UENvb2tpZSAqKCkgY29uc3Q7CisjZWxpZiBVU0UoU09VUCkKKyAgICBleHBsaWNpdCBDb29raWUo
U291cENvb2tpZSopOworICAgIFNvdXBDb29raWUqIHRvU291cENvb2tpZSgpIGNvbnN0OwogI2Vu
ZGlmCiAKICAgICBib29sIGlzTnVsbCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Tb3VyY2VzU291cC50eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3Vy
Y2VzU291cC50eHQKaW5kZXggZWJkYzg5ZjE2NDMuLjhlNDdkNjJhMzg2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzU291cC50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU291cmNlc1NvdXAudHh0CkBAIC0yNCw2ICsyNCw3IEBACiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTb3VwLmNwcAogcGxhdGZvcm0vbmV0
d29yay9zb3VwL0NlcnRpZmljYXRlSW5mby5jcHAKIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29r
aWVKYXJTb3VwLmNwcAorcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwCiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFnZVNvdXAuY3BwCiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvQ3JlZGVudGlhbFN0b3JhZ2VTb3VwLmNwcAogcGxhdGZvcm0vbmV0d29yay9zb3VwL0RO
U1NvdXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvQ29va2llU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Q29va2llU291cC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM4
YzU5ZDBhMTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL0Nvb2tpZVNvdXAuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1v
YmlsZSwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29va2llLmgiCisKKyNpbmNsdWRlIDx3dGYv
RGF0ZU1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb29raWU6OkNvb2tpZShTb3Vw
Q29va2llKiBjb29raWUpCisgICAgOiBuYW1lKFN0cmluZzo6ZnJvbVVURjgoY29va2llLT5uYW1l
KSkKKyAgICAsIHZhbHVlKFN0cmluZzo6ZnJvbVVURjgoY29va2llLT52YWx1ZSkpCisgICAgLCBk
b21haW4oU3RyaW5nOjpmcm9tVVRGOChjb29raWUtPmRvbWFpbikpCisgICAgLCBwYXRoKFN0cmlu
Zzo6ZnJvbVVURjgoY29va2llLT5wYXRoKSkKKyAgICAsIGV4cGlyZXMoMCkKKyAgICAsIGh0dHBP
bmx5KGNvb2tpZS0+aHR0cF9vbmx5KQorICAgICwgc2VjdXJlKGNvb2tpZS0+c2VjdXJlKQorICAg
ICwgc2Vzc2lvbighY29va2llLT5leHBpcmVzKQorCit7CisgICAgaWYgKGNvb2tpZS0+ZXhwaXJl
cykKKyAgICAgICAgZXhwaXJlcyA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc291cF9kYXRlX3RvX3Rp
bWVfdChjb29raWUtPmV4cGlyZXMpKSAqIDEwMDA7Cit9CisKK3N0YXRpYyBTb3VwRGF0ZSogbXNU
b1NvdXBEYXRlKGRvdWJsZSBtcykKK3sKKyAgICBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKKyAg
ICBpbnQgZGF5T2ZZZWFyID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKKyAgICBib29sIGxlYXBZZWFy
ID0gaXNMZWFwWWVhcih5ZWFyKTsKKworICAgIC8vIG1vbnRoRnJvbURheUluWWVhcigpIHJldHVy
bnMgYSB2YWx1ZSBpbiB0aGUgWzAsMTFdIHJhbmdlLCB3aGlsZSBzb3VwX2RhdGVfbmV3KCkgZXhw
ZWN0cworICAgIC8vIGEgdmFsdWUgaW4gdGhlIFsxLDEyXSByYW5nZSwgbWVhbmluZyB3ZSBoYXZl
IHRvIG1hbnVhbGx5IGFkanVzdCB0aGUgbW9udGggdmFsdWUuCisgICAgcmV0dXJuIHNvdXBfZGF0
ZV9uZXcoeWVhciwgbW9udGhGcm9tRGF5SW5ZZWFyKGRheU9mWWVhciwgbGVhcFllYXIpICsgMSwg
ZGF5SW5Nb250aEZyb21EYXlJblllYXIoZGF5T2ZZZWFyLCBsZWFwWWVhciksIG1zVG9Ib3Vycyht
cyksIG1zVG9NaW51dGVzKG1zKSwgc3RhdGljX2Nhc3Q8aW50PihtcyAvIDEwMDApICUgNjApOwor
fQorCitTb3VwQ29va2llKiBDb29raWU6OnRvU291cENvb2tpZSgpIGNvbnN0Cit7CisgICAgaWYg
KG5hbWUuaXNOdWxsKCkgfHwgdmFsdWUuaXNOdWxsKCkgfHwgZG9tYWluLmlzTnVsbCgpIHx8IHBh
dGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgU291cENvb2tpZSog
c291cENvb2tpZSA9IHNvdXBfY29va2llX25ldyhuYW1lLnV0ZjgoKS5kYXRhKCksIHZhbHVlLnV0
ZjgoKS5kYXRhKCksCisgICAgICAgIGRvbWFpbi51dGY4KCkuZGF0YSgpLCBwYXRoLnV0ZjgoKS5k
YXRhKCksIC0xKTsKKworICAgIHNvdXBfY29va2llX3NldF9odHRwX29ubHkoc291cENvb2tpZSwg
aHR0cE9ubHkpOworICAgIHNvdXBfY29va2llX3NldF9zZWN1cmUoc291cENvb2tpZSwgc2VjdXJl
KTsKKworICAgIGlmICghc2Vzc2lvbikgeworICAgICAgICBTb3VwRGF0ZSogZGF0ZSA9IG1zVG9T
b3VwRGF0ZShleHBpcmVzKTsKKyAgICAgICAgc291cF9jb29raWVfc2V0X2V4cGlyZXMoc291cENv
b2tpZSwgZGF0ZSk7CisgICAgICAgIHNvdXBfZGF0ZV9mcmVlKGRhdGUpOworICAgIH0KKworICAg
IHJldHVybiBzb3VwQ29va2llOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0
d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKaW5kZXggNThmZTY2NDIzMjEuLjZkNjc4YjZmZWEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCkBAIC0yLDYgKzIsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEVuZGxlc3MgTW9iaWxlLCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMzLDYgKzM0LDcgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvR1VuaXF1ZVB0clNvdXAuaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KICNp
bmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAt
MjgzLDQ1ICsyODUsNDAgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNhdmVDcmVkZW50
aWFsVG9QZXJzaXN0ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3AKICNlbmRpZgogfQogCi1z
dGF0aWMgU291cERhdGUqIG1zVG9Tb3VwRGF0ZShkb3VibGUgbXMpCi17Ci0gICAgaW50IHllYXIg
PSBtc1RvWWVhcihtcyk7Ci0gICAgaW50IGRheU9mWWVhciA9IGRheUluWWVhcihtcywgeWVhcik7
Ci0gICAgYm9vbCBsZWFwWWVhciA9IGlzTGVhcFllYXIoeWVhcik7Ci0KLSAgICAvLyBtb250aEZy
b21EYXlJblllYXIoKSByZXR1cm5zIGEgdmFsdWUgaW4gdGhlIFswLDExXSByYW5nZSwgd2hpbGUg
c291cF9kYXRlX25ldygpIGV4cGVjdHMKLSAgICAvLyBhIHZhbHVlIGluIHRoZSBbMSwxMl0gcmFu
Z2UsIG1lYW5pbmcgd2UgaGF2ZSB0byBtYW51YWxseSBhZGp1c3QgdGhlIG1vbnRoIHZhbHVlLgot
ICAgIHJldHVybiBzb3VwX2RhdGVfbmV3KHllYXIsIG1vbnRoRnJvbURheUluWWVhcihkYXlPZlll
YXIsIGxlYXBZZWFyKSArIDEsIGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKGRheU9mWWVhciwgbGVh
cFllYXIpLCBtc1RvSG91cnMobXMpLCBtc1RvTWludXRlcyhtcyksIHN0YXRpY19jYXN0PGludD4o
bXMgLyAxMDAwKSAlIDYwKTsKLX0KLQotc3RhdGljIFNvdXBDb29raWUqIHRvU291cENvb2tpZShj
b25zdCBDb29raWUmIGNvb2tpZSkKLXsKLSAgICBTb3VwQ29va2llKiBzb3VwQ29va2llID0gc291
cF9jb29raWVfbmV3KGNvb2tpZS5uYW1lLnV0ZjgoKS5kYXRhKCksIGNvb2tpZS52YWx1ZS51dGY4
KCkuZGF0YSgpLAotICAgICAgICBjb29raWUuZG9tYWluLnV0ZjgoKS5kYXRhKCksIGNvb2tpZS5w
YXRoLnV0ZjgoKS5kYXRhKCksIC0xKTsKLSAgICBzb3VwX2Nvb2tpZV9zZXRfaHR0cF9vbmx5KHNv
dXBDb29raWUsIGNvb2tpZS5odHRwT25seSk7Ci0gICAgc291cF9jb29raWVfc2V0X3NlY3VyZShz
b3VwQ29va2llLCBjb29raWUuc2VjdXJlKTsKLSAgICBpZiAoIWNvb2tpZS5zZXNzaW9uKSB7Ci0g
ICAgICAgIFNvdXBEYXRlKiBkYXRlID0gbXNUb1NvdXBEYXRlKGNvb2tpZS5leHBpcmVzKTsKLSAg
ICAgICAgc291cF9jb29raWVfc2V0X2V4cGlyZXMoc291cENvb2tpZSwgZGF0ZSk7Ci0gICAgICAg
IHNvdXBfZGF0ZV9mcmVlKGRhdGUpOwotICAgIH0KLSAgICByZXR1cm4gc291cENvb2tpZTsKLX0K
LQogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPENv
b2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYpCiB7CiAgICAgZm9yIChhdXRv
IGNvb2tpZSA6IGNvb2tpZXMpCi0gICAgICAgIHNvdXBfY29va2llX2phcl9hZGRfY29va2llKGNv
b2tpZVN0b3JhZ2UoKSwgdG9Tb3VwQ29va2llKGNvb2tpZSkpOworICAgICAgICBzb3VwX2Nvb2tp
ZV9qYXJfYWRkX2Nvb2tpZShjb29raWVTdG9yYWdlKCksIGNvb2tpZS50b1NvdXBDb29raWUoKSk7
CiB9CiAKLXZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWUoY29uc3QgQ29va2ll
JikKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWUoY29uc3QgQ29va2llJiBj
b29raWUpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV0syIHRvIHVzZS4KKyAgICBz
b3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZShjb29raWVTdG9yYWdlKCksIGNvb2tpZS50b1NvdXBD
b29raWUoKSk7CiB9CiAKLXZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUo
Y29uc3QgQ29va2llJikKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUo
Y29uc3QgQ29va2llJiBjb29raWUpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgV0sy
IHRvIHVzZS4KKyAgICAvLyBXZSBuZWVkIHRvIHNwZWNpZnkgdGhlIEhUVFAgc2NoZW1lIHRvIGNv
bnN0cnVjdCBhIHZhbGlkIFNvdXBVUkksCisgICAgLy8gc28gdGhhdCB3ZSBjYW4gbG9vayB1cCBm
b3IgdGhlIEhUVFAgY29va2llIGluIHRoZSBqYXIuCisgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1
cmkoc291cF91cmlfbmV3KG51bGxwdHIpKTsKKyAgICBzb3VwX3VyaV9zZXRfc2NoZW1lKHVyaS5n
ZXQoKSwgU09VUF9VUklfU0NIRU1FX0hUVFApOworICAgIHNvdXBfdXJpX3NldF9ob3N0KHVyaS5n
ZXQoKSwgY29va2llLmRvbWFpbi51dGY4KCkuZGF0YSgpKTsKKyAgICBzb3VwX3VyaV9zZXRfcGF0
aCh1cmkuZ2V0KCksIGNvb2tpZS5wYXRoLnV0ZjgoKS5kYXRhKCkpOworCisgICAgR1VuaXF1ZVB0
cjxTb3VwQ29va2llPiB0YXJnZXRDb29raWUoY29va2llLnRvU291cENvb2tpZSgpKTsKKyAgICBH
VW5pcXVlUHRyPEdTTGlzdD4gY29va2llc0xpc3Qoc291cF9jb29raWVfamFyX2dldF9jb29raWVf
bGlzdChjb29raWVTdG9yYWdlKCksIHVyaS5nZXQoKSwgVFJVRSkpOworICAgIGZvciAoR1NMaXN0
KiBpdGVtID0gY29va2llc0xpc3QuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRl
bSkpIHsKKyAgICAgICAgR1VuaXF1ZVB0cjxTb3VwQ29va2llPiBzb3VwQ29va2llKHN0YXRpY19j
YXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKSk7CisKKyAgICAgICAgLy8gVXNlIChuYW1lLCBk
b21haW4sIHBhdGgpIGFzIHRoZSBwcmltYXJ5IGtleSB0byBpZGVudGlmeSB0aGUgY29va2llLgor
ICAgICAgICBpZiAoZ19zdHJjbXAwKHNvdXBfY29va2llX2dldF9uYW1lKHNvdXBDb29raWUuZ2V0
KCkpLCBzb3VwX2Nvb2tpZV9nZXRfbmFtZSh0YXJnZXRDb29raWUuZ2V0KCkpKQorICAgICAgICAg
ICAgfHwgZ19zdHJjbXAwKHNvdXBfY29va2llX2dldF9kb21haW4oc291cENvb2tpZS5nZXQoKSks
IHNvdXBfY29va2llX2dldF9kb21haW4odGFyZ2V0Q29va2llLmdldCgpKSkKKyAgICAgICAgICAg
IHx8IGdfc3RyY21wMChzb3VwX2Nvb2tpZV9nZXRfcGF0aChzb3VwQ29va2llLmdldCgpKSwgc291
cF9jb29raWVfZ2V0X3BhdGgodGFyZ2V0Q29va2llLmdldCgpKSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShjb29raWVTdG9y
YWdlKCksIHNvdXBDb29raWUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIFZl
Y3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0QWxsQ29va2llcygpCkBAIC0z
MzAsMTAgKzMyNywxNyBAQCBWZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246Omdl
dEFsbENvb2tpZXMoKQogICAgIHJldHVybiB7IH07CiB9CiAKLVZlY3RvcjxDb29raWU+IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Z2V0Q29va2llcyhjb25zdCBVUkwmKQorVmVjdG9yPENvb2tpZT4g
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRDb29raWVzKGNvbnN0IFVSTCYgdXJsKQogewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCi0gICAgcmV0dXJuIHsgfTsKKyAg
ICBWZWN0b3I8Q29va2llPiBjb29raWVzOworICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0g
dXJsLmNyZWF0ZVNvdXBVUkkoKTsKKyAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llc0xpc3Qo
c291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChjb29raWVTdG9yYWdlKCksIHVyaS5nZXQo
KSwgVFJVRSkpOworICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llc0xpc3QuZ2V0KCk7IGl0
ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgR1VuaXF1ZVB0cjxTb3Vw
Q29va2llPiBzb3VwQ29va2llKHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKSk7
CisgICAgICAgIGNvb2tpZXMuYXBwZW5kKFdlYkNvcmU6OkNvb2tpZShzb3VwQ29va2llLmdldCgp
KSk7CisgICAgfQorCisgICAgcmV0dXJuIGNvb2tpZXM7CiB9CiAKIHZvaWQgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpmbHVzaENvb2tpZVN0b3JlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNzY2M2VkMzZiMTQuLjc0
YTRkYTZhNTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE3LTExLTE4ICBNYXJpbyBT
YW5jaGV6IFByYWRhICA8bWFyaW9AZW5kbGVzc20uY29tPgorCisgICAgICAgIFtHVEtdIE5ldyBB
UEkgdG8gYWRkLCByZXRyaWV2ZSBhbmQgZGVsZXRlIGNvb2tpZXMgdmlhIFdlYktpdENvb2tpZU1h
bmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzkzMgorCisgICAgICAgIFJldmlld2VkIGJ5IENhcmxvcyBHYXJjaWEgQ2FtcG9zLgorCisgICAg
ICAgIEFkZGVkIG5ldyBBUEkgdG8gV2ViS2l0Q29va2llTWFuYWdlciB0byBhZGQsIHJldHJpZXZl
IGFuZCBkZWxldGUgY29tcGxldGUKKyAgICAgICAgY29va2llcyBpbnRvL291dC1vZiBhIHJ1bm5p
bmcgc2Vzc2lvbiwgYW5kIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbiBzZWN0aW9ucy4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKTogTmV3IGZ1bmN0aW9uLgorICAgICAg
ICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKTogRGl0dG8uCisgICAg
ICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMpOiBEaXR0by4KKyAgICAgICAg
KHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llc19maW5pc2gpOiBEaXR0by4KKyAgICAg
ICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKTogRGl0dG8uCisgICAgICAg
ICh3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2gpOiBEaXR0by4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmg6IEFkZGVkIG5l
dyBmdW5jdGlvbnMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFu
YWdlci5oOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstNC4wLXNlY3Rpb25zLnR4dDogRGl0dG8uCisKIDIwMTctMTEtMTcgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbU2VydmljZSBXb3JrZXJzXSBJbXBsZW1lbnQg
Ik5vdGlmeSBDb250cm9sbGVyIENoYW5nZSIgYWxnb3JpdGhtCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4
IGVlZDI3MDI2NjQ3Li5kMWYxZDNiMTVjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgRW5kbGVzcyBNb2JpbGUsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNyw2
ICsyOCw3IEBACiAjaW5jbHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldlYktpdFdlYnNpdGVEYXRhUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYnNpdGVE
YXRhUmVjb3JkLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRlIDxwYWwv
U2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9nbGliL1dURkdUeXBlLmg+CkBAIC0yMzIsNiArMjM0LDIwMSBAQCBXZWJLaXRDb29raWVBY2Nl
cHRQb2xpY3kgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5X2ZpbmlzaChX
ZWJLaXRDbwogICAgIHJldHVybiByZXR1cm5WYWx1ZSA9PSAtMSA/IFdFQktJVF9DT09LSUVfUE9M
SUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSA6IHN0YXRpY19jYXN0PFdlYktpdENvb2tpZUFjY2Vw
dFBvbGljeT4ocmV0dXJuVmFsdWUpOwogfQogCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9hZGRfY29va2llOgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29raWVNYW5hZ2Vy
CisgKiBAY29va2llOiB0aGUgI1NvdXBDb29raWUgdG8gYmUgYWRkZWQKKyAqIEBjYW5jZWxsYWJs
ZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBA
Y2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3
aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0
aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9ub3Vz
bHkgYWRkIGEgI1NvdXBDb29raWUgdG8gdGhlIHVuZGVybHlpbmcgc3RvcmFnZS4KKyAqCisgKiBX
aGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4g
WW91IGNhbiB0aGVuIGNhbGwKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2Zp
bmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKgorICogU2luY2U6
IDIuMjAKKyAqLwordm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShXZWJLaXRD
b29raWVNYW5hZ2VyICptYW5hZ2VyLCBTb3VwQ29va2llICpjb29raWUsIEdDYW5jZWxsYWJsZSAq
Y2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJE
YXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1h
bmFnZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CisKKyAgICBHUmVmUHRyPEdU
YXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNh
bGxiYWNrLCB1c2VyRGF0YSkpOworCisgICAgYXV0byBzZXNzaW9uSUQgPSB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXREYXRhU3RvcmUobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpLndlYnNp
dGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKTsKKyAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMg
PSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+
ZGF0YU1hbmFnZXIpOworCisgICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8g
dGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcworICAgIC8vIG9mIHRo
ZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9j
ZXNzIHBvb2wuCisgICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+c2V0Q29va2llKHNlc3Npb25JRCwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSks
IFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAg
ICAgICBpZiAoZXJyb3IgIT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgeworICAgICAgICAg
ICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlcmUgdGhlIHdlYiBwcm9jZXNz
IGlzIG5vdCBhdmFpbGFibGUsCisgICAgICAgICAgICAvLyBjb25zaWRlciB0aGUgb3BlcmF0aW9u
ICJjYW5jZWxsZWQiIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhlIGNsaWVudC4KKyAgICAg
ICAgICAgIGdfdGFza19yZXR1cm5fbmV3X2Vycm9yKHRhc2suZ2V0KCksIEdfSU9fRVJST1IsIEdf
SU9fRVJST1JfQ0FOQ0VMTEVELCBfKCJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVh
bih0YXNrLmdldCgpLCBUUlVFKTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3ZWJraXRfY29va2ll
X21hbmFnZXJfYWRkX2Nvb2tpZV9maW5pc2g6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktp
dENvb2tpZU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVycm9yOiBy
ZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAqIEZpbmlz
aCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfY29va2llX21h
bmFnZXJfYWRkX2Nvb2tpZSgpLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjb29raWUg
d2FzIGFkZGVkIG9yICVGQUxTRSBpbiBjYXNlIG9mIGVycm9yLgorICoKKyAqIFNpbmNlOiAyLjIw
CisgKi8KK2dib29sZWFuIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaChX
ZWJLaXRDb29raWVNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgR0Vycm9y
ICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9N
QU5BR0VSKG1hbmFnZXIpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNr
X2lzX3ZhbGlkKHJlc3VsdCwgbWFuYWdlciksIEZBTFNFKTsKKworICAgIHJldHVybiBnX3Rhc2tf
cHJvcGFnYXRlX2Jvb2xlYW4oR19UQVNLKHJlc3VsdCksIGVycm9yKTsKK30KKworLyoqCisgKiB3
ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXM6CisgKiBAY29va2llX21hbmFnZXI6IGEg
I1dlYktpdENvb2tpZU1hbmFnZXIKKyAqIEB1cmk6IHRoZSBVUkkgYXNzb2NpYXRlZCB0byB0aGUg
Y29va2llcyB0byBiZSByZXRyaWV2ZWQKKyAqIEBjYW5jZWxsYWJsZTogKGFsbG93LW5vbmUpOiBh
ICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBAY2FsbGJhY2s6IChzY29wZSBh
c3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlz
IHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRv
IGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgZ2V0IGEgbGlzdCBvZiAj
U291cENvb2tpZSBmcm9tIEBjb29raWVfbWFuYWdlciBhc3NvY2lhdGVkIHdpdGggQHVyaSwgd2hp
Y2gKKyAqIG11c3QgYmUgZWl0aGVyIGFuIEhUVFAgb3IgYW4gSFRUUFMgVVJMLgorICoKKyAqIFdo
ZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZ
b3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzX2Zp
bmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKgorICogU2luY2U6
IDIuMjAKKyAqLwordm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMoV2ViS2l0
Q29va2llTWFuYWdlciAqbWFuYWdlciwgY29uc3QgZ2NoYXIgKnVyaSwgR0NhbmNlbGxhYmxlICpj
YW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRh
dGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFu
YWdlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKKworICAgIEdSZWZQdHI8R1Rhc2s+
IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJh
Y2ssIHVzZXJEYXRhKSk7CisKKyAgICBhdXRvIHNlc3Npb25JRCA9IHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckdldERhdGFTdG9yZShtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikud2Vic2l0ZURh
dGFTdG9yZSgpLnNlc3Npb25JRCgpOworICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlcik7CisKKyAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUg
c2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCisgICAgLy8gb2YgdGhlIHBy
b2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3Mg
cG9vbC4KKyAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PigpLT5nZXRDb29raWVzKHNlc3Npb25JRCwgV2ViQ29yZTo6VVJMKFdlYkNvcmU6OlVSTCgp
LCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9y
KSB7CisgICAgICAgIGlmIChlcnJvciAhPSBDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKSB7Cisg
ICAgICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpbiBjYXNlcyB3aGVyZSB0aGUgd2Vi
IHByb2Nlc3MgaXMgbm90IGF2YWlsYWJsZSwKKyAgICAgICAgICAgIC8vIGNvbnNpZGVyIHRoZSBv
cGVyYXRpb24gImNhbmNlbGxlZCIgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgY2xpZW50
LgorICAgICAgICAgICAgZ190YXNrX3JldHVybl9uZXdfZXJyb3IodGFzay5nZXQoKSwgR19JT19F
UlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQsIF8oIk9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkIikp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgR0xpc3QqIGNvb2tp
ZXNMaXN0ID0gbnVsbHB0cjsKKyAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29raWVzKQor
ICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlzdCwgY29v
a2llLnRvU291cENvb2tpZSgpKTsKKworICAgICAgICBnX3Rhc2tfcmV0dXJuX3BvaW50ZXIodGFz
ay5nZXQoKSwgZ19saXN0X3JldmVyc2UoY29va2llc0xpc3QpLCBbXShncG9pbnRlciBkYXRhKSB7
CisgICAgICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKHN0YXRpY19jYXN0PEdMaXN0Kj4oZGF0YSks
IHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KHNvdXBfY29va2llX2ZyZWUpKTsKKyAg
ICAgICAgfSk7CisgICAgfSk7Cit9CisKKy8qKgorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9jb29raWVzX2ZpbmlzaDoKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0Q29va2llTWFu
YWdlcgorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJldHVybiBsb2Nh
dGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNoIGFuIGFzeW5j
aHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRf
Y29va2llcygpLgorICoKKyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgU291cENvb2tpZSkgKHRy
YW5zZmVyIGZ1bGwpOiBBICNHU0xpc3Qgb2YgI1NvdXBDb29raWUgaW5zdGFuY2VzLgorICoKKyAq
IFNpbmNlOiAyLjIwCisgKi8KK0dMaXN0KiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tp
ZXNfZmluaXNoKFdlYktpdENvb2tpZU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jlc3VsdCAqcmVz
dWx0LCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfQ09PS0lFX01BTkFHRVIobWFuYWdlciksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGdfdGFza19pc192YWxpZChyZXN1bHQsIG1hbmFnZXIpLCBudWxscHRyKTsKKworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PEdMaXN0Kj4oZ190YXNrX3Byb3BhZ2F0ZV9wb2ludGVy
KEdfVEFTSyhyZXN1bHQpLCBlcnJvcikpOworfQorCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFu
YWdlcl9kZWxldGVfY29va2llOgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29raWVN
YW5hZ2VyCisgKiBAbmFtZTogdGhlIG5hbWUgdGhlIGNvb2tpZSB0byBiZSBkZWxldGVkCisgKiBA
ZG9tYWluOiB0aGUgZG9tYWluIG9mIHRoZSBjb29raWUgdG8gYmUgZGVsZXRlZAorICogQHBhdGg6
IHRoZSBwYXRoIG9mIHRoZSBjb29raWUgdG8gYmUgZGVsZXRlZAorICogQGNhbmNlbGxhYmxlOiAo
YWxsb3ctbm9uZSk6IGEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTCB0byBpZ25vcmUKKyAqIEBjYWxs
YmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdoZW4g
dGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHRoZSBk
YXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3luY2hyb25vdXNseSBk
ZWxldGUgYSAjU291cENvb2tpZSBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24sIHRoYXQgd2lsbCBi
ZSB1bmlxdWVseQorICogaWRlbnRpZmllZCBpbiB0aGUgaW50ZXJuYWwgY29va2llIGphciBieSBp
dHMgbmFtZSwgZG9tYWluIGFuZCBwYXRoLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBm
aW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICog
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVfZmluaXNoKCkgdG8gZ2V0IHRoZSBy
ZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBTaW5jZTogMi4yMAorICovCit2b2lkIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKFdlYktpdENvb2tpZU1hbmFnZXIgKm1h
bmFnZXIsIGNvbnN0IGdjaGFyICpuYW1lLCBjb25zdCBnY2hhciAqZG9tYWluLCBjb25zdCBnY2hh
ciAqcGF0aCwgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBj
YWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFt
ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChkb21haW4pOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
cGF0aCk7CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXco
bWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworCisgICAgLy8gV2Ug
b25seSBjYXJlIGFib3V0IHRoZSBuYW1lLCBkb21haW4gYW5kIHBhdGgsIHdoaWNoIGlzIHdoYXQg
d2lsbCBiZSB1c2VkCisgICAgLy8gdG8gaWRlbnRpZnkgdGhlIGNvb2tpZSBpbiBTb3VwQ29va2ll
SmFyIGhlbGQgYnkgdGhlIG90aGVyIHByb2Nlc3MuIEhvd2V2ZXIsCisgICAgLy8gd2Ugc3RpbGwg
bmVlZCB0byBjcmVhdGUgdGhlIENvb2tpZSB3aXRoIGEgbm9uLWVtcHR5IHZhbHVlIG5vdCB0byBn
ZXQgZGlzY2FyZGVkCisgICAgLy8gb24gaXRzIHdheSB0byB0aGUgb3RoZXIgcHJvY2Vzcywgc28g
d2UganVzdCBwYXNzIHRoZSBuYW1lIGFnYWluIHRoZXJlLgorICAgIFdlYkNvcmU6OkNvb2tpZSB0
YXJnZXRDb29raWUoU3RyaW5nOjpmcm9tVVRGOChuYW1lKSwgU3RyaW5nOjpmcm9tVVRGOChuYW1l
KSwgU3RyaW5nOjpmcm9tVVRGOChkb21haW4pLCBTdHJpbmc6OmZyb21VVEY4KHBhdGgpLCAtMSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgU3RyaW5nKCksIFdlYkNvcmU6OlVSTCgpLCBWZWN0b3I8dWlu
dDE2X3Q+IHsgfSk7CisKKyAgICBhdXRvIHNlc3Npb25JRCA9IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldERhdGFTdG9yZShtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikud2Vic2l0ZURhdGFT
dG9yZSgpLnNlc3Npb25JRCgpOworICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlcik7CisKKyAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2Ft
ZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCisgICAgLy8gb2YgdGhlIHByb2Nl
c3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9v
bC4KKyAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5kZWxldGVDb29raWUoc2Vzc2lvbklELCB0YXJnZXRDb29raWUsIFt0YXNrID0gV1RGTW92
ZSh0YXNrKV0oQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3Ig
IT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgeworICAgICAgICAgICAgLy8gVGhpcyBjYW4g
b25seSBoYXBwZW4gaW4gY2FzZXMgd2hlcmUgdGhlIHdlYiBwcm9jZXNzIGlzIG5vdCBhdmFpbGFi
bGUsCisgICAgICAgICAgICAvLyBjb25zaWRlciB0aGUgb3BlcmF0aW9uICJjYW5jZWxsZWQiIGZy
b20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhlIGNsaWVudC4KKyAgICAgICAgICAgIGdfdGFza19y
ZXR1cm5fbmV3X2Vycm9yKHRhc2suZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VM
TEVELCBfKCJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBU
UlVFKTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRl
X2Nvb2tpZV9maW5pc2g6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktpdENvb2tpZU1hbmFn
ZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVycm9yOiByZXR1cm4gbG9jYXRp
b24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAqIEZpbmlzaCBhbiBhc3luY2hy
b25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRl
X2Nvb2tpZSgpLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjb29raWUgd2FzIGRlbGV0
ZWQgb3IgJUZBTFNFIGluIGNhc2Ugb2YgZXJyb3IuCisgKgorICogU2luY2U6IDIuMjAKKyAqLwor
Z2Jvb2xlYW4gd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVfZmluaXNoKFdlYktp
dENvb2tpZU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBHRXJyb3IgKipl
cnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFH
RVIobWFuYWdlciksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNf
dmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgRkFMU0UpOworCisgICAgcmV0dXJuIGdfdGFza19wcm9w
YWdhdGVfYm9vbGVhbihHX1RBU0socmVzdWx0KSwgZXJyb3IpOworfQorCiAvKioKICAqIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXM6CiAgKiBAY29va2llX21h
bmFnZXI6IGEgI1dlYktpdENvb2tpZU1hbmFnZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmgKaW5kZXggZWUxN2QyMjA0NDku
LmIxZjlmMmUzODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdENvb2tpZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1v
YmlsZSwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgPGdpby9naW8uaD4KICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgogCiBHX0JFR0lO
X0RFQ0xTCkBAIC0xMDcsNiArMTA5LDQ0IEBAIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNj
ZXB0X3BvbGljeV9maW5pc2ggICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0
ICAgICAgICAgICAgICAgICAqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAqKmVy
cm9yKTsKIAorV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tp
ZSAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29v
a2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU291cENvb2tpZSAgICAgICAgICAgICAgICAgICAqY29va2llLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxs
YWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAg
ICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7
CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2ll
X2ZpbmlzaCAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29r
aWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAg
ICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9j
b29raWVfbWFuYWdlcl9nZXRfY29va2llcyAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29r
aWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAg
ICAgICAgICp1cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Fz
eW5jUmVhZHlDYWxsYmFjayAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAg
ICAgICAgICAgdXNlcl9kYXRhKTsKKworV0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNoICAgICAgICAgICAgICAoV2ViS2l0Q29va2llTWFu
YWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAg
ICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKKworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2NoYXIgICAgICAgICAgICAgICAgICAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAg
ICAgICpkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICAqcGF0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFi
bGUgICAgICAgICAgICAgICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAg
ICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOwor
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tp
ZV9maW5pc2ggICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2ll
X21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAg
ICAgICAgICAgICAgICAgICAqKmVycm9yKTsKKwogV0VCS0lUX0RFUFJFQ0FURURfRk9SKHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9mZXRjaCkgdm9pZAogd2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2dldF9kb21haW5zX3dpdGhfY29va2llcyAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAg
ICAgICAgKmNvb2tpZV9tYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNl
bGxhYmxlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKaW5kZXggMTFiZGUzNzdhNDAu
LmM0ODhkMmU1NzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTEwMDYs
NiArMTAwNiwxMiBAQCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kKIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeV9maW5pc2gKIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXMKIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXNfZmluaXNoCit3ZWJraXRfY29va2llX21hbmFnZXJf
YWRkX2Nvb2tpZQord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoCit3ZWJr
aXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRf
Y29va2llc19maW5pc2gKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llCit3ZWJr
aXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2gKIHdlYmtpdF9jb29raWVfbWFu
YWdlcl9kZWxldGVfY29va2llc19mb3JfZG9tYWluCiB3ZWJraXRfY29va2llX21hbmFnZXJfZGVs
ZXRlX2FsbF9jb29raWVzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS93cGUvV2ViS2l0Q29va2llTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmgKaW5kZXggNTk1NjNhZGQ4ODguLjkwZTc1MTQ2OTBl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvb2tp
ZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENv
b2tpZU1hbmFnZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGdpby9naW8u
aD4KICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgog
I2luY2x1ZGUgPHdwZS9XZWJLaXREZWZpbmVzLmg+CiAKIEdfQkVHSU5fREVDTFMKQEAgLTEwNyw2
ICsxMDksNDQgQEAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5X2Zpbmlz
aCAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAg
ICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOwogCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llICAgICAgICAgICAgICAg
ICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3Vw
Q29va2llICAgICAgICAgICAgICAgICAgICpjb29raWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAg
ICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICAgICAgY2FsbGJhY2ss
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKKworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoICAgICAgICAg
ICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3lu
Y1Jlc3VsdCAgICAgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAg
ICAgKiplcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9jb29raWVzICAgICAgICAgICAgICAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAg
ICAgKmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgKnVyaSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2Fu
Y2VsbGFibGUgICAgICAgICAgICAgICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNr
ICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICB1c2VyX2Rh
dGEpOworCitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29v
a2llc19maW5pc2ggICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpj
b29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9y
ICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llICAgICAgICAgICAgICAgICAgIChXZWJLaXRD
b29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAg
ICAgICAgICAgICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgKmRvbWFpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnY2hhciAgICAgICAgICAgICAgICAgICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAg
ICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdw
b2ludGVyICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaCAgICAgICAg
ICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNS
ZXN1bHQgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAg
ICoqZXJyb3IpOworCiBXRUJLSVRfREVQUkVDQVRFRF9GT1Iod2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2ZldGNoKSB2b2lkCiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0
aF9jb29raWVzICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21h
bmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzNmNzA3YTNlMzgu
LjM3MmI1YmM4YjMxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTctMTEtMTggIE1hcmlvIFNhbmNoZXogUHJhZGEg
IDxtYXJpb0BlbmRsZXNzbS5jb20+CisKKyAgICAgICAgW0dUS10gTmV3IEFQSSB0byBhZGQsIHJl
dHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEgV2ViS2l0Q29va2llTWFuYWdlcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTMyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQ2FybG9zIEdhcmNpYSBDYW1wb3MuCisKKyAgICAgICAgQWRkZWQgbmV3
IHRlc3QgY2FzZXMgdG8gY292ZXIgdGhlIG5ld2x5IGFkZGVkIEFQSSBmb3IgV2ViS2l0Q29va2ll
TWFuYWdlcjoKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUsIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyBhbmQKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2RlbGV0ZV9jb29raWUuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAodGVzdENvb2tpZU1hbmFn
ZXJBZGRDb29raWUpOiBBZGRlZC4KKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyR2V0Q29va2ll
cyk6IEFkZGVkLgorICAgICAgICAodGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWUpOiBBZGRl
ZC4KKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKTogU21hbGwgdXBkYXRlIHRvIGF2b2lkIGhhcmRj
b2Rpbmcgc3RyaW5ncyB3ZSByZXVzZS4KKyAgICAgICAgKGJlZm9yZUFsbCk6IEFkZGVkIHRoZSBu
ZXcgdGVzdCBjYXNlcyB0byB0aGUgdGVzdCBzdWl0ZS4KKwogMjAxNy0xMS0xNyAgSm9obiBXaWxh
bmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9yYWdlIEFjY2VzcyBBUEk6
IFVJIHByb2Nlc3Mgc2hvdWxkIHVwZGF0ZSBuZXR3b3JrIHByb2Nlc3MgYWJvdXQgZ3JhbnRlZCBh
Y2Nlc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9U
ZXN0Q29va2llTWFuYWdlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdM
aWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFiZThjYzBkMDYwLi42ODhjMTJiYTk4MSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29r
aWVNYW5hZ2VyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIv
VGVzdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEVuZGxlc3MgTW9iaWxl
LCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDEyICsyMiwyMSBAQAogCiAjaW5jbHVk
ZSAiV2ViS2l0VGVzdFNlcnZlci5oIgogI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9HVW5pcXVlUHRyU291cC5oPgogI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CiAK
IHN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwogCiBzdGF0aWMgY29uc3QgY2hhciog
a0ZpcnN0UGFydHlEb21haW4gPSAiMTI3LjAuMC4xIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBrVGhp
cmRQYXJ0eURvbWFpbiA9ICJsb2NhbGhvc3QiOworCitzdGF0aWMgY29uc3QgY2hhcioga0Nvb2tp
ZU5hbWUgPSAiZm9vIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrQ29va2llVmFsdWUgPSAiYmFyIjsK
K3N0YXRpYyBjb25zdCBjaGFyKiBrQ29va2llUGF0aCA9ICIvIjsKKworc3RhdGljIGNvbnN0IGNo
YXIqIGtDb29raWVQYXRoTmV3ID0gIi9uZXciOworc3RhdGljIGNvbnN0IGNoYXIqIGtDb29raWVW
YWx1ZU5ldyA9ICJuZXctdmFsdWUiOworCiBzdGF0aWMgY29uc3QgY2hhcioga0luZGV4SHRtbEZv
cm1hdCA9CiAgICAgIjxodG1sPjxib2R5PiIKICAgICAiIDxwPldlYktpdEdUSysgQ29va2llIE1h
bmFnZXIgdGVzdDwvcD4iCkBAIC00NywxMCArNTcsNiBAQCBwdWJsaWM6CiAgICAgQ29va2llTWFu
YWdlclRlc3QoKQogICAgICAgICA6IFdlYlZpZXdUZXN0KCkKICAgICAgICAgLCBtX2Nvb2tpZU1h
bmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcih3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSkpCi0gICAgICAgICwgbV9hY2NlcHRQb2xpY3koV0VC
S0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKQotICAgICAgICAsIG1fZG9t
YWlucygwKQotICAgICAgICAsIG1fY29va2llc0NoYW5nZWQoZmFsc2UpCi0gICAgICAgICwgbV9m
aW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UoZmFsc2UpCiAgICAgewogICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Nvb2tpZV9tYW5hZ2VyKHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dldF9j
b250ZXh0KG1fd2ViVmlldykpKSA9PSBtX2Nvb2tpZU1hbmFnZXIpOwogICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fY29va2llTWFuYWdlciwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGNvb2tpZXND
aGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKQEAgLTU5LDYgKzY1LDggQEAgcHVibGljOgogICAgIH5D
b29raWVNYW5hZ2VyVGVzdCgpCiAgICAgewogICAgICAgICBnX3N0cmZyZWV2KG1fZG9tYWlucyk7
CisgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9jb29raWVzLCByZWludGVycHJldF9jYXN0PEdE
ZXN0cm95Tm90aWZ5Pihzb3VwX2Nvb2tpZV9mcmVlKSk7CisKICAgICAgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fY29va2llTWFuYWdlciwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CiAgICAgICAgIGlmIChtX2Nvb2tpZXNUZXh0RmlsZSkK
ICAgICAgICAgICAgIGdfdW5saW5rKG1fY29va2llc1RleHRGaWxlLmdldCgpKTsKQEAgLTEwNiw2
ICsxMTQsNjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9hY2NlcHRQb2xpY3k7CiAgICAg
fQogCisgICAgc3RhdGljIHZvaWQgYWRkQ29va2llUmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmpl
Y3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7CisgICAg
ICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgYm9vbCBhZGRlZCA9IHdl
YmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaChXRUJLSVRfQ09PS0lFX01BTkFH
RVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBnX2Fzc2VydCgh
ZXJyb3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChhZGRlZCk7CisKKyAgICAgICAgQ29va2ll
TWFuYWdlclRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJE
YXRhKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9
CisKKyAgICB2b2lkIGFkZENvb2tpZShTb3VwQ29va2llKiBjb29raWUpCisgICAgeworICAgICAg
ICB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShtX2Nvb2tpZU1hbmFnZXIsIGNvb2tp
ZSwgMCwgYWRkQ29va2llUmVhZHlDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBnZXRDb29raWVzUmVh
ZHlDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRl
ciB1c2VyRGF0YSkKKyAgICB7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsK
KyAgICAgICAgR0xpc3QqIGNvb2tpZXMgPSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tp
ZXNfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmplY3QpLCByZXN1bHQsICZlcnJvci5v
dXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisKKyAgICAgICAgQ29v
a2llTWFuYWdlclRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVz
ZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+bV9jb29raWVzID0gY29va2llczsKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHTGlzdCogZ2V0
Q29va2llcyhjb25zdCBjaGFyKiB1cmkpCisgICAgeworICAgICAgICBnX2xpc3RfZnJlZV9mdWxs
KG1fY29va2llcywgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oc291cF9jb29raWVf
ZnJlZSkpOworICAgICAgICBtX2Nvb2tpZXMgPSBudWxscHRyOworICAgICAgICB3ZWJraXRfY29v
a2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMobV9jb29raWVNYW5hZ2VyLCB1cmksIDAsIGdldENvb2tp
ZXNSZWFkeUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxv
b3ApOworCisgICAgICAgIHJldHVybiBtX2Nvb2tpZXM7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgZGVsZXRlQ29va2llUmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7CisgICAgICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgYm9vbCBkZWxldGVkID0gd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2RlbGV0ZV9jb29raWVfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmplY3Qp
LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0KGRlbGV0ZWQpOworCisgICAgICAgIENvb2tpZU1hbmFnZXJU
ZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2llTWFuYWdlclRlc3QqPih1c2VyRGF0YSk7Cisg
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogZG9tYWluLCBj
b25zdCBjaGFyKiBwYXRoKQorICAgIHsKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2Rl
bGV0ZV9jb29raWUobV9jb29raWVNYW5hZ2VyLCBuYW1lLCBkb21haW4sIHBhdGgsIDAsIGRlbGV0
ZUNvb2tpZVJlYWR5Q2FsbGJhY2ssIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7CisgICAgfQorCiAgICAgdm9pZCBzZXRBY2NlcHRQb2xpY3koV2ViS2l0Q29va2ll
QWNjZXB0UG9saWN5IHBvbGljeSkKICAgICB7CiAgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfYWNjZXB0X3BvbGljeShtX2Nvb2tpZU1hbmFnZXIsIHBvbGljeSk7CkBAIC0xNzAsMTEg
KzIzMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdl
ID0gZmFsc2U7CiAgICAgfQogCi0gICAgV2ViS2l0Q29va2llTWFuYWdlciogbV9jb29raWVNYW5h
Z2VyOwotICAgIFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBtX2FjY2VwdFBvbGljeTsKLSAgICBj
aGFyKiogbV9kb21haW5zOwotICAgIGJvb2wgbV9jb29raWVzQ2hhbmdlZDsKLSAgICBib29sIG1f
ZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlOworICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1f
Y29va2llTWFuYWdlciB7IG51bGxwdHIgfTsKKyAgICBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kg
bV9hY2NlcHRQb2xpY3kgeyBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFS
VFkgfTsKKyAgICBjaGFyKiogbV9kb21haW5zIHsgbnVsbHB0ciB9OworICAgIEdMaXN0KiBtX2Nv
b2tpZXMgeyBudWxscHRyIH07CisgICAgYm9vbCBtX2Nvb2tpZXNDaGFuZ2VkIHsgZmFsc2UgfTsK
KyAgICBib29sIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlIHsgZmFsc2UgfTsKICAgICBH
VW5pcXVlUHRyPGNoYXI+IG1fY29va2llc1RleHRGaWxlOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4g
bV9jb29raWVzU1FMaXRlRmlsZTsKIH07CkBAIC0yMTEsNiArMjc1LDIxMCBAQCBzdGF0aWMgdm9p
ZCB0ZXN0Q29va2llTWFuYWdlckFjY2VwdFBvbGljeShDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcgogICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMp
LCA9PSwgMCk7CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyQWRkQ29va2llKENv
b2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIExvYWQgdGhl
IGh0bWwgY29udGVudCwgd2l0aCB0aGUgZGVmYXVsdCBOT19USElSRF9QQVJUWSBhY2NlcHQgcG9s
aWN5LAorICAgIC8vIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBhZGQgb25lIGNvb2tpZS4KKyAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0
YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisKKyAgICAv
LyBDaGVjayB0aGUgY29va2llcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBmb3IgdGhlIGRvbWFpbi4K
KyAgICBHVW5pcXVlUHRyPGNoYXI+IHVyaShnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQ
X1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICBHTGlzdCogZm91bmRD
b29raWVzID0gdGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAxKTsKKworICAgIFNvdXBDb29raWUq
IGZvdW5kQ29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGZvdW5kQ29va2llcy0+ZGF0
YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9uYW1lKGZvdW5kQ29va2ll
KSwgPT0sIGtDb29raWVOYW1lKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0
X2RvbWFpbihmb3VuZENvb2tpZSksID09LCBrRmlyc3RQYXJ0eURvbWFpbik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHNvdXBfY29va2llX2dldF9wYXRoKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVQ
YXRoKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3ZhbHVlKGZvdW5kQ29v
a2llKSwgPT0sIGtDb29raWVWYWx1ZSk7CisKKyAgICAvLyBUcnkgdG8gYWRkIG5vdyBhIGNvb2tp
ZSB3aXRoIHNhbWUgKG5hbWUsIGRvbWFpbiwgcGF0aCkgdGhhbiB0aGUgb25lcyBhbHJlYWR5IGFk
ZGVkLgorICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4gZmlyc3RDb29raWUoc291cF9jb29raWVf
bmV3KGtDb29raWVOYW1lLCBrQ29va2llVmFsdWVOZXcsIGtGaXJzdFBhcnR5RG9tYWluLCBrQ29v
a2llUGF0aCwgU09VUF9DT09LSUVfTUFYX0FHRV9PTkVfSE9VUikpOworICAgIHRlc3QtPmFkZENv
b2tpZShmaXJzdENvb2tpZS5nZXQoKSk7CisKKyAgICAvLyBTdGlsbCBvbmUgY29va2llLCBzaW5j
ZSAobmFtZSwgZG9tYWluLCBwYXRoKSBhcmUgdGhlIHNhbWUgdGhhbiB0aGUgYWxyZWFkeSBleGlz
dGluZworICAgIC8vIG9uZSwgYnV0IHRoZSBuZXcgdmFsdWUgaXMgbm93IHN0b3JlZCBhcyByZXBs
YWNlZCBieSB0aGUgcmVjZW50bHkgYWRkZWQgY29va2llLgorICAgIGZvdW5kQ29va2llcyA9IHRl
c3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xl
bmd0aChmb3VuZENvb2tpZXMpLCA9PSwgMSk7CisKKyAgICBmb3VuZENvb2tpZSA9IHN0YXRpY19j
YXN0PFNvdXBDb29raWUqPihmb3VuZENvb2tpZXMtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihzb3VwX2Nvb2tpZV9nZXRfbmFtZShmb3VuZENvb2tpZSksID09LCBrQ29va2llTmFtZSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9kb21haW4oZm91bmRDb29raWUpLCA9
PSwga0ZpcnN0UGFydHlEb21haW4pOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9n
ZXRfcGF0aChmb3VuZENvb2tpZSksID09LCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHNvdXBfY29va2llX2dldF92YWx1ZShmb3VuZENvb2tpZSksID09LCBrQ29va2llVmFsdWVO
ZXcpOworCisgICAgLy8gTm93IGNyZWF0ZSBhbm90aGVyIGNvb2tpZSB3aXRoIGEgZGlmZmVyZW50
IHBhdGggYW5kIGFkZCBpdC4KKyAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IHNlY29uZENvb2tp
ZShzb3VwX2Nvb2tpZV9uZXcoa0Nvb2tpZU5hbWUsIGtDb29raWVWYWx1ZU5ldywga0ZpcnN0UGFy
dHlEb21haW4sIGtDb29raWVQYXRoTmV3LCBTT1VQX0NPT0tJRV9NQVhfQUdFX09ORV9IT1VSKSk7
CisgICAgdGVzdC0+YWRkQ29va2llKHNlY29uZENvb2tpZS5nZXQoKSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOworCisgICAg
Ly8gUmV0cmlldmUgdGhlIGxpc3Qgb2YgY29va2llcyBmb3IgdGhlIHNhbWUgZG9tYWluIGFuZCBw
YXRoIGFnYWluIG5vdyBhbmQgY2hlY2suCisgICAgdXJpLnJlc2V0KGdfc3RyZHVwX3ByaW50Zigi
JXM6Ly8lcyVzIiwgU09VUF9VUklfU0NIRU1FX0hUVFAsIGtGaXJzdFBhcnR5RG9tYWluLCBrQ29v
a2llUGF0aE5ldykpOworICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdl
dCgpKTsKKworICAgIC8vIFdlIGhhdmUgbm93IHR3byBjb29raWVzIHRoYXQgd291bGQgYXBwbHkg
dG8gdGhlIHBhc3NlZCBVUkwsIG9uZSBpcyB0aGUgY29va2llIGluaXRpYWxseQorICAgIC8vIGxv
YWRlZCB3aXRoIHRoZSB3ZWIgY29udGVudCBhbmQgdGhlIG90aGVyIGNvb2tpZSB0aGUgb25lIHdl
IG1hbnVhbGx5IGFkZGVkLgorICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5k
Q29va2llcyksID09LCAyKTsKKworICAgIC8vIEFkZCBhIHRoaXJkIG5ldyBjb29raWUgZm9yIGEg
ZGlmZmVyZW50IGRvbWFpbiB0aGFuIHRoZSBwcmV2aW91cyBvbmVzLgorICAgIEdVbmlxdWVQdHI8
U291cENvb2tpZT4gdGhpcmRDb29raWUoc291cF9jb29raWVfbmV3KGtDb29raWVOYW1lLCBrQ29v
a2llVmFsdWVOZXcsIGtUaGlyZFBhcnR5RG9tYWluLCBrQ29va2llUGF0aE5ldywgU09VUF9DT09L
SUVfTUFYX0FHRV9PTkVfSE9VUikpOworICAgIHRlc3QtPmFkZENvb2tpZSh0aGlyZENvb2tpZS5n
ZXQoKSk7CisKKyAgICAvLyBPbmx5IG9uZSBjb29raWUgbm93LCBzaW5jZSB0aGUgZG9tYWluIGlz
IGRpZmZlcmVudC4KKyAgICB1cmkucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlczovLyVzJXMiLCBT
T1VQX1VSSV9TQ0hFTUVfSFRUUCwga1RoaXJkUGFydHlEb21haW4sIGtDb29raWVQYXRoTmV3KSk7
CisgICAgZm91bmRDb29raWVzID0gdGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworICAgIGdf
YXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAxKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMik7
CisKKyAgICBmb3VuZENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihmb3VuZENvb2tp
ZXMtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFtZShmb3Vu
ZENvb2tpZSksID09LCBrQ29va2llTmFtZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29v
a2llX2dldF9kb21haW4oZm91bmRDb29raWUpLCA9PSwga1RoaXJkUGFydHlEb21haW4pOworICAg
IGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfcGF0aChmb3VuZENvb2tpZSksID09LCBr
Q29va2llUGF0aE5ldyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF92YWx1
ZShmb3VuZENvb2tpZSksID09LCBrQ29va2llVmFsdWVOZXcpOworCisgICAgLy8gRmluYWxseSwg
ZGVsZXRlIGFsbCBjb29raWVzIGFuZCBjaGVjayB0aGV5IGFyZSBhbGwgZ29uZS4KKyAgICB0ZXN0
LT5kZWxldGVBbGxDb29raWVzKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgo
dGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Q29va2ll
TWFuYWdlckdldENvb2tpZXMoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgLy8gTG9hZCB0aGUgaHRtbCBjb250ZW50IGFuZCByZXRyaWV2ZSB0aGUgdHdvIGNv
b2tpZXMgYXV0b21hdGljYWxseSBhZGRlZCB3aXRoIEFMV0FZUyBwb2xpY3kuCisgICAgdGVzdC0+
c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOworICAg
IHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRh
KCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2Nt
cGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAyKTsKKworICAgIC8v
IFJldHJpZXZlIHRoZSBmaXJzdCBjb29raWUgdXNpbmcgYSBIVFRQIHNjaGVtZS4KKyAgICBHVW5p
cXVlUHRyPGNoYXI+IHVyaShnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hF
TUVfSFRUUCwga0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICBHTGlzdCogZm91bmRDb29raWVzID0g
dGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3Rf
bGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAxKTsKKworICAgIFNvdXBDb29raWUqIGZvdW5kQ29v
a2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGZvdW5kQ29va2llcy0+ZGF0YSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9uYW1lKGZvdW5kQ29va2llKSwgPT0sIGtD
b29raWVOYW1lKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X2RvbWFpbihm
b3VuZENvb2tpZSksID09LCBrRmlyc3RQYXJ0eURvbWFpbik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHNvdXBfY29va2llX2dldF9wYXRoKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVQYXRoKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3ZhbHVlKGZvdW5kQ29va2llKSwgPT0s
IGtDb29raWVWYWx1ZSk7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgc2Vjb25kIGNvb2tpZSB1c2lu
ZyBhIEhUVFBTIHNjaGVtZS4KKyAgICB1cmkucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlczovLyVz
IiwgU09VUF9VUklfU0NIRU1FX0hUVFBTLCBrVGhpcmRQYXJ0eURvbWFpbikpOworICAgIGZvdW5k
Q29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tpZXMpLCA9PSwgMSk7CisKKyAgICBmb3VuZENvb2tp
ZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihmb3VuZENvb2tpZXMtPmRhdGEpOworICAgIGdf
YXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFtZShmb3VuZENvb2tpZSksID09LCBrQ29v
a2llTmFtZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9kb21haW4oZm91
bmRDb29raWUpLCA9PSwga1RoaXJkUGFydHlEb21haW4pOworICAgIGdfYXNzZXJ0X2NtcHN0cihz
b3VwX2Nvb2tpZV9nZXRfcGF0aChmb3VuZENvb2tpZSksID09LCBrQ29va2llUGF0aCk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF92YWx1ZShmb3VuZENvb2tpZSksID09LCBr
Q29va2llVmFsdWUpOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IGNvb2tpZSBhbmQgYWRkIGl0IHRv
IHRoZSBmaXJzdCBkb21haW4uCisgICAgR1VuaXF1ZVB0cjxTb3VwQ29va2llPiBuZXdDb29raWUo
c291cF9jb29raWVfbmV3KGtDb29raWVOYW1lLCBrQ29va2llVmFsdWVOZXcsIGtGaXJzdFBhcnR5
RG9tYWluLCBrQ29va2llUGF0aE5ldywgU09VUF9DT09LSUVfTUFYX0FHRV9PTkVfSE9VUikpOwor
ICAgIHRlc3QtPmFkZENvb2tpZShuZXdDb29raWUuZ2V0KCkpOworCisgICAgLy8gV2Ugc2hvdWxk
IGdldCB0d28gY29va2llcyB0aGF0IHdvdWxkIGFwcGx5IHRvIHRoZSBzYW1lIFVSTCBwYXNzZWQs
IHNpbmNlCisgICAgLy8gaHR0cDovLzEyNy4wLjAuMS9uZXcgaXMgYSBzdWJzZXQgb2YgdGhlIGh0
dHA6Ly8xMjcuMC4wLjEvIFVSTC4KKyAgICB1cmkucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlczov
LyVzJXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlEb21haW4sIGtDb29raWVQ
YXRoTmV3KSk7CisgICAgZm91bmRDb29raWVzID0gdGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkp
OworICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAy
KTsKKworICAgIC8vIFdlIGhhdmUgbm93IHR3byBjb29raWVzIHRoYXQgd291bGQgYXBwbHkgdG8g
dGhlIHBhc3NlZCBVUkwsIG9uZSBpcyB0aGUgY29va2llIGluaXRpYWxseQorICAgIC8vIGxvYWRl
ZCB3aXRoIHRoZSB3ZWIgY29udGVudCBhbmQgdGhlIG90aGVyIGNvb2tpZSB0aGUgb25lIHdlIG1h
bnVhbGx5IGFkZGVkLgorICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29v
a2llcyksID09LCAyKTsKKworICAgIGJvb2wgbmV3UGF0aENoZWNrZWQgPSBmYWxzZTsKKyAgICBj
b25zdCBjaGFyKiBwYXRoRm91bmQgPSBudWxscHRyOworICAgIGNvbnN0IGNoYXIqIHZhbHVlRm91
bmQgPSBudWxscHRyOworICAgIGZvciAodWludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAg
ICBmb3VuZENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihnX2xpc3RfbnRoX2RhdGEo
Zm91bmRDb29raWVzLCBpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9n
ZXRfbmFtZShmb3VuZENvb2tpZSksID09LCBrQ29va2llTmFtZSk7CisgICAgICAgIGdfYXNzZXJ0
X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2llKSwgPT0sIGtGaXJzdFBh
cnR5RG9tYWluKTsKKworICAgICAgICAvLyBDb29raWVzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgdmFs
dWVzIGZvciAndmFsdWUnIGFuZCAncGF0aCcsIHNvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgIC8v
IHdlIGNoZWNrIGZvciBib3RoIHBvc3NpYmlsaXRpZXMsIGJ1dCBkaWZmZXJlbnQgb25lcyBmb3Ig
ZWFjaCBjb29raWUgZm91bmQuCisgICAgICAgIHBhdGhGb3VuZCA9IHNvdXBfY29va2llX2dldF9w
YXRoKGZvdW5kQ29va2llKTsKKyAgICAgICAgdmFsdWVGb3VuZCA9IHNvdXBfY29va2llX2dldF92
YWx1ZShmb3VuZENvb2tpZSk7CisgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgaWYg
KG5ld1BhdGhDaGVja2VkKSB7CisgICAgICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHBhdGhG
b3VuZCwgPT0sIGtDb29raWVQYXRoKTsKKyAgICAgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
dmFsdWVGb3VuZCwgPT0sIGtDb29raWVWYWx1ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihwYXRoRm91bmQsID09LCBrQ29va2llUGF0aE5l
dyk7CisgICAgICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlRm91bmQsID09LCBrQ29v
a2llVmFsdWVOZXcpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKGdfc3RyY21wMChwYXRoRm91bmQsIGtDb29raWVQYXRoKSkgeworICAgICAgICAgICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cihwYXRoRm91bmQsID09LCBrQ29va2llUGF0aE5ldyk7CisgICAg
ICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlRm91bmQsID09LCBrQ29va2llVmFsdWVO
ZXcpOworICAgICAgICAgICAgICAgIG5ld1BhdGhDaGVja2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGdfc3RyY21wMChwYXRoRm91bmQsIGtDb29raWVQYXRoTmV3
KSkgeworICAgICAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihwYXRoRm91bmQsID09LCBrQ29v
a2llUGF0aCk7CisgICAgICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlRm91bmQsID09
LCBrQ29va2llVmFsdWUpOworICAgICAgICAgICAgICAgIG5ld1BhdGhDaGVja2VkID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXZSBzaG91bGQgZ2V0
IDEgY29va2llIG9ubHkgaWYgd2Ugc3BlY2lmeSBodHRwOi8vMTI3LjAuMC4xLywgdGhvdWdoLgor
ICAgIHVyaS5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hFTUVf
SFRUUCwga0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICBmb3VuZENvb2tpZXMgPSB0ZXN0LT5nZXRD
b29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91
bmRDb29raWVzKSwgPT0sIDEpOworCisgICAgZm91bmRDb29raWUgPSBzdGF0aWNfY2FzdDxTb3Vw
Q29va2llKj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9j
b29raWVfZ2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2llKSwgPT0sIGtGaXJz
dFBhcnR5RG9tYWluKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3BhdGgo
Zm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3Vw
X2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVlKTsKKworICAg
IC8vIEZpbmFsbHksIGRlbGV0ZSBhbGwgY29va2llcyBhbmQgdHJ5IHRvIHJldHJpZXZlIHRoZW0g
YWdhaW4sIG9uZSBieSBvbmUuCisgICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOworICAgIGdf
YXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsK
KworICAgIHVyaS5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hF
TUVfSFRUUCwga0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICBmb3VuZENvb2tpZXMgPSB0ZXN0LT5n
ZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfbnVsbChmb3VuZENvb2tpZXMpOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZShDb29raWVNYW5h
Z2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xp
Y3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICAvLyBJbml0aWFsbHksIHRoZXJlIHNo
b3VsZCBiZSB0d28gY29va2llcyBhdmFpbGFibGUuCisgICAgZ19hc3NlcnRfY21waW50KGdfc3Ry
dl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgLy8gRGVsZXRlIHRo
ZSBjb29raWUgZm9yIHRoZSBmaXJzdCBwYXJ0eSBkb21haW4uCisgICAgdGVzdC0+ZGVsZXRlQ29v
a2llKGtDb29raWVOYW1lLCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGgpOworICAgIGdf
YXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAxKTsK
KworICAgIC8vIFRyeSBkZWxldGluZyBhIG5vbi1leGlzdGVudCBjb29raWUgKHdyb25nIG5hbWUp
LgorICAgIHRlc3QtPmRlbGV0ZUNvb2tpZSgid3JvbmctbmFtZSIsIGtUaGlyZFBhcnR5RG9tYWlu
LCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+
Z2V0RG9tYWlucygpKSwgPT0sIDEpOworCisgICAgLy8gVHJ5IGRlbGV0aW5nIGEgbm9uLWV4aXN0
ZW50IGNvb2tpZSAod3JvbmcgZG9tYWluKS4KKyAgICB0ZXN0LT5kZWxldGVDb29raWUoa0Nvb2tp
ZU5hbWUsICJ3cm9uZy1kb21haW4iLCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21waW50
KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOworCisgICAgLy8gVHJ5
IGRlbGV0aW5nIGEgbm9uLWV4aXN0ZW50IGNvb2tpZSAod3JvbmcgcGF0aCkuCisgICAgdGVzdC0+
ZGVsZXRlQ29va2llKGtDb29raWVOYW1lLCBrVGhpcmRQYXJ0eURvbWFpbiwgIndyb25nLXBhdGgi
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkp
LCA9PSwgMSk7CisKKyAgICAvLyBEZWxldGUgdGhlIGNvb2tpZSBmb3IgdGhlIHRoaXJkIHBhcnR5
IGRvbWFpbi4KKyAgICB0ZXN0LT5kZWxldGVDb29raWUoa0Nvb2tpZU5hbWUsIGtUaGlyZFBhcnR5
RG9tYWluLCBrQ29va2llUGF0aCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgo
dGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworCisgICAgLy8gRmluYWxseSwgYWRkIGEgbmV3
IGNvb2tpZSBub3cgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5kIGRlbGV0ZSBpdCBhZnRlcndhcmRzLgor
ICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4gbmV3Q29va2llKHNvdXBfY29va2llX25ldyhrQ29v
a2llTmFtZSwga0Nvb2tpZVZhbHVlTmV3LCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhO
ZXcsIFNPVVBfQ09PS0lFX01BWF9BR0VfT05FX0hPVVIpKTsKKyAgICB0ZXN0LT5hZGRDb29raWUo
bmV3Q29va2llLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0
LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisgICAgdGVzdC0+ZGVsZXRlQ29va2llKGtDb29raWVO
YW1lLCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcpOworICAgIGdfYXNzZXJ0X2Nt
cGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKK30KKwogc3Rh
dGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzKENvb2tpZU1hbmFnZXJUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJL
SVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKQEAgLTM2MCwxMiArNjI4LDE0IEBAIHN0
YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2Uq
IG1lc3NhZ2UsIGNvbnN0IGNoYXIqCiAgICAgfQogCiAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIGdjaGFyKiBoZWFkZXJfc3RyID0gZ19z
dHJkdXBfcHJpbnRmKCIlcz0lczsgTWF4LUFnZT02MCIsIGtDb29raWVOYW1lLCBrQ29va2llVmFs
dWUpOworCiAgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW5kZXguaHRtbCIpKSB7CiAgICAg
ICAgIGNoYXIqIGluZGV4SHRtbCA9IGdfc3RyZHVwX3ByaW50ZihrSW5kZXhIdG1sRm9ybWF0LCBz
b3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsICJmb289
YmFyOyBNYXgtQWdlPTYwIik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2Uo
bWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29raWUiLCBoZWFkZXJfc3RyKTsKICAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX1RBS0UsIGluZGV4SHRtbCwgc3RybGVuKGluZGV4SHRtbCkpOwogICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbWFnZS5wbmciKSkKLSAgICAgICAgc291cF9tZXNz
YWdlX2hlYWRlcnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tp
ZSIsICJiYXo9cXV4OyBNYXgtQWdlPTYwIik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJz
X3JlcGxhY2UobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29raWUiLCBoZWFkZXJf
c3RyKTsKICAgICBlbHNlCiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CiAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUo
bWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CkBAIC0zNzcsNiArNjQ3LDkgQEAgdm9pZCBiZWZvcmVB
bGwoKQogICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CiAKICAgICBDb29raWVNYW5h
Z2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImFjY2VwdC1wb2xpY3kiLCB0ZXN0
Q29va2llTWFuYWdlckFjY2VwdFBvbGljeSk7CisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgi
V2ViS2l0Q29va2llTWFuYWdlciIsICJhZGQtY29va2llIiwgdGVzdENvb2tpZU1hbmFnZXJBZGRD
b29raWUpOworICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIi
LCAiZ2V0LWNvb2tpZXMiLCB0ZXN0Q29va2llTWFuYWdlckdldENvb2tpZXMpOworICAgIENvb2tp
ZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiZGVsZXRlLWNvb2tpZSIs
IHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llKTsKICAgICBDb29raWVNYW5hZ2VyVGVzdDo6
YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImRlbGV0ZS1jb29raWVzIiwgdGVzdENvb2tpZU1h
bmFnZXJEZWxldGVDb29raWVzKTsKICAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRD
b29raWVNYW5hZ2VyIiwgImNvb2tpZXMtY2hhbmdlZCIsIHRlc3RDb29raWVNYW5hZ2VyQ29va2ll
c0NoYW5nZWQpOwogICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFn
ZXIiLCAicGVyc2lzdGVudC1zdG9yYWdlIiwgdGVzdENvb2tpZU1hbmFnZXJQZXJzaXN0ZW50U3Rv
cmFnZSk7Ci0tIAoyLjE0LjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327360</attachid>
            <date>2017-11-20 06:39:29 -0800</date>
            <delta_ts>2017-11-20 08:39:51 -0800</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-GTK-New-API-to-add-retrieve-and-delete-cookies-via-W.patch</filename>
            <type>text/plain</type>
            <size>51814</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAyMDczMzM3NDM5M2VkNjhmYzM3ODZmYzRjYmMxOTJmMzk3MTg2YzQ3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpb0B3ZWJraXQub3Jn
PgpEYXRlOiBTYXQsIDE4IE5vdiAyMDE3IDA5OjQ1OjA2ICswMDAwClN1YmplY3Q6IFtQQVRDSF0g
W0dUS10gTmV3IEFQSSB0byBhZGQsIHJldHJpZXZlIGFuZCBkZWxldGUgY29va2llcyB2aWEKIFdl
YktpdENvb2tpZU1hbmFnZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzkzMgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpTb3VyY2UvV2ViQ29yZToKCklt
cGxlbWVudGVkIHNldENvb2tpZSgpLCBnZXRDb29raWVzKCkgYW5kIGRlbGV0ZUNvb2tpZSgpIGlu
IHRoZSBTb3VwCmJhY2tlbmQsIGFuZCByZWZhY3RvcmVkIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMg
YW5kIGNvbnZlcnNpb25zIG91dCBvZgpOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwIGludG8gYSBu
ZXcgQ29va2llU291cC5jcHAgZmlsZSwgc28KdGhhdCB3ZSBub3cgY2FuIGNvbnZlcnQgYmV0d2Vl
biBTb3VwQ29va2llKiBhbmQgV2ViQ29yZTo6Q29va2llCmVhc2lseSBmcm9tIGFueXdoZXJlICh0
aGlzIGlzIG5vdyBuZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2VzcykuCgoqIHBsYXRmb3JtL0Nvb2tp
ZS5oOiBBZGQgZGVjbGFyYXRpb25zIGZvciB0aGUgbmV3IGNvbnZlcnNpb25zLgoqIHBsYXRmb3Jt
L1NvdXJjZXNTb3VwLnR4dDogQWRkIENvb2tpZVNvdXAuY3BwLgoqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9Db29raWVTb3VwLmNwcDogQWRkZWQuCihXZWJDb3JlOjpDb29raWU6OkNvb2tpZSk6IE5l
dyBjb25zdHJ1Y3RvciwgY3JlYXRlcyBhIFdlYkNvcmU6OkNvb2tpZSBvdXQgb2YgYSBTb3VwQ29v
a2llKi4KKFdlYkNvcmU6Om1zVG9Tb3VwRGF0ZSk6IE1vdmVkIGZyb20gTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uU291cC5jcHAuCihXZWJDb3JlOjpDb29raWU6OnRvU291cENvb2tpZSk6IE5ldywgYmFz
ZWQgb24gdG9Tb3VwQ29va2llKCkgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcC4K
KiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHA6CihX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMpOiBVc2VkIHRoZSBuZXcg
aW1wbGljaXQgY29udmVyc2lvbi4KKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0
Q29va2llKTogTmV3bHkgaW1wbGVtZW50ZWQuCihXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmRlbGV0ZUNvb2tpZSk6IE5ld2x5IGltcGxlbWVudGVkLgooV2ViQ29yZTo6TmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpnZXRDb29raWVzKTogTmV3bHkgaW1wbGVtZW50ZWQuCgpTb3VyY2UvV2Vi
S2l0OgoKQWRkZWQgbmV3IEFQSSB0byBXZWJLaXRDb29raWVNYW5hZ2VyIHRvIGFkZCwgcmV0cmll
dmUgYW5kIGRlbGV0ZSBjb21wbGV0ZQpjb29raWVzIGludG8vb3V0LW9mIGEgcnVubmluZyBzZXNz
aW9uLCBhbmQgdXBkYXRlZCBkb2N1bWVudGF0aW9uIHNlY3Rpb25zLgoKKiBVSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHA6Cih3ZWJraXRfY29va2llX21hbmFnZXJfYWRk
X2Nvb2tpZSk6IE5ldyBmdW5jdGlvbi4KKHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2ll
X2ZpbmlzaCk6IERpdHRvLgood2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKTogRGl0
dG8uCih3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmluaXNoKTogRGl0dG8uCih3
ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSk6IERpdHRvLgood2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVfZmluaXNoKTogRGl0dG8uCiogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Q29va2llTWFuYWdlci5oOiBBZGRlZCBuZXcgZnVuY3Rpb25zLgoqIFVJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdENvb2tpZU1hbmFnZXIuaDogRGl0dG8uCiogVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6IERpdHRvLgoKVG9vbHM6CgpBZGRl
ZCBuZXcgdGVzdCBjYXNlcyB0byBjb3ZlciB0aGUgbmV3bHkgYWRkZWQgQVBJIGZvciBXZWJLaXRD
b29raWVNYW5hZ2VyOgp3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZSwgd2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2dldF9jb29raWVzIGFuZAp3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRl
X2Nvb2tpZS4KCiogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVNYW5h
Z2VyLmNwcDoKKHRlc3RDb29raWVNYW5hZ2VyQWRkQ29va2llKTogQWRkZWQuCih0ZXN0Q29va2ll
TWFuYWdlckdldENvb2tpZXMpOiBBZGRlZC4KKHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2ll
KTogQWRkZWQuCihzZXJ2ZXJDYWxsYmFjayk6IFNtYWxsIHVwZGF0ZSB0byBhdm9pZCBoYXJkY29k
aW5nIHN0cmluZ3Mgd2UgcmV1c2UuCihiZWZvcmVBbGwpOiBBZGRlZCB0aGUgbmV3IHRlc3QgY2Fz
ZXMgdG8gdGhlIHRlc3Qgc3VpdGUuCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMjUgKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nv
b2tpZS5oICAgICAgICAgICAgICAgICAgIHwgICAzICsKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NvdXJjZXNTb3VwLnR4dCAgICAgICAgICAgIHwgICAxICsKIC4uLi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9Db29raWVTb3VwLmNwcCAgIHwgIDgwICsrKysrKwogLi4uL25ldHdvcmsv
c291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcCAgICAgfCAgNTEgKystLQogU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjEgKysKIC4u
Li9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgICAgIHwgMTg2ICsr
KysrKysrKysrKysKIC4uLi9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFu
YWdlci5oIHwgIDM4ICsrKwogLi4uL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9u
cy50eHQgICAgICAgfCAgIDYgKwogLi4uL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRD
b29raWVNYW5hZ2VyLmggfCAgMzggKysrCiBUb29scy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAxOCArKwogLi4uL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENv
b2tpZU1hbmFnZXIuY3BwICAgICAgICAgfCAyOTQgKysrKysrKysrKysrKysrKysrKystCiAxMiBm
aWxlcyBjaGFuZ2VkLCA3MjYgaW5zZXJ0aW9ucygrKSwgMzUgZGVsZXRpb25zKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVNv
dXAuY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGZmNmQ0MzE0NWYzLi45NmJiMzlkNDJiMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI4IEBACisyMDE3LTExLTE4ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFy
aW9AZW5kbGVzc20uY29tPgorCisgICAgICAgIFtHVEtdIE5ldyBBUEkgdG8gYWRkLCByZXRyaWV2
ZSBhbmQgZGVsZXRlIGNvb2tpZXMgdmlhIFdlYktpdENvb2tpZU1hbmFnZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzkzMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIHNldENvb2tp
ZSgpLCBnZXRDb29raWVzKCkgYW5kIGRlbGV0ZUNvb2tpZSgpIGluIHRoZSBTb3VwCisgICAgICAg
IGJhY2tlbmQsIGFuZCByZWZhY3RvcmVkIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIGNvbnZl
cnNpb25zIG91dCBvZgorICAgICAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwIGludG8gYSBu
ZXcgQ29va2llU291cC5jcHAgZmlsZSwgc28KKyAgICAgICAgdGhhdCB3ZSBub3cgY2FuIGNvbnZl
cnQgYmV0d2VlbiBTb3VwQ29va2llKiBhbmQgV2ViQ29yZTo6Q29va2llCisgICAgICAgIGVhc2ls
eSBmcm9tIGFueXdoZXJlICh0aGlzIGlzIG5vdyBuZWVkZWQgZnJvbSB0aGUgVUkgUHJvY2Vzcyku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9Db29raWUuaDogQWRkIGRlY2xhcmF0aW9ucyBmb3IgdGhl
IG5ldyBjb252ZXJzaW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzU291cC50eHQ6IEFk
ZCBDb29raWVTb3VwLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2ll
U291cC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29va2llOjpDb29raWUpOiBOZXcg
Y29uc3RydWN0b3IsIGNyZWF0ZXMgYSBXZWJDb3JlOjpDb29raWUgb3V0IG9mIGEgU291cENvb2tp
ZSouCisgICAgICAgIChXZWJDb3JlOjptc1RvU291cERhdGUpOiBNb3ZlZCBmcm9tIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvblNvdXAuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q29va2llOjp0b1NvdXBD
b29raWUpOiBOZXcsIGJhc2VkIG9uIHRvU291cENvb2tpZSgpIGZyb20gTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uU291cC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtT
dG9yYWdlU2Vzc2lvblNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpzZXRDb29raWVzKTogVXNlZCB0aGUgbmV3IGltcGxpY2l0IGNvbnZlcnNpb24uCisg
ICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZSk6IE5ld2x5
IGltcGxlbWVudGVkLgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpk
ZWxldGVDb29raWUpOiBOZXdseSBpbXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Z2V0Q29va2llcyk6IE5ld2x5IGltcGxlbWVudGVkLgorCiAyMDE3
LTExLTIwICBFbWlsaW8gQ29ib3Mgw4FsdmFyZXogIDxlbWlsaW9AY3Jpc2FsLmlvPgogCiAgICAg
ICAgIEluY29ycmVjdCBjb21wdXRlZCBzdHlsZSBpbiBwc2V1ZG8tZWxlbWVudHMgd2l0aCBkaXNw
bGF5OiBjb250ZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2ll
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWUuaAppbmRleCAwOTMzY2NhMDczYy4u
YTM2MzkwNDY3ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oCkBAIC02Nyw2ICs2Nyw5IEBA
IHN0cnVjdCBDb29raWUgewogI2lmZGVmIF9fT0JKQ19fCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29v
a2llKE5TSFRUUENvb2tpZSAqKTsKICAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBOU0hUVFBD
b29raWUgKigpIGNvbnN0OworI2VsaWYgVVNFKFNPVVApCisgICAgZXhwbGljaXQgQ29va2llKFNv
dXBDb29raWUqKTsKKyAgICBTb3VwQ29va2llKiB0b1NvdXBDb29raWUoKSBjb25zdDsKICNlbmRp
ZgogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU291cmNlc1NvdXAudHh0IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNl
c1NvdXAudHh0CmluZGV4IGViZGM4OWYxNjQzLi44ZTQ3ZDYyYTM4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc1NvdXAudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NvdXJjZXNTb3VwLnR4dApAQCAtMjQsNiArMjQsNyBAQAogcGxhdGZvcm0vbmV0
d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKIHBsYXRmb3JtL25ldHdv
cmsvc291cC9DZXJ0aWZpY2F0ZUluZm8uY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2ll
SmFyU291cC5jcHAKK3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTb3VwLmNwcAogcGxhdGZv
cm0vbmV0d29yay9zb3VwL0Nvb2tpZVN0b3JhZ2VTb3VwLmNwcAogcGxhdGZvcm0vbmV0d29yay9z
b3VwL0NyZWRlbnRpYWxTdG9yYWdlU291cC5jcHAKIHBsYXRmb3JtL25ldHdvcmsvc291cC9ETlNT
b3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L0Nvb2tpZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nv
b2tpZVNvdXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jOGM1
OWQwYTE0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Db29raWVTb3VwLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgRW5kbGVzcyBNb2Jp
bGUsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb2tpZS5oIgorCisjaW5jbHVkZSA8d3RmL0Rh
dGVNYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29va2llOjpDb29raWUoU291cENv
b2tpZSogY29va2llKQorICAgIDogbmFtZShTdHJpbmc6OmZyb21VVEY4KGNvb2tpZS0+bmFtZSkp
CisgICAgLCB2YWx1ZShTdHJpbmc6OmZyb21VVEY4KGNvb2tpZS0+dmFsdWUpKQorICAgICwgZG9t
YWluKFN0cmluZzo6ZnJvbVVURjgoY29va2llLT5kb21haW4pKQorICAgICwgcGF0aChTdHJpbmc6
OmZyb21VVEY4KGNvb2tpZS0+cGF0aCkpCisgICAgLCBleHBpcmVzKDApCisgICAgLCBodHRwT25s
eShjb29raWUtPmh0dHBfb25seSkKKyAgICAsIHNlY3VyZShjb29raWUtPnNlY3VyZSkKKyAgICAs
IHNlc3Npb24oIWNvb2tpZS0+ZXhwaXJlcykKKworeworICAgIGlmIChjb29raWUtPmV4cGlyZXMp
CisgICAgICAgIGV4cGlyZXMgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHNvdXBfZGF0ZV90b190aW1l
X3QoY29va2llLT5leHBpcmVzKSkgKiAxMDAwOworfQorCitzdGF0aWMgU291cERhdGUqIG1zVG9T
b3VwRGF0ZShkb3VibGUgbXMpCit7CisgICAgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7CisgICAg
aW50IGRheU9mWWVhciA9IGRheUluWWVhcihtcywgeWVhcik7CisgICAgYm9vbCBsZWFwWWVhciA9
IGlzTGVhcFllYXIoeWVhcik7CisKKyAgICAvLyBtb250aEZyb21EYXlJblllYXIoKSByZXR1cm5z
IGEgdmFsdWUgaW4gdGhlIFswLDExXSByYW5nZSwgd2hpbGUgc291cF9kYXRlX25ldygpIGV4cGVj
dHMKKyAgICAvLyBhIHZhbHVlIGluIHRoZSBbMSwxMl0gcmFuZ2UsIG1lYW5pbmcgd2UgaGF2ZSB0
byBtYW51YWxseSBhZGp1c3QgdGhlIG1vbnRoIHZhbHVlLgorICAgIHJldHVybiBzb3VwX2RhdGVf
bmV3KHllYXIsIG1vbnRoRnJvbURheUluWWVhcihkYXlPZlllYXIsIGxlYXBZZWFyKSArIDEsIGRh
eUluTW9udGhGcm9tRGF5SW5ZZWFyKGRheU9mWWVhciwgbGVhcFllYXIpLCBtc1RvSG91cnMobXMp
LCBtc1RvTWludXRlcyhtcyksIHN0YXRpY19jYXN0PGludD4obXMgLyAxMDAwKSAlIDYwKTsKK30K
KworU291cENvb2tpZSogQ29va2llOjp0b1NvdXBDb29raWUoKSBjb25zdAoreworICAgIGlmIChu
YW1lLmlzTnVsbCgpIHx8IHZhbHVlLmlzTnVsbCgpIHx8IGRvbWFpbi5pc051bGwoKSB8fCBwYXRo
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFNvdXBDb29raWUqIHNv
dXBDb29raWUgPSBzb3VwX2Nvb2tpZV9uZXcobmFtZS51dGY4KCkuZGF0YSgpLCB2YWx1ZS51dGY4
KCkuZGF0YSgpLAorICAgICAgICBkb21haW4udXRmOCgpLmRhdGEoKSwgcGF0aC51dGY4KCkuZGF0
YSgpLCAtMSk7CisKKyAgICBzb3VwX2Nvb2tpZV9zZXRfaHR0cF9vbmx5KHNvdXBDb29raWUsIGh0
dHBPbmx5KTsKKyAgICBzb3VwX2Nvb2tpZV9zZXRfc2VjdXJlKHNvdXBDb29raWUsIHNlY3VyZSk7
CisKKyAgICBpZiAoIXNlc3Npb24pIHsKKyAgICAgICAgU291cERhdGUqIGRhdGUgPSBtc1RvU291
cERhdGUoZXhwaXJlcyk7CisgICAgICAgIHNvdXBfY29va2llX3NldF9leHBpcmVzKHNvdXBDb29r
aWUsIGRhdGUpOworICAgICAgICBzb3VwX2RhdGVfZnJlZShkYXRlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gc291cENvb2tpZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vz
c2lvblNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdv
cmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCmluZGV4IDU4ZmU2NjQyMzIxLi5iNzA1MTkwNmFjYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtT
dG9yYWdlU2Vzc2lvblNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcApAQCAtMiw2ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb3VwTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0dVbmlxdWVQdHJTb3VwLmg+CiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAjaW5j
bHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTI4
Myw0NSArMjg1LDIxIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzYXZlQ3JlZGVudGlh
bFRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwCiAjZW5kaWYKIH0KIAotc3Rh
dGljIFNvdXBEYXRlKiBtc1RvU291cERhdGUoZG91YmxlIG1zKQotewotICAgIGludCB5ZWFyID0g
bXNUb1llYXIobXMpOwotICAgIGludCBkYXlPZlllYXIgPSBkYXlJblllYXIobXMsIHllYXIpOwot
ICAgIGJvb2wgbGVhcFllYXIgPSBpc0xlYXBZZWFyKHllYXIpOwotCi0gICAgLy8gbW9udGhGcm9t
RGF5SW5ZZWFyKCkgcmV0dXJucyBhIHZhbHVlIGluIHRoZSBbMCwxMV0gcmFuZ2UsIHdoaWxlIHNv
dXBfZGF0ZV9uZXcoKSBleHBlY3RzCi0gICAgLy8gYSB2YWx1ZSBpbiB0aGUgWzEsMTJdIHJhbmdl
LCBtZWFuaW5nIHdlIGhhdmUgdG8gbWFudWFsbHkgYWRqdXN0IHRoZSBtb250aCB2YWx1ZS4KLSAg
ICByZXR1cm4gc291cF9kYXRlX25ldyh5ZWFyLCBtb250aEZyb21EYXlJblllYXIoZGF5T2ZZZWFy
LCBsZWFwWWVhcikgKyAxLCBkYXlJbk1vbnRoRnJvbURheUluWWVhcihkYXlPZlllYXIsIGxlYXBZ
ZWFyKSwgbXNUb0hvdXJzKG1zKSwgbXNUb01pbnV0ZXMobXMpLCBzdGF0aWNfY2FzdDxpbnQ+KG1z
IC8gMTAwMCkgJSA2MCk7Ci19Ci0KLXN0YXRpYyBTb3VwQ29va2llKiB0b1NvdXBDb29raWUoY29u
c3QgQ29va2llJiBjb29raWUpCi17Ci0gICAgU291cENvb2tpZSogc291cENvb2tpZSA9IHNvdXBf
Y29va2llX25ldyhjb29raWUubmFtZS51dGY4KCkuZGF0YSgpLCBjb29raWUudmFsdWUudXRmOCgp
LmRhdGEoKSwKLSAgICAgICAgY29va2llLmRvbWFpbi51dGY4KCkuZGF0YSgpLCBjb29raWUucGF0
aC51dGY4KCkuZGF0YSgpLCAtMSk7Ci0gICAgc291cF9jb29raWVfc2V0X2h0dHBfb25seShzb3Vw
Q29va2llLCBjb29raWUuaHR0cE9ubHkpOwotICAgIHNvdXBfY29va2llX3NldF9zZWN1cmUoc291
cENvb2tpZSwgY29va2llLnNlY3VyZSk7Ci0gICAgaWYgKCFjb29raWUuc2Vzc2lvbikgewotICAg
ICAgICBTb3VwRGF0ZSogZGF0ZSA9IG1zVG9Tb3VwRGF0ZShjb29raWUuZXhwaXJlcyk7Ci0gICAg
ICAgIHNvdXBfY29va2llX3NldF9leHBpcmVzKHNvdXBDb29raWUsIGRhdGUpOwotICAgICAgICBz
b3VwX2RhdGVfZnJlZShkYXRlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNvdXBDb29raWU7Ci19Ci0K
IHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxDb29r
aWU+JiBjb29raWVzLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmKQogewogICAgIGZvciAoYXV0byBj
b29raWUgOiBjb29raWVzKQotICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZShjb29r
aWVTdG9yYWdlKCksIHRvU291cENvb2tpZShjb29raWUpKTsKKyAgICAgICAgc291cF9jb29raWVf
amFyX2FkZF9jb29raWUoY29va2llU3RvcmFnZSgpLCBjb29raWUudG9Tb3VwQ29va2llKCkpOwog
fQogCi12b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llKGNvbnN0IENvb2tpZSYp
Cit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llKGNvbnN0IENvb2tpZSYgY29v
a2llKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0byB1c2UuCisgICAgc291
cF9jb29raWVfamFyX2FkZF9jb29raWUoY29va2llU3RvcmFnZSgpLCBjb29raWUudG9Tb3VwQ29v
a2llKCkpOwogfQogCi12b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNv
bnN0IENvb2tpZSYpCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNv
bnN0IENvb2tpZSYgY29va2llKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIFdLMiB0
byB1c2UuCisgICAgR1VuaXF1ZVB0cjxTb3VwQ29va2llPiB0YXJnZXRDb29raWUoY29va2llLnRv
U291cENvb2tpZSgpKTsKKyAgICBzb3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShjb29raWVT
dG9yYWdlKCksIHRhcmdldENvb2tpZS5nZXQoKSk7CiB9CiAKIFZlY3RvcjxDb29raWU+IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Z2V0QWxsQ29va2llcygpCkBAIC0zMzAsMTAgKzMwOCwxNyBAQCBW
ZWN0b3I8Q29va2llPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEFsbENvb2tpZXMoKQogICAg
IHJldHVybiB7IH07CiB9CiAKLVZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6
Z2V0Q29va2llcyhjb25zdCBVUkwmKQorVmVjdG9yPENvb2tpZT4gTmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpnZXRDb29raWVzKGNvbnN0IFVSTCYgdXJsKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgZm9yIFdLMiB0byB1c2UuCi0gICAgcmV0dXJuIHsgfTsKKyAgICBWZWN0b3I8Q29va2llPiBj
b29raWVzOworICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0gdXJsLmNyZWF0ZVNvdXBVUkko
KTsKKyAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llc0xpc3Qoc291cF9jb29raWVfamFyX2dl
dF9jb29raWVfbGlzdChjb29raWVTdG9yYWdlKCksIHVyaS5nZXQoKSwgVFJVRSkpOworICAgIGZv
ciAoR1NMaXN0KiBpdGVtID0gY29va2llc0xpc3QuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0
X25leHQoaXRlbSkpIHsKKyAgICAgICAgR1VuaXF1ZVB0cjxTb3VwQ29va2llPiBzb3VwQ29va2ll
KHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKSk7CisgICAgICAgIGNvb2tpZXMu
YXBwZW5kKFdlYkNvcmU6OkNvb2tpZShzb3VwQ29va2llLmdldCgpKSk7CisgICAgfQorCisgICAg
cmV0dXJuIGNvb2tpZXM7CiB9CiAKIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpmbHVzaENv
b2tpZVN0b3JlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggODhjNzczMTA2ZTQuLjAzNmQzNmY0ZGNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI0IEBACisyMDE3LTExLTE4ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFy
aW9AZW5kbGVzc20uY29tPgorCisgICAgICAgIFtHVEtdIE5ldyBBUEkgdG8gYWRkLCByZXRyaWV2
ZSBhbmQgZGVsZXRlIGNvb2tpZXMgdmlhIFdlYktpdENvb2tpZU1hbmFnZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzkzMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5ldyBBUEkgdG8gV2Vi
S2l0Q29va2llTWFuYWdlciB0byBhZGQsIHJldHJpZXZlIGFuZCBkZWxldGUgY29tcGxldGUKKyAg
ICAgICAgY29va2llcyBpbnRvL291dC1vZiBhIHJ1bm5pbmcgc2Vzc2lvbiwgYW5kIHVwZGF0ZWQg
ZG9jdW1lbnRhdGlvbiBzZWN0aW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9h
ZGRfY29va2llKTogTmV3IGZ1bmN0aW9uLgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2FkZF9jb29raWVfZmluaXNoKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2Nvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9n
ZXRfY29va2llc19maW5pc2gpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdl
cl9kZWxldGVfY29va2llKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJf
ZGVsZXRlX2Nvb2tpZV9maW5pc2gpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRDb29raWVNYW5hZ2VyLmg6IEFkZGVkIG5ldyBmdW5jdGlvbnMuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFuYWdlci5oOiBEaXR0by4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dDogRGl0
dG8uCisKIDIwMTctMTEtMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtXUEVdIHdlYmtpdF93ZWJfdmlld19uZXcoKSBzaG91bGQgZW5hYmxl
IHNwZWNpZnlpbmcgd3BlX3ZpZXdfYmFja2VuZCBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKaW5kZXgg
ZWVkMjcwMjY2NDcuLmVjYmY5OTNiODc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmgiCiAj
aW5jbHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURh
dGFSZWNvcmQuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUgPHBhbC9T
ZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L2dsaWIvV1RGR1R5cGUuaD4KQEAgLTIzMiw2ICsyMzQsMTkwIEBAIFdlYktpdENvb2tpZUFjY2Vw
dFBvbGljeSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3lfZmluaXNoKFdl
YktpdENvCiAgICAgcmV0dXJuIHJldHVyblZhbHVlID09IC0xID8gV0VCS0lUX0NPT0tJRV9QT0xJ
Q1lfQUNDRVBUX05PX1RISVJEX1BBUlRZIDogc3RhdGljX2Nhc3Q8V2ViS2l0Q29va2llQWNjZXB0
UG9saWN5PihyZXR1cm5WYWx1ZSk7CiB9CiAKKy8qKgorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2FkZF9jb29raWU6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktpdENvb2tpZU1hbmFnZXIK
KyAqIEBjb29raWU6IHRoZSAjU291cENvb2tpZSB0byBiZSBhZGRlZAorICogQGNhbmNlbGxhYmxl
OiAoYWxsb3ctbm9uZSk6IGEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTCB0byBpZ25vcmUKKyAqIEBj
YWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdo
ZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHRo
ZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3luY2hyb25vdXNs
eSBhZGQgYSAjU291cENvb2tpZSB0byB0aGUgdW5kZXJseWluZyBzdG9yYWdlLgorICoKKyAqIFdo
ZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZ
b3UgY2FuIHRoZW4gY2FsbAorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmlu
aXNoKCkgdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBTaW5jZTog
Mi4yMAorICovCit2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKFdlYktpdENv
b2tpZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raWUqIGNvb2tpZSwgR0NhbmNlbGxhYmxlKiBj
YW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRh
dGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFu
YWdlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29va2llKTsKKworICAgIEdSZWZQdHI8R1Rh
c2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2Fs
bGJhY2ssIHVzZXJEYXRhKSk7CisKKyAgICBhdXRvIHNlc3Npb25JRCA9IHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckdldERhdGFTdG9yZShtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikud2Vic2l0
ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpOworICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5k
YXRhTWFuYWdlcik7CisKKyAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0
aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCisgICAgLy8gb2YgdGhl
IHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nl
c3MgcG9vbC4KKyAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdl
clByb3h5PigpLT5zZXRDb29raWUoc2Vzc2lvbklELCBXZWJDb3JlOjpDb29raWUoY29va2llKSwg
W3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAg
ICAgIGlmIChlcnJvciAhPSBDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKSB7CisgICAgICAgICAg
ICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpbiBjYXNlcyB3aGVyZSB0aGUgd2ViIHByb2Nlc3Mg
aXMgbm90IGF2YWlsYWJsZSwKKyAgICAgICAgICAgIC8vIGNvbnNpZGVyIHRoZSBvcGVyYXRpb24g
ImNhbmNlbGxlZCIgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgY2xpZW50LgorICAgICAg
ICAgICAgZ190YXNrX3JldHVybl9uZXdfZXJyb3IodGFzay5nZXQoKSwgR19JT19FUlJPUiwgR19J
T19FUlJPUl9DQU5DRUxMRUQsIF8oIk9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkIikpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFu
KHRhc2suZ2V0KCksIFRSVUUpOworICAgIH0pOworfQorCisvKioKKyAqIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaDoKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0
Q29va2llTWFuYWdlcgorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJl
dHVybiBsb2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNo
IGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF9jb29raWVfbWFu
YWdlcl9hZGRfY29va2llKCkuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNvb2tpZSB3
YXMgYWRkZWQgb3IgJUZBTFNFIGluIGNhc2Ugb2YgZXJyb3IuCisgKgorICogU2luY2U6IDIuMjAK
KyAqLworZ2Jvb2xlYW4gd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWVfZmluaXNoKFdl
YktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01B
TkFHRVIobWFuYWdlciksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tf
aXNfdmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgRkFMU0UpOworCisgICAgcmV0dXJuIGdfdGFza19w
cm9wYWdhdGVfYm9vbGVhbihHX1RBU0socmVzdWx0KSwgZXJyb3IpOworfQorCisvKioKKyAqIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llczoKKyAqIEBjb29raWVfbWFuYWdlcjogYSAj
V2ViS2l0Q29va2llTWFuYWdlcgorICogQHVyaTogdGhlIFVSSSBhc3NvY2lhdGVkIHRvIHRoZSBj
b29raWVzIHRvIGJlIHJldHJpZXZlZAorICogQGNhbmNlbGxhYmxlOiAoYWxsb3ctbm9uZSk6IGEg
I0dDYW5jZWxsYWJsZSBvciAlTlVMTCB0byBpZ25vcmUKKyAqIEBjYWxsYmFjazogKHNjb3BlIGFz
eW5jKTogYSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMg
c2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHRoZSBkYXRhIHRvIHBhc3MgdG8g
Y2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3luY2hyb25vdXNseSBnZXQgYSBsaXN0IG9mICNT
b3VwQ29va2llIGZyb20gQGNvb2tpZV9tYW5hZ2VyIGFzc29jaWF0ZWQgd2l0aCBAdXJpLCB3aGlj
aAorICogbXVzdCBiZSBlaXRoZXIgYW4gSFRUUCBvciBhbiBIVFRQUyBVUkwuCisgKgorICogV2hl
biB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlv
dSBjYW4gdGhlbiBjYWxsCisgKiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmlu
aXNoKCkgdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBTaW5jZTog
Mi4yMAorICovCit2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRD
b29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhciogdXJpLCBHQ2FuY2VsbGFibGUqIGNh
bmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0
YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5h
Z2VyKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh1cmkpOworCisgICAgR1JlZlB0cjxHVGFzaz4g
dGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFj
aywgdXNlckRhdGEpKTsKKworICAgIGF1dG8gc2Vzc2lvbklEID0gd2Via2l0V2Vic2l0ZURhdGFN
YW5hZ2VyR2V0RGF0YVN0b3JlKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKS53ZWJzaXRlRGF0
YVN0b3JlKCkuc2Vzc2lvbklEKCk7CisgICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Vi
a2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFN
YW5hZ2VyKTsKKworICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBz
YW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKKyAgICAvLyBvZiB0aGUgcHJv
Y2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBw
b29sLgorICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPmdldENvb2tpZXMoc2Vzc2lvbklELCBXZWJDb3JlOjpVUkwoV2ViQ29yZTo6VVJMKCks
IFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3Ip
IHsKKyAgICAgICAgaWYgKGVycm9yICE9IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpIHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGluIGNhc2VzIHdoZXJlIHRoZSB3ZWIg
cHJvY2VzcyBpcyBub3QgYXZhaWxhYmxlLAorICAgICAgICAgICAgLy8gY29uc2lkZXIgdGhlIG9w
ZXJhdGlvbiAiY2FuY2VsbGVkIiBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBjbGllbnQu
CisgICAgICAgICAgICBnX3Rhc2tfcmV0dXJuX25ld19lcnJvcih0YXNrLmdldCgpLCBHX0lPX0VS
Uk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCwgXygiT3BlcmF0aW9uIHdhcyBjYW5jZWxsZWQiKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBHTGlzdCogY29va2ll
c0xpc3QgPSBudWxscHRyOworICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCisg
ICAgICAgICAgICBjb29raWVzTGlzdCA9IGdfbGlzdF9wcmVwZW5kKGNvb2tpZXNMaXN0LCBjb29r
aWUudG9Tb3VwQ29va2llKCkpOworCisgICAgICAgIGdfdGFza19yZXR1cm5fcG9pbnRlcih0YXNr
LmdldCgpLCBnX2xpc3RfcmV2ZXJzZShjb29raWVzTGlzdCksIFtdKGdwb2ludGVyIGRhdGEpIHsK
KyAgICAgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwoc3RhdGljX2Nhc3Q8R0xpc3QqPihkYXRhKSwg
cmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oc291cF9jb29raWVfZnJlZSkpOworICAg
ICAgICB9KTsKKyAgICB9KTsKK30KKworLyoqCisgKiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0
X2Nvb2tpZXNfZmluaXNoOgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29raWVNYW5h
Z2VyCisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0
aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNo
cm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9j
b29raWVzKCkuCisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBTb3VwQ29va2llKSAodHJh
bnNmZXIgZnVsbCk6IEEgI0dTTGlzdCBvZiAjU291cENvb2tpZSBpbnN0YW5jZXMuCisgKgorICog
U2luY2U6IDIuMjAKKyAqLworR0xpc3QqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
c19maW5pc2goV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3VsdCwgbWFuYWdlciksIG51bGxwdHIpOworCisgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpc3QqPihnX3Rhc2tfcHJvcGFnYXRlX3BvaW50ZXIo
R19UQVNLKHJlc3VsdCksIGVycm9yKSk7Cit9CisKKy8qKgorICogd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2RlbGV0ZV9jb29raWU6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktpdENvb2tpZU1h
bmFnZXIKKyAqIEBjb29raWU6IHRoZSAjU291cENvb2tpZSB0byBiZSBkZWxldGVkCisgKiBAY2Fu
Y2VsbGFibGU6IChhbGxvdy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9y
ZQorICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRv
IGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9z
dXJlKTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5j
aHJvbm91c2x5IGRlbGV0ZSBhICNTb3VwQ29va2llIGZyb20gdGhlIGN1cnJlbnQgc2Vzc2lvbi4K
KyAqCisgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJl
IGNhbGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisg
KgorICogU2luY2U6IDIuMjAKKyAqLwordm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRl
X2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBTb3VwQ29va2llKiBjb29raWUs
IEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ss
IGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NP
T0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CisK
KyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwg
Y2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworCisgICAgYXV0byBzZXNzaW9uSUQg
PSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUobWFuYWdlci0+cHJpdi0+ZGF0
YU1hbmFnZXIpLndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKTsKKyAgICBjb25zdCBhdXRv
JiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOworCisgICAgLy8gQ29va2llcyBhcmUgcmVhZC93
cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVz
cworICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNl
IHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCisgICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29va2llKHNlc3Npb25JRCwgV2ViQ29y
ZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oQ2FsbGJhY2tCYXNlOjpF
cnJvciBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IgIT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6
Tm9uZSkgeworICAgICAgICAgICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gaW4gY2FzZXMgd2hl
cmUgdGhlIHdlYiBwcm9jZXNzIGlzIG5vdCBhdmFpbGFibGUsCisgICAgICAgICAgICAvLyBjb25z
aWRlciB0aGUgb3BlcmF0aW9uICJjYW5jZWxsZWQiIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2Yg
dGhlIGNsaWVudC4KKyAgICAgICAgICAgIGdfdGFza19yZXR1cm5fbmV3X2Vycm9yKHRhc2suZ2V0
KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVELCBfKCJPcGVyYXRpb24gd2FzIGNh
bmNlbGxlZCIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdf
dGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKKyAgICB9KTsKK30KKworLyoq
CisgKiB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2g6CisgKiBAY29v
a2llX21hbmFnZXI6IGEgI1dlYktpdENvb2tpZU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3lu
Y1Jlc3VsdAorICogQGVycm9yOiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRv
IGlnbm9yZQorICoKKyAqIEZpbmlzaCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQg
d2l0aCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZSgpLgorICoKKyAqIFJldHVy
bnM6ICVUUlVFIGlmIHRoZSBjb29raWUgd2FzIGRlbGV0ZWQgb3IgJUZBTFNFIGluIGNhc2Ugb2Yg
ZXJyb3IuCisgKgorICogU2luY2U6IDIuMjAKKyAqLworZ2Jvb2xlYW4gd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2RlbGV0ZV9jb29raWVfZmluaXNoKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIs
IEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlciksIEZBTFNFKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwg
RkFMU0UpOworCisgICAgcmV0dXJuIGdfdGFza19wcm9wYWdhdGVfYm9vbGVhbihHX1RBU0socmVz
dWx0KSwgZXJyb3IpOworfQorCiAvKioKICAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9t
YWluc193aXRoX2Nvb2tpZXM6CiAgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktpdENvb2tpZU1h
bmFnZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Q29va2llTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRD
b29raWVNYW5hZ2VyLmgKaW5kZXggZWUxN2QyMjA0NDkuLjFiOGQxNjc2OTZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIu
aApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNyBFbmRsZXNzIE1vYmlsZSwgSW5jLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI2LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGdpby9naW8uaD4KICNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RGVmaW5lcy5oPgogCiBHX0JFR0lOX0RFQ0xTCkBAIC0xMDcsNiArMTA5LDQy
IEBAIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeV9maW5pc2ggICAgICAg
IChXZWJLaXRDb29raWVNYW5hZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKIAorV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZSAgICAgICAgICAgICAgICAgICAgICAo
V2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cENvb2tpZSAg
ICAgICAgICAgICAgICAgICAqY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNh
bmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVy
ICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llX2ZpbmlzaCAgICAgICAgICAgICAgIChX
ZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQg
ICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJy
b3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2ll
cyAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29r
aWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICp1cmksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxl
ICAgICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICAg
ICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKKwor
V0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXNfZmlu
aXNoICAgICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21h
bmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAg
ICAgICAgICAgICAgICAqKmVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29va2ll
X21hbmFnZXJfZGVsZXRlX2Nvb2tpZSAgICAgICAgICAgICAgICAgICAoV2ViS2l0Q29va2llTWFu
YWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cENvb2tpZSAgICAgICAgICAgICAgICAg
ICAqY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3lu
Y1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAg
ICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9jb29raWVf
bWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaCAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5h
Z2VyICAgICAgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgICAg
ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCiBXRUJLSVRf
REVQUkVDQVRFRF9GT1Iod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoKSB2b2lkCiB3
ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzICAgICAgICAoV2Vi
S2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAg
ICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0IGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4
dAppbmRleCAxMWJkZTM3N2E0MC4uYzQ4OGQyZTU3MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNl
Y3Rpb25zLnR4dApAQCAtMTAwNiw2ICsxMDA2LDEyIEBAIHdlYmtpdF9jb29raWVfbWFuYWdlcl9n
ZXRfYWNjZXB0X3BvbGljeQogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5
X2ZpbmlzaAogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llcwog
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llc19maW5pc2gKK3dl
YmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llCit3ZWJraXRfY29va2llX21hbmFnZXJfYWRk
X2Nvb2tpZV9maW5pc2gKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcword2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzX2ZpbmlzaAord2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2RlbGV0ZV9jb29raWUKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2Zpbmlz
aAogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVzX2Zvcl9kb21haW4KIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nvb2tpZXMKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb29raWVNYW5hZ2VyLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvb2tpZU1hbmFnZXIuaAppbmRleCA1OTU2
M2FkZDg4OC4uNTQzMGYxN2ZmMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0Q29va2llTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvV2ViS2l0Q29va2llTWFuYWdlci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEVu
ZGxlc3MgTW9iaWxlLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSA8Z2lvL2dpby5oPgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVk
ZSA8bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8d3BlL1dlYktpdERlZmluZXMuaD4KIAogR19C
RUdJTl9ERUNMUwpAQCAtMTA3LDYgKzEwOSw0MiBAQCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0
X2FjY2VwdF9wb2xpY3lfZmluaXNoICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlcgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jl
c3VsdCAgICAgICAgICAgICAgICAgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICAg
KiplcnJvcik7CiAKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9j
b29raWUgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAg
KmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNvdXBDb29raWUgICAgICAgICAgICAgICAgICAgKmNvb2tpZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2Fu
Y2VsbGFibGUgICAgICAgICAgICAgICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNr
ICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICB1c2VyX2Rh
dGEpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nv
b2tpZV9maW5pc2ggICAgICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAq
Y29va2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJv
ciAgICAgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAg
ICAgICAgICAgICAqdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAg
ICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgR0xpc3QgKgord2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2dldF9jb29raWVzX2ZpbmlzaCAgICAgICAgICAgICAgKFdlYktpdENvb2tp
ZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAg
ICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CisKK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUgICAgICAg
ICAgICAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2Vy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNvdXBDb29raWUgICAgICAgICAgICAgICAgICAgKmNvb2tpZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAg
ICAgICAgICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAgICAgICBjYWxs
YmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZV9maW5pc2gg
ICAgICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAg
ICAgICAgICAqKmVycm9yKTsKKwogV0VCS0lUX0RFUFJFQ0FURURfRk9SKHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9mZXRjaCkgdm9pZAogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21h
aW5zX3dpdGhfY29va2llcyAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNv
b2tpZV9tYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLApk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQxZWNi
OTMwYjE4Li5jMjQ1MzliOGZhMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTExLTE4ICBNYXJpbyBTYW5jaGV6
IFByYWRhICA8bWFyaW9AZW5kbGVzc20uY29tPgorCisgICAgICAgIFtHVEtdIE5ldyBBUEkgdG8g
YWRkLCByZXRyaWV2ZSBhbmQgZGVsZXRlIGNvb2tpZXMgdmlhIFdlYktpdENvb2tpZU1hbmFnZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzkzMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5l
dyB0ZXN0IGNhc2VzIHRvIGNvdmVyIHRoZSBuZXdseSBhZGRlZCBBUEkgZm9yIFdlYktpdENvb2tp
ZU1hbmFnZXI6CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llLCB3ZWJr
aXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMgYW5kCisgICAgICAgIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9kZWxldGVfY29va2llLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHTGliL1Rlc3RDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKHRlc3RDb29raWVNYW5h
Z2VyQWRkQ29va2llKTogQWRkZWQuCisgICAgICAgICh0ZXN0Q29va2llTWFuYWdlckdldENvb2tp
ZXMpOiBBZGRlZC4KKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llKTogQWRk
ZWQuCisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6IFNtYWxsIHVwZGF0ZSB0byBhdm9pZCBoYXJk
Y29kaW5nIHN0cmluZ3Mgd2UgcmV1c2UuCisgICAgICAgIChiZWZvcmVBbGwpOiBBZGRlZCB0aGUg
bmV3IHRlc3QgY2FzZXMgdG8gdGhlIHRlc3Qgc3VpdGUuCisKIDIwMTctMTEtMjAgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
IEZpeCBXUEUgYnVpbGQgYWZ0ZXIgcjIyNTA0Ny4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0Q29va2llTWFuYWdlci5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFk
N2ZhNzM1NzE1Li5iMDUxNDUyNGY3MiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEVuZGxlc3MgTW9iaWxlLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIx
LDEyICsyMiwyMSBAQAogCiAjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgogI2luY2x1ZGUg
IldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HVW5pcXVlUHRyU291cC5oPgogI2lu
Y2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CiAKIHN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVy
OwogCiBzdGF0aWMgY29uc3QgY2hhcioga0ZpcnN0UGFydHlEb21haW4gPSAiMTI3LjAuMC4xIjsK
IHN0YXRpYyBjb25zdCBjaGFyKiBrVGhpcmRQYXJ0eURvbWFpbiA9ICJsb2NhbGhvc3QiOworCitz
dGF0aWMgY29uc3QgY2hhcioga0Nvb2tpZU5hbWUgPSAiZm9vIjsKK3N0YXRpYyBjb25zdCBjaGFy
KiBrQ29va2llVmFsdWUgPSAiYmFyIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrQ29va2llUGF0aCA9
ICIvIjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtDb29raWVQYXRoTmV3ID0gIi9uZXciOworc3Rh
dGljIGNvbnN0IGNoYXIqIGtDb29raWVWYWx1ZU5ldyA9ICJuZXctdmFsdWUiOworCiBzdGF0aWMg
Y29uc3QgY2hhcioga0luZGV4SHRtbEZvcm1hdCA9CiAgICAgIjxodG1sPjxib2R5PiIKICAgICAi
IDxwPldlYktpdEdUSysgQ29va2llIE1hbmFnZXIgdGVzdDwvcD4iCkBAIC01NSw2ICs2NSw4IEBA
IHB1YmxpYzoKICAgICB+Q29va2llTWFuYWdlclRlc3QoKQogICAgIHsKICAgICAgICAgZ19zdHJm
cmVldihtX2RvbWFpbnMpOworICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fY29va2llcywgcmVp
bnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oc291cF9jb29raWVfZnJlZSkpOworCiAgICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Nvb2tpZU1hbmFnZXIs
IEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwogICAgICAgICBpZiAobV9j
b29raWVzVGV4dEZpbGUpCiAgICAgICAgICAgICBnX3VubGluayhtX2Nvb2tpZXNUZXh0RmlsZS5n
ZXQoKSk7CkBAIC0xMDIsNiArMTE0LDYxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYWNj
ZXB0UG9saWN5OwogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGFkZENvb2tpZVJlYWR5Q2FsbGJh
Y2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRh
dGEpCisgICAgeworICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAg
IGJvb2wgYWRkZWQgPSB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZV9maW5pc2goV0VC
S0lUX0NPT0tJRV9NQU5BR0VSKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKKyAg
ICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoYWRkZWQpOwor
CisgICAgICAgIENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2llTWFu
YWdlclRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9t
YWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBhZGRDb29raWUoU291cENvb2tpZSogY29va2ll
KQorICAgIHsKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUobV9jb29r
aWVNYW5hZ2VyLCBjb29raWUsIDAsIGFkZENvb2tpZVJlYWR5Q2FsbGJhY2ssIHRoaXMpOworICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgZ2V0Q29va2llc1JlYWR5Q2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQq
IHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBHVW5pcXVlT3V0UHRy
PEdFcnJvcj4gZXJyb3I7CisgICAgICAgIEdMaXN0KiBjb29raWVzID0gd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9jb29raWVzX2ZpbmlzaChXRUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KSwg
cmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkp
OworCisgICAgICAgIENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2ll
TWFuYWdlclRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgIHRlc3QtPm1fY29va2llcyA9IGNvb2tp
ZXM7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQor
CisgICAgR0xpc3QqIGdldENvb2tpZXMoY29uc3QgY2hhciogdXJpKQorICAgIHsKKyAgICAgICAg
Z19saXN0X2ZyZWVfZnVsbChtX2Nvb2tpZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3Rp
Znk+KHNvdXBfY29va2llX2ZyZWUpKTsKKyAgICAgICAgbV9jb29raWVzID0gbnVsbHB0cjsKKyAg
ICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKG1fY29va2llTWFuYWdlciwg
dXJpLCAwLCBnZXRDb29raWVzUmVhZHlDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9s
b29wX3J1bihtX21haW5Mb29wKTsKKworICAgICAgICByZXR1cm4gbV9jb29raWVzOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUNvb2tpZVJlYWR5Q2FsbGJhY2soR09iamVjdCogb2Jq
ZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAg
ICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGJvb2wgZGVsZXRlZCA9
IHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llX2ZpbmlzaChXRUJLSVRfQ09PS0lF
X01BTkFHRVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBnX2Fz
c2VydCghZXJyb3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChkZWxldGVkKTsKKworICAgICAg
ICBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvb2tpZU1hbmFnZXJUZXN0
Kj4odXNlckRhdGEpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3Ap
OworICAgIH0KKworICAgIHZvaWQgZGVsZXRlQ29va2llKFNvdXBDb29raWUqIGNvb2tpZSkKKyAg
ICB7CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKG1fY29va2ll
TWFuYWdlciwgY29va2llLCAwLCBkZWxldGVDb29raWVSZWFkeUNhbGxiYWNrLCB0aGlzKTsKKyAg
ICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKwogICAgIHZvaWQgc2V0
QWNjZXB0UG9saWN5KFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCiAgICAgewogICAg
ICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kobV9jb29raWVNYW5h
Z2VyLCBwb2xpY3kpOwpAQCAtMTcwLDYgKzIzNyw3IEBAIHB1YmxpYzoKICAgICBXZWJLaXRDb29r
aWVNYW5hZ2VyKiBtX2Nvb2tpZU1hbmFnZXIgeyBudWxscHRyIH07CiAgICAgV2ViS2l0Q29va2ll
QWNjZXB0UG9saWN5IG1fYWNjZXB0UG9saWN5IHsgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBU
X05PX1RISVJEX1BBUlRZIH07CiAgICAgY2hhcioqIG1fZG9tYWlucyB7IG51bGxwdHIgfTsKKyAg
ICBHTGlzdCogbV9jb29raWVzIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9jb29raWVzQ2hhbmdl
ZCB7IGZhbHNlIH07CiAgICAgaW50IG1fY29va2llc0V4cGVjdGVkVG9DaGFuZ2VDb3VudCB7IDAg
fTsKICAgICBib29sIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlIHsgZmFsc2UgfTsKQEAg
LTIwOSw2ICsyNzcsMjIzIEBAIHN0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyQWNjZXB0UG9s
aWN5KENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyCiAgICAgZ19hc3NlcnRf
Y21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAwKTsKIH0KIAorc3RhdGljIHZvaWQg
dGVzdENvb2tpZU1hbmFnZXJBZGRDb29raWUoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgLy8gTG9hZCB0aGUgaHRtbCBjb250ZW50LCB3aXRoIHRoZSBkZWZh
dWx0IE5PX1RISVJEX1BBUlRZIGFjY2VwdCBwb2xpY3ksCisgICAgLy8gd2hpY2ggd2lsbCBhdXRv
bWF0aWNhbGx5IGFkZCBvbmUgY29va2llLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdl
dERvbWFpbnMoKSksID09LCAxKTsKKworICAgIC8vIENoZWNrIHRoZSBjb29raWVzIHRoYXQgaGF2
ZSBiZWVuIGFkZGVkIGZvciB0aGUgZG9tYWluLgorICAgIEdVbmlxdWVQdHI8Y2hhcj4gdXJpKGdf
c3RyZHVwX3ByaW50ZigiJXM6Ly8lcyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQLCBrRmlyc3RQYXJ0
eURvbWFpbikpOworICAgIEdMaXN0KiBmb3VuZENvb2tpZXMgPSB0ZXN0LT5nZXRDb29raWVzKHVy
aS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVz
KSwgPT0sIDEpOworCisgICAgU291cENvb2tpZSogZm91bmRDb29raWUgPSBzdGF0aWNfY2FzdDxT
b3VwQ29va2llKj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291
cF9jb29raWVfZ2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOworICAgIGdf
YXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2llKSwgPT0sIGtG
aXJzdFBhcnR5RG9tYWluKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3Bh
dGgoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0X2NtcHN0cihz
b3VwX2Nvb2tpZV9nZXRfdmFsdWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVlKTsKKwor
ICAgIC8vIFRyeSB0byBhZGQgbm93IGEgY29va2llIHdpdGggc2FtZSAobmFtZSwgZG9tYWluLCBw
YXRoKSB0aGFuIHRoZSBvbmVzIGFscmVhZHkgYWRkZWQuCisgICAgR1VuaXF1ZVB0cjxTb3VwQ29v
a2llPiBmaXJzdENvb2tpZShzb3VwX2Nvb2tpZV9uZXcoa0Nvb2tpZU5hbWUsIGtDb29raWVWYWx1
ZU5ldywga0ZpcnN0UGFydHlEb21haW4sIGtDb29raWVQYXRoLCBTT1VQX0NPT0tJRV9NQVhfQUdF
X09ORV9IT1VSKSk7CisgICAgdGVzdC0+YWRkQ29va2llKGZpcnN0Q29va2llLmdldCgpKTsKKwor
ICAgIC8vIFN0aWxsIG9uZSBjb29raWUsIHNpbmNlIChuYW1lLCBkb21haW4sIHBhdGgpIGFyZSB0
aGUgc2FtZSB0aGFuIHRoZSBhbHJlYWR5IGV4aXN0aW5nCisgICAgLy8gb25lLCBidXQgdGhlIG5l
dyB2YWx1ZSBpcyBub3cgc3RvcmVkIGFzIHJlcGxhY2VkIGJ5IHRoZSByZWNlbnRseSBhZGRlZCBj
b29raWUuCisgICAgZm91bmRDb29raWVzID0gdGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAxKTsK
KworICAgIGZvdW5kQ29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGZvdW5kQ29va2ll
cy0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9uYW1lKGZvdW5k
Q29va2llKSwgPT0sIGtDb29raWVOYW1lKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29r
aWVfZ2V0X2RvbWFpbihmb3VuZENvb2tpZSksID09LCBrRmlyc3RQYXJ0eURvbWFpbik7CisgICAg
Z19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9wYXRoKGZvdW5kQ29va2llKSwgPT0sIGtD
b29raWVQYXRoKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3ZhbHVlKGZv
dW5kQ29va2llKSwgPT0sIGtDb29raWVWYWx1ZU5ldyk7CisKKyAgICAvLyBOb3cgY3JlYXRlIGFu
b3RoZXIgY29va2llIHdpdGggYSBkaWZmZXJlbnQgcGF0aCBhbmQgYWRkIGl0LgorICAgIEdVbmlx
dWVQdHI8U291cENvb2tpZT4gc2Vjb25kQ29va2llKHNvdXBfY29va2llX25ldyhrQ29va2llTmFt
ZSwga0Nvb2tpZVZhbHVlTmV3LCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcsIFNP
VVBfQ09PS0lFX01BWF9BR0VfT05FX0hPVVIpKTsKKyAgICB0ZXN0LT5hZGRDb29raWUoc2Vjb25k
Q29va2llLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5n
ZXREb21haW5zKCkpLCA9PSwgMSk7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBjb29r
aWVzIGZvciB0aGUgc2FtZSBkb21haW4gYW5kIHBhdGggYWdhaW4gbm93IGFuZCBjaGVjay4KKyAg
ICB1cmkucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlczovLyVzJXMiLCBTT1VQX1VSSV9TQ0hFTUVf
SFRUUCwga0ZpcnN0UGFydHlEb21haW4sIGtDb29raWVQYXRoTmV3KSk7CisgICAgZm91bmRDb29r
aWVzID0gdGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworCisgICAgLy8gV2UgaGF2ZSBub3cg
dHdvIGNvb2tpZXMgdGhhdCB3b3VsZCBhcHBseSB0byB0aGUgcGFzc2VkIFVSTCwgb25lIGlzIHRo
ZSBjb29raWUgaW5pdGlhbGx5CisgICAgLy8gbG9hZGVkIHdpdGggdGhlIHdlYiBjb250ZW50IGFu
ZCB0aGUgb3RoZXIgY29va2llIHRoZSBvbmUgd2UgbWFudWFsbHkgYWRkZWQuCisgICAgZ19hc3Nl
cnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDIpOworCisgICAgLy8g
QWRkIGEgdGhpcmQgbmV3IGNvb2tpZSBmb3IgYSBkaWZmZXJlbnQgZG9tYWluIHRoYW4gdGhlIHBy
ZXZpb3VzIG9uZXMuCisgICAgR1VuaXF1ZVB0cjxTb3VwQ29va2llPiB0aGlyZENvb2tpZShzb3Vw
X2Nvb2tpZV9uZXcoa0Nvb2tpZU5hbWUsIGtDb29raWVWYWx1ZU5ldywga1RoaXJkUGFydHlEb21h
aW4sIGtDb29raWVQYXRoTmV3LCBTT1VQX0NPT0tJRV9NQVhfQUdFX09ORV9IT1VSKSk7CisgICAg
dGVzdC0+YWRkQ29va2llKHRoaXJkQ29va2llLmdldCgpKTsKKworICAgIC8vIE9ubHkgb25lIGNv
b2tpZSBub3csIHNpbmNlIHRoZSBkb21haW4gaXMgZGlmZmVyZW50LgorICAgIHVyaS5yZXNldChn
X3N0cmR1cF9wcmludGYoIiVzOi8vJXMlcyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQLCBrVGhpcmRQ
YXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcpKTsKKyAgICBmb3VuZENvb2tpZXMgPSB0ZXN0LT5n
ZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgo
Zm91bmRDb29raWVzKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3Ro
KHRlc3QtPmdldERvbWFpbnMoKSksID09LCAyKTsKKworICAgIGZvdW5kQ29va2llID0gc3RhdGlj
X2Nhc3Q8U291cENvb2tpZSo+KGZvdW5kQ29va2llcy0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHNvdXBfY29va2llX2dldF9uYW1lKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVOYW1lKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X2RvbWFpbihmb3VuZENvb2tpZSks
ID09LCBrVGhpcmRQYXJ0eURvbWFpbik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2ll
X2dldF9wYXRoKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVQYXRoTmV3KTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3ZhbHVlKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVW
YWx1ZU5ldyk7CisKKyAgICAvLyBGaW5hbGx5LCBkZWxldGUgYWxsIGNvb2tpZXMgYW5kIGNoZWNr
IHRoZXkgYXJlIGFsbCBnb25lLgorICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyR2V0Q29va2llcyhDb29raWVNYW5h
Z2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBMb2FkIHRoZSBodG1sIGNv
bnRlbnQgYW5kIHJldHJpZXZlIHRoZSB0d28gY29va2llcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHdp
dGggQUxXQVlTIHBvbGljeS4KKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJ
RV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0
RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgLy8gUmV0cmlldmUgdGhlIGZpcnN0IGNvb2tpZSB1
c2luZyBhIEhUVFAgc2NoZW1lLgorICAgIEdVbmlxdWVQdHI8Y2hhcj4gdXJpKGdfc3RyZHVwX3By
aW50ZigiJXM6Ly8lcyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQLCBrRmlyc3RQYXJ0eURvbWFpbikp
OworICAgIEdMaXN0KiBmb3VuZENvb2tpZXMgPSB0ZXN0LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7
CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDEp
OworCisgICAgU291cENvb2tpZSogZm91bmRDb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2ll
Kj4oZm91bmRDb29raWVzLT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVf
Z2V0X25hbWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZU5hbWUpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzb3VwX2Nvb2tpZV9nZXRfZG9tYWluKGZvdW5kQ29va2llKSwgPT0sIGtGaXJzdFBhcnR5
RG9tYWluKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVfZ2V0X3BhdGgoZm91bmRD
b29raWUpLCA9PSwga0Nvb2tpZVBhdGgpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tp
ZV9nZXRfdmFsdWUoZm91bmRDb29raWUpLCA9PSwga0Nvb2tpZVZhbHVlKTsKKworICAgIC8vIFJl
dHJpZXZlIHRoZSBzZWNvbmQgY29va2llIHVzaW5nIGEgSFRUUFMgc2NoZW1lLgorICAgIHVyaS5y
ZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUFMsIGtU
aGlyZFBhcnR5RG9tYWluKSk7CisgICAgZm91bmRDb29raWVzID0gdGVzdC0+Z2V0Q29va2llcyh1
cmkuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2ll
cyksID09LCAxKTsKKworICAgIGZvdW5kQ29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+
KGZvdW5kQ29va2llcy0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dl
dF9uYW1lKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVOYW1lKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoc291cF9jb29raWVfZ2V0X2RvbWFpbihmb3VuZENvb2tpZSksID09LCBrVGhpcmRQYXJ0eURv
bWFpbik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9wYXRoKGZvdW5kQ29v
a2llKSwgPT0sIGtDb29raWVQYXRoKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cF9jb29raWVf
Z2V0X3ZhbHVlKGZvdW5kQ29va2llKSwgPT0sIGtDb29raWVWYWx1ZSk7CisKKyAgICAvLyBDcmVh
dGUgYSBuZXcgY29va2llIGFuZCBhZGQgaXQgdG8gdGhlIGZpcnN0IGRvbWFpbi4KKyAgICBHVW5p
cXVlUHRyPFNvdXBDb29raWU+IG5ld0Nvb2tpZShzb3VwX2Nvb2tpZV9uZXcoa0Nvb2tpZU5hbWUs
IGtDb29raWVWYWx1ZU5ldywga0ZpcnN0UGFydHlEb21haW4sIGtDb29raWVQYXRoTmV3LCBTT1VQ
X0NPT0tJRV9NQVhfQUdFX09ORV9IT1VSKSk7CisgICAgdGVzdC0+YWRkQ29va2llKG5ld0Nvb2tp
ZS5nZXQoKSk7CisKKyAgICAvLyBXZSBzaG91bGQgZ2V0IHR3byBjb29raWVzIHRoYXQgd291bGQg
YXBwbHkgdG8gdGhlIHNhbWUgVVJMIHBhc3NlZCwgc2luY2UKKyAgICAvLyBodHRwOi8vMTI3LjAu
MC4xL25ldyBpcyBhIHN1YnNldCBvZiB0aGUgaHR0cDovLzEyNy4wLjAuMS8gVVJMLgorICAgIHVy
aS5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8vJXMlcyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQ
LCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGhOZXcpKTsKKyAgICBmb3VuZENvb2tpZXMg
PSB0ZXN0LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlz
dF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDIpOworCisgICAgLy8gV2UgaGF2ZSBub3cgdHdv
IGNvb2tpZXMgdGhhdCB3b3VsZCBhcHBseSB0byB0aGUgcGFzc2VkIFVSTCwgb25lIGlzIHRoZSBj
b29raWUgaW5pdGlhbGx5CisgICAgLy8gbG9hZGVkIHdpdGggdGhlIHdlYiBjb250ZW50IGFuZCB0
aGUgb3RoZXIgY29va2llIHRoZSBvbmUgd2UgbWFudWFsbHkgYWRkZWQuCisgICAgZ19hc3NlcnRf
Y21waW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDIpOworCisgICAgYm9vbCBu
ZXdQYXRoQ2hlY2tlZCA9IGZhbHNlOworICAgIGNvbnN0IGNoYXIqIHBhdGhGb3VuZCA9IG51bGxw
dHI7CisgICAgY29uc3QgY2hhciogdmFsdWVGb3VuZCA9IG51bGxwdHI7CisgICAgZm9yICh1aW50
IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIGZvdW5kQ29va2llID0gc3RhdGljX2Nhc3Q8
U291cENvb2tpZSo+KGdfbGlzdF9udGhfZGF0YShmb3VuZENvb2tpZXMsIGkpKTsKKyAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9uYW1lKGZvdW5kQ29va2llKSwgPT0sIGtD
b29raWVOYW1lKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9kb21h
aW4oZm91bmRDb29raWUpLCA9PSwga0ZpcnN0UGFydHlEb21haW4pOworCisgICAgICAgIC8vIENv
b2tpZXMgd2lsbCBoYXZlIGRpZmZlcmVudCB2YWx1ZXMgZm9yICd2YWx1ZScgYW5kICdwYXRoJywg
c28gbWFrZSBzdXJlIHRoYXQKKyAgICAgICAgLy8gd2UgY2hlY2sgZm9yIGJvdGggcG9zc2liaWxp
dGllcywgYnV0IGRpZmZlcmVudCBvbmVzIGZvciBlYWNoIGNvb2tpZSBmb3VuZC4KKyAgICAgICAg
cGF0aEZvdW5kID0gc291cF9jb29raWVfZ2V0X3BhdGgoZm91bmRDb29raWUpOworICAgICAgICB2
YWx1ZUZvdW5kID0gc291cF9jb29raWVfZ2V0X3ZhbHVlKGZvdW5kQ29va2llKTsKKyAgICAgICAg
aWYgKGkgPiAwKSB7CisgICAgICAgICAgICBpZiAobmV3UGF0aENoZWNrZWQpIHsKKyAgICAgICAg
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIocGF0aEZvdW5kLCA9PSwga0Nvb2tpZVBhdGgpOworICAg
ICAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZUZvdW5kLCA9PSwga0Nvb2tpZVZhbHVl
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHBhdGhGb3VuZCwgPT0sIGtDb29raWVQYXRoTmV3KTsKKyAgICAgICAgICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIodmFsdWVGb3VuZCwgPT0sIGtDb29raWVWYWx1ZU5ldyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoZ19zdHJjbXAwKHBhdGhGb3VuZCwg
a0Nvb2tpZVBhdGgpKSB7CisgICAgICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHBhdGhGb3Vu
ZCwgPT0sIGtDb29raWVQYXRoTmV3KTsKKyAgICAgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
dmFsdWVGb3VuZCwgPT0sIGtDb29raWVWYWx1ZU5ldyk7CisgICAgICAgICAgICAgICAgbmV3UGF0
aENoZWNrZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZ19zdHJj
bXAwKHBhdGhGb3VuZCwga0Nvb2tpZVBhdGhOZXcpKSB7CisgICAgICAgICAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHBhdGhGb3VuZCwgPT0sIGtDb29raWVQYXRoKTsKKyAgICAgICAgICAgICAgICBn
X2Fzc2VydF9jbXBzdHIodmFsdWVGb3VuZCwgPT0sIGtDb29raWVWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgbmV3UGF0aENoZWNrZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFdlIHNob3VsZCBnZXQgMSBjb29raWUgb25seSBpZiB3ZSBzcGVjaWZ5
IGh0dHA6Ly8xMjcuMC4wLjEvLCB0aG91Z2guCisgICAgdXJpLnJlc2V0KGdfc3RyZHVwX3ByaW50
ZigiJXM6Ly8lcyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQLCBrRmlyc3RQYXJ0eURvbWFpbikpOwor
ICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChmb3VuZENvb2tpZXMpLCA9PSwgMSk7CisKKyAgICBm
b3VuZENvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihmb3VuZENvb2tpZXMtPmRhdGEp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfbmFtZShmb3VuZENvb2tpZSks
ID09LCBrQ29va2llTmFtZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF9k
b21haW4oZm91bmRDb29raWUpLCA9PSwga0ZpcnN0UGFydHlEb21haW4pOworICAgIGdfYXNzZXJ0
X2NtcHN0cihzb3VwX2Nvb2tpZV9nZXRfcGF0aChmb3VuZENvb2tpZSksID09LCBrQ29va2llUGF0
aCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNvdXBfY29va2llX2dldF92YWx1ZShmb3VuZENvb2tp
ZSksID09LCBrQ29va2llVmFsdWUpOworCisgICAgLy8gRmluYWxseSwgZGVsZXRlIGFsbCBjb29r
aWVzIGFuZCB0cnkgdG8gcmV0cmlldmUgdGhlbSBhZ2Fpbiwgb25lIGJ5IG9uZS4KKyAgICB0ZXN0
LT5kZWxldGVBbGxDb29raWVzKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgo
dGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworCisgICAgdXJpLnJlc2V0KGdfc3RyZHVwX3By
aW50ZigiJXM6Ly8lcyIsIFNPVVBfVVJJX1NDSEVNRV9IVFRQLCBrRmlyc3RQYXJ0eURvbWFpbikp
OworICAgIGZvdW5kQ29va2llcyA9IHRlc3QtPmdldENvb2tpZXModXJpLmdldCgpKTsKKyAgICBn
X2Fzc2VydF9udWxsKGZvdW5kQ29va2llcyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVN
YW5hZ2VyRGVsZXRlQ29va2llKENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NF
UFRfQUxXQVlTKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9p
bmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KworICAgIC8vIEluaXRpYWxseSwgdGhlcmUgc2hvdWxkIGJlIHR3byBjb29raWVzIGF2YWlsYWJs
ZS4KKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkp
LCA9PSwgMik7CisKKyAgICAvLyBEZWxldGUgdGhlIGNvb2tpZSBmb3IgdGhlIGZpcnN0IHBhcnR5
IGRvbWFpbi4KKyAgICBHVW5pcXVlUHRyPGNoYXI+IHVyaShnX3N0cmR1cF9wcmludGYoIiVzOi8v
JXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwga0ZpcnN0UGFydHlEb21haW4pKTsKKyAgICBHTGlz
dCogZm91bmRDb29raWVzID0gdGVzdC0+Z2V0Q29va2llcyh1cmkuZ2V0KCkpOworICAgIGdfYXNz
ZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGZvdW5kQ29va2llcyksID09LCAxKTsKKworICAgIEdV
bmlxdWVQdHI8U291cENvb2tpZT4gZmlyc3RQYXJ0eUNvb2tpZShzb3VwX2Nvb2tpZV9jb3B5KHN0
YXRpY19jYXN0PFNvdXBDb29raWUqPihmb3VuZENvb2tpZXMtPmRhdGEpKSk7CisgICAgdGVzdC0+
ZGVsZXRlQ29va2llKGZpcnN0UGFydHlDb29raWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAxKTsKKworICAgIC8vIFRy
eSBkZWxldGluZyBhIG5vbi1leGlzdGVudCBjb29raWUgKHdyb25nIG5hbWUpLgorICAgIEdVbmlx
dWVQdHI8U291cENvb2tpZT4gd3JvbmdDb29raWUoc291cF9jb29raWVfbmV3KCJ3cm9uZy1uYW1l
Iiwga0Nvb2tpZVZhbHVlLCBrVGhpcmRQYXJ0eURvbWFpbiwga0Nvb2tpZVBhdGgsIC0xKSk7Cisg
ICAgdGVzdC0+ZGVsZXRlQ29va2llKHdyb25nQ29va2llLmdldCgpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisKKyAgICAv
LyBUcnkgZGVsZXRpbmcgYSBub24tZXhpc3RlbnQgY29va2llICh3cm9uZyBkb21haW4pLgorICAg
IHdyb25nQ29va2llLnJlc2V0KHNvdXBfY29va2llX25ldyhrQ29va2llTmFtZSwga0Nvb2tpZVZh
bHVlLCAid3JvbmctZG9tYWluIiwga0Nvb2tpZVBhdGgsIC0xKSk7CisgICAgdGVzdC0+ZGVsZXRl
Q29va2llKHdyb25nQ29va2llLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xl
bmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisKKyAgICAvLyBUcnkgZGVsZXRpbmcg
YSBub24tZXhpc3RlbnQgY29va2llICh3cm9uZyBwYXRoKS4KKyAgICB3cm9uZ0Nvb2tpZS5yZXNl
dChzb3VwX2Nvb2tpZV9uZXcoa0Nvb2tpZU5hbWUsIGtDb29raWVWYWx1ZSwga1RoaXJkUGFydHlE
b21haW4sICJ3cm9uZy1wYXRoIiwgLTEpKTsKKyAgICB0ZXN0LT5kZWxldGVDb29raWUod3JvbmdD
b29raWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdl
dERvbWFpbnMoKSksID09LCAxKTsKKworICAgIC8vIERlbGV0ZSB0aGUgY29va2llIGZvciB0aGUg
dGhpcmQgcGFydHkgZG9tYWluLgorICAgIHVyaS5yZXNldChnX3N0cmR1cF9wcmludGYoIiVzOi8v
JXMiLCBTT1VQX1VSSV9TQ0hFTUVfSFRUUCwga1RoaXJkUGFydHlEb21haW4pKTsKKyAgICBmb3Vu
ZENvb2tpZXMgPSB0ZXN0LT5nZXRDb29raWVzKHVyaS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGdfbGlzdF9sZW5ndGgoZm91bmRDb29raWVzKSwgPT0sIDEpOworCisgICAgR1VuaXF1ZVB0
cjxTb3VwQ29va2llPiB0aGlyZFBhcnR5Q29va2llKHNvdXBfY29va2llX2NvcHkoc3RhdGljX2Nh
c3Q8U291cENvb2tpZSo+KGZvdW5kQ29va2llcy0+ZGF0YSkpKTsKKyAgICB0ZXN0LT5kZWxldGVD
b29raWUodGhpcmRQYXJ0eUNvb2tpZS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Ry
dl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworCisgICAgLy8gRmluYWxseSwg
YWRkIGEgbmV3IGNvb2tpZSBub3cgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5kIGRlbGV0ZSBpdCBhZnRl
cndhcmRzLgorICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4gbmV3Q29va2llKHNvdXBfY29va2ll
X25ldyhrQ29va2llTmFtZSwga0Nvb2tpZVZhbHVlTmV3LCBrRmlyc3RQYXJ0eURvbWFpbiwga0Nv
b2tpZVBhdGhOZXcsIFNPVVBfQ09PS0lFX01BWF9BR0VfT05FX0hPVVIpKTsKKyAgICB0ZXN0LT5h
ZGRDb29raWUobmV3Q29va2llLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xl
bmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7CisgICAgdGVzdC0+ZGVsZXRlQ29va2ll
KG5ld0Nvb2tpZS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVz
dC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFu
YWdlckRlbGV0ZUNvb2tpZXMoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
CiB7CiAgICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQ
VF9BTFdBWVMpOwpAQCAtMzg2LDEyICs2NzEsMTQgQEAgc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJh
Y2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhcioK
ICAgICB9CiAKICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19PSyk7CisgICAgZ2NoYXIqIGhlYWRlcl9zdHIgPSBnX3N0cmR1cF9wcmludGYoIiVzPSVzOyBN
YXgtQWdlPTYwIiwga0Nvb2tpZU5hbWUsIGtDb29raWVWYWx1ZSk7CisKICAgICBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi9pbmRleC5odG1sIikpIHsKICAgICAgICAgY2hhciogaW5kZXhIdG1sID0g
Z19zdHJkdXBfcHJpbnRmKGtJbmRleEh0bWxGb3JtYXQsIHNvdXBfc2VydmVyX2dldF9wb3J0KHNl
cnZlcikpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1lc3NhZ2UtPnJl
c3BvbnNlX2hlYWRlcnMsICJTZXQtQ29va2llIiwgImZvbz1iYXI7IE1heC1BZ2U9NjAiKTsKKyAg
ICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFk
ZXJzLCAiU2V0LUNvb2tpZSIsIGhlYWRlcl9zdHIpOwogICAgICAgICBzb3VwX21lc3NhZ2VfYm9k
eV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgaW5kZXhI
dG1sLCBzdHJsZW4oaW5kZXhIdG1sKSk7CiAgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRo
LCAiL2ltYWdlLnBuZyIpKQotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1l
c3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQtQ29va2llIiwgImJhej1xdXg7IE1heC1BZ2U9
NjAiKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZShtZXNzYWdlLT5yZXNw
b25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsIGhlYWRlcl9zdHIpOwogICAgIGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvbm8tY29va2llcy5odG1sIikpIHsKICAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGluZGV4SHRtbCA9ICI8aHRtbD48Ym9keT48cD5ObyBjb29raWVzPC9wPjwvYm9k
eT48L2h0bWw+IjsKICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJl
c3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW5kZXhIdG1sLCBzdHJsZW4oaW5kZXhI
dG1sKSk7CkBAIC00MDYsNiArNjkzLDkgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIGtTZXJ2ZXIt
PnJ1bihzZXJ2ZXJDYWxsYmFjayk7CiAKICAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJL
aXRDb29raWVNYW5hZ2VyIiwgImFjY2VwdC1wb2xpY3kiLCB0ZXN0Q29va2llTWFuYWdlckFjY2Vw
dFBvbGljeSk7CisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdl
ciIsICJhZGQtY29va2llIiwgdGVzdENvb2tpZU1hbmFnZXJBZGRDb29raWUpOworICAgIENvb2tp
ZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiZ2V0LWNvb2tpZXMiLCB0
ZXN0Q29va2llTWFuYWdlckdldENvb2tpZXMpOworICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQo
IldlYktpdENvb2tpZU1hbmFnZXIiLCAiZGVsZXRlLWNvb2tpZSIsIHRlc3RDb29raWVNYW5hZ2Vy
RGVsZXRlQ29va2llKTsKICAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVN
YW5hZ2VyIiwgImRlbGV0ZS1jb29raWVzIiwgdGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWVz
KTsKICAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImNv
b2tpZXMtY2hhbmdlZCIsIHRlc3RDb29raWVNYW5hZ2VyQ29va2llc0NoYW5nZWQpOwogICAgIENv
b2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAicGVyc2lzdGVudC1z
dG9yYWdlIiwgdGVzdENvb2tpZU1hbmFnZXJQZXJzaXN0ZW50U3RvcmFnZSk7Ci0tIAoyLjE0LjIK
Cg==
</data>
<flag name="review"
          id="346596"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>