<?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>78491</bug_id>
          
          <creation_ts>2012-02-13 06:10:14 -0800</creation_ts>
          <short_desc>[GTK] Implement WebUIClient&apos;s runOpenPanel in WebKit2GTK+</short_desc>
          <delta_ts>2012-04-30 06:48:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>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="Mario Sanchez Prada">mario</assigned_to>
          <cc>alex</cc>
    
    <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>manuel.por.aca</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>555219</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-13 06:10:14 -0800</bug_when>
    <thetext>We need to implement this functionality for the &lt;input type=&quot;file&quot; /&gt; HTML5 tag[1] to work in WebKit2GTK+ based browsers.

[1] http://dev.w3.org/html5/markup/input.file.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556872</commentid>
    <comment_count>1</comment_count>
      <attachid>127102</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-14 19:22:20 -0800</bug_when>
    <thetext>Created attachment 127102
Patch Proposal + Unit tests

Attaching a provisional patch for this bug, which in theory is lacking documentation only. Let&apos;s see what reviewers say :-)

The attachment is a follow-up patch for the discussion started in the webkit-gtk mailing list (see thread at [1]), and the main issues that changed since the last patch sent to the list (see [2]) would be the following:

  - Implemented needed unit tests for checking the whole new API, in TestWebKitWebView.cpp.
  - Implemented new function mouseButtonClick() in WebViewTest, to simulate button clicks through GdkEvent&apos;s (required for writing the unit test)
  - Consider the MIME handlers in the default handler for &apos;run-file-chooser&apos; provided by the WebView (to set a GtkFileFilter)
  - Migrated all the occurrences in the API of gchar**  to GSList*, for consistency. Also, to easy usage from apps, those functions returning GSList* will work on a [transfer none] basis, so the caller won&apos;t have to bother neither about freeing the GSList nor about its elements. WebKitFileChooserRequest will internally cache those lists and their values.
  - Make MiniBrowser use this API too, for easily testing it (it will just connect to the &apos;run-file-chooser&apos; signal and provide its own GtkFileChooserDialog)
  - Some fixes all around the patch

So, if the API implemented in this patch sounds more or less OK, my next step would be to document everything and polish the patch, in order to ask for a proper and formal review. Informal reviews are appreciated in the meantime, though :-)

[1] https://lists.webkit.org/pipermail/webkit-gtk/2012-February/000965.html
[2] https://lists.webkit.org/pipermail/webkit-gtk/2012-February/000972.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556874</commentid>
    <comment_count>2</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-14 19:23:30 -0800</bug_when>
    <thetext>Adding some additional WebKitGTK+ reviewers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556878</commentid>
    <comment_count>3</comment_count>
      <attachid>127102</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-14 19:29:21 -0800</bug_when>
    <thetext>Comment on attachment 127102
Patch Proposal + Unit tests

Attachment 127102 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11518549</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556984</commentid>
    <comment_count>4</comment_count>
      <attachid>127102</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-15 00:39:26 -0800</bug_when>
    <thetext>Comment on attachment 127102
Patch Proposal + Unit tests

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

Great work. All the patches including new WebKit2 GTK+ API should be fully documented. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:42
&gt; +    GSList* acceptedMimeTypes;
&gt; +    GSList* selectedFiles;

I don&apos;t think we want to cache these

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:43
&gt; +    gboolean handledRequest;

Use bool, instead of gboolean here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:52
&gt; +    request-&gt;priv-&gt;acceptedMimeTypes = 0;
&gt; +    request-&gt;priv-&gt;selectedFiles = 0;
&gt; +    request-&gt;priv-&gt;handledRequest = false;

Struct instances are always 0 initialized, so you don&apos;t need these initializations.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:67
&gt; +    if (request-&gt;priv-&gt;acceptedMimeTypes)
&gt; +        g_slist_free_full(request-&gt;priv-&gt;acceptedMimeTypes, g_free);
&gt; +
&gt; +    if (request-&gt;priv-&gt;selectedFiles)
&gt; +        g_slist_free_full(request-&gt;priv-&gt;selectedFiles, g_free);

Don&apos;t cache these, the api should just return a transfer-full GSList in both cases that user will free. It&apos;s very unlikely that these are requested twice for the same filechooser request.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:88
&gt; +gboolean webkit_file_chooser_request_allows_multiple_files(WebKitFileChooserRequest* request)

Documentation is missing for this function

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:94
&gt; +GSList* webkit_file_chooser_request_accepted_mime_types(WebKitFileChooserRequest* request)

Documentation missing. webkit_file_chooser_get_request_accepted_mime_types, maybe?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:97
&gt; +    WKRetainPtr&lt;WKArrayRef&gt; wkMimeTypes(WKOpenPanelParametersCopyAcceptedMIMETypes(request-&gt;priv-&gt;wkParameters.get()));

I think you should adopt the reference to avoid leaking the array.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:101
&gt; +    if (numOfMimeTypes) {

If numOfMimeTypes is 0 the for loop won&apos;t iterate anyway, so you don&apos;t need to check it here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:102
&gt; +        for (size_t i = 0; i &lt; numOfMimeTypes; ++i) {

we can simply use WKArrayGetSize(wkMimeTypes.get()), we don&apos;t need to cache the size in a local var.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:119
&gt; +GtkFileFilter* webkit_file_chooser_request_get_file_filter(WebKitFileChooserRequest* request)

Documentation missing

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:125
&gt; +    GSList* acceptedMimeTypes(webkit_file_chooser_request_accepted_mime_types(request));
&gt; +    if (!acceptedMimeTypes)
&gt; +        return 0;

This is convenient, but we end up iterating the mime types twice and allocating every mime-type twice too. I would use the same code than webkit_file_chooser_request_accepted_mime_types but adding the mimetypes to the filter instead of to the list.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:134
&gt; +void webkit_file_chooser_request_choose_files(WebKitFileChooserRequest* request, GSList* fileURIs)

Docs

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:150
&gt; +GSList* webkit_file_chooser_request_selected_files(WebKitFileChooserRequest* request)

webkit_file_chooser_request_get_selected_files? You already know this should be documented too :-)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:159
&gt; +    size_t numOfFiles = selectedFileNames.size();
&gt; +    if (numOfFiles) {
&gt; +        for (size_t i = 0; i &lt; numOfFiles; ++i)

Same here, we don&apos;t need to check numOfFiles is not 0, nor to cache the size, just use selectedFileNames.size()

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h:58
&gt; +webkit_file_chooser_request_allows_multiple_files (WebKitFileChooserRequest*);

Include the parameter names in public headers and place the * adjacent to the parameter identifier.

webkit_file_chooser_request_allows_multiple_files (WebKitFileChooserRequest *request);

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h:60
&gt; +WEBKIT_API GSList*

Add a space between type name and *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h:73
&gt; +webkit_file_chooser_request_accepted_mime_types   (WebKitFileChooserRequest*);
&gt; +
&gt; +WEBKIT_API GtkFileFilter*
&gt; +webkit_file_chooser_request_get_file_filter       (WebKitFileChooserRequest*);
&gt; +
&gt; +WEBKIT_API void
&gt; +webkit_file_chooser_request_choose_files          (WebKitFileChooserRequest*, GSList*);
&gt; +
&gt; +WEBKIT_API GSList*
&gt; +webkit_file_chooser_request_selected_files        (WebKitFileChooserRequest*);
&gt; +
&gt; +WEBKIT_API void
&gt; +webkit_file_chooser_request_cancel                (WebKitFileChooserRequest*);

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:24
&gt; +#include &quot;WebKitFileChooserRequest.h&quot;
&gt; +#include &quot;WebKitFileChooserRequestPrivate.h&quot;

WebKitFileChooserRequestPrivate.h already includes WebKitFileChooserRequest.h

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:183
&gt; +    GtkWidget* dialog = gtk_file_chooser_dialog_new(_(&quot;Upload File&quot;),

I would use something like Select Files or Select Files to upload, maybe using File or Files depending on the allow_multiple parameter. Upload File makes me think the dialog will upload a file, while it actually select a file that might be uploaded later.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:194
&gt; +

GtkFileChooser doesn&apos;t allow to select multiple files, so just pick the first one and call gtk_file_chooser_select_uri()

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:664
&gt; +    /* TODO: Describe the signal. */

Nothing more to add :-P

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:434
&gt; +    GSList* mimeType = mimeTypes;
&gt; +    g_assert_cmpstr(static_cast&lt;gchar*&gt;(mimeType-&gt;data), ==, &quot;audio/*&quot;);
&gt; +    mimeType = g_slist_next(mimeType);
&gt; +    g_assert_cmpstr(static_cast&lt;gchar*&gt;(mimeType-&gt;data), ==, &quot;video/*&quot;);
&gt; +    mimeType = g_slist_next(mimeType);
&gt; +    g_assert_cmpstr(static_cast&lt;gchar*&gt;(mimeType-&gt;data), ==, &quot;image/*&quot;);
&gt; +    mimeType = g_slist_next(mimeType);
&gt; +    g_assert(!mimeType);

You could also check that any other mime types is not in the list

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:442
&gt; +    filter = webkit_file_chooser_request_get_file_filter(fileChooserRequest);
&gt; +    g_assert(GTK_IS_FILE_FILTER(filter.get()));
&gt; +    g_assert(checkMimeTypeForFilter(filter.get(), &quot;audio/*&quot;));
&gt; +    g_assert(checkMimeTypeForFilter(filter.get(), &quot;video/*&quot;));
&gt; +    g_assert(checkMimeTypeForFilter(filter.get(), &quot;image/*&quot;));
&gt; +    selectedFiles = webkit_file_chooser_request_selected_files(fileChooserRequest);
&gt; +    g_assert(!selectedFiles);

Ditto.

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:287
&gt; +

You are duplicating the code of the default handler here, just let the minibrowser use the default handler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557108</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 03:30:36 -0800</bug_when>
    <thetext>Attachment 127102 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/GNUmakefile.am&apos;, u&apos;Source/W...&quot; exit_code: 1

WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:188:  Use 0 instead of NULL.  [readability/null] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557109</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 03:30:56 -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>557203</commentid>
    <comment_count>7</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-15 06:01:06 -0800</bug_when>
    <thetext>Thanks for the review, Carlos.

Just some comments to advance on the topic, even if I won&apos;t be able to code anything at all today...

(In reply to comment #4)
&gt; (From update of attachment 127102 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127102&amp;action=review
&gt; 
&gt; Great work. All the patches including new WebKit2 GTK+ API should be fully documented. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API

Yeah, as I said before, I haven&apos;t documented anything yet, but I plan to do it next, after addressing the issues that might come up from the review process.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:42
&gt; &gt; +    GSList* acceptedMimeTypes;
&gt; &gt; +    GSList* selectedFiles;
&gt; 
&gt; I don&apos;t think we want to cache these

This has been the result of a discussion in Jabber with Martin where we talked about maybe returning GSList* with [transfer none] in thos methods that were previously returning gchar**... and so I needed to cache those lists to ensure that memory will be retained by the API as needed.

However, I have to say that I&apos;m not that convinced about that now and that I think perhaps it would be better, easier and simpler to return a GSList* with [transfer full], so the caller takes all the responsibility on freeing both the GSList and its elements, which is what you were proposing in the first place.

So, in a nutshell, I agree with you on removing these two things from here, and also in using [transfer full] for those methods returning GSList*. I just didnt change it before attaching this patch because (1) I already had it implemented that way, (2) I wanted to trigger this discussion and (3) it was quite late already when I uploaded  the patch (4:30am!) :-).

Will change it in a follow up patch then.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:43
&gt; &gt; +    gboolean handledRequest;
&gt; 
&gt; Use bool, instead of gboolean here.

Oops! Will do.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:52
&gt; &gt; +    request-&gt;priv-&gt;acceptedMimeTypes = 0;
&gt; &gt; +    request-&gt;priv-&gt;selectedFiles = 0;
&gt; &gt; +    request-&gt;priv-&gt;handledRequest = false;
&gt; 
&gt; Struct instances are always 0 initialized, so you don&apos;t need these initializations.

I&apos;d swear it was not working that way for acceptedMimeTypes and selectedFiles in this case... but that doesn&apos;t matter much anyway since I will be removing them anyway.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:67
&gt; &gt; +    if (request-&gt;priv-&gt;acceptedMimeTypes)
&gt; &gt; +        g_slist_free_full(request-&gt;priv-&gt;acceptedMimeTypes, g_free);
&gt; &gt; +
&gt; &gt; +    if (request-&gt;priv-&gt;selectedFiles)
&gt; &gt; +        g_slist_free_full(request-&gt;priv-&gt;selectedFiles, g_free);
&gt; 
&gt; Don&apos;t cache these, the api should just return a transfer-full GSList in both cases that user will free.

As I said before, I will change this and the caller will have the responsibility of freeing everything.

&gt; It&apos;s very unlikely that these are requested twice for the same filechooser request.

Agree.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:88
&gt; &gt; +gboolean webkit_file_chooser_request_allows_multiple_files(WebKitFileChooserRequest* request)
&gt; 
&gt; Documentation is missing for this function

Yes, Will add it later (will work on that tomorrow).

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:94
&gt; &gt; +GSList* webkit_file_chooser_request_accepted_mime_types(WebKitFileChooserRequest* request)
&gt; 
&gt; Documentation missing. webkit_file_chooser_get_request_accepted_mime_types, maybe?

You probably mean webkit_file_chooser_request_get_accepted_mime_types :-)

In any case, I agree with the change. I intentionally ommitted the _get_ part thinking of what we normally do in WebKit, but it&apos;s true that in GNOME libraries this _get_ part is quite common, so I think it makes sense. Will change.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:97
&gt; &gt; +    WKRetainPtr&lt;WKArrayRef&gt; wkMimeTypes(WKOpenPanelParametersCopyAcceptedMIMETypes(request-&gt;priv-&gt;wkParameters.get()));
&gt; 
&gt; I think you should adopt the reference to avoid leaking the array.

You&apos;re probably right. Will fix it.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:101
&gt; &gt; +    if (numOfMimeTypes) {
&gt; 
&gt; If numOfMimeTypes is 0 the for loop won&apos;t iterate anyway, so you don&apos;t need to check it here.

Argh! This comes from the times when I used a gchar**. Will fix it.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:102
&gt; &gt; +        for (size_t i = 0; i &lt; numOfMimeTypes; ++i) {
&gt; 
&gt; we can simply use WKArrayGetSize(wkMimeTypes.get()), we don&apos;t need to cache the size in a local var.

Sure. I cached it because I was using it in two places, but if I&apos;m removing that &apos;if&apos; condition this caching does not make any sense.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:119
&gt; &gt; +GtkFileFilter* webkit_file_chooser_request_get_file_filter(WebKitFileChooserRequest* request)
&gt; 
&gt; Documentation missing

Yes, yes... :-)

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:125
&gt; &gt; +    GSList* acceptedMimeTypes(webkit_file_chooser_request_accepted_mime_types(request));
&gt; &gt; +    if (!acceptedMimeTypes)
&gt; &gt; +        return 0;
&gt; 
&gt; This is convenient, but we end up iterating the mime types twice and allocating every mime-type twice too. I would use the same code than webkit_file_chooser_request_accepted_mime_types but adding the mimetypes to the filter instead of to the list.

Side effects of worshipping the DRY principle too much I guess :-). Agree with you that, in this case it&apos;s better to just clone the code (after all, it&apos;s not that much).

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:134
&gt; &gt; +void webkit_file_chooser_request_choose_files(WebKitFileChooserRequest* request, GSList* fileURIs)
&gt; 
&gt; Docs

Will work on that tomorrow.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:150
&gt; &gt; +GSList* webkit_file_chooser_request_selected_files(WebKitFileChooserRequest* request)
&gt; 
&gt; webkit_file_chooser_request_get_selected_files? 

Same than with accepted_mimetypes(): I agree with you and will change it

&gt; You already know this should be documented too :-)

You can be quite insistent when you want... ;-)

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:159
&gt; &gt; +    size_t numOfFiles = selectedFileNames.size();
&gt; &gt; +    if (numOfFiles) {
&gt; &gt; +        for (size_t i = 0; i &lt; numOfFiles; ++i)
&gt; 
&gt; Same here, we don&apos;t need to check numOfFiles is not 0, nor to cache the size, just use selectedFileNames.size()

Sure. Will fix both.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h:58
&gt; &gt; +webkit_file_chooser_request_allows_multiple_files (WebKitFileChooserRequest*);
&gt; 
&gt; Include the parameter names in public headers and place the * adjacent to the parameter identifier.

Argh! This switching between coding styles kills me sometimes... will fix it.

&gt; webkit_file_chooser_request_allows_multiple_files (WebKitFileChooserRequest *request);
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h:60
&gt; &gt; +WEBKIT_API GSList*
&gt; 
&gt; Add a space between type name and *

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h:73
&gt; &gt; +webkit_file_chooser_request_accepted_mime_types   (WebKitFileChooserRequest*);
&gt; &gt; +
&gt; &gt; +WEBKIT_API GtkFileFilter*
&gt; &gt; +webkit_file_chooser_request_get_file_filter       (WebKitFileChooserRequest*);
&gt; &gt; +
&gt; &gt; +WEBKIT_API void
&gt; &gt; +webkit_file_chooser_request_choose_files          (WebKitFileChooserRequest*, GSList*);
&gt; &gt; +
&gt; &gt; +WEBKIT_API GSList*
&gt; &gt; +webkit_file_chooser_request_selected_files        (WebKitFileChooserRequest*);
&gt; &gt; +
&gt; &gt; +WEBKIT_API void
&gt; &gt; +webkit_file_chooser_request_cancel                (WebKitFileChooserRequest*);
&gt; 
&gt; Ditto.

Sure thing.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:24
&gt; &gt; +#include &quot;WebKitFileChooserRequest.h&quot;
&gt; &gt; +#include &quot;WebKitFileChooserRequestPrivate.h&quot;
&gt; 
&gt; WebKitFileChooserRequestPrivate.h already includes WebKitFileChooserRequest.h

Ok.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:183
&gt; &gt; +    GtkWidget* dialog = gtk_file_chooser_dialog_new(_(&quot;Upload File&quot;),
&gt; 
&gt; I would use something like Select Files or Select Files to upload, maybe using File or Files depending on the allow_multiple parameter. Upload File makes me think the dialog will upload a file, while it actually select a file that might be uploaded later.

I know what you mean and I agree with it. I just used the same string I could find in WK1&apos;s ChromeClientGtk.cpp since I think it makes sense it&apos;s the same thing in both places. Maybe we should file a l10n bug about this specific thing?

I won&apos;t change this for now, for the sake of consistency among WK and WK2.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:194
&gt; &gt; +
&gt; 
&gt; GtkFileChooser doesn&apos;t allow to select multiple files, so just pick the first one and call gtk_file_chooser_select_uri()

Hmmm I think you&apos;re mixing two different things here:

  - gtk_file_chooser_select_uri(): pre-selects a file in a GtkFileChooser. Not using it yet.
  - gtk_file_chooser_set_select_multiple(): allows selecting multiple files in the file chooser with the help of Ctrl and Shift modifiers, but does _not_ pre-select anything in the file chooser (it just enables the possibility for the user to do it). This is what I&apos;m using here.

So I think the code here is just correct.

Another thing is whether we should use gtk_file_chooser_select_uri() to pre-select a file in the dialog when available. And in such a case, as per the limitation you already pointed out, we can only pre-select one file from the list returned by webkit_file_chooser_request_get_selected() (probably the first one).

I will add that in my follow up patch then, although I must point out this step is not happening either in WK1&apos;s ChromeClientGtk (maybe we should update the code there too?).

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:664
&gt; &gt; +    /* TODO: Describe the signal. */
&gt; 
&gt; Nothing more to add :-P

Yes, pretty self-descriptive I&apos;d say :P

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:434
&gt; &gt; +    GSList* mimeType = mimeTypes;
&gt; &gt; +    g_assert_cmpstr(static_cast&lt;gchar*&gt;(mimeType-&gt;data), ==, &quot;audio/*&quot;);
&gt; &gt; +    mimeType = g_slist_next(mimeType);
&gt; &gt; +    g_assert_cmpstr(static_cast&lt;gchar*&gt;(mimeType-&gt;data), ==, &quot;video/*&quot;);
&gt; &gt; +    mimeType = g_slist_next(mimeType);
&gt; &gt; +    g_assert_cmpstr(static_cast&lt;gchar*&gt;(mimeType-&gt;data), ==, &quot;image/*&quot;);
&gt; &gt; +    mimeType = g_slist_next(mimeType);
&gt; &gt; +    g_assert(!mimeType);
&gt; 
&gt; You could also check that any other mime types is not in the list

Hmm... but that&apos;s precisely what I do by explicitly checking the mime tipe in each position _and_ that there are no more elements in the list after those, right?

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:442
&gt; &gt; +    filter = webkit_file_chooser_request_get_file_filter(fileChooserRequest);
&gt; &gt; +    g_assert(GTK_IS_FILE_FILTER(filter.get()));
&gt; &gt; +    g_assert(checkMimeTypeForFilter(filter.get(), &quot;audio/*&quot;));
&gt; &gt; +    g_assert(checkMimeTypeForFilter(filter.get(), &quot;video/*&quot;));
&gt; &gt; +    g_assert(checkMimeTypeForFilter(filter.get(), &quot;image/*&quot;));
&gt; &gt; +    selectedFiles = webkit_file_chooser_request_selected_files(fileChooserRequest);
&gt; &gt; +    g_assert(!selectedFiles);
&gt; 
&gt; Ditto.

Same doubt here. Maybe I&apos;m not understanding you properly?

&gt; &gt; Tools/MiniBrowser/gtk/BrowserWindow.c:287
&gt; &gt; +
&gt; 
&gt; You are duplicating the code of the default handler here, just let the minibrowser use the default handler

Yes, I know... my point is to make sure we are using the new API in MiniBrowser to allow manually checking it works fine, even if the result is exactly the same than the default handler. I had some doubts about this part of the patch precisely of that... so maybe I should just drop it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557223</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-15 06:30:27 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Thanks for the review, Carlos.
&gt; 
&gt; Just some comments to advance on the topic, even if I won&apos;t be able to code anything at all today...
&gt; 
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 127102 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127102&amp;action=review
&gt; &gt; 
&gt; &gt; Great work. All the patches including new WebKit2 GTK+ API should be fully documented. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API
&gt; 
&gt; Yeah, as I said before, I haven&apos;t documented anything yet, but I plan to do it next, after addressing the issues that might come up from the review process.

Sorry I didn&apos;t read your comments :-P
 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:42
&gt; &gt; &gt; +    GSList* acceptedMimeTypes;
&gt; &gt; &gt; +    GSList* selectedFiles;
&gt; &gt; 
&gt; &gt; I don&apos;t think we want to cache these
&gt; 
&gt; This has been the result of a discussion in Jabber with Martin where we talked about maybe returning GSList* with [transfer none] in thos methods that were previously returning gchar**... and so I needed to cache those lists to ensure that memory will be retained by the API as needed.

FileChooseRequest is a temporary value, to be used only during the async operation, so mime-types and selected files won&apos;t be asked more than once. I think it&apos;s perfectly fine to return a trasfer-full GSList in both cases.
 
&gt; However, I have to say that I&apos;m not that convinced about that now and that I think perhaps it would be better, easier and simpler to return a GSList* with [transfer full], so the caller takes all the responsibility on freeing both the GSList and its elements, which is what you were proposing in the first place.
&gt; 
&gt; So, in a nutshell, I agree with you on removing these two things from here, and also in using [transfer full] for those methods returning GSList*. I just didnt change it before attaching this patch because (1) I already had it implemented that way, (2) I wanted to trigger this discussion and (3) it was quite late already when I uploaded  the patch (4:30am!) :-).
&gt; 
&gt; Will change it in a follow up patch then.

Thanks

&gt; &gt; Struct instances are always 0 initialized, so you don&apos;t need these initializations.
&gt; 
&gt; I&apos;d swear it was not working that way for acceptedMimeTypes and selectedFiles in this case... but that doesn&apos;t matter much anyway since I will be removing them anyway.

I&apos;m quite sure it was.
 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:94
&gt; &gt; &gt; +GSList* webkit_file_chooser_request_accepted_mime_types(WebKitFileChooserRequest* request)
&gt; &gt; 
&gt; &gt; Documentation missing. webkit_file_chooser_get_request_accepted_mime_types, maybe?
&gt; 
&gt; You probably mean webkit_file_chooser_request_get_accepted_mime_types :-)

indeed
 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:183
&gt; &gt; &gt; +    GtkWidget* dialog = gtk_file_chooser_dialog_new(_(&quot;Upload File&quot;),
&gt; &gt; 
&gt; &gt; I would use something like Select Files or Select Files to upload, maybe using File or Files depending on the allow_multiple parameter. Upload File makes me think the dialog will upload a file, while it actually select a file that might be uploaded later.
&gt; 
&gt; I know what you mean and I agree with it. I just used the same string I could find in WK1&apos;s ChromeClientGtk.cpp since I think it makes sense it&apos;s the same thing in both places. Maybe we should file a l10n bug about this specific thing?
&gt; 
&gt; I won&apos;t change this for now, for the sake of consistency among WK and WK2.

I agree with keeping consistency between wk1 and wk2 when there&apos;s no a good reason not to do it. In this case, I think there&apos;s one :-)
 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:194
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; GtkFileChooser doesn&apos;t allow to select multiple files, so just pick the first one and call gtk_file_chooser_select_uri()
&gt; 
&gt; Hmmm I think you&apos;re mixing two different things here:

No, I don&apos;t

&gt;   - gtk_file_chooser_select_uri(): pre-selects a file in a GtkFileChooser. Not using it yet.
&gt;   - gtk_file_chooser_set_select_multiple(): allows selecting multiple files in the file chooser with the help of Ctrl and Shift modifiers, but does _not_ pre-select anything in the file chooser (it just enables the possibility for the user to do it). This is what I&apos;m using here.
&gt; 
&gt; So I think the code here is just correct.

I haven&apos;t said the code is wrong, I was just suggesting to pre-select the first file in selectedFiles. I don&apos;t know much about html, but I think that file input element has an option to indicate preselected files, no?

&gt; Another thing is whether we should use gtk_file_chooser_select_uri() to pre-select a file in the dialog when available. And in such a case, as per the limitation you already pointed out, we can only pre-select one file from the list returned by webkit_file_chooser_request_get_selected() (probably the first one).

This is exactly what I was proposing :-)

&gt; I will add that in my follow up patch then, although I must point out this step is not happening either in WK1&apos;s ChromeClientGtk (maybe we should update the code there too?).

Yes, why not, the fact that it&apos;s not implemented in wk1 doesn&apos;t mean we shoulnd&apos;t do it win wk2.

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:434
&gt; &gt; &gt; +    GSList* mimeType = mimeTypes;
&gt; &gt; &gt; +    g_assert_cmpstr(static_cast&lt;gchar*&gt;(mimeType-&gt;data), ==, &quot;audio/*&quot;);
&gt; &gt; &gt; +    mimeType = g_slist_next(mimeType);
&gt; &gt; &gt; +    g_assert_cmpstr(static_cast&lt;gchar*&gt;(mimeType-&gt;data), ==, &quot;video/*&quot;);
&gt; &gt; &gt; +    mimeType = g_slist_next(mimeType);
&gt; &gt; &gt; +    g_assert_cmpstr(static_cast&lt;gchar*&gt;(mimeType-&gt;data), ==, &quot;image/*&quot;);
&gt; &gt; &gt; +    mimeType = g_slist_next(mimeType);
&gt; &gt; &gt; +    g_assert(!mimeType);
&gt; &gt; 
&gt; &gt; You could also check that any other mime types is not in the list
&gt; 
&gt; Hmm... but that&apos;s precisely what I do by explicitly checking the mime tipe in each position _and_ that there are no more elements in the list after those, right?

Ah, I didn&apos;t notice you were using g_slit_next(), forget my comment then, sorry for the noise.

&gt; &gt; &gt; Tools/MiniBrowser/gtk/BrowserWindow.c:287
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; You are duplicating the code of the default handler here, just let the minibrowser use the default handler
&gt; 
&gt; Yes, I know... my point is to make sure we are using the new API in MiniBrowser to allow manually checking it works fine, even if the result is exactly the same than the default handler. I had some doubts about this part of the patch precisely of that... so maybe I should just drop it?

I think so</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557242</commentid>
    <comment_count>9</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-15 07:00:18 -0800</bug_when>
    <thetext>Hi again,

It looks like I finally got a 1,5h quantum of time to work today so I was working in a new patch considering the issues you pointed out (including those in this last review) that I&apos;ll be attaching in 5 min (no docs yet).

In the meantime, see some comments below...

(In reply to comment #8)
&gt; [...]
&gt; &gt; Yeah, as I said before, I haven&apos;t documented anything yet, but I plan to do it next, after addressing the issues that might come up from the review process.
&gt; 
&gt; Sorry I didn&apos;t read your comments :-P

No problem.

&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:42
&gt; &gt; &gt; &gt; +    GSList* acceptedMimeTypes;
&gt; &gt; &gt; &gt; +    GSList* selectedFiles;
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t think we want to cache these
&gt; &gt; 
&gt; &gt; This has been the result of a discussion in Jabber with Martin where we talked about maybe returning GSList* with [transfer none] in thos methods that were previously returning gchar**... and so I needed to cache those lists to ensure that memory will be retained by the API as needed.
&gt; 
&gt; FileChooseRequest is a temporary value, to be used only during the async operation, so mime-types and selected files won&apos;t be asked more than once. I think it&apos;s perfectly fine to return a trasfer-full GSList in both cases.

Yes, I came to the same conclusion yesterday at night while working in the patch.

[...]
&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:183
&gt; &gt; &gt; &gt; +    GtkWidget* dialog = gtk_file_chooser_dialog_new(_(&quot;Upload File&quot;),
&gt; &gt; &gt; 
&gt; &gt; &gt; I would use something like Select Files or Select Files to upload, maybe using File or Files depending on the allow_multiple parameter. Upload File makes me think the dialog will upload a file, while it actually select a file that might be uploaded later.
&gt; &gt; 
&gt; &gt; I know what you mean and I agree with it. I just used the same string I could find in WK1&apos;s ChromeClientGtk.cpp since I think it makes sense it&apos;s the same thing in both places. Maybe we should file a l10n bug about this specific thing?
&gt; &gt; 
&gt; &gt; I won&apos;t change this for now, for the sake of consistency among WK and WK2.
&gt; 
&gt; I agree with keeping consistency between wk1 and wk2 when there&apos;s no a good reason not to do it. In this case, I think there&apos;s one :-)

You convinced me. I will change it.
 
&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:194
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; 
&gt; &gt; &gt; GtkFileChooser doesn&apos;t allow to select multiple files, so just pick the first one and call gtk_file_chooser_select_uri()
&gt; &gt; 
&gt; &gt; Hmmm I think you&apos;re mixing two different things here:
&gt; 
&gt; No, I don&apos;t
&gt; 
&gt; &gt;   - gtk_file_chooser_select_uri(): pre-selects a file in a GtkFileChooser. Not using it yet.
&gt; &gt;   - gtk_file_chooser_set_select_multiple(): allows selecting multiple files in the file chooser with the help of Ctrl and Shift modifiers, but does _not_ pre-select anything in the file chooser (it just enables the possibility for the user to do it). This is what I&apos;m using here.
&gt; &gt; 
&gt; &gt; So I think the code here is just correct.
&gt; 
&gt; I haven&apos;t said the code is wrong, I was just suggesting to pre-select the first file in selectedFiles. I don&apos;t know much about html, but I think that file input element has an option to indicate preselected files, no?

My bad. I got you definitely wrong.
 
&gt; &gt; Another thing is whether we should use gtk_file_chooser_select_uri() to pre-select a file in the dialog when available. And in such a case, as per the limitation you already pointed out, we can only pre-select one file from the list returned by webkit_file_chooser_request_get_selected() (probably the first one).
&gt; 
&gt; This is exactly what I was proposing :-)

I&apos;ll do that then.

&gt; &gt; I will add that in my follow up patch then, although I must point out this step is not happening either in WK1&apos;s ChromeClientGtk (maybe we should update the code there too?).
&gt; 
&gt; Yes, why not, the fact that it&apos;s not implemented in wk1 doesn&apos;t mean we shoulnd&apos;t do it win wk2.

Fair enough :)

&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:434
&gt; &gt; &gt; &gt; +    GSList* mimeType = mimeTypes;
&gt; &gt; &gt; &gt; +    g_assert_cmpstr(static_cast&lt;gchar*&gt;(mimeType-&gt;data), ==, &quot;audio/*&quot;);
&gt; &gt; &gt; &gt; +    mimeType = g_slist_next(mimeType);
&gt; &gt; &gt; &gt; +    g_assert_cmpstr(static_cast&lt;gchar*&gt;(mimeType-&gt;data), ==, &quot;video/*&quot;);
&gt; &gt; &gt; &gt; +    mimeType = g_slist_next(mimeType);
&gt; &gt; &gt; &gt; +    g_assert_cmpstr(static_cast&lt;gchar*&gt;(mimeType-&gt;data), ==, &quot;image/*&quot;);
&gt; &gt; &gt; &gt; +    mimeType = g_slist_next(mimeType);
&gt; &gt; &gt; &gt; +    g_assert(!mimeType);
&gt; &gt; &gt; 
&gt; &gt; &gt; You could also check that any other mime types is not in the list
&gt; &gt; 
&gt; &gt; Hmm... but that&apos;s precisely what I do by explicitly checking the mime tipe in each position _and_ that there are no more elements in the list after those, right?
&gt; 
&gt; Ah, I didn&apos;t notice you were using g_slit_next(), forget my comment then, sorry for the noise.

Ok.

&gt; &gt; &gt; &gt; Tools/MiniBrowser/gtk/BrowserWindow.c:287
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; 
&gt; &gt; &gt; You are duplicating the code of the default handler here, just let the minibrowser use the default handler
&gt; &gt; 
&gt; &gt; Yes, I know... my point is to make sure we are using the new API in MiniBrowser to allow manually checking it works fine, even if the result is exactly the same than the default handler. I had some doubts about this part of the patch precisely of that... so maybe I should just drop it?
&gt; 
&gt; I think so

I&apos;ll remove it then</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557246</commentid>
    <comment_count>10</comment_count>
      <attachid>127182</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-15 07:07:32 -0800</bug_when>
    <thetext>Created attachment 127182
Patch proposal + Unit tests

New patch incorporating all the suggestions pointed out by Carlos BUT the documentation (will do tomorrow).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557248</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 07:11:07 -0800</bug_when>
    <thetext>Attachment 127182 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/GNUmakefile.am&apos;, u&apos;Source/W...&quot; exit_code: 1

WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:189:  Use 0 instead of NULL.  [readability/null] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557309</commentid>
    <comment_count>12</comment_count>
      <attachid>127182</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-15 08:55:11 -0800</bug_when>
    <thetext>Comment on attachment 127182
Patch proposal + Unit tests

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:101
&gt; +GtkFileFilter* webkit_file_chooser_request_get_file_filter(WebKitFileChooserRequest* request)

I know the GTK type is GtkFileFilter, but maybe it&apos;s easier to understand if this is called get_mime_type_filter? or get_accepted_mime_type_filter? to make it clear that this function returns the same than webkit_file_chooser_request_get_accepted_mime_types() but in a GtkFileFilter just to make it easier for GtkFileChooser users.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:126
&gt; +    for (GSList* item = fileURIs ; item ; item = g_slist_next(item)) {

extra space between fileURIs and ; and item and ;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:137
&gt; +GSList* webkit_file_chooser_request_get_selected_files(WebKitFileChooserRequest* request)

Since we are retuning uris, maybe it would be better to call this get_selected_uris. GtkFileChooser has select_file(), select_filename() and select_uri(), so it might be confusing, the same applies to choose_files(), what do you think?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:191
&gt; +    GtkFileFilter* filter = webkit_file_chooser_request_get_file_filter(request);

Use GRefPtr, since GtkFileFilter should be freed by the caller now.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:374
&gt; +    GRefPtr&lt;GtkFileFilter&gt; filter(webkit_file_chooser_request_get_file_filter(fileChooserRequest));

You should use adoptGRef here, or not use GRefPtr at all since you are expecting a NULL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557335</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-15 09:53:43 -0800</bug_when>
    <thetext>(In reply to comment #8)

&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:42
&gt; &gt; &gt; &gt; +    GSList* acceptedMimeTypes;
&gt; &gt; &gt; &gt; +    GSList* selectedFiles;
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t think we want to cache these
&gt; &gt; 
&gt; &gt; This has been the result of a discussion in Jabber with Martin where we talked about maybe returning GSList* with [transfer none] in thos methods that were previously returning gchar**... and so I needed to cache those lists to ensure that memory will be retained by the API as needed.
&gt; 
&gt; FileChooseRequest is a temporary value, to be used only during the async operation, so mime-types and selected files won&apos;t be asked more than once. I think it&apos;s perfectly fine to return a trasfer-full GSList in both cases.

I think it&apos;s much better to cache these lists within the FileChooserRequest. It isn&apos;t for performance reasons, but to make using the API simpler -- as the client shouldn&apos;t need to free things that are really owned by the FileChooserRequest. This is also quite important because these values may be allocated by WebKit&apos;s internal allocator (now or in the future). We should be using this allocator when we can. Thus, I feel *strongly* that these should be cached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557349</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-15 10:14:42 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; I think it&apos;s much better to cache these lists within the FileChooserRequest. It isn&apos;t for performance reasons, but to make using the API simpler -- as the client shouldn&apos;t need to free things that are really owned by the FileChooserRequest. This is also quite important because these values may be allocated by WebKit&apos;s internal allocator (now or in the future). We should be using this allocator when we can. Thus, I feel *strongly* that these should be cached.

Ok, it&apos;s fine with me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558073</commentid>
    <comment_count>15</comment_count>
      <attachid>127182</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-02-16 04:17:09 -0800</bug_when>
    <thetext>Comment on attachment 127182
Patch proposal + Unit tests

Attachment 127182 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11537105</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558081</commentid>
    <comment_count>16</comment_count>
      <attachid>127357</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-16 04:34:19 -0800</bug_when>
    <thetext>Created attachment 127357
Patch Proposal + Unit Tests

New patch addressing the issues commented by Carlos and Martin in their last comments.

Btw, besides bringing the cache for those GSList&apos;s back to the WebKitFileChooserRequest object, I&apos;ve also cached the GtkFileFilter in there, for similar reasons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558092</commentid>
    <comment_count>17</comment_count>
      <attachid>127357</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-16 05:00:34 -0800</bug_when>
    <thetext>Comment on attachment 127357
Patch Proposal + Unit Tests

Attachment 127357 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11534803</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558094</commentid>
    <comment_count>18</comment_count>
      <attachid>127357</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-16 05:01:53 -0800</bug_when>
    <thetext>Comment on attachment 127357
Patch Proposal + Unit Tests

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

Perfect!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:87
&gt; +gboolean webkit_file_chooser_request_allows_multiple_files(WebKitFileChooserRequest* request)

I&apos;m thinking that maybe we could use something like webkit_file_chooser_request_allow_select_multiple() or get_select_multiple(). That way we avoid using files here (for the confusion with files, filenames and uris) and it&apos;s consistent with GtkFileChooser API.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:139
&gt; +void webkit_file_chooser_request_choose_files(WebKitFileChooserRequest* request, GSList* fileURIs)

what about using choose_uris as I suggested? to make it clear that the list must be a list of uris and not files nor filenames.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558151</commentid>
    <comment_count>19</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-16 06:42:30 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 127357 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127357&amp;action=review
&gt; 
&gt; Perfect!
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:87
&gt; &gt; +gboolean webkit_file_chooser_request_allows_multiple_files(WebKitFileChooserRequest* request)
&gt; 
&gt; I&apos;m thinking that maybe we could use something like webkit_file_chooser_request_allow_select_multiple() or get_select_multiple(). That way we avoid using files here (for the confusion with files, filenames and uris) and it&apos;s consistent with GtkFileChooser API.

I think it makes sense. I hereby propose webkit_file_chooser_request_allow_select_multiple_selection()  :-)
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:139
&gt; &gt; +void webkit_file_chooser_request_choose_files(WebKitFileChooserRequest* request, GSList* fileURIs)
&gt; 
&gt; what about using choose_uris as I suggested? to make it clear that the list must be a list of uris and not files nor filenames

You&apos;re definitely right.

I will change those in the next patch, but first, I&apos;d like to hear others&apos; opinions (Martin?), in order not to flood this bug with maybe too many quick changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558152</commentid>
    <comment_count>20</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-16 06:44:49 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt;[...]
&gt; I think it makes sense. I hereby propose webkit_file_chooser_request_allow_select_multiple_selection()  :-)

Oops! I meant webkit_file_chooser_request_allows_multiple_selection()

Reason: it&apos;s consistent with what&apos;s specified in the description for that optional attribute here: 
http://dev.w3.org/html5/markup/input.file.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558154</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-16 06:52:52 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt;[...]
&gt; &gt; I think it makes sense. I hereby propose webkit_file_chooser_request_allow_select_multiple_selection()  :-)
&gt; 
&gt; Oops! I meant webkit_file_chooser_request_allows_multiple_selection()
&gt; 
&gt; Reason: it&apos;s consistent with what&apos;s specified in the description for that optional attribute here: 
&gt; http://dev.w3.org/html5/markup/input.file.html

Ok, sounds good too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558593</commentid>
    <comment_count>22</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-16 15:31:26 -0800</bug_when>
    <thetext>Today, I was thinking again quite deeply about the implications of representing the list of mime types and selected files for the request as either a GSList* or a gchar**, and surpsingly I reached the same conclusion than Carlos yesterday: contrary to what I thought, using gchar** everywhere seems like the way to go.

Reasons for this are several and of course arguable, but IMHO worth considering:

1. GSList is not a defined GType (not even a boxed one) so if we want to expose it in the future as a property we will have to do it as a pointer. If we use gchar** we have GStrv for properties, which is a GBoxed type representing a NULL-terminated array of gchar*.

2. I was reviewing different APIs from different GNOME libraries and I found out that, whenever they wanted to expose a list of strings for a given class, they also used gchar** for that (using GStrv when exposing them as properties). This makes me think that it&apos;s what people would expect from us too, and so the way to go, for consistency with what the rest of libraries do.

3. In the same way I looked for what other APIs did to expose this kind of attributes, I looked for APIs using GSList/GList to export things, and found out that whenever they used those, it was always in a [transfer container] or [transfer full] scenario, but never in a [transfer none] case, which is what we want.

So, after much thinking I now think that it&apos;s better to store (cache) and expose those attributes in WebKitFileChooserRequest as gchar** instead of using GSList*. The only drawback I&apos;ve found so far is that, as we don&apos;t have a way to handle this kind of elements with GOwnPtr _and_ we want to cache the structures for allowing the [transfer none] thing, I had no choice but defining those attributes as raw gchar** pointers and freeing them on finalize with g_strfreev.

Perhaps there&apos;s another way to do it, or perhaps we could even consider creating a new kind of smart pointer for GBoxed types (GBoxedPtr ?), but in any case it doesn&apos;t look to me like a stopper or something, although I&apos;m probably not the best suited one to judge such a thing :-)

In order to help making a decision, I&apos;ll be attaching right away two new different patches (both incorporating all the latest suggestions in this bug): one implemented with GSList* and the other implemented with gchar** (my preferred so far)

Thanks!

PS: Yes, yes.. no documentation yet :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558596</commentid>
    <comment_count>23</comment_count>
      <attachid>127456</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-16 15:32:19 -0800</bug_when>
    <thetext>Created attachment 127456
Patch Proposal + Unit Tests (GSList* version)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558599</commentid>
    <comment_count>24</comment_count>
      <attachid>127457</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-16 15:33:31 -0800</bug_when>
    <thetext>Created attachment 127457
Patch Proposal + Unit Tests (gchar** version)

It also includes a couple of extra bool attributes to help when retrieving the cached gchar* arrays</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558871</commentid>
    <comment_count>25</comment_count>
      <attachid>127457</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-16 20:52:26 -0800</bug_when>
    <thetext>Comment on attachment 127457
Patch Proposal + Unit Tests (gchar** version)

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:170
&gt; +    if (request-&gt;priv-&gt;mimeTypesChecked)
&gt; +        return request-&gt;priv-&gt;mimeTypes;
&gt; +
&gt; +    request-&gt;priv-&gt;mimeTypesChecked = true;
&gt; +
&gt; +    WKRetainPtr&lt;WKArrayRef&gt; wkMimeTypes(AdoptWK, WKOpenPanelParametersCopyAcceptedMIMETypes(request-&gt;priv-&gt;wkParameters.get()));
&gt; +    size_t numOfMimeTypes = WKArrayGetSize(wkMimeTypes.get());
&gt; +    if (!numOfMimeTypes)
&gt; +        return 0;
&gt; +

If you return an empty NULL terminated gchar** here it&apos;s both more consistent, avoids forcing null check in the client and you can get rid of request-&gt;priv-&gt;mimeTypesChecked. At the very least, there&apos;s no harm in it and it makes the code simpler.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:190
&gt; +    WKRetainPtr&lt;WKArrayRef&gt; wkMimeTypes(AdoptWK, WKOpenPanelParametersCopyAcceptedMIMETypes(request-&gt;priv-&gt;wkParameters.get()));
&gt; +    size_t numOfMimeTypes = WKArrayGetSize(wkMimeTypes.get());
&gt; +    if (!numOfMimeTypes)
&gt; +        return 0;

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:227
&gt; +    if (request-&gt;priv-&gt;selectedURIsChecked)
&gt; +        return request-&gt;priv-&gt;selectedURIs;
&gt; +
&gt; +    request-&gt;priv-&gt;selectedURIsChecked = true;
&gt; +
&gt; +    Vector&lt;String&gt; selectedFileNames = toImpl(request-&gt;priv-&gt;wkParameters.get())-&gt;selectedFileNames();
&gt; +    size_t numOfURIs = selectedFileNames.size();
&gt; +    if (!numOfURIs)
&gt; +        return 0;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558977</commentid>
    <comment_count>26</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-17 00:01:10 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 127457 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127457&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:170
&gt; &gt; +    if (request-&gt;priv-&gt;mimeTypesChecked)
&gt; &gt; +        return request-&gt;priv-&gt;mimeTypes;
&gt; &gt; +
&gt; &gt; +    request-&gt;priv-&gt;mimeTypesChecked = true;
&gt; &gt; +
&gt; &gt; +    WKRetainPtr&lt;WKArrayRef&gt; wkMimeTypes(AdoptWK, WKOpenPanelParametersCopyAcceptedMIMETypes(request-&gt;priv-&gt;wkParameters.get()));
&gt; &gt; +    size_t numOfMimeTypes = WKArrayGetSize(wkMimeTypes.get());
&gt; &gt; +    if (!numOfMimeTypes)
&gt; &gt; +        return 0;
&gt; &gt; +
&gt; 
&gt; If you return an empty NULL terminated gchar** here it&apos;s both more consistent, avoids forcing null check in the client and you can get rid of request-&gt;priv-&gt;mimeTypesChecked. At the very least, there&apos;s no harm in it and it makes the code simpler.

Consistent with what? Not with GNOME APIs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558984</commentid>
    <comment_count>27</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-17 00:06:05 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Today, I was thinking again quite deeply about the implications of representing the list of mime types and selected files for the request as either a GSList* or a gchar**, and surpsingly I reached the same conclusion than Carlos yesterday: contrary to what I thought, using gchar** everywhere seems like the way to go.
&gt; 
&gt; Reasons for this are several and of course arguable, but IMHO worth considering:
&gt; 
&gt; 1. GSList is not a defined GType (not even a boxed one) so if we want to expose it in the future as a property we will have to do it as a pointer. If we use gchar** we have GStrv for properties, which is a GBoxed type representing a NULL-terminated array of gchar*.

Yes.

&gt; 2. I was reviewing different APIs from different GNOME libraries and I found out that, whenever they wanted to expose a list of strings for a given class, they also used gchar** for that (using GStrv when exposing them as properties). This makes me think that it&apos;s what people would expect from us too, and so the way to go, for consistency with what the rest of libraries do.

Take a look at gtk_about_dialog_get_authors(), gtk_about_dialog_get_artists(), gtk_about_dialog_get_documenters(), etc. They are a good example of doing exactly what we want. They return a const gchar * const * [array zero-terminated=1][transfer none].

&gt; 3. In the same way I looked for what other APIs did to expose this kind of attributes, I looked for APIs using GSList/GList to export things, and found out that whenever they used those, it was always in a [transfer container] or [transfer full] scenario, but never in a [transfer none] case, which is what we want.

Right

&gt; So, after much thinking I now think that it&apos;s better to store (cache) and expose those attributes in WebKitFileChooserRequest as gchar** instead of using GSList*. The only drawback I&apos;ve found so far is that, as we don&apos;t have a way to handle this kind of elements with GOwnPtr _and_ we want to cache the structures for allowing the [transfer none] thing, I had no choice but defining those attributes as raw gchar** pointers and freeing them on finalize with g_strfreev.
&gt;
&gt; Perhaps there&apos;s another way to do it, or perhaps we could even consider creating a new kind of smart pointer for GBoxed types (GBoxedPtr ?), but in any case it doesn&apos;t look to me like a stopper or something, although I&apos;m probably not the best suited one to judge such a thing :-)

There&apos;s an easier way. You can use a GPtrArray internally and return its data pointer. GPtrArray is refcounted now, so it&apos;s easy to add a GRefPtr for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559182</commentid>
    <comment_count>28</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-17 07:31:29 -0800</bug_when>
    <thetext>(In reply to comment #26)

&gt; &gt; If you return an empty NULL terminated gchar** here it&apos;s both more consistent, avoids forcing null check in the client and you can get rid of request-&gt;priv-&gt;mimeTypesChecked. At the very least, there&apos;s no harm in it and it makes the code simpler.
&gt; 
&gt; Consistent with what? Not with GNOME APIs

Self consistent. Instead of returning an array sometimes and NULL others, it would return an array always.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559187</commentid>
    <comment_count>29</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-17 07:40:36 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #26)
&gt; 
&gt; &gt; &gt; If you return an empty NULL terminated gchar** here it&apos;s both more consistent, avoids forcing null check in the client and you can get rid of request-&gt;priv-&gt;mimeTypesChecked. At the very least, there&apos;s no harm in it and it makes the code simpler.
&gt; &gt; 
&gt; &gt; Consistent with what? Not with GNOME APIs
&gt; 
&gt; Self consistent. Instead of returning an array sometimes and NULL others, it would return an array always.

Hmm... not sure, I&apos;m with Carlos here: I think the common agreement in GNOME APIs is returning an array only when there&apos;s something to return, otherwise return NULL is fine.

Also there&apos;s and advantage in the side of the client: if you get NULL, you don&apos;t need to do anything else (e.g. freeing the empty array), which is handy for instance for early returns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559215</commentid>
    <comment_count>30</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-17 08:34:59 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #26)
&gt; 
&gt; &gt; &gt; If you return an empty NULL terminated gchar** here it&apos;s both more consistent, avoids forcing null check in the client and you can get rid of request-&gt;priv-&gt;mimeTypesChecked. At the very least, there&apos;s no harm in it and it makes the code simpler.
&gt; &gt; 
&gt; &gt; Consistent with what? Not with GNOME APIs
&gt; 
&gt; Self consistent. Instead of returning an array sometimes and NULL others, it would return an array always.

Ok, then let&apos;s be self consistent and with GNOME APIs and return NULL instead of an empty array.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559225</commentid>
    <comment_count>31</comment_count>
      <attachid>127596</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-17 08:49:12 -0800</bug_when>
    <thetext>Created attachment 127596
Patch Proposal + Unit Tests

Hi again,

After struggling today with a couple of issues related with encodings, URIs and such... I&apos;m attaching now a new version of the patch (based in the gchar** version, since I understand we agree on going down that road), incorporating the following changes:

* Expose new read-only property &apos;allows-multiple-selection&apos;, which I forgot to add yesterday.

*As per Carlos&apos;s suggestion, use GRefPtr&lt;GPtrArray&gt; for caching the list of strings in the WebKitFileChooserRequest object. As expected, I needed to add a new handler for GPtrArray* pointers in GRefPtr.[h|cpp] (contained in this patch), but it&apos;s definitely better than manually handling the memory cached in those former gchar** attributes.
  
* Fixed a bug related to the encoding of files: if a selected file included characters in it path needing escaping, the value returned by _get_selected_uris() was wrong (escaped twice!) and therefore the file chooser dialog could not pre-selecte them. The problem seemed to be that I wrongly assumed that WebCore&apos;s FileChooser understood URIs insted of filepaths, and that was not right: what it understands is paths escaped with filenameToString() (see WebCore/platform/FileSystem.h), which varies depending on the platform, prefixed with the &apos;file://&apos; string, so that&apos;s why I misunderstood it accepted URIs (since it was matching our situation _when choosing files_).

However, whe retrieving the selected files from WebCore it turns out that it returns those escaped paths without the &apos;file://&apos; prefix, which needs to be passed through fileSystemRepresentation() (see WebCore/platform/FileSystem.h) before being actually usable by the file chooser dialog, through gtk_file_chooser_set_filename(), as it&apos;s not an URI.

So, wrapping up this last issue, what I did to fix it is as follows:

   - Change the WebKitFileChooserRequest&apos;s API to handle &apos;files&apos; instead of &apos;uris&apos;:
       - It will call internally to filenameToString() and filenameSystemRepresentation() as needed.
       - It will prepend the &apos;file://&apos; prefix when choosing files, if not already set, so the selection actually happens in WebCore

   - In the WebView&apos;s default handler, change the URIs related functions in favor of those FILEs related ones:
       - gtk_file_chooser_get_filenames() instead of gtk_file_chooser_get_uris()
       - gtk_file_chooser_select_filename() instead of gtk_file_chooser_select_uri()

   - Of course, rename all variable names, parameters, properties.... from *uri* to *file* :-)

This shouldn&apos;t be an issue since, after all, WebCore&apos;s FileChooser understands local files only. If that changes in the future, it will be a matter of expanding the API to handle URIs as well (as in the case of GtkFileChooser).

Last, I haven&apos;t addressed yet the issues brought up by Martin since I understand it probably needs some additional discussion. Also, I haven&apos;t written documentation yet (promise I&apos;ll do next week!) due to having spent more time than what I thought today on fixing this issues, but setting the r? flag anyway since I understand the patch is already mature enough to ask for review over it :-)

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559241</commentid>
    <comment_count>32</comment_count>
      <attachid>127596</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-17 09:08:39 -0800</bug_when>
    <thetext>Comment on attachment 127596
Patch Proposal + Unit Tests

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:178
&gt; +    request-&gt;priv-&gt;mimeTypesChecked = true;

I&apos;m not sure we need this check, if the array len &gt; 0 then return  the array, otherwise just check WKOpenPanelParametersCopyAcceptedMIMETypes again, this method is very unlikely to be called more than once.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:227
&gt; +        String fileString = filenameToString(files[i]);
&gt; +        if (!fileString.startsWith(&quot;file://&quot;, false))
&gt; +            fileString.insert(&quot;file://&quot;, 0);

GRefPtr&lt;GFile&gt; filename = adoptGRef(g_file_new_for_path(fileString.utf8().data()));
GOwnPtr&lt;char&gt; uri(g_file_get_uri(filename.get());
WKRetainPtr&lt;WKURLRef&gt; wkURL(AdoptWK, WKURLCreateWithUTF8CString(uri.get()));

Have you tried this?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:243
&gt; +    request-&gt;priv-&gt;selectedFilesChecked = true;

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560165</commentid>
    <comment_count>33</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-20 04:11:29 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 127596 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127596&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:178
&gt; &gt; +    request-&gt;priv-&gt;mimeTypesChecked = true;
&gt; 
&gt; I&apos;m not sure we need this check, if the array len &gt; 0 then return  the array, otherwise just check WKOpenPanelParametersCopyAcceptedMIMETypes again, this method is very unlikely to be called more than once.

Avoiding that extra check of WKOpenPanelParametersCopyAcceptedMIMETypes is the reason why I added that bool parameter. However, I agree with you it&apos;s unlikely to happen and so it might be better just to remove it. Will do in a follow-up patch.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:227
&gt; &gt; +        String fileString = filenameToString(files[i]);
&gt; &gt; +        if (!fileString.startsWith(&quot;file://&quot;, false))
&gt; &gt; +            fileString.insert(&quot;file://&quot;, 0);
&gt; 
&gt; GRefPtr&lt;GFile&gt; filename = adoptGRef(g_file_new_for_path(fileString.utf8().data()));
&gt; GOwnPtr&lt;char&gt; uri(g_file_get_uri(filename.get());
&gt; WKRetainPtr&lt;WKURLRef&gt; wkURL(AdoptWK, WKURLCreateWithUTF8CString(uri.get()));
&gt; 
&gt; Have you tried this?

Yes, but at some point I thought it could perhaps be better to do the work explictly instead of using g_file_get_uri (or g_filename_to_uri), don&apos;t ask why... :-)

Anyway, all things considered, I think using your suggestion is good enough and probably cleaner, so let&apos;s go for it.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:243
&gt; &gt; +    request-&gt;priv-&gt;selectedFilesChecked = true;
&gt; 
&gt; Ditto

Will change in a follow-up patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560167</commentid>
    <comment_count>34</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-20 04:17:46 -0800</bug_when>
    <thetext>One quick consideration before uploading my next patch...

I was now documenting all the code and realized of something looking at the API:

WEBKIT_API void
webkit_file_chooser_request_choose_files(WebKitFileChooserRequest *request, const gchar * const      *files);

WEBKIT_API const gchar * const *
webkit_file_chooser_request_get_selected_files(WebKitFileChooserRequest *request);


Shouldn&apos;t it be better to name the first function webkit_file_chooser_request_select_files()? It would be definitely more consistent with webkit_file_chooser_request_get_selected_files() and with the WebKitFileChooserRequest:selected-files properties indeed.

I will change that in a follow up patch unless someone says the contrary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560192</commentid>
    <comment_count>35</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-20 05:13:44 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; One quick consideration before uploading my next patch...
&gt; 
&gt; I was now documenting all the code and realized of something looking at the API:
&gt; 
&gt; WEBKIT_API void
&gt; webkit_file_chooser_request_choose_files(WebKitFileChooserRequest *request, const gchar * const      *files);
&gt; 
&gt; WEBKIT_API const gchar * const *
&gt; webkit_file_chooser_request_get_selected_files(WebKitFileChooserRequest *request);
&gt; 
&gt; 
&gt; Shouldn&apos;t it be better to name the first function webkit_file_chooser_request_select_files()? It would be definitely more consistent with webkit_file_chooser_request_get_selected_files() and with the WebKitFileChooserRequest:selected-files properties indeed.

Does choose_files modify selected_files? In that case it makes sense.

&gt; I will change that in a follow up patch unless someone says the contrary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560195</commentid>
    <comment_count>36</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-20 05:28:03 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; [...]
&gt; &gt; Shouldn&apos;t it be better to name the first function webkit_file_chooser_request_select_files()? It would be definitely more consistent with webkit_file_chooser_request_get_selected_files() and with the WebKitFileChooserRequest:selected-files properties indeed.
&gt; 
&gt; Does choose_files modify selected_files? In that case it makes sense.

Hmm... good point. The truth is that when you call webkit_file_chooser_request_choose_files() the selection changes _but only in WebCore_, in WebCore::FileChooser, but not in the request (in the API level), which is a read-only object that will be disposed when the whole process finishes.

So, that means that if we renamed the function as I proposed, and then called webkit_file_chooser_request_select_files() over a _non-NULL_ list of files, then webkit_file_chooser_request_get_selected_files() right afterwads, we would still be receiving NULL, as the selection happened in WebCore, not in the request.  And I think this might be confusing...

So, perhaps it&apos;s better to keep the &apos;choose&apos; name in the API, to differentiate from what get_selected_files() returns: the list of files already selected in the _previous_ request, not in the current one.

&gt; &gt; I will change that in a follow up patch unless someone says the contrary.

Won&apos;t do at the end. Thanks for the feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560203</commentid>
    <comment_count>37</comment_count>
      <attachid>127815</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-20 05:58:44 -0800</bug_when>
    <thetext>Created attachment 127815
Patch Proposal + Unit Tests + Docs

Attaching the first complete patch, featuring all the missing bits (e.g. gtk-doc documentation + gobject-introspection annotations) as well as addressing the last issues pointed out in this bug.

Hence, now officially asking for review over it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560212</commentid>
    <comment_count>38</comment_count>
      <attachid>127815</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-20 06:31:56 -0800</bug_when>
    <thetext>Comment on attachment 127815
Patch Proposal + Unit Tests + Docs

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

Looks great!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:200
&gt; + * Returns: #TRUE if the file chooser should allow selecting multiple files or #FALSE otherwise.

Use %TRUE %FALSE instead of #TRUE #FALSE.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:219
&gt; + * Returns: (array zero-terminated=1) (transfer none): a
&gt; + * NULL-terminated array of strings if a list of accepted MIME types
&gt; + * is defined or NULL otherwise. This array and its contents are owned
&gt; + * by WebKitGTK+ and should not be modified or freed.

%NULL

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:251
&gt; + * MIME types is defined or NULL otherwise. The returned object is

%NULL

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:265
&gt; +    request-&gt;priv-&gt;filter = gtk_file_filter_new();

adoptGRef(gtk_file_filter_new());

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:313
&gt; + * associated with the request or NULL otherwise. This array and its

%NULL

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:323
&gt; +    Vector&lt;String&gt; selectedFileNames = toImpl(request-&gt;priv-&gt;wkParameters.get())-&gt;selectedFileNames();

We are not going to modify the Vector, would it be possible to get a const reference?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:179
&gt; +        GOwnPtr&lt;GSList&gt; filesList(gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog)));
&gt; +        guint numOfFiles = g_slist_length(filesList.get());
&gt; +
&gt; +        const gchar** filesArray = g_new0(const gchar*, numOfFiles + 1);
&gt; +        GSList* file = filesList.get();
&gt; +        for (guint i = 0; i &lt; numOfFiles; i++) {
&gt; +            filesArray[i] = static_cast&lt;const gchar*&gt;(file-&gt;data);
&gt; +            file = g_slist_next(file);
&gt; +        }
&gt; +
&gt; +        webkit_file_chooser_request_choose_files(adoptedRequest.get(), const_cast&lt;const gchar* const*&gt;(filesArray));
&gt; +        g_free(filesArray);

I think this would be simpler using a GPtrArray

GRefPtr&lt;GPtrArray&gt; filesArray = adoptGRef(g_ptr_array_new());
for (GSList* l = filesList.get(); l; l = g_slist_next(l))
    g_ptr_array_add(filesArray.get(), l-&gt;data);
webkit_file_chooser_request_choose_files(adoptedRequest.get(), reinterpret_cast&lt;gchar**&gt;(filesArray-&gt;pdata));

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:200
&gt; +    GRefPtr&lt;GtkFileFilter&gt; filter(webkit_file_chooser_request_get_mime_types_filter(request));

You don&apos;t need a GRefPtr in this case, since get_mime_types_filter returns a transfer none, you know the filter will be valid while the request is alive.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:206
&gt; +    if (selectedFiles &amp;&amp; selectedFiles[0] &amp;&amp; *selectedFiles[0])

I think we should ignore empty files when adding items to the selected files array, so that the user doesn&apos;t need to check this.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:858
&gt; +void webkitWebViewMakeFileChooserRequest(WebKitWebView* webView, WebKitFileChooserRequest* request)

webkitWebViewRunFileChooser()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560464</commentid>
    <comment_count>39</comment_count>
      <attachid>127870</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-20 16:56:14 -0800</bug_when>
    <thetext>Created attachment 127870
Patch Proposal + Unit Tests + Docs

(In reply to comment #38)
&gt; [...]
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:200
&gt; &gt; + * Returns: #TRUE if the file chooser should allow selecting multiple files or #FALSE otherwise.
&gt; 
&gt; Use %TRUE %FALSE instead of #TRUE #FALSE.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:219
&gt; &gt; + * Returns: (array zero-terminated=1) (transfer none): a
&gt; &gt; + * NULL-terminated array of strings if a list of accepted MIME types
&gt; &gt; + * is defined or NULL otherwise. This array and its contents are owned
&gt; &gt; + * by WebKitGTK+ and should not be modified or freed.
&gt; 
&gt; %NULL

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:251
&gt; &gt; + * MIME types is defined or NULL otherwise. The returned object is
&gt; 
&gt; %NULL

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:265
&gt; &gt; +    request-&gt;priv-&gt;filter = gtk_file_filter_new();
&gt; 
&gt; adoptGRef(gtk_file_filter_new());

Not possible. Since GtkFileFilter derives from GInitiallyUnowned, gtk_file_filter_new() returns a floating object, so we need to get g_object_ref_sink() not to fail when calling the derefPtr method (right after finishing the assignment). Calling adoptGRef avoids calling g_object_ref_sink and so it&apos;s not possible in this case.

I put a comment explaining the situation, right before that line.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:313
&gt; &gt; + * associated with the request or NULL otherwise. This array and its
&gt; 
&gt; %NULL

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:323
&gt; &gt; +    Vector&lt;String&gt; selectedFileNames = toImpl(request-&gt;priv-&gt;wkParameters.get())-&gt;selectedFileNames();
&gt; 
&gt; We are not going to modify the Vector, would it be possible to get a const reference?

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:179
&gt; &gt; +        GOwnPtr&lt;GSList&gt; filesList(gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog)));
&gt; &gt; +        guint numOfFiles = g_slist_length(filesList.get());
&gt; &gt; +
&gt; &gt; +        const gchar** filesArray = g_new0(const gchar*, numOfFiles + 1);
&gt; &gt; +        GSList* file = filesList.get();
&gt; &gt; +        for (guint i = 0; i &lt; numOfFiles; i++) {
&gt; &gt; +            filesArray[i] = static_cast&lt;const gchar*&gt;(file-&gt;data);
&gt; &gt; +            file = g_slist_next(file);
&gt; &gt; +        }
&gt; &gt; +
&gt; &gt; +        webkit_file_chooser_request_choose_files(adoptedRequest.get(), const_cast&lt;const gchar* const*&gt;(filesArray));
&gt; &gt; +        g_free(filesArray);
&gt; 
&gt; I think this would be simpler using a GPtrArray
&gt; 
&gt; GRefPtr&lt;GPtrArray&gt; filesArray = adoptGRef(g_ptr_array_new());
&gt; for (GSList* l = filesList.get(); l; l = g_slist_next(l))
&gt;     g_ptr_array_add(filesArray.get(), l-&gt;data);
&gt; webkit_file_chooser_request_choose_files(adoptedRequest.get(), reinterpret_cast&lt;gchar**&gt;(filesArray-&gt;pdata));

You lack a g_ptr_array_add(filesArray.get(), 0); right after the loop (webkit_file_chooser_request_choose_files expects a NULL-terminated array of strings), but otherwise I agree with you.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:200
&gt; &gt; +    GRefPtr&lt;GtkFileFilter&gt; filter(webkit_file_chooser_request_get_mime_types_filter(request));
&gt; 
&gt; You don&apos;t need a GRefPtr in this case, since get_mime_types_filter returns a transfer none, you know the filter will be valid while the request is alive.

You&apos;re right. Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:206
&gt; &gt; +    if (selectedFiles &amp;&amp; selectedFiles[0] &amp;&amp; *selectedFiles[0])
&gt; 
&gt; I think we should ignore empty files when adding items to the selected files array, so that the user doesn&apos;t need to check this.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:858
&gt; &gt; +void webkitWebViewMakeFileChooserRequest(WebKitWebView* webView, WebKitFileChooserRequest* request)
&gt; 
&gt; webkitWebViewRunFileChooser()

I renamed it to webkitWebViewRunFileChooserRequest instead, since webkitWebViewRunFileChooser was a function name already in use for the default handler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560698</commentid>
    <comment_count>40</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-20 23:45:20 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; Created an attachment (id=127870) [details]
&gt; Patch Proposal + Unit Tests + Docs
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:265
&gt; &gt; &gt; +    request-&gt;priv-&gt;filter = gtk_file_filter_new();
&gt; &gt; 
&gt; &gt; adoptGRef(gtk_file_filter_new());
&gt; 
&gt; Not possible. Since GtkFileFilter derives from GInitiallyUnowned, gtk_file_filter_new() returns a floating object, so we need to get g_object_ref_sink() not to fail when calling the derefPtr method (right after finishing the assignment). Calling adoptGRef avoids calling g_object_ref_sink and so it&apos;s not possible in this case.

Ah right, I did it again, sorry. I had already asked you the same thing and you had already explained this to me, sorry for the noise :-P

&gt; I put a comment explaining the situation, right before that line.

Please, to make sure I won&apos;t ask you the same thing again :-D

&gt; &gt; I think this would be simpler using a GPtrArray
&gt; &gt; 
&gt; &gt; GRefPtr&lt;GPtrArray&gt; filesArray = adoptGRef(g_ptr_array_new());
&gt; &gt; for (GSList* l = filesList.get(); l; l = g_slist_next(l))
&gt; &gt;     g_ptr_array_add(filesArray.get(), l-&gt;data);
&gt; &gt; webkit_file_chooser_request_choose_files(adoptedRequest.get(), reinterpret_cast&lt;gchar**&gt;(filesArray-&gt;pdata));
&gt; 
&gt; You lack a g_ptr_array_add(filesArray.get(), 0); right after the loop (webkit_file_chooser_request_choose_files expects a NULL-terminated array of strings), but otherwise I agree with you.

Oops, right :-P

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:858
&gt; &gt; &gt; +void webkitWebViewMakeFileChooserRequest(WebKitWebView* webView, WebKitFileChooserRequest* request)
&gt; &gt; 
&gt; &gt; webkitWebViewRunFileChooser()
&gt; 
&gt; I renamed it to webkitWebViewRunFileChooserRequest instead, since webkitWebViewRunFileChooser was a function name already in use for the default handler.

Perfect!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560778</commentid>
    <comment_count>41</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-21 03:23:52 -0800</bug_when>
    <thetext>Thank you Carlos for the informal (yet thorough and extremely helpful) review. I understand from your last comment that the patch is already looking fine, so it looks like it&apos;s now the moment to ask for two different official reviews over it, according to [1].

So, any reviewer willing to take a look to this? :-)

Thank you!

[1] http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560791</commentid>
    <comment_count>42</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-21 03:39:07 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; Thank you Carlos for the informal (yet thorough and extremely helpful) review.

No problem, great work!

&gt; I understand from your last comment that the patch is already looking fine, so it looks like it&apos;s now the moment to ask for two different official reviews over it, according to [1].

No, one review is enough for now until the first stable release of WebKit2. The patch looks good to me, but I haven&apos;t looked at the documentation in detail, Martin will do it when officially reviewing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574682</commentid>
    <comment_count>43</comment_count>
      <attachid>127870</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-08 23:54:20 -0800</bug_when>
    <thetext>Comment on attachment 127870
Patch Proposal + Unit Tests + Docs

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

Looks good! I have one real concern about the cached value of selectedFiles below. I won&apos;t r- this, because without that there are no blocking issues.

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        Handle the GSList type in GOwnPtr, by calling g_ptr_array_ref and

This line seems inaccurate. I think what you mean here is:

Handle the GPtrArray type in GRefPtr...

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:54
&gt; + * In case the client application do not wish to handle this signal,

Nit: do not -&gt; does not

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:197
&gt; + * which depends on the HTML Input element having a &apos;multiple&apos;

Nit. Input -&gt; input

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:214
&gt; + * Get the list of &quot;media types&quot; the file chooser dialog should
&gt; + * handle, in the format specified in RFC 2046. Its contents depend on
&gt; + * the value of the &apos;accept&apos; attribute for HTML Input elements.

Nice doc.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:219
&gt; + * Returns: (array zero-terminated=1) (transfer none): a
&gt; + * %NULL-terminated array of strings if a list of accepted MIME types
&gt; + * is defined or %NULL otherwise. This array and its contents are owned
&gt; + * by WebKitGTK+ and should not be modified or freed.

Perhaps it would be good to mention specifically that if there are no mime-types listed, all of them should be accepted.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:242
&gt; +    return reinterpret_cast&lt;gchar**&gt;(request-&gt;priv-&gt;mimeTypes-&gt;pdata);

Are you sure you cannot use a static_cast here?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:308
&gt; +    WKOpenPanelResultListenerChooseFiles(request-&gt;priv-&gt;wkListener.get(), wkChosenFiles.get());
&gt; +    request-&gt;priv-&gt;handledRequest = true;

Should you also clear priv-&gt;selectedFiles here so that if you call webkit_file_chooser_request_get_selected_files, it&apos;s up to date?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:318
&gt; + * if any, in further requests over the same HTML Input Element.

Nit: Input -&gt; input

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:187
&gt; +    GtkWidget* dialog = gtk_file_chooser_dialog_new(allowsMultipleSelection ? _(&quot;Select Files for Upload&quot;) : _(&quot;Select File for Upload&quot;),

I think you should omit the phrase &quot;for Upload&quot; here as this file may not necessarily be uploaded.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:195
&gt; +    GtkFileFilter* filter = webkit_file_chooser_request_get_mime_types_filter(request);
&gt; +    if (filter)

This can be expressed as:
if (GtkFileFilter* filter = webkit_file_chooser_request_get_mime_types_filter(request))
        gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:201
&gt; +    const gchar* const* selectedFiles = webkit_file_chooser_request_get_selected_files(request);
&gt; +    if (selectedFiles)
&gt; +        gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(dialog), selectedFiles[0]);

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp:183
&gt; +void WebViewTest::mouseButtonClick(int x, int y, unsigned int button, unsigned int mouseModifiers)

It&apos;s better to name these verb first: clickMouseButton

&gt; Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp:189
&gt; +void WebViewTest::mouseButtonEvent(GdkEventType eventType, int x, int y, unsigned int button, unsigned int mouseModifiers)

executeMouseEvent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574694</commentid>
    <comment_count>44</comment_count>
      <attachid>127870</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-09 00:17:17 -0800</bug_when>
    <thetext>Comment on attachment 127870
Patch Proposal + Unit Tests + Docs

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:157
&gt; +     * &quot;media types&quot; the file chooser dialog should handle. See

why media types?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:212
&gt; + * Get the list of &quot;media types&quot; the file chooser dialog should

I guess this is &quot;mime types&quot;, not &quot;media types&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:250
&gt; + * up with the list of media types as returned by

media types again?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:251
&gt; + * webkit_file_chooser_request_get_mime_types.

webkit_file_chooser_request_get_mime_types()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574877</commentid>
    <comment_count>45</comment_count>
      <attachid>127870</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-03-09 07:09:31 -0800</bug_when>
    <thetext>Comment on attachment 127870
Patch Proposal + Unit Tests + Docs

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

Thanks for the review, Carlos and Martin. I&apos;m attaching a new patch soon addressing all the issues. In the meanwhile, see my comments below...

&gt;&gt; Source/JavaScriptCore/ChangeLog:8
&gt;&gt; +        Handle the GSList type in GOwnPtr, by calling g_ptr_array_ref and
&gt; 
&gt; This line seems inaccurate. I think what you mean here is:
&gt; 
&gt; Handle the GPtrArray type in GRefPtr...

You&apos;re obviously right :-)

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:54
&gt;&gt; + * In case the client application do not wish to handle this signal,
&gt; 
&gt; Nit: do not -&gt; does not

Fixed

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:157
&gt;&gt; +     * &quot;media types&quot; the file chooser dialog should handle. See
&gt; 
&gt; why media types?

Becauses I&apos;m using the format specified by RFC 2046, and they use the term &quot;media types&quot; there.

From http://www.ietf.org/rfc/rfc2046.txt:

   &quot;&quot;&quot;
   Multipurpose Internet Mail Extensions
           (MIME) Part Two:
                 Media Types
                      [...]
   &quot;&quot;&quot;

Anyway, in this specific part (documenting a GObject property to be used by a file chooser), and considering what I used in the @nick param, I guess it would be better to change it to &apos;mime types&apos;.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:197
&gt;&gt; + * which depends on the HTML Input element having a &apos;multiple&apos;
&gt; 
&gt; Nit. Input -&gt; input

Fixed

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:212
&gt;&gt; + * Get the list of &quot;media types&quot; the file chooser dialog should
&gt; 
&gt; I guess this is &quot;mime types&quot;, not &quot;media types&quot;

See my comment above on the rationale behind using that term. Anyway, I agree it&apos;s better to change it for the API.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:214
&gt;&gt; + * the value of the &apos;accept&apos; attribute for HTML Input elements.
&gt; 
&gt; Nice doc.

Thank you!

However, as per the answers to Carlos&apos;s review, I will change this paragraph to say &quot;MIME types&quot; instead and  clarify it maps to &quot;media types&quot; in the RFC: 

  ...
    * Get the list of MIME types the file chooser dialog should handle,
    * in the format specified in RFC 2046 for &quot;media types&quot;. Its contents
    * depend on the value of the &apos;accept&apos; attribute for HTML input
    * elements.
   ...

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:219
&gt;&gt; + * by WebKitGTK+ and should not be modified or freed.
&gt; 
&gt; Perhaps it would be good to mention specifically that if there are no mime-types listed, all of them should be accepted.

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:242
&gt;&gt; +    return reinterpret_cast&lt;gchar**&gt;(request-&gt;priv-&gt;mimeTypes-&gt;pdata);
&gt; 
&gt; Are you sure you cannot use a static_cast here?

It seems I need reinterpret_cast. This is the error the compiler is spitting:
    error: invalid static_cast from type ‘void**’ to type ‘gchar** {aka char**}’

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:250
&gt;&gt; + * up with the list of media types as returned by
&gt; 
&gt; media types again?

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:251
&gt;&gt; + * webkit_file_chooser_request_get_mime_types.
&gt; 
&gt; webkit_file_chooser_request_get_mime_types()

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:308
&gt;&gt; +    request-&gt;priv-&gt;handledRequest = true;
&gt; 
&gt; Should you also clear priv-&gt;selectedFiles here so that if you call webkit_file_chooser_request_get_selected_files, it&apos;s up to date?

I&apos;m not sure... I think we should not do anything in that regard, since the selected files for a given request is actually tied to the origin of the request (when it gets fired) not to the selection being done when handled by the application.

Thus, I would leave it this way, I think.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:318
&gt;&gt; + * if any, in further requests over the same HTML Input Element.
&gt; 
&gt; Nit: Input -&gt; input

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:187
&gt;&gt; +    GtkWidget* dialog = gtk_file_chooser_dialog_new(allowsMultipleSelection ? _(&quot;Select Files for Upload&quot;) : _(&quot;Select File for Upload&quot;),
&gt; 
&gt; I think you should omit the phrase &quot;for Upload&quot; here as this file may not necessarily be uploaded.

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:195
&gt;&gt; +    if (filter)
&gt; 
&gt; This can be expressed as:
&gt; if (GtkFileFilter* filter = webkit_file_chooser_request_get_mime_types_filter(request))
&gt;         gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:201
&gt;&gt; +        gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(dialog), selectedFiles[0]);
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp:183
&gt;&gt; +void WebViewTest::mouseButtonClick(int x, int y, unsigned int button, unsigned int mouseModifiers)
&gt; 
&gt; It&apos;s better to name these verb first: clickMouseButton

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp:189
&gt;&gt; +void WebViewTest::mouseButtonEvent(GdkEventType eventType, int x, int y, unsigned int button, unsigned int mouseModifiers)
&gt; 
&gt; executeMouseEvent

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574883</commentid>
    <comment_count>46</comment_count>
      <attachid>131037</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-03-09 07:22:48 -0800</bug_when>
    <thetext>Created attachment 131037
Patch Proposal + Unit Tests + Docs

...and here is the new patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574886</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-09 07:26:00 -0800</bug_when>
    <thetext>Attachment 131037 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
Source/JavaScriptCore/wtf/gobject/GRefPtr.h:211:  The parameter name &quot;ptr&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/wtf/gobject/GRefPtr.h:212:  The parameter name &quot;ptr&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:220:  Use 0 instead of NULL.  [readability/null] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 3 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574888</commentid>
    <comment_count>48</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-03-09 07:32:54 -0800</bug_when>
    <thetext>(In reply to comment #47)
&gt; Attachment 131037 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
&gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
&gt; Source/JavaScriptCore/wtf/gobject/GRefPtr.h:211:  The parameter name &quot;ptr&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/JavaScriptCore/wtf/gobject/GRefPtr.h:212:  The parameter name &quot;ptr&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I just did mimic the other declarations in that file. Should we change them all?

&gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h&quot;
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:220:  Use 0 instead of NULL.  [readability/null] [5]

It&apos;s a sentinel. I&apos;m not sure we can get rid of this NULL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574906</commentid>
    <comment_count>49</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-09 08:34:56 -0800</bug_when>
    <thetext>(In reply to comment #48)
&gt; (In reply to comment #47)
&gt; &gt; Attachment 131037 [details] [details] did not pass style-queue:
&gt; &gt; 
&gt; &gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
&gt; &gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
&gt; &gt; Source/JavaScriptCore/wtf/gobject/GRefPtr.h:211:  The parameter name &quot;ptr&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; &gt; Source/JavaScriptCore/wtf/gobject/GRefPtr.h:212:  The parameter name &quot;ptr&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; 
&gt; I just did mimic the other declarations in that file. Should we change them all?

You can just change the new ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574908</commentid>
    <comment_count>50</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-09 08:37:30 -0800</bug_when>
    <thetext>(In reply to comment #45)

&gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:308
&gt; &gt;&gt; +    request-&gt;priv-&gt;handledRequest = true;
&gt; &gt; 
&gt; &gt; Should you also clear priv-&gt;selectedFiles here so that if you call webkit_file_chooser_request_get_selected_files, it&apos;s up to date?
&gt; 
&gt; I&apos;m not sure... I think we should not do anything in that regard, since the selected files for a given request is actually tied to the origin of the request (when it gets fired) not to the selection being done when handled by the application.

I took a closer look at that code and I see why it&apos;s like that. It&apos;s probably good to be super explicit in the documentation for webkit_file_chooser_request_get_selected_files that it returns the previously selected files. In fact, perhaps it&apos;s better to call it webkit_file_chooser_request_get_previously_selected_files. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574977</commentid>
    <comment_count>51</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-03-09 10:12:11 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; [...]
&gt; &gt; I just did mimic the other declarations in that file. Should we change them all?
&gt; 
&gt; You can just change the new ones.

Ok. I&apos;ll do.

(In reply to comment #50)
&gt; (In reply to comment #45)
&gt; 
&gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:308
&gt; &gt; &gt;&gt; +    request-&gt;priv-&gt;handledRequest = true;
&gt; &gt; &gt; 
&gt; &gt; &gt; Should you also clear priv-&gt;selectedFiles here so that if you call webkit_file_chooser_request_get_selected_files, it&apos;s up to date?
&gt; &gt; 
&gt; &gt; I&apos;m not sure... I think we should not do anything in that regard, since the selected files for a given request 
&gt; &gt; is actually tied to the origin of the request (when it gets fired) not to the selection being done when 
&gt; &gt; handled by the application.
&gt; 
&gt; I took a closer look at that code and I see why it&apos;s like that. It&apos;s probably good to be super explicit in the 
&gt; documentation for webkit_file_chooser_request_get_selected_files that it returns the previously selected 
&gt; files. In fact, perhaps it&apos;s better to call it webkit_file_chooser_request_get_previously_selected_files. What 
&gt; do you think?

I&apos;m ok with being more explicit in the documentation about this, but I&apos;m not sure about the renaming. After all, the webkit_file_chooser_request_*() functions are all about the current request being fired, and once the dialog is closed the request is already handled and so you should not care anymore about the details of the WebKitFileChooserRequest object.

In other words, a typical workflow here would be like this:

  1. User clicks on a &apos;upload&apos; &lt;input type=&apos;file&apos;&gt; button
  2. The runOpenPanel stuff is triggered from WebCore, resuñting on calling to WebUIClient::runOpenPanel() in the UI Process
  3. The signal &apos;run-file-chooser&apos; signal is emitted from the WebKitWebView, with an instance of WebKitFileChooserRequest with the details of the event (selected files that might be already present, mime type filters to be applied)
  4. The application handles the signal, showing a dialog to the user so (s)he can select local files. The application might take into account, when creating that dialog the following info:
         - selected files in the request (they could pre-select them in the dialog)
         - accepted mime types (they could decide to filter other mime types out)
         - allows multiple selection (so that more than one file could be selected)
  5. The user makes a choice and closes the dialog, which would result on a call to webkit_file_chooser_request_choose_files() , or just cancels it (webkit_file_chooser_request_cancel()).
  6. The whole process finishes at this point, and nobody should care anymore about that WebKitFileChooserRequest object, that should get disposed from this point on.

Hence, my point is that as nobody will ever should call any webkit_file_chooser_request_get_* after step [5], so I don&apos;t see the point on renaming the function that way. Also, I&apos;m not 100% sure if there are other ways to the runOpenPanel function called with a list of &apos;selected files&apos;, other than having performed another selection previously (perhaps there&apos;s a way through JavaScript or some other mechanism), so calling it webkit_file_chooser_request_get_previously_selected_files() does not sound &apos;perfect&apos; to me....

So, wrapping up, my vote goes for keeping the name as it is now (so it reflect that you want the list of selected files associated to the current request) _and_ make an extra effort to properly explain what is it about in the documentation.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574993</commentid>
    <comment_count>52</comment_count>
      <attachid>131058</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-03-09 10:30:16 -0800</bug_when>
    <thetext>Created attachment 131058
Patch Proposal + Unit Tests + Docs

Attaching a new patch fixing the coding style issue in GRefPtr.h and explaining better the meaning of &apos;selected files&apos; in the documentation.

For ease of review, I paste here the diff between this patch related to that explanation:

@@ -168,7 +168,7 @@ static void webkit_file_chooser_request_class_init(WebKitFileChooserRequestClass
      * WebKitFileChooserRequest:selected-files:
      *
      * A %NULL-terminated array of strings containing the list of
-     * selected files currently associated to the request. See
+     * selected files associated to the current request. See
      * webkit_file_chooser_request_get_selected_files() for more details.
      */
     g_object_class_install_property(objectClass,
@@ -212,7 +212,9 @@ gboolean webkit_file_chooser_request_allows_multiple_selection(WebKitFileChooser
  * Get the list of MIME types the file chooser dialog should handle,
  * in the format specified in RFC 2046 for &quot;media types&quot;. Its contents
  * depend on the value of the &apos;accept&apos; attribute for HTML input
- * elements.
+ * elements. This function should normally be called before presenting
+ * the file chooser dialog to the user, to decide whether to allow the
+ * user to select multiple files at once or only one.
  *
  * Returns: (array zero-terminated=1) (transfer none): a
  * %NULL-terminated array of strings if a list of accepted MIME types
@@ -250,7 +252,10 @@ const gchar* const* webkit_file_chooser_request_get_mime_types(WebKitFileChooser
  *
  * Get the filter currently associated with the request, already set
  * up with the list of MIME types as returned by
- * webkit_file_chooser_request_get_mime_types().
+ * webkit_file_chooser_request_get_mime_types(). This function should
+ * normally be called before presenting the file chooser dialog to the
+ * user, to decide whether to apply a filter so the user would not be
+ * allowed to select files with other MIME types.
  *
  * Returns: (transfer none): a #GtkFileFilter if a list of accepted
  * MIME types is defined or %NULL otherwise. The returned object is
@@ -315,9 +320,16 @@ void webkit_file_chooser_request_choose_files(WebKitFileChooserRequest* request,
  * @request: a #WebKitFileChooserRequest
  *
  * Get the list of selected files currently associated to the
- * request. This list will normally be empty with the first
- * request and will contain the list of files previously selected,
- * if any, in further requests over the same HTML input Element.
+ * request. This list will normally be empty with the first request
+ * and will contain the list of files previously selected, if any, in
+ * further requests over the same HTML input Element. It&apos;s important
+ * to notice that this list won&apos;t change for the current request after
+ * making a new selection, since it does not represent the list of
+ * files being selected but those that might be associated to the
+ * request at the moment it gets triggered. Thus, this function should
+ * normally be called only before presenting the file chooser dialog
+ * to the user, probably to decide whether to perform some extra
+ * action, like getting those files in the list pre-selected.
  *
  * Returns: (array zero-terminated=1) (transfer none): a
  * %NULL-terminated array of strings if there are selected files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574994</commentid>
    <comment_count>53</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-09 10:32:36 -0800</bug_when>
    <thetext>Attachment 131058 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:220:  Use 0 instead of NULL.  [readability/null] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575015</commentid>
    <comment_count>54</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-09 11:04:22 -0800</bug_when>
    <thetext>(In reply to comment #52)

&gt;   * Get the list of selected files currently associated to the
&gt; - * request. This list will normally be empty with the first
&gt; - * request and will contain the list of files previously selected,
&gt; - * if any, in further requests over the same HTML input Element.
&gt; + * request. This list will normally be empty with the first request
&gt; + * and will contain the list of files previously selected, if any, in
&gt; + * further requests over the same HTML input Element. It&apos;s important
&gt; + * to notice that this list won&apos;t change for the current request after
&gt; + * making a new selection, since it does not represent the list of
&gt; + * files being selected but those that might be associated to the
&gt; + * request at the moment it gets triggered. Thus, this function should
&gt; + * normally be called only before presenting the file chooser dialog
&gt; + * to the user, probably to decide whether to perform some extra
&gt; + * action, like getting those files in the list pre-selected.

How about something a bit simpler. :)

Get the list of files previously selected when this request was
created. Typically for the first request, this list is empty. For instance, if files
are selected during one request and the user activates the input element
again, this method will return the files selected during the first round. Thus, calls
to webkit_file_chooser_request_choose_files() do not affect the return value
of this method.

Does it make sense to rename webkit_file_chooser_request_choose_files to webkit_file_chooser_request_select_files to make it consistent with webkit_file_chooser_request_get_selected_files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575310</commentid>
    <comment_count>55</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-03-09 15:53:13 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; [...]
&gt; How about something a bit simpler. :)
&gt; 
&gt; Get the list of files previously selected when this request was
&gt; created. Typically for the first request, this list is empty. For instance, if files
&gt; are selected during one request and the user activates the input element
&gt; again, this method will return the files selected during the first round. Thus, calls
&gt; to webkit_file_chooser_request_choose_files() do not affect the return value
&gt; of this method.

I can buy that :-)

&gt; Does it make sense to rename webkit_file_chooser_request_choose_files to 
&gt; webkit_file_chooser_request_select_files to make it consistent with 
&gt; webkit_file_chooser_request_get_selected_files?

Hmm... I already thought of this in the past (see comment #34) but a comment from Carlos (comment #35) made me reconsider this option and finally opt for not renaming the function that way. See comment #36.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575318</commentid>
    <comment_count>56</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-09 16:11:02 -0800</bug_when>
    <thetext>(In reply to comment #36)

&gt; So, perhaps it&apos;s better to keep the &apos;choose&apos; name in the API, to differentiate from what get_selected_files() returns: the list of files already selected in the _previous_ request, not in the current one.

Sorry, I missed this before. Consider that in one round you will &quot;choose&quot; some files and then in the next round they will have been &quot;selected.&quot; I guess it&apos;s a minor point, but are you truly opposed to the following?

webkit_file_chooser_request_choose_files
webkit_file_chooser_request_get_previously_chosen_files

or

webkit_file_chooser_request_select_files
webkit_file_chooser_request_get_previously_selected_files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575336</commentid>
    <comment_count>57</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-03-09 16:36:19 -0800</bug_when>
    <thetext>(In reply to comment #56)
&gt; (In reply to comment #36)
&gt; 
&gt; &gt; So, perhaps it&apos;s better to keep the &apos;choose&apos; name in the API, to differentiate from what get_selected_files() returns: the list of files already selected in the _previous_ request, not in the current one.
&gt; 
&gt; Sorry, I missed this before. Consider that in one round you will &quot;choose&quot; some files and then in the next round they will have been &quot;selected.&quot; I guess it&apos;s a minor point, but are you truly opposed to the following?
&gt; 
&gt; webkit_file_chooser_request_choose_files
&gt; webkit_file_chooser_request_get_previously_chosen_files
&gt; 
&gt; or
&gt; 
&gt; webkit_file_chooser_request_select_files
&gt; webkit_file_chooser_request_get_previously_selected_files

Hmm... No I think I can&apos;t say I&apos;m &quot;truly opposed&quot; to any of those either, while at the same time I&apos;m begininng to appreciate the consistency you&apos;re pursuing with those proposals :)

If I had to choose I think I kinda prefer the second proposal (select/previously_selected), but I don&apos;t have an strong opinion here either. I&apos;d like to hear Carlos&apos;s opinion as well to see if he opposes to this or not (as he wrote comment #35 he might have a saying on this). If he agrees, I think we would have just reached consensus here, and I would propose a new patch with the result of the discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575977</commentid>
    <comment_count>58</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-12 00:54:11 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; (In reply to comment #56)
&gt; &gt; (In reply to comment #36)
&gt; &gt; 
&gt; &gt; &gt; So, perhaps it&apos;s better to keep the &apos;choose&apos; name in the API, to differentiate from what get_selected_files() returns: the list of files already selected in the _previous_ request, not in the current one.
&gt; &gt; 
&gt; &gt; Sorry, I missed this before. Consider that in one round you will &quot;choose&quot; some files and then in the next round they will have been &quot;selected.&quot; I guess it&apos;s a minor point, but are you truly opposed to the following?
&gt; &gt; 
&gt; &gt; webkit_file_chooser_request_choose_files
&gt; &gt; webkit_file_chooser_request_get_previously_chosen_files
&gt; &gt; 
&gt; &gt; or
&gt; &gt; 
&gt; &gt; webkit_file_chooser_request_select_files
&gt; &gt; webkit_file_chooser_request_get_previously_selected_files
&gt; 
&gt; Hmm... No I think I can&apos;t say I&apos;m &quot;truly opposed&quot; to any of those either, while at the same time I&apos;m begininng to appreciate the consistency you&apos;re pursuing with those proposals :)
&gt; 
&gt; If I had to choose I think I kinda prefer the second proposal (select/previously_selected), but I don&apos;t have an strong opinion here either. I&apos;d like to hear Carlos&apos;s opinion as well to see if he opposes to this or not (as he wrote comment #35 he might have a saying on this). If he agrees, I think we would have just reached consensus here, and I would propose a new patch with the result of the discussion.

selected files refers to files that appear selected in the file chooser, having the same meaning than gtk_file_chooser_select_*(), right? choosen files are the files finally choosen by the user, they can be different than selected files if the user changed the selection, or if the user cancelled the dialog. So they are different things, and that&apos;s why file chooser doesn&apos;t have a get_selected_* API, but get_*(). So, I still find more clear to use selected and choosen, they don&apos;t have to be consistent because they are not the same thing. Maybe we could use preselected to make it a bit clearer, but choosen files are not selected files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575987</commentid>
    <comment_count>59</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-03-12 01:25:22 -0700</bug_when>
    <thetext>(In reply to comment #58)
&gt; [...]
&gt; selected files refers to files that appear selected in the file chooser, having the same meaning than
&gt; gtk_file_chooser_select_*(), right? choosen files are the files finally choosen by the user, they can
&gt; be different than selected files if the user changed the selection, or if the user cancelled the dialog.
&gt; So they are different things, and that&apos;s why file chooser doesn&apos;t have a get_selected_* API, but
&gt; get_*(). So, I still find more clear to use selected and choosen, they don&apos;t have to be consistent
&gt; because they are not the same thing. Maybe we could use preselected to make it a bit clearer, but
&gt; choosen files are not selected files.

Good point. So that would leave us with leaving webkit_file_chooser_request_choose_files() and renaming the other one to something like webkit_file_chooser_request_get_previously_selected_files(), as Martin was suggesting in comment #50.

Up to this point I&apos;m convinced that could be a good solution, so if Martin agrees I&apos;ll change the patch to reflect that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576038</commentid>
    <comment_count>60</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-12 03:03:52 -0700</bug_when>
    <thetext>Sorry, I had misunderstood what selected files were. Mario explained to me that selected files are the ones selected by the user on a previous request, so in that case selected files and choosen files are actually the same. As I said, if select_files modifies selected_files, then it makes sense to be consistent, and it does indeed. So, either choose_files()/get_chosen_files() or select_files()/get_selected_files() would be ok for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576065</commentid>
    <comment_count>61</comment_count>
      <attachid>131058</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-12 04:36:38 -0700</bug_when>
    <thetext>Comment on attachment 131058
Patch Proposal + Unit Tests + Docs

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

&gt; Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp:211
&gt; +void WebViewTest::executeMouseButtonEvent(GdkEventType eventType, int x, int y, unsigned int button, unsigned int mouseModifiers)

I would call this doMouseButtonEvent, events are not executed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588847</commentid>
    <comment_count>62</comment_count>
      <attachid>134053</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-03-27 06:56:35 -0700</bug_when>
    <thetext>Created attachment 134053
Patch Proposal + Unit Tests + Docs

After some time has passed, and in order to help moving things forward I&apos;m now attaching a new patch with the following changes:

* Renamed functions to follow the second one of Martin&apos;s suggestions in comment #58, which I think Carlos is also in favor of right now (so do I):
     webkit_file_chooser_request_select_files
     webkit_file_chooser_request_get_previously_selected_files

* Renamed executeMouseButtonEvent to doMouseButtonEvent, as per Carlos&apos;s suggestion in comment #61 (it&apos;s a private function anyway)

* Patch rebased against the SVN trunk, which also meant that changes in good ol&apos; JavascriptCore/wtf are now in WTF/wtf.

Hope this helps on easing the review :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588851</commentid>
    <comment_count>63</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-27 07:05:14 -0700</bug_when>
    <thetext>Attachment 134053 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/go...&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:235:  Use 0 instead of NULL.  [readability/null] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605948</commentid>
    <comment_count>64</comment_count>
      <attachid>134053</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-04-19 14:53:15 -0700</bug_when>
    <thetext>Comment on attachment 134053
Patch Proposal + Unit Tests + Docs

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

80% through with the review, thought I&apos;d submit it =P

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:40
&gt; + * Whenever the user interacts with a &amp;lt;input type=&apos;file&apos; /&amp;gt; HTML

a -&gt; an for &lt;input, I think

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:46
&gt; + * specific platforms, which could prefer to use their own file
&gt; + * chooser dialog), WebKit will fire the

I&apos;d say just &quot;in some cases&quot; instead of talking about platforms and what they would prefer to do

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:50
&gt; + * details from the request (e.g. if multiple selection should be

from the -&gt; of the

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:52
&gt; + * allowed) and to cancel the request, in case nothing was finally
&gt; + * being selected.

s/was finally being selected/was selected/

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:202
&gt; +gboolean webkit_file_chooser_request_allows_multiple_selection(WebKitFileChooserRequest* request)

I kinda like this name. I&apos;ll go ahead and say I didn&apos;t read any discussion on this other than the one on the bug, but why don&apos;t we use get_select_multiple(), like GtkFileChooser&apos;s? This would have a &apos;get&apos; that&apos;s usually present in property getters (which this is), and would match GTK+&apos;s counterpart, which would make it easier to find for API users.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:255
&gt; + * Get the filter currently associated with the request, already set
&gt; + * up with the list of MIME types as returned by
&gt; + * webkit_file_chooser_request_get_mime_types(). This function should

This is a bit confusing. It made me think you&apos;d have to call get_mime_types(); Perhaps say just that this is a filter appropriate for handing directly to GtkFileChooser. The other method can still be mentioned, but like &apos;If you need the MIME types call blah()&apos;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:278
&gt; +    // Do not use adoptGRef here, since we want to sink the floating
&gt; +    // reference for the new instance of GtkFileFilter, so we make
&gt; +    // sure we keep the ownership during the lifetime of the request.
&gt; +    request-&gt;priv-&gt;filter = gtk_file_filter_new();

I may have missed some progress on GRefPtr, but how about having a specialization of GRefPtr like the one we added for ClutterActor, that sinks the ref?

http://trac.webkit.org/browser/trunk/Source/WebCore/platform/clutter/GRefPtrClutter.cpp#L27

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:308
&gt; +        // Make sure the file path is presented as an URI (escaped
&gt; +        // string, with the &apos;file://&apos; prefix) to WebCore otherwise the
&gt; +        // FileChooser won&apos;t actually choose it.

Would be great if we could use proper URIs - it should be possible to select files in non-local places, such as files in a different host through ssh.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:319
&gt; + * webkit_file_chooser_request_get_previously_selected_files:

previously is quite confusing I think, it sounds like it would allow you to get what files were selected in the past rather than what are set for the chooser currently, I would prefer it to just say get_selected_files(); I understand what is meant with previously, but I don&apos;t think it&apos;s important to have this distinction, it&apos;s pretty much implied for any property =)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:329
&gt; + * to notice that this list won&apos;t change for the current request after
&gt; + * making a new selection, since it does not represent the list of
&gt; + * files being selected but those that might be associated to the
&gt; + * request at the moment it gets triggered. Thus, this function should

I don&apos;t understand this. Does it meant that if you call this will not return the current selection after webkit_file_chooser_request_select_files() is called? This explanation seems like it&apos;s causing more confusion than it&apos;s solving to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606025</commentid>
    <comment_count>65</comment_count>
      <attachid>134053</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-19 15:44:09 -0700</bug_when>
    <thetext>Comment on attachment 134053
Patch Proposal + Unit Tests + Docs

So after talking with Gustavo I think we agree that the API should be a little different here. Instead of select_files not updated selected_files, we think that it should simply replace request-&gt;priv-&gt;selectedFiles with the selected files. That would turn webkit_file_chooser_request_get_previously_selected_files into webkit_file_chooser_request_get_selected_files and make the documentation and API a lot simpler. 

Suggestion for the documentation for webkit_file_chooser_request_get_selected_files: Initially, the return value of this method contains any files selected in previous file chooser requests for this HTML input element. Once webkit_file_chooser_request_select_files, the value will reflect whatever file are given. 

Otherwise, the patch looks great. Feel free to commit with this change or reupload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606506</commentid>
    <comment_count>66</comment_count>
      <attachid>138070</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-04-20 04:57:54 -0700</bug_when>
    <thetext>Created attachment 138070
Patch Proposal + Unit Tests + Docs

Thanks for the review to you all.

Now attaching a new patch addressing the issues you pointed out (or at least, most of them). Since I changed quite some things, I&apos;d like to get a final review over the patch, even if Martin already gave it r+.

See some comments inline.

(In reply to comment #64)
&gt; [...](From update of attachment 134053 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134053&amp;action=review
&gt; 
&gt; 80% through with the review, thought I&apos;d submit it =P
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:40
&gt; &gt; + * Whenever the user interacts with a &amp;lt;input type=&apos;file&apos; /&amp;gt; HTML
&gt; 
&gt; a -&gt; an for &lt;input, I think

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:46
&gt; &gt; + * specific platforms, which could prefer to use their own file
&gt; &gt; + * chooser dialog), WebKit will fire the
&gt; 
&gt; I&apos;d say just &quot;in some cases&quot; instead of talking about platforms and what they would prefer to do

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:50
&gt; &gt; + * details from the request (e.g. if multiple selection should be
&gt; 
&gt; from the -&gt; of the

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:52
&gt; &gt; + * allowed) and to cancel the request, in case nothing was finally
&gt; &gt; + * being selected.
&gt; 
&gt; s/was finally being selected/was selected/

Fixed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:202
&gt; &gt; +gboolean webkit_file_chooser_request_allows_multiple_selection(WebKitFileChooserRequest* request)
&gt; 
&gt; I kinda like this name. I&apos;ll go ahead and say I didn&apos;t read any discussion on this other than the one on the bug, but why don&apos;t we use get_select_multiple(), like GtkFileChooser&apos;s? This would have a &apos;get&apos; that&apos;s usually present in property getters (which this is), and would match GTK+&apos;s counterpart, which would make it easier to find for API users.

Fixed. I changed the method to *_get_select_multiple(), and also renamed the property to &apos;select-multiple&apos;, for consistency. I agree it&apos;s nicer to make it closer to GTK+&apos;s counter part.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:255
&gt; &gt; + * Get the filter currently associated with the request, already set
&gt; &gt; + * up with the list of MIME types as returned by
&gt; &gt; + * webkit_file_chooser_request_get_mime_types(). This function should
&gt; 
&gt; This is a bit confusing. It made me think you&apos;d have to call get_mime_types(); Perhaps say just that this is a filter appropriate for handing directly to GtkFileChooser. The other method can still be mentioned, but like &apos;If you need the MIME types call blah()&apos;

Fixed (hopefully is not confusing anymore).

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:278
&gt; &gt; +    // Do not use adoptGRef here, since we want to sink the floating
&gt; &gt; +    // reference for the new instance of GtkFileFilter, so we make
&gt; &gt; +    // sure we keep the ownership during the lifetime of the request.
&gt; &gt; +    request-&gt;priv-&gt;filter = gtk_file_filter_new();
&gt; 
&gt; I may have missed some progress on GRefPtr, but how about having a specialization of GRefPtr like the one we added for ClutterActor, that sinks the ref?
&gt; 
&gt; http://trac.webkit.org/browser/trunk/Source/WebCore/platform/clutter/GRefPtrClutter.cpp#L27

That&apos;s a good idea, I guess. But since it&apos;s an internal matter I would leave it for a different bug, if you don&apos;t mind, so we can now concentrate on landing this one.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:308
&gt; &gt; +        // Make sure the file path is presented as an URI (escaped
&gt; &gt; +        // string, with the &apos;file://&apos; prefix) to WebCore otherwise the
&gt; &gt; +        // FileChooser won&apos;t actually choose it.
&gt; 
&gt; Would be great if we could use proper URIs - it should be possible to select files in non-local places, such as files in a different host through ssh.

AFAICS, this limitation is not in the API we&apos;re defining but in WebCore, which doesn&apos;t accept any URI schema other than file:///. I agree it would be great to fix that too, but that would be also a different bug, IMHO.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:319
&gt; &gt; + * webkit_file_chooser_request_get_previously_selected_files:
&gt; 
&gt; previously is quite confusing I think, it sounds like it would allow you to get what files were selected in the past rather than what are set for the chooser currently, I would prefer it to just say get_selected_files(); I understand what is meant with previously, but I don&apos;t think it&apos;s important to have this distinction, it&apos;s pretty much implied for any property =)

Then it&apos;s not confusing, since you&apos;re understanding it perfectly right, since that&apos;s how it works in that patch :-)

However, based on Martin&apos;s last comment, I changed things in this new patch to work as it seems it would be better: reflecting also the current selection right after choosing filenames in the dialog. Thus this is no longer an issue, I think.

Also, as per those changes, the method got renamed to webkit_file_chooser_request_get_selected_files().

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:329
&gt; &gt; + * to notice that this list won&apos;t change for the current request after
&gt; &gt; + * making a new selection, since it does not represent the list of
&gt; &gt; + * files being selected but those that might be associated to the
&gt; &gt; + * request at the moment it gets triggered. Thus, this function should
&gt; 
&gt; I don&apos;t understand this. Does it meant that if you call this will not return the current selection after webkit_file_chooser_request_select_files() is called? This explanation seems like it&apos;s causing more confusion than it&apos;s solving to me.

You understood it perfectly right it seems :-)

Anyway, this is no longer like that in the current patch (see my previous comment).



(In reply to comment #65)
&gt; (From update of attachment 134053 [details])
&gt; So after talking with Gustavo I think we agree that the API should be a little different here. Instead of select_files not updated selected_files, we think that it should simply replace request-&gt;priv-&gt;selectedFiles with the selected files. That would turn webkit_file_chooser_request_get_previously_selected_files into webkit_file_chooser_request_get_selected_files and make the documentation and API a lot simpler. 

Fixed in this new patch.

&gt; Suggestion for the documentation for webkit_file_chooser_request_get_selected_files: Initially, the return value of this method contains any files selected in previous file chooser requests for this HTML input element. Once webkit_file_chooser_request_select_files, the value will reflect whatever file are given. 

Sounds good. Fixed.

&gt; Otherwise, the patch looks great. Feel free to commit with this change or reupload a new patch.

If you don&apos;t mind, I&apos;d prefer to have a last review on the patch, to make sure both you and Gustavo (and anyone else) are ok with the new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606509</commentid>
    <comment_count>67</comment_count>
      <attachid>138072</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-04-20 04:59:51 -0700</bug_when>
    <thetext>Created attachment 138072
Patch Proposal + Unit Tests + Docs

This is the good one</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606515</commentid>
    <comment_count>68</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-20 05:05:08 -0700</bug_when>
    <thetext>Attachment 138072 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/go...&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:239:  Use 0 instead of NULL.  [readability/null] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607744</commentid>
    <comment_count>69</comment_count>
      <attachid>138072</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-23 09:20:09 -0700</bug_when>
    <thetext>Comment on attachment 138072
Patch Proposal + Unit Tests + Docs

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.cpp:336
&gt; + * value will reflect whatever file are given.

whatever file are -&gt; whatever files are

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:228
&gt; +    static gboolean runFileChooser(WebKitWebView*, WebKitFileChooserRequest* request, UIClientTest* test)
&gt; +    {
&gt; +        test-&gt;assertObjectIsDeletedWhenTestFinishes(G_OBJECT(request));
&gt; +        test-&gt;m_fileChooserRequest = request;
&gt; +        g_main_loop_quit(test-&gt;m_mainLoop);
&gt; +        return TRUE;
&gt; +    }
&gt; +

I think it&apos;s good to keep separate unrelated test infrastructure. The UIClientTest class is huge already and I think we should instead be trying to be making it smaller and more modular. When landing this, do you think you can create a subclass of UIClientTest called FileChooserTest? It will look something like this:

class FileChooserTest: public UIClientTest {
public:
    MAKE_GLIB_TEST_FIXTURE(UIClientTest);

    FileChooserTest()
    {
        g_signal_connect(m_webView, &quot;run-file-chooser&quot;, G_CALLBACK(runFileChooser), this);
    }

     static gboolean runFileChooserCallback(WebKitWebView*, WebKitFileChooserRequest* request, UIClientTest* test)
    {
        test-&gt;runFileChooser(request);
        return TRUE;
    }

    void runFileChooser(WebKitFileChooserRequest* request)
    {
        assertObjectIsDeletedWhenTestFinishes(G_OBJECT(request));
        m_fileChooserRequest = request;
        g_main_loop_quit(test-&gt;m_mainLoop);
   }

     WebKitFileChooserRequest* clickMouseButtonAndWaitForFileChooserRequest(int x, int y)
    {
        clickMouseButton(x, y);
        g_main_loop_run(m_mainLoop);
        return m_fileChooserRequest.get();
    }

private:
    GRefPtr&lt;WebKitFileChooserRequest&gt; m_fileChooserRequest;
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612580</commentid>
    <comment_count>70</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-04-30 06:48:30 -0700</bug_when>
    <thetext>Committed r115627: &lt;http://trac.webkit.org/changeset/115627&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127102</attachid>
            <date>2012-02-14 19:22:20 -0800</date>
            <delta_ts>2012-02-15 07:07:32 -0800</delta_ts>
            <desc>Patch Proposal + Unit tests</desc>
            <filename>0001-Implement-runOpenPanel-in-WebKit2GTK.patch</filename>
            <type>text/plain</type>
            <size>37058</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBhMDRhYjQ4OGQ4MDZjZDEyOGZlMzk5YTA0MTkwYTE2YmI1MTE5NTZlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDEwIEZlYiAyMDEyIDEyOjEzOjU5ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gSW1wbGVtZW50IHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXQyR1RLKwoKLS0tCiBTb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogLi4uL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgfCAgMTc2ICsrKysr
KysrKysrKysrKysrKysrCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0LmggICB8ICAgNzcgKysrKysrKysrCiAuLi4vQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlLmggICAgICB8ICAgMjggKysrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAgICB8ICAgMTEgKy0KIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIHwgICA1NiArKysrKysKIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCAgIHwgICAgNSArCiAuLi4v
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCAgICAgICB8ICAgIDEgKwog
Li4uL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcCAgfCAgMTEx
ICsrKysrKysrKysrKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNw
cCAgICAgICAgfCAgIDMxICsrKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1dlYlZpZXdUZXN0LmggIHwgICAgNCArCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmggICAgICAgICB8ICAgIDMgKy0KIFRvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93
c2VyV2luZG93LmMgICAgICAgICAgICAgIHwgICAzNCArKysrCiAxMyBmaWxlcyBjaGFuZ2VkLCA1
MzkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmFtCmluZGV4IDNiOGU3YmQuLmNkM2E2YzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
LmFtCkBAIC05MCw2ICs5MCw3IEBAIGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJ
JChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuaCBcCiAJJChXZWJLaXQyKS9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCBcCisJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCBcCiAJ
JChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oIFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24u
aCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKQEAg
LTU0OCw2ICs1NDksOSBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJ
T05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAgXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbi5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZp
Z2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgXAorCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIFwKKwlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRl
LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lz
aW9uLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5
RGVjaXNpb24uaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9s
aWN5RGVjaXNpb25Qcml2YXRlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlMDY0MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5j
cHAKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dC5oIgorCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJPcGVuUGFuZWxQYXJhbWV0ZXJz
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OworCisvKioKKyAqIFNFQ1RJT046IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICogQFNo
b3J0X2Rlc2NyaXB0aW9uOiBBIHJlcXVlc3QgdG8gb3BlbiBhIGZpbGUgY2hvb3Nlci4KKyAqIEBU
aXRsZTogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJW
aWV3CisgKi8KK0dfREVGSU5FX1RZUEUoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LCB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBfV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tPcGVuUGFuZWxQYXJh
bWV0ZXJzUmVmPiB3a1BhcmFtZXRlcnM7CisgICAgV0tSZXRhaW5QdHI8V0tPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lclJlZj4gd2tMaXN0ZW5lcjsKKyAgICBHU0xpc3QqIGFjY2VwdGVkTWltZVR5cGVz
OworICAgIEdTTGlzdCogc2VsZWN0ZWRGaWxlczsKKyAgICBnYm9vbGVhbiBoYW5kbGVkUmVxdWVz
dDsKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9pbml0KFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICByZXF1ZXN0LT5wcml2ID0g
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHJlcXVlc3QsIFdFQktJVF9UWVBFX0ZJTEVfQ0hP
T1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKTsKKyAgICBuZXcg
KHJlcXVlc3QtPnByaXYpIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUoKTsKKyAgICBy
ZXF1ZXN0LT5wcml2LT5hY2NlcHRlZE1pbWVUeXBlcyA9IDA7CisgICAgcmVxdWVzdC0+cHJpdi0+
c2VsZWN0ZWRGaWxlcyA9IDA7CisgICAgcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QgPSBm
YWxzZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0RmluYWxpemUo
R09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVz
dCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmplY3QpOworCisgICAgLy8gTWFrZSBz
dXJlIHRoZSByZXF1ZXN0IGlzIGFsd2F5cyBoYW5kbGVkIGJlZm9yZSBmaW5hbGl6aW5nLgorICAg
IGlmICghcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QpCisgICAgICAgIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisKKyAgICBpZiAocmVxdWVzdC0+cHJp
di0+YWNjZXB0ZWRNaW1lVHlwZXMpCisgICAgICAgIGdfc2xpc3RfZnJlZV9mdWxsKHJlcXVlc3Qt
PnByaXYtPmFjY2VwdGVkTWltZVR5cGVzLCBnX2ZyZWUpOworCisgICAgaWYgKHJlcXVlc3QtPnBy
aXYtPnNlbGVjdGVkRmlsZXMpCisgICAgICAgIGdfc2xpc3RfZnJlZV9mdWxsKHJlcXVlc3QtPnBy
aXYtPnNlbGVjdGVkRmlsZXMsIGdfZnJlZSk7CisKKyAgICByZXF1ZXN0LT5wcml2LT5+V2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2xhc3NfaW5pdChXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIG9i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXplOwor
ICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1ZXN0Q2xhc3MsIHNpemVvZihXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKSk7Cit9CisKK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCogd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKFdLT3BlblBhbmVsUGFyYW1ldGVyc1Jl
ZiB3a1BhcmFtZXRlcnMsIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYgd2tMaXN0ZW5lcikK
K3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9D
SE9PU0VSX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFV
RVNULCBOVUxMKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+d2tQYXJhbWV0ZXJzID0gd2tQYXJhbWV0
ZXJzOworICAgIHJlcXVlc3QtPnByaXYtPndrTGlzdGVuZXIgPSB3a0xpc3RlbmVyOworICAgIHJl
dHVybiByZXF1ZXN0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
YWxsb3dzX211bHRpcGxlX2ZpbGVzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVF
U1QocmVxdWVzdCksIEZBTFNFKTsKKyAgICByZXR1cm4gV0tPcGVuUGFuZWxQYXJhbWV0ZXJzR2V0
QWxsb3dzTXVsdGlwbGVGaWxlcyhyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpOwor
fQorCitHU0xpc3QqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hY2NlcHRlZF9taW1lX3R5
cGVzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOwor
ICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IHdrTWltZVR5cGVzKFdLT3BlblBhbmVsUGFyYW1l
dGVyc0NvcHlBY2NlcHRlZE1JTUVUeXBlcyhyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0
KCkpKTsKKworICAgIEdTTGlzdCogcmV0dXJuTGlzdCA9IDA7CisgICAgc2l6ZV90IG51bU9mTWlt
ZVR5cGVzID0gV0tBcnJheUdldFNpemUod2tNaW1lVHlwZXMuZ2V0KCkpOworICAgIGlmIChudW1P
Zk1pbWVUeXBlcykgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mTWltZVR5
cGVzOyArK2kpIHsKKyAgICAgICAgICAgIFdLU3RyaW5nUmVmIHdrTWltZVR5cGUgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTWltZVR5cGVzLmdldCgp
LCBpKSk7CisgICAgICAgICAgICBTdHJpbmcgbWltZVR5cGVTdHJpbmcgPSB0b0ltcGwod2tNaW1l
VHlwZSktPnN0cmluZygpOworICAgICAgICAgICAgaWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybkxpc3QgPSBn
X3NsaXN0X3ByZXBlbmQocmV0dXJuTGlzdCwgZ19zdHJkdXAobWltZVR5cGVTdHJpbmcudXRmOCgp
LmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybkxpc3QgPSBnX3NsaXN0X3JldmVy
c2UocmV0dXJuTGlzdCk7CisgICAgfQorCisgICAgaWYgKHJlcXVlc3QtPnByaXYtPmFjY2VwdGVk
TWltZVR5cGVzKQorICAgICAgICBnX3NsaXN0X2ZyZWVfZnVsbChyZXF1ZXN0LT5wcml2LT5hY2Nl
cHRlZE1pbWVUeXBlcywgZ19mcmVlKTsKKworICAgIHJlcXVlc3QtPnByaXYtPmFjY2VwdGVkTWlt
ZVR5cGVzID0gcmV0dXJuTGlzdDsKKyAgICByZXR1cm4gcmV0dXJuTGlzdDsKK30KKworR3RrRmls
ZUZpbHRlciogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9maWxlX2ZpbHRlcihXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKworICAgIEdT
TGlzdCogYWNjZXB0ZWRNaW1lVHlwZXMod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FjY2Vw
dGVkX21pbWVfdHlwZXMocmVxdWVzdCkpOworICAgIGlmICghYWNjZXB0ZWRNaW1lVHlwZXMpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgR3RrRmlsZUZpbHRlciogcmV0dXJuRmlsdGVyID0gZ3Rr
X2ZpbGVfZmlsdGVyX25ldygpOworICAgIGZvciAoR1NMaXN0KiBpdGVtID0gYWNjZXB0ZWRNaW1l
VHlwZXM7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpCisgICAgICAgIGd0a19maWxl
X2ZpbHRlcl9hZGRfbWltZV90eXBlKHJldHVybkZpbHRlciwgc3RhdGljX2Nhc3Q8Z2NoYXIqPihp
dGVtLT5kYXRhKSk7CisKKyAgICByZXR1cm4gcmV0dXJuRmlsdGVyOworfQorCit2b2lkIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMoV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0KiByZXF1ZXN0LCBHU0xpc3QqIGZpbGVVUklzKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpKTsKKworICAgIFdLUmV0YWlu
UHRyPFdLTXV0YWJsZUFycmF5UmVmPiB3a1NlbGVjdGVkVVJJcyhBZG9wdFdLLCBXS011dGFibGVB
cnJheUNyZWF0ZSgpKTsKKyAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGZpbGVVUklzIDsgaXRlbSA7
IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgaWYgKCFpdGVtLT5kYXRhKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VS
TChBZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxnY2hhcio+
KGl0ZW0tPmRhdGEpKSk7CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHdrU2VsZWN0ZWRVUklz
LmdldCgpLCB3a1VSTC5nZXQoKSk7CisgICAgfQorCisgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lckNob29zZUZpbGVzKHJlcXVlc3QtPnByaXYtPndrTGlzdGVuZXIuZ2V0KCksIHdrU2VsZWN0
ZWRVUklzLmdldCgpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7
Cit9CisKK0dTTGlzdCogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdGVkX2ZpbGVz
KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworCisg
ICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0ZWRGaWxlTmFtZXMgPSB0b0ltcGwocmVxdWVzdC0+cHJp
di0+d2tQYXJhbWV0ZXJzLmdldCgpKS0+c2VsZWN0ZWRGaWxlTmFtZXMoKTsKKworICAgIEdTTGlz
dCogcmV0dXJuTGlzdCA9IDA7CisgICAgc2l6ZV90IG51bU9mRmlsZXMgPSBzZWxlY3RlZEZpbGVO
YW1lcy5zaXplKCk7CisgICAgaWYgKG51bU9mRmlsZXMpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1PZkZpbGVzOyArK2kpCisgICAgICAgICAgICByZXR1cm5MaXN0ID0gZ19z
bGlzdF9wcmVwZW5kKHJldHVybkxpc3QsIGdfc3RyZHVwKHNlbGVjdGVkRmlsZU5hbWVzW2ldLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuTGlzdCA9IGdfc2xpc3RfcmV2ZXJzZShyZXR1
cm5MaXN0KTsKKyAgICB9CisKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcykK
KyAgICAgICAgZ19zbGlzdF9mcmVlX2Z1bGwocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcywg
Z19mcmVlKTsKKworICAgIHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMgPSByZXR1cm5MaXN0
OworICAgIHJldHVybiByZXR1cm5MaXN0OworfQorCit2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9jYW5jZWwoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3Qp
KTsKKyAgICBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyQ2FuY2VsKHJlcXVlc3QtPnByaXYtPndr
TGlzdGVuZXIuZ2V0KCkpOworICAgIHJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0ID0gdHJ1
ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uY2M4ZGZlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
Ml9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJP
bmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRp
ZgorCisjaWZuZGVmIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdF9oCisjZGVmaW5lIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdF9oCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
VFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCAgICAgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNU
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QpKQor
I2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JF
UVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKSkKKyNkZWZpbmUg
V0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKSkK
KyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9S
RVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgICAgICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyAgIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdFByaXZhdGUgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZTsKKworc3Ry
dWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgeworICAgIEdPYmplY3QgcGFyZW50OworCisg
ICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSAq
cHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MgeworICAg
IEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUgICAgICAgICAgICAgICh2b2lkKTsKKwor
V0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19t
dWx0aXBsZV9maWxlcyAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Kik7CisKK1dFQktJVF9BUEkg
R1NMaXN0Kgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FjY2VwdGVkX21pbWVfdHlwZXMg
ICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Kik7CisKK1dFQktJVF9BUEkgR3RrRmlsZUZpbHRl
cioKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfZmlsZV9maWx0ZXIgICAgICAgKFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdCopOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMgICAgICAgICAgKFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCosIEdTTGlzdCopOworCitXRUJLSVRfQVBJIEdTTGlzdCoKK3dlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9zZWxlY3RlZF9maWxlcyAgICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCopOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9j
YW5jZWwgICAgICAgICAgICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCopOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODZiZDUwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4KKwor
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUo
V0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmLCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmKTsK
KworI2VuZGlmIC8vIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCmluZGV4
IGU3NjIxMmQuLjczM2UzZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTIwLDEyICsyMCwxNSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdFVJQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktp
dFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCIKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIApA
QCAtMTMxLDYgKzEzNCwxMiBAQCBzdGF0aWMgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChX
S1BhZ2VSZWYgcGFnZSwgV0tIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZQogICAgIHdlYmtpdFdl
YlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCBoaXRU
ZXN0UmVzdWx0LCB3a0V2ZW50TW9kaWZpZXJzVG9HZGtNb2RpZmllcnMobW9kaWZpZXJzKSk7CiB9
CiAKK3N0YXRpYyB2b2lkIHJ1bk9wZW5QYW5lbChXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBm
cmFtZSwgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHBhcmFtZXRlcnMsIFdLT3BlblBhbmVsUmVz
dWx0TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAg
R1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Vi
a2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKHBhcmFtZXRlcnMsIGxpc3RlbmVyKSk7CisgICAg
d2Via2l0V2ViVmlld01ha2VGaWxlQ2hvb3NlclJlcXVlc3QoV0VCS0lUX1dFQl9WSUVXKGNsaWVu
dEluZm8pLCByZXF1ZXN0LmdldCgpKTsKK30KKwogdm9pZCBhdHRhY2hVSUNsaWVudFRvVmlldyhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIFdLUGFnZVVJQ2xpZW50IHdrVUlDbGllbnQg
PSB7CkBAIC0xNjQsNyArMTczLDcgQEAgdm9pZCBhdHRhY2hVSUNsaWVudFRvVmlldyhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3KQogICAgICAgICAwLCAvLyBkaWREcmF3CiAgICAgICAgIDAsIC8vIHBh
Z2VEaWRTY3JvbGwKICAgICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1b3RhCi0gICAgICAg
IDAsIC8vIHJ1bk9wZW5QYW5lbAorICAgICAgICBydW5PcGVuUGFuZWwsCiAgICAgICAgIDAsIC8v
IGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKICAgICAgICAgMCwg
Ly8gaGVhZGVySGVpZ2h0CiAgICAgICAgIDAsIC8vIGZvb3RlckhlaWdodApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCBhZjc5
OTM1Li5hMWQyMGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtNTksNiArNTksNyBAQCBlbnVtIHsKICAgICBTQ1JJUFRf
UFJPTVBULAogCiAgICAgREVDSURFX1BPTElDWSwKKyAgICBSVU5fRklMRV9DSE9PU0VSLAogCiAg
ICAgTU9VU0VfVEFSR0VUX0NIQU5HRUQsCiAKQEAgLTE2MCw2ICsxNjEsNDMgQEAgc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdEZWNpZGVQb2xpY3koV2ViS2l0V2ViVmlldyosIFdlYktpdFBv
bGljeURlY2lzaW9uKgogICAgIHJldHVybiBUUlVFOwogfQogCitzdGF0aWMgdm9pZCBmaWxlQ2hv
b3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrRGlhbG9nKiBkaWFsb2csIGdpbnQgcmVzcG9u
c2VJRCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEdSZWZQdHI8
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBhZG9wdGVkUmVxdWVzdCA9IGFkb3B0R1JlZihyZXF1
ZXN0KTsKKyAgICBpZiAocmVzcG9uc2VJRCA9PSBHVEtfUkVTUE9OU0VfQUNDRVBUKSB7CisgICAg
ICAgIEdTTGlzdCogZmlsZVVyaXMgPSBndGtfZmlsZV9jaG9vc2VyX2dldF91cmlzKEdUS19GSUxF
X0NIT09TRVIoZGlhbG9nKSk7CisgICAgICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9j
aG9vc2VfZmlsZXMoYWRvcHRlZFJlcXVlc3QuZ2V0KCksIGZpbGVVcmlzKTsKKyAgICAgICAgZ19z
bGlzdF9mcmVlX2Z1bGwoZmlsZVVyaXMsIGdfZnJlZSk7CisgICAgfSBlbHNlCisgICAgICAgIHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoYWRvcHRlZFJlcXVlc3QuZ2V0KCkpOwor
CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoZGlhbG9nKSk7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXIoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEd0a1dpZGdl
dCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lER0VUKHdlYlZpZXcp
KTsKKyAgICBpZiAoIXdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyh0b3BsZXZlbCkpCisg
ICAgICAgIHRvcGxldmVsID0gMDsKKworICAgIEd0a1dpZGdldCogZGlhbG9nID0gZ3RrX2ZpbGVf
Y2hvb3Nlcl9kaWFsb2dfbmV3KF8oIlVwbG9hZCBGaWxlIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPyBHVEtfV0lORE9XKHRv
cGxldmVsKSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fT1BFTiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfQ0FOQ0VMLCBHVEtf
UkVTUE9OU0VfQ0FOQ0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdUS19TVE9DS19PUEVOLCBHVEtfUkVTUE9OU0VfQUNDRVBULAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisg
ICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9maWxlX2ZpbHRlcihyZXF1ZXN0KTsKKyAgICBpZiAoZmlsdGVyKQorICAgICAgICBndGtfZmls
ZV9jaG9vc2VyX3NldF9maWx0ZXIoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBmaWx0ZXIpOwor
ICAgIGd0a19maWxlX2Nob29zZXJfc2V0X3NlbGVjdF9tdWx0aXBsZShHVEtfRklMRV9DSE9PU0VS
KGRpYWxvZyksIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfZmls
ZXMocmVxdWVzdCkpOworCisgICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2csICJyZXNwb25zZSIs
IEdfQ0FMTEJBQ0soZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKSwgZ19vYmplY3Rf
cmVmKHJlcXVlc3QpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsKKworICAgIHJldHVy
biBUUlVFOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVj
dCogb2JqZWN0KQogewogICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFy
ZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCkBAIC0yNjMsNiArMzAxLDcgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xh
c3MpCiAgICAgd2ViVmlld0NsYXNzLT5zY3JpcHRfY29uZmlybSA9IHdlYmtpdFdlYlZpZXdTY3Jp
cHRDb25maXJtOwogICAgIHdlYlZpZXdDbGFzcy0+c2NyaXB0X3Byb21wdCA9IHdlYmtpdFdlYlZp
ZXdTY3JpcHRQcm9tcHQ7CiAgICAgd2ViVmlld0NsYXNzLT5kZWNpZGVfcG9saWN5ID0gd2Via2l0
V2ViVmlld0RlY2lkZVBvbGljeTsKKyAgICB3ZWJWaWV3Q2xhc3MtPnJ1bl9maWxlX2Nob29zZXIg
PSB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXI7CiAKICAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUod2ViVmlld0NsYXNzLCBzaXplb2YoV2ViS2l0V2ViVmlld1ByaXZhdGUpKTsKIApAQCAt
NjIyLDYgKzY2MSwxNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChX
ZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTiwKICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9U
WVBFX1BPTElDWV9ERUNJU0lPTl9UWVBFKTsKIAorICAgIC8qIFRPRE86IERlc2NyaWJlIHRoZSBz
aWduYWwuICovCisgICAgc2lnbmFsc1tSVU5fRklMRV9DSE9PU0VSXSA9CisgICAgICAgIGdfc2ln
bmFsX25ldygicnVuLWZpbGUtY2hvb3NlciIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxf
UlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2Vi
Vmlld0NsYXNzLCBydW5fZmlsZV9jaG9vc2VyKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2ln
bmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRhICovLAor
ICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsIC8qIG51bWJlciBvZiBwYXJhbWV0
ZXJzICovCisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVR
VUVTVCk7CisKICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3Ojptb3VzZS10YXJnZXQtY2hh
bmdlZDoKICAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUg
c2lnbmFsIGlzIGVtaXR0ZWQKQEAgLTc3MSw2ICs4MjEsMTIgQEAgdm9pZCB3ZWJraXRXZWJWaWV3
TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdLSGl0VGVzdFJlc3Vs
dFJlZgogICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tNT1VTRV9UQVJHRVRfQ0hB
TkdFRF0sIDAsIHByaXYtPm1vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdC5nZXQoKSwgbW9kaWZpZXJz
KTsKIH0KIAordm9pZCB3ZWJraXRXZWJWaWV3TWFrZUZpbGVDaG9vc2VyUmVxdWVzdChXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7Cisg
ICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWdu
YWxzW1JVTl9GSUxFX0NIT09TRVJdLCAwLCByZXF1ZXN0LCAmcmV0dXJuVmFsdWUpOworfQorCiAv
KioKICAqIHdlYmtpdF93ZWJfdmlld19uZXc6CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDAwODFiZTMuLmY4Y2RiOTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFBvbGljeURlY2lzaW9u
Lmg+CiAKIEdfQkVHSU5fREVDTFMKQEAgLTE0MCw2ICsxNDEsMTAgQEAgc3RydWN0IF9XZWJLaXRX
ZWJWaWV3Q2xhc3MgewogICAgIGdib29sZWFuICAgKCogZGVjaWRlX3BvbGljeSkgICAgICAgIChX
ZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb24gICAgICAqZGVjaXNpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFBvbGljeURl
Y2lzaW9uVHlwZSAgdHlwZSk7CisKKyAgICBnYm9vbGVhbiAgICgqIHJ1bl9maWxlX2Nob29zZXIp
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAgKnJl
cXVlc3QpOworCiAgICAgdm9pZCAgICAgICAoKiBtb3VzZV90YXJnZXRfY2hhbmdlZCkgKFdlYktp
dFdlYlZpZXcgICAgICAgICAgICAqd2ViX3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQgICAgICAqaGl0X3Rlc3RfcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAg
ICAgICAgICAgICAgIG1vZGlmaWVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCA3NjhhNjIwLi5iMzE2
ZDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTQzLDYgKzQzLDcgQEAgdm9pZCB3ZWJraXRXZWJWaWV3
UnVuSmF2YVNjcmlwdEFsZXJ0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdl
KTsKIGJvb2wgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRDb25maXJtKFdlYktpdFdlYlZpZXcq
LCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKTsKIFdLU3RyaW5nUmVmIHdlYmtpdFdlYlZpZXdSdW5K
YXZhU2NyaXB0UHJvbXB0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlLCBj
b25zdCBDU3RyaW5nJiBkZWZhdWx0VGV4dCk7CiB2b2lkIHdlYmtpdFdlYlZpZXdNYWtlUG9saWN5
RGVjaXNpb24oV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSwgV2ViS2l0
UG9saWN5RGVjaXNpb24qKTsKK3ZvaWQgd2Via2l0V2ViVmlld01ha2VGaWxlQ2hvb3NlclJlcXVl
c3QoV2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCopOwogdm9pZCB3ZWJr
aXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqLCBXS0hpdFRlc3RSZXN1
bHRSZWYsIHVuc2lnbmVkIG1vZGlmaWVycyk7CiAKICNlbmRpZiAvLyBXZWJLaXRXZWJWaWV3UHJp
dmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKaW5kZXggNDdkYTk4ZS4uN2MxZmVkMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRXZWJWaWV3LmNwcApAQCAtMjI2LDYgKzIyNiwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBuZXdXZWJWaWV3OwogICAgIH0KIAorICAgIHN0YXRpYyBnYm9vbGVhbiBydW5G
aWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1
ZXN0LCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAgICAg
dGVzdC0+bV9maWxlQ2hvb3NlclJlcXVlc3QgPSByZXF1ZXN0OworICAgICAgICBnX21haW5fbG9v
cF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisK
ICAgICBzdGF0aWMgZ2Jvb2xlYW4gc2NyaXB0QWxlcnQoV2ViS2l0V2ViVmlldyosIGNvbnN0IGNo
YXIqIG1lc3NhZ2UsIFVJQ2xpZW50VGVzdCogdGVzdCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
dGVzdC0+bV9zY3JpcHRUeXBlKSB7CkBAIC0yODQsNiArMjkyLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3Nf
YXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRS
VUUpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIsIEdfQ0FM
TEJBQ0sodmlld0NyZWF0ZSksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyKSwgdGhp
cyk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LWFsZXJ0Iiwg
R19DQUxMQkFDSyhzY3JpcHRBbGVydCksIHRoaXMpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fd2ViVmlldywgInNjcmlwdC1jb25maXJtIiwgR19DQUxMQkFDSyhzY3JpcHRDb25maXJtKSwg
dGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LXByb21w
dCIsIEdfQ0FMTEJBQ0soc2NyaXB0UHJvbXB0KSwgdGhpcyk7CkBAIC0zMTIsMTIgKzMyMSwyMCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdC5nZXQo
KTsKICAgICB9CiAKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIG1vdXNlQnV0dG9uQ2xp
Y2tBbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KGludCB4LCBpbnQgeSkKKyAgICB7CisgICAg
ICAgIG1vdXNlQnV0dG9uQ2xpY2soeCwgeSk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIG1fZmlsZUNob29zZXJSZXF1ZXN0LmdldCgpOworICAg
IH0KKwogICAgIFZlY3RvcjxXZWJWaWV3RXZlbnRzPiBtX3dlYlZpZXdFdmVudHM7CiAgICAgU2Ny
aXB0VHlwZSBtX3NjcmlwdFR5cGU7CiAgICAgYm9vbCBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZDsK
ICAgICBXaW5kb3dQcm9wZXJ0aWVzIG1fd2luZG93UHJvcGVydGllczsKICAgICBIYXNoU2V0PFdU
Rjo6U3RyaW5nPiBtX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkOwogICAgIEdSZWZQdHI8V2ViS2l0
SGl0VGVzdFJlc3VsdD4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQ7CisgICAgR1JlZlB0cjxX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IG1fZmlsZUNob29zZXJSZXF1ZXN0OwogICAgIHVuc2ln
bmVkIGludCBtX21vdXNlVGFyZ2V0TW9kaWZpZXJzOwogfTsKIApAQCAtMzMzLDYgKzM1MCw5OSBA
QCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UoVUlDbGllbnRUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBV
SUNsaWVudFRlc3Q6OkNsb3NlKTsKIH0KIAorc3RhdGljIGdib29sZWFuIGNoZWNrTWltZVR5cGVG
b3JGaWx0ZXIoR3RrRmlsZUZpbHRlciogZmlsdGVyLCBjb25zdCBnY2hhciogbWltZVR5cGUpCit7
CisgICAgR3RrRmlsZUZpbHRlckluZm8gZmlsdGVySW5mbzsKKyAgICBmaWx0ZXJJbmZvLmNvbnRh
aW5zID0gR1RLX0ZJTEVfRklMVEVSX01JTUVfVFlQRTsKKyAgICBmaWx0ZXJJbmZvLm1pbWVfdHlw
ZSA9IG1pbWVUeXBlOworICAgIHJldHVybiBndGtfZmlsZV9maWx0ZXJfZmlsdGVyKGZpbHRlciwg
JmZpbHRlckluZm8pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVx
dWVzdChVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZp
bGVDaG9vc2VySFRNTEZvcm1hdCA9ICI8aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9u
OmFic29sdXRlO2xlZnQ6MDt0b3A6MDttYXJnaW46MDtwYWRkaW5nOjAnIHR5cGU9J2ZpbGUnICVz
Lz48L2JvZHk+PC9odG1sPiI7CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxv
d2VkLCBubyBNSU1FIGZpbHRlcmluZy4KKyAgICBHT3duUHRyPGNoYXI+IHNpbXBsZUZpbGVVcGxv
YWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICIiKSk7CisgICAg
dGVzdC0+bG9hZEh0bWwoc2ltcGxlRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDApOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCog
ZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+bW91c2VCdXR0b25DbGlja0FuZFdhaXRGb3JGaWxl
Q2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KSk7CisgICAg
R1NMaXN0KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWNjZXB0ZWRf
bWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMp
OworICAgIEdSZWZQdHI8R3RrRmlsZUZpbHRlcj4gZmlsdGVyKHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfZmlsZV9maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KSk7CisgICAgZ19hc3Nl
cnQoIWZpbHRlcik7CisgICAgR1NMaXN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19h
c3NlcnQoIXNlbGVjdGVkRmlsZXMpOworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9j
YW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMg
YWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgorICAg
IEdPd25QdHI8Y2hhcj4gbXVsdGlwbGVTZWxlY3Rpb25GaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9w
cmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAibXVsdGlwbGUiKSk7CisgICAgdGVzdC0+bG9h
ZEh0bWwobXVsdGlwbGVTZWxlY3Rpb25GaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVz
dC0+bW91c2VCdXR0b25DbGlja0FuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7Cisg
ICAgZ19hc3NlcnQod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9m
aWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKyAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfYWNjZXB0ZWRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwor
ICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfZmlsZV9maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fz
c2VydCghZmlsdGVyKTsKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQo
IXNlbGVjdGVkRmlsZXMpOworCisgICAgLy8gU2VsZWN0IHNvbWUgZmlsZXMuCisgICAgR1NMaXN0
KiBmaWxlc1RvU2VsZWN0ID0gMDsKKyAgICBmaWxlc1RvU2VsZWN0ID0gZ19zbGlzdF9hcHBlbmQo
ZmlsZXNUb1NlbGVjdCwgZ19maWxlbmFtZV90b191cmkoIi9mb28vYmFyL2Jhei8xIiwgMCwgMCkp
OworICAgIGZpbGVzVG9TZWxlY3QgPSBnX3NsaXN0X2FwcGVuZChmaWxlc1RvU2VsZWN0LCBnX2Zp
bGVuYW1lX3RvX3VyaSgiL2Zvby9iYXIvYmF6LzIiLCAwLCAwKSk7CisgICAgZmlsZXNUb1NlbGVj
dCA9IGdfc2xpc3RfYXBwZW5kKGZpbGVzVG9TZWxlY3QsIGdfZmlsZW5hbWVfdG9fdXJpKCIvZm9v
L2Jhci9iYXovMyIsIDAsIDApKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zbGlzdF9sZW5ndGgo
ZmlsZXNUb1NlbGVjdCksID09LCAzKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Y2hvb3NlX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7CisgICAgZ19z
bGlzdF9mcmVlX2Z1bGwoZmlsZXNUb1NlbGVjdCwgZ19mcmVlKTsKKworICAgIC8vIFBlcmZvcm0g
YW5vdGhlciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCisg
ICAgLy8gaW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3
IHJlcXVlc3QuCisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+bW91c2VCdXR0b25DbGlj
a0FuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgc2VsZWN0ZWRGaWxlcyA9
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJl
cXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAgIEdTTGlzdCogc2VsZWN0
ZWRGaWxlID0gc2VsZWN0ZWRGaWxlczsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8
Z2NoYXIqPihzZWxlY3RlZEZpbGUtPmRhdGEpLCA9PSwgIi9mb28vYmFyL2Jhei8xIik7CisgICAg
c2VsZWN0ZWRGaWxlID0gZ19zbGlzdF9uZXh0KHNlbGVjdGVkRmlsZSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHN0YXRpY19jYXN0PGdjaGFyKj4oc2VsZWN0ZWRGaWxlLT5kYXRhKSwgPT0sICIvZm9v
L2Jhci9iYXovMiIpOworICAgIHNlbGVjdGVkRmlsZSA9IGdfc2xpc3RfbmV4dChzZWxlY3RlZEZp
bGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxnY2hhcio+KHNlbGVjdGVkRmls
ZS0+ZGF0YSksID09LCAiL2Zvby9iYXIvYmF6LzMiKTsKKyAgICBzZWxlY3RlZEZpbGUgPSBnX3Ns
aXN0X25leHQoc2VsZWN0ZWRGaWxlKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlKTsKKyAg
ICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7
CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBvbmx5IGFjY2VwdCBp
bWFnZXMsIGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4uCisgICAgR093blB0cjxjaGFyPiBtaW1lRmls
dGVyZWRGaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0
LCAiYWNjZXB0PSdhdWRpby8qLHZpZGVvLyosaW1hZ2UvKiciKSk7CisgICAgdGVzdC0+bG9hZEh0
bWwobWltZUZpbHRlcmVkRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPm1vdXNl
QnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX2ZpbGVzKGZp
bGVDaG9vc2VyUmVxdWVzdCkpOworICAgIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9hY2NlcHRlZF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19h
c3NlcnQobWltZVR5cGVzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zbGlzdF9sZW5ndGgobWlt
ZVR5cGVzKSwgPT0sIDMpOworCisgICAgR1NMaXN0KiBtaW1lVHlwZSA9IG1pbWVUeXBlczsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihtaW1lVHlwZS0+ZGF0YSksID09
LCAiYXVkaW8vKiIpOworICAgIG1pbWVUeXBlID0gZ19zbGlzdF9uZXh0KG1pbWVUeXBlKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihtaW1lVHlwZS0+ZGF0YSksID09
LCAidmlkZW8vKiIpOworICAgIG1pbWVUeXBlID0gZ19zbGlzdF9uZXh0KG1pbWVUeXBlKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihtaW1lVHlwZS0+ZGF0YSksID09
LCAiaW1hZ2UvKiIpOworICAgIG1pbWVUeXBlID0gZ19zbGlzdF9uZXh0KG1pbWVUeXBlKTsKKyAg
ICBnX2Fzc2VydCghbWltZVR5cGUpOworCisgICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9maWxlX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNz
ZXJ0KEdUS19JU19GSUxFX0ZJTFRFUihmaWx0ZXIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydChjaGVj
a01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlci5nZXQoKSwgImF1ZGlvLyoiKSk7CisgICAgZ19hc3Nl
cnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIuZ2V0KCksICJ2aWRlby8qIikpOworICAg
IGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLmdldCgpLCAiaW1hZ2UvKiIp
KTsKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVj
dGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmls
ZXMpOworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKK30KKwogc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyhV
SUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGh0bWxPbkxvYWRGb3JtYXQgPSAiPGh0bWw+PGJvZHkgb25Mb2FkPVwiJXNcIj48L2JvZHk+
PC9odG1sPiI7CkBAIC00NTYsNiArNTY2LDcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIFdlYlZp
ZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2V0dGluZ3MiLCB0ZXN0V2ViVmlld1NldHRp
bmdzKTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInJlcGxhY2UtY29u
dGVudCIsIHRlc3RXZWJWaWV3UmVwbGFjZUNvbnRlbnQpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgImNyZWF0ZS1yZWFkeS1jbG9zZSIsIHRlc3RXZWJWaWV3Q3JlYXRl
UmVhZHlDbG9zZSk7CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZmls
ZS1jaG9vc2VyLXJlcXVlc3QiLCB0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdCk7CiAgICAg
VUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiamF2YXNjcmlwdC1kaWFsb2dzIiwg
dGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAid2luZG93LXByb3BlcnRpZXMiLCB0ZXN0V2ViVmlld1dpbmRvd1Byb3Bl
cnRpZXMpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm1vdXNlLXRh
cmdldCIsIHRlc3RXZWJWaWV3TW91c2VUYXJnZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCmluZGV4IDAwZDNiM2Uu
LjI5YzUzZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKQEAgLTE4MCwzICsxODAsMzQgQEAgdm9pZCBXZWJWaWV3
VGVzdDo6bW91c2VNb3ZlVG8oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmll
cnMpCiAgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOwogfQogCit2b2lkIFdlYlZp
ZXdUZXN0Ojptb3VzZUJ1dHRvbkNsaWNrKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRv
biwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzKQoreworICAgIG1vdXNlQnV0dG9uRXZlbnQo
R0RLX0JVVFRPTl9QUkVTUywgeCwgeSwgYnV0dG9uLCBtb3VzZU1vZGlmaWVycyk7CisgICAgbW91
c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1JFTEVBU0UsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2Rp
ZmllcnMpOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojptb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50
VHlwZSBldmVudFR5cGUsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWdu
ZWQgaW50IG1vdXNlTW9kaWZpZXJzKQoreworICAgIGdfYXNzZXJ0KG1fcGFyZW50V2luZG93KTsK
KyAgICBHdGtXaWRnZXQqIHZpZXdXaWRnZXQgPSBHVEtfV0lER0VUKG1fd2ViVmlldyk7CisgICAg
Z19hc3NlcnQoZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQodmlld1dpZGdldCkpOworCisgICAgR093
blB0cjxHZGtFdmVudD4gZXZlbnQoZ2RrX2V2ZW50X25ldyhldmVudFR5cGUpKTsKKyAgICBldmVu
dC0+YnV0dG9uLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKKyAg
ICBnX29iamVjdF9yZWYoZXZlbnQtPmJ1dHRvbi53aW5kb3cpOworCisgICAgZXZlbnQtPmJ1dHRv
bi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICBldmVudC0+YnV0dG9uLnggPSB4OworICAg
IGV2ZW50LT5idXR0b24ueSA9IHk7CisgICAgZXZlbnQtPmJ1dHRvbi5heGVzID0gMDsKKyAgICBl
dmVudC0+YnV0dG9uLnN0YXRlID0gbW91c2VNb2RpZmllcnM7CisgICAgZXZlbnQtPmJ1dHRvbi5i
dXR0b24gPSBidXR0b247CisKKyAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2Vf
bWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2Vy
KGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkodmlld1dpZGdldCkpKTsKKworICAgIGludCB4Um9vdCwg
eVJvb3Q7CisgICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KHZpZXdXaWRnZXQpLCB4LCB5LCAmeFJvb3QsICZ5Um9vdCk7CisgICAgZXZlbnQtPmJ1dHRv
bi54X3Jvb3QgPSB4Um9vdDsKKyAgICBldmVudC0+YnV0dG9uLnlfcm9vdCA9IHlSb290OworICAg
IGd0a19tYWluX2RvX2V2ZW50KGV2ZW50LmdldCgpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCmluZGV4IDk1YTU2OWMu
LjdkOTI0YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViVmlld1Rlc3QuaApAQCAtNDUsMTEgKzQ1LDE1IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwogCiAgICAgdm9pZCBtb3VzZU1vdmVU
byhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDApOworICAgIHZv
aWQgbW91c2VCdXR0b25DbGljayhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24gPSAx
LCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAwKTsKIAogICAgIFdlYktpdFdlYlZpZXcq
IG1fd2ViVmlldzsKICAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CiAgICAgQ1N0cmluZyBtX2Fj
dGl2ZVVSSTsKICAgICBHdGtXaWRnZXQqIG1fcGFyZW50V2luZG93OworCitwcml2YXRlOgorICAg
IHZvaWQgbW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUsIGludCwgaW50LCB1bnNpZ25lZCBp
bnQsIHVuc2lnbmVkIGludCk7CiB9OwogCiAjZW5kaWYgLy8gV2ViVmlld1Rlc3RfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IDNhZjk5MDQuLmRlMDMw
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAgLTMw
LDEzICszMCwxNCBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdEVycm9yLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEhpdFRlc3RSZXN1bHQuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklS
ZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXNwb25zZS5oPgogI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4dC5oPgotI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
V2ViVmlld0Jhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXcuaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXRXaW5kb3dQcm9wZXJ0aWVzLmg+CiAKICN1bmRlZiBfX1dFQktJVDJfSF9JTlNJREVfXwpkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYyBiL1Rvb2xzL01p
bmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmMKaW5kZXggZmMwNDA2ZC4uNWJhNjU1MCAxMDA2
NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYworKysgYi9Ub29s
cy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCkBAIC0yNTIsNiArMjUyLDM5IEBAIHN0
YXRpYyBnYm9vbGVhbiB3ZWJWaWV3RGVjaWRlUG9saWN5KFdlYktpdFdlYlZpZXcgKndlYlZpZXcs
IFdlYktpdFBvbGljeURlY2lzaW9uCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKK3N0YXRpYyB2b2lk
IGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtEaWFsb2cgKmRpYWxvZywgZ2lu
dCByZXNwb25zZUlELCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpCit7CisgICAg
aWYgKHJlc3BvbnNlSUQgPT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkgeworICAgICAgICBHU0xpc3Qg
KmZpbGVVcmlzID0gZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfdXJpcyhHVEtfRklMRV9DSE9PU0VSKGRp
YWxvZykpOworICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX2ZpbGVz
KHJlcXVlc3QsIGZpbGVVcmlzKTsKKyAgICAgICAgZ19zbGlzdF9mcmVlX2Z1bGwoZmlsZVVyaXMs
IGdfZnJlZSk7CisgICAgfSBlbHNlCisgICAgICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9jYW5jZWwocmVxdWVzdCk7CisKKyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKKyAgICBn
dGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVChkaWFsb2cpKTsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYlZpZXdSdW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QsIEJyb3dzZXJXaW5kb3cgKndpbmRvdykKK3sKKyAg
ICBHdGtXaWRnZXQgKmRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldygiVXBsb2Fk
IEZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdUS19XSU5ET1cod2luZG93KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9PUEVOLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVE9DS19D
QU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX09QRU4sIEdUS19SRVNQT05TRV9BQ0NF
UFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCk7CisKKyAgICBHdGtGaWxlRmlsdGVyICpmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X2ZpbGVfZmlsdGVyKHJlcXVlc3QpOworICAgIGlmIChmaWx0ZXIpCisgICAg
ICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2ZpbHRlcihHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyks
IGZpbHRlcik7CisgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfc2VsZWN0X211bHRpcGxlKEdUS19G
SUxFX0NIT09TRVIoZGlhbG9nKSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19t
dWx0aXBsZV9maWxlcyhyZXF1ZXN0KSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywg
InJlc3BvbnNlIiwgR19DQUxMQkFDSyhmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2sp
LCBnX29iamVjdF9yZWYocmVxdWVzdCkpOworICAgIGd0a193aWRnZXRfc2hvdyhkaWFsb2cpOwor
CisgICAgcmV0dXJuIFRSVUU7Cit9CisKIHN0YXRpYyB2b2lkIHdlYlZpZXdNb3VzZVRhcmdldENo
YW5nZWQoV2ViS2l0V2ViVmlldyAqd2ViVmlldywgV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0VGVz
dFJlc3VsdCwgZ3VpbnQgbW91c2VNb2RpZmllcnMsIEJyb3dzZXJXaW5kb3cgKndpbmRvdykKIHsK
ICAgICBpZiAoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RS
ZXN1bHQpKSB7CkBAIC0zNjAsNiArMzkzLDcgQEAgc3RhdGljIHZvaWQgYnJvd3NlcldpbmRvd0Nv
bnN0cnVjdGVkKEdPYmplY3QgKmdPYmplY3QpCiAgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3ct
PndlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNLKHdlYlZpZXdDcmVhdGUpLCB3aW5kb3cpOwog
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LT53ZWJWaWV3LCAibG9hZC1mYWlsZWQiLCBHX0NB
TExCQUNLKHdlYlZpZXdMb2FkRmFpbGVkKSwgd2luZG93KTsKICAgICBnX3NpZ25hbF9jb25uZWN0
KHdpbmRvdy0+d2ViVmlldywgImRlY2lkZS1wb2xpY3kiLCBHX0NBTExCQUNLKHdlYlZpZXdEZWNp
ZGVQb2xpY3kpLCB3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LT53ZWJWaWV3
LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0sod2ViVmlld1J1bkZpbGVDaG9vc2VyKSwg
d2luZG93KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdy0+d2ViVmlldywgIm1vdXNlLXRh
cmdldC1jaGFuZ2VkIiwgR19DQUxMQkFDSyh3ZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKSwgd2lu
ZG93KTsKIAogICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdCAqYmFja0ZvcndhZGxpc3QgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdpbmRvdy0+d2ViVmlldyk7Ci0tIAox
LjcuNy41Cgo=
</data>
<flag name="commit-queue"
          id="129141"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127182</attachid>
            <date>2012-02-15 07:07:32 -0800</date>
            <delta_ts>2012-02-16 04:34:19 -0800</delta_ts>
            <desc>Patch proposal + Unit tests</desc>
            <filename>0001-Implement-runOpenPanel-in-WebKit2GTK.patch</filename>
            <type>text/plain</type>
            <size>34223</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA3NDBkZmJhNmFiN2EwNTdhNjMzZGU0OTc1NWJmZWZiZDk3NWU4MGI3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDEwIEZlYiAyMDEyIDEyOjEzOjU5ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gSW1wbGVtZW50IHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXQyR1RLKwoKLS0tCiBTb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogLi4uL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgfCAgMTU0ICsrKysr
KysrKysrKysrKysrKysrCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0LmggICB8ICAgNzggKysrKysrKysrKwogLi4uL0FQSS9ndGsvV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0UHJpdmF0ZS5oICAgICAgfCAgIDI4ICsrKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcCAgIHwgICAxMCArLQogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgfCAgIDYzICsrKysrKysrCiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggICB8ICAgIDUgKwog
Li4uL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmggICAgICAgfCAgICAx
ICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAgIHwg
IDExMyArKysrKysrKysrKysrKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdU
ZXN0LmNwcCAgICAgICAgfCAgIDMxICsrKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1dlYlZpZXdUZXN0LmggIHwgICAgNCArCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQyLmggICAgICAgICB8ICAgIDMgKy0KIDEyIGZpbGVzIGNoYW5nZWQsIDQ5
MiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaAoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUuYW0KaW5kZXggM2I4ZTdiZC4uY2QzYTZjNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0KQEAgLTkwLDYgKzkwLDcgQEAgbGlid2Via2l0Mmd0a2luY2x1ZGVfSEVBREVSUyA9IFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmggXAogCSQoV2ViS2l0Mikv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5oIFwKIAkkKFdlYktpdDIpL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oIFwKKwkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uLmggXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvbi5o
IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmggXApAQCAt
NTQ4LDYgKzU0OSw5IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lP
TkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmln
YXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcCBcCisJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmggXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUu
aCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNp
b24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lE
ZWNpc2lvbi5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xp
Y3lEZWNpc2lvblByaXZhdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjNlZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNw
cApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
LmgiCisKKyNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYk9wZW5QYW5lbFBhcmFtZXRlcnMu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKiBAU2hv
cnRfZGVzY3JpcHRpb246IEEgcmVxdWVzdCB0byBvcGVuIGEgZmlsZSBjaG9vc2VyLgorICogQFRp
dGxlOiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqIEBTZWVfYWxzbzogI1dlYktpdFdlYlZp
ZXcKKyAqLworR19ERUZJTkVfVFlQRShXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QsIHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdCwgR19UWVBFX09CSkVDVCkKKworc3RydWN0IF9XZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3RQcml2YXRlIHsKKyAgICBXS1JldGFpblB0cjxXS09wZW5QYW5lbFBhcmFt
ZXRlcnNSZWY+IHdrUGFyYW1ldGVyczsKKyAgICBXS1JldGFpblB0cjxXS09wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyUmVmPiB3a0xpc3RlbmVyOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7Cit9Owor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdChXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmVxdWVzdC0+cHJpdiA9IEdfVFlQRV9J
TlNUQU5DRV9HRVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVR
VUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSk7CisgICAgbmV3IChyZXF1ZXN0
LT5wcml2KSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9P
U0VSX1JFUVVFU1Qob2JqZWN0KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpcyBh
bHdheXMgaGFuZGxlZCBiZWZvcmUgZmluYWxpemluZy4KKyAgICBpZiAoIXJlcXVlc3QtPnByaXYt
PmhhbmRsZWRSZXF1ZXN0KQorICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2Fu
Y2VsKHJlcXVlc3QpOworCisgICAgcmVxdWVzdC0+cHJpdi0+fldlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZTsKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUocmVxdWVzdENsYXNzLCBzaXplb2YoV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0UHJpdmF0ZSkpOworfQorCitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHdlYmtpdEZpbGVD
aG9vc2VyUmVxdWVzdENyZWF0ZShXS09wZW5QYW5lbFBhcmFtZXRlcnNSZWYgd2tQYXJhbWV0ZXJz
LCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIHdrTGlzdGVuZXIpCit7CisgICAgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNU
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgTlVMTCkpOwor
ICAgIHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycyA9IHdrUGFyYW1ldGVyczsKKyAgICByZXF1
ZXN0LT5wcml2LT53a0xpc3RlbmVyID0gd2tMaXN0ZW5lcjsKKyAgICByZXF1ZXN0LT5wcml2LT5o
YW5kbGVkUmVxdWVzdCA9IGZhbHNlOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitnYm9vbGVh
biB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX2ZpbGVzKFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIEZBTFNFKTsKKyAgICBy
ZXR1cm4gV0tPcGVuUGFuZWxQYXJhbWV0ZXJzR2V0QWxsb3dzTXVsdGlwbGVGaWxlcyhyZXF1ZXN0
LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpOworfQorCitHU0xpc3QqIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfYWNjZXB0ZWRfbWltZV90eXBlcyhXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJ
TEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKyAgICBXS1JldGFpblB0cjxXS0FycmF5
UmVmPiB3a01pbWVUeXBlcyhBZG9wdFdLLCBXS09wZW5QYW5lbFBhcmFtZXRlcnNDb3B5QWNjZXB0
ZWRNSU1FVHlwZXMocmVxdWVzdC0+cHJpdi0+d2tQYXJhbWV0ZXJzLmdldCgpKSk7CisKKyAgICBH
U0xpc3QqIHJldHVybkxpc3QgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV0tBcnJh
eUdldFNpemUod2tNaW1lVHlwZXMuZ2V0KCkpOyArK2kpIHsKKyAgICAgICAgV0tTdHJpbmdSZWYg
d2tNaW1lVHlwZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5k
ZXgod2tNaW1lVHlwZXMuZ2V0KCksIGkpKTsKKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlU3RyaW5n
ID0gdG9JbXBsKHdrTWltZVR5cGUpLT5zdHJpbmcoKTsKKyAgICAgICAgaWYgKG1pbWVUeXBlU3Ry
aW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXR1cm5MaXN0
ID0gZ19zbGlzdF9wcmVwZW5kKHJldHVybkxpc3QsIGdfc3RyZHVwKG1pbWVUeXBlU3RyaW5nLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ19zbGlzdF9yZXZlcnNlKHJldHVy
bkxpc3QpOworfQorCitHdGtGaWxlRmlsdGVyKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X2ZpbGVfZmlsdGVyKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVx
dWVzdCksIDApOworICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IHdrTWltZVR5cGVzKEFkb3B0
V0ssIFdLT3BlblBhbmVsUGFyYW1ldGVyc0NvcHlBY2NlcHRlZE1JTUVUeXBlcyhyZXF1ZXN0LT5w
cml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpKTsKKworICAgIHNpemVfdCBudW1PZk1pbWVUeXBlcyA9
IFdLQXJyYXlHZXRTaXplKHdrTWltZVR5cGVzLmdldCgpKTsKKyAgICBpZiAoIW51bU9mTWltZVR5
cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEd0a0ZpbGVGaWx0ZXIqIHJldHVybkZpbHRl
ciA9IGd0a19maWxlX2ZpbHRlcl9uZXcoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bU9mTWltZVR5cGVzOyArK2kpIHsKKyAgICAgICAgV0tTdHJpbmdSZWYgd2tNaW1lVHlwZSA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tNaW1lVHlwZXMu
Z2V0KCksIGkpKTsKKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlU3RyaW5nID0gdG9JbXBsKHdrTWlt
ZVR5cGUpLT5zdHJpbmcoKTsKKyAgICAgICAgaWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBndGtfZmlsZV9maWx0ZXJfYWRkX21pbWVf
dHlwZShyZXR1cm5GaWx0ZXIsIG1pbWVUeXBlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgIH0K
KworICAgIHJldHVybiByZXR1cm5GaWx0ZXI7Cit9CisKK3ZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2Nob29zZV9maWxlcyhXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3Qs
IEdTTGlzdCogZmlsZVVSSXMpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklM
RV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCkpOworICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFy
cmF5UmVmPiB3a1NlbGVjdGVkVVJJcyhBZG9wdFdLLCBXS011dGFibGVBcnJheUNyZWF0ZSgpKTsK
KyAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGZpbGVVUklzIDsgaXRlbSA7IGl0ZW0gPSBnX3NsaXN0
X25leHQoaXRlbSkpIHsKKyAgICAgICAgaWYgKCFpdGVtLT5kYXRhKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTChBZG9wdFdLLCBXS1VS
TENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxnY2hhcio+KGl0ZW0tPmRhdGEpKSk7
CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHdrU2VsZWN0ZWRVUklzLmdldCgpLCB3a1VSTC5n
ZXQoKSk7CisgICAgfQorCisgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lckNob29zZUZpbGVz
KHJlcXVlc3QtPnByaXYtPndrTGlzdGVuZXIuZ2V0KCksIHdrU2VsZWN0ZWRVUklzLmdldCgpKTsK
KyAgICByZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7Cit9CisKK0dTTGlzdCog
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKyAgICBWZWN0b3I8U3Ry
aW5nPiBzZWxlY3RlZEZpbGVOYW1lcyA9IHRvSW1wbChyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRl
cnMuZ2V0KCkpLT5zZWxlY3RlZEZpbGVOYW1lcygpOworCisgICAgR1NMaXN0KiByZXR1cm5MaXN0
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlbGVjdGVkRmlsZU5hbWVzLnNpemUo
KTsgKytpKQorICAgICAgICByZXR1cm5MaXN0ID0gZ19zbGlzdF9wcmVwZW5kKHJldHVybkxpc3Qs
IGdfZmlsZW5hbWVfdG9fdXJpKHNlbGVjdGVkRmlsZU5hbWVzW2ldLnV0ZjgoKS5kYXRhKCksIDAs
IDApKTsKKworICAgIHJldHVybiBnX3NsaXN0X3JldmVyc2UocmV0dXJuTGlzdCk7Cit9CisKK3Zv
aWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklMRV9D
SE9PU0VSX1JFUVVFU1QocmVxdWVzdCkpOworICAgIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJD
YW5jZWwocmVxdWVzdC0+cHJpdi0+d2tMaXN0ZW5lci5nZXQoKSk7CisgICAgcmVxdWVzdC0+cHJp
di0+aGFuZGxlZFJlcXVlc3QgPSB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGE1MDQ3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJf
Q09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5j
bHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0X2gKKyNkZWZpbmUgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0X2gKKworI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUICAgICAgICAg
ICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVT
VF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJL
SVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xh
c3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRklMRV9DSE9P
U0VSX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
RklMRV9DSE9PU0VSX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVF
U1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAgICAgICAg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdENsYXNzICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3M7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSBXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCB7Cisg
ICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZSAg
ICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfZmlsZXMgICAoV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBHU0xpc3QgKgord2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9hY2NlcHRlZF9taW1lX3R5cGVzIChXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIEd0a0ZpbGVGaWx0ZXIgKgord2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9maWxlX2ZpbHRlciAgICAgICAgIChXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMgICAgICAgICAgICAoV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHU0xpc3QgICAgICAgICAgICAgICAgICAgKnVyaXMpOworCitXRUJL
SVRfQVBJIEdTTGlzdCAqCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVk
X2ZpbGVzICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCAgICAgICAgICAg
ICAgICAgIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODZiZDUwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJp
dmF0ZS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlX2gKKyNkZWZpbmUg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4KKworV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0KiB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUoV0tPcGVu
UGFuZWxQYXJhbWV0ZXJzUmVmLCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmKTsKKworI2Vu
ZGlmIC8vIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCmluZGV4IGU3NjIx
MmQuLmJjMmM5Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTIwLDEyICsyMCwxNCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldlYktpdFVJQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZp
ZXdQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGll
cy5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKIApAQCAtMTMxLDYgKzEzMywxMiBAQCBzdGF0aWMgdm9pZCBtb3VzZURpZE1vdmVP
dmVyRWxlbWVudChXS1BhZ2VSZWYgcGFnZSwgV0tIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZQog
ICAgIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV0VCS0lUX1dFQl9WSUVXKGNsaWVu
dEluZm8pLCBoaXRUZXN0UmVzdWx0LCB3a0V2ZW50TW9kaWZpZXJzVG9HZGtNb2RpZmllcnMobW9k
aWZpZXJzKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ1bk9wZW5QYW5lbChXS1BhZ2VSZWYgcGFnZSwg
V0tGcmFtZVJlZiBmcmFtZSwgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHBhcmFtZXRlcnMsIFdL
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVlc3QgPSBh
ZG9wdEdSZWYod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKHBhcmFtZXRlcnMsIGxpc3Rl
bmVyKSk7CisgICAgd2Via2l0V2ViVmlld01ha2VGaWxlQ2hvb3NlclJlcXVlc3QoV0VCS0lUX1dF
Ql9WSUVXKGNsaWVudEluZm8pLCByZXF1ZXN0LmdldCgpKTsKK30KKwogdm9pZCBhdHRhY2hVSUNs
aWVudFRvVmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIFdLUGFnZVVJQ2xpZW50
IHdrVUlDbGllbnQgPSB7CkBAIC0xNjQsNyArMTcyLDcgQEAgdm9pZCBhdHRhY2hVSUNsaWVudFRv
VmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgICAgICAwLCAvLyBkaWREcmF3CiAgICAg
ICAgIDAsIC8vIHBhZ2VEaWRTY3JvbGwKICAgICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1
b3RhCi0gICAgICAgIDAsIC8vIHJ1bk9wZW5QYW5lbAorICAgICAgICBydW5PcGVuUGFuZWwsCiAg
ICAgICAgIDAsIC8vIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QK
ICAgICAgICAgMCwgLy8gaGVhZGVySGVpZ2h0CiAgICAgICAgIDAsIC8vIGZvb3RlckhlaWdodApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cAppbmRleCBhZjc5OTM1Li4yYmIwMzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtNTksNiArNTksNyBAQCBlbnVtIHsK
ICAgICBTQ1JJUFRfUFJPTVBULAogCiAgICAgREVDSURFX1BPTElDWSwKKyAgICBSVU5fRklMRV9D
SE9PU0VSLAogCiAgICAgTU9VU0VfVEFSR0VUX0NIQU5HRUQsCiAKQEAgLTE2MCw2ICsxNjEsNTAg
QEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdEZWNpZGVQb2xpY3koV2ViS2l0V2ViVmll
dyosIFdlYktpdFBvbGljeURlY2lzaW9uKgogICAgIHJldHVybiBUUlVFOwogfQogCitzdGF0aWMg
dm9pZCBmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrRGlhbG9nKiBkaWFsb2cs
IGdpbnQgcmVzcG9uc2VJRCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQorewor
ICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBhZG9wdGVkUmVxdWVzdCA9IGFk
b3B0R1JlZihyZXF1ZXN0KTsKKyAgICBpZiAocmVzcG9uc2VJRCA9PSBHVEtfUkVTUE9OU0VfQUND
RVBUKSB7CisgICAgICAgIEdTTGlzdCogZmlsZVVyaXMgPSBndGtfZmlsZV9jaG9vc2VyX2dldF91
cmlzKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSk7CisgICAgICAgIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMoYWRvcHRlZFJlcXVlc3QuZ2V0KCksIGZpbGVVcmlzKTsK
KyAgICAgICAgZ19zbGlzdF9mcmVlX2Z1bGwoZmlsZVVyaXMsIGdfZnJlZSk7CisgICAgfSBlbHNl
CisgICAgICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoYWRvcHRlZFJlcXVl
c3QuZ2V0KCkpOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoZGlhbG9nKSk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXIoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQorewor
ICAgIEd0a1dpZGdldCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lE
R0VUKHdlYlZpZXcpKTsKKyAgICBpZiAoIXdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyh0
b3BsZXZlbCkpCisgICAgICAgIHRvcGxldmVsID0gMDsKKworICAgIGdib29sZWFuIGFsbG93c011
bHRpcGxlRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxl
X2ZpbGVzKHJlcXVlc3QpOworICAgIEd0a1dpZGdldCogZGlhbG9nID0gZ3RrX2ZpbGVfY2hvb3Nl
cl9kaWFsb2dfbmV3KGFsbG93c011bHRpcGxlRmlsZXMgPyBfKCJTZWxlY3QgRmlsZXMgZm9yIFVw
bG9hZCIpIDogXygiU2VsZWN0IEZpbGUgZm9yIFVwbG9hZCIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGxldmVsID8gR1RLX1dJTkRPVyh0
b3BsZXZlbCkgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUS19GSUxFX0NIT09TRVJfQUNUSU9OX09QRU4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX0NBTkNFTCwgR1RL
X1JFU1BPTlNFX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHVEtfU1RPQ0tfT1BFTiwgR1RLX1JFU1BPTlNFX0FDQ0VQVCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKwor
ICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfZmlsZV9maWx0ZXIocmVxdWVzdCk7CisgICAgaWYgKGZpbHRlcikKKyAgICAgICAgZ3RrX2Zp
bGVfY2hvb3Nlcl9zZXRfZmlsdGVyKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSwgZmlsdGVyKTsK
KyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9zZWxlY3RfbXVsdGlwbGUoR1RLX0ZJTEVfQ0hPT1NF
UihkaWFsb2cpLCBhbGxvd3NNdWx0aXBsZUZpbGVzKTsKKworICAgIEdTTGlzdCogc2VsZWN0ZWRG
aWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVx
dWVzdCk7CisgICAgaWYgKHNlbGVjdGVkRmlsZXMpIHsKKyAgICAgICAgZ3RrX2ZpbGVfY2hvb3Nl
cl9zZWxlY3RfdXJpKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSwgc3RhdGljX2Nhc3Q8Z2NoYXIq
PihzZWxlY3RlZEZpbGVzLT5kYXRhKSk7CisgICAgICAgIGdfc2xpc3RfZnJlZV9mdWxsKHNlbGVj
dGVkRmlsZXMsIGdfZnJlZSk7CisgICAgfQorCisgICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2cs
ICJyZXNwb25zZSIsIEdfQ0FMTEJBQ0soZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNr
KSwgZ19vYmplY3RfcmVmKHJlcXVlc3QpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsK
KworICAgIHJldHVybiBUUlVFOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3Ry
dWN0ZWQoR09iamVjdCogb2JqZWN0KQogewogICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRf
d2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCkBAIC0yNjMsNiArMzA4LDcgQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNz
KiB3ZWJWaWV3Q2xhc3MpCiAgICAgd2ViVmlld0NsYXNzLT5zY3JpcHRfY29uZmlybSA9IHdlYmtp
dFdlYlZpZXdTY3JpcHRDb25maXJtOwogICAgIHdlYlZpZXdDbGFzcy0+c2NyaXB0X3Byb21wdCA9
IHdlYmtpdFdlYlZpZXdTY3JpcHRQcm9tcHQ7CiAgICAgd2ViVmlld0NsYXNzLT5kZWNpZGVfcG9s
aWN5ID0gd2Via2l0V2ViVmlld0RlY2lkZVBvbGljeTsKKyAgICB3ZWJWaWV3Q2xhc3MtPnJ1bl9m
aWxlX2Nob29zZXIgPSB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXI7CiAKICAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUod2ViVmlld0NsYXNzLCBzaXplb2YoV2ViS2l0V2ViVmlld1ByaXZh
dGUpKTsKIApAQCAtNjIyLDYgKzY2OCwxNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
Y2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTiwKICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTl9UWVBFKTsKIAorICAgIC8qIFRPRE86IERl
c2NyaWJlIHRoZSBzaWduYWwuICovCisgICAgc2lnbmFsc1tSVU5fRklMRV9DSE9PU0VSXSA9Cisg
ICAgICAgIGdfc2lnbmFsX25ldygicnVuLWZpbGUtY2hvb3NlciIsCisgICAgICAgICAgICAgICAg
ICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAgICAg
ICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZT
RVQoV2ViS2l0V2ViVmlld0NsYXNzLCBydW5fZmlsZV9jaG9vc2VyKSwKKyAgICAgICAgICAgICAg
ICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVsYXRv
ciBkYXRhICovLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9f
T0JKRUNULAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsIC8qIG51bWJl
ciBvZiBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9GSUxF
X0NIT09TRVJfUkVRVUVTVCk7CisKICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3Ojptb3Vz
ZS10YXJnZXQtY2hhbmdlZDoKICAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBv
biB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKQEAgLTc3MSw2ICs4MjgsMTIgQEAgdm9pZCB3
ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdL
SGl0VGVzdFJlc3VsdFJlZgogICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tNT1VT
RV9UQVJHRVRfQ0hBTkdFRF0sIDAsIHByaXYtPm1vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdC5nZXQo
KSwgbW9kaWZpZXJzKTsKIH0KIAordm9pZCB3ZWJraXRXZWJWaWV3TWFrZUZpbGVDaG9vc2VyUmVx
dWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3
ZWJWaWV3LCBzaWduYWxzW1JVTl9GSUxFX0NIT09TRVJdLCAwLCByZXF1ZXN0LCAmcmV0dXJuVmFs
dWUpOworfQorCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19uZXc6CiAgKgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDAwODFiZTMu
LmY4Y2RiOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3LmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVS
SVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFBv
bGljeURlY2lzaW9uLmg+CiAKIEdfQkVHSU5fREVDTFMKQEAgLTE0MCw2ICsxNDEsMTAgQEAgc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgIGdib29sZWFuICAgKCogZGVjaWRlX3BvbGlj
eSkgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb24gICAg
ICAqZGVjaXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdFBvbGljeURlY2lzaW9uVHlwZSAgdHlwZSk7CisKKyAgICBnYm9vbGVhbiAgICgqIHJ1bl9m
aWxlX2Nob29zZXIpICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCAgKnJlcXVlc3QpOworCiAgICAgdm9pZCAgICAgICAoKiBtb3VzZV90YXJnZXRfY2hh
bmdlZCkgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAqd2ViX3ZpZXcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQgICAgICAqaGl0
X3Rlc3RfcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
dWludCAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCA3
NjhhNjIwLi5iMzE2ZDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTQzLDYgKzQzLDcgQEAgdm9pZCB3
ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3Ry
aW5nJiBtZXNzYWdlKTsKIGJvb2wgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRDb25maXJtKFdl
YktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKTsKIFdLU3RyaW5nUmVmIHdlYmtp
dFdlYlZpZXdSdW5KYXZhU2NyaXB0UHJvbXB0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBDU3RyaW5nJiBkZWZhdWx0VGV4dCk7CiB2b2lkIHdlYmtpdFdlYlZp
ZXdNYWtlUG9saWN5RGVjaXNpb24oV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9u
VHlwZSwgV2ViS2l0UG9saWN5RGVjaXNpb24qKTsKK3ZvaWQgd2Via2l0V2ViVmlld01ha2VGaWxl
Q2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCop
Owogdm9pZCB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqLCBX
S0hpdFRlc3RSZXN1bHRSZWYsIHVuc2lnbmVkIG1vZGlmaWVycyk7CiAKICNlbmRpZiAvLyBXZWJL
aXRXZWJWaWV3UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKaW5kZXggNDdkYTk4ZS4u
MzE3ODk0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcApAQCAtMjI2LDYgKzIyNiwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBuZXdXZWJWaWV3OwogICAgIH0KIAorICAgIHN0YXRpYyBn
Ym9vbGVhbiBydW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiwgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0KiByZXF1ZXN0LCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0
LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3Qp
KTsKKyAgICAgICAgdGVzdC0+bV9maWxlQ2hvb3NlclJlcXVlc3QgPSByZXF1ZXN0OworICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gVFJV
RTsKKyAgICB9CisKICAgICBzdGF0aWMgZ2Jvb2xlYW4gc2NyaXB0QWxlcnQoV2ViS2l0V2ViVmll
dyosIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIFVJQ2xpZW50VGVzdCogdGVzdCkKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAodGVzdC0+bV9zY3JpcHRUeXBlKSB7CkBAIC0yODQsNiArMjkyLDcgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9v
cGVuX3dpbmRvd3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1f
d2ViVmlldyksIFRSVUUpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNy
ZWF0ZSIsIEdfQ0FMTEJBQ0sodmlld0NyZWF0ZSksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fd2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVD
aG9vc2VyKSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2Ny
aXB0LWFsZXJ0IiwgR19DQUxMQkFDSyhzY3JpcHRBbGVydCksIHRoaXMpOwogICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlwdC1jb25maXJtIiwgR19DQUxMQkFDSyhzY3Jp
cHRDb25maXJtKSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAi
c2NyaXB0LXByb21wdCIsIEdfQ0FMTEJBQ0soc2NyaXB0UHJvbXB0KSwgdGhpcyk7CkBAIC0zMTIs
MTIgKzMyMSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21vdXNlVGFyZ2V0SGl0VGVz
dFJlc3VsdC5nZXQoKTsKICAgICB9CiAKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIG1v
dXNlQnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KGludCB4LCBpbnQgeSkK
KyAgICB7CisgICAgICAgIG1vdXNlQnV0dG9uQ2xpY2soeCwgeSk7CisgICAgICAgIGdfbWFpbl9s
b29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIG1fZmlsZUNob29zZXJSZXF1ZXN0
LmdldCgpOworICAgIH0KKwogICAgIFZlY3RvcjxXZWJWaWV3RXZlbnRzPiBtX3dlYlZpZXdFdmVu
dHM7CiAgICAgU2NyaXB0VHlwZSBtX3NjcmlwdFR5cGU7CiAgICAgYm9vbCBtX3NjcmlwdERpYWxv
Z0NvbmZpcm1lZDsKICAgICBXaW5kb3dQcm9wZXJ0aWVzIG1fd2luZG93UHJvcGVydGllczsKICAg
ICBIYXNoU2V0PFdURjo6U3RyaW5nPiBtX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkOwogICAgIEdS
ZWZQdHI8V2ViS2l0SGl0VGVzdFJlc3VsdD4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQ7Cisg
ICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IG1fZmlsZUNob29zZXJSZXF1ZXN0
OwogICAgIHVuc2lnbmVkIGludCBtX21vdXNlVGFyZ2V0TW9kaWZpZXJzOwogfTsKIApAQCAtMzMz
LDYgKzM1MCwxMDEgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKFVJ
Q2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiBj
aGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIq
IG1pbWVUeXBlKQoreworICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlckluZm87CisgICAgZmls
dGVySW5mby5jb250YWlucyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7CisgICAgZmlsdGVy
SW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKKyAgICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVyX2Zp
bHRlcihmaWx0ZXIsICZmaWx0ZXJJbmZvKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdG
aWxlQ2hvb3NlclJlcXVlc3QoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBmaWxlQ2hvb3NlckhUTUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+PGlucHV0IHN0
eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFkZGluZzowJyB0
eXBlPSdmaWxlJyAlcy8+PC9ib2R5PjwvaHRtbD4iOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0
aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcuCisgICAgR093blB0cjxjaGFyPiBz
aW1wbGVGaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0
LCAiIikpOworICAgIHRlc3QtPmxvYWRIdG1sKHNpbXBsZUZpbGVVcGxvYWRIVE1MLmdldCgpLCAw
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QqIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPm1vdXNlQnV0dG9uQ2xpY2tB
bmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX2ZpbGVzKGZpbGVDaG9vc2VyUmVx
dWVzdCkpOworICAgIEdTTGlzdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9hY2NlcHRlZF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19h
c3NlcnQoIW1pbWVUeXBlcyk7CisgICAgR1JlZlB0cjxHdGtGaWxlRmlsdGVyPiBmaWx0ZXIod2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9maWxlX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVl
c3QpKTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBHU0xpc3QqIHNlbGVjdGVkRmlsZXMg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9v
c2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOworICAgIHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKKworICAgIC8v
IE11bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcsIHNvbWUgcHJl
LXNlbGVjdGVkIGZpbGVzLgorICAgIEdPd25QdHI8Y2hhcj4gbXVsdGlwbGVTZWxlY3Rpb25GaWxl
VXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAibXVsdGlw
bGUiKSk7CisgICAgdGVzdC0+bG9hZEh0bWwobXVsdGlwbGVTZWxlY3Rpb25GaWxlVXBsb2FkSFRN
TC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZmls
ZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+bW91c2VCdXR0b25DbGlja0FuZFdhaXRGb3JGaWxlQ2hv
b3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2FsbG93c19tdWx0aXBsZV9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKyAgICBtaW1l
VHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X2FjY2VwdGVkX21pbWVfdHlw
ZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKKyAgICBm
aWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X2ZpbGVfZmlsdGVyKGZpbGVD
aG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7CisgICAgc2VsZWN0ZWRGaWxl
cyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNo
b29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICAvLyBT
ZWxlY3Qgc29tZSBmaWxlcy4KKyAgICBHU0xpc3QqIGZpbGVzVG9TZWxlY3QgPSAwOworICAgIGZp
bGVzVG9TZWxlY3QgPSBnX3NsaXN0X2FwcGVuZChmaWxlc1RvU2VsZWN0LCBnX3N0cmR1cCgiZmls
ZTovLy9mb28vYmFyL2Jhei8xIikpOworICAgIGZpbGVzVG9TZWxlY3QgPSBnX3NsaXN0X2FwcGVu
ZChmaWxlc1RvU2VsZWN0LCBnX3N0cmR1cCgiZmlsZTovLy9mb28vYmFyL2Jhei8yIikpOworICAg
IGZpbGVzVG9TZWxlY3QgPSBnX3NsaXN0X2FwcGVuZChmaWxlc1RvU2VsZWN0LCBnX3N0cmR1cCgi
ZmlsZTovLy9mb28vYmFyL2Jhei8zIikpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3NsaXN0X2xl
bmd0aChmaWxlc1RvU2VsZWN0KSwgPT0sIDMpOworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9jaG9vc2VfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0LCBmaWxlc1RvU2VsZWN0KTsKKyAg
ICBnX3NsaXN0X2ZyZWVfZnVsbChmaWxlc1RvU2VsZWN0LCBnX2ZyZWUpOworCisgICAgLy8gUGVy
Zm9ybSBhbm90aGVyIHJlcXVlc3QgdG8gY2hlY2sgaWYgdGhlIGxpc3Qgb2YgZmlsZXMgc2VsZWN0
ZWQKKyAgICAvLyBpbiB0aGUgcHJldmlvdXMgc3RlcCBhcHBlYXJzIG5vdyBhcyBwYXJ0IG9mIHRo
ZSBuZXcgcmVxdWVzdC4KKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5tb3VzZUJ1dHRv
bkNsaWNrQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBzZWxlY3RlZEZp
bGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxl
Q2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAgIEdTTGlz
dCogc2VsZWN0ZWRGaWxlID0gc2VsZWN0ZWRGaWxlczsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3Rh
dGljX2Nhc3Q8Z2NoYXIqPihzZWxlY3RlZEZpbGUtPmRhdGEpLCA9PSwgImZpbGU6Ly8vZm9vL2Jh
ci9iYXovMSIpOworICAgIHNlbGVjdGVkRmlsZSA9IGdfc2xpc3RfbmV4dChzZWxlY3RlZEZpbGUp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxnY2hhcio+KHNlbGVjdGVkRmlsZS0+
ZGF0YSksID09LCAiZmlsZTovLy9mb28vYmFyL2Jhei8yIik7CisgICAgc2VsZWN0ZWRGaWxlID0g
Z19zbGlzdF9uZXh0KHNlbGVjdGVkRmlsZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19j
YXN0PGdjaGFyKj4oc2VsZWN0ZWRGaWxlLT5kYXRhKSwgPT0sICJmaWxlOi8vL2Zvby9iYXIvYmF6
LzMiKTsKKyAgICBzZWxlY3RlZEZpbGUgPSBnX3NsaXN0X25leHQoc2VsZWN0ZWRGaWxlKTsKKyAg
ICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlKTsKKyAgICBnX3NsaXN0X2ZyZWVfZnVsbChzZWxlY3Rl
ZEZpbGVzLCBnX2ZyZWUpOworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwo
ZmlsZUNob29zZXJSZXF1ZXN0KTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFs
bG93ZWQsIG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZpbGVzLi4KKyAgICBH
T3duUHRyPGNoYXI+IG1pbWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50Zihm
aWxlQ2hvb3NlckhUTUxGb3JtYXQsICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8vKixpbWFnZS8qJyIp
KTsKKyAgICB0ZXN0LT5sb2FkSHRtbChtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRNTC5nZXQoKSwg
MCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZmlsZUNob29zZXJS
ZXF1ZXN0ID0gdGVzdC0+bW91c2VCdXR0b25DbGlja0FuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVl
c3QoNSwgNSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxv
d3NfbXVsdGlwbGVfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KSk7CisgICAgbWltZVR5cGVzID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9hY2NlcHRlZF9taW1lX3R5cGVzKGZpbGVD
aG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZ19zbGlzdF9sZW5ndGgobWltZVR5cGVzKSwgPT0sIDMpOworCisgICAgR1NMaXN0KiBt
aW1lVHlwZSA9IG1pbWVUeXBlczsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Z2No
YXIqPihtaW1lVHlwZS0+ZGF0YSksID09LCAiYXVkaW8vKiIpOworICAgIG1pbWVUeXBlID0gZ19z
bGlzdF9uZXh0KG1pbWVUeXBlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Z2No
YXIqPihtaW1lVHlwZS0+ZGF0YSksID09LCAidmlkZW8vKiIpOworICAgIG1pbWVUeXBlID0gZ19z
bGlzdF9uZXh0KG1pbWVUeXBlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Z2No
YXIqPihtaW1lVHlwZS0+ZGF0YSksID09LCAiaW1hZ2UvKiIpOworICAgIG1pbWVUeXBlID0gZ19z
bGlzdF9uZXh0KG1pbWVUeXBlKTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGUpOworICAgIGdfc2xp
c3RfZnJlZV9mdWxsKG1pbWVUeXBlcywgZ19mcmVlKTsKKworICAgIGZpbHRlciA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfZmlsZV9maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsK
KyAgICBnX2Fzc2VydChHVEtfSVNfRklMRV9GSUxURVIoZmlsdGVyLmdldCgpKSk7CisgICAgZ19h
c3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIuZ2V0KCksICJhdWRpby8qIikpOwor
ICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLmdldCgpLCAidmlkZW8v
KiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlci5nZXQoKSwg
ImltYWdlLyoiKSk7CisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2Vy
dCghc2VsZWN0ZWRGaWxlcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNl
bChmaWxlQ2hvb3NlclJlcXVlc3QpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0phdmFT
Y3JpcHREaWFsb2dzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICBz
dGF0aWMgY29uc3QgY2hhciogaHRtbE9uTG9hZEZvcm1hdCA9ICI8aHRtbD48Ym9keSBvbkxvYWQ9
XCIlc1wiPjwvYm9keT48L2h0bWw+IjsKQEAgLTQ1Niw2ICs1NjgsNyBAQCB2b2lkIGJlZm9yZUFs
bCgpCiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzZXR0aW5ncyIsIHRl
c3RXZWJWaWV3U2V0dGluZ3MpOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAicmVwbGFjZS1jb250ZW50IiwgdGVzdFdlYlZpZXdSZXBsYWNlQ29udGVudCk7CiAgICAgVUlD
bGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3JlYXRlLXJlYWR5LWNsb3NlIiwgdGVz
dFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKTsKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJmaWxlLWNob29zZXItcmVxdWVzdCIsIHRlc3RXZWJWaWV3RmlsZUNob29zZXJS
ZXF1ZXN0KTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJqYXZhc2Ny
aXB0LWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKTsKICAgICBVSUNsaWVu
dFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3aW5kb3ctcHJvcGVydGllcyIsIHRlc3RXZWJW
aWV3V2luZG93UHJvcGVydGllcyk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAibW91c2UtdGFyZ2V0IiwgdGVzdFdlYlZpZXdNb3VzZVRhcmdldCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAK
aW5kZXggMDBkM2IzZS4uMjljNTNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApAQCAtMTgwLDMgKzE4MCwzNCBA
QCB2b2lkIFdlYlZpZXdUZXN0Ojptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGlu
dCBtb3VzZU1vZGlmaWVycykKICAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7CiB9
CiAKK3ZvaWQgV2ViVmlld1Rlc3Q6Om1vdXNlQnV0dG9uQ2xpY2soaW50IHgsIGludCB5LCB1bnNp
Z25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCit7CisgICAgbW91
c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1BSRVNTLCB4LCB5LCBidXR0b24sIG1vdXNlTW9kaWZp
ZXJzKTsKKyAgICBtb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUkVMRUFTRSwgeCwgeSwgYnV0
dG9uLCBtb3VzZU1vZGlmaWVycyk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6Om1vdXNlQnV0dG9u
RXZlbnQoR2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQg
YnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCit7CisgICAgZ19hc3NlcnQobV9w
YXJlbnRXaW5kb3cpOworICAgIEd0a1dpZGdldCogdmlld1dpZGdldCA9IEdUS19XSURHRVQobV93
ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh2aWV3V2lkZ2V0
KSk7CisKKyAgICBHT3duUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZlbnRfbmV3KGV2ZW50VHlw
ZSkpOworICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHZp
ZXdXaWRnZXQpOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+YnV0dG9uLndpbmRvdyk7CisKKyAg
ICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50LT5idXR0
b24ueCA9IHg7CisgICAgZXZlbnQtPmJ1dHRvbi55ID0geTsKKyAgICBldmVudC0+YnV0dG9uLmF4
ZXMgPSAwOworICAgIGV2ZW50LT5idXR0b24uc3RhdGUgPSBtb3VzZU1vZGlmaWVyczsKKyAgICBl
dmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKKworICAgIGV2ZW50LT5idXR0b24uZGV2aWNl
ID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRf
ZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh2aWV3V2lkZ2V0KSkpOworCisg
ICAgaW50IHhSb290LCB5Um9vdDsKKyAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhndGtf
d2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290KTsKKyAg
ICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IHhSb290OworICAgIGV2ZW50LT5idXR0b24ueV9yb290
ID0geVJvb3Q7CisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3Qu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgK
aW5kZXggOTVhNTY5Yy4uN2Q5MjRiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCkBAIC00NSwxMSArNDUsMTUgQEAgcHVi
bGljOgogICAgIHZvaWQgc2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CiAKICAgICB2
b2lkIG1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJz
ID0gMCk7CisgICAgdm9pZCBtb3VzZUJ1dHRvbkNsaWNrKGludCB4LCBpbnQgeSwgdW5zaWduZWQg
aW50IGJ1dHRvbiA9IDEsIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDApOwogCiAgICAg
V2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwogICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKICAg
ICBDU3RyaW5nIG1fYWN0aXZlVVJJOwogICAgIEd0a1dpZGdldCogbV9wYXJlbnRXaW5kb3c7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBtb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlwZSwgaW50LCBp
bnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIH07CiAKICNlbmRpZiAvLyBXZWJWaWV3
VGVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJr
aXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXgg
M2FmOTkwNC4uZGUwMzA5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dl
YmtpdDIuaApAQCAtMzAsMTMgKzMwLDE0IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFZGl0
aW5nQ29tbWFuZHMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0RXJyb3IuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0VGVzdFJlc3Vs
dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlc3Bv
bnNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2Vi
Vmlldy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaD4KIAogI3VuZGVmIF9fV0VCS0lUMl9I
X0lOU0lERV9fCi0tIAoxLjcuNy41Cgo=
</data>
<flag name="commit-queue"
          id="129458"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127357</attachid>
            <date>2012-02-16 04:34:19 -0800</date>
            <delta_ts>2012-02-16 15:32:19 -0800</delta_ts>
            <desc>Patch Proposal + Unit Tests</desc>
            <filename>0001-Implement-runOpenPanel-in-WebKit2GTK.patch</filename>
            <type>text/plain</type>
            <size>34960</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA4ZDg4NTY0M2I3N2VhMzk5MzAwZjczYzBhODViNmVlMzg1MzViY2E1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDEwIEZlYiAyMDEyIDEyOjEzOjU5ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gSW1wbGVtZW50IHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXQyR1RLKwoKLS0tCiBTb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogLi4uL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgfCAgMTc2ICsrKysr
KysrKysrKysrKysrKysrCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0LmggICB8ICAgNzggKysrKysrKysrCiAuLi4vQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlLmggICAgICB8ICAgMjggKysrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIHwgICA2MyArKysrKysrCiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggICB8ICAgIDUgKwogLi4u
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmggICAgICAgfCAgICAxICsK
IC4uLi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAgIHwgIDEx
MSArKysrKysrKysrKysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5j
cHAgICAgICAgIHwgICAzMSArKysrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJWaWV3VGVzdC5oICB8ICAgIDQgKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvd2Via2l0Mi5oICAgICAgICAgfCAgICAzICstCiAxMiBmaWxlcyBjaGFuZ2VkLCA1MTIgaW5z
ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmFtCmluZGV4IDNiOGU3YmQuLmNkM2E2YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBA
IC05MCw2ICs5MCw3IEBAIGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJJChXZWJL
aXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCBcCisJJChXZWJLaXQy
KS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCBcCiAJJChXZWJL
aXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oIFwKIAkkKFdlYktp
dDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uaCBcCiAJ
JChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKQEAgLTU0OCw2
ICs1NDksOSBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BX
RUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bi5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb25Qcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIFwKKwlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmggXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uLmNw
cCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNp
b24uaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVj
aXNpb25Qcml2YXRlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwYmE1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAKQEAg
LTAsMCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIgor
CisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmgiCisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Cisg
KiBAU2hvcnRfZGVzY3JpcHRpb246IEEgcmVxdWVzdCB0byBvcGVuIGEgZmlsZSBjaG9vc2VyLgor
ICogQFRpdGxlOiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqIEBTZWVfYWxzbzogI1dlYktp
dFdlYlZpZXcKKyAqLworR19ERUZJTkVfVFlQRShXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QsIHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdCwgR19UWVBFX09CSkVDVCkKKworc3RydWN0IF9XZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlIHsKKyAgICBXS1JldGFpblB0cjxXS09wZW5QYW5l
bFBhcmFtZXRlcnNSZWY+IHdrUGFyYW1ldGVyczsKKyAgICBXS1JldGFpblB0cjxXS09wZW5QYW5l
bFJlc3VsdExpc3RlbmVyUmVmPiB3a0xpc3RlbmVyOworICAgIEdPd25QdHI8R1NMaXN0PiBhY2Nl
cHRNaW1lVHlwZXM7CisgICAgR093blB0cjxHU0xpc3Q+IHNlbGVjdGVkRmlsZXM7CisgICAgR1Jl
ZlB0cjxHdGtGaWxlRmlsdGVyPiBmaWxlRmlsdGVyOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7
Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdChXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmVxdWVzdC0+cHJpdiA9IEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9GSUxFX0NIT09T
RVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSk7CisgICAgbmV3IChy
ZXF1ZXN0LT5wcml2KSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXplKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklM
RV9DSE9PU0VSX1JFUVVFU1Qob2JqZWN0KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVxdWVz
dCBpcyBhbHdheXMgaGFuZGxlZCBiZWZvcmUgZmluYWxpemluZy4KKyAgICBpZiAoIXJlcXVlc3Qt
PnByaXYtPmhhbmRsZWRSZXF1ZXN0KQorICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfY2FuY2VsKHJlcXVlc3QpOworCisgICAgLy8gR093blB0ciBkb2Vzbid0IGZyZWUgZWxlbWVu
dHMgZm9yIGEgR1NMaXN0IHlldC4KKyAgICBnX3NsaXN0X2ZvcmVhY2gocmVxdWVzdC0+cHJpdi0+
YWNjZXB0TWltZVR5cGVzLmdldCgpLCByZWludGVycHJldF9jYXN0PEdGdW5jPihnX2ZyZWUpLCAw
KTsKKyAgICBnX3NsaXN0X2ZvcmVhY2gocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcy5nZXQo
KSwgcmVpbnRlcnByZXRfY2FzdDxHRnVuYz4oZ19mcmVlKSwgMCk7CisKKyAgICByZXF1ZXN0LT5w
cml2LT5+V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2xh
c3NfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xh
c3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVz
dEZpbmFsaXplOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1ZXN0Q2xhc3MsIHNp
emVvZihXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKSk7Cit9CisKK1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCogd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKFdLT3BlblBhbmVs
UGFyYW1ldGVyc1JlZiB3a1BhcmFtZXRlcnMsIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYg
d2tMaXN0ZW5lcikKK3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBX
RUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNULCBOVUxMKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+d2tQYXJhbWV0ZXJz
ID0gd2tQYXJhbWV0ZXJzOworICAgIHJlcXVlc3QtPnByaXYtPndrTGlzdGVuZXIgPSB3a0xpc3Rl
bmVyOworICAgIHJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0ID0gZmFsc2U7CisgICAgcmV0
dXJuIHJlcXVlc3Q7Cit9CisKK2dib29sZWFuIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9h
bGxvd3NfbXVsdGlwbGVfZmlsZXMoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVT
VChyZXF1ZXN0KSwgRkFMU0UpOworICAgIHJldHVybiBXS09wZW5QYW5lbFBhcmFtZXRlcnNHZXRB
bGxvd3NNdWx0aXBsZUZpbGVzKHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycy5nZXQoKSk7Cit9
CisKK0dTTGlzdCogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworCisgICAg
aWYgKHJlcXVlc3QtPnByaXYtPmFjY2VwdE1pbWVUeXBlcykKKyAgICAgICAgcmV0dXJuIHJlcXVl
c3QtPnByaXYtPmFjY2VwdE1pbWVUeXBlcy5nZXQoKTsKKworICAgIFdLUmV0YWluUHRyPFdLQXJy
YXlSZWY+IHdrTWltZVR5cGVzKEFkb3B0V0ssIFdLT3BlblBhbmVsUGFyYW1ldGVyc0NvcHlBY2Nl
cHRlZE1JTUVUeXBlcyhyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpKTsKKyAgICBH
U0xpc3QqIHJldHVybkxpc3QgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV0tBcnJh
eUdldFNpemUod2tNaW1lVHlwZXMuZ2V0KCkpOyArK2kpIHsKKyAgICAgICAgV0tTdHJpbmdSZWYg
d2tNaW1lVHlwZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5k
ZXgod2tNaW1lVHlwZXMuZ2V0KCksIGkpKTsKKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlU3RyaW5n
ID0gdG9JbXBsKHdrTWltZVR5cGUpLT5zdHJpbmcoKTsKKyAgICAgICAgaWYgKG1pbWVUeXBlU3Ry
aW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXR1cm5MaXN0
ID0gZ19zbGlzdF9wcmVwZW5kKHJldHVybkxpc3QsIGdfc3RyZHVwKG1pbWVUeXBlU3RyaW5nLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICB9CisKKyAgICByZXF1ZXN0LT5wcml2LT5hY2NlcHRNaW1lVHlw
ZXMuc2V0KGdfc2xpc3RfcmV2ZXJzZShyZXR1cm5MaXN0KSk7CisgICAgcmV0dXJuIHJlcXVlc3Qt
PnByaXYtPmFjY2VwdE1pbWVUeXBlcy5nZXQoKTsKK30KKworR3RrRmlsZUZpbHRlciogd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKworICAgIGlmIChyZXF1ZXN0
LT5wcml2LT5maWxlRmlsdGVyKQorICAgICAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+ZmlsZUZp
bHRlci5nZXQoKTsKKworICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IHdrTWltZVR5cGVzKEFk
b3B0V0ssIFdLT3BlblBhbmVsUGFyYW1ldGVyc0NvcHlBY2NlcHRlZE1JTUVUeXBlcyhyZXF1ZXN0
LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpKTsKKworICAgIHNpemVfdCBudW1PZk1pbWVUeXBl
cyA9IFdLQXJyYXlHZXRTaXplKHdrTWltZVR5cGVzLmdldCgpKTsKKyAgICBpZiAoIW51bU9mTWlt
ZVR5cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlcXVlc3QtPnByaXYtPmZpbGVGaWx0
ZXIgPSBndGtfZmlsZV9maWx0ZXJfbmV3KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1PZk1pbWVUeXBlczsgKytpKSB7CisgICAgICAgIFdLU3RyaW5nUmVmIHdrTWltZVR5cGUgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTWltZVR5cGVz
LmdldCgpLCBpKSk7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHRvSW1wbCh3a01p
bWVUeXBlKS0+c3RyaW5nKCk7CisgICAgICAgIGlmIChtaW1lVHlwZVN0cmluZy5pc0VtcHR5KCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZ3RrX2ZpbGVfZmlsdGVyX2FkZF9taW1l
X3R5cGUocmVxdWVzdC0+cHJpdi0+ZmlsZUZpbHRlci5nZXQoKSwgbWltZVR5cGVTdHJpbmcudXRm
OCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPmZpbGVGaWx0
ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29zZV9m
aWxlcyhXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIEdTTGlzdCogZmlsZVVSSXMp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1Qo
cmVxdWVzdCkpOworCisgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IHdrU2VsZWN0
ZWRVUklzKEFkb3B0V0ssIFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGZvciAoR1NMaXN0
KiBpdGVtID0gZmlsZVVSSXM7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKKyAg
ICAgICAgaWYgKCFpdGVtLT5kYXRhKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFdL
UmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTChBZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhzdGF0aWNfY2FzdDxnY2hhcio+KGl0ZW0tPmRhdGEpKSk7CisgICAgICAgIFdLQXJyYXlB
cHBlbmRJdGVtKHdrU2VsZWN0ZWRVUklzLmdldCgpLCB3a1VSTC5nZXQoKSk7CisgICAgfQorCisg
ICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lckNob29zZUZpbGVzKHJlcXVlc3QtPnByaXYtPndr
TGlzdGVuZXIuZ2V0KCksIHdrU2VsZWN0ZWRVUklzLmdldCgpKTsKKyAgICByZXF1ZXN0LT5wcml2
LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7Cit9CisKK0dTTGlzdCogd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF91cmlzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVx
dWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VS
X1JFUVVFU1QocmVxdWVzdCksIDApOworCisgICAgaWYgKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVk
RmlsZXMpCisgICAgICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLmdldCgp
OworCisgICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0ZWRGaWxlTmFtZXMgPSB0b0ltcGwocmVxdWVz
dC0+cHJpdi0+d2tQYXJhbWV0ZXJzLmdldCgpKS0+c2VsZWN0ZWRGaWxlTmFtZXMoKTsKKyAgICBH
U0xpc3QqIHJldHVybkxpc3QgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2VsZWN0
ZWRGaWxlTmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJldHVybkxpc3QgPSBnX3NsaXN0X3By
ZXBlbmQocmV0dXJuTGlzdCwgZ19maWxlbmFtZV90b191cmkoc2VsZWN0ZWRGaWxlTmFtZXNbaV0u
dXRmOCgpLmRhdGEoKSwgMCwgMCkpOworCisgICAgcmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxl
cy5zZXQoZ19zbGlzdF9yZXZlcnNlKHJldHVybkxpc3QpKTsKKyAgICByZXR1cm4gcmVxdWVzdC0+
cHJpdi0+c2VsZWN0ZWRGaWxlcy5nZXQoKTsKK30KKwordm9pZCB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfY2FuY2VsKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0
KSk7CisgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lckNhbmNlbChyZXF1ZXN0LT5wcml2LT53
a0xpc3RlbmVyLmdldCgpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCA9IHRy
dWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjc4OTE5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaApAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJ
VDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAi
T25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5k
aWYKKworI2lmbmRlZiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RfaAorI2RlZmluZSBXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3RfaAorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVT
VChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KSkK
KyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9S
RVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9J
U19GSUxFX0NIT09TRVJfUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCkpCisjZGVmaW5l
IFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCkp
CisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJf
UkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICAgICAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MgICBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3RQcml2YXRlIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGU7CisKK3N0
cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKwor
ICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUg
KnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzIHsKKyAg
ICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlICAgICAgICAgICAgICAodm9pZCk7CisK
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3Nf
bXVsdGlwbGVfZmlsZXMgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dF
QktJVF9BUEkgR1NMaXN0ICoKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90
eXBlcyAgICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJ
VF9BUEkgR3RrRmlsZUZpbHRlciAqCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXNfZmlsdGVyIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMg
ICAgICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTTGlzdCAgICAgICAgICAg
ICAgICAgICAqdXJpcyk7CisKK1dFQktJVF9BUEkgR1NMaXN0ICoKK3dlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfdXJpcyAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2NhbmNlbCAgICAgICAgICAgICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1
ZXN0KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQ
cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg2YmQ1MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGVfaAorCisj
aW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9X
ZWJLaXQyLmg+CisKK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogd2Via2l0RmlsZUNob29zZXJS
ZXF1ZXN0Q3JlYXRlKFdLT3BlblBhbmVsUGFyYW1ldGVyc1JlZiwgV0tPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lclJlZik7CisKKyNlbmRpZiAvLyBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJ
Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xp
ZW50LmNwcAppbmRleCBlNzYyMTJkLi5iYzJjOWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCkBAIC0yMCwxMiArMjAsMTQg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRVSUNsaWVudC5oIgogCisj
aW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldl
YktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNp
bmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdpbmRvd1By
b3BlcnRpZXNQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKQEAgLTEzMSw2ICsxMzMsMTIgQEAgc3RhdGlj
IHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV0tQYWdlUmVmIHBhZ2UsIFdLSGl0VGVzdFJl
c3VsdFJlZiBoaXRUZXN0UmUKICAgICB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdF
QktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSwgaGl0VGVzdFJlc3VsdCwgd2tFdmVudE1vZGlmaWVy
c1RvR2RrTW9kaWZpZXJzKG1vZGlmaWVycykpOwogfQogCitzdGF0aWMgdm9pZCBydW5PcGVuUGFu
ZWwoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLT3BlblBhbmVsUGFyYW1ldGVy
c1JlZiBwYXJhbWV0ZXJzLCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIGxpc3RlbmVyLCBj
b25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdENyZWF0
ZShwYXJhbWV0ZXJzLCBsaXN0ZW5lcikpOworICAgIHdlYmtpdFdlYlZpZXdNYWtlRmlsZUNob29z
ZXJSZXF1ZXN0KFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSwgcmVxdWVzdC5nZXQoKSk7Cit9
CisKIHZvaWQgYXR0YWNoVUlDbGllbnRUb1ZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsK
ICAgICBXS1BhZ2VVSUNsaWVudCB3a1VJQ2xpZW50ID0gewpAQCAtMTY0LDcgKzE3Miw3IEBAIHZv
aWQgYXR0YWNoVUlDbGllbnRUb1ZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICAgICAg
MCwgLy8gZGlkRHJhdwogICAgICAgICAwLCAvLyBwYWdlRGlkU2Nyb2xsCiAgICAgICAgIDAsIC8v
IGV4Y2VlZGVkRGF0YWJhc2VRdW90YQotICAgICAgICAwLCAvLyBydW5PcGVuUGFuZWwKKyAgICAg
ICAgcnVuT3BlblBhbmVsLAogICAgICAgICAwLCAvLyBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0CiAgICAgICAgIDAsIC8vIGhlYWRlckhlaWdodAogICAgICAgICAw
LCAvLyBmb290ZXJIZWlnaHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggYWY3OTkzNS4uYTNhYTQ4NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTU5
LDYgKzU5LDcgQEAgZW51bSB7CiAgICAgU0NSSVBUX1BST01QVCwKIAogICAgIERFQ0lERV9QT0xJ
Q1ksCisgICAgUlVOX0ZJTEVfQ0hPT1NFUiwKIAogICAgIE1PVVNFX1RBUkdFVF9DSEFOR0VELAog
CkBAIC0xNjAsNiArMTYxLDUwIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3RGVjaWRl
UG9saWN5KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQb2xpY3lEZWNpc2lvbioKICAgICByZXR1cm4g
VFJVRTsKIH0KIAorc3RhdGljIHZvaWQgZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNr
KEd0a0RpYWxvZyogZGlhbG9nLCBnaW50IHJlc3BvbnNlSUQsIFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4g
YWRvcHRlZFJlcXVlc3QgPSBhZG9wdEdSZWYocmVxdWVzdCk7CisgICAgaWYgKHJlc3BvbnNlSUQg
PT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkgeworICAgICAgICBHU0xpc3QqIGZpbGVVcmlzID0gZ3Rr
X2ZpbGVfY2hvb3Nlcl9nZXRfdXJpcyhHVEtfRklMRV9DSE9PU0VSKGRpYWxvZykpOworICAgICAg
ICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX2ZpbGVzKGFkb3B0ZWRSZXF1ZXN0
LmdldCgpLCBmaWxlVXJpcyk7CisgICAgICAgIGdfc2xpc3RfZnJlZV9mdWxsKGZpbGVVcmlzLCBn
X2ZyZWUpOworICAgIH0gZWxzZQorICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Y2FuY2VsKGFkb3B0ZWRSZXF1ZXN0LmdldCgpKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveShH
VEtfV0lER0VUKGRpYWxvZykpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld1J1
bkZpbGVDaG9vc2VyKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9n
ZXRfdG9wbGV2ZWwoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgaWYgKCF3aWRnZXRJc09uc2Ny
ZWVuVG9wbGV2ZWxXaW5kb3codG9wbGV2ZWwpKQorICAgICAgICB0b3BsZXZlbCA9IDA7CisKKyAg
ICBnYm9vbGVhbiBhbGxvd3NNdWx0aXBsZUZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2FsbG93c19tdWx0aXBsZV9maWxlcyhyZXF1ZXN0KTsKKyAgICBHdGtXaWRnZXQqIGRpYWxv
ZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyhhbGxvd3NNdWx0aXBsZUZpbGVzID8gXygi
U2VsZWN0IEZpbGVzIGZvciBVcGxvYWQiKSA6IF8oIlNlbGVjdCBGaWxlIGZvciBVcGxvYWQiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Bs
ZXZlbCA/IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9PUEVO
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
S19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX09QRU4sIEdUS19SRVNQ
T05TRV9BQ0NFUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCk7CisKKyAgICBHUmVmUHRyPEd0a0ZpbGVGaWx0ZXI+IGZpbHRlcih3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpKTsK
KyAgICBpZiAoZmlsdGVyKQorICAgICAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9maWx0ZXIoR1RL
X0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBmaWx0ZXIuZ2V0KCkpOworICAgIGd0a19maWxlX2Nob29z
ZXJfc2V0X3NlbGVjdF9tdWx0aXBsZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIGFsbG93c011
bHRpcGxlRmlsZXMpOworCisgICAgR1NMaXN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF91cmlzKHJlcXVlc3QpOworICAgIGlmIChzZWxl
Y3RlZEZpbGVzKSB7CisgICAgICAgIGd0a19maWxlX2Nob29zZXJfc2VsZWN0X3VyaShHVEtfRklM
RV9DSE9PU0VSKGRpYWxvZyksIHN0YXRpY19jYXN0PGdjaGFyKj4oc2VsZWN0ZWRGaWxlcy0+ZGF0
YSkpOworICAgICAgICBnX3NsaXN0X2ZyZWVfZnVsbChzZWxlY3RlZEZpbGVzLCBnX2ZyZWUpOwor
ICAgIH0KKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCAicmVzcG9uc2UiLCBHX0NBTExC
QUNLKGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayksIGdfb2JqZWN0X3JlZihyZXF1
ZXN0KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGRpYWxvZyk7CisKKyAgICByZXR1cm4gVFJVRTsK
K30KKwogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVj
dCkKIHsKICAgICBpZiAoR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFz
cyktPmNvbnN0cnVjdGVkKQpAQCAtMjYzLDYgKzMwOCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAg
IHdlYlZpZXdDbGFzcy0+c2NyaXB0X2NvbmZpcm0gPSB3ZWJraXRXZWJWaWV3U2NyaXB0Q29uZmly
bTsKICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9wcm9tcHQgPSB3ZWJraXRXZWJWaWV3U2NyaXB0
UHJvbXB0OwogICAgIHdlYlZpZXdDbGFzcy0+ZGVjaWRlX3BvbGljeSA9IHdlYmtpdFdlYlZpZXdE
ZWNpZGVQb2xpY3k7CisgICAgd2ViVmlld0NsYXNzLT5ydW5fZmlsZV9jaG9vc2VyID0gd2Via2l0
V2ViVmlld1J1bkZpbGVDaG9vc2VyOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHdl
YlZpZXdDbGFzcywgc2l6ZW9mKFdlYktpdFdlYlZpZXdQcml2YXRlKSk7CiAKQEAgLTYyMiw2ICs2
NjgsMTcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2Vi
Vmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQ
RV9QT0xJQ1lfREVDSVNJT04sCiAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9QT0xJ
Q1lfREVDSVNJT05fVFlQRSk7CiAKKyAgICAvKiBUT0RPOiBEZXNjcmliZSB0aGUgc2lnbmFsLiAq
LworICAgIHNpZ25hbHNbUlVOX0ZJTEVfQ0hPT1NFUl0gPQorICAgICAgICBnX3NpZ25hbF9uZXco
InJ1bi1maWxlLWNob29zZXIiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xB
U1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNU
LAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFz
cywgcnVuX2ZpbGVfY2hvb3NlciksCisgICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1
bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAgLyogYWNjdW11bGF0b3IgZGF0YSAqLywKKyAgICAgICAg
ICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLCAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAqLwor
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QpOwor
CiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzo6bW91c2UtdGFyZ2V0LWNoYW5nZWQ6CiAg
ICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBp
cyBlbWl0dGVkCkBAIC03NzEsNiArODI4LDEyIEBAIHZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFy
Z2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXS0hpdFRlc3RSZXN1bHRSZWYKICAg
ICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbTU9VU0VfVEFSR0VUX0NIQU5HRURdLCAw
LCBwcml2LT5tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCksIG1vZGlmaWVycyk7CiB9CiAK
K3ZvaWQgd2Via2l0V2ViVmlld01ha2VGaWxlQ2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdib29s
ZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tSVU5f
RklMRV9DSE9PU0VSXSwgMCwgcmVxdWVzdCwgJnJldHVyblZhbHVlKTsKK30KKwogLyoqCiAgKiB3
ZWJraXRfd2ViX3ZpZXdfbmV3OgogICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCAwMDgxYmUzLi5mOGNkYjk1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0zNiw2
ICszNiw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
V2luZG93UHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oPgogCiBH
X0JFR0lOX0RFQ0xTCkBAIC0xNDAsNiArMTQxLDEwIEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Ns
YXNzIHsKICAgICBnYm9vbGVhbiAgICgqIGRlY2lkZV9wb2xpY3kpICAgICAgICAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdFBvbGljeURlY2lzaW9uICAgICAgKmRlY2lzaW9uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lvblR5
cGUgIHR5cGUpOworCisgICAgZ2Jvb2xlYW4gICAoKiBydW5fZmlsZV9jaG9vc2VyKSAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgICpyZXF1ZXN0KTsK
KwogICAgIHZvaWQgICAgICAgKCogbW91c2VfdGFyZ2V0X2NoYW5nZWQpIChXZWJLaXRXZWJWaWV3
ICAgICAgICAgICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0ICAgICAgKmhpdF90ZXN0X3Jlc3VsdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAg
ICAgICBtb2RpZmllcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKaW5kZXggNzY4YTYyMC4uYjMxNmQxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1By
aXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3UHJpdmF0ZS5oCkBAIC00Myw2ICs0Myw3IEBAIHZvaWQgd2Via2l0V2ViVmlld1J1bkphdmFT
Y3JpcHRBbGVydChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7CiBib29s
IHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybShXZWJLaXRXZWJWaWV3KiwgY29uc3Qg
Q1N0cmluZyYgbWVzc2FnZSk7CiBXS1N0cmluZ1JlZiB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlw
dFByb21wdChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSwgY29uc3QgQ1N0
cmluZyYgZGVmYXVsdFRleHQpOwogdm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBvbGljeURlY2lzaW9u
KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUsIFdlYktpdFBvbGljeURl
Y2lzaW9uKik7Cit2b2lkIHdlYmtpdFdlYlZpZXdNYWtlRmlsZUNob29zZXJSZXF1ZXN0KFdlYktp
dFdlYlZpZXcqLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqKTsKIHZvaWQgd2Via2l0V2ViVmll
d01vdXNlVGFyZ2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiwgV0tIaXRUZXN0UmVzdWx0UmVmLCB1
bnNpZ25lZCBtb2RpZmllcnMpOwogCiAjZW5kaWYgLy8gV2ViS2l0V2ViVmlld1ByaXZhdGVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IDQ3ZGE5OGUuLjA1NjVhMTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2Vi
S2l0V2ViVmlldy5jcHAKQEAgLTIyNiw2ICsyMjYsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbmV3V2ViVmlldzsKICAgICB9CiAKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29z
ZXIoV2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgVUlD
bGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxl
dGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisgICAgICAgIHRlc3QtPm1f
ZmlsZUNob29zZXJSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0
ZXN0LT5tX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCiAgICAgc3Rh
dGljIGdib29sZWFuIHNjcmlwdEFsZXJ0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBjaGFyKiBtZXNz
YWdlLCBVSUNsaWVudFRlc3QqIHRlc3QpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHRlc3QtPm1f
c2NyaXB0VHlwZSkgewpAQCAtMjg0LDYgKzI5Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRp
Y2FsbHkod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsKICAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNLKHZp
ZXdDcmVhdGUpLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJy
dW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlciksIHRoaXMpOwogICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlwdC1hbGVydCIsIEdfQ0FMTEJB
Q0soc2NyaXB0QWxlcnQpLCB0aGlzKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZp
ZXcsICJzY3JpcHQtY29uZmlybSIsIEdfQ0FMTEJBQ0soc2NyaXB0Q29uZmlybSksIHRoaXMpOwog
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlwdC1wcm9tcHQiLCBHX0NB
TExCQUNLKHNjcmlwdFByb21wdCksIHRoaXMpOwpAQCAtMzEyLDEyICszMjEsMjAgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCk7CiAgICAg
fQogCisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBtb3VzZUJ1dHRvbkNsaWNrQW5kV2Fp
dEZvckZpbGVDaG9vc2VyUmVxdWVzdChpbnQgeCwgaW50IHkpCisgICAgeworICAgICAgICBtb3Vz
ZUJ1dHRvbkNsaWNrKHgsIHkpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
CisgICAgICAgIHJldHVybiBtX2ZpbGVDaG9vc2VyUmVxdWVzdC5nZXQoKTsKKyAgICB9CisKICAg
ICBWZWN0b3I8V2ViVmlld0V2ZW50cz4gbV93ZWJWaWV3RXZlbnRzOwogICAgIFNjcmlwdFR5cGUg
bV9zY3JpcHRUeXBlOwogICAgIGJvb2wgbV9zY3JpcHREaWFsb2dDb25maXJtZWQ7CiAgICAgV2lu
ZG93UHJvcGVydGllcyBtX3dpbmRvd1Byb3BlcnRpZXM7CiAgICAgSGFzaFNldDxXVEY6OlN0cmlu
Zz4gbV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZDsKICAgICBHUmVmUHRyPFdlYktpdEhpdFRlc3RS
ZXN1bHQ+IG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0OworICAgIEdSZWZQdHI8V2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0PiBtX2ZpbGVDaG9vc2VyUmVxdWVzdDsKICAgICB1bnNpZ25lZCBpbnQg
bV9tb3VzZVRhcmdldE1vZGlmaWVyczsKIH07CiAKQEAgLTMzMyw2ICszNTAsOTkgQEAgc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRU
ZXN0OjpDbG9zZSk7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVy
KEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQoreworICAgIEd0
a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlckluZm87CisgICAgZmlsdGVySW5mby5jb250YWlucyA9IEdU
S19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7CisgICAgZmlsdGVySW5mby5taW1lX3R5cGUgPSBtaW1l
VHlwZTsKKyAgICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJJ
bmZvKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QoVUlD
bGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRv
d0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmaWxlQ2hvb3Nl
ckhUTUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0
ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+PC9ib2R5
PjwvaHRtbD4iOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8g
TUlNRSBmaWx0ZXJpbmcuCisgICAgR093blB0cjxjaGFyPiBzaW1wbGVGaWxlVXBsb2FkSFRNTChn
X3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiIikpOworICAgIHRlc3QtPmxv
YWRIdG1sKHNpbXBsZUZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIGZpbGVDaG9v
c2VyUmVxdWVzdCA9IHRlc3QtPm1vdXNlQnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJS
ZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
YWxsb3dzX211bHRpcGxlX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCkpOworICAgIEdTTGlzdCog
bWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZp
bGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7CisgICAgR3RrRmls
ZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5
cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOwor
ICAgIEdTTGlzdCogc2VsZWN0ZWRVUklzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9zZWxlY3RlZF91cmlzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVj
dGVkVVJJcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hv
b3NlclJlcXVlc3QpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBhbGxvd2VkLCBubyBN
SU1FIGZpbHRlcmluZywgc29tZSBwcmUtc2VsZWN0ZWQgZmlsZXMuCisgICAgR093blB0cjxjaGFy
PiBtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hv
b3NlckhUTUxGb3JtYXQsICJtdWx0aXBsZSIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChtdWx0aXBs
ZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5tb3VzZUJ1dHRv
bkNsaWNrQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX2ZpbGVzKGZpbGVDaG9v
c2VyUmVxdWVzdCkpOworICAgIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1l
VHlwZXMpOworICAgIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWlt
ZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVy
KTsKKyAgICBzZWxlY3RlZFVSSXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Nl
bGVjdGVkX3VyaXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRV
UklzKTsKKworICAgIC8vIFNlbGVjdCBzb21lIGZpbGVzLgorICAgIEdTTGlzdCogZmlsZXNUb1Nl
bGVjdCA9IDA7CisgICAgZmlsZXNUb1NlbGVjdCA9IGdfc2xpc3RfYXBwZW5kKGZpbGVzVG9TZWxl
Y3QsIGdfc3RyZHVwKCJmaWxlOi8vL2Zvby9iYXIvYmF6LzEiKSk7CisgICAgZmlsZXNUb1NlbGVj
dCA9IGdfc2xpc3RfYXBwZW5kKGZpbGVzVG9TZWxlY3QsIGdfc3RyZHVwKCJmaWxlOi8vL2Zvby9i
YXIvYmF6LzIiKSk7CisgICAgZmlsZXNUb1NlbGVjdCA9IGdfc2xpc3RfYXBwZW5kKGZpbGVzVG9T
ZWxlY3QsIGdfc3RyZHVwKCJmaWxlOi8vL2Zvby9iYXIvYmF6LzMiKSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGdfc2xpc3RfbGVuZ3RoKGZpbGVzVG9TZWxlY3QpLCA9PSwgMyk7CisgICAgd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29zZV9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QsIGZp
bGVzVG9TZWxlY3QpOworICAgIGdfc2xpc3RfZnJlZV9mdWxsKGZpbGVzVG9TZWxlY3QsIGdfZnJl
ZSk7CisKKyAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0aGUgbGlz
dCBvZiBmaWxlcyBzZWxlY3RlZAorICAgIC8vIGluIHRoZSBwcmV2aW91cyBzdGVwIGFwcGVhcnMg
bm93IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgorICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9
IHRlc3QtPm1vdXNlQnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUp
OworICAgIHNlbGVjdGVkVVJJcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2Vs
ZWN0ZWRfdXJpcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkVVJJ
cyk7CisgICAgR1NMaXN0KiBzZWxlY3RlZFVSSSA9IHNlbGVjdGVkVVJJczsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihzZWxlY3RlZFVSSS0+ZGF0YSksID09LCAiZmls
ZTovLy9mb28vYmFyL2Jhei8xIik7CisgICAgc2VsZWN0ZWRVUkkgPSBnX3NsaXN0X25leHQoc2Vs
ZWN0ZWRVUkkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxnY2hhcio+KHNlbGVj
dGVkVVJJLT5kYXRhKSwgPT0sICJmaWxlOi8vL2Zvby9iYXIvYmF6LzIiKTsKKyAgICBzZWxlY3Rl
ZFVSSSA9IGdfc2xpc3RfbmV4dChzZWxlY3RlZFVSSSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0
YXRpY19jYXN0PGdjaGFyKj4oc2VsZWN0ZWRVUkktPmRhdGEpLCA9PSwgImZpbGU6Ly8vZm9vL2Jh
ci9iYXovMyIpOworICAgIHNlbGVjdGVkVVJJID0gZ19zbGlzdF9uZXh0KHNlbGVjdGVkVVJJKTsK
KyAgICBnX2Fzc2VydCghc2VsZWN0ZWRVUkkpOworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVj
dGlvbnMgbm90IGFsbG93ZWQsIG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZp
bGVzLi4KKyAgICBHT3duUHRyPGNoYXI+IG1pbWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1MKGdfc3Ry
ZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8v
KixpbWFnZS8qJyIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChtaW1lRmlsdGVyZWRGaWxlVXBsb2Fk
SFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAg
ZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+bW91c2VCdXR0b25DbGlja0FuZFdhaXRGb3JGaWxl
Q2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KSk7CisgICAg
bWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZp
bGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19zbGlzdF9sZW5ndGgobWltZVR5cGVzKSwgPT0sIDMpOworCisgICAgR1NMaXN0
KiBtaW1lVHlwZSA9IG1pbWVUeXBlczsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8
Z2NoYXIqPihtaW1lVHlwZS0+ZGF0YSksID09LCAiYXVkaW8vKiIpOworICAgIG1pbWVUeXBlID0g
Z19zbGlzdF9uZXh0KG1pbWVUeXBlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8
Z2NoYXIqPihtaW1lVHlwZS0+ZGF0YSksID09LCAidmlkZW8vKiIpOworICAgIG1pbWVUeXBlID0g
Z19zbGlzdF9uZXh0KG1pbWVUeXBlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8
Z2NoYXIqPihtaW1lVHlwZS0+ZGF0YSksID09LCAiaW1hZ2UvKiIpOworICAgIG1pbWVUeXBlID0g
Z19zbGlzdF9uZXh0KG1pbWVUeXBlKTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGUpOworCisgICAg
ZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRl
cihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KEdUS19JU19GSUxFX0ZJTFRFUihm
aWx0ZXIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImF1
ZGlvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJ2
aWRlby8qIikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAi
aW1hZ2UvKiIpKTsKKyAgICBzZWxlY3RlZFVSSXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3NlbGVjdGVkX3VyaXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCgh
c2VsZWN0ZWRVUklzKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZp
bGVDaG9vc2VyUmVxdWVzdCk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3SmF2YVNjcmlw
dERpYWxvZ3MoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBodG1sT25Mb2FkRm9ybWF0ID0gIjxodG1sPjxib2R5IG9uTG9hZD1cIiVz
XCI+PC9ib2R5PjwvaHRtbD4iOwpAQCAtNDU2LDYgKzU2Niw3IEBAIHZvaWQgYmVmb3JlQWxsKCkK
ICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNldHRpbmdzIiwgdGVzdFdl
YlZpZXdTZXR0aW5ncyk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJy
ZXBsYWNlLWNvbnRlbnQiLCB0ZXN0V2ViVmlld1JlcGxhY2VDb250ZW50KTsKICAgICBVSUNsaWVu
dFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjcmVhdGUtcmVhZHktY2xvc2UiLCB0ZXN0V2Vi
Vmlld0NyZWF0ZVJlYWR5Q2xvc2UpOworICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImZpbGUtY2hvb3Nlci1yZXF1ZXN0IiwgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVl
c3QpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImphdmFzY3JpcHQt
ZGlhbG9ncyIsIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3MpOwogICAgIFVJQ2xpZW50VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndpbmRvdy1wcm9wZXJ0aWVzIiwgdGVzdFdlYlZpZXdX
aW5kb3dQcm9wZXJ0aWVzKTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJtb3VzZS10YXJnZXQiLCB0ZXN0V2ViVmlld01vdXNlVGFyZ2V0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAppbmRl
eCAwMGQzYjNlLi4yOWM1M2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCkBAIC0xODAsMyArMTgwLDM0IEBAIHZv
aWQgV2ViVmlld1Rlc3Q6Om1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IG1v
dXNlTW9kaWZpZXJzKQogICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50LmdldCgpKTsKIH0KIAor
dm9pZCBXZWJWaWV3VGVzdDo6bW91c2VCdXR0b25DbGljayhpbnQgeCwgaW50IHksIHVuc2lnbmVk
IGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKK3sKKyAgICBtb3VzZUJ1
dHRvbkV2ZW50KEdES19CVVRUT05fUFJFU1MsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmllcnMp
OworICAgIG1vdXNlQnV0dG9uRXZlbnQoR0RLX0JVVFRPTl9SRUxFQVNFLCB4LCB5LCBidXR0b24s
IG1vdXNlTW9kaWZpZXJzKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6bW91c2VCdXR0b25FdmVu
dChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0
b24sIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2VydChtX3BhcmVu
dFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZp
ZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsK
KworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoZXZlbnRUeXBlKSk7
CisgICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dp
ZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsKKworICAgIGV2
ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPmJ1dHRvbi54
ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5OworICAgIGV2ZW50LT5idXR0b24uYXhlcyA9
IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOworICAgIGV2ZW50
LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOworCisgICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBn
ZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZp
Y2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7CisKKyAgICBp
bnQgeFJvb3QsIHlSb290OworICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRn
ZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworICAgIGV2
ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7CisgICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5
Um9vdDsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAppbmRl
eCA5NWE1NjljLi43ZDkyNGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKQEAgLTQ1LDExICs0NSwxNSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKIAogICAgIHZvaWQg
bW91c2VNb3ZlVG8oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAw
KTsKKyAgICB2b2lkIG1vdXNlQnV0dG9uQ2xpY2soaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQg
YnV0dG9uID0gMSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCk7CiAKICAgICBXZWJL
aXRXZWJWaWV3KiBtX3dlYlZpZXc7CiAgICAgR01haW5Mb29wKiBtX21haW5Mb29wOwogICAgIENT
dHJpbmcgbV9hY3RpdmVVUkk7CiAgICAgR3RrV2lkZ2V0KiBtX3BhcmVudFdpbmRvdzsKKworcHJp
dmF0ZToKKyAgICB2b2lkIG1vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlLCBpbnQsIGludCwg
dW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogfTsKIAogI2VuZGlmIC8vIFdlYlZpZXdUZXN0
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCAzYWY5
OTA0Li5kZTAzMDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0
Mi5oCkBAIC0zMCwxMyArMzAsMTQgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVkaXRpbmdD
b21tYW5kcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RW51bVR5cGVzLmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRFcnJvci5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5oPgogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0VVJJUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVzcG9uc2Uu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4KLSNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3
Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgogCiAjdW5kZWYgX19XRUJLSVQyX0hfSU5T
SURFX18KLS0gCjEuNy43LjUKCg==
</data>
<flag name="commit-queue"
          id="129463"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127456</attachid>
            <date>2012-02-16 15:32:19 -0800</date>
            <delta_ts>2012-02-17 08:49:12 -0800</delta_ts>
            <desc>Patch Proposal + Unit Tests (GSList* version)</desc>
            <filename>0001-Implement-runOpenPanel-in-WebKit2GTK-GSList.patch</filename>
            <type>text/plain</type>
            <size>37649</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBkNDIwMWM5NGE3ZTRmMDQ4NWE5YTljM2EzY2NiZTk3NTFmYWNlMTNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDEwIEZlYiAyMDEyIDEyOjEzOjU5ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gSW1wbGVtZW50IHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXQyR1RLKyAoR1NMaXN0KikKCi0tLQog
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgICA0
ICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwIHwg
IDIzMyArKysrKysrKysrKysrKysrKysrKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdC5oICAgfCAgIDc4ICsrKysrKysKIC4uLi9BUEkvZ3RrL1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCAgICAgIHwgICAyOCArKysKIC4uLi9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcCAgIHwgICAxMCArLQogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgfCAgIDYxICsrKysrCiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggICB8ICAgIDkg
Ky0KIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oICAgICAgIHwg
ICAgMSArCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3Bw
ICB8ICAxMTIgKysrKysrKysrKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdU
ZXN0LmNwcCAgICAgICAgfCAgIDMxICsrKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViVmlld1Rlc3QuaCAgfCAgICA0ICsKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaCAgICAgICAgIHwgICAgMyArLQogMTIgZmlsZXMgY2hhbmdlZCwgNTcw
IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9H
TlVtYWtlZmlsZS5hbQppbmRleCAzYjhlN2JkLi5jZDNhNmM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5h
bQpAQCAtOTAsNiArOTAsNyBAQCBsaWJ3ZWJraXQyZ3RraW5jbHVkZV9IRUFERVJTID0gXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBcCiAJJChXZWJLaXQyKS9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmggXAogCSQoV2ViS2l0MikvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmggXAorCSQoV2Vi
S2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmggXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24uaCBcCiAJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLmgg
XAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBcCkBAIC01
NDgsNiArNTQ5LDkgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9O
QF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVj
aXNpb24uaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCBcCisJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lv
bi5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURl
Y2lzaW9uLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGlj
eURlY2lzaW9uUHJpdmF0ZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDNlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3Bw
CkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qu
aCIKKworI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKKworLyoqCisgKiBTRUNUSU9OOiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQSByZXF1ZXN0IHRvIG9wZW4gYSBmaWxlIGNob29z
ZXIuCisgKiBAVGl0bGU6IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICogQFNlZV9hbHNvOiAj
V2ViS2l0V2ViVmlldworICovCitHX0RFRklORV9UWVBFKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNUKQorCitzdHJ1Y3Qg
X1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgeworICAgIFdLUmV0YWluUHRyPFdLT3Bl
blBhbmVsUGFyYW1ldGVyc1JlZj4gd2tQYXJhbWV0ZXJzOworICAgIFdLUmV0YWluUHRyPFdLT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXJSZWY+IHdrTGlzdGVuZXI7CisgICAgR093blB0cjxHU0xpc3Q+
IG1pbWVUeXBlczsKKyAgICBHT3duUHRyPEdTTGlzdD4gc2VsZWN0ZWRVUklzOworICAgIEdSZWZQ
dHI8R3RrRmlsZUZpbHRlcj4gZmlsdGVyOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7Cit9Owor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9GSUxURVIsCisgICAgUFJPUF9NSU1FX1RZ
UEVTLAorICAgIFBST1BfU0VMRUNURURfVVJJUywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9pbml0KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVz
dCkKK3sKKyAgICByZXF1ZXN0LT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHJl
cXVlc3QsIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlKTsKKyAgICBuZXcgKHJlcXVlc3QtPnByaXYpIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdFByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RmlsZUNob29zZXJS
ZXF1ZXN0RmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmplY3QpOwor
CisgICAgLy8gTWFrZSBzdXJlIHRoZSByZXF1ZXN0IGlzIGFsd2F5cyBoYW5kbGVkIGJlZm9yZSBm
aW5hbGl6aW5nLgorICAgIGlmICghcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QpCisgICAg
ICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisKKyAgICAv
LyBHT3duUHRyIGRvZXNuJ3QgZnJlZSBlbGVtZW50cyBmb3IgYSBHU0xpc3QgeWV0LgorICAgIGdf
c2xpc3RfZm9yZWFjaChyZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMuZ2V0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8R0Z1bmM+KGdfZnJlZSksIDApOworICAgIGdfc2xpc3RfZm9yZWFjaChyZXF1ZXN0LT5w
cml2LT5zZWxlY3RlZFVSSXMuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Z1bmM+KGdfZnJlZSks
IDApOworCisgICAgcmVxdWVzdC0+cHJpdi0+fldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZh
dGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0Rmls
ZUNob29zZXJSZXF1ZXN0R2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQs
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2Jq
ZWN0KTsKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9GSUxURVI6CisgICAg
ICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9NSU1FX1RZUEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKHZhbHVlLCBj
b25zdF9jYXN0PEdTTGlzdCo+KHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90
eXBlcyhyZXF1ZXN0KSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNURURf
VVJJUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwgY29uc3RfY2FzdDxHU0xp
c3QqPih3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX3VyaXMocmVxdWVz
dCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9jbGFzc19pbml0KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKiByZXF1ZXN0Q2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJl
cXVlc3RDbGFzcyk7CisgICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0RmlsZUNob29z
ZXJSZXF1ZXN0RmluYWxpemU7CisgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtp
dEZpbGVDaG9vc2VyUmVxdWVzdEdldFByb3BlcnR5OworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShyZXF1ZXN0Q2xhc3MsIHNpemVvZihXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRl
KSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6ZmlsdGVyOgor
ICAgICAqCisgICAgICogVE9ETworICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoImZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJNSU1FIHR5cGVzIGZpbHRlciIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIEd0a0Zp
bGVGaWx0ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9GSUxFX0ZJTFRF
UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdDptaW1lLXR5cGVzOgorICAgICAqCisgICAgICogVE9ETworICAgICAqLworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX01JTUVfVFlQRVMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfcG9pbnRlcigibWltZS10eXBlcyIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XygiTUlNRSB0eXBlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF8oIlRoZSBsaXN0IG9mIE1JTUUgdHlwZXMgYXNzb2NpYXRlZCB3aXRo
IHRoZSByZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisgICAgICog
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OnNlbGVjdGVkLXVyaXM6CisgICAgICoKKyAgICAgKiBU
T0RPCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RD
bGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfU0VMRUNURURf
VVJJUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19w
b2ludGVyKCJzZWxlY3RlZC11cmlzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWxlY3RlZCBVUklzIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxpc3Qgb2Yg
c2VsZWN0ZWQgVVJJcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKK30KKworV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiB3ZWJraXRGaWxlQ2hv
b3NlclJlcXVlc3RDcmVhdGUoV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHdrUGFyYW1ldGVycywg
V0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiB3a0xpc3RlbmVyKQoreworICAgIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIE5VTEwpKTsKKyAg
ICByZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMgPSB3a1BhcmFtZXRlcnM7CisgICAgcmVxdWVz
dC0+cHJpdi0+d2tMaXN0ZW5lciA9IHdrTGlzdGVuZXI7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9
CisKK2dib29sZWFuIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVf
c2VsZWN0aW9uKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCks
IEZBTFNFKTsKKyAgICByZXR1cm4gV0tPcGVuUGFuZWxQYXJhbWV0ZXJzR2V0QWxsb3dzTXVsdGlw
bGVGaWxlcyhyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpOworfQorCitjb25zdCBH
U0xpc3QqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKworICAgIGlmIChy
ZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMpCisgICAgICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5t
aW1lVHlwZXMuZ2V0KCk7CisKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiB3a01pbWVUeXBl
cyhBZG9wdFdLLCBXS09wZW5QYW5lbFBhcmFtZXRlcnNDb3B5QWNjZXB0ZWRNSU1FVHlwZXMocmVx
dWVzdC0+cHJpdi0+d2tQYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgR1NMaXN0KiByZXR1cm5MaXN0
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKHdrTWltZVR5
cGVzLmdldCgpKTsgKytpKSB7CisgICAgICAgIFdLU3RyaW5nUmVmIHdrTWltZVR5cGUgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTWltZVR5cGVzLmdl
dCgpLCBpKSk7CisgICAgICAgIHJldHVybkxpc3QgPSBnX3NsaXN0X3ByZXBlbmQocmV0dXJuTGlz
dCwgZ19zdHJkdXAodG9JbXBsKHdrTWltZVR5cGUpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7
CisgICAgfQorCisgICAgcmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzLnNldChnX3NsaXN0X3JldmVy
c2UocmV0dXJuTGlzdCkpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMuZ2V0
KCk7Cit9CisKK0d0a0ZpbGVGaWx0ZXIqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
bWltZV90eXBlc19maWx0ZXIoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChy
ZXF1ZXN0KSwgMCk7CisKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+ZmlsdGVyKQorICAgICAgICBy
ZXR1cm4gcmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdldCgpOworCisgICAgV0tSZXRhaW5QdHI8V0tB
cnJheVJlZj4gd2tNaW1lVHlwZXMoQWRvcHRXSywgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzQ29weUFj
Y2VwdGVkTUlNRVR5cGVzKHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycy5nZXQoKSkpOworICAg
IHNpemVfdCBudW1PZk1pbWVUeXBlcyA9IFdLQXJyYXlHZXRTaXplKHdrTWltZVR5cGVzLmdldCgp
KTsKKyAgICBpZiAoIW51bU9mTWltZVR5cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
cXVlc3QtPnByaXYtPmZpbHRlciA9IGd0a19maWxlX2ZpbHRlcl9uZXcoKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bU9mTWltZVR5cGVzOyArK2kpIHsKKyAgICAgICAgV0tTdHJpbmdS
ZWYgd2tNaW1lVHlwZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0
SW5kZXgod2tNaW1lVHlwZXMuZ2V0KCksIGkpKTsKKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlU3Ry
aW5nID0gdG9JbXBsKHdrTWltZVR5cGUpLT5zdHJpbmcoKTsKKyAgICAgICAgaWYgKG1pbWVUeXBl
U3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBndGtfZmls
ZV9maWx0ZXJfYWRkX21pbWVfdHlwZShyZXF1ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCksIG1pbWVU
eXBlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIHJldHVybiByZXF1ZXN0LT5w
cml2LT5maWx0ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2Nob29zZV91cmlzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgY29uc3QgR1NM
aXN0KiB1cmlzKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NF
Ul9SRVFVRVNUKHJlcXVlc3QpKTsKKworICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVm
PiB3a1NlbGVjdGVkVVJJcyhBZG9wdFdLLCBXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBm
b3IgKGNvbnN0IEdTTGlzdCogaXRlbSA9IHVyaXM7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQo
aXRlbSkpIHsKKyAgICAgICAgaWYgKCFpdGVtLT5kYXRhKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTChBZG9wdFdLLCBXS1VSTENyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxnY2hhcio+KGl0ZW0tPmRhdGEpKSk7CisgICAg
ICAgIFdLQXJyYXlBcHBlbmRJdGVtKHdrU2VsZWN0ZWRVUklzLmdldCgpLCB3a1VSTC5nZXQoKSk7
CisgICAgfQorCisgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lckNob29zZUZpbGVzKHJlcXVl
c3QtPnByaXYtPndrTGlzdGVuZXIuZ2V0KCksIHdrU2VsZWN0ZWRVUklzLmdldCgpKTsKKyAgICBy
ZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7Cit9CisKK2NvbnN0IEdTTGlzdCog
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF91cmlzKFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworCisgICAgaWYgKHJlcXVl
c3QtPnByaXYtPnNlbGVjdGVkVVJJcykKKyAgICAgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPnNl
bGVjdGVkVVJJcy5nZXQoKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHNlbGVjdGVkRmlsZU5hbWVz
ID0gdG9JbXBsKHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycy5nZXQoKSktPnNlbGVjdGVkRmls
ZU5hbWVzKCk7CisgICAgR1NMaXN0KiByZXR1cm5MaXN0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNlbGVjdGVkRmlsZU5hbWVzLnNpemUoKTsgKytpKQorICAgICAgICByZXR1cm5M
aXN0ID0gZ19zbGlzdF9wcmVwZW5kKHJldHVybkxpc3QsIGdfZmlsZW5hbWVfdG9fdXJpKHNlbGVj
dGVkRmlsZU5hbWVzW2ldLnV0ZjgoKS5kYXRhKCksIDAsIDApKTsKKworICAgIHJlcXVlc3QtPnBy
aXYtPnNlbGVjdGVkVVJJcy5zZXQoZ19zbGlzdF9yZXZlcnNlKHJldHVybkxpc3QpKTsKKyAgICBy
ZXR1cm4gcmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRVUklzLmdldCgpOworfQorCit2b2lkIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBy
ZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9S
RVFVRVNUKHJlcXVlc3QpKTsKKyAgICBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyQ2FuY2VsKHJl
cXVlc3QtPnByaXYtPndrTGlzdGVuZXIuZ2V0KCkpOworICAgIHJlcXVlc3QtPnByaXYtPmhhbmRs
ZWRSZXF1ZXN0ID0gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzOWY0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oCkBAIC0w
LDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFk
ZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFU
SU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRp
cmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdF9oCisj
ZGVmaW5lIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdF9oCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+
CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCAgICAgICAgICAgICh3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QpKQorI2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
RklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFV
RVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZJTEVfQ0hP
T1NFUl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBF
X0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcykpCisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgICAgICAgIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3RDbGFzcyAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgeworICAgIEdPYmpl
Y3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUgICAgICAgICAg
ICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbiAgKFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgY29uc3QgR1NMaXN0ICoKK3dlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyAgICAgICAgICAgICAoV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBHdGtGaWxlRmlsdGVyICoK
K3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIgICAgICAo
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX3VyaXMgICAgICAgICAgICAgICAgKFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1NMaXN0ICAgICAgICAgICAg
ICp1cmlzKTsKKworV0VCS0lUX0FQSSBjb25zdCBHU0xpc3QgKgord2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF91cmlzICAgICAgICAgIChXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9jYW5jZWwgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0ICpyZXF1ZXN0KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3
MjI0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaApAQCAtMCwwICsxLDI4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZh
dGVfaAorCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
V2ViS2l0UHJpdmF0ZS5oIgorCitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHdlYmtpdEZpbGVD
aG9vc2VyUmVxdWVzdENyZWF0ZShXS09wZW5QYW5lbFBhcmFtZXRlcnNSZWYsIFdLT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXJSZWYpOworCisjZW5kaWYgLy8gV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRVSUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRVSUNsaWVudC5jcHAKaW5kZXggZTc2MjEyZC4uYmMyYzljZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcApAQCAtMjAsMTIg
KzIwLDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0VUlDbGllbnQu
aCIKIAorI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJLaXRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRX
aW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCkBAIC0xMzEsNiArMTMzLDEyIEBA
IHN0YXRpYyB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdLUGFnZVJlZiBwYWdlLCBXS0hp
dFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlCiAgICAgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hh
bmdlZChXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIGhpdFRlc3RSZXN1bHQsIHdrRXZlbnRN
b2RpZmllcnNUb0dka01vZGlmaWVycyhtb2RpZmllcnMpKTsKIH0KIAorc3RhdGljIHZvaWQgcnVu
T3BlblBhbmVsKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS09wZW5QYW5lbFBh
cmFtZXRlcnNSZWYgcGFyYW1ldGVycywgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiBsaXN0
ZW5lciwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRGaWxlQ2hvb3NlclJlcXVl
c3RDcmVhdGUocGFyYW1ldGVycywgbGlzdGVuZXIpKTsKKyAgICB3ZWJraXRXZWJWaWV3TWFrZUZp
bGVDaG9vc2VyUmVxdWVzdChXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIHJlcXVlc3QuZ2V0
KCkpOworfQorCiB2b2lkIGF0dGFjaFVJQ2xpZW50VG9WaWV3KFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCiB7CiAgICAgV0tQYWdlVUlDbGllbnQgd2tVSUNsaWVudCA9IHsKQEAgLTE2NCw3ICsxNzIs
NyBAQCB2b2lkIGF0dGFjaFVJQ2xpZW50VG9WaWV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAg
ICAgICAgIDAsIC8vIGRpZERyYXcKICAgICAgICAgMCwgLy8gcGFnZURpZFNjcm9sbAogICAgICAg
ICAwLCAvLyBleGNlZWRlZERhdGFiYXNlUXVvdGEKLSAgICAgICAgMCwgLy8gcnVuT3BlblBhbmVs
CisgICAgICAgIHJ1bk9wZW5QYW5lbCwKICAgICAgICAgMCwgLy8gZGVjaWRlUG9saWN5Rm9yR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdAogICAgICAgICAwLCAvLyBoZWFkZXJIZWlnaHQKICAg
ICAgICAgMCwgLy8gZm9vdGVySGVpZ2h0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGFmNzk5MzUuLjBmY2VkMzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CkBAIC01OSw2ICs1OSw3IEBAIGVudW0gewogICAgIFNDUklQVF9QUk9NUFQsCiAKICAgICBERUNJ
REVfUE9MSUNZLAorICAgIFJVTl9GSUxFX0NIT09TRVIsCiAKICAgICBNT1VTRV9UQVJHRVRfQ0hB
TkdFRCwKIApAQCAtMTYwLDYgKzE2MSw0OCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmll
d0RlY2lkZVBvbGljeShXZWJLaXRXZWJWaWV3KiwgV2ViS2l0UG9saWN5RGVjaXNpb24qCiAgICAg
cmV0dXJuIFRSVUU7CiB9CiAKK3N0YXRpYyB2b2lkIGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VD
YWxsYmFjayhHdGtEaWFsb2cqIGRpYWxvZywgZ2ludCByZXNwb25zZUlELCBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3Q+IGFkb3B0ZWRSZXF1ZXN0ID0gYWRvcHRHUmVmKHJlcXVlc3QpOworICAgIGlmIChyZXNw
b25zZUlEID09IEdUS19SRVNQT05TRV9BQ0NFUFQpIHsKKyAgICAgICAgR1NMaXN0KiBmaWxlVXJp
cyA9IGd0a19maWxlX2Nob29zZXJfZ2V0X3VyaXMoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKTsK
KyAgICAgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29zZV91cmlzKGFkb3B0ZWRS
ZXF1ZXN0LmdldCgpLCBmaWxlVXJpcyk7CisgICAgICAgIGdfc2xpc3RfZnJlZV9mdWxsKGZpbGVV
cmlzLCBnX2ZyZWUpOworICAgIH0gZWxzZQorICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY2FuY2VsKGFkb3B0ZWRSZXF1ZXN0LmdldCgpKTsKKworICAgIGd0a193aWRnZXRfZGVz
dHJveShHVEtfV0lER0VUKGRpYWxvZykpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2Vi
Vmlld1J1bkZpbGVDaG9vc2VyKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dp
ZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgaWYgKCF3aWRnZXRJ
c09uc2NyZWVuVG9wbGV2ZWxXaW5kb3codG9wbGV2ZWwpKQorICAgICAgICB0b3BsZXZlbCA9IDA7
CisKKyAgICBnYm9vbGVhbiBhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA9IHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uKHJlcXVlc3QpOworICAgIEd0
a1dpZGdldCogZGlhbG9nID0gZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFsb2dfbmV3KGFsbG93c011bHRp
cGxlU2VsZWN0aW9uID8gXygiU2VsZWN0IEZpbGVzIGZvciBVcGxvYWQiKSA6IF8oIlNlbGVjdCBG
aWxlIGZvciBVcGxvYWQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b3BsZXZlbCA/IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9D
SE9PU0VSX0FDVElPTl9PUEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NU
T0NLX09QRU4sIEdUS19SRVNQT05TRV9BQ0NFUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBHUmVmUHRyPEd0a0ZpbGVG
aWx0ZXI+IGZpbHRlcih3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNf
ZmlsdGVyKHJlcXVlc3QpKTsKKyAgICBpZiAoZmlsdGVyKQorICAgICAgICBndGtfZmlsZV9jaG9v
c2VyX3NldF9maWx0ZXIoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBmaWx0ZXIuZ2V0KCkpOwor
ICAgIGd0a19maWxlX2Nob29zZXJfc2V0X3NlbGVjdF9tdWx0aXBsZShHVEtfRklMRV9DSE9PU0VS
KGRpYWxvZyksIGFsbG93c011bHRpcGxlU2VsZWN0aW9uKTsKKworICAgIGNvbnN0IEdTTGlzdCog
c2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRf
dXJpcyhyZXF1ZXN0KTsKKyAgICBpZiAoc2VsZWN0ZWRGaWxlcykKKyAgICAgICAgZ3RrX2ZpbGVf
Y2hvb3Nlcl9zZWxlY3RfdXJpKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSwgc3RhdGljX2Nhc3Q8
Z2NoYXIqPihzZWxlY3RlZEZpbGVzLT5kYXRhKSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRp
YWxvZywgInJlc3BvbnNlIiwgR19DQUxMQkFDSyhmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2Fs
bGJhY2spLCBnX29iamVjdF9yZWYocmVxdWVzdCkpOworICAgIGd0a193aWRnZXRfc2hvdyhkaWFs
b2cpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdD
b25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgaWYgKEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF93ZWJfdmlld19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKQEAgLTI2Myw2ICszMDYs
NyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3
Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9jb25maXJtID0g
d2Via2l0V2ViVmlld1NjcmlwdENvbmZpcm07CiAgICAgd2ViVmlld0NsYXNzLT5zY3JpcHRfcHJv
bXB0ID0gd2Via2l0V2ViVmlld1NjcmlwdFByb21wdDsKICAgICB3ZWJWaWV3Q2xhc3MtPmRlY2lk
ZV9wb2xpY3kgPSB3ZWJraXRXZWJWaWV3RGVjaWRlUG9saWN5OworICAgIHdlYlZpZXdDbGFzcy0+
cnVuX2ZpbGVfY2hvb3NlciA9IHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlcjsKIAogICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZSh3ZWJWaWV3Q2xhc3MsIHNpemVvZihXZWJLaXRXZWJWaWV3
UHJpdmF0ZSkpOwogCkBAIC02MjIsNiArNjY2LDE3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
dmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfUE9MSUNZX0RFQ0lTSU9OLAogICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX1RZUEVfUE9MSUNZX0RFQ0lTSU9OX1RZUEUpOwogCisgICAgLyogVE9E
TzogRGVzY3JpYmUgdGhlIHNpZ25hbC4gKi8KKyAgICBzaWduYWxzW1JVTl9GSUxFX0NIT09TRVJd
ID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJydW4tZmlsZS1jaG9vc2VyIiwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAg
ICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNU
X09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHJ1bl9maWxlX2Nob29zZXIpLAorICAgICAgICAg
ICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCAwIC8qIGFjY3Vt
dWxhdG9yIGRhdGEgKi8sCisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09M
RUFOX19PQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwgLyog
bnVtYmVyIG9mIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBF
X0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKTsKKwogICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6
Om1vdXNlLXRhcmdldC1jaGFuZ2VkOgogICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJW
aWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZApAQCAtNzcxLDYgKzgyNiwxMiBAQCB2
b2lkIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgV0tIaXRUZXN0UmVzdWx0UmVmCiAgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxz
W01PVVNFX1RBUkdFVF9DSEFOR0VEXSwgMCwgcHJpdi0+bW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0
LmdldCgpLCBtb2RpZmllcnMpOwogfQogCit2b2lkIHdlYmtpdFdlYlZpZXdNYWtlRmlsZUNob29z
ZXJSZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCogcmVxdWVzdCkKK3sKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9l
bWl0KHdlYlZpZXcsIHNpZ25hbHNbUlVOX0ZJTEVfQ0hPT1NFUl0sIDAsIHJlcXVlc3QsICZyZXR1
cm5WYWx1ZSk7Cit9CisKIC8qKgogICogd2Via2l0X3dlYl92aWV3X25ldzoKICAqCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggMDA4
MWJlMy4uOTE2ODkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuaApAQCAtMzAsMTMgKzMwLDE0IEBACiAKICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5l
cy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRXZWJDb250ZXh0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQb2xpY3lEZWNpc2lv
bi5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRl
eHQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXRQb2xpY3lEZWNpc2lvbi5oPgogCiBHX0JFR0lOX0RFQ0xTCiAKQEAgLTE0MCw2ICsxNDEsMTAg
QEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgIGdib29sZWFuICAgKCogZGVjaWRl
X3BvbGljeSkgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNp
b24gICAgICAqZGVjaXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSAgdHlwZSk7CisKKyAgICBnYm9vbGVhbiAgICgq
IHJ1bl9maWxlX2Nob29zZXIpICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3Zp
ZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCAgKnJlcXVlc3QpOworCiAgICAgdm9pZCAgICAgICAoKiBtb3VzZV90YXJn
ZXRfY2hhbmdlZCkgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAqd2ViX3ZpZXcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQgICAg
ICAqaGl0X3Rlc3RfcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBndWludCAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaApp
bmRleCA3NjhhNjIwLi5iMzE2ZDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTQzLDYgKzQzLDcgQEAg
dm9pZCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0KFdlYktpdFdlYlZpZXcqLCBjb25z
dCBDU3RyaW5nJiBtZXNzYWdlKTsKIGJvb2wgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRDb25m
aXJtKFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKTsKIFdLU3RyaW5nUmVm
IHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0UHJvbXB0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBD
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBDU3RyaW5nJiBkZWZhdWx0VGV4dCk7CiB2b2lkIHdlYmtp
dFdlYlZpZXdNYWtlUG9saWN5RGVjaXNpb24oV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURl
Y2lzaW9uVHlwZSwgV2ViS2l0UG9saWN5RGVjaXNpb24qKTsKK3ZvaWQgd2Via2l0V2ViVmlld01h
a2VGaWxlQ2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCopOwogdm9pZCB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZp
ZXcqLCBXS0hpdFRlc3RSZXN1bHRSZWYsIHVuc2lnbmVkIG1vZGlmaWVycyk7CiAKICNlbmRpZiAv
LyBXZWJLaXRXZWJWaWV3UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKaW5kZXggNDdk
YTk4ZS4uYjgxNDA3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcApAQCAtMjI2LDYgKzIyNiwx
NCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBuZXdXZWJWaWV3OwogICAgIH0KIAorICAgIHN0
YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiwgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAg
ICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJl
cXVlc3QpKTsKKyAgICAgICAgdGVzdC0+bV9maWxlQ2hvb3NlclJlcXVlc3QgPSByZXF1ZXN0Owor
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgICAgICByZXR1
cm4gVFJVRTsKKyAgICB9CisKICAgICBzdGF0aWMgZ2Jvb2xlYW4gc2NyaXB0QWxlcnQoV2ViS2l0
V2ViVmlldyosIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIFVJQ2xpZW50VGVzdCogdGVzdCkKICAgICB7
CiAgICAgICAgIHN3aXRjaCAodGVzdC0+bV9zY3JpcHRUeXBlKSB7CkBAIC0yODQsNiArMjkyLDcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0
X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRp
bmdzKG1fd2ViVmlldyksIFRSVUUpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmll
dywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0sodmlld0NyZWF0ZSksIHRoaXMpOworICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fd2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1
bkZpbGVDaG9vc2VyKSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3
LCAic2NyaXB0LWFsZXJ0IiwgR19DQUxMQkFDSyhzY3JpcHRBbGVydCksIHRoaXMpOwogICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlwdC1jb25maXJtIiwgR19DQUxMQkFD
SyhzY3JpcHRDb25maXJtKSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJW
aWV3LCAic2NyaXB0LXByb21wdCIsIEdfQ0FMTEJBQ0soc2NyaXB0UHJvbXB0KSwgdGhpcyk7CkBA
IC0zMTIsMTIgKzMyMSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21vdXNlVGFyZ2V0
SGl0VGVzdFJlc3VsdC5nZXQoKTsKICAgICB9CiAKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QqIG1vdXNlQnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KGludCB4LCBp
bnQgeSkKKyAgICB7CisgICAgICAgIG1vdXNlQnV0dG9uQ2xpY2soeCwgeSk7CisgICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIG1fZmlsZUNob29zZXJS
ZXF1ZXN0LmdldCgpOworICAgIH0KKwogICAgIFZlY3RvcjxXZWJWaWV3RXZlbnRzPiBtX3dlYlZp
ZXdFdmVudHM7CiAgICAgU2NyaXB0VHlwZSBtX3NjcmlwdFR5cGU7CiAgICAgYm9vbCBtX3Njcmlw
dERpYWxvZ0NvbmZpcm1lZDsKICAgICBXaW5kb3dQcm9wZXJ0aWVzIG1fd2luZG93UHJvcGVydGll
czsKICAgICBIYXNoU2V0PFdURjo6U3RyaW5nPiBtX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkOwog
ICAgIEdSZWZQdHI8V2ViS2l0SGl0VGVzdFJlc3VsdD4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1
bHQ7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IG1fZmlsZUNob29zZXJS
ZXF1ZXN0OwogICAgIHVuc2lnbmVkIGludCBtX21vdXNlVGFyZ2V0TW9kaWZpZXJzOwogfTsKIApA
QCAtMzMzLDYgKzM1MCwxMDAgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNs
b3NlKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7CiB9CiAKK3N0YXRpYyBnYm9v
bGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3Qg
Z2NoYXIqIG1pbWVUeXBlKQoreworICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlckluZm87Cisg
ICAgZmlsdGVySW5mby5jb250YWlucyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7CisgICAg
ZmlsdGVySW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKKyAgICByZXR1cm4gZ3RrX2ZpbGVfZmls
dGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJJbmZvKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBmaWxlQ2hvb3NlckhUTUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+PGlu
cHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFkZGlu
ZzowJyB0eXBlPSdmaWxlJyAlcy8+PC9ib2R5PjwvaHRtbD4iOworCisgICAgLy8gTXVsdGlwbGUg
c2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcuCisgICAgR093blB0cjxj
aGFyPiBzaW1wbGVGaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1M
Rm9ybWF0LCAiIikpOworICAgIHRlc3QtPmxvYWRIdG1sKHNpbXBsZUZpbGVVcGxvYWRIVE1MLmdl
dCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QqIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPm1vdXNlQnV0dG9u
Q2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbihmaWxl
Q2hvb3NlclJlcXVlc3QpKTsKKyAgICBjb25zdCBHU0xpc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwor
ICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29z
ZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBjb25zdCBHU0xpc3QqIHNl
bGVjdGVkVVJJcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfdXJp
cyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZFVSSXMpOworICAg
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsK
KworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcs
IHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgorICAgIEdPd25QdHI8Y2hhcj4gbXVsdGlwbGVTZWxl
Y3Rpb25GaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0
LCAibXVsdGlwbGUiKSk7CisgICAgdGVzdC0+bG9hZEh0bWwobXVsdGlwbGVTZWxlY3Rpb25GaWxl
VXBsb2FkSFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+bW91c2VCdXR0b25DbGlja0FuZFdhaXRG
b3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24oZmlsZUNob29zZXJSZXF1ZXN0
KSk7CisKKyAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsK
KyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNf
ZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7CisgICAg
c2VsZWN0ZWRVUklzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF91
cmlzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkVVJJcyk7CisK
KyAgICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KKyAgICBHU0xpc3QqIGZpbGVzVG9TZWxlY3QgPSAw
OworICAgIGZpbGVzVG9TZWxlY3QgPSBnX3NsaXN0X2FwcGVuZChmaWxlc1RvU2VsZWN0LCBnX3N0
cmR1cCgiZmlsZTovLy9mb28vYmFyL2Jhei8xIikpOworICAgIGZpbGVzVG9TZWxlY3QgPSBnX3Ns
aXN0X2FwcGVuZChmaWxlc1RvU2VsZWN0LCBnX3N0cmR1cCgiZmlsZTovLy9mb28vYmFyL2Jhei8y
IikpOworICAgIGZpbGVzVG9TZWxlY3QgPSBnX3NsaXN0X2FwcGVuZChmaWxlc1RvU2VsZWN0LCBn
X3N0cmR1cCgiZmlsZTovLy9mb28vYmFyL2Jhei8zIikpOworICAgIGdfYXNzZXJ0X2NtcGludChn
X3NsaXN0X2xlbmd0aChmaWxlc1RvU2VsZWN0KSwgPT0sIDMpOworICAgIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9jaG9vc2VfdXJpcyhmaWxlQ2hvb3NlclJlcXVlc3QsIGZpbGVzVG9TZWxl
Y3QpOworICAgIGdfc2xpc3RfZnJlZV9mdWxsKGZpbGVzVG9TZWxlY3QsIGdfZnJlZSk7CisKKyAg
ICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0aGUgbGlzdCBvZiBmaWxl
cyBzZWxlY3RlZAorICAgIC8vIGluIHRoZSBwcmV2aW91cyBzdGVwIGFwcGVhcnMgbm93IGFzIHBh
cnQgb2YgdGhlIG5ldyByZXF1ZXN0LgorICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPm1v
dXNlQnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIHNl
bGVjdGVkVVJJcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfdXJp
cyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkVVJJcyk7CisgICAg
Y29uc3QgR1NMaXN0KiBzZWxlY3RlZFVSSSA9IHNlbGVjdGVkVVJJczsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihzZWxlY3RlZFVSSS0+ZGF0YSksID09LCAiZmlsZTov
Ly9mb28vYmFyL2Jhei8xIik7CisgICAgc2VsZWN0ZWRVUkkgPSBnX3NsaXN0X25leHQoc2VsZWN0
ZWRVUkkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxnY2hhcio+KHNlbGVjdGVk
VVJJLT5kYXRhKSwgPT0sICJmaWxlOi8vL2Zvby9iYXIvYmF6LzIiKTsKKyAgICBzZWxlY3RlZFVS
SSA9IGdfc2xpc3RfbmV4dChzZWxlY3RlZFVSSSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRp
Y19jYXN0PGdjaGFyKj4oc2VsZWN0ZWRVUkktPmRhdGEpLCA9PSwgImZpbGU6Ly8vZm9vL2Jhci9i
YXovMyIpOworICAgIHNlbGVjdGVkVVJJID0gZ19zbGlzdF9uZXh0KHNlbGVjdGVkVVJJKTsKKyAg
ICBnX2Fzc2VydCghc2VsZWN0ZWRVUkkpOworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlv
bnMgbm90IGFsbG93ZWQsIG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZpbGVz
Li4KKyAgICBHT3duUHRyPGNoYXI+IG1pbWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1MKGdfc3RyZHVw
X3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8vKixp
bWFnZS8qJyIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRN
TC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZmls
ZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+bW91c2VCdXR0b25DbGlja0FuZFdhaXRGb3JGaWxlQ2hv
b3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uKGZpbGVDaG9vc2VyUmVxdWVzdCkpOworCisg
ICAgbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVz
KGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsKKyAgICBjb25z
dCBHU0xpc3QqIG1pbWVUeXBlID0gbWltZVR5cGVzOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0
aWNfY2FzdDxnY2hhcio+KG1pbWVUeXBlLT5kYXRhKSwgPT0sICJhdWRpby8qIik7CisgICAgbWlt
ZVR5cGUgPSBnX3NsaXN0X25leHQobWltZVR5cGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0
aWNfY2FzdDxnY2hhcio+KG1pbWVUeXBlLT5kYXRhKSwgPT0sICJ2aWRlby8qIik7CisgICAgbWlt
ZVR5cGUgPSBnX3NsaXN0X25leHQobWltZVR5cGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0
aWNfY2FzdDxnY2hhcio+KG1pbWVUeXBlLT5kYXRhKSwgPT0sICJpbWFnZS8qIik7CisgICAgbWlt
ZVR5cGUgPSBnX3NsaXN0X25leHQobWltZVR5cGUpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZSk7
CisKKyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlw
ZXNfZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVf
RklMVEVSKGZpbHRlcikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmls
dGVyLCAiYXVkaW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZp
bHRlciwgInZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihm
aWx0ZXIsICJpbWFnZS8qIikpOworCisgICAgc2VsZWN0ZWRVUklzID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF91cmlzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAg
Z19hc3NlcnQoIXNlbGVjdGVkVVJJcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0phdmFTY3JpcHREaWFsb2dzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsK
ICAgICBzdGF0aWMgY29uc3QgY2hhciogaHRtbE9uTG9hZEZvcm1hdCA9ICI8aHRtbD48Ym9keSBv
bkxvYWQ9XCIlc1wiPjwvYm9keT48L2h0bWw+IjsKQEAgLTQ1Niw2ICs1NjcsNyBAQCB2b2lkIGJl
Zm9yZUFsbCgpCiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzZXR0aW5n
cyIsIHRlc3RXZWJWaWV3U2V0dGluZ3MpOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAicmVwbGFjZS1jb250ZW50IiwgdGVzdFdlYlZpZXdSZXBsYWNlQ29udGVudCk7CiAg
ICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3JlYXRlLXJlYWR5LWNsb3Nl
IiwgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKTsKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJmaWxlLWNob29zZXItcmVxdWVzdCIsIHRlc3RXZWJWaWV3RmlsZUNo
b29zZXJSZXF1ZXN0KTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJq
YXZhc2NyaXB0LWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKTsKICAgICBV
SUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3aW5kb3ctcHJvcGVydGllcyIsIHRl
c3RXZWJWaWV3V2luZG93UHJvcGVydGllcyk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAibW91c2UtdGFyZ2V0IiwgdGVzdFdlYlZpZXdNb3VzZVRhcmdldCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5jcHAKaW5kZXggMDBkM2IzZS4uMjljNTNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApAQCAtMTgwLDMgKzE4
MCwzNCBAQCB2b2lkIFdlYlZpZXdUZXN0Ojptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2ln
bmVkIGludCBtb3VzZU1vZGlmaWVycykKICAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQo
KSk7CiB9CiAKK3ZvaWQgV2ViVmlld1Rlc3Q6Om1vdXNlQnV0dG9uQ2xpY2soaW50IHgsIGludCB5
LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCit7Cisg
ICAgbW91c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1BSRVNTLCB4LCB5LCBidXR0b24sIG1vdXNl
TW9kaWZpZXJzKTsKKyAgICBtb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUkVMRUFTRSwgeCwg
eSwgYnV0dG9uLCBtb3VzZU1vZGlmaWVycyk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6Om1vdXNl
QnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5LCB1bnNpZ25l
ZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCit7CisgICAgZ19hc3Nl
cnQobV9wYXJlbnRXaW5kb3cpOworICAgIEd0a1dpZGdldCogdmlld1dpZGdldCA9IEdUS19XSURH
RVQobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh2aWV3
V2lkZ2V0KSk7CisKKyAgICBHT3duUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZlbnRfbmV3KGV2
ZW50VHlwZSkpOworICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KHZpZXdXaWRnZXQpOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+YnV0dG9uLndpbmRvdyk7
CisKKyAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50
LT5idXR0b24ueCA9IHg7CisgICAgZXZlbnQtPmJ1dHRvbi55ID0geTsKKyAgICBldmVudC0+YnV0
dG9uLmF4ZXMgPSAwOworICAgIGV2ZW50LT5idXR0b24uc3RhdGUgPSBtb3VzZU1vZGlmaWVyczsK
KyAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKKworICAgIGV2ZW50LT5idXR0b24u
ZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxh
eV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh2aWV3V2lkZ2V0KSkp
OworCisgICAgaW50IHhSb290LCB5Um9vdDsKKyAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3Jk
cyhndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290
KTsKKyAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IHhSb290OworICAgIGV2ZW50LT5idXR0b24u
eV9yb290ID0geVJvb3Q7CisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdU
ZXN0LmgKaW5kZXggOTVhNTY5Yy4uN2Q5MjRiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCkBAIC00NSwxMSArNDUsMTUg
QEAgcHVibGljOgogICAgIHZvaWQgc2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CiAK
ICAgICB2b2lkIG1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IG1vdXNlTW9k
aWZpZXJzID0gMCk7CisgICAgdm9pZCBtb3VzZUJ1dHRvbkNsaWNrKGludCB4LCBpbnQgeSwgdW5z
aWduZWQgaW50IGJ1dHRvbiA9IDEsIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDApOwog
CiAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwogICAgIEdNYWluTG9vcCogbV9tYWluTG9v
cDsKICAgICBDU3RyaW5nIG1fYWN0aXZlVVJJOwogICAgIEd0a1dpZGdldCogbV9wYXJlbnRXaW5k
b3c7CisKK3ByaXZhdGU6CisgICAgdm9pZCBtb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlwZSwg
aW50LCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIH07CiAKICNlbmRpZiAvLyBX
ZWJWaWV3VGVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgK
aW5kZXggM2FmOTkwNC4uZGUwMzA5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDIuaApAQCAtMzAsMTMgKzMwLDE0IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXRFZGl0aW5nQ29tbWFuZHMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5o
PgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RXJyb3IuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0VGVz
dFJlc3VsdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVS
SVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0Lmg+Ci0jaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0V2ViVmlldy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaD4KIAogI3VuZGVmIF9fV0VC
S0lUMl9IX0lOU0lERV9fCi0tIAoxLjcuNy41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127457</attachid>
            <date>2012-02-16 15:33:31 -0800</date>
            <delta_ts>2012-02-17 08:49:12 -0800</delta_ts>
            <desc>Patch Proposal + Unit Tests (gchar** version)</desc>
            <filename>0001-Implement-runOpenPanel-in-WebKit2GTK-gchar.patch</filename>
            <type>text/plain</type>
            <size>37231</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA4Yzk0ODgzZWExZGEzMWU3YTAyOTEzMDRhOTczNzA0YmE4NmFiMjQ3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDEwIEZlYiAyMDEyIDEyOjEzOjU5ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gSW1wbGVtZW50IHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXQyR1RLKyAoZ2NoYXIqKikKCi0tLQog
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgICA0
ICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwIHwg
IDI0MSArKysrKysrKysrKysrKysrKysrKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdC5oICAgfCAgIDc4ICsrKysrKysKIC4uLi9BUEkvZ3RrL1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCAgICAgIHwgICAyOCArKysKIC4uLi9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcCAgIHwgICAxMCArLQogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgfCAgIDcxICsrKysrKwog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oICAgfCAgICA5
ICstCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCAgICAgICB8
ICAgIDEgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNw
cCAgfCAgMTAwICsrKysrKysrCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rl
c3QuY3BwICAgICAgICB8ICAgMzEgKysrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9XZWJWaWV3VGVzdC5oICB8ICAgIDQgKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvd2Via2l0Mi5oICAgICAgICAgfCAgICAzICstCiAxMiBmaWxlcyBjaGFuZ2VkLCA1NzYg
aW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtCmluZGV4IDNiOGU3YmQuLmNkM2E2YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFt
CkBAIC05MCw2ICs5MCw3IEBAIGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAkkKFdlYktpdDIpL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuaCBcCiAJJChXZWJLaXQyKS9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCBcCisJJChXZWJL
aXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCBcCiAJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oIFwKIAkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uaCBc
CiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKQEAgLTU0
OCw2ICs1NDksOSBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05A
X0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAgXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbi5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgg
XAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9u
LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVj
aXNpb24uaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5
RGVjaXNpb25Qcml2YXRlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjNmQ1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAK
QEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5o
IgorCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYk9wZW5QYW5lbFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OworCisvKioKKyAqIFNFQ1RJT046IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dAorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBBIHJlcXVlc3QgdG8gb3BlbiBhIGZpbGUgY2hvb3Nl
ci4KKyAqIEBUaXRsZTogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNX
ZWJLaXRXZWJWaWV3CisgKi8KK0dfREVGSU5FX1RZUEUoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
LCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBf
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tPcGVu
UGFuZWxQYXJhbWV0ZXJzUmVmPiB3a1BhcmFtZXRlcnM7CisgICAgV0tSZXRhaW5QdHI8V0tPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lclJlZj4gd2tMaXN0ZW5lcjsKKyAgICBHUmVmUHRyPEd0a0ZpbGVG
aWx0ZXI+IGZpbHRlcjsKKyAgICBnY2hhcioqIG1pbWVUeXBlczsKKyAgICBnY2hhcioqIHNlbGVj
dGVkVVJJczsKKyAgICBib29sIG1pbWVUeXBlc0NoZWNrZWQ7CisgICAgYm9vbCBzZWxlY3RlZFVS
SXNDaGVja2VkOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7Cit9OworCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9GSUxURVIsCisgICAgUFJPUF9NSU1FX1RZUEVTLAorICAgIFBST1Bf
U0VMRUNURURfVVJJUywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9pbml0KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICByZXF1
ZXN0LT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHJlcXVlc3QsIFdFQktJVF9U
WVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRl
KTsKKyAgICBuZXcgKHJlcXVlc3QtPnByaXYpIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZh
dGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0RmluYWxpemUo
R09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVz
dCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmplY3QpOworCisgICAgLy8gTWFrZSBz
dXJlIHRoZSByZXF1ZXN0IGlzIGFsd2F5cyBoYW5kbGVkIGJlZm9yZSBmaW5hbGl6aW5nLgorICAg
IGlmICghcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QpCisgICAgICAgIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisKKyAgICBnX3N0cmZyZWV2KHJlcXVl
c3QtPnByaXYtPm1pbWVUeXBlcyk7CisgICAgZ19zdHJmcmVldihyZXF1ZXN0LT5wcml2LT5zZWxl
Y3RlZFVSSXMpOworCisgICAgcmVxdWVzdC0+cHJpdi0+fldlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0RmlsZUNob29zZXJSZXF1ZXN0R2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVF
U1Qob2JqZWN0KTsKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9GSUxURVI6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9NSU1FX1RZUEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2YWx1
ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVEVEX1VSSVM6CisgICAgICAgIGdf
dmFsdWVfc2V0X2JveGVkKHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Nl
bGVjdGVkX3VyaXMocmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBh
cmFtU3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0
X3Byb3BlcnR5ID0gd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0R2V0UHJvcGVydHk7CisgICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKHJlcXVlc3RDbGFzcywgc2l6ZW9mKFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdFByaXZhdGUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdDpmaWx0ZXI6CisgICAgICoKKyAgICAgKiBUT0RPCisgICAgICovCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgiZmlsdGVyIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1JTUUgdHlwZXMgZmls
dGVyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJUaGUgR3RrRmlsZUZpbHRlciBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
S19UWVBFX0ZJTEVfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisgICAg
ICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Om1pbWUtdHlwZXM6CisgICAgICoKKyAgICAgKiBU
T0RPCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RD
bGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTUlNRV9UWVBF
UywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib3hl
ZCgibWltZS10eXBlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJNSU1FIHR5cGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbGlzdCBvZiBNSU1FIHR5cGVzIGFz
c29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUlYsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6c2VsZWN0ZWQt
dXJpczoKKyAgICAgKgorICAgICAqIFRPRE8KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJPUF9TRUxFQ1RFRF9VUklTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX2JveGVkKCJzZWxlY3RlZC11cmlzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlNlbGVjdGVkIFVS
SXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIlRoZSBsaXN0IG9mIHNlbGVjdGVkIFVSSXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1
ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHX1RZUEVfU1RSViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworfQorCitXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdENyZWF0ZShXS09wZW5QYW5l
bFBhcmFtZXRlcnNSZWYgd2tQYXJhbWV0ZXJzLCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVm
IHdrTGlzdGVuZXIpCit7CisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0g
V0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GSUxF
X0NIT09TRVJfUkVRVUVTVCwgTlVMTCkpOworICAgIHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVy
cyA9IHdrUGFyYW1ldGVyczsKKyAgICByZXF1ZXN0LT5wcml2LT53a0xpc3RlbmVyID0gd2tMaXN0
ZW5lcjsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24oV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19G
SUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgRkFMU0UpOworICAgIHJldHVybiBXS09wZW5Q
YW5lbFBhcmFtZXRlcnNHZXRBbGxvd3NNdWx0aXBsZUZpbGVzKHJlcXVlc3QtPnByaXYtPndrUGFy
YW1ldGVycy5nZXQoKSk7Cit9CisKK2NvbnN0IGdjaGFyKiBjb25zdCogd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVx
dWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VS
X1JFUVVFU1QocmVxdWVzdCksIDApOworCisgICAgaWYgKHJlcXVlc3QtPnByaXYtPm1pbWVUeXBl
c0NoZWNrZWQpCisgICAgICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5taW1lVHlwZXM7CisKKyAg
ICByZXF1ZXN0LT5wcml2LT5taW1lVHlwZXNDaGVja2VkID0gdHJ1ZTsKKworICAgIFdLUmV0YWlu
UHRyPFdLQXJyYXlSZWY+IHdrTWltZVR5cGVzKEFkb3B0V0ssIFdLT3BlblBhbmVsUGFyYW1ldGVy
c0NvcHlBY2NlcHRlZE1JTUVUeXBlcyhyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkp
KTsKKyAgICBzaXplX3QgbnVtT2ZNaW1lVHlwZXMgPSBXS0FycmF5R2V0U2l6ZSh3a01pbWVUeXBl
cy5nZXQoKSk7CisgICAgaWYgKCFudW1PZk1pbWVUeXBlcykKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMgPSBnX25ldzAoZ2NoYXIqLCBudW1PZk1pbWVU
eXBlcyArIDEpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZNaW1lVHlwZXM7ICsr
aSkgeworICAgICAgICBXS1N0cmluZ1JlZiB3a01pbWVUeXBlID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a01pbWVUeXBlcy5nZXQoKSwgaSkpOworICAg
ICAgICByZXF1ZXN0LT5wcml2LT5taW1lVHlwZXNbaV0gPSBnX3N0cmR1cCh0b0ltcGwod2tNaW1l
VHlwZSktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIHJldHVybiByZXF1
ZXN0LT5wcml2LT5taW1lVHlwZXM7Cit9CisKK0d0a0ZpbGVGaWx0ZXIqIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxF
X0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+
ZmlsdGVyKQorICAgICAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdldCgpOworCisg
ICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gd2tNaW1lVHlwZXMoQWRvcHRXSywgV0tPcGVuUGFu
ZWxQYXJhbWV0ZXJzQ29weUFjY2VwdGVkTUlNRVR5cGVzKHJlcXVlc3QtPnByaXYtPndrUGFyYW1l
dGVycy5nZXQoKSkpOworICAgIHNpemVfdCBudW1PZk1pbWVUeXBlcyA9IFdLQXJyYXlHZXRTaXpl
KHdrTWltZVR5cGVzLmdldCgpKTsKKyAgICBpZiAoIW51bU9mTWltZVR5cGVzKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJlcXVlc3QtPnByaXYtPmZpbHRlciA9IGd0a19maWxlX2ZpbHRlcl9u
ZXcoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mTWltZVR5cGVzOyArK2kpIHsK
KyAgICAgICAgV0tTdHJpbmdSZWYgd2tNaW1lVHlwZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tNaW1lVHlwZXMuZ2V0KCksIGkpKTsKKyAgICAgICAg
Z3RrX2ZpbGVfZmlsdGVyX2FkZF9taW1lX3R5cGUocmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdldCgp
LCB0b0ltcGwod2tNaW1lVHlwZSktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKwor
ICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29zZV91cmlzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCogcmVxdWVzdCwgY29uc3QgZ2NoYXIqIGNvbnN0KiB1cmlzKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpKTsKKworICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiB3a0Nob3NlblVSSXMoQWRvcHRXSywgV0tNdXRh
YmxlQXJyYXlDcmVhdGUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IHVyaXNbaV07IGkrKykgewor
ICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkwoQWRvcHRXSywgV0tVUkxDcmVhdGVX
aXRoVVRGOENTdHJpbmcodXJpc1tpXSkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbSh3a0No
b3NlblVSSXMuZ2V0KCksIHdrVVJMLmdldCgpKTsKKyAgICB9CisKKyAgICBXS09wZW5QYW5lbFJl
c3VsdExpc3RlbmVyQ2hvb3NlRmlsZXMocmVxdWVzdC0+cHJpdi0+d2tMaXN0ZW5lci5nZXQoKSwg
d2tDaG9zZW5VUklzLmdldCgpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCA9
IHRydWU7Cit9CisKK2NvbnN0IGdjaGFyKiBjb25zdCogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9zZWxlY3RlZF91cmlzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVF
U1QocmVxdWVzdCksIDApOworCisgICAgaWYgKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkVVJJc0No
ZWNrZWQpCisgICAgICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZFVSSXM7CisKKyAg
ICByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZFVSSXNDaGVja2VkID0gdHJ1ZTsKKworICAgIFZlY3Rv
cjxTdHJpbmc+IHNlbGVjdGVkRmlsZU5hbWVzID0gdG9JbXBsKHJlcXVlc3QtPnByaXYtPndrUGFy
YW1ldGVycy5nZXQoKSktPnNlbGVjdGVkRmlsZU5hbWVzKCk7CisgICAgc2l6ZV90IG51bU9mVVJJ
cyA9IHNlbGVjdGVkRmlsZU5hbWVzLnNpemUoKTsKKyAgICBpZiAoIW51bU9mVVJJcykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZFVSSXMgPSBnX25ldzAo
Z2NoYXIqLCBudW1PZlVSSXMgKyAxKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9m
VVJJczsgKytpKQorICAgICAgICByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZFVSSXNbaV0gPSBnX2Zp
bGVuYW1lX3RvX3VyaShzZWxlY3RlZEZpbGVOYW1lc1tpXS51dGY4KCkuZGF0YSgpLCAwLCAwKTsK
KworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZFVSSXM7Cit9CisKK3ZvaWQgd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qq
IHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VS
X1JFUVVFU1QocmVxdWVzdCkpOworICAgIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJDYW5jZWwo
cmVxdWVzdC0+cHJpdi0+d2tMaXN0ZW5lci5nZXQoKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+aGFu
ZGxlZFJlcXVlc3QgPSB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmI5NGEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmgKQEAg
LTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYg
IWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElM
QVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQg
ZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0X2gK
KyNkZWZpbmUgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0X2gKKworI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUICAgICAgICAgICAgKHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRklM
RV9DSE9PU0VSX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVF9DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MpKQor
I2RlZmluZSBXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JF
UVVFU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRklMRV9D
SE9PU0VSX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1RfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZ
UEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKSkK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAgICAgICAgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdENsYXNzICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCB7CisgICAgR09i
amVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZSAgICAgICAg
ICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uICAoV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqIGNvbnN0ICoK
K3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyAgICAgICAgICAgICAo
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBHdGtGaWxl
RmlsdGVyICoKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0
ZXIgICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX3VyaXMgICAgICAgICAg
ICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBj
b25zdCAgICAgICp1cmlzKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqIGNvbnN0ICoKK3dl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfdXJpcyAgICAgICAgICAoV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmFmNzIyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgKQEAgLTAs
MCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3RQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dC5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKworV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0KiB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUoV0tPcGVuUGFuZWxQYXJhbWV0ZXJz
UmVmLCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmKTsKKworI2VuZGlmIC8vIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCmluZGV4IGU3NjIxMmQuLmJjMmM5Y2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVu
dC5jcHAKQEAgLTIwLDEyICsyMCwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IldlYktpdFVJQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQ
cml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2YXRlLmgiCiAj
aW5jbHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIApAQCAt
MTMxLDYgKzEzMywxMiBAQCBzdGF0aWMgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChXS1Bh
Z2VSZWYgcGFnZSwgV0tIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZQogICAgIHdlYmtpdFdlYlZp
ZXdNb3VzZVRhcmdldENoYW5nZWQoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCBoaXRUZXN0
UmVzdWx0LCB3a0V2ZW50TW9kaWZpZXJzVG9HZGtNb2RpZmllcnMobW9kaWZpZXJzKSk7CiB9CiAK
K3N0YXRpYyB2b2lkIHJ1bk9wZW5QYW5lbChXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFt
ZSwgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHBhcmFtZXRlcnMsIFdLT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgR1Jl
ZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0
RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKHBhcmFtZXRlcnMsIGxpc3RlbmVyKSk7CisgICAgd2Vi
a2l0V2ViVmlld01ha2VGaWxlQ2hvb3NlclJlcXVlc3QoV0VCS0lUX1dFQl9WSUVXKGNsaWVudElu
Zm8pLCByZXF1ZXN0LmdldCgpKTsKK30KKwogdm9pZCBhdHRhY2hVSUNsaWVudFRvVmlldyhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIFdLUGFnZVVJQ2xpZW50IHdrVUlDbGllbnQgPSB7
CkBAIC0xNjQsNyArMTcyLDcgQEAgdm9pZCBhdHRhY2hVSUNsaWVudFRvVmlldyhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KQogICAgICAgICAwLCAvLyBkaWREcmF3CiAgICAgICAgIDAsIC8vIHBhZ2VE
aWRTY3JvbGwKICAgICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1b3RhCi0gICAgICAgIDAs
IC8vIHJ1bk9wZW5QYW5lbAorICAgICAgICBydW5PcGVuUGFuZWwsCiAgICAgICAgIDAsIC8vIGRl
Y2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKICAgICAgICAgMCwgLy8g
aGVhZGVySGVpZ2h0CiAgICAgICAgIDAsIC8vIGZvb3RlckhlaWdodApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCBhZjc5OTM1
Li5jNmJmM2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3LmNwcApAQCAtNTksNiArNTksNyBAQCBlbnVtIHsKICAgICBTQ1JJUFRfUFJP
TVBULAogCiAgICAgREVDSURFX1BPTElDWSwKKyAgICBSVU5fRklMRV9DSE9PU0VSLAogCiAgICAg
TU9VU0VfVEFSR0VUX0NIQU5HRUQsCiAKQEAgLTE2MCw2ICsxNjEsNTggQEAgc3RhdGljIGdib29s
ZWFuIHdlYmtpdFdlYlZpZXdEZWNpZGVQb2xpY3koV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGlj
eURlY2lzaW9uKgogICAgIHJldHVybiBUUlVFOwogfQogCitzdGF0aWMgdm9pZCBmaWxlQ2hvb3Nl
ckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrRGlhbG9nKiBkaWFsb2csIGdpbnQgcmVzcG9uc2VJ
RCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEdSZWZQdHI8V2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0PiBhZG9wdGVkUmVxdWVzdCA9IGFkb3B0R1JlZihyZXF1ZXN0
KTsKKyAgICBpZiAocmVzcG9uc2VJRCA9PSBHVEtfUkVTUE9OU0VfQUNDRVBUKSB7CisgICAgICAg
IEdTTGlzdCogdXJpc0xpc3QgPSBndGtfZmlsZV9jaG9vc2VyX2dldF91cmlzKEdUS19GSUxFX0NI
T09TRVIoZGlhbG9nKSk7CisgICAgICAgIGd1aW50IG51bU9mVXJpcyA9IGdfc2xpc3RfbGVuZ3Ro
KHVyaXNMaXN0KTsKKworICAgICAgICBjb25zdCBnY2hhcioqIHVyaXNBcnJheSA9IGdfbmV3MChj
b25zdCBnY2hhciosIG51bU9mVXJpcyArIDEpOworICAgICAgICBHU0xpc3QqIHVyaSA9IHVyaXNM
aXN0OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBudW1PZlVyaXM7IGkrKykgeworICAg
ICAgICAgICAgdXJpc0FycmF5W2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgZ2NoYXIqPih1cmktPmRh
dGEpOworICAgICAgICAgICAgdXJpID0gZ19zbGlzdF9uZXh0KHVyaSk7CisgICAgICAgIH0KKwor
ICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX3VyaXMoYWRvcHRlZFJl
cXVlc3QuZ2V0KCksIGNvbnN0X2Nhc3Q8Y29uc3QgZ2NoYXIqIGNvbnN0Kj4odXJpc0FycmF5KSk7
CisgICAgICAgIGdfc2xpc3RfZnJlZV9mdWxsKHVyaXNMaXN0LCBnX2ZyZWUpOworICAgICAgICBn
X2ZyZWUodXJpc0FycmF5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2NhbmNlbChhZG9wdGVkUmVxdWVzdC5nZXQoKSk7CisKKyAgICBndGtfd2lkZ2V0
X2Rlc3Ryb3koR1RLX1dJREdFVChkaWFsb2cpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dFdlYlZpZXdSdW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0
a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGlmICghd2lk
Z2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHRvcGxldmVsKSkKKyAgICAgICAgdG9wbGV2ZWwg
PSAwOworCisgICAgZ2Jvb2xlYW4gYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbihyZXF1ZXN0KTsKKyAg
ICBHdGtXaWRnZXQqIGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyhhbGxvd3NN
dWx0aXBsZVNlbGVjdGlvbiA/IF8oIlNlbGVjdCBGaWxlcyBmb3IgVXBsb2FkIikgOiBfKCJTZWxl
Y3QgRmlsZSBmb3IgVXBsb2FkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPyBHVEtfV0lORE9XKHRvcGxldmVsKSA6IDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0ZJ
TEVfQ0hPT1NFUl9BQ1RJT05fT1BFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfQ0FOQ0VMLCBHVEtfUkVTUE9OU0VfQ0FOQ0VM
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
S19TVE9DS19PUEVOLCBHVEtfUkVTUE9OU0VfQUNDRVBULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgR1JlZlB0cjxHdGtG
aWxlRmlsdGVyPiBmaWx0ZXIod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5
cGVzX2ZpbHRlcihyZXF1ZXN0KSk7CisgICAgaWYgKGZpbHRlcikKKyAgICAgICAgZ3RrX2ZpbGVf
Y2hvb3Nlcl9zZXRfZmlsdGVyKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSwgZmlsdGVyLmdldCgp
KTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9zZWxlY3RfbXVsdGlwbGUoR1RLX0ZJTEVfQ0hP
T1NFUihkaWFsb2cpLCBhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbik7CisKKyAgICBjb25zdCBnY2hh
ciogY29uc3QqIHNlbGVjdGVkVVJJcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
c2VsZWN0ZWRfdXJpcyhyZXF1ZXN0KTsKKyAgICBpZiAoc2VsZWN0ZWRVUklzICYmIHNlbGVjdGVk
VVJJc1swXSAmJiAqc2VsZWN0ZWRVUklzWzBdKQorICAgICAgICBndGtfZmlsZV9jaG9vc2VyX3Nl
bGVjdF91cmkoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBzZWxlY3RlZFVSSXNbMF0pOworCisg
ICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2csICJyZXNwb25zZSIsIEdfQ0FMTEJBQ0soZmlsZUNo
b29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKSwgZ19vYmplY3RfcmVmKHJlcXVlc3QpKTsKKyAg
ICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsKKworICAgIHJldHVybiBUUlVFOworfQorCiBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogewogICAg
IGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+Y29uc3Ry
dWN0ZWQpCkBAIC0yNjMsNiArMzE2LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Ns
YXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgd2ViVmlld0Ns
YXNzLT5zY3JpcHRfY29uZmlybSA9IHdlYmtpdFdlYlZpZXdTY3JpcHRDb25maXJtOwogICAgIHdl
YlZpZXdDbGFzcy0+c2NyaXB0X3Byb21wdCA9IHdlYmtpdFdlYlZpZXdTY3JpcHRQcm9tcHQ7CiAg
ICAgd2ViVmlld0NsYXNzLT5kZWNpZGVfcG9saWN5ID0gd2Via2l0V2ViVmlld0RlY2lkZVBvbGlj
eTsKKyAgICB3ZWJWaWV3Q2xhc3MtPnJ1bl9maWxlX2Nob29zZXIgPSB3ZWJraXRXZWJWaWV3UnVu
RmlsZUNob29zZXI7CiAKICAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUod2ViVmlld0NsYXNz
LCBzaXplb2YoV2ViS2l0V2ViVmlld1ByaXZhdGUpKTsKIApAQCAtNjIyLDYgKzY3NiwxNyBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3Mq
IHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1BPTElDWV9E
RUNJU0lPTiwKICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lP
Tl9UWVBFKTsKIAorICAgIC8qIFRPRE86IERlc2NyaWJlIHRoZSBzaWduYWwuICovCisgICAgc2ln
bmFsc1tSVU5fRklMRV9DSE9PU0VSXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygicnVuLWZpbGUt
Y2hvb3NlciIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3
Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAg
ICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBydW5fZmls
ZV9jaG9vc2VyKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3Ry
dWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRhICovLAorICAgICAgICAgICAgICAgICAg
ICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAg
R19UWVBFX0JPT0xFQU4sIDEsIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzICovCisgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCk7CisKICAgICAvKioK
ICAgICAgKiBXZWJLaXRXZWJWaWV3Ojptb3VzZS10YXJnZXQtY2hhbmdlZDoKICAgICAgKiBAd2Vi
X3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQK
QEAgLTc3MSw2ICs4MzYsMTIgQEAgdm9pZCB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2Vk
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdLSGl0VGVzdFJlc3VsdFJlZgogICAgIGdfc2lnbmFs
X2VtaXQod2ViVmlldywgc2lnbmFsc1tNT1VTRV9UQVJHRVRfQ0hBTkdFRF0sIDAsIHByaXYtPm1v
dXNlVGFyZ2V0SGl0VGVzdFJlc3VsdC5nZXQoKSwgbW9kaWZpZXJzKTsKIH0KIAordm9pZCB3ZWJr
aXRXZWJWaWV3TWFrZUZpbGVDaG9vc2VyUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ2Jvb2xlYW4gcmV0dXJu
VmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW1JVTl9GSUxFX0NIT09T
RVJdLCAwLCByZXF1ZXN0LCAmcmV0dXJuVmFsdWUpOworfQorCiAvKioKICAqIHdlYmtpdF93ZWJf
dmlld19uZXc6CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlldy5oCmluZGV4IDAwODFiZTMuLjkxNjg5MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTMwLDEzICszMCwxNCBA
QAogCiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0VGVzdFJlc3VsdC5o
PgotI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4dC5oPgorI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0UG9saWN5RGVjaXNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNldHRp
bmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJW
aWV3QmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgot
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UG9saWN5RGVjaXNpb24uaD4KIAogR19CRUdJTl9ERUNM
UwogCkBAIC0xNDAsNiArMTQxLDEwIEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAg
ICBnYm9vbGVhbiAgICgqIGRlY2lkZV9wb2xpY3kpICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAg
ICAgICAgICAqd2ViX3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdFBvbGljeURlY2lzaW9uICAgICAgKmRlY2lzaW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgIHR5cGUp
OworCisgICAgZ2Jvb2xlYW4gICAoKiBydW5fZmlsZV9jaG9vc2VyKSAgICAgKFdlYktpdFdlYlZp
ZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgICpyZXF1ZXN0KTsKKwogICAgIHZv
aWQgICAgICAgKCogbW91c2VfdGFyZ2V0X2NoYW5nZWQpIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXRIaXRUZXN0UmVzdWx0ICAgICAgKmhpdF90ZXN0X3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICAgICBtb2Rp
ZmllcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdQcml2YXRlLmgKaW5kZXggNzY4YTYyMC4uYjMxNmQxYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0
ZS5oCkBAIC00Myw2ICs0Myw3IEBAIHZvaWQgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRBbGVy
dChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7CiBib29sIHdlYmtpdFdl
YlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybShXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYg
bWVzc2FnZSk7CiBXS1N0cmluZ1JlZiB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdFByb21wdChX
ZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSwgY29uc3QgQ1N0cmluZyYgZGVm
YXVsdFRleHQpOwogdm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBvbGljeURlY2lzaW9uKFdlYktpdFdl
YlZpZXcqLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUsIFdlYktpdFBvbGljeURlY2lzaW9uKik7
Cit2b2lkIHdlYmtpdFdlYlZpZXdNYWtlRmlsZUNob29zZXJSZXF1ZXN0KFdlYktpdFdlYlZpZXcq
LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqKTsKIHZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFy
Z2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiwgV0tIaXRUZXN0UmVzdWx0UmVmLCB1bnNpZ25lZCBt
b2RpZmllcnMpOwogCiAjZW5kaWYgLy8gV2ViS2l0V2ViVmlld1ByaXZhdGVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dFdlYlZpZXcuY3BwCmluZGV4IDQ3ZGE5OGUuLjlmMjE1MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmll
dy5jcHAKQEAgLTIyNiw2ICsyMjYsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbmV3V2Vi
VmlldzsKICAgICB9CiAKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXIoV2ViS2l0
V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgVUlDbGllbnRUZXN0
KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisgICAgICAgIHRlc3QtPm1fZmlsZUNob29z
ZXJSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21h
aW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCiAgICAgc3RhdGljIGdib29s
ZWFuIHNjcmlwdEFsZXJ0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBVSUNs
aWVudFRlc3QqIHRlc3QpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHRlc3QtPm1fc2NyaXB0VHlw
ZSkgewpAQCAtMjg0LDYgKzI5Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHdlYmtpdF9z
ZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkod2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsKICAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNLKHZpZXdDcmVhdGUp
LCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJydW4tZmlsZS1j
aG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlciksIHRoaXMpOwogICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlwdC1hbGVydCIsIEdfQ0FMTEJBQ0soc2NyaXB0
QWxlcnQpLCB0aGlzKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzY3Jp
cHQtY29uZmlybSIsIEdfQ0FMTEJBQ0soc2NyaXB0Q29uZmlybSksIHRoaXMpOwogICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlwdC1wcm9tcHQiLCBHX0NBTExCQUNLKHNj
cmlwdFByb21wdCksIHRoaXMpOwpAQCAtMzEyLDEyICszMjEsMjAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCk7CiAgICAgfQogCisgICAg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBtb3VzZUJ1dHRvbkNsaWNrQW5kV2FpdEZvckZpbGVD
aG9vc2VyUmVxdWVzdChpbnQgeCwgaW50IHkpCisgICAgeworICAgICAgICBtb3VzZUJ1dHRvbkNs
aWNrKHgsIHkpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAg
IHJldHVybiBtX2ZpbGVDaG9vc2VyUmVxdWVzdC5nZXQoKTsKKyAgICB9CisKICAgICBWZWN0b3I8
V2ViVmlld0V2ZW50cz4gbV93ZWJWaWV3RXZlbnRzOwogICAgIFNjcmlwdFR5cGUgbV9zY3JpcHRU
eXBlOwogICAgIGJvb2wgbV9zY3JpcHREaWFsb2dDb25maXJtZWQ7CiAgICAgV2luZG93UHJvcGVy
dGllcyBtX3dpbmRvd1Byb3BlcnRpZXM7CiAgICAgSGFzaFNldDxXVEY6OlN0cmluZz4gbV93aW5k
b3dQcm9wZXJ0aWVzQ2hhbmdlZDsKICAgICBHUmVmUHRyPFdlYktpdEhpdFRlc3RSZXN1bHQ+IG1f
bW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0OworICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0PiBtX2ZpbGVDaG9vc2VyUmVxdWVzdDsKICAgICB1bnNpZ25lZCBpbnQgbV9tb3VzZVRh
cmdldE1vZGlmaWVyczsKIH07CiAKQEAgLTMzMyw2ICszNTAsODggQEAgc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9z
ZSk7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVG
aWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQoreworICAgIEd0a0ZpbGVGaWx0
ZXJJbmZvIGZpbHRlckluZm87CisgICAgZmlsdGVySW5mby5jb250YWlucyA9IEdUS19GSUxFX0ZJ
TFRFUl9NSU1FX1RZUEU7CisgICAgZmlsdGVySW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKKyAg
ICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJJbmZvKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QoVUlDbGllbnRUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRV
bnRpbE1hcHBlZCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmaWxlQ2hvb3NlckhUTUxGb3Jt
YXQgPSAiPGh0bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7
dG9wOjA7bWFyZ2luOjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+PC9ib2R5PjwvaHRtbD4i
OworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0
ZXJpbmcuCisgICAgR093blB0cjxjaGFyPiBzaW1wbGVGaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9w
cmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiIikpOworICAgIHRlc3QtPmxvYWRIdG1sKHNp
bXBsZUZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIGZpbGVDaG9vc2VyUmVxdWVz
dCA9IHRlc3QtPm1vdXNlQnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUs
IDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211
bHRpcGxlX3NlbGVjdGlvbihmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFy
KiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7Cisg
ICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFm
aWx0ZXIpOworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRVUklzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF91cmlzKGZpbGVDaG9vc2VyUmVxdWVzdCk7
CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkVVJJcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOworCisgICAgLy8gTXVsdGlwbGUgc2Vs
ZWN0aW9ucyBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZywgc29tZSBwcmUtc2VsZWN0ZWQgZmls
ZXMuCisgICAgR093blB0cjxjaGFyPiBtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MKGdf
c3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJtdWx0aXBsZSIpKTsKKyAgICB0
ZXN0LT5sb2FkSHRtbChtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBmaWxlQ2hvb3NlclJlcXVl
c3QgPSB0ZXN0LT5tb3VzZUJ1dHRvbkNsaWNrQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1
LCA1KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211
bHRpcGxlX3NlbGVjdGlvbihmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIG1pbWVUeXBlcyA9
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJl
cXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIGZpbHRlciA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1
ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBzZWxlY3RlZFVSSXMgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX3VyaXMoZmlsZUNob29zZXJSZXF1ZXN0
KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRVUklzKTsKKworICAgIC8vIFNlbGVjdCBzb21lIGZp
bGVzLgorICAgIGNvbnN0IGdjaGFyKiB1cmlzVG9TZWxlY3RbNF0gPSB7ICJmaWxlOi8vL2ZvbyIs
ICJmaWxlOi8vL2Zvby9iYXIiLCAiZmlsZTovLy9mb28vYmFyL2JheiIsIDAgfTsKKyAgICB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX3VyaXMoZmlsZUNob29zZXJSZXF1ZXN0LCB1
cmlzVG9TZWxlY3QpOworCisgICAgLy8gUGVyZm9ybSBhbm90aGVyIHJlcXVlc3QgdG8gY2hlY2sg
aWYgdGhlIGxpc3Qgb2YgZmlsZXMgc2VsZWN0ZWQKKyAgICAvLyBpbiB0aGUgcHJldmlvdXMgc3Rl
cCBhcHBlYXJzIG5vdyBhcyBwYXJ0IG9mIHRoZSBuZXcgcmVxdWVzdC4KKyAgICBmaWxlQ2hvb3Nl
clJlcXVlc3QgPSB0ZXN0LT5tb3VzZUJ1dHRvbkNsaWNrQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVx
dWVzdCg1LCA1KTsKKyAgICBzZWxlY3RlZFVSSXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3NlbGVjdGVkX3VyaXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChz
ZWxlY3RlZFVSSXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFVSSXNbMF0sID09LCAi
ZmlsZTovLy9mb28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRVUklzWzFdLCA9PSwg
ImZpbGU6Ly8vZm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFVSSXNbMl0s
ID09LCAiZmlsZTovLy9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZFVSSXNb
M10pOworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG9ubHkg
YWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZpbGVzLi4KKyAgICBHT3duUHRyPGNoYXI+
IG1pbWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhU
TUxGb3JtYXQsICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8vKixpbWFnZS8qJyIpKTsKKyAgICB0ZXN0
LT5sb2FkSHRtbChtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVz
dC0+bW91c2VCdXR0b25DbGlja0FuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVf
c2VsZWN0aW9uKGZpbGVDaG9vc2VyUmVxdWVzdCkpOworCisgICAgbWltZVR5cGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7
CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVz
WzBdLCA9PSwgImF1ZGlvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFdLCA9
PSwgInZpZGVvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwgImlt
YWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKKworICAgIGZpbHRlciA9IHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29z
ZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChHVEtfSVNfRklMRV9GSUxURVIoZmlsdGVyKSk7Cisg
ICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJhdWRpby8qIikpOwor
ICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAidmlkZW8vKiIpKTsK
KyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImltYWdlLyoiKSk7
CisKKyAgICBzZWxlY3RlZFVSSXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Nl
bGVjdGVkX3VyaXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRV
UklzKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2Vy
UmVxdWVzdCk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3Mo
VUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBodG1sT25Mb2FkRm9ybWF0ID0gIjxodG1sPjxib2R5IG9uTG9hZD1cIiVzXCI+PC9ib2R5
PjwvaHRtbD4iOwpAQCAtNDU2LDYgKzU1NSw3IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBXZWJW
aWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNldHRpbmdzIiwgdGVzdFdlYlZpZXdTZXR0
aW5ncyk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJyZXBsYWNlLWNv
bnRlbnQiLCB0ZXN0V2ViVmlld1JlcGxhY2VDb250ZW50KTsKICAgICBVSUNsaWVudFRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJjcmVhdGUtcmVhZHktY2xvc2UiLCB0ZXN0V2ViVmlld0NyZWF0
ZVJlYWR5Q2xvc2UpOworICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImZp
bGUtY2hvb3Nlci1yZXF1ZXN0IiwgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QpOwogICAg
IFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImphdmFzY3JpcHQtZGlhbG9ncyIs
IHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3MpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgIndpbmRvdy1wcm9wZXJ0aWVzIiwgdGVzdFdlYlZpZXdXaW5kb3dQcm9w
ZXJ0aWVzKTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJtb3VzZS10
YXJnZXQiLCB0ZXN0V2ViVmlld01vdXNlVGFyZ2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAppbmRleCAwMGQzYjNl
Li4yOWM1M2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCkBAIC0xODAsMyArMTgwLDM0IEBAIHZvaWQgV2ViVmll
d1Rlc3Q6Om1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZp
ZXJzKQogICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50LmdldCgpKTsKIH0KIAordm9pZCBXZWJW
aWV3VGVzdDo6bW91c2VCdXR0b25DbGljayhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0
b24sIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKK3sKKyAgICBtb3VzZUJ1dHRvbkV2ZW50
KEdES19CVVRUT05fUFJFU1MsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmllcnMpOworICAgIG1v
dXNlQnV0dG9uRXZlbnQoR0RLX0JVVFRPTl9SRUxFQVNFLCB4LCB5LCBidXR0b24sIG1vdXNlTW9k
aWZpZXJzKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6bW91c2VCdXR0b25FdmVudChHZGtFdmVu
dFR5cGUgZXZlbnRUeXBlLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2ln
bmVkIGludCBtb3VzZU1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7
CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOworICAg
IGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdP
d25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoZXZlbnRUeXBlKSk7CisgICAgZXZl
bnQtPmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCk7Cisg
ICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsKKworICAgIGV2ZW50LT5idXR0
b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAg
ICBldmVudC0+YnV0dG9uLnkgPSB5OworICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAg
ZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOworICAgIGV2ZW50LT5idXR0b24u
YnV0dG9uID0gYnV0dG9uOworCisgICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNl
X21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdl
cihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7CisKKyAgICBpbnQgeFJvb3Qs
IHlSb290OworICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dp
bmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5idXR0
b24ueF9yb290ID0geFJvb3Q7CisgICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKKyAg
ICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAppbmRleCA5NWE1Njlj
Li43ZDkyNGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9XZWJWaWV3VGVzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1dlYlZpZXdUZXN0LmgKQEAgLTQ1LDExICs0NSwxNSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKIAogICAgIHZvaWQgbW91c2VNb3Zl
VG8oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAwKTsKKyAgICB2
b2lkIG1vdXNlQnV0dG9uQ2xpY2soaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9uID0g
MSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCk7CiAKICAgICBXZWJLaXRXZWJWaWV3
KiBtX3dlYlZpZXc7CiAgICAgR01haW5Mb29wKiBtX21haW5Mb29wOwogICAgIENTdHJpbmcgbV9h
Y3RpdmVVUkk7CiAgICAgR3RrV2lkZ2V0KiBtX3BhcmVudFdpbmRvdzsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIG1vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlLCBpbnQsIGludCwgdW5zaWduZWQg
aW50LCB1bnNpZ25lZCBpbnQpOwogfTsKIAogI2VuZGlmIC8vIFdlYlZpZXdUZXN0X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCAzYWY5OTA0Li5kZTAz
MDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0z
MCwxMyArMzAsMTQgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVkaXRpbmdDb21tYW5kcy5o
PgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RW51bVR5cGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRFcnJvci5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJ
UmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVzcG9uc2UuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3Lmg+CisjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0V2luZG93UHJvcGVydGllcy5oPgogCiAjdW5kZWYgX19XRUJLSVQyX0hfSU5TSURFX18KLS0g
CjEuNy43LjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127596</attachid>
            <date>2012-02-17 08:49:12 -0800</date>
            <delta_ts>2012-02-20 05:58:44 -0800</delta_ts>
            <desc>Patch Proposal + Unit Tests</desc>
            <filename>0001-Implement-runOpenPanel-in-WebKit2GTK.patch</filename>
            <type>text/plain</type>
            <size>40982</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA0MmM1ODgxYzBjZmUwY2I0NGRlZmIzMzQ4YWMyZjJlMjllZjJkYjAxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDEwIEZlYiAyMDEyIDEyOjEzOjU5ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gSW1wbGVtZW50IHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXQyR1RLKwoKVE9ETzogYWRkIGRvY3Vt
ZW50YXRpb24sIG9uY2UgYW5kIGZvciBhbGwKLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2dvYmplY3QvR1JlZlB0ci5jcHAgICAgICB8ICAgMTMgKwogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9nb2JqZWN0L0dSZWZQdHIuaCAgICAgICAgfCAgICAzICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmggICAgICB8ICAgIDEgKwogU291cmNlL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIC4uLi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwIHwgIDI2NSArKysrKysr
KysrKysrKysrKysrKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdC5oICAgfCAgIDc4ICsrKysrKwogLi4uL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0UHJpdmF0ZS5oICAgICAgfCAgIDI4ICsrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRVSUNsaWVudC5jcHAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIHwgICA3MCArKysrKwogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oICAgfCAgICA5ICstCiAuLi4vVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCAgICAgICB8ICAgIDEgKwogLi4uL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcCAgfCAgMTAwICsrKysr
KysrCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwICAgICAgICB8
ICAgMzEgKysrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5oICB8ICAgIDQgKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5o
ICAgICAgICAgfCAgICAzICstCiAxNSBmaWxlcyBjaGFuZ2VkLCA2MTUgaW5zZXJ0aW9ucygrKSwg
NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAKaW5kZXggMWNkMjJjNS4uOTk4NzlhMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVmUHRyLmNwcApAQCAtODEs
NiArODEsMTkgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1NvdXJjZSogcHRyKQogICAg
ICAgICBnX3NvdXJjZV91bnJlZihwdHIpOwogfQogCit0ZW1wbGF0ZSA8PiBHUHRyQXJyYXkqIHJl
ZkdQdHIoR1B0ckFycmF5KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19wdHJfYXJy
YXlfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJl
ZkdQdHIoR1B0ckFycmF5KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19wdHJfYXJy
YXlfdW5yZWYocHRyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBFTkFC
TEUoR0xJQl9TVVBQT1JUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9n
b2JqZWN0L0dSZWZQdHIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVm
UHRyLmgKaW5kZXggMTBlYmYwNy4uODIwM2NkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2dvYmplY3QvR1JlZlB0ci5oCkBAIC0yNiw3ICsyNiw2IEBACiAjaWYgRU5BQkxFKEdMSUJf
U1VQUE9SVCkKIAogI2luY2x1ZGUgIkFsd2F5c0lubGluZS5oIgotI2luY2x1ZGUgIkdSZWZQdHIu
aCIKICNpbmNsdWRlICJSZWZQdHIuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKQEAgLTIwNSw2
ICsyMDQsOCBAQCB0ZW1wbGF0ZSA8PiBHVmFyaWFudCogcmVmR1B0cihHVmFyaWFudCogcHRyKTsK
IHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdWYXJpYW50KiBwdHIpOwogdGVtcGxhdGUgPD4g
R1NvdXJjZSogcmVmR1B0cihHU291cmNlKiBwdHIpOwogdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQ
dHIoR1NvdXJjZSogcHRyKTsKK3RlbXBsYXRlIDw+IEdQdHJBcnJheSogcmVmR1B0cihHUHRyQXJy
YXkqIHB0cik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHUHRyQXJyYXkqIHB0cik7CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogcmVmR1B0cihUKiBwdHIpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKaW5kZXggY2IzODQy
Yi4uNDRhY2QzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0
L0dUeXBlZGVmcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HVHlw
ZWRlZnMuaApAQCAtNTQsNiArNTQsNyBAQCB0eXBlZGVmIHN0cnVjdCBfR0xpc3QgR0xpc3Q7CiB0
eXBlZGVmIHN0cnVjdCBfR1BhdHRlcm5TcGVjIEdQYXR0ZXJuU3BlYzsKIHR5cGVkZWYgc3RydWN0
IF9HUG9sbGFibGVPdXRwdXRTdHJlYW0gR1BvbGxhYmxlT3V0cHV0U3RyZWFtOwogdHlwZWRlZiBz
dHJ1Y3QgX0dTTGlzdCBHU0xpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfR1B0ckFycmF5IEdQdHJBcnJh
eTsKIHR5cGVkZWYgc3RydWN0IF9HU29ja2V0Q2xpZW50IEdTb2NrZXRDbGllbnQ7CiB0eXBlZGVm
IHN0cnVjdCBfR1NvY2tldENvbm5lY3Rpb24gR1NvY2tldENvbm5lY3Rpb247CiB0eXBlZGVmIHN0
cnVjdCBfR1NvdXJjZSBHU291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAzYjhlN2JkLi5j
ZDNhNmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtOTAsNiArOTAsNyBAQCBsaWJ3ZWJraXQy
Z3RraW5jbHVkZV9IRUFERVJTID0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RXJyb3IuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0
UmVzdWx0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UG9saWN5RGVjaXNpb24uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRSZXNwb25zZVBvbGljeURlY2lzaW9uLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0U2V0dGluZ3MuaCBcCkBAIC01NDgsNiArNTQ5LDkgQEAgbGlid2Via2l0Mmd0a19A
V0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9O
QF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZS5oIFwK
KwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvbi5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uUHJpdmF0ZS5oIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMzRj
NTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCIKKworI2luY2x1ZGUgIldlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8Z2xpYi9naTE4bi1s
aWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisvKioKKyAqIFNF
Q1RJT046IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBB
IHJlcXVlc3QgdG8gb3BlbiBhIGZpbGUgY2hvb3Nlci4KKyAqIEBUaXRsZTogV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3CisgKi8KK0dfREVGSU5F
X1RZUEUoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3QsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJp
dmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmPiB3a1BhcmFt
ZXRlcnM7CisgICAgV0tSZXRhaW5QdHI8V0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZj4gd2tM
aXN0ZW5lcjsKKyAgICBHUmVmUHRyPEd0a0ZpbGVGaWx0ZXI+IGZpbHRlcjsKKyAgICBHUmVmUHRy
PEdQdHJBcnJheT4gbWltZVR5cGVzOworICAgIEdSZWZQdHI8R1B0ckFycmF5PiBzZWxlY3RlZEZp
bGVzOworICAgIGJvb2wgbWltZVR5cGVzQ2hlY2tlZDsKKyAgICBib29sIHNlbGVjdGVkRmlsZXND
aGVja2VkOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7Cit9OworCitlbnVtIHsKKyAgICBQUk9Q
XzAsCisgICAgUFJPUF9BTExPV1NfTVVMVElQTEVfU0VMRUNUSU9OLAorICAgIFBST1BfRklMVEVS
LAorICAgIFBST1BfTUlNRV9UWVBFUywKKyAgICBQUk9QX1NFTEVDVEVEX0ZJTEVTLAorfTsKKwor
c3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2luaXQoV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIHJlcXVlc3QtPnByaXYgPSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUocmVxdWVzdCwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVF
U1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpOworICAgIG5ldyAocmVxdWVzdC0+
cHJpdikgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hPT1NF
Ul9SRVFVRVNUKG9iamVjdCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHJlcXVlc3QgaXMgYWx3
YXlzIGhhbmRsZWQgYmVmb3JlIGZpbmFsaXppbmcuCisgICAgaWYgKCFyZXF1ZXN0LT5wcml2LT5o
YW5kbGVkUmVxdWVzdCkKKyAgICAgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNl
bChyZXF1ZXN0KTsKKworICAgIHJlcXVlc3QtPnByaXYtPn5XZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3RQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdEZpbGVDaG9vc2VyUmVxdWVzdEdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFV
RVNUKG9iamVjdCk7CisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfQUxMT1dT
X01VTFRJUExFX1NFTEVDVElPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwg
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24ocmVx
dWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRklMVEVSOgorICAgICAgICBn
X3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
bWltZV90eXBlc19maWx0ZXIocmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfTUlNRV9UWVBFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQodmFsdWUsIHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRF9GSUxFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym94ZWQodmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmls
ZXMocmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MqIHJl
cXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRG
aWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5
ID0gd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0R2V0UHJvcGVydHk7CisgICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKHJlcXVlc3RDbGFzcywgc2l6ZW9mKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dFByaXZhdGUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDph
bGxvd3MtbXVsdGlwbGUtc2VsZWN0aW9uOgorICAgICAqCisgICAgICogVE9ETworICAgICAqLwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0FMTE9XU19NVUxUSVBMRV9TRUxFQ1RJ
T04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm9v
bGVhbigiYWxsb3dzLW11bHRpcGxlLXNlbGVjdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiQWxsb3dzIG11bHRpcGxlIGZpbGUg
c2VsZWN0aW9uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiV2hldGhlciB0byBhY2NlcHQgbXVsdGlwbGUgc2VsZWN0aW9uIG9mIGZp
bGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisgICAgICogV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0OmZpbHRlcjoKKyAgICAgKgorICAgICAqIFRPRE8KKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9GSUxURVIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJmaWx0ZXIiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
TUlNRSB0eXBlcyBmaWx0ZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlRoZSBHdGtGaWxlRmlsdGVyIGFzc29jaWF0ZWQgd2l0aCB0
aGUgcmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR1RLX1RZUEVfRklMRV9GSUxURVIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6bWltZS10eXBlczoKKyAg
ICAgKgorICAgICAqIFRPRE8KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9NSU1FX1RZUEVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX2JveGVkKCJtaW1lLXR5cGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1JTUUgdHlwZXMiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBsaXN0IG9m
IE1JTUUgdHlwZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdDpzZWxlY3RlZC1maWxlczoKKyAgICAgKgorICAgICAqIFRPRE8KKyAgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TRUxFQ1RFRF9GSUxFUywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCgic2VsZWN0ZWQtZmls
ZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXygiU2VsZWN0ZWQgZmlsZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBsaXN0IG9mIHNlbGVjdGVkIGZpbGVzIGFzc29j
aWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUlYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKK30KKworV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiB3ZWJraXRGaWxlQ2hvb3NlclJlcXVl
c3RDcmVhdGUoV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHdrUGFyYW1ldGVycywgV0tPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lclJlZiB3a0xpc3RlbmVyKQoreworICAgIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIE5VTEwpKTsKKyAgICByZXF1ZXN0
LT5wcml2LT53a1BhcmFtZXRlcnMgPSB3a1BhcmFtZXRlcnM7CisgICAgcmVxdWVzdC0+cHJpdi0+
d2tMaXN0ZW5lciA9IHdrTGlzdGVuZXI7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK2dib29s
ZWFuIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9u
KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIEZBTFNFKTsK
KyAgICByZXR1cm4gV0tPcGVuUGFuZWxQYXJhbWV0ZXJzR2V0QWxsb3dzTXVsdGlwbGVGaWxlcyhy
ZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpOworfQorCitjb25zdCBnY2hhciogY29u
c3QqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKworICAgIGlmIChyZXF1
ZXN0LT5wcml2LT5taW1lVHlwZXNDaGVja2VkKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMtPnBkYXRhKTsKKyAgICByZXF1
ZXN0LT5wcml2LT5taW1lVHlwZXNDaGVja2VkID0gdHJ1ZTsKKworICAgIFdLUmV0YWluUHRyPFdL
QXJyYXlSZWY+IHdrTWltZVR5cGVzKEFkb3B0V0ssIFdLT3BlblBhbmVsUGFyYW1ldGVyc0NvcHlB
Y2NlcHRlZE1JTUVUeXBlcyhyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpKTsKKyAg
ICBzaXplX3QgbnVtT2ZNaW1lVHlwZXMgPSBXS0FycmF5R2V0U2l6ZSh3a01pbWVUeXBlcy5nZXQo
KSk7CisgICAgaWYgKCFudW1PZk1pbWVUeXBlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3X2Z1bGwo
bnVtT2ZNaW1lVHlwZXMgKyAxLCBnX2ZyZWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bU9mTWltZVR5cGVzOyArK2kpIHsKKyAgICAgICAgV0tTdHJpbmdSZWYgd2tNaW1lVHlwZSA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tNaW1lVHlw
ZXMuZ2V0KCksIGkpKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPm1p
bWVUeXBlcy5nZXQoKSwgZ19zdHJkdXAodG9JbXBsKHdrTWltZVR5cGUpLT5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKSk7CisgICAgfQorICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5t
aW1lVHlwZXMuZ2V0KCksIDApOworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIq
Kj4ocmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzLT5wZGF0YSk7Cit9CisKK0d0a0ZpbGVGaWx0ZXIq
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisKKyAgICBpZiAo
cmVxdWVzdC0+cHJpdi0+ZmlsdGVyKQorICAgICAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+Zmls
dGVyLmdldCgpOworCisgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gd2tNaW1lVHlwZXMoQWRv
cHRXSywgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzQ29weUFjY2VwdGVkTUlNRVR5cGVzKHJlcXVlc3Qt
PnByaXYtPndrUGFyYW1ldGVycy5nZXQoKSkpOworICAgIHNpemVfdCBudW1PZk1pbWVUeXBlcyA9
IFdLQXJyYXlHZXRTaXplKHdrTWltZVR5cGVzLmdldCgpKTsKKyAgICBpZiAoIW51bU9mTWltZVR5
cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlcXVlc3QtPnByaXYtPmZpbHRlciA9IGd0
a19maWxlX2ZpbHRlcl9uZXcoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mTWlt
ZVR5cGVzOyArK2kpIHsKKyAgICAgICAgV0tTdHJpbmdSZWYgd2tNaW1lVHlwZSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tNaW1lVHlwZXMuZ2V0KCks
IGkpKTsKKyAgICAgICAgZ3RrX2ZpbGVfZmlsdGVyX2FkZF9taW1lX3R5cGUocmVxdWVzdC0+cHJp
di0+ZmlsdGVyLmdldCgpLCB0b0ltcGwod2tNaW1lVHlwZSktPnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIH0KKworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCk7Cit9
CisKK3ZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29zZV9maWxlcyhXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IGdjaGFyKiBjb25zdCogZmlsZXMpCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVx
dWVzdCkpOworCisgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IHdrQ2hvc2VuRmls
ZXMoQWRvcHRXSywgV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGZpbGVzW2ldOyBpKyspIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmaWxlIHBhdGggaXMg
cHJlc2VudGVkIGluc2lkZSBvZiBhIGVzY2FwZWQKKyAgICAgICAgLy8gU3RyaW5nIHRvIFdlYkNv
cmUsIGFuZCBhbHdheXMgd2l0aCB0aGUgJ2ZpbGU6Ly8nIHByZWZpeCwKKyAgICAgICAgLy8gb3Ro
ZXJ3aXNlIHRoZSBGaWxlQ2hvb3NlciB3b24ndCBhY3R1YWxseSBzZWxlY3QgaXQuCisgICAgICAg
IFN0cmluZyBmaWxlU3RyaW5nID0gZmlsZW5hbWVUb1N0cmluZyhmaWxlc1tpXSk7CisgICAgICAg
IGlmICghZmlsZVN0cmluZy5zdGFydHNXaXRoKCJmaWxlOi8vIiwgZmFsc2UpKQorICAgICAgICAg
ICAgZmlsZVN0cmluZy5pbnNlcnQoImZpbGU6Ly8iLCAwKTsKKworICAgICAgICBXS1JldGFpblB0
cjxXS1VSTFJlZj4gd2tVUkwoQWRvcHRXSywgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcoZmls
ZVN0cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHdrQ2hv
c2VuRmlsZXMuZ2V0KCksIHdrVVJMLmdldCgpKTsKKyAgICB9CisKKyAgICBXS09wZW5QYW5lbFJl
c3VsdExpc3RlbmVyQ2hvb3NlRmlsZXMocmVxdWVzdC0+cHJpdi0+d2tMaXN0ZW5lci5nZXQoKSwg
d2tDaG9zZW5GaWxlcy5nZXQoKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3Qg
PSB0cnVlOworfQorCitjb25zdCBnY2hhciogY29uc3QqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVR
VUVTVChyZXF1ZXN0KSwgMCk7CisKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxl
c0NoZWNrZWQpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVl
c3QtPnByaXYtPnNlbGVjdGVkRmlsZXMtPnBkYXRhKTsKKyAgICByZXF1ZXN0LT5wcml2LT5zZWxl
Y3RlZEZpbGVzQ2hlY2tlZCA9IHRydWU7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RlZEZp
bGVOYW1lcyA9IHRvSW1wbChyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpLT5zZWxl
Y3RlZEZpbGVOYW1lcygpOworICAgIHNpemVfdCBudW1PZkZpbGVzID0gc2VsZWN0ZWRGaWxlTmFt
ZXMuc2l6ZSgpOworICAgIGlmICghbnVtT2ZGaWxlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25l
d19mdWxsKG51bU9mRmlsZXMgKyAxLCBnX2ZyZWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bU9mRmlsZXM7ICsraSkgeworICAgICAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHNlbGVjdGVkRmlsZU5hbWVzW2ldKTsKKyAgICAgICAgZ19wdHJf
YXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMuZ2V0KCksIGdfc3RyZHVwKGZp
bGVuYW1lLmRhdGEoKSkpOworICAgIH0KKyAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJp
di0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgMCk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7Cit9CisKK3Zv
aWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklMRV9D
SE9PU0VSX1JFUVVFU1QocmVxdWVzdCkpOworICAgIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJD
YW5jZWwocmVxdWVzdC0+cHJpdi0+d2tMaXN0ZW5lci5nZXQoKSk7CisgICAgcmVxdWVzdC0+cHJp
di0+aGFuZGxlZFJlcXVlc3QgPSB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzA2NTY1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJf
Q09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5j
bHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0X2gKKyNkZWZpbmUgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0X2gKKworI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUICAgICAgICAg
ICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVT
VF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJL
SVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xh
c3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRklMRV9DSE9P
U0VSX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
RklMRV9DSE9PU0VSX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVF
U1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAgICAgICAg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdENsYXNzICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3M7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSBXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCB7Cisg
ICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZSAg
ICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uICAoV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqIGNv
bnN0ICoKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyAgICAgICAg
ICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBH
dGtGaWxlRmlsdGVyICoKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
c19maWx0ZXIgICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX2ZpbGVzICAg
ICAgICAgICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgKiBjb25zdCAgICAgICpmaWxlcyk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKiBjb25z
dCAqCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzICAgICAg
ICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCAgICAgICAgICAgICAgICAgICAg
IChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hZjcyMjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5o
CkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCogd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKFdLT3BlblBhbmVsUGFy
YW1ldGVyc1JlZiwgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZik7CisKKyNlbmRpZiAvLyBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAppbmRleCBlNzYyMTJkLi5iYzJj
OWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRV
SUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VUlDbGllbnQuY3BwCkBAIC0yMCwxMiArMjAsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJXZWJLaXRVSUNsaWVudC5oIgogCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0
ZS5oIgogI2luY2x1ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CiAKQEAgLTEzMSw2ICsxMzMsMTIgQEAgc3RhdGljIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQoV0tQYWdlUmVmIHBhZ2UsIFdLSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmUKICAgICB3ZWJr
aXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSwg
aGl0VGVzdFJlc3VsdCwgd2tFdmVudE1vZGlmaWVyc1RvR2RrTW9kaWZpZXJzKG1vZGlmaWVycykp
OwogfQogCitzdGF0aWMgdm9pZCBydW5PcGVuUGFuZWwoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVS
ZWYgZnJhbWUsIFdLT3BlblBhbmVsUGFyYW1ldGVyc1JlZiBwYXJhbWV0ZXJzLCBXS09wZW5QYW5l
bFJlc3VsdExpc3RlbmVyUmVmIGxpc3RlbmVyLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQorewor
ICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHRHUmVm
KHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdENyZWF0ZShwYXJhbWV0ZXJzLCBsaXN0ZW5lcikpOwor
ICAgIHdlYmtpdFdlYlZpZXdNYWtlRmlsZUNob29zZXJSZXF1ZXN0KFdFQktJVF9XRUJfVklFVyhj
bGllbnRJbmZvKSwgcmVxdWVzdC5nZXQoKSk7Cit9CisKIHZvaWQgYXR0YWNoVUlDbGllbnRUb1Zp
ZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBXS1BhZ2VVSUNsaWVudCB3a1VJQ2xp
ZW50ID0gewpAQCAtMTY0LDcgKzE3Miw3IEBAIHZvaWQgYXR0YWNoVUlDbGllbnRUb1ZpZXcoV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKICAgICAgICAgMCwgLy8gZGlkRHJhdwogICAgICAgICAwLCAv
LyBwYWdlRGlkU2Nyb2xsCiAgICAgICAgIDAsIC8vIGV4Y2VlZGVkRGF0YWJhc2VRdW90YQotICAg
ICAgICAwLCAvLyBydW5PcGVuUGFuZWwKKyAgICAgICAgcnVuT3BlblBhbmVsLAogICAgICAgICAw
LCAvLyBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0CiAgICAgICAg
IDAsIC8vIGhlYWRlckhlaWdodAogICAgICAgICAwLCAvLyBmb290ZXJIZWlnaHQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXgg
YWY3OTkzNS4uZDlhYjZmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTU5LDYgKzU5LDcgQEAgZW51bSB7CiAgICAgU0NS
SVBUX1BST01QVCwKIAogICAgIERFQ0lERV9QT0xJQ1ksCisgICAgUlVOX0ZJTEVfQ0hPT1NFUiwK
IAogICAgIE1PVVNFX1RBUkdFVF9DSEFOR0VELAogCkBAIC0xNjAsNiArMTYxLDU3IEBAIHN0YXRp
YyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3RGVjaWRlUG9saWN5KFdlYktpdFdlYlZpZXcqLCBXZWJL
aXRQb2xpY3lEZWNpc2lvbioKICAgICByZXR1cm4gVFJVRTsKIH0KIAorc3RhdGljIHZvaWQgZmls
ZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKEd0a0RpYWxvZyogZGlhbG9nLCBnaW50IHJl
c3BvbnNlSUQsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBHUmVm
UHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gYWRvcHRlZFJlcXVlc3QgPSBhZG9wdEdSZWYo
cmVxdWVzdCk7CisgICAgaWYgKHJlc3BvbnNlSUQgPT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkgewor
ICAgICAgICBHT3duUHRyPEdTTGlzdD4gZmlsZXNMaXN0KGd0a19maWxlX2Nob29zZXJfZ2V0X2Zp
bGVuYW1lcyhHVEtfRklMRV9DSE9PU0VSKGRpYWxvZykpKTsKKyAgICAgICAgZ3VpbnQgbnVtT2ZG
aWxlcyA9IGdfc2xpc3RfbGVuZ3RoKGZpbGVzTGlzdC5nZXQoKSk7CisKKyAgICAgICAgY29uc3Qg
Z2NoYXIqKiBmaWxlc0FycmF5ID0gZ19uZXcwKGNvbnN0IGdjaGFyKiwgbnVtT2ZGaWxlcyArIDEp
OworICAgICAgICBHU0xpc3QqIGZpbGUgPSBmaWxlc0xpc3QuZ2V0KCk7CisgICAgICAgIGZvciAo
Z3VpbnQgaSA9IDA7IGkgPCBudW1PZkZpbGVzOyBpKyspIHsKKyAgICAgICAgICAgIGZpbGVzQXJy
YXlbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBnY2hhcio+KGZpbGUtPmRhdGEpOworICAgICAgICAg
ICAgZmlsZSA9IGdfc2xpc3RfbmV4dChmaWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMoYWRvcHRlZFJlcXVlc3QuZ2V0KCks
IGNvbnN0X2Nhc3Q8Y29uc3QgZ2NoYXIqIGNvbnN0Kj4oZmlsZXNBcnJheSkpOworICAgICAgICBn
X2ZyZWUoZmlsZXNBcnJheSk7CisgICAgfSBlbHNlCisgICAgICAgIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9jYW5jZWwoYWRvcHRlZFJlcXVlc3QuZ2V0KCkpOworCisgICAgZ3RrX3dpZGdl
dF9kZXN0cm95KEdUS19XSURHRVQoZGlhbG9nKSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRXZWJWaWV3UnVuRmlsZUNob29zZXIoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEd0a1dpZGdldCogdG9wbGV2ZWwgPSBn
dGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBpZiAoIXdp
ZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyh0b3BsZXZlbCkpCisgICAgICAgIHRvcGxldmVs
ID0gMDsKKworICAgIGdib29sZWFuIGFsbG93c011bHRpcGxlU2VsZWN0aW9uID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24ocmVxdWVzdCk7Cisg
ICAgR3RrV2lkZ2V0KiBkaWFsb2cgPSBndGtfZmlsZV9jaG9vc2VyX2RpYWxvZ19uZXcoYWxsb3dz
TXVsdGlwbGVTZWxlY3Rpb24gPyBfKCJTZWxlY3QgRmlsZXMgZm9yIFVwbG9hZCIpIDogXygiU2Vs
ZWN0IEZpbGUgZm9yIFVwbG9hZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvcGxldmVsID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19G
SUxFX0NIT09TRVJfQUNUSU9OX09QRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNF
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VEtfU1RPQ0tfT1BFTiwgR1RLX1JFU1BPTlNFX0FDQ0VQVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIEdSZWZQdHI8R3Rr
RmlsZUZpbHRlcj4gZmlsdGVyKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90
eXBlc19maWx0ZXIocmVxdWVzdCkpOworICAgIGlmIChmaWx0ZXIpCisgICAgICAgIGd0a19maWxl
X2Nob29zZXJfc2V0X2ZpbHRlcihHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIGZpbHRlci5nZXQo
KSk7CisgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfc2VsZWN0X211bHRpcGxlKEdUS19GSUxFX0NI
T09TRVIoZGlhbG9nKSwgYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24pOworCisgICAgY29uc3QgZ2No
YXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBpZiAoc2VsZWN0ZWRGaWxlcyAmJiBzZWxl
Y3RlZEZpbGVzWzBdICYmICpzZWxlY3RlZEZpbGVzWzBdKQorICAgICAgICBndGtfZmlsZV9jaG9v
c2VyX3NlbGVjdF9maWxlbmFtZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIHNlbGVjdGVkRmls
ZXNbMF0pOworCisgICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2csICJyZXNwb25zZSIsIEdfQ0FM
TEJBQ0soZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKSwgZ19vYmplY3RfcmVmKHJl
cXVlc3QpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsKKworICAgIHJldHVybiBUUlVF
OworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2Jq
ZWN0KQogewogICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2Ns
YXNzKS0+Y29uc3RydWN0ZWQpCkBAIC0yNjMsNiArMzE1LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0
X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAg
ICAgd2ViVmlld0NsYXNzLT5zY3JpcHRfY29uZmlybSA9IHdlYmtpdFdlYlZpZXdTY3JpcHRDb25m
aXJtOwogICAgIHdlYlZpZXdDbGFzcy0+c2NyaXB0X3Byb21wdCA9IHdlYmtpdFdlYlZpZXdTY3Jp
cHRQcm9tcHQ7CiAgICAgd2ViVmlld0NsYXNzLT5kZWNpZGVfcG9saWN5ID0gd2Via2l0V2ViVmll
d0RlY2lkZVBvbGljeTsKKyAgICB3ZWJWaWV3Q2xhc3MtPnJ1bl9maWxlX2Nob29zZXIgPSB3ZWJr
aXRXZWJWaWV3UnVuRmlsZUNob29zZXI7CiAKICAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUo
d2ViVmlld0NsYXNzLCBzaXplb2YoV2ViS2l0V2ViVmlld1ByaXZhdGUpKTsKIApAQCAtNjIyLDYg
KzY3NSwxNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRX
ZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9U
WVBFX1BPTElDWV9ERUNJU0lPTiwKICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1BP
TElDWV9ERUNJU0lPTl9UWVBFKTsKIAorICAgIC8qIFRPRE86IERlc2NyaWJlIHRoZSBzaWduYWwu
ICovCisgICAgc2lnbmFsc1tSVU5fRklMRV9DSE9PU0VSXSA9CisgICAgICAgIGdfc2lnbmFsX25l
dygicnVuLWZpbGUtY2hvb3NlciIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9D
TEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xB
U1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0Ns
YXNzLCBydW5fZmlsZV9jaG9vc2VyKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2Fj
Y3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRhICovLAorICAgICAg
ICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzICov
CisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCk7
CisKICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3Ojptb3VzZS10YXJnZXQtY2hhbmdlZDoK
ICAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFs
IGlzIGVtaXR0ZWQKQEAgLTc3MSw2ICs4MzUsMTIgQEAgdm9pZCB3ZWJraXRXZWJWaWV3TW91c2VU
YXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdLSGl0VGVzdFJlc3VsdFJlZgog
ICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tNT1VTRV9UQVJHRVRfQ0hBTkdFRF0s
IDAsIHByaXYtPm1vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdC5nZXQoKSwgbW9kaWZpZXJzKTsKIH0K
IAordm9pZCB3ZWJraXRXZWJWaWV3TWFrZUZpbGVDaG9vc2VyUmVxdWVzdChXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ2Jv
b2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW1JV
Tl9GSUxFX0NIT09TRVJdLCAwLCByZXF1ZXN0LCAmcmV0dXJuVmFsdWUpOworfQorCiAvKioKICAq
IHdlYmtpdF93ZWJfdmlld19uZXc6CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDAwODFiZTMuLjkxNjg5MTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTMw
LDEzICszMCwxNCBAQAogCiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3Qu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0
VGVzdFJlc3VsdC5oPgotI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4dC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0UG9saWN5RGVjaXNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdFNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+
CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2luZG93UHJv
cGVydGllcy5oPgotI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UG9saWN5RGVjaXNpb24uaD4KIAog
R19CRUdJTl9ERUNMUwogCkBAIC0xNDAsNiArMTQxLDEwIEBAIHN0cnVjdCBfV2ViS2l0V2ViVmll
d0NsYXNzIHsKICAgICBnYm9vbGVhbiAgICgqIGRlY2lkZV9wb2xpY3kpICAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdFBvbGljeURlY2lzaW9uICAgICAgKmRlY2lzaW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lv
blR5cGUgIHR5cGUpOworCisgICAgZ2Jvb2xlYW4gICAoKiBydW5fZmlsZV9jaG9vc2VyKSAgICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgICpyZXF1ZXN0
KTsKKwogICAgIHZvaWQgICAgICAgKCogbW91c2VfdGFyZ2V0X2NoYW5nZWQpIChXZWJLaXRXZWJW
aWV3ICAgICAgICAgICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0ICAgICAgKmhpdF90ZXN0X3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAg
ICAgICAgICBtb2RpZmllcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKaW5kZXggNzY4YTYyMC4uYjMxNmQxYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3UHJpdmF0ZS5oCkBAIC00Myw2ICs0Myw3IEBAIHZvaWQgd2Via2l0V2ViVmlld1J1bkph
dmFTY3JpcHRBbGVydChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7CiBi
b29sIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybShXZWJLaXRXZWJWaWV3KiwgY29u
c3QgQ1N0cmluZyYgbWVzc2FnZSk7CiBXS1N0cmluZ1JlZiB3ZWJraXRXZWJWaWV3UnVuSmF2YVNj
cmlwdFByb21wdChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSwgY29uc3Qg
Q1N0cmluZyYgZGVmYXVsdFRleHQpOwogdm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBvbGljeURlY2lz
aW9uKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUsIFdlYktpdFBvbGlj
eURlY2lzaW9uKik7Cit2b2lkIHdlYmtpdFdlYlZpZXdNYWtlRmlsZUNob29zZXJSZXF1ZXN0KFdl
YktpdFdlYlZpZXcqLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqKTsKIHZvaWQgd2Via2l0V2Vi
Vmlld01vdXNlVGFyZ2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiwgV0tIaXRUZXN0UmVzdWx0UmVm
LCB1bnNpZ25lZCBtb2RpZmllcnMpOwogCiAjZW5kaWYgLy8gV2ViS2l0V2ViVmlld1ByaXZhdGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IDQ3ZGE5OGUuLjdkMTQ3OGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViS2l0V2ViVmlldy5jcHAKQEAgLTIyNiw2ICsyMjYsMTQgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbmV3V2ViVmlldzsKICAgICB9CiAKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNo
b29zZXIoV2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwg
VUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisgICAgICAgIHRlc3Qt
Pm1fZmlsZUNob29zZXJSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVp
dCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCiAgICAg
c3RhdGljIGdib29sZWFuIHNjcmlwdEFsZXJ0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBjaGFyKiBt
ZXNzYWdlLCBVSUNsaWVudFRlc3QqIHRlc3QpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHRlc3Qt
Pm1fc2NyaXB0VHlwZSkgewpAQCAtMjg0LDYgKzI5Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9t
YXRpY2FsbHkod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsK
ICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNL
KHZpZXdDcmVhdGUpLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcs
ICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlciksIHRoaXMpOwog
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlwdC1hbGVydCIsIEdfQ0FM
TEJBQ0soc2NyaXB0QWxlcnQpLCB0aGlzKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dl
YlZpZXcsICJzY3JpcHQtY29uZmlybSIsIEdfQ0FMTEJBQ0soc2NyaXB0Q29uZmlybSksIHRoaXMp
OwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlwdC1wcm9tcHQiLCBH
X0NBTExCQUNLKHNjcmlwdFByb21wdCksIHRoaXMpOwpAQCAtMzEyLDEyICszMjEsMjAgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCk7CiAg
ICAgfQogCisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBtb3VzZUJ1dHRvbkNsaWNrQW5k
V2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdChpbnQgeCwgaW50IHkpCisgICAgeworICAgICAgICBt
b3VzZUJ1dHRvbkNsaWNrKHgsIHkpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7CisgICAgICAgIHJldHVybiBtX2ZpbGVDaG9vc2VyUmVxdWVzdC5nZXQoKTsKKyAgICB9CisK
ICAgICBWZWN0b3I8V2ViVmlld0V2ZW50cz4gbV93ZWJWaWV3RXZlbnRzOwogICAgIFNjcmlwdFR5
cGUgbV9zY3JpcHRUeXBlOwogICAgIGJvb2wgbV9zY3JpcHREaWFsb2dDb25maXJtZWQ7CiAgICAg
V2luZG93UHJvcGVydGllcyBtX3dpbmRvd1Byb3BlcnRpZXM7CiAgICAgSGFzaFNldDxXVEY6OlN0
cmluZz4gbV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZDsKICAgICBHUmVmUHRyPFdlYktpdEhpdFRl
c3RSZXN1bHQ+IG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0OworICAgIEdSZWZQdHI8V2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0PiBtX2ZpbGVDaG9vc2VyUmVxdWVzdDsKICAgICB1bnNpZ25lZCBp
bnQgbV9tb3VzZVRhcmdldE1vZGlmaWVyczsKIH07CiAKQEAgLTMzMyw2ICszNTAsODggQEAgc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKFVJQ2xpZW50VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGll
bnRUZXN0OjpDbG9zZSk7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9yRmls
dGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQoreworICAg
IEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlckluZm87CisgICAgZmlsdGVySW5mby5jb250YWlucyA9
IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7CisgICAgZmlsdGVySW5mby5taW1lX3R5cGUgPSBt
aW1lVHlwZTsKKyAgICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0
ZXJJbmZvKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3Qo
VUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldp
bmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmaWxlQ2hv
b3NlckhUTUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+PC9i
b2R5PjwvaHRtbD4iOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwg
bm8gTUlNRSBmaWx0ZXJpbmcuCisgICAgR093blB0cjxjaGFyPiBzaW1wbGVGaWxlVXBsb2FkSFRN
TChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiIikpOworICAgIHRlc3Qt
PmxvYWRIdG1sKHNpbXBsZUZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIGZpbGVD
aG9vc2VyUmVxdWVzdCA9IHRlc3QtPm1vdXNlQnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNob29z
ZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbihmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAg
IGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1p
bWVUeXBlcyk7CisgICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAg
IGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxl
cyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNo
b29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisgICAgd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOworCisgICAg
Ly8gTXVsdGlwbGUgc2VsZWN0aW9ucyBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZywgc29tZSBw
cmUtc2VsZWN0ZWQgZmlsZXMuCisgICAgR093blB0cjxjaGFyPiBtdWx0aXBsZVNlbGVjdGlvbkZp
bGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJtdWx0
aXBsZSIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRI
VE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBm
aWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5tb3VzZUJ1dHRvbkNsaWNrQW5kV2FpdEZvckZpbGVD
aG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbihmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKwor
ICAgIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
cyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIGZp
bHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIo
ZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBzZWxlY3Rl
ZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhm
aWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKworICAg
IC8vIFNlbGVjdCBzb21lIGZpbGVzLgorICAgIGNvbnN0IGdjaGFyKiBmaWxlc1RvU2VsZWN0WzRd
ID0geyAiL2ZvbyIsICIvZm9vL2JhciIsICIvZm9vL2Jhci9iYXoiLCAwIH07CisgICAgd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29zZV9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QsIGZp
bGVzVG9TZWxlY3QpOworCisgICAgLy8gUGVyZm9ybSBhbm90aGVyIHJlcXVlc3QgdG8gY2hlY2sg
aWYgdGhlIGxpc3Qgb2YgZmlsZXMgc2VsZWN0ZWQKKyAgICAvLyBpbiB0aGUgcHJldmlvdXMgc3Rl
cCBhcHBlYXJzIG5vdyBhcyBwYXJ0IG9mIHRoZSBuZXcgcmVxdWVzdC4KKyAgICBmaWxlQ2hvb3Nl
clJlcXVlc3QgPSB0ZXN0LT5tb3VzZUJ1dHRvbkNsaWNrQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVx
dWVzdCg1LCA1KTsKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0
KHNlbGVjdGVkRmlsZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9
PSwgIi9mb28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIv
Zm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9m
b28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKKyAgICB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisKKyAg
ICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBvbmx5IGFjY2VwdCBpbWFnZXMs
IGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4uCisgICAgR093blB0cjxjaGFyPiBtaW1lRmlsdGVyZWRG
aWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiYWNj
ZXB0PSdhdWRpby8qLHZpZGVvLyosaW1hZ2UvKiciKSk7CisgICAgdGVzdC0+bG9hZEh0bWwobWlt
ZUZpbHRlcmVkRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPm1vdXNlQnV0dG9u
Q2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbihmaWxl
Q2hvb3NlclJlcXVlc3QpKTsKKworICAgIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0
KG1pbWVUeXBlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1swXSwgPT0sICJhdWRp
by8qIik7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1sxXSwgPT0sICJ2aWRlby8qIik7
CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1syXSwgPT0sICJpbWFnZS8qIik7CisgICAg
Z19hc3NlcnQoIW1pbWVUeXBlc1szXSk7CisKKyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7Cisg
ICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklMVEVSKGZpbHRlcikpOworICAgIGdfYXNzZXJ0KGNo
ZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiYXVkaW8vKiIpKTsKKyAgICBnX2Fzc2VydChj
aGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgInZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQo
Y2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJpbWFnZS8qIikpOworCisgICAgc2VsZWN0
ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMo
ZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisgICAg
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOwor
fQorCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKFVJQ2xpZW50VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciogaHRtbE9u
TG9hZEZvcm1hdCA9ICI8aHRtbD48Ym9keSBvbkxvYWQ9XCIlc1wiPjwvYm9keT48L2h0bWw+IjsK
QEAgLTQ1Niw2ICs1NTUsNyBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgV2ViVmlld1Rlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJzZXR0aW5ncyIsIHRlc3RXZWJWaWV3U2V0dGluZ3MpOwogICAg
IFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicmVwbGFjZS1jb250ZW50IiwgdGVz
dFdlYlZpZXdSZXBsYWNlQ29udGVudCk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAiY3JlYXRlLXJlYWR5LWNsb3NlIiwgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3Nl
KTsKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmaWxlLWNob29zZXIt
cmVxdWVzdCIsIHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KTsKICAgICBVSUNsaWVudFRl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJqYXZhc2NyaXB0LWRpYWxvZ3MiLCB0ZXN0V2ViVmll
d0phdmFTY3JpcHREaWFsb2dzKTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJ3aW5kb3ctcHJvcGVydGllcyIsIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGllcyk7CiAg
ICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibW91c2UtdGFyZ2V0IiwgdGVz
dFdlYlZpZXdNb3VzZVRhcmdldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKaW5kZXggMDBkM2IzZS4uMjljNTNlMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YlZpZXdUZXN0LmNwcApAQCAtMTgwLDMgKzE4MCwzNCBAQCB2b2lkIFdlYlZpZXdUZXN0Ojptb3Vz
ZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKICAgICBn
dGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7CiB9CiAKK3ZvaWQgV2ViVmlld1Rlc3Q6Om1v
dXNlQnV0dG9uQ2xpY2soaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25l
ZCBpbnQgbW91c2VNb2RpZmllcnMpCit7CisgICAgbW91c2VCdXR0b25FdmVudChHREtfQlVUVE9O
X1BSRVNTLCB4LCB5LCBidXR0b24sIG1vdXNlTW9kaWZpZXJzKTsKKyAgICBtb3VzZUJ1dHRvbkV2
ZW50KEdES19CVVRUT05fUkVMRUFTRSwgeCwgeSwgYnV0dG9uLCBtb3VzZU1vZGlmaWVycyk7Cit9
CisKK3ZvaWQgV2ViVmlld1Rlc3Q6Om1vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlIGV2ZW50
VHlwZSwgaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91
c2VNb2RpZmllcnMpCit7CisgICAgZ19hc3NlcnQobV9wYXJlbnRXaW5kb3cpOworICAgIEd0a1dp
ZGdldCogdmlld1dpZGdldCA9IEdUS19XSURHRVQobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChn
dGtfd2lkZ2V0X2dldF9yZWFsaXplZCh2aWV3V2lkZ2V0KSk7CisKKyAgICBHT3duUHRyPEdka0V2
ZW50PiBldmVudChnZGtfZXZlbnRfbmV3KGV2ZW50VHlwZSkpOworICAgIGV2ZW50LT5idXR0b24u
d2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHZpZXdXaWRnZXQpOworICAgIGdfb2JqZWN0
X3JlZihldmVudC0+YnV0dG9uLndpbmRvdyk7CisKKyAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBH
REtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50LT5idXR0b24ueCA9IHg7CisgICAgZXZlbnQtPmJ1
dHRvbi55ID0geTsKKyAgICBldmVudC0+YnV0dG9uLmF4ZXMgPSAwOworICAgIGV2ZW50LT5idXR0
b24uc3RhdGUgPSBtb3VzZU1vZGlmaWVyczsKKyAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1
dHRvbjsKKworICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dl
dF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdl
dF9nZXRfZGlzcGxheSh2aWV3V2lkZ2V0KSkpOworCisgICAgaW50IHhSb290LCB5Um9vdDsKKyAg
ICBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dp
ZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290KTsKKyAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9
IHhSb290OworICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0geVJvb3Q7CisgICAgZ3RrX21haW5f
ZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKaW5kZXggOTVhNTY5Yy4uN2Q5MjRiYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJW
aWV3VGVzdC5oCkBAIC00NSwxMSArNDUsMTUgQEAgcHVibGljOgogICAgIHZvaWQgc2hvd0luV2lu
ZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CiAKICAgICB2b2lkIG1vdXNlTW92ZVRvKGludCB4LCBp
bnQgeSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCk7CisgICAgdm9pZCBtb3VzZUJ1
dHRvbkNsaWNrKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiA9IDEsIHVuc2lnbmVk
IGludCBtb3VzZU1vZGlmaWVycyA9IDApOwogCiAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3
OwogICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKICAgICBDU3RyaW5nIG1fYWN0aXZlVVJJOwog
ICAgIEd0a1dpZGdldCogbV9wYXJlbnRXaW5kb3c7CisKK3ByaXZhdGU6CisgICAgdm9pZCBtb3Vz
ZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlwZSwgaW50LCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWdu
ZWQgaW50KTsKIH07CiAKICNlbmRpZiAvLyBXZWJWaWV3VGVzdF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXggM2FmOTkwNC4uZGUwMzA5OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAtMzAsMTMgKzMwLDE0
IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFZGl0aW5nQ29tbWFuZHMuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RXJy
b3IuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0VGVzdFJlc3VsdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRXZWJDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFz
ZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlldy5oPgorI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdpbmRvd1By
b3BlcnRpZXMuaD4KIAogI3VuZGVmIF9fV0VCS0lUMl9IX0lOU0lERV9fCi0tIAoxLjcuNy41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127815</attachid>
            <date>2012-02-20 05:58:44 -0800</date>
            <delta_ts>2012-02-20 16:56:14 -0800</delta_ts>
            <desc>Patch Proposal + Unit Tests + Docs</desc>
            <filename>0001-2012-02-20-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>59380</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBkMTA1NDI1ZjNlMjhhNWJjMDM4YTY3YjU3OGJhMDVmMjFkZTNkNzQzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDEwIEZlYiAyMDEyIDEyOjEzOjU5ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wMi0yMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5QYW5lbCBpbiBX
ZWJLaXQyR1RLKwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODQ5MQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgQWRk
IGEgbmV3IHB1YmxpYyBjbGFzcyB0byB0aGUgQVBJLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qs
IHRvIGJlCiAgICAgICAgZW1pdHRlZCBhbG9uZyB3aXRoIGEgbmV3IFdlYktpdFdlYlZpZXc6OnJ1
bi1maWxlLWNob29zZXIgc2lnbmFsIHRvCiAgICAgICAgbGV0IGNsaWVudCBhcHBsaWNhdGlvbnMg
dG8gcHJvdmlkZSB0aGVpciBvd24gZmlsZSBjaG9vc2VyIGRpYWxvZwogICAgICAgIHdoZW4gdGhl
IHVzZSBpbnRlcmFjdHMgd2l0aCBIVE1MIElucHV0IGVsZW1lbnRzIG9mIHR5cGUgJ2ZpbGUnLgoK
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGRlZCBuZXcgc291cmNlIGZpbGVzIGFuZCBoZWFk
ZXJzLgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
LmNwcDogQWRkZWQuCiAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKToK
ICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2luaXQpOgogICAgICAgICh3ZWJr
aXRGaWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZSk6CiAgICAgICAgKHdlYmtpdEZpbGVDaG9vc2Vy
UmVxdWVzdEdldFByb3BlcnR5KToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2NsYXNzX2luaXQpOgogICAgICAgICh3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUpOgog
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVj
dGlvbik6CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
cyk6CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19m
aWx0ZXIpOgogICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX2ZpbGVz
KToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxl
cyk6CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwpOgogICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg6IEFkZGVkLgog
ICAgICAgIChfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KToKICAgICAgICAoX1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdENsYXNzKToKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaDogQWRkZWQsCiAgICAgICAgY29udGFpbmluZyB0aGUg
cHJvdG90eXBlIG9mIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdENyZWF0ZS4KCiAgICAgICAgUHJv
dmlkZSBwcml2YXRlIEFQSSB0byBtYWtlIGEgZmlsZSBjaG9vc2VyIHJlcXVlc3QgZnJvbSB0aGUK
ICAgICAgICBXZWJWaWV3LCBhbmQgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlciBmb3IgaXQuCgog
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CiAgICAgICAgKGZp
bGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayk6IEhhbmRsZXIgZm9yIHRoZSAncmVzcG9u
c2UnCiAgICAgICAgc2lnbmFsIGZvciB0aGUgR3RrRmlsZUNob29zZXJEaWFsb2cgdXNlZCBpbiB0
aGUgZGVmYXVsdAogICAgICAgIGhhbmRsZXIuIEl0IHdpbGwgY2FsbCB0byB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfY2hvb3NlX2ZpbGVzCiAgICAgICAgb3Igd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2NhbmNlbCBhcyBuZWVkZWQuCiAgICAgICAgKHdlYmtpdFdlYlZpZXdSdW5GaWxl
Q2hvb3Nlcik6IERlZmF1bHQgaGFuZGxlciBmb3IgdGhlIG5ldwogICAgICAgICdydW4tZmlsZS1j
aG9vc2VyJyBzaWduYWwuIEl0IHdpbGwgY3JlYXRlIGEgR3RrRmlsZUNob29zZXJEaWFsb2csCiAg
ICAgICAgY29ubmVjdCB0byB0aGUgJ3Jlc3BvbnNlJyBzaWduYWwgYW5kIHNob3cgaXQuCiAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KTogQ29ubmVjdCB0aGUgJ3J1bi1maWxlLWNo
b29zZXInCiAgICAgICAgc2lnbmFsIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIsIHdlYmtpdFdlYlZp
ZXdSdW5GaWxlQ2hvb3Nlci4KICAgICAgICAod2Via2l0V2ViVmlld01ha2VGaWxlQ2hvb3NlclJl
cXVlc3QpOgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgogICAg
ICAgIChfV2ViS2l0V2ViVmlld0NsYXNzKTogQWRkZWQgcHJvdG90eXBlIGZvciB0aGUgaGFuZGxl
ciBvZiB0aGUgbmV3CiAgICAgICAgJ3J1bi1maWxlLWNob29zZXInIHNpZ25hbC4KICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6IEFkZGVkIHByb3RvdHlw
ZSBmb3IKICAgICAgICBwcml2YXRlIG5ldyBmdW5jdGlvbiB3ZWJraXRXZWJWaWV3TWFrZUZpbGVD
aG9vc2VyUmVxdWVzdC4KCiAgICAgICAgUHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcnVu
T3BlblBhbmVsIGluIFdlYktpdFVJQ2xpZW50LgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFVJQ2xpZW50LmNwcDoKICAgICAgICAocnVuT3BlblBhbmVsKTogTmV3LCBpbXBsZW1l
bnRzIHJ1bk9wZW5QYW5lbCBieSBjcmVhdGluZyBhbgogICAgICAgIGluc3RhbmNlIG9mIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCBhbmQgYXNraW5nIHRoZSBXZWJWaWV3IHRvCiAgICAgICAgZW1p
dCB0aGUgJ3J1bi1maWxlLWNob29zZXInIHNpZ25hbCB3aXRoIGl0LgogICAgICAgIChhdHRhY2hV
SUNsaWVudFRvVmlldyk6IFJlZmVyZW5jZSB0aGUgbmV3IHJ1bk9wZW5QYW5lbCBmdW5jdGlvbi4K
CiAgICAgICAgQWRkZWQgdGhlIG5ldyBwdWJsaWNoIGhlYWRlciB0byB0aGUgbWFpbiBoZWFkZXIu
CgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOiBBZGRlZCBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QuaC4KCiAgICAgICAgTmV3IHVuaXQgdGVzdHMgZm9yIHRoZSBuZXcgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0IEFQSS4gQWxzbywKICAgICAgICBleHRlbmRlZCB0aGUgV2Vi
Vmlld1Rlc3QgY2xhc3MgdG8gYWxsb3cgc2ltdWxhdGluZyBtb3VzZSBjbGlja3MuCgogICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgogICAgICAg
IChjaGVja01pbWVUeXBlRm9yRmlsdGVyKTogTmV3LCBjaGVja3Mgd2hldGhlciBhIEd0a0ZpbGVG
aWx0ZXIKICAgICAgICBmaWx0ZXJzIGEgZ2l2ZW4gTUlNRSB0eXBlLCBhcyBzcGVjaWZpZWQgYnkg
UkZDIDIwNDYuCiAgICAgICAgKHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KTogTmV3IHVu
aXQgdGVzdC4KICAgICAgICAoYmVmb3JlQWxsKTogQWRkIHRoZSBuZXcgdW5pdCB0ZXN0IGFzIGFu
IFVJQ2xpZW50VGVzdC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3
VGVzdC5jcHA6CiAgICAgICAgKFdlYlZpZXdUZXN0Ojptb3VzZUJ1dHRvbkNsaWNrKTogTmV3IHB1
YmxpYyBmdW5jdGlvbiB0byBzaW11bGF0ZSBhCiAgICAgICAgbW91c2UgY2xpY2sgdGhyb3VnaCBH
ZGtFdmVudHMsIGFzIHRoZSBjb21iaW5hdGlvbiBvZiBhICdwcmVzcycgYW5kCiAgICAgICAgYSAn
cmVsZWFzZScgZXZlbnQuIFVzZWQgZnJvbSB0aGUgbmV3IHVuaXQgdGVzdCB0byBzaW11bGF0ZSB0
aGUKICAgICAgICB1c2VyIHByZXNzaW5nIGluIHRoZSBidXR0b24gcmVuZGVyZWQgZm9yIGEgSFRN
TCBJbnB1dCBlbGVtZW50LgogICAgICAgIChXZWJWaWV3VGVzdDo6bW91c2VCdXR0b25FdmVudCk6
IE5ldyBwcml2YXRlIGZ1bmN0aW9uIHRvIHNpbXVsYXRlCiAgICAgICAgYSBtb3VzZSBldmVudCB0
aHJvdWdoIEdka0V2ZW50cy4KICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZp
ZXdUZXN0Lmg6CgogICAgICAgIFVwZGF0ZWQgZG9jdW1lbnRhdGlvbiByZWxhdGVkIGZpbGVzIHdp
dGggdGhlIG5ldyBBUEkuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLXNlY3Rpb25zLnR4dDogQWRkZWQgbmV3IEFQSS4KICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6IEFkZGVkIG5ldyBzZWN0aW9uLgogICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGRlZCBnZXRfdHlw
ZSBmdW5jdGlvbi4KCjIwMTItMDItMjAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBp
Z2FsaWEuY29tPgoKICAgICAgICBbR1RLXSBJbXBsZW1lbnQgV2ViVUlDbGllbnQncyBydW5PcGVu
UGFuZWwgaW4gV2ViS2l0MkdUSysKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzg0OTEKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgog
ICAgICAgIEhhbmRsZSB0aGUgR1NMaXN0IHR5cGUgaW4gR093blB0ciwgYnkgY2FsbGluZyBnX3B0
cl9hcnJheV9yZWYgYW5kCiAgICAgICAgZ19wdHJfYXJyYXlfdW5yZWYgaW4gdGhlIGltcGxlbWVu
dGF0aW9uIG9mIHRoZSByZWZHUHRyIGFuZCB0aGUKICAgICAgICBmcmVlT3duZWRHUHRyIHRlbXBs
YXRlIGZ1bmN0aW9ucy4KCiAgICAgICAgKiB3dGYvZ29iamVjdC9HUmVmUHRyLmNwcDoKICAgICAg
ICAoV1RGOjpyZWZHUHRyKToKICAgICAgICAoV1RGKToKICAgICAgICAoV1RGOjpkZXJlZkdQdHIp
OgogICAgICAgICogd3RmL2dvYmplY3QvR1JlZlB0ci5oOgogICAgICAgIChXVEYpOgogICAgICAg
ICogd3RmL2dvYmplY3QvR1R5cGVkZWZzLmg6Ci0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAgIDE5ICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZ29iamVjdC9HUmVmUHRyLmNwcCAgICAgIHwgICAxMyArCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2dvYmplY3QvR1JlZlB0ci5oICAgICAgICB8ICAgIDMgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZ29iamVjdC9HVHlwZWRlZnMuaCAgICAgIHwgICAgMSArCiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgODggKysrKysK
IFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAg
NCArCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcCB8
ICAzNTIgKysrKysrKysrKysrKysrKysrKysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QuaCAgIHwgICA3OCArKysrKwogLi4uL0FQSS9ndGsvV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oICAgICAgfCAgIDI4ICsrCiAuLi4vV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIHwgICA5MCArKysrKwogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oICAgfCAgICA5ICst
CiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCAgICAgICB8ICAg
IDEgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgICAg
fCAgICAxICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMu
dHh0IHwgICAyNCArKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBl
cyAgICAgICAgfCAgICAxICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViVmlldy5jcHAgIHwgIDEwMCArKysrKysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJWaWV3VGVzdC5jcHAgICAgICAgIHwgICAzMSArKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaCAgfCAgICA0ICsKIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCAgICAgICAgIHwgICAgMyArLQogMjAgZmlsZXMgY2hhbmdl
ZCwgODU1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5o
CgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggODFjZmVjYy4uN2E1OTNlMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTItMDItMjAgIE1hcmlvIFNhbmNo
ZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxlbWVu
dCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXQyR1RLKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg0OTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIYW5kbGUgdGhlIEdTTGlzdCB0eXBl
IGluIEdPd25QdHIsIGJ5IGNhbGxpbmcgZ19wdHJfYXJyYXlfcmVmIGFuZAorICAgICAgICBnX3B0
cl9hcnJheV91bnJlZiBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlZkdQdHIgYW5kIHRo
ZQorICAgICAgICBmcmVlT3duZWRHUHRyIHRlbXBsYXRlIGZ1bmN0aW9ucy4KKworICAgICAgICAq
IHd0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwOgorICAgICAgICAoV1RGOjpyZWZHUHRyKToKKyAgICAg
ICAgKFdURik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAgICogd3RmL2dvYmpl
Y3QvR1JlZlB0ci5oOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKiB3dGYvZ29iamVjdC9HVHlw
ZWRlZnMuaDoKKwogMjAxMi0wMi0xMyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGln
YWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIEdTTGlzdCB0byB0aGUgbGlzdCBvZiBHT2Jq
ZWN0IHR5cGVzIGluIEdPd25QdHIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZ29iamVjdC9HUmVmUHRyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVj
dC9HUmVmUHRyLmNwcAppbmRleCAxY2QyMmM1Li45OTg3OWEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwCkBAIC04MSw2ICs4MSwxOSBAQCB0ZW1w
bGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHU291cmNlKiBwdHIpCiAgICAgICAgIGdfc291cmNlX3Vu
cmVmKHB0cik7CiB9CiAKK3RlbXBsYXRlIDw+IEdQdHJBcnJheSogcmVmR1B0cihHUHRyQXJyYXkq
IHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX3B0cl9hcnJheV9yZWYocHRyKTsKKyAg
ICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHUHRyQXJyYXkq
IHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX3B0cl9hcnJheV91bnJlZihwdHIpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIEVOQUJMRShHTElCX1NVUFBPUlQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1JlZlB0ci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAppbmRleCAxMGVi
ZjA3Li44MjAzY2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmpl
Y3QvR1JlZlB0ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVm
UHRyLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpZiBFTkFCTEUoR0xJQl9TVVBQT1JUKQogCiAjaW5j
bHVkZSAiQWx3YXlzSW5saW5lLmgiCi0jaW5jbHVkZSAiR1JlZlB0ci5oIgogI2luY2x1ZGUgIlJl
ZlB0ci5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIApAQCAtMjA1LDYgKzIwNCw4IEBAIHRlbXBs
YXRlIDw+IEdWYXJpYW50KiByZWZHUHRyKEdWYXJpYW50KiBwdHIpOwogdGVtcGxhdGUgPD4gdm9p
ZCBkZXJlZkdQdHIoR1ZhcmlhbnQqIHB0cik7CiB0ZW1wbGF0ZSA8PiBHU291cmNlKiByZWZHUHRy
KEdTb3VyY2UqIHB0cik7CiB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHU291cmNlKiBwdHIp
OwordGVtcGxhdGUgPD4gR1B0ckFycmF5KiByZWZHUHRyKEdQdHJBcnJheSogcHRyKTsKK3RlbXBs
YXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdQdHJBcnJheSogcHRyKTsKIAogdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGlubGluZSBUKiByZWZHUHRyKFQqIHB0cikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HVHlwZWRlZnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZ29iamVjdC9HVHlwZWRlZnMuaAppbmRleCBjYjM4NDJiLi40NGFjZDMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCkBAIC01NCw2
ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0IF9HTGlzdCBHTGlzdDsKIHR5cGVkZWYgc3RydWN0IF9H
UGF0dGVyblNwZWMgR1BhdHRlcm5TcGVjOwogdHlwZWRlZiBzdHJ1Y3QgX0dQb2xsYWJsZU91dHB1
dFN0cmVhbSBHUG9sbGFibGVPdXRwdXRTdHJlYW07CiB0eXBlZGVmIHN0cnVjdCBfR1NMaXN0IEdT
TGlzdDsKK3R5cGVkZWYgc3RydWN0IF9HUHRyQXJyYXkgR1B0ckFycmF5OwogdHlwZWRlZiBzdHJ1
Y3QgX0dTb2NrZXRDbGllbnQgR1NvY2tldENsaWVudDsKIHR5cGVkZWYgc3RydWN0IF9HU29ja2V0
Q29ubmVjdGlvbiBHU29ja2V0Q29ubmVjdGlvbjsKIHR5cGVkZWYgc3RydWN0IF9HU291cmNlIEdT
b3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjU4MjIxNi4uMWRkMDk4YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDkxIEBACisyMDEyLTAyLTIwICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgV2ViVUlDbGllbnQncyBydW5PcGVu
UGFuZWwgaW4gV2ViS2l0MkdUSysKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc4NDkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGEgbmV3IHB1YmxpYyBjbGFzcyB0byB0aGUgQVBJLCBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QsIHRvIGJlCisgICAgICAgIGVtaXR0ZWQgYWxvbmcgd2l0aCBhIG5ldyBX
ZWJLaXRXZWJWaWV3OjpydW4tZmlsZS1jaG9vc2VyIHNpZ25hbCB0bworICAgICAgICBsZXQgY2xp
ZW50IGFwcGxpY2F0aW9ucyB0byBwcm92aWRlIHRoZWlyIG93biBmaWxlIGNob29zZXIgZGlhbG9n
CisgICAgICAgIHdoZW4gdGhlIHVzZSBpbnRlcmFjdHMgd2l0aCBIVE1MIElucHV0IGVsZW1lbnRz
IG9mIHR5cGUgJ2ZpbGUnLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIG5ldyBz
b3VyY2UgZmlsZXMgYW5kIGhlYWRlcnMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0UHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfaW5pdCk6CisgICAgICAgICh3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZSk6Cisg
ICAgICAgICh3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RHZXRQcm9wZXJ0eSk6CisgICAgICAgICh3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRG
aWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24pOgorICAgICAgICAod2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIpOgorICAgICAgICAod2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29zZV9maWxlcyk6CisgICAgICAgICh3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKToKKyAgICAgICAgKHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9jYW5jZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QpOgorICAgICAgICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2
YXRlLmg6IEFkZGVkLAorICAgICAgICBjb250YWluaW5nIHRoZSBwcm90b3R5cGUgb2Ygd2Via2l0
RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlLgorCisgICAgICAgIFByb3ZpZGUgcHJpdmF0ZSBBUEkg
dG8gbWFrZSBhIGZpbGUgY2hvb3NlciByZXF1ZXN0IGZyb20gdGhlCisgICAgICAgIFdlYlZpZXcs
IGFuZCBwcm92aWRlIGEgZGVmYXVsdCBoYW5kbGVyIGZvciBpdC4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAoZmlsZUNob29zZXJEaWFs
b2dSZXNwb25zZUNhbGxiYWNrKTogSGFuZGxlciBmb3IgdGhlICdyZXNwb25zZScKKyAgICAgICAg
c2lnbmFsIGZvciB0aGUgR3RrRmlsZUNob29zZXJEaWFsb2cgdXNlZCBpbiB0aGUgZGVmYXVsdAor
ICAgICAgICBoYW5kbGVyLiBJdCB3aWxsIGNhbGwgdG8gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2Nob29zZV9maWxlcworICAgICAgICBvciB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Y2FuY2VsIGFzIG5lZWRlZC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nlcik6
IERlZmF1bHQgaGFuZGxlciBmb3IgdGhlIG5ldworICAgICAgICAncnVuLWZpbGUtY2hvb3Nlcicg
c2lnbmFsLiBJdCB3aWxsIGNyZWF0ZSBhIEd0a0ZpbGVDaG9vc2VyRGlhbG9nLAorICAgICAgICBj
b25uZWN0IHRvIHRoZSAncmVzcG9uc2UnIHNpZ25hbCBhbmQgc2hvdyBpdC4KKyAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19jbGFzc19pbml0KTogQ29ubmVjdCB0aGUgJ3J1bi1maWxlLWNob29zZXIn
CisgICAgICAgIHNpZ25hbCB0byB0aGUgZGVmYXVsdCBoYW5kbGVyLCB3ZWJraXRXZWJWaWV3UnVu
RmlsZUNob29zZXIuCisgICAgICAgICh3ZWJraXRXZWJWaWV3TWFrZUZpbGVDaG9vc2VyUmVxdWVz
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAg
ICAoX1dlYktpdFdlYlZpZXdDbGFzcyk6IEFkZGVkIHByb3RvdHlwZSBmb3IgdGhlIGhhbmRsZXIg
b2YgdGhlIG5ldworICAgICAgICAncnVuLWZpbGUtY2hvb3Nlcicgc2lnbmFsLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6IEFkZGVkIHByb3RvdHlw
ZSBmb3IKKyAgICAgICAgcHJpdmF0ZSBuZXcgZnVuY3Rpb24gd2Via2l0V2ViVmlld01ha2VGaWxl
Q2hvb3NlclJlcXVlc3QuCisKKyAgICAgICAgUHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBmb3Ig
cnVuT3BlblBhbmVsIGluIFdlYktpdFVJQ2xpZW50LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwOgorICAgICAgICAocnVuT3BlblBhbmVsKTogTmV3LCBp
bXBsZW1lbnRzIHJ1bk9wZW5QYW5lbCBieSBjcmVhdGluZyBhbgorICAgICAgICBpbnN0YW5jZSBv
ZiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgYW5kIGFza2luZyB0aGUgV2ViVmlldyB0bworICAg
ICAgICBlbWl0IHRoZSAncnVuLWZpbGUtY2hvb3Nlcicgc2lnbmFsIHdpdGggaXQuCisgICAgICAg
IChhdHRhY2hVSUNsaWVudFRvVmlldyk6IFJlZmVyZW5jZSB0aGUgbmV3IHJ1bk9wZW5QYW5lbCBm
dW5jdGlvbi4KKworICAgICAgICBBZGRlZCB0aGUgbmV3IHB1YmxpY2ggaGVhZGVyIHRvIHRoZSBt
YWluIGhlYWRlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogQWRk
ZWQgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmguCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMg
Zm9yIHRoZSBuZXcgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IEFQSS4gQWxzbywKKyAgICAgICAg
ZXh0ZW5kZWQgdGhlIFdlYlZpZXdUZXN0IGNsYXNzIHRvIGFsbG93IHNpbXVsYXRpbmcgbW91c2Ug
Y2xpY2tzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdl
YlZpZXcuY3BwOgorICAgICAgICAoY2hlY2tNaW1lVHlwZUZvckZpbHRlcik6IE5ldywgY2hlY2tz
IHdoZXRoZXIgYSBHdGtGaWxlRmlsdGVyCisgICAgICAgIGZpbHRlcnMgYSBnaXZlbiBNSU1FIHR5
cGUsIGFzIHNwZWNpZmllZCBieSBSRkMgMjA0Ni4KKyAgICAgICAgKHRlc3RXZWJWaWV3RmlsZUNo
b29zZXJSZXF1ZXN0KTogTmV3IHVuaXQgdGVzdC4KKyAgICAgICAgKGJlZm9yZUFsbCk6IEFkZCB0
aGUgbmV3IHVuaXQgdGVzdCBhcyBhbiBVSUNsaWVudFRlc3QuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHA6CisgICAgICAgIChXZWJWaWV3VGVzdDo6
bW91c2VCdXR0b25DbGljayk6IE5ldyBwdWJsaWMgZnVuY3Rpb24gdG8gc2ltdWxhdGUgYQorICAg
ICAgICBtb3VzZSBjbGljayB0aHJvdWdoIEdka0V2ZW50cywgYXMgdGhlIGNvbWJpbmF0aW9uIG9m
IGEgJ3ByZXNzJyBhbmQKKyAgICAgICAgYSAncmVsZWFzZScgZXZlbnQuIFVzZWQgZnJvbSB0aGUg
bmV3IHVuaXQgdGVzdCB0byBzaW11bGF0ZSB0aGUKKyAgICAgICAgdXNlciBwcmVzc2luZyBpbiB0
aGUgYnV0dG9uIHJlbmRlcmVkIGZvciBhIEhUTUwgSW5wdXQgZWxlbWVudC4KKyAgICAgICAgKFdl
YlZpZXdUZXN0Ojptb3VzZUJ1dHRvbkV2ZW50KTogTmV3IHByaXZhdGUgZnVuY3Rpb24gdG8gc2lt
dWxhdGUKKyAgICAgICAgYSBtb3VzZSBldmVudCB0aHJvdWdoIEdka0V2ZW50cy4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oOgorCisgICAgICAgIFVwZGF0
ZWQgZG9jdW1lbnRhdGlvbiByZWxhdGVkIGZpbGVzIHdpdGggdGhlIG5ldyBBUEkuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0OiBBZGRl
ZCBuZXcgQVBJLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1k
b2NzLnNnbWw6IEFkZGVkIG5ldyBzZWN0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay50eXBlczogQWRkZWQgZ2V0X3R5cGUgZnVuY3Rpb24uCisKIDIwMTIt
MDItMDYgIFJhcGhhZWwgS3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CiAKICAg
ICAgICAgW0VGTF0gRHJvcCBzdXBwb3J0IGZvciB0aGUgQ3VybCBuZXR3b3JrIGJhY2tlbmQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmFtCmluZGV4IDNiOGU3YmQuLmNkM2E2YzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
LmFtCkBAIC05MCw2ICs5MCw3IEBAIGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJ
JChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuaCBcCiAJJChXZWJLaXQyKS9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCBcCisJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCBcCiAJ
JChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oIFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24u
aCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKQEAg
LTU0OCw2ICs1NDksOSBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJ
T05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAgXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbi5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZp
Z2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgXAorCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIFwKKwlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRl
LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lz
aW9uLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5
RGVjaXNpb24uaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9s
aWN5RGVjaXNpb25Qcml2YXRlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczZDUxMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5j
cHAKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dC5oIgorCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYk9wZW5QYW5lbFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVT
eXN0ZW0uaD4KKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0CisgKiBAU2hvcnRfZGVzY3JpcHRpb246IEEgcmVxdWVzdCB0byBvcGVuIGEgZmlsZSBj
aG9vc2VyCisgKiBAVGl0bGU6IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICogQFNlZV9hbHNv
OiAjV2ViS2l0V2ViVmlldworICoKKyAqIFdoZW5ldmVyIHRoZSB1c2VyIGludGVyYWN0cyB3aXRo
IGEgJmx0O2lucHV0IHR5cGU9J2ZpbGUnIC8mZ3Q7IEhUTUwKKyAqIGVsZW1lbnQsIFdlYktpdCB3
aWxsIG5lZWQgdG8gc2hvdyBhIGRpYWxvZyB0byBjaG9vc2Ugb25lIG9yIG1vcmUKKyAqIGZpbGVz
IHRvIGJlIHVwbG9hZGVkIHRvIHRoZSBzZXJ2ZXIgYWxvbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUg
Zm9ybQorICogZGF0YS4gRm9yIHRoYXQgdG8gaGFwcGVuIGluIGEgZ2VuZXJhbCB3YXksIGluc3Rl
YWQgb2YganVzdCBvcGVuaW5nCisgKiBhICNHdGtGaWxlQ2hvb3NlckRpYWxvZyAod2hpY2ggbWln
aHQgYmUgbm90IGRlc2lyYWJsZSBpbiBzb21lCisgKiBzcGVjaWZpYyBwbGF0Zm9ybXMsIHdoaWNo
IGNvdWxkIHByZWZlciB0byB1c2UgdGhlaXIgb3duIGZpbGUKKyAqIGNob29zZXIgZGlhbG9nKSwg
V2ViS2l0IHdpbGwgZmlyZSB0aGUKKyAqICNXZWJLaXRXZWJWaWV3OjpydW4tZmlsZS1jaG9vc2Vy
IHNpZ25hbCB3aXRoIGEKKyAqICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qgb2JqZWN0LCB3aGlj
aCB3aWxsIGFsbG93IHRoZSBjbGllbnQKKyAqIGFwcGxpY2F0aW9uIHRvIHNwZWNpZnkgdGhlIGZp
bGVzIHRvIGJlIHNlbGVjdGVkLCB0byBpbnNwZWN0IHRoZQorICogZGV0YWlscyBmcm9tIHRoZSBy
ZXF1ZXN0IChlLmcuIGlmIG11bHRpcGxlIHNlbGVjdGlvbiBzaG91bGQgYmUKKyAqIGFsbG93ZWQp
IGFuZCB0byBjYW5jZWwgdGhlIHJlcXVlc3QsIGluIGNhc2Ugbm90aGluZyB3YXMgZmluYWxseQor
ICogYmVpbmcgc2VsZWN0ZWQuCisgKgorICogSW4gY2FzZSB0aGUgY2xpZW50IGFwcGxpY2F0aW9u
IGRvIG5vdCB3aXNoIHRvIGhhbmRsZSB0aGlzIHNpZ25hbCwKKyAqIFdlYktpdCB3aWxsIHByb3Zp
ZGUgYSBkZWZhdWx0IGhhbmRsZXIgd2hpY2ggd2lsbCBhc3luY2hyb25vdXNseSBydW4KKyAqIGEg
cmVndWxhciAjR3RrRmlsZUNob29zZXJEaWFsb2cgZm9yIHRoZSB1c2VyIHRvIGludGVyYWN0IHdp
dGguCisgKi8KK0dfREVGSU5FX1RZUEUoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LCB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBfV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tPcGVuUGFuZWxQYXJh
bWV0ZXJzUmVmPiB3a1BhcmFtZXRlcnM7CisgICAgV0tSZXRhaW5QdHI8V0tPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lclJlZj4gd2tMaXN0ZW5lcjsKKyAgICBHUmVmUHRyPEd0a0ZpbGVGaWx0ZXI+IGZp
bHRlcjsKKyAgICBHUmVmUHRyPEdQdHJBcnJheT4gbWltZVR5cGVzOworICAgIEdSZWZQdHI8R1B0
ckFycmF5PiBzZWxlY3RlZEZpbGVzOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7Cit9OworCitl
bnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9BTExPV1NfTVVMVElQTEVfU0VMRUNUSU9OLAor
ICAgIFBST1BfRklMVEVSLAorICAgIFBST1BfTUlNRV9UWVBFUywKKyAgICBQUk9QX1NFTEVDVEVE
X0ZJTEVTLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2lu
aXQoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIHJlcXVlc3QtPnBy
aXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUocmVxdWVzdCwgV0VCS0lUX1RZUEVfRklM
RV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpOworICAg
IG5ldyAocmVxdWVzdC0+cHJpdikgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSgpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZShHT2JqZWN0
KiBvYmplY3QpCit7CisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VC
S0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKG9iamVjdCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhl
IHJlcXVlc3QgaXMgYWx3YXlzIGhhbmRsZWQgYmVmb3JlIGZpbmFsaXppbmcuCisgICAgaWYgKCFy
ZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCkKKyAgICAgICAgd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KTsKKworICAgIHJlcXVlc3QtPnByaXYtPn5XZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdEdldFByb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNw
ZWMpCit7CisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJ
TEVfQ0hPT1NFUl9SRVFVRVNUKG9iamVjdCk7CisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBj
YXNlIFBST1BfQUxMT1dTX01VTFRJUExFX1NFTEVDVElPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBs
ZV9zZWxlY3Rpb24ocmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRklM
VEVSOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTUlNRV9UWVBFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQo
dmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRF9GSUxFUzoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm94ZWQodmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
SWQsIHBhcmFtU3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZTsKKyAgICBvYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0R2V0UHJvcGVydHk7Cisg
ICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHJlcXVlc3RDbGFzcywgc2l6ZW9mKFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdDphbGxvd3MtbXVsdGlwbGUtc2VsZWN0aW9uOgorICAgICAqCisgICAgICog
V2hldGhlciB0aGUgZmlsZSBjaG9vc2VyIHNob3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUK
KyAgICAgKiBmaWxlcy4gU2VlCisgICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Fs
bG93c19tdWx0aXBsZV9zZWxlY3Rpb24oKSBmb3IKKyAgICAgKiBtb3JlIGRldGFpbHMuCisgICAg
ICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQUxMT1dTX01VTFRJUExFX1NF
TEVDVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3Bl
Y19ib29sZWFuKCJhbGxvd3MtbXVsdGlwbGUtc2VsZWN0aW9uIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJBbGxvd3MgbXVsdGlwbGUg
ZmlsZSBzZWxlY3Rpb24iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJXaGV0aGVyIHRoZSBmaWxlIGNob29zZXIgc2hvdWxkIGFsbG93
IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpmaWx0ZXI6CisgICAg
ICoKKyAgICAgKiBUaGUgZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVl
c3QuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
c19maWx0ZXIoKSBmb3IgbW9yZQorICAgICAqIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgiZmlsdGVyIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1JTUUgdHlwZXMgZmls
dGVyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJUaGUgZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3Qi
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19UWVBFX0ZJTEVfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisg
ICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Om1pbWUtdHlwZXM6CisgICAgICoKKyAgICAg
KiBBIE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGxpc3Qg
b2YKKyAgICAgKiAibWVkaWEgdHlwZXMiIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHNob3VsZCBo
YW5kbGUuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90
eXBlcygpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfTUlNRV9UWVBFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19ib3hlZCgibWltZS10eXBlcyIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJNSU1FIHR5cGVzIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUg
bGlzdCBvZiBNSU1FIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NU
UlYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3Q6c2VsZWN0ZWQtZmlsZXM6CisgICAgICoKKyAgICAgKiBBIE5VTEwtdGVybWlu
YXRlZCBhcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YKKyAgICAgKiBzZWxl
Y3RlZCBmaWxlcyBjdXJyZW50bHkgYXNzb2NpYXRlZCB0byB0aGUgcmVxdWVzdC4gU2VlCisgICAg
ICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcygpIGZvciBt
b3JlIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1Bf
U0VMRUNURURfRklMRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfYm94ZWQoInNlbGVjdGVkLWZpbGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlNlbGVjdGVkIGZpbGVzIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUg
bGlzdCBvZiBzZWxlY3RlZCBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQ
RV9TVFJWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Cit9CisKK1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKFdLT3BlblBhbmVsUGFyYW1ldGVy
c1JlZiB3a1BhcmFtZXRlcnMsIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYgd2tMaXN0ZW5l
cikKK3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklM
RV9DSE9PU0VSX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9S
RVFVRVNULCBOVUxMKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+d2tQYXJhbWV0ZXJzID0gd2tQYXJh
bWV0ZXJzOworICAgIHJlcXVlc3QtPnByaXYtPndrTGlzdGVuZXIgPSB3a0xpc3RlbmVyOworICAg
IHJldHVybiByZXF1ZXN0OworfQorCisvKioKKyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdAorICoKKyAqIERldGVybWluZSB3aGV0aGVyIHRoZSBmaWxlIGNob29zZXIg
YXNzb2NpYXRlZCB0byB0aGlzCisgKiAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHNob3VsZCBh
bGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMsCisgKiB3aGljaCBkZXBlbmRzIG9uIHRoZSBI
VE1MIElucHV0IGVsZW1lbnQgaGF2aW5nIGEgJ211bHRpcGxlJworICogYXR0cmlidXRlIGRlZmlu
ZWQuCisgKgorICogUmV0dXJuczogI1RSVUUgaWYgdGhlIGZpbGUgY2hvb3NlciBzaG91bGQgYWxs
b3cgc2VsZWN0aW5nIG11bHRpcGxlIGZpbGVzIG9yICNGQUxTRSBvdGhlcndpc2UuCisgKi8KK2di
b29sZWFuIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0
aW9uKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIEZBTFNF
KTsKKyAgICByZXR1cm4gV0tPcGVuUGFuZWxQYXJhbWV0ZXJzR2V0QWxsb3dzTXVsdGlwbGVGaWxl
cyhyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpOworfQorCisvKioKKyAqIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlczoKKyAqIEByZXF1ZXN0OiBhICNX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGxpc3Qgb2YgIm1lZGlhIHR5
cGVzIiB0aGUgZmlsZSBjaG9vc2VyIGRpYWxvZyBzaG91bGQKKyAqIGhhbmRsZSwgaW4gdGhlIGZv
cm1hdCBzcGVjaWZpZWQgaW4gUkZDIDIwNDYuIEl0cyBjb250ZW50cyBkZXBlbmQgb24KKyAqIHRo
ZSB2YWx1ZSBvZiB0aGUgJ2FjY2VwdCcgYXR0cmlidXRlIGZvciBIVE1MIElucHV0IGVsZW1lbnRz
LgorICoKKyAqIFJldHVybnM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVyIG5v
bmUpOiBhCisgKiBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBpZiBhIGxpc3Qgb2Yg
YWNjZXB0ZWQgTUlNRSB0eXBlcworICogaXMgZGVmaW5lZCBvciBOVUxMIG90aGVyd2lzZS4gVGhp
cyBhcnJheSBhbmQgaXRzIGNvbnRlbnRzIGFyZSBvd25lZAorICogYnkgV2ViS2l0R1RLKyBhbmQg
c2hvdWxkIG5vdCBiZSBtb2RpZmllZCBvciBmcmVlZC4KKyAqLworY29uc3QgZ2NoYXIqIGNvbnN0
KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisgICAgaWYgKHJlcXVlc3Qt
PnByaXYtPm1pbWVUeXBlcykKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIq
Kj4ocmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzLT5wZGF0YSk7CisKKyAgICBXS1JldGFpblB0cjxX
S0FycmF5UmVmPiB3a01pbWVUeXBlcyhBZG9wdFdLLCBXS09wZW5QYW5lbFBhcmFtZXRlcnNDb3B5
QWNjZXB0ZWRNSU1FVHlwZXMocmVxdWVzdC0+cHJpdi0+d2tQYXJhbWV0ZXJzLmdldCgpKSk7Cisg
ICAgc2l6ZV90IG51bU9mTWltZVR5cGVzID0gV0tBcnJheUdldFNpemUod2tNaW1lVHlwZXMuZ2V0
KCkpOworICAgIGlmICghbnVtT2ZNaW1lVHlwZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld19mdWxs
KG51bU9mTWltZVR5cGVzICsgMSwgZ19mcmVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1PZk1pbWVUeXBlczsgKytpKSB7CisgICAgICAgIFdLU3RyaW5nUmVmIHdrTWltZVR5cGUg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTWltZVR5
cGVzLmdldCgpLCBpKSk7CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5t
aW1lVHlwZXMuZ2V0KCksIGdfc3RyZHVwKHRvSW1wbCh3a01pbWVUeXBlKS0+c3RyaW5nKCkudXRm
OCgpLmRhdGEoKSkpOworICAgIH0KKyAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+
bWltZVR5cGVzLmdldCgpLCAwKTsKKworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFy
Kio+KHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlcy0+cGRhdGEpOworfQorCisvKioKKyAqIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXI6CisgKiBAcmVxdWVz
dDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogR2V0IHRoZSBmaWx0ZXIgY3Vy
cmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCwgYWxyZWFkeSBzZXQKKyAqIHVwIHdp
dGggdGhlIGxpc3Qgb2YgbWVkaWEgdHlwZXMgYXMgcmV0dXJuZWQgYnkKKyAqIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IGEgI0d0a0ZpbGVGaWx0ZXIgaWYgYSBsaXN0IG9mIGFjY2VwdGVkCisgKiBNSU1F
IHR5cGVzIGlzIGRlZmluZWQgb3IgTlVMTCBvdGhlcndpc2UuIFRoZSByZXR1cm5lZCBvYmplY3Qg
aXMKKyAqIG93bmVkIGJ5IFdlYktpdEdUSysgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBvciBmcmVl
ZC4KKyAqLworR3RrRmlsZUZpbHRlciogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9t
aW1lX3R5cGVzX2ZpbHRlcihXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJl
cXVlc3QpLCAwKTsKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+ZmlsdGVyKQorICAgICAgICByZXR1
cm4gcmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdldCgpOworCisgICAgV0tSZXRhaW5QdHI8V0tBcnJh
eVJlZj4gd2tNaW1lVHlwZXMoQWRvcHRXSywgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzQ29weUFjY2Vw
dGVkTUlNRVR5cGVzKHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycy5nZXQoKSkpOworICAgIHNp
emVfdCBudW1PZk1pbWVUeXBlcyA9IFdLQXJyYXlHZXRTaXplKHdrTWltZVR5cGVzLmdldCgpKTsK
KyAgICBpZiAoIW51bU9mTWltZVR5cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlcXVl
c3QtPnByaXYtPmZpbHRlciA9IGd0a19maWxlX2ZpbHRlcl9uZXcoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bU9mTWltZVR5cGVzOyArK2kpIHsKKyAgICAgICAgV0tTdHJpbmdSZWYg
d2tNaW1lVHlwZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5k
ZXgod2tNaW1lVHlwZXMuZ2V0KCksIGkpKTsKKyAgICAgICAgZ3RrX2ZpbGVfZmlsdGVyX2FkZF9t
aW1lX3R5cGUocmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdldCgpLCB0b0ltcGwod2tNaW1lVHlwZSkt
PnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIHJldHVybiByZXF1ZXN0LT5w
cml2LT5maWx0ZXIuZ2V0KCk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2Nob29zZV9maWxlczoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QKKyAqIEBmaWxlczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNmZXIgbm9uZSk6
IGEKKyAqIE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzLCBjb250YWluaW5nIHBhdGhz
IHRvIGxvY2FsIGZpbGVzLgorICoKKyAqIEFzayBXZWJLaXQgdG8gY2hvb3NlIGxvY2FsIGZpbGVz
IGZvciB1cGxvYWQgYW5kIGNvbXBsZXRlIHRoZQorICogcmVxdWVzdC4KKyAqLwordm9pZCB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX2ZpbGVzKFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCwgY29uc3QgZ2NoYXIqIGNvbnN0KiBmaWxlcykKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChmaWxlcyk7CisKKyAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJh
eVJlZj4gd2tDaG9zZW5GaWxlcyhBZG9wdFdLLCBXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAg
ICBmb3IgKGludCBpID0gMDsgZmlsZXNbaV07IGkrKykgeworICAgICAgICAvLyBNYWtlIHN1cmUg
dGhlIGZpbGUgcGF0aCBpcyBwcmVzZW50ZWQgYXMgYW4gVVJJIChlc2NhcGVkCisgICAgICAgIC8v
IHN0cmluZywgd2l0aCB0aGUgJ2ZpbGU6Ly8nIHByZWZpeCkgdG8gV2ViQ29yZSBvdGhlcndpc2Ug
dGhlCisgICAgICAgIC8vIEZpbGVDaG9vc2VyIHdvbid0IGFjdHVhbGx5IGNob29zZSBpdC4KKyAg
ICAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZW5hbWUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3Jf
cGF0aChmaWxlc1tpXSkpOworICAgICAgICBHT3duUHRyPGNoYXI+IHVyaShnX2ZpbGVfZ2V0X3Vy
aShmaWxlbmFtZS5nZXQoKSkpOworICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkwo
QWRvcHRXSywgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcodXJpLmdldCgpKSk7CisgICAgICAg
IFdLQXJyYXlBcHBlbmRJdGVtKHdrQ2hvc2VuRmlsZXMuZ2V0KCksIHdrVVJMLmdldCgpKTsKKyAg
ICB9CisgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lckNob29zZUZpbGVzKHJlcXVlc3QtPnBy
aXYtPndrTGlzdGVuZXIuZ2V0KCksIHdrQ2hvc2VuRmlsZXMuZ2V0KCkpOworICAgIHJlcXVlc3Qt
PnByaXYtPmhhbmRsZWRSZXF1ZXN0ID0gdHJ1ZTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIEdldCB0aGUgbGlzdCBvZiBzZWxlY3RlZCBmaWxl
cyBjdXJyZW50bHkgYXNzb2NpYXRlZCB0byB0aGUKKyAqIHJlcXVlc3QuIFRoaXMgbGlzdCB3aWxs
IG5vcm1hbGx5IGJlIGVtcHR5IHdpdGggdGhlIGZpcnN0CisgKiByZXF1ZXN0IGFuZCB3aWxsIGNv
bnRhaW4gdGhlIGxpc3Qgb2YgZmlsZXMgcHJldmlvdXNseSBzZWxlY3RlZCwKKyAqIGlmIGFueSwg
aW4gZnVydGhlciByZXF1ZXN0cyBvdmVyIHRoZSBzYW1lIEhUTUwgSW5wdXQgRWxlbWVudC4KKyAq
CisgKiBSZXR1cm5zOiAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpICh0cmFuc2ZlciBub25lKTog
YQorICogTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MgaWYgdGhlcmUgYXJlIHNlbGVj
dGVkIGZpbGVzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3Qgb3IgTlVMTCBvdGhlcndp
c2UuIFRoaXMgYXJyYXkgYW5kIGl0cworICogY29udGVudHMgYXJlIG93bmVkIGJ5IFdlYktpdEdU
SysgYW5kIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgb3IKKyAqIGZyZWVkLgorICovCitjb25zdCBn
Y2hhciogY29uc3QqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmls
ZXMoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgMCk7Cisg
ICAgaWYgKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMpCisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMtPnBkYXRh
KTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHNlbGVjdGVkRmlsZU5hbWVzID0gdG9JbXBsKHJlcXVl
c3QtPnByaXYtPndrUGFyYW1ldGVycy5nZXQoKSktPnNlbGVjdGVkRmlsZU5hbWVzKCk7CisgICAg
c2l6ZV90IG51bU9mRmlsZXMgPSBzZWxlY3RlZEZpbGVOYW1lcy5zaXplKCk7CisgICAgaWYgKCFu
dW1PZkZpbGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlcXVlc3QtPnByaXYtPnNlbGVj
dGVkRmlsZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3X2Z1bGwobnVtT2ZGaWxlcyArIDEs
IGdfZnJlZSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZGaWxlczsgKytpKSB7
CisgICAgICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc2Vs
ZWN0ZWRGaWxlTmFtZXNbaV0pOworICAgICAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJp
di0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgZ19zdHJkdXAoZmlsZW5hbWUuZGF0YSgpKSk7CisgICAg
fQorICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLmdldCgp
LCAwKTsKKworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnBy
aXYtPnNlbGVjdGVkRmlsZXMtPnBkYXRhKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfY2FuY2VsOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdAorICoKKyAqIEFzayBXZWJLaXQgdG8gY2FuY2VsIHRoZSByZXF1ZXN0LiBJdCdzIGltcG9y
dGFudCB0byBkbyB0aGlzIGluIGNhc2UKKyAqIG5vIHNlbGVjdGlvbiBoYXMgYmVlbiBtYWRlIGlu
IHRoZSBjbGllbnQsIG90aGVyd2lzZSB0aGUgcmVxdWVzdAorICogd29uJ3QgYmUgcHJvcGVybHkg
Y29tcGxldGVkIGFuZCB0aGUgYnJvd3NlciB3aWxsIGtlZXAgdGhlIHJlcXVlc3QKKyAqIHBlbmRp
bmcgZm9yZXZlciwgd2hpY2ggbWlnaHQgY2F1c2UgdGhlIGJyb3dzZXIgdG8gaGFuZy4KKyAqLwor
dm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSUxF
X0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
ckNhbmNlbChyZXF1ZXN0LT5wcml2LT53a0xpc3RlbmVyLmdldCgpKTsKKyAgICByZXF1ZXN0LT5w
cml2LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDY1NjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lU
Ml9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBp
bmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3RfaAorI2RlZmluZSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RfaAorCisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QgICAgICAg
ICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFV
RVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RD
bGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9GSUxFX0NI
T09TRVJfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9GSUxFX0NIT09TRVJfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVR
VUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICAgICAg
ICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0Q2xhc3MgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzczsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHsK
KyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBl
ICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24gIChXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICog
Y29uc3QgKgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzICAgICAg
ICAgICAgIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJ
IEd0a0ZpbGVGaWx0ZXIgKgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5
cGVzX2ZpbHRlciAgICAgIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMg
ICAgICAgICAgICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
Y2hhciAqIGNvbnN0ICAgICAgKmZpbGVzKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqIGNv
bnN0ICoKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMgICAg
ICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsICAgICAgICAgICAgICAgICAg
ICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNzIyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRl
LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKworV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUoV0tPcGVuUGFuZWxQ
YXJhbWV0ZXJzUmVmLCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmKTsKKworI2VuZGlmIC8v
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCmluZGV4IGU3NjIxMmQuLmJj
MmM5Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRVSUNsaWVudC5jcHAKQEAgLTIwLDEyICsyMCwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYktpdFVJQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKIApAQCAtMTMxLDYgKzEzMywxMiBAQCBzdGF0aWMgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxl
bWVudChXS1BhZ2VSZWYgcGFnZSwgV0tIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZQogICAgIHdl
YmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8p
LCBoaXRUZXN0UmVzdWx0LCB3a0V2ZW50TW9kaWZpZXJzVG9HZGtNb2RpZmllcnMobW9kaWZpZXJz
KSk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ1bk9wZW5QYW5lbChXS1BhZ2VSZWYgcGFnZSwgV0tGcmFt
ZVJlZiBmcmFtZSwgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHBhcmFtZXRlcnMsIFdLT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7
CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdS
ZWYod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKHBhcmFtZXRlcnMsIGxpc3RlbmVyKSk7
CisgICAgd2Via2l0V2ViVmlld01ha2VGaWxlQ2hvb3NlclJlcXVlc3QoV0VCS0lUX1dFQl9WSUVX
KGNsaWVudEluZm8pLCByZXF1ZXN0LmdldCgpKTsKK30KKwogdm9pZCBhdHRhY2hVSUNsaWVudFRv
VmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIFdLUGFnZVVJQ2xpZW50IHdrVUlD
bGllbnQgPSB7CkBAIC0xNjQsNyArMTcyLDcgQEAgdm9pZCBhdHRhY2hVSUNsaWVudFRvVmlldyhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgICAgICAwLCAvLyBkaWREcmF3CiAgICAgICAgIDAs
IC8vIHBhZ2VEaWRTY3JvbGwKICAgICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1b3RhCi0g
ICAgICAgIDAsIC8vIHJ1bk9wZW5QYW5lbAorICAgICAgICBydW5PcGVuUGFuZWwsCiAgICAgICAg
IDAsIC8vIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKICAgICAg
ICAgMCwgLy8gaGVhZGVySGVpZ2h0CiAgICAgICAgIDAsIC8vIGZvb3RlckhlaWdodApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRl
eCBhZjc5OTM1Li42NTY5MzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtNTksNiArNTksNyBAQCBlbnVtIHsKICAgICBT
Q1JJUFRfUFJPTVBULAogCiAgICAgREVDSURFX1BPTElDWSwKKyAgICBSVU5fRklMRV9DSE9PU0VS
LAogCiAgICAgTU9VU0VfVEFSR0VUX0NIQU5HRUQsCiAKQEAgLTE2MCw2ICsxNjEsNTcgQEAgc3Rh
dGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdEZWNpZGVQb2xpY3koV2ViS2l0V2ViVmlldyosIFdl
YktpdFBvbGljeURlY2lzaW9uKgogICAgIHJldHVybiBUUlVFOwogfQogCitzdGF0aWMgdm9pZCBm
aWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrRGlhbG9nKiBkaWFsb2csIGdpbnQg
cmVzcG9uc2VJRCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEdS
ZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBhZG9wdGVkUmVxdWVzdCA9IGFkb3B0R1Jl
ZihyZXF1ZXN0KTsKKyAgICBpZiAocmVzcG9uc2VJRCA9PSBHVEtfUkVTUE9OU0VfQUNDRVBUKSB7
CisgICAgICAgIEdPd25QdHI8R1NMaXN0PiBmaWxlc0xpc3QoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRf
ZmlsZW5hbWVzKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSkpOworICAgICAgICBndWludCBudW1P
ZkZpbGVzID0gZ19zbGlzdF9sZW5ndGgoZmlsZXNMaXN0LmdldCgpKTsKKworICAgICAgICBjb25z
dCBnY2hhcioqIGZpbGVzQXJyYXkgPSBnX25ldzAoY29uc3QgZ2NoYXIqLCBudW1PZkZpbGVzICsg
MSk7CisgICAgICAgIEdTTGlzdCogZmlsZSA9IGZpbGVzTGlzdC5nZXQoKTsKKyAgICAgICAgZm9y
IChndWludCBpID0gMDsgaSA8IG51bU9mRmlsZXM7IGkrKykgeworICAgICAgICAgICAgZmlsZXNB
cnJheVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IGdjaGFyKj4oZmlsZS0+ZGF0YSk7CisgICAgICAg
ICAgICBmaWxlID0gZ19zbGlzdF9uZXh0KGZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29zZV9maWxlcyhhZG9wdGVkUmVxdWVzdC5nZXQo
KSwgY29uc3RfY2FzdDxjb25zdCBnY2hhciogY29uc3QqPihmaWxlc0FycmF5KSk7CisgICAgICAg
IGdfZnJlZShmaWxlc0FycmF5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2NhbmNlbChhZG9wdGVkUmVxdWVzdC5nZXQoKSk7CisKKyAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3koR1RLX1dJREdFVChkaWFsb2cpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9
IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGlmICgh
d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHRvcGxldmVsKSkKKyAgICAgICAgdG9wbGV2
ZWwgPSAwOworCisgICAgZ2Jvb2xlYW4gYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbihyZXF1ZXN0KTsK
KyAgICBHdGtXaWRnZXQqIGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyhhbGxv
d3NNdWx0aXBsZVNlbGVjdGlvbiA/IF8oIlNlbGVjdCBGaWxlcyBmb3IgVXBsb2FkIikgOiBfKCJT
ZWxlY3QgRmlsZSBmb3IgVXBsb2FkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPyBHVEtfV0lORE9XKHRvcGxldmVsKSA6IDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RL
X0ZJTEVfQ0hPT1NFUl9BQ1RJT05fT1BFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfQ0FOQ0VMLCBHVEtfUkVTUE9OU0VfQ0FO
Q0VMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19TVE9DS19PUEVOLCBHVEtfUkVTUE9OU0VfQUNDRVBULAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgR1JlZlB0cjxH
dGtGaWxlRmlsdGVyPiBmaWx0ZXIod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzX2ZpbHRlcihyZXF1ZXN0KSk7CisgICAgaWYgKGZpbHRlcikKKyAgICAgICAgZ3RrX2Zp
bGVfY2hvb3Nlcl9zZXRfZmlsdGVyKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSwgZmlsdGVyLmdl
dCgpKTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9zZWxlY3RfbXVsdGlwbGUoR1RLX0ZJTEVf
Q0hPT1NFUihkaWFsb2cpLCBhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbik7CisKKyAgICBjb25zdCBn
Y2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOworICAgIGlmIChzZWxlY3RlZEZpbGVzICYmIHNl
bGVjdGVkRmlsZXNbMF0gJiYgKnNlbGVjdGVkRmlsZXNbMF0pCisgICAgICAgIGd0a19maWxlX2No
b29zZXJfc2VsZWN0X2ZpbGVuYW1lKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSwgc2VsZWN0ZWRG
aWxlc1swXSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywgInJlc3BvbnNlIiwgR19D
QUxMQkFDSyhmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2spLCBnX29iamVjdF9yZWYo
cmVxdWVzdCkpOworICAgIGd0a193aWRnZXRfc2hvdyhkaWFsb2cpOworCisgICAgcmV0dXJuIFRS
VUU7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChHT2JqZWN0KiBv
YmplY3QpCiB7CiAgICAgaWYgKEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19wYXJlbnRf
Y2xhc3MpLT5jb25zdHJ1Y3RlZCkKQEAgLTI2Myw2ICszMTUsNyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykK
ICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9jb25maXJtID0gd2Via2l0V2ViVmlld1NjcmlwdENv
bmZpcm07CiAgICAgd2ViVmlld0NsYXNzLT5zY3JpcHRfcHJvbXB0ID0gd2Via2l0V2ViVmlld1Nj
cmlwdFByb21wdDsKICAgICB3ZWJWaWV3Q2xhc3MtPmRlY2lkZV9wb2xpY3kgPSB3ZWJraXRXZWJW
aWV3RGVjaWRlUG9saWN5OworICAgIHdlYlZpZXdDbGFzcy0+cnVuX2ZpbGVfY2hvb3NlciA9IHdl
YmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlcjsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZSh3ZWJWaWV3Q2xhc3MsIHNpemVvZihXZWJLaXRXZWJWaWV3UHJpdmF0ZSkpOwogCkBAIC02MjMs
NiArNjc2LDM3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktp
dFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1RZUEVfUE9MSUNZX0RFQ0lTSU9OX1RZUEUpOwogCiAgICAgLyoqCisgICAgICogV2ViS2l0V2Vi
Vmlldzo6cnVuLWZpbGUtY2hvb3NlcjoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2Vi
VmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAcmVxdWVzdDogYSAj
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBl
bWl0dGVkIHdoZW4gdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggYSAmbHQ7aW5wdXQKKyAgICAgKiB0
eXBlPSdmaWxlJyAvJmd0OyBIVE1MIGVsZW1lbnQsIHJlcXVlc3RpbmcgZnJvbSBXZWJLaXQgdG8g
c2hvdworICAgICAqIGEgZGlhbG9nIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBmaWxlcyB0byBiZSB1
cGxvYWRlZC4gVG8gbGV0IHRoZQorICAgICAqIGFwcGxpY2F0aW9uIGtub3cgdGhlIGRldGFpbHMg
b2YgdGhlIGZpbGUgY2hvb3NlciwgYXMgd2VsbCBhcyB0bworICAgICAqIGFsbG93IHRoZSBjbGll
bnQgYXBwbGljYXRpb24gdG8gZWl0aGVyIGNhbmNlbCB0aGUgcmVxdWVzdCBvcgorICAgICAqIHBl
cmZvcm0gYW4gYWN0dWFsIHNlbGVjdGlvbiBvZiBmaWxlcywgdGhlIHNpZ25hbCB3aWxsIHBhc3Mg
YW4KKyAgICAgKiBpbnN0YW5jZSBvZiB0aGUgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBpbiB0
aGUgQHJlcXVlc3QKKyAgICAgKiBhcmd1bWVudC4KKyAgICAgKgorICAgICAqIFRoZSBkZWZhdWx0
IHNpZ25hbCBoYW5kbGVyIHdpbGwgYXN5bmNocm9ub3VzbHkgcnVuIGEgcmVndWxhcgorICAgICAq
ICNHdGtGaWxlQ2hvb3NlckRpYWxvZyBmb3IgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aC4KKyAg
ICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBi
ZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRl
IHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICovCisgICAgc2lnbmFsc1tSVU5fRklM
RV9DSE9PU0VSXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygicnVuLWZpbGUtY2hvb3NlciIsCisg
ICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAg
ICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAg
ICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBydW5fZmlsZV9jaG9vc2VyKSwK
KyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwg
MCAvKiBhY2N1bXVsYXRvciBkYXRhICovLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21h
cnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xF
QU4sIDEsIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCk7CisKKyAgICAvKioKICAgICAgKiBXZWJL
aXRXZWJWaWV3Ojptb3VzZS10YXJnZXQtY2hhbmdlZDoKICAgICAgKiBAd2ViX3ZpZXc6IHRoZSAj
V2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKICAgICAgKiBAaGl0
X3Rlc3RfcmVzdWx0OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CkBAIC03NzEsNiArODU1LDEyIEBA
IHZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBXS0hpdFRlc3RSZXN1bHRSZWYKICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25h
bHNbTU9VU0VfVEFSR0VUX0NIQU5HRURdLCAwLCBwcml2LT5tb3VzZVRhcmdldEhpdFRlc3RSZXN1
bHQuZ2V0KCksIG1vZGlmaWVycyk7CiB9CiAKK3ZvaWQgd2Via2l0V2ViVmlld01ha2VGaWxlQ2hv
b3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0KiByZXF1ZXN0KQoreworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFs
X2VtaXQod2ViVmlldywgc2lnbmFsc1tSVU5fRklMRV9DSE9PU0VSXSwgMCwgcmVxdWVzdCwgJnJl
dHVyblZhbHVlKTsKK30KKwogLyoqCiAgKiB3ZWJraXRfd2ViX3ZpZXdfbmV3OgogICoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCAw
MDgxYmUzLi45MTY4OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oCkBAIC0zMCwxMyArMzAsMTQgQEAKIAogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZp
bmVzLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdEhpdFRlc3RSZXN1bHQuaD4KLSNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdFdlYkNvbnRleHQuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFBvbGljeURlY2lz
aW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0VVJJUmVxdWVzdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29u
dGV4dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdFBvbGljeURlY2lzaW9uLmg+CiAKIEdfQkVHSU5fREVDTFMKIApAQCAtMTQwLDYgKzE0MSwx
MCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgZ2Jvb2xlYW4gICAoKiBkZWNp
ZGVfcG9saWN5KSAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lEZWNp
c2lvbiAgICAgICpkZWNpc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlICB0eXBlKTsKKworICAgIGdib29sZWFuICAg
KCogcnVuX2ZpbGVfY2hvb3NlcikgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJf
dmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0ICAqcmVxdWVzdCk7CisKICAgICB2b2lkICAgICAgICgqIG1vdXNlX3Rh
cmdldF9jaGFuZ2VkKSAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICp3ZWJfdmlldywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0SGl0VGVzdFJlc3VsdCAg
ICAgICpoaXRfdGVzdF9yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5o
CmluZGV4IDc2OGE2MjAuLmIzMTZkMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaApAQCAtNDMsNiArNDMsNyBA
QCB2b2lkIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0QWxlcnQoV2ViS2l0V2ViVmlldyosIGNv
bnN0IENTdHJpbmcmIG1lc3NhZ2UpOwogYm9vbCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdENv
bmZpcm0oV2ViS2l0V2ViVmlldyosIGNvbnN0IENTdHJpbmcmIG1lc3NhZ2UpOwogV0tTdHJpbmdS
ZWYgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQoV2ViS2l0V2ViVmlldyosIGNvbnN0
IENTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IENTdHJpbmcmIGRlZmF1bHRUZXh0KTsKIHZvaWQgd2Vi
a2l0V2ViVmlld01ha2VQb2xpY3lEZWNpc2lvbihXZWJLaXRXZWJWaWV3KiwgV2ViS2l0UG9saWN5
RGVjaXNpb25UeXBlLCBXZWJLaXRQb2xpY3lEZWNpc2lvbiopOwordm9pZCB3ZWJraXRXZWJWaWV3
TWFrZUZpbGVDaG9vc2VyUmVxdWVzdChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2Vi
VmlldyosIFdLSGl0VGVzdFJlc3VsdFJlZiwgdW5zaWduZWQgbW9kaWZpZXJzKTsKIAogI2VuZGlm
IC8vIFdlYktpdFdlYlZpZXdQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCmluZGV4IGNjY2Uw
NGYuLmMwYjcyODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApAQCAtMjUsNiArMjUsNyBAQAogICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24ueG1s
Ii8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNp
b24ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEhpdFRlc3RSZXN1bHQu
eG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJyb3IueG1sIi8+CiAg
IDwvY2hhcHRlcj4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggNTBjNDJkYi4uZTgx
NmM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC00MTgsNiArNDE4LDMwIEBAIHdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X3R5cGUKIDwvU0VDVElPTj4KIAogPFNFQ1RJT04+Cis8
RklMRT5XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q8L0ZJTEU+CitXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0
aW9uCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMKK3dlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIKK3dlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfc2VsZWN0ZWRfZmlsZXMKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwKKwor
PFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcworV0VC
S0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QKK1dFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVT
VAorV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUCitXRUJLSVRfRklMRV9DSE9PU0VSX1JF
UVVFU1RfQ0xBU1MKK1dFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVF9DTEFTUworV0VCS0lU
X0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgor
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgogPEZJTEU+V2ViS2l0RXJyb3I8
L0ZJTEU+CiBXRUJLSVRfTkVUV09SS19FUlJPUgogV0VCS0lUX1BMVUdJTl9FUlJPUgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5
cGVzIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5
cGVzCmluZGV4IGNiYTJkZjQuLjNmNDE0MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKQEAgLTksNCArOSw1IEBA
IHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3R5cGUKIHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdHlw
ZQogd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF90eXBlCiB3ZWJraXRfZG93bmxvYWRfZ2V0
X3R5cGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViVmlldy5jcHAKaW5kZXggNDdkYTk4ZS4uN2QxNDc4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3
LmNwcApAQCAtMjI2LDYgKzIyNiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBuZXdXZWJW
aWV3OwogICAgIH0KIAorICAgIHN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlcihXZWJLaXRX
ZWJWaWV3KiwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBVSUNsaWVudFRlc3Qq
IHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAgICAgdGVzdC0+bV9maWxlQ2hvb3Nl
clJlcXVlc3QgPSByZXF1ZXN0OworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFp
bkxvb3ApOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKICAgICBzdGF0aWMgZ2Jvb2xl
YW4gc2NyaXB0QWxlcnQoV2ViS2l0V2ViVmlldyosIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIFVJQ2xp
ZW50VGVzdCogdGVzdCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAodGVzdC0+bV9zY3JpcHRUeXBl
KSB7CkBAIC0yODQsNiArMjkyLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseSh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOwogICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0sodmlld0NyZWF0ZSks
IHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInJ1bi1maWxlLWNo
b29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyKSwgdGhpcyk7CiAgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LWFsZXJ0IiwgR19DQUxMQkFDSyhzY3JpcHRB
bGVydCksIHRoaXMpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlw
dC1jb25maXJtIiwgR19DQUxMQkFDSyhzY3JpcHRDb25maXJtKSwgdGhpcyk7CiAgICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LXByb21wdCIsIEdfQ0FMTEJBQ0soc2Ny
aXB0UHJvbXB0KSwgdGhpcyk7CkBAIC0zMTIsMTIgKzMyMSwyMCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdC5nZXQoKTsKICAgICB9CiAKKyAgICBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIG1vdXNlQnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNo
b29zZXJSZXF1ZXN0KGludCB4LCBpbnQgeSkKKyAgICB7CisgICAgICAgIG1vdXNlQnV0dG9uQ2xp
Y2soeCwgeSk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAg
cmV0dXJuIG1fZmlsZUNob29zZXJSZXF1ZXN0LmdldCgpOworICAgIH0KKwogICAgIFZlY3RvcjxX
ZWJWaWV3RXZlbnRzPiBtX3dlYlZpZXdFdmVudHM7CiAgICAgU2NyaXB0VHlwZSBtX3NjcmlwdFR5
cGU7CiAgICAgYm9vbCBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZDsKICAgICBXaW5kb3dQcm9wZXJ0
aWVzIG1fd2luZG93UHJvcGVydGllczsKICAgICBIYXNoU2V0PFdURjo6U3RyaW5nPiBtX3dpbmRv
d1Byb3BlcnRpZXNDaGFuZ2VkOwogICAgIEdSZWZQdHI8V2ViS2l0SGl0VGVzdFJlc3VsdD4gbV9t
b3VzZVRhcmdldEhpdFRlc3RSZXN1bHQ7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3Q+IG1fZmlsZUNob29zZXJSZXF1ZXN0OwogICAgIHVuc2lnbmVkIGludCBtX21vdXNlVGFy
Z2V0TW9kaWZpZXJzOwogfTsKIApAQCAtMzMzLDYgKzM1MCw4OCBAQCBzdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQogICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OkNsb3Nl
KTsKIH0KIAorc3RhdGljIGdib29sZWFuIGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoR3RrRmlsZUZp
bHRlciogZmlsdGVyLCBjb25zdCBnY2hhciogbWltZVR5cGUpCit7CisgICAgR3RrRmlsZUZpbHRl
ckluZm8gZmlsdGVySW5mbzsKKyAgICBmaWx0ZXJJbmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklM
VEVSX01JTUVfVFlQRTsKKyAgICBmaWx0ZXJJbmZvLm1pbWVfdHlwZSA9IG1pbWVUeXBlOworICAg
IHJldHVybiBndGtfZmlsZV9maWx0ZXJfZmlsdGVyKGZpbHRlciwgJmZpbHRlckluZm8pOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdChVSUNsaWVudFRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVu
dGlsTWFwcGVkKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZpbGVDaG9vc2VySFRNTEZvcm1h
dCA9ICI8aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0
b3A6MDttYXJnaW46MDtwYWRkaW5nOjAnIHR5cGU9J2ZpbGUnICVzLz48L2JvZHk+PC9odG1sPiI7
CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBubyBNSU1FIGZpbHRl
cmluZy4KKyAgICBHT3duUHRyPGNoYXI+IHNpbXBsZUZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3By
aW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICIiKSk7CisgICAgdGVzdC0+bG9hZEh0bWwoc2lt
cGxlRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogZmlsZUNob29zZXJSZXF1ZXN0
ID0gdGVzdC0+bW91c2VCdXR0b25DbGlja0FuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwg
NSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVs
dGlwbGVfc2VsZWN0aW9uKGZpbGVDaG9vc2VyUmVxdWVzdCkpOworCisgICAgY29uc3QgZ2NoYXIq
IGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVf
dHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKKyAg
ICBHdGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X21pbWVfdHlwZXNfZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZp
bHRlcik7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3Qp
OworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisKKyAgICAvLyBNdWx0aXBsZSBz
ZWxlY3Rpb25zIGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLCBzb21lIHByZS1zZWxlY3RlZCBm
aWxlcy4KKyAgICBHT3duUHRyPGNoYXI+IG11bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhUTUwo
Z19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgIm11bHRpcGxlIikpOworICAg
IHRlc3QtPmxvYWRIdG1sKG11bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDAp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGZpbGVDaG9vc2VyUmVx
dWVzdCA9IHRlc3QtPm1vdXNlQnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0
KDUsIDUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3Nf
bXVsdGlwbGVfc2VsZWN0aW9uKGZpbGVDaG9vc2VyUmVxdWVzdCkpOworCisgICAgbWltZVR5cGVz
ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2Vy
UmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7CisgICAgZmlsdGVyID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJl
cXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVx
dWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOworCisgICAgLy8gU2VsZWN0IHNv
bWUgZmlsZXMuCisgICAgY29uc3QgZ2NoYXIqIGZpbGVzVG9TZWxlY3RbNF0gPSB7ICIvZm9vIiwg
Ii9mb28vYmFyIiwgIi9mb28vYmFyL2JheiIsIDAgfTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfY2hvb3NlX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7
CisKKyAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0aGUgbGlzdCBv
ZiBmaWxlcyBzZWxlY3RlZAorICAgIC8vIGluIHRoZSBwcmV2aW91cyBzdGVwIGFwcGVhcnMgbm93
IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgorICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRl
c3QtPm1vdXNlQnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOwor
ICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRGaWxl
cyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2ZvbyIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFyIik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIvYmF6Iik7
CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOworICAgIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKKworICAgIC8vIE11bHRpcGxl
IHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZp
ZGVvIGZpbGVzLi4KKyAgICBHT3duUHRyPGNoYXI+IG1pbWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1M
KGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJhY2NlcHQ9J2F1ZGlvLyos
dmlkZW8vKixpbWFnZS8qJyIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChtaW1lRmlsdGVyZWRGaWxl
VXBsb2FkSFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+bW91c2VCdXR0b25DbGlja0FuZFdhaXRG
b3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uKGZpbGVDaG9vc2VyUmVxdWVz
dCkpOworCisgICAgbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9t
aW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzBdLCA9PSwgImF1ZGlvLyoiKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFdLCA9PSwgInZpZGVvLyoiKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwgImltYWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWlt
ZVR5cGVzWzNdKTsKKworICAgIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChH
VEtfSVNfRklMRV9GSUxURVIoZmlsdGVyKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZv
ckZpbHRlcihmaWx0ZXIsICJhdWRpby8qIikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVG
b3JGaWx0ZXIoZmlsdGVyLCAidmlkZW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBl
Rm9yRmlsdGVyKGZpbHRlciwgImltYWdlLyoiKSk7CisKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJl
cXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKyAgICB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7Cit9CisKIHN0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3MoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBodG1sT25Mb2FkRm9ybWF0ID0g
IjxodG1sPjxib2R5IG9uTG9hZD1cIiVzXCI+PC9ib2R5PjwvaHRtbD4iOwpAQCAtNDU2LDYgKzU1
NSw3IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgInNldHRpbmdzIiwgdGVzdFdlYlZpZXdTZXR0aW5ncyk7CiAgICAgV2ViVmlld1Rlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJyZXBsYWNlLWNvbnRlbnQiLCB0ZXN0V2ViVmlld1JlcGxh
Y2VDb250ZW50KTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjcmVh
dGUtcmVhZHktY2xvc2UiLCB0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UpOworICAgIFVJQ2xp
ZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImZpbGUtY2hvb3Nlci1yZXF1ZXN0IiwgdGVz
dFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImphdmFzY3JpcHQtZGlhbG9ncyIsIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERp
YWxvZ3MpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndpbmRvdy1w
cm9wZXJ0aWVzIiwgdGVzdFdlYlZpZXdXaW5kb3dQcm9wZXJ0aWVzKTsKICAgICBVSUNsaWVudFRl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJtb3VzZS10YXJnZXQiLCB0ZXN0V2ViVmlld01vdXNl
VGFyZ2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmNwcAppbmRleCAwMGQzYjNlLi4yOWM1M2UzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3Bw
CkBAIC0xODAsMyArMTgwLDM0IEBAIHZvaWQgV2ViVmlld1Rlc3Q6Om1vdXNlTW92ZVRvKGludCB4
LCBpbnQgeSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzKQogICAgIGd0a19tYWluX2RvX2V2
ZW50KGV2ZW50LmdldCgpKTsKIH0KIAordm9pZCBXZWJWaWV3VGVzdDo6bW91c2VCdXR0b25DbGlj
ayhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb3VzZU1v
ZGlmaWVycykKK3sKKyAgICBtb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUFJFU1MsIHgsIHks
IGJ1dHRvbiwgbW91c2VNb2RpZmllcnMpOworICAgIG1vdXNlQnV0dG9uRXZlbnQoR0RLX0JVVFRP
Tl9SRUxFQVNFLCB4LCB5LCBidXR0b24sIG1vdXNlTW9kaWZpZXJzKTsKK30KKwordm9pZCBXZWJW
aWV3VGVzdDo6bW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCBpbnQgeCwg
aW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykK
K3sKKyAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lk
Z2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0
X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdk
a19ldmVudF9uZXcoZXZlbnRUeXBlKSk7CisgICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBndGtf
d2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5i
dXR0b24ud2luZG93KTsKKworICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJ
TUU7CisgICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5Owor
ICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1v
dXNlTW9kaWZpZXJzOworICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOworCisgICAg
ZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2lu
dGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5
KHZpZXdXaWRnZXQpKSk7CisKKyAgICBpbnQgeFJvb3QsIHlSb290OworICAgIGdka193aW5kb3df
Z2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwg
JnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7CisgICAg
ZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVu
dC5nZXQoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJWaWV3VGVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViVmlld1Rlc3QuaAppbmRleCA5NWE1NjljLi43ZDkyNGJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKQEAg
LTQ1LDExICs0NSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaG93SW5XaW5kb3dBbmRXYWl0VW50
aWxNYXBwZWQoKTsKIAogICAgIHZvaWQgbW91c2VNb3ZlVG8oaW50IHgsIGludCB5LCB1bnNpZ25l
ZCBpbnQgbW91c2VNb2RpZmllcnMgPSAwKTsKKyAgICB2b2lkIG1vdXNlQnV0dG9uQ2xpY2soaW50
IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9uID0gMSwgdW5zaWduZWQgaW50IG1vdXNlTW9k
aWZpZXJzID0gMCk7CiAKICAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7CiAgICAgR01haW5M
b29wKiBtX21haW5Mb29wOwogICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7CiAgICAgR3RrV2lkZ2V0
KiBtX3BhcmVudFdpbmRvdzsKKworcHJpdmF0ZToKKyAgICB2b2lkIG1vdXNlQnV0dG9uRXZlbnQo
R2RrRXZlbnRUeXBlLCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogfTsK
IAogI2VuZGlmIC8vIFdlYlZpZXdUZXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDIuaAppbmRleCAzYWY5OTA0Li5kZTAzMDk4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0zMCwxMyArMzAsMTQgQEAKICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdEVkaXRpbmdDb21tYW5kcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0RW51bVR5cGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFcnJvci5oPgorI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5n
cy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0VVJJUmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNv
bnRleHQuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJW
aWV3QmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgog
CiAjdW5kZWYgX19XRUJLSVQyX0hfSU5TSURFX18KLS0gCjEuNy43LjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127870</attachid>
            <date>2012-02-20 16:56:14 -0800</date>
            <delta_ts>2012-03-09 07:22:48 -0800</delta_ts>
            <desc>Patch Proposal + Unit Tests + Docs</desc>
            <filename>0001-2012-02-21-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>59708</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBiYmI2YzMyZjg5ZWYxZDY2NjM5OWE0ZGViNzMxZTY3YzI1ZjI1YmIzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDEwIEZlYiAyMDEyIDEyOjEzOjU5ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wMi0yMSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5QYW5lbCBpbiBX
ZWJLaXQyR1RLKwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODQ5MQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgQWRk
IGEgbmV3IHB1YmxpYyBjbGFzcyB0byB0aGUgQVBJLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qs
IHRvIGJlCiAgICAgICAgZW1pdHRlZCBhbG9uZyB3aXRoIGEgbmV3IFdlYktpdFdlYlZpZXc6OnJ1
bi1maWxlLWNob29zZXIgc2lnbmFsIHRvCiAgICAgICAgbGV0IGNsaWVudCBhcHBsaWNhdGlvbnMg
dG8gcHJvdmlkZSB0aGVpciBvd24gZmlsZSBjaG9vc2VyIGRpYWxvZwogICAgICAgIHdoZW4gdGhl
IHVzZSBpbnRlcmFjdHMgd2l0aCBIVE1MIElucHV0IGVsZW1lbnRzIG9mIHR5cGUgJ2ZpbGUnLgoK
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGRlZCBuZXcgc291cmNlIGZpbGVzIGFuZCBoZWFk
ZXJzLgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
LmNwcDogQWRkZWQuCiAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKToK
ICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2luaXQpOgogICAgICAgICh3ZWJr
aXRGaWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZSk6CiAgICAgICAgKHdlYmtpdEZpbGVDaG9vc2Vy
UmVxdWVzdEdldFByb3BlcnR5KToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2NsYXNzX2luaXQpOgogICAgICAgICh3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUpOgog
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVj
dGlvbik6CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
cyk6CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19m
aWx0ZXIpOgogICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX2ZpbGVz
KToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxl
cyk6CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwpOgogICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg6IEFkZGVkLgog
ICAgICAgIChfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KToKICAgICAgICAoX1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdENsYXNzKToKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaDogQWRkZWQsCiAgICAgICAgY29udGFpbmluZyB0aGUg
cHJvdG90eXBlIG9mIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdENyZWF0ZS4KCiAgICAgICAgUHJv
dmlkZSBwcml2YXRlIEFQSSB0byBtYWtlIGEgZmlsZSBjaG9vc2VyIHJlcXVlc3QgZnJvbSB0aGUK
ICAgICAgICBXZWJWaWV3LCBhbmQgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlciBmb3IgaXQuCgog
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CiAgICAgICAgKGZp
bGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayk6IEhhbmRsZXIgZm9yIHRoZSAncmVzcG9u
c2UnCiAgICAgICAgc2lnbmFsIGZvciB0aGUgR3RrRmlsZUNob29zZXJEaWFsb2cgdXNlZCBpbiB0
aGUgZGVmYXVsdAogICAgICAgIGhhbmRsZXIuIEl0IHdpbGwgY2FsbCB0byB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfY2hvb3NlX2ZpbGVzCiAgICAgICAgb3Igd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2NhbmNlbCBhcyBuZWVkZWQuCiAgICAgICAgKHdlYmtpdFdlYlZpZXdSdW5GaWxl
Q2hvb3Nlcik6IERlZmF1bHQgaGFuZGxlciBmb3IgdGhlIG5ldwogICAgICAgICdydW4tZmlsZS1j
aG9vc2VyJyBzaWduYWwuIEl0IHdpbGwgY3JlYXRlIGEgR3RrRmlsZUNob29zZXJEaWFsb2csCiAg
ICAgICAgY29ubmVjdCB0byB0aGUgJ3Jlc3BvbnNlJyBzaWduYWwgYW5kIHNob3cgaXQuCiAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KTogQ29ubmVjdCB0aGUgJ3J1bi1maWxlLWNo
b29zZXInCiAgICAgICAgc2lnbmFsIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIsIHdlYmtpdFdlYlZp
ZXdSdW5GaWxlQ2hvb3Nlci4KICAgICAgICAod2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVx
dWVzdCk6CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CiAgICAg
ICAgKF9XZWJLaXRXZWJWaWV3Q2xhc3MpOiBBZGRlZCBwcm90b3R5cGUgZm9yIHRoZSBoYW5kbGVy
IG9mIHRoZSBuZXcKICAgICAgICAncnVuLWZpbGUtY2hvb3Nlcicgc2lnbmFsLgogICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaDogQWRkZWQgcHJvdG90eXBl
IGZvcgogICAgICAgIHByaXZhdGUgbmV3IGZ1bmN0aW9uIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hv
b3NlclJlcXVlc3QuCgogICAgICAgIFByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJ1bk9w
ZW5QYW5lbCBpbiBXZWJLaXRVSUNsaWVudC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRVSUNsaWVudC5jcHA6CiAgICAgICAgKHJ1bk9wZW5QYW5lbCk6IE5ldywgaW1wbGVtZW50
cyBydW5PcGVuUGFuZWwgYnkgY3JlYXRpbmcgYW4KICAgICAgICBpbnN0YW5jZSBvZiBXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QgYW5kIGFza2luZyB0aGUgV2ViVmlldyB0bwogICAgICAgIGVtaXQg
dGhlICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwgd2l0aCBpdC4KICAgICAgICAoYXR0YWNoVUlD
bGllbnRUb1ZpZXcpOiBSZWZlcmVuY2UgdGhlIG5ldyBydW5PcGVuUGFuZWwgZnVuY3Rpb24uCgog
ICAgICAgIEFkZGVkIHRoZSBuZXcgcHVibGljaCBoZWFkZXIgdG8gdGhlIG1haW4gaGVhZGVyLgoK
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogQWRkZWQgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0LmguCgogICAgICAgIE5ldyB1bml0IHRlc3RzIGZvciB0aGUgbmV3IFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCBBUEkuIEFsc28sCiAgICAgICAgZXh0ZW5kZWQgdGhlIFdlYlZp
ZXdUZXN0IGNsYXNzIHRvIGFsbG93IHNpbXVsYXRpbmcgbW91c2UgY2xpY2tzLgoKICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDoKICAgICAgICAo
Y2hlY2tNaW1lVHlwZUZvckZpbHRlcik6IE5ldywgY2hlY2tzIHdoZXRoZXIgYSBHdGtGaWxlRmls
dGVyCiAgICAgICAgZmlsdGVycyBhIGdpdmVuIE1JTUUgdHlwZSwgYXMgc3BlY2lmaWVkIGJ5IFJG
QyAyMDQ2LgogICAgICAgICh0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdCk6IE5ldyB1bml0
IHRlc3QuCiAgICAgICAgKGJlZm9yZUFsbCk6IEFkZCB0aGUgbmV3IHVuaXQgdGVzdCBhcyBhbiBV
SUNsaWVudFRlc3QuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rl
c3QuY3BwOgogICAgICAgIChXZWJWaWV3VGVzdDo6bW91c2VCdXR0b25DbGljayk6IE5ldyBwdWJs
aWMgZnVuY3Rpb24gdG8gc2ltdWxhdGUgYQogICAgICAgIG1vdXNlIGNsaWNrIHRocm91Z2ggR2Rr
RXZlbnRzLCBhcyB0aGUgY29tYmluYXRpb24gb2YgYSAncHJlc3MnIGFuZAogICAgICAgIGEgJ3Jl
bGVhc2UnIGV2ZW50LiBVc2VkIGZyb20gdGhlIG5ldyB1bml0IHRlc3QgdG8gc2ltdWxhdGUgdGhl
CiAgICAgICAgdXNlciBwcmVzc2luZyBpbiB0aGUgYnV0dG9uIHJlbmRlcmVkIGZvciBhIEhUTUwg
SW5wdXQgZWxlbWVudC4KICAgICAgICAoV2ViVmlld1Rlc3Q6Om1vdXNlQnV0dG9uRXZlbnQpOiBO
ZXcgcHJpdmF0ZSBmdW5jdGlvbiB0byBzaW11bGF0ZQogICAgICAgIGEgbW91c2UgZXZlbnQgdGhy
b3VnaCBHZGtFdmVudHMuCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3
VGVzdC5oOgoKICAgICAgICBVcGRhdGVkIGRvY3VtZW50YXRpb24gcmVsYXRlZCBmaWxlcyB3aXRo
IHRoZSBuZXcgQVBJLgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQ6IEFkZGVkIG5ldyBBUEkuCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBuZXcgc2VjdGlvbi4KICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlczogQWRkZWQgZ2V0X3R5cGUg
ZnVuY3Rpb24uCgoyMDEyLTAyLTIxICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdh
bGlhLmNvbT4KCiAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYlVJQ2xpZW50J3MgcnVuT3BlblBh
bmVsIGluIFdlYktpdDJHVEsrCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc4NDkxCgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAg
ICAgICBIYW5kbGUgdGhlIEdTTGlzdCB0eXBlIGluIEdPd25QdHIsIGJ5IGNhbGxpbmcgZ19wdHJf
YXJyYXlfcmVmIGFuZAogICAgICAgIGdfcHRyX2FycmF5X3VucmVmIGluIHRoZSBpbXBsZW1lbnRh
dGlvbiBvZiB0aGUgcmVmR1B0ciBhbmQgdGhlCiAgICAgICAgZnJlZU93bmVkR1B0ciB0ZW1wbGF0
ZSBmdW5jdGlvbnMuCgogICAgICAgICogd3RmL2dvYmplY3QvR1JlZlB0ci5jcHA6CiAgICAgICAg
KFdURjo6cmVmR1B0cik6CiAgICAgICAgKFdURik6CiAgICAgICAgKFdURjo6ZGVyZWZHUHRyKToK
ICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuaDoKICAgICAgICAoV1RGKToKICAgICAgICAq
IHd0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oOgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgIHwgICAxOSArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2dvYmplY3QvR1JlZlB0ci5jcHAgICAgICB8ICAgMTMgKwogU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaCAgICAgICAgfCAgICAzICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmggICAgICB8ICAgIDEgKwogU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDg4ICsrKysrCiBT
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQg
KwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgfCAg
MzYzICsrKysrKysrKysrKysrKysrKysrCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0LmggICB8ICAgNzggKysrKysKIC4uLi9BUEkvZ3RrL1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdFByaXZhdGUuaCAgICAgIHwgICAyOCArKwogLi4uL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwICAgfCAgIDEwICstCiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCB8ICAgODQgKysrKysKIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCAgIHwgICAgOSArLQog
Li4uL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmggICAgICAgfCAgICAx
ICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sICAgIHwg
ICAgMSArCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4
dCB8ICAgMjQgKysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMg
ICAgICAgIHwgICAgMSArCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdl
YlZpZXcuY3BwICB8ICAxMDAgKysrKysrCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2Vi
Vmlld1Rlc3QuY3BwICAgICAgICB8ICAgMzEgKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmggIHwgICAgNCArCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay93ZWJraXQyLmggICAgICAgICB8ICAgIDMgKy0KIDIwIGZpbGVzIGNoYW5nZWQs
IDg2MCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaAoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDgxY2ZlY2MuLmRhMWMyYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAyLTIxICBNYXJpbyBTYW5jaGV6
IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQg
V2ViVUlDbGllbnQncyBydW5PcGVuUGFuZWwgaW4gV2ViS2l0MkdUSysKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NDkxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGFuZGxlIHRoZSBHU0xpc3QgdHlwZSBp
biBHT3duUHRyLCBieSBjYWxsaW5nIGdfcHRyX2FycmF5X3JlZiBhbmQKKyAgICAgICAgZ19wdHJf
YXJyYXlfdW5yZWYgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSByZWZHUHRyIGFuZCB0aGUK
KyAgICAgICAgZnJlZU93bmVkR1B0ciB0ZW1wbGF0ZSBmdW5jdGlvbnMuCisKKyAgICAgICAgKiB3
dGYvZ29iamVjdC9HUmVmUHRyLmNwcDoKKyAgICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAg
IChXVEYpOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHIpOgorICAgICAgICAqIHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgICogd3RmL2dvYmplY3QvR1R5cGVk
ZWZzLmg6CisKIDIwMTItMDItMTMgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBHU0xpc3QgdG8gdGhlIGxpc3Qgb2YgR09iamVj
dCB0eXBlcyBpbiBHT3duUHRyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2dvYmplY3QvR1JlZlB0ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3Qv
R1JlZlB0ci5jcHAKaW5kZXggMWNkMjJjNS4uOTk4NzlhMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZ29iamVjdC9HUmVmUHRyLmNwcApAQCAtODEsNiArODEsMTkgQEAgdGVtcGxh
dGUgPD4gdm9pZCBkZXJlZkdQdHIoR1NvdXJjZSogcHRyKQogICAgICAgICBnX3NvdXJjZV91bnJl
ZihwdHIpOwogfQogCit0ZW1wbGF0ZSA8PiBHUHRyQXJyYXkqIHJlZkdQdHIoR1B0ckFycmF5KiBw
dHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19wdHJfYXJyYXlfcmVmKHB0cik7CisgICAg
cmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1B0ckFycmF5KiBw
dHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19wdHJfYXJyYXlfdW5yZWYocHRyKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBFTkFCTEUoR0xJQl9TVVBQT1JUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVmUHRyLmgKaW5kZXggMTBlYmYw
Ny4uODIwM2NkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0
L0dSZWZQdHIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1JlZlB0
ci5oCkBAIC0yNiw3ICsyNiw2IEBACiAjaWYgRU5BQkxFKEdMSUJfU1VQUE9SVCkKIAogI2luY2x1
ZGUgIkFsd2F5c0lubGluZS5oIgotI2luY2x1ZGUgIkdSZWZQdHIuaCIKICNpbmNsdWRlICJSZWZQ
dHIuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKQEAgLTIwNSw2ICsyMDQsOCBAQCB0ZW1wbGF0
ZSA8PiBHVmFyaWFudCogcmVmR1B0cihHVmFyaWFudCogcHRyKTsKIHRlbXBsYXRlIDw+IHZvaWQg
ZGVyZWZHUHRyKEdWYXJpYW50KiBwdHIpOwogdGVtcGxhdGUgPD4gR1NvdXJjZSogcmVmR1B0cihH
U291cmNlKiBwdHIpOwogdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1NvdXJjZSogcHRyKTsK
K3RlbXBsYXRlIDw+IEdQdHJBcnJheSogcmVmR1B0cihHUHRyQXJyYXkqIHB0cik7Cit0ZW1wbGF0
ZSA8PiB2b2lkIGRlcmVmR1B0cihHUHRyQXJyYXkqIHB0cik7CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBpbmxpbmUgVCogcmVmR1B0cihUKiBwdHIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKaW5kZXggY2IzODQyYi4uNDRhY2QzMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HVHlwZWRlZnMuaApAQCAtNTQsNiAr
NTQsNyBAQCB0eXBlZGVmIHN0cnVjdCBfR0xpc3QgR0xpc3Q7CiB0eXBlZGVmIHN0cnVjdCBfR1Bh
dHRlcm5TcGVjIEdQYXR0ZXJuU3BlYzsKIHR5cGVkZWYgc3RydWN0IF9HUG9sbGFibGVPdXRwdXRT
dHJlYW0gR1BvbGxhYmxlT3V0cHV0U3RyZWFtOwogdHlwZWRlZiBzdHJ1Y3QgX0dTTGlzdCBHU0xp
c3Q7Cit0eXBlZGVmIHN0cnVjdCBfR1B0ckFycmF5IEdQdHJBcnJheTsKIHR5cGVkZWYgc3RydWN0
IF9HU29ja2V0Q2xpZW50IEdTb2NrZXRDbGllbnQ7CiB0eXBlZGVmIHN0cnVjdCBfR1NvY2tldENv
bm5lY3Rpb24gR1NvY2tldENvbm5lY3Rpb247CiB0eXBlZGVmIHN0cnVjdCBfR1NvdXJjZSBHU291
cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDY1ODIyMTYuLjM5OWQ0MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw5MSBAQAorMjAxMi0wMi0yMSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYlVJQ2xpZW50J3MgcnVuT3BlblBh
bmVsIGluIFdlYktpdDJHVEsrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODQ5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBhIG5ldyBwdWJsaWMgY2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0LCB0byBiZQorICAgICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2Vi
S2l0V2ViVmlldzo6cnVuLWZpbGUtY2hvb3NlciBzaWduYWwgdG8KKyAgICAgICAgbGV0IGNsaWVu
dCBhcHBsaWNhdGlvbnMgdG8gcHJvdmlkZSB0aGVpciBvd24gZmlsZSBjaG9vc2VyIGRpYWxvZwor
ICAgICAgICB3aGVuIHRoZSB1c2UgaW50ZXJhY3RzIHdpdGggSFRNTCBJbnB1dCBlbGVtZW50cyBv
ZiB0eXBlICdmaWxlJy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGRlZCBuZXcgc291
cmNlIGZpbGVzIGFuZCBoZWFkZXJzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoX1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdFByaXZhdGUpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2luaXQpOgorICAgICAgICAod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0RmluYWxpemUpOgorICAg
ICAgICAod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0R2V0UHJvcGVydHkpOgorICAgICAgICAod2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0Rmls
ZUNob29zZXJSZXF1ZXN0Q3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKToKKyAgICAgICAgKHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyk6CisgICAgICAgICh3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfY2FuY2VsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QuaDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0KToKKyAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0
ZS5oOiBBZGRlZCwKKyAgICAgICAgY29udGFpbmluZyB0aGUgcHJvdG90eXBlIG9mIHdlYmtpdEZp
bGVDaG9vc2VyUmVxdWVzdENyZWF0ZS4KKworICAgICAgICBQcm92aWRlIHByaXZhdGUgQVBJIHRv
IG1ha2UgYSBmaWxlIGNob29zZXIgcmVxdWVzdCBmcm9tIHRoZQorICAgICAgICBXZWJWaWV3LCBh
bmQgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlciBmb3IgaXQuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKGZpbGVDaG9vc2VyRGlhbG9n
UmVzcG9uc2VDYWxsYmFjayk6IEhhbmRsZXIgZm9yIHRoZSAncmVzcG9uc2UnCisgICAgICAgIHNp
Z25hbCBmb3IgdGhlIEd0a0ZpbGVDaG9vc2VyRGlhbG9nIHVzZWQgaW4gdGhlIGRlZmF1bHQKKyAg
ICAgICAgaGFuZGxlci4gSXQgd2lsbCBjYWxsIHRvIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9jaG9vc2VfZmlsZXMKKyAgICAgICAgb3Igd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nh
bmNlbCBhcyBuZWVkZWQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXIpOiBE
ZWZhdWx0IGhhbmRsZXIgZm9yIHRoZSBuZXcKKyAgICAgICAgJ3J1bi1maWxlLWNob29zZXInIHNp
Z25hbC4gSXQgd2lsbCBjcmVhdGUgYSBHdGtGaWxlQ2hvb3NlckRpYWxvZywKKyAgICAgICAgY29u
bmVjdCB0byB0aGUgJ3Jlc3BvbnNlJyBzaWduYWwgYW5kIHNob3cgaXQuCisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IENvbm5lY3QgdGhlICdydW4tZmlsZS1jaG9vc2VyJwor
ICAgICAgICBzaWduYWwgdG8gdGhlIGRlZmF1bHQgaGFuZGxlciwgd2Via2l0V2ViVmlld1J1bkZp
bGVDaG9vc2VyLgorICAgICAgICAod2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVxdWVzdCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAo
X1dlYktpdFdlYlZpZXdDbGFzcyk6IEFkZGVkIHByb3RvdHlwZSBmb3IgdGhlIGhhbmRsZXIgb2Yg
dGhlIG5ldworICAgICAgICAncnVuLWZpbGUtY2hvb3Nlcicgc2lnbmFsLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6IEFkZGVkIHByb3RvdHlwZSBm
b3IKKyAgICAgICAgcHJpdmF0ZSBuZXcgZnVuY3Rpb24gd2Via2l0V2ViVmlld1J1bkZpbGVDaG9v
c2VyUmVxdWVzdC4KKworICAgICAgICBQcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIGZvciBydW5P
cGVuUGFuZWwgaW4gV2ViS2l0VUlDbGllbnQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRVSUNsaWVudC5jcHA6CisgICAgICAgIChydW5PcGVuUGFuZWwpOiBOZXcsIGltcGxl
bWVudHMgcnVuT3BlblBhbmVsIGJ5IGNyZWF0aW5nIGFuCisgICAgICAgIGluc3RhbmNlIG9mIFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdCBhbmQgYXNraW5nIHRoZSBXZWJWaWV3IHRvCisgICAgICAg
IGVtaXQgdGhlICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwgd2l0aCBpdC4KKyAgICAgICAgKGF0
dGFjaFVJQ2xpZW50VG9WaWV3KTogUmVmZXJlbmNlIHRoZSBuZXcgcnVuT3BlblBhbmVsIGZ1bmN0
aW9uLgorCisgICAgICAgIEFkZGVkIHRoZSBuZXcgcHVibGljaCBoZWFkZXIgdG8gdGhlIG1haW4g
aGVhZGVyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOiBBZGRlZCBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaC4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0cyBmb3Ig
dGhlIG5ldyBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgQVBJLiBBbHNvLAorICAgICAgICBleHRl
bmRlZCB0aGUgV2ViVmlld1Rlc3QgY2xhc3MgdG8gYWxsb3cgc2ltdWxhdGluZyBtb3VzZSBjbGlj
a3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmll
dy5jcHA6CisgICAgICAgIChjaGVja01pbWVUeXBlRm9yRmlsdGVyKTogTmV3LCBjaGVja3Mgd2hl
dGhlciBhIEd0a0ZpbGVGaWx0ZXIKKyAgICAgICAgZmlsdGVycyBhIGdpdmVuIE1JTUUgdHlwZSwg
YXMgc3BlY2lmaWVkIGJ5IFJGQyAyMDQ2LgorICAgICAgICAodGVzdFdlYlZpZXdGaWxlQ2hvb3Nl
clJlcXVlc3QpOiBOZXcgdW5pdCB0ZXN0LgorICAgICAgICAoYmVmb3JlQWxsKTogQWRkIHRoZSBu
ZXcgdW5pdCB0ZXN0IGFzIGFuIFVJQ2xpZW50VGVzdC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojptb3Vz
ZUJ1dHRvbkNsaWNrKTogTmV3IHB1YmxpYyBmdW5jdGlvbiB0byBzaW11bGF0ZSBhCisgICAgICAg
IG1vdXNlIGNsaWNrIHRocm91Z2ggR2RrRXZlbnRzLCBhcyB0aGUgY29tYmluYXRpb24gb2YgYSAn
cHJlc3MnIGFuZAorICAgICAgICBhICdyZWxlYXNlJyBldmVudC4gVXNlZCBmcm9tIHRoZSBuZXcg
dW5pdCB0ZXN0IHRvIHNpbXVsYXRlIHRoZQorICAgICAgICB1c2VyIHByZXNzaW5nIGluIHRoZSBi
dXR0b24gcmVuZGVyZWQgZm9yIGEgSFRNTCBJbnB1dCBlbGVtZW50LgorICAgICAgICAoV2ViVmll
d1Rlc3Q6Om1vdXNlQnV0dG9uRXZlbnQpOiBOZXcgcHJpdmF0ZSBmdW5jdGlvbiB0byBzaW11bGF0
ZQorICAgICAgICBhIG1vdXNlIGV2ZW50IHRocm91Z2ggR2RrRXZlbnRzLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0Lmg6CisKKyAgICAgICAgVXBkYXRlZCBk
b2N1bWVudGF0aW9uIHJlbGF0ZWQgZmlsZXMgd2l0aCB0aGUgbmV3IEFQSS4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6IEFkZGVkIG5l
dyBBUEkuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Mu
c2dtbDogQWRkZWQgbmV3IHNlY3Rpb24uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLnR5cGVzOiBBZGRlZCBnZXRfdHlwZSBmdW5jdGlvbi4KKwogMjAxMi0wMi0w
NiAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8a3Vib0Bwcm9mdXNpb24ubW9iaT4KIAogICAgICAg
ICBbRUZMXSBEcm9wIHN1cHBvcnQgZm9yIHRoZSBDdXJsIG5ldHdvcmsgYmFja2VuZC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUuYW0KaW5kZXggM2I4ZTdiZC4uY2QzYTZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0K
QEAgLTkwLDYgKzkwLDcgQEAgbGlid2Via2l0Mmd0a2luY2x1ZGVfSEVBREVSUyA9IFwKIAkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmggXAogCSQoV2ViS2l0MikvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5oIFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oIFwKKwkkKFdlYktp
dDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIFwKIAkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uLmggXAogCSQoV2Vi
S2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvbi5oIFwK
IAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmggXApAQCAtNTQ4
LDYgKzU0OSw5IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBf
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvblByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmggXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24u
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNp
c2lvbi5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lE
ZWNpc2lvblByaXZhdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDk1ZjlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcApA
QCAtMCwwICsxLDM2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmgi
CisKKyNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViT3BlblBhbmVsUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3Rl
bS5oPgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKKworLyoqCisgKiBTRUNUSU9OOiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQSByZXF1ZXN0IHRvIG9wZW4gYSBmaWxlIGNob29z
ZXIKKyAqIEBUaXRsZTogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNX
ZWJLaXRXZWJWaWV3CisgKgorICogV2hlbmV2ZXIgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggYSAm
bHQ7aW5wdXQgdHlwZT0nZmlsZScgLyZndDsgSFRNTAorICogZWxlbWVudCwgV2ViS2l0IHdpbGwg
bmVlZCB0byBzaG93IGEgZGlhbG9nIHRvIGNob29zZSBvbmUgb3IgbW9yZQorICogZmlsZXMgdG8g
YmUgdXBsb2FkZWQgdG8gdGhlIHNlcnZlciBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZSBmb3Jt
CisgKiBkYXRhLiBGb3IgdGhhdCB0byBoYXBwZW4gaW4gYSBnZW5lcmFsIHdheSwgaW5zdGVhZCBv
ZiBqdXN0IG9wZW5pbmcKKyAqIGEgI0d0a0ZpbGVDaG9vc2VyRGlhbG9nICh3aGljaCBtaWdodCBi
ZSBub3QgZGVzaXJhYmxlIGluIHNvbWUKKyAqIHNwZWNpZmljIHBsYXRmb3Jtcywgd2hpY2ggY291
bGQgcHJlZmVyIHRvIHVzZSB0aGVpciBvd24gZmlsZQorICogY2hvb3NlciBkaWFsb2cpLCBXZWJL
aXQgd2lsbCBmaXJlIHRoZQorICogI1dlYktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29zZXIgc2ln
bmFsIHdpdGggYQorICogI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBvYmplY3QsIHdoaWNoIHdp
bGwgYWxsb3cgdGhlIGNsaWVudAorICogYXBwbGljYXRpb24gdG8gc3BlY2lmeSB0aGUgZmlsZXMg
dG8gYmUgc2VsZWN0ZWQsIHRvIGluc3BlY3QgdGhlCisgKiBkZXRhaWxzIGZyb20gdGhlIHJlcXVl
c3QgKGUuZy4gaWYgbXVsdGlwbGUgc2VsZWN0aW9uIHNob3VsZCBiZQorICogYWxsb3dlZCkgYW5k
IHRvIGNhbmNlbCB0aGUgcmVxdWVzdCwgaW4gY2FzZSBub3RoaW5nIHdhcyBmaW5hbGx5CisgKiBi
ZWluZyBzZWxlY3RlZC4KKyAqCisgKiBJbiBjYXNlIHRoZSBjbGllbnQgYXBwbGljYXRpb24gZG8g
bm90IHdpc2ggdG8gaGFuZGxlIHRoaXMgc2lnbmFsLAorICogV2ViS2l0IHdpbGwgcHJvdmlkZSBh
IGRlZmF1bHQgaGFuZGxlciB3aGljaCB3aWxsIGFzeW5jaHJvbm91c2x5IHJ1bgorICogYSByZWd1
bGFyICNHdGtGaWxlQ2hvb3NlckRpYWxvZyBmb3IgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aC4K
KyAqLworR19ERUZJTkVfVFlQRShXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QsIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdCwgR19UWVBFX09CSkVDVCkKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3RQcml2YXRlIHsKKyAgICBXS1JldGFpblB0cjxXS09wZW5QYW5lbFBhcmFtZXRl
cnNSZWY+IHdrUGFyYW1ldGVyczsKKyAgICBXS1JldGFpblB0cjxXS09wZW5QYW5lbFJlc3VsdExp
c3RlbmVyUmVmPiB3a0xpc3RlbmVyOworICAgIEdSZWZQdHI8R3RrRmlsZUZpbHRlcj4gZmlsdGVy
OworICAgIEdSZWZQdHI8R1B0ckFycmF5PiBtaW1lVHlwZXM7CisgICAgR1JlZlB0cjxHUHRyQXJy
YXk+IHNlbGVjdGVkRmlsZXM7CisgICAgYm9vbCBoYW5kbGVkUmVxdWVzdDsKK307CisKK2VudW0g
eworICAgIFBST1BfMCwKKyAgICBQUk9QX0FMTE9XU19NVUxUSVBMRV9TRUxFQ1RJT04sCisgICAg
UFJPUF9GSUxURVIsCisgICAgUFJPUF9NSU1FX1RZUEVTLAorICAgIFBST1BfU0VMRUNURURfRklM
RVMsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdChX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmVxdWVzdC0+cHJpdiA9
IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9GSUxFX0NI
T09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSk7CisgICAgbmV3
IChyZXF1ZXN0LT5wcml2KSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRf
RklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqZWN0KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVx
dWVzdCBpcyBhbHdheXMgaGFuZGxlZCBiZWZvcmUgZmluYWxpemluZy4KKyAgICBpZiAoIXJlcXVl
c3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0KQorICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY2FuY2VsKHJlcXVlc3QpOworCisgICAgcmVxdWVzdC0+cHJpdi0+fldlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0R2V0UHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykK
K3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9D
SE9PU0VSX1JFUVVFU1Qob2JqZWN0KTsKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2Ug
UFJPUF9BTExPV1NfTVVMVElQTEVfU0VMRUNUSU9OOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29s
ZWFuKHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3Nl
bGVjdGlvbihyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GSUxURVI6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9NSU1FX1RZUEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2YWx1
ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVEVEX0ZJTEVTOgorICAgICAgICBn
X3ZhbHVlX3NldF9ib3hlZCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9z
ZWxlY3RlZF9maWxlcyhyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwg
cGFyYW1TcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2xhc3NfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6
ZSA9IHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXplOworICAgIG9iamVjdENsYXNzLT5n
ZXRfcHJvcGVydHkgPSB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RHZXRQcm9wZXJ0eTsKKyAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUocmVxdWVzdENsYXNzLCBzaXplb2YoV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0UHJpdmF0ZSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0OmFsbG93cy1tdWx0aXBsZS1zZWxlY3Rpb246CisgICAgICoKKyAgICAgKiBXaGV0
aGVyIHRoZSBmaWxlIGNob29zZXIgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZQorICAg
ICAqIGZpbGVzLiBTZWUKKyAgICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dz
X211bHRpcGxlX3NlbGVjdGlvbigpIGZvcgorICAgICAqIG1vcmUgZGV0YWlscy4KKyAgICAgKi8K
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9BTExPV1NfTVVMVElQTEVfU0VMRUNU
SU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Jv
b2xlYW4oImFsbG93cy1tdWx0aXBsZS1zZWxlY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkFsbG93cyBtdWx0aXBsZSBmaWxl
IHNlbGVjdGlvbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIldoZXRoZXIgdGhlIGZpbGUgY2hvb3NlciBzaG91bGQgYWxsb3cgc2Vs
ZWN0aW5nIG11bHRpcGxlIGZpbGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Cisg
ICAgLyoqCisgICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OmZpbHRlcjoKKyAgICAgKgor
ICAgICAqIFRoZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdC4g
U2VlCisgICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2Zp
bHRlcigpIGZvciBtb3JlCisgICAgICogZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJPUF9GSUxURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJmaWx0ZXIiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTUlNRSB0eXBlcyBmaWx0ZXIi
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8oIlRoZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RL
X1RZUEVfRklMRV9GSUxURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAvKioKKyAgICAg
KiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6bWltZS10eXBlczoKKyAgICAgKgorICAgICAqIEEg
JU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YK
KyAgICAgKiAibWVkaWEgdHlwZXMiIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHNob3VsZCBoYW5k
bGUuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
cygpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfTUlNRV9UWVBFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19ib3hlZCgibWltZS10eXBlcyIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJNSU1FIHR5cGVzIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbGlz
dCBvZiBNSU1FIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUlYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3Q6c2VsZWN0ZWQtZmlsZXM6CisgICAgICoKKyAgICAgKiBBICVOVUxMLXRlcm1pbmF0
ZWQgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBsaXN0IG9mCisgICAgICogc2VsZWN0
ZWQgZmlsZXMgY3VycmVudGx5IGFzc29jaWF0ZWQgdG8gdGhlIHJlcXVlc3QuIFNlZQorICAgICAq
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoKSBmb3IgbW9y
ZSBkZXRhaWxzLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
b2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NF
TEVDVEVEX0ZJTEVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX2JveGVkKCJzZWxlY3RlZC1maWxlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWxlY3RlZCBmaWxlcyIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxp
c3Qgb2Ygc2VsZWN0ZWQgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVf
U1RSViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworfQorCitXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QqIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdENyZWF0ZShXS09wZW5QYW5lbFBhcmFtZXRlcnNS
ZWYgd2tQYXJhbWV0ZXJzLCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIHdrTGlzdGVuZXIp
Cit7CisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVR
VUVTVCwgTlVMTCkpOworICAgIHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycyA9IHdrUGFyYW1l
dGVyczsKKyAgICByZXF1ZXN0LT5wcml2LT53a0xpc3RlbmVyID0gd2tMaXN0ZW5lcjsKKyAgICBy
ZXR1cm4gcmVxdWVzdDsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
YWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbjoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QKKyAqCisgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZmlsZSBjaG9vc2VyIGFz
c29jaWF0ZWQgdG8gdGhpcworICogI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBzaG91bGQgYWxs
b3cgc2VsZWN0aW5nIG11bHRpcGxlIGZpbGVzLAorICogd2hpY2ggZGVwZW5kcyBvbiB0aGUgSFRN
TCBJbnB1dCBlbGVtZW50IGhhdmluZyBhICdtdWx0aXBsZScKKyAqIGF0dHJpYnV0ZSBkZWZpbmVk
LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBmaWxlIGNob29zZXIgc2hvdWxkIGFsbG93
IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcyBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICovCitnYm9v
bGVhbiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlv
bihXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCBGQUxTRSk7
CisgICAgcmV0dXJuIFdLT3BlblBhbmVsUGFyYW1ldGVyc0dldEFsbG93c011bHRpcGxlRmlsZXMo
cmVxdWVzdC0+cHJpdi0+d2tQYXJhbWV0ZXJzLmdldCgpKTsKK30KKworLyoqCisgKiB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXM6CisgKiBAcmVxdWVzdDogYSAjV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogR2V0IHRoZSBsaXN0IG9mICJtZWRpYSB0eXBl
cyIgdGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgc2hvdWxkCisgKiBoYW5kbGUsIGluIHRoZSBmb3Jt
YXQgc3BlY2lmaWVkIGluIFJGQyAyMDQ2LiBJdHMgY29udGVudHMgZGVwZW5kIG9uCisgKiB0aGUg
dmFsdWUgb2YgdGhlICdhY2NlcHQnIGF0dHJpYnV0ZSBmb3IgSFRNTCBJbnB1dCBlbGVtZW50cy4K
KyAqCisgKiBSZXR1cm5zOiAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpICh0cmFuc2ZlciBub25l
KTogYQorICogJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGlmIGEgbGlzdCBvZiBh
Y2NlcHRlZCBNSU1FIHR5cGVzCisgKiBpcyBkZWZpbmVkIG9yICVOVUxMIG90aGVyd2lzZS4gVGhp
cyBhcnJheSBhbmQgaXRzIGNvbnRlbnRzIGFyZSBvd25lZAorICogYnkgV2ViS2l0R1RLKyBhbmQg
c2hvdWxkIG5vdCBiZSBtb2RpZmllZCBvciBmcmVlZC4KKyAqLworY29uc3QgZ2NoYXIqIGNvbnN0
KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisgICAgaWYgKHJlcXVlc3Qt
PnByaXYtPm1pbWVUeXBlcykKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIq
Kj4ocmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzLT5wZGF0YSk7CisKKyAgICBXS1JldGFpblB0cjxX
S0FycmF5UmVmPiB3a01pbWVUeXBlcyhBZG9wdFdLLCBXS09wZW5QYW5lbFBhcmFtZXRlcnNDb3B5
QWNjZXB0ZWRNSU1FVHlwZXMocmVxdWVzdC0+cHJpdi0+d2tQYXJhbWV0ZXJzLmdldCgpKSk7Cisg
ICAgc2l6ZV90IG51bU9mTWltZVR5cGVzID0gV0tBcnJheUdldFNpemUod2tNaW1lVHlwZXMuZ2V0
KCkpOworICAgIGlmICghbnVtT2ZNaW1lVHlwZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRo
X2ZyZWVfZnVuYyhnX2ZyZWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mTWlt
ZVR5cGVzOyArK2kpIHsKKyAgICAgICAgV0tTdHJpbmdSZWYgd2tNaW1lVHlwZSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tNaW1lVHlwZXMuZ2V0KCks
IGkpKTsKKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlU3RyaW5nID0gdG9JbXBsKHdrTWltZVR5cGUp
LT5zdHJpbmcoKTsKKyAgICAgICAgaWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+
bWltZVR5cGVzLmdldCgpLCBnX3N0cmR1cChtaW1lVHlwZVN0cmluZy51dGY4KCkuZGF0YSgpKSk7
CisgICAgfQorICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMuZ2V0
KCksIDApOworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVxdWVzdC0+
cHJpdi0+bWltZVR5cGVzLT5wZGF0YSk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcjoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGZpbHRlciBjdXJyZW50bHkgYXNzb2Np
YXRlZCB3aXRoIHRoZSByZXF1ZXN0LCBhbHJlYWR5IHNldAorICogdXAgd2l0aCB0aGUgbGlzdCBv
ZiBtZWRpYSB0eXBlcyBhcyByZXR1cm5lZCBieQorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9taW1lX3R5cGVzLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSAj
R3RrRmlsZUZpbHRlciBpZiBhIGxpc3Qgb2YgYWNjZXB0ZWQKKyAqIE1JTUUgdHlwZXMgaXMgZGVm
aW5lZCBvciAlTlVMTCBvdGhlcndpc2UuIFRoZSByZXR1cm5lZCBvYmplY3QgaXMKKyAqIG93bmVk
IGJ5IFdlYktpdEdUSysgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBvciBmcmVlZC4KKyAqLworR3Rr
RmlsZUZpbHRlciogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2Zp
bHRlcihXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsK
KyAgICBpZiAocmVxdWVzdC0+cHJpdi0+ZmlsdGVyKQorICAgICAgICByZXR1cm4gcmVxdWVzdC0+
cHJpdi0+ZmlsdGVyLmdldCgpOworCisgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gd2tNaW1l
VHlwZXMoQWRvcHRXSywgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzQ29weUFjY2VwdGVkTUlNRVR5cGVz
KHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycy5nZXQoKSkpOworICAgIHNpemVfdCBudW1PZk1p
bWVUeXBlcyA9IFdLQXJyYXlHZXRTaXplKHdrTWltZVR5cGVzLmdldCgpKTsKKyAgICBpZiAoIW51
bU9mTWltZVR5cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIERvIG5vdCB1c2UgYWRv
cHRHUmVmIGhlcmUsIHNpbmNlIHdlIHdhbnQgdG8gc2luayB0aGUgZmxvYXRpbmcKKyAgICAvLyBy
ZWZlcmVuY2UgZm9yIHRoZSBuZXcgaW5zdGFuY2Ugb2YgR3RrRmlsZUZpbHRlciwgc28gd2UgbWFr
ZQorICAgIC8vIHN1cmUgd2Uga2VlcCB0aGUgb3duZXJzaGlwIGR1cmluZyB0aGUgbGlmZXRpbWUg
b2YgdGhlIHJlcXVlc3QuCisgICAgcmVxdWVzdC0+cHJpdi0+ZmlsdGVyID0gZ3RrX2ZpbGVfZmls
dGVyX25ldygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZNaW1lVHlwZXM7ICsr
aSkgeworICAgICAgICBXS1N0cmluZ1JlZiB3a01pbWVUeXBlID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a01pbWVUeXBlcy5nZXQoKSwgaSkpOworICAg
ICAgICBTdHJpbmcgbWltZVR5cGVTdHJpbmcgPSB0b0ltcGwod2tNaW1lVHlwZSktPnN0cmluZygp
OworICAgICAgICBpZiAobWltZVR5cGVTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGd0a19maWxlX2ZpbHRlcl9hZGRfbWltZV90eXBlKHJlcXVlc3QtPnBy
aXYtPmZpbHRlci5nZXQoKSwgbWltZVR5cGVTdHJpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgfQor
CisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPmZpbHRlci5nZXQoKTsKK30KKworLyoqCisgKiB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX2ZpbGVzOgorICogQHJlcXVlc3Q6IGEg
I1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICogQGZpbGVzOiAoYXJyYXkgemVyby10ZXJtaW5h
dGVkPTEpICh0cmFuc2ZlciBub25lKTogYQorICogJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBz
dHJpbmdzLCBjb250YWluaW5nIHBhdGhzIHRvIGxvY2FsIGZpbGVzLgorICoKKyAqIEFzayBXZWJL
aXQgdG8gY2hvb3NlIGxvY2FsIGZpbGVzIGZvciB1cGxvYWQgYW5kIGNvbXBsZXRlIHRoZQorICog
cmVxdWVzdC4KKyAqLwordm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX2Zp
bGVzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgY29uc3QgZ2NoYXIqIGNvbnN0
KiBmaWxlcykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJf
UkVRVUVTVChyZXF1ZXN0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChmaWxlcyk7CisKKyAgICBX
S1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gd2tDaG9zZW5GaWxlcyhBZG9wdFdLLCBXS011
dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgZmlsZXNbaV07IGkrKykg
eworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZpbGUgcGF0aCBpcyBwcmVzZW50ZWQgYXMgYW4g
VVJJIChlc2NhcGVkCisgICAgICAgIC8vIHN0cmluZywgd2l0aCB0aGUgJ2ZpbGU6Ly8nIHByZWZp
eCkgdG8gV2ViQ29yZSBvdGhlcndpc2UgdGhlCisgICAgICAgIC8vIEZpbGVDaG9vc2VyIHdvbid0
IGFjdHVhbGx5IGNob29zZSBpdC4KKyAgICAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZW5hbWUgPSBh
ZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChmaWxlc1tpXSkpOworICAgICAgICBHT3duUHRy
PGNoYXI+IHVyaShnX2ZpbGVfZ2V0X3VyaShmaWxlbmFtZS5nZXQoKSkpOworICAgICAgICBXS1Jl
dGFpblB0cjxXS1VSTFJlZj4gd2tVUkwoQWRvcHRXSywgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJp
bmcodXJpLmdldCgpKSk7CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHdrQ2hvc2VuRmlsZXMu
Z2V0KCksIHdrVVJMLmdldCgpKTsKKyAgICB9CisgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
ckNob29zZUZpbGVzKHJlcXVlc3QtPnByaXYtPndrTGlzdGVuZXIuZ2V0KCksIHdrQ2hvc2VuRmls
ZXMuZ2V0KCkpOworICAgIHJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0ID0gdHJ1ZTsKK30K
KworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVz
OgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIEdldCB0
aGUgbGlzdCBvZiBzZWxlY3RlZCBmaWxlcyBjdXJyZW50bHkgYXNzb2NpYXRlZCB0byB0aGUKKyAq
IHJlcXVlc3QuIFRoaXMgbGlzdCB3aWxsIG5vcm1hbGx5IGJlIGVtcHR5IHdpdGggdGhlIGZpcnN0
CisgKiByZXF1ZXN0IGFuZCB3aWxsIGNvbnRhaW4gdGhlIGxpc3Qgb2YgZmlsZXMgcHJldmlvdXNs
eSBzZWxlY3RlZCwKKyAqIGlmIGFueSwgaW4gZnVydGhlciByZXF1ZXN0cyBvdmVyIHRoZSBzYW1l
IEhUTUwgSW5wdXQgRWxlbWVudC4KKyAqCisgKiBSZXR1cm5zOiAoYXJyYXkgemVyby10ZXJtaW5h
dGVkPTEpICh0cmFuc2ZlciBub25lKTogYQorICogJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBz
dHJpbmdzIGlmIHRoZXJlIGFyZSBzZWxlY3RlZCBmaWxlcworICogYXNzb2NpYXRlZCB3aXRoIHRo
ZSByZXF1ZXN0IG9yICVOVUxMIG90aGVyd2lzZS4gVGhpcyBhcnJheSBhbmQgaXRzCisgKiBjb250
ZW50cyBhcmUgb3duZWQgYnkgV2ViS2l0R1RLKyBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBv
cgorICogZnJlZWQuCisgKi8KK2NvbnN0IGdjaGFyKiBjb25zdCogd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NF
Ul9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRG
aWxlcykKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVxdWVzdC0+
cHJpdi0+c2VsZWN0ZWRGaWxlcy0+cGRhdGEpOworCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4g
c2VsZWN0ZWRGaWxlTmFtZXMgPSB0b0ltcGwocmVxdWVzdC0+cHJpdi0+d2tQYXJhbWV0ZXJzLmdl
dCgpKS0+c2VsZWN0ZWRGaWxlTmFtZXMoKTsKKyAgICBzaXplX3QgbnVtT2ZGaWxlcyA9IHNlbGVj
dGVkRmlsZU5hbWVzLnNpemUoKTsKKyAgICBpZiAoIW51bU9mRmlsZXMpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcyA9IGFkb3B0R1JlZihnX3B0
cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19mcmVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1PZkZpbGVzOyArK2kpIHsKKyAgICAgICAgaWYgKHNlbGVjdGVkRmlsZU5hbWVz
W2ldLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBDU3RyaW5nIGZp
bGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNlbGVjdGVkRmlsZU5hbWVzW2ldKTsK
KyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMuZ2V0
KCksIGdfc3RyZHVwKGZpbGVuYW1lLmRhdGEoKSkpOworICAgIH0KKyAgICBnX3B0cl9hcnJheV9h
ZGQocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgMCk7CisKKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5w
ZGF0YSk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbDoK
KyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBBc2sgV2Vi
S2l0IHRvIGNhbmNlbCB0aGUgcmVxdWVzdC4gSXQncyBpbXBvcnRhbnQgdG8gZG8gdGhpcyBpbiBj
YXNlCisgKiBubyBzZWxlY3Rpb24gaGFzIGJlZW4gbWFkZSBpbiB0aGUgY2xpZW50LCBvdGhlcndp
c2UgdGhlIHJlcXVlc3QKKyAqIHdvbid0IGJlIHByb3Blcmx5IGNvbXBsZXRlZCBhbmQgdGhlIGJy
b3dzZXIgd2lsbCBrZWVwIHRoZSByZXF1ZXN0CisgKiBwZW5kaW5nIGZvcmV2ZXIsIHdoaWNoIG1p
Z2h0IGNhdXNlIHRoZSBicm93c2VyIHRvIGhhbmcuCisgKi8KK3ZvaWQgd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2NhbmNlbChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVx
dWVzdCkpOworICAgIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJDYW5jZWwocmVxdWVzdC0+cHJp
di0+d2tMaXN0ZW5lci5nZXQoKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3Qg
PSB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hNzA2NTY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmgKQEAgLTAsMCArMSw3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19X
RUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJy
b3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgor
I2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0X2gKKyNkZWZpbmUgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0X2gKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUICAgICAgICAgICAgKHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JF
UVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwg
V0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVF9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9GSUxFX0NIT09T
RVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBXRUJL
SVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QpKQorI2Rl
ZmluZSBXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVF
U1QpKQorI2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRklMRV9DSE9P
U0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKSkKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAgICAgICAgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzICAg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlOwor
CitzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7
CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2
YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyB7
CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZSAgICAgICAgICAgICAgICAgICAo
dm9pZCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpy
ZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqIGNvbnN0ICoKK3dlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyAgICAgICAgICAgICAoV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBHdGtGaWxlRmlsdGVyICoKK3dl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIgICAgICAoV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX2ZpbGVzICAgICAgICAgICAgICAgKFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBjb25zdCAgICAgICpm
aWxlcyk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKiBjb25zdCAqCit3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzICAgICAgICAgKFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2NhbmNlbCAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3QgKnJlcXVlc3QpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hZjcyMjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCIKKyNpbmNs
dWRlICJXZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogd2Via2l0
RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKFdLT3BlblBhbmVsUGFyYW1ldGVyc1JlZiwgV0tPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lclJlZik7CisKKyNlbmRpZiAvLyBXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3RQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFVJQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFVJQ2xpZW50LmNwcAppbmRleCBlNzYyMTJkLi40NGUyODgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCkBAIC0y
MCwxMiArMjAsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRVSUNs
aWVudC5oIgogCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldl
YktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKQEAgLTEzMSw2ICsxMzMs
MTIgQEAgc3RhdGljIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV0tQYWdlUmVmIHBhZ2Us
IFdLSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmUKICAgICB3ZWJraXRXZWJWaWV3TW91c2VUYXJn
ZXRDaGFuZ2VkKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSwgaGl0VGVzdFJlc3VsdCwgd2tF
dmVudE1vZGlmaWVyc1RvR2RrTW9kaWZpZXJzKG1vZGlmaWVycykpOwogfQogCitzdGF0aWMgdm9p
ZCBydW5PcGVuUGFuZWwoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLT3BlblBh
bmVsUGFyYW1ldGVyc1JlZiBwYXJhbWV0ZXJzLCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVm
IGxpc3RlbmVyLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIEdSZWZQdHI8V2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdEZpbGVDaG9vc2Vy
UmVxdWVzdENyZWF0ZShwYXJhbWV0ZXJzLCBsaXN0ZW5lcikpOworICAgIHdlYmtpdFdlYlZpZXdS
dW5GaWxlQ2hvb3NlclJlcXVlc3QoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCByZXF1ZXN0
LmdldCgpKTsKK30KKwogdm9pZCBhdHRhY2hVSUNsaWVudFRvVmlldyhXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQogewogICAgIFdLUGFnZVVJQ2xpZW50IHdrVUlDbGllbnQgPSB7CkBAIC0xNjQsNyAr
MTcyLDcgQEAgdm9pZCBhdHRhY2hVSUNsaWVudFRvVmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
KQogICAgICAgICAwLCAvLyBkaWREcmF3CiAgICAgICAgIDAsIC8vIHBhZ2VEaWRTY3JvbGwKICAg
ICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1b3RhCi0gICAgICAgIDAsIC8vIHJ1bk9wZW5Q
YW5lbAorICAgICAgICBydW5PcGVuUGFuZWwsCiAgICAgICAgIDAsIC8vIGRlY2lkZVBvbGljeUZv
ckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKICAgICAgICAgMCwgLy8gaGVhZGVySGVpZ2h0
CiAgICAgICAgIDAsIC8vIGZvb3RlckhlaWdodApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCBhZjc5OTM1Li44YjgwYmNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcApAQCAtNTksNiArNTksNyBAQCBlbnVtIHsKICAgICBTQ1JJUFRfUFJPTVBULAogCiAgICAg
REVDSURFX1BPTElDWSwKKyAgICBSVU5fRklMRV9DSE9PU0VSLAogCiAgICAgTU9VU0VfVEFSR0VU
X0NIQU5HRUQsCiAKQEAgLTE2MCw2ICsxNjEsNTEgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdl
YlZpZXdEZWNpZGVQb2xpY3koV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9uKgog
ICAgIHJldHVybiBUUlVFOwogfQogCitzdGF0aWMgdm9pZCBmaWxlQ2hvb3NlckRpYWxvZ1Jlc3Bv
bnNlQ2FsbGJhY2soR3RrRGlhbG9nKiBkaWFsb2csIGdpbnQgcmVzcG9uc2VJRCwgV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0PiBhZG9wdGVkUmVxdWVzdCA9IGFkb3B0R1JlZihyZXF1ZXN0KTsKKyAgICBpZiAo
cmVzcG9uc2VJRCA9PSBHVEtfUkVTUE9OU0VfQUNDRVBUKSB7CisgICAgICAgIEdPd25QdHI8R1NM
aXN0PiBmaWxlc0xpc3QoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZW5hbWVzKEdUS19GSUxFX0NI
T09TRVIoZGlhbG9nKSkpOworICAgICAgICBHUmVmUHRyPEdQdHJBcnJheT4gZmlsZXNBcnJheSA9
IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXcoKSk7CisgICAgICAgIGZvciAoR1NMaXN0KiBmaWxl
ID0gZmlsZXNMaXN0LmdldCgpOyBmaWxlOyBmaWxlID0gZ19zbGlzdF9uZXh0KGZpbGUpKQorICAg
ICAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGZpbGVzQXJyYXkuZ2V0KCksIGZpbGUtPmRhdGEpOwor
ICAgICAgICBnX3B0cl9hcnJheV9hZGQoZmlsZXNBcnJheS5nZXQoKSwgMCk7CisgICAgICAgIHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMoYWRvcHRlZFJlcXVlc3QuZ2V0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ2NoYXIqIGNvbnN0Kj4oZmlsZXNBcnJheS0+cGRh
dGEpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nh
bmNlbChhZG9wdGVkUmVxdWVzdC5nZXQoKSk7CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RL
X1dJREdFVChkaWFsb2cpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdSdW5G
aWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QqIHJlcXVlc3QpCit7CisgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0
X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGlmICghd2lkZ2V0SXNPbnNjcmVl
blRvcGxldmVsV2luZG93KHRvcGxldmVsKSkKKyAgICAgICAgdG9wbGV2ZWwgPSAwOworCisgICAg
Z2Jvb2xlYW4gYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbihyZXF1ZXN0KTsKKyAgICBHdGtXaWRnZXQq
IGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyhhbGxvd3NNdWx0aXBsZVNlbGVj
dGlvbiA/IF8oIlNlbGVjdCBGaWxlcyBmb3IgVXBsb2FkIikgOiBfKCJTZWxlY3QgRmlsZSBmb3Ig
VXBsb2FkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9wbGV2ZWwgPyBHVEtfV0lORE9XKHRvcGxldmVsKSA6IDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0ZJTEVfQ0hPT1NFUl9B
Q1RJT05fT1BFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHVEtfU1RPQ0tfQ0FOQ0VMLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVE9DS19PUEVO
LCBHVEtfUkVTUE9OU0VfQUNDRVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0
KTsKKyAgICBpZiAoZmlsdGVyKQorICAgICAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9maWx0ZXIo
R1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBmaWx0ZXIpOworICAgIGd0a19maWxlX2Nob29zZXJf
c2V0X3NlbGVjdF9tdWx0aXBsZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIGFsbG93c011bHRp
cGxlU2VsZWN0aW9uKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7
CisgICAgaWYgKHNlbGVjdGVkRmlsZXMpCisgICAgICAgIGd0a19maWxlX2Nob29zZXJfc2VsZWN0
X2ZpbGVuYW1lKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSwgc2VsZWN0ZWRGaWxlc1swXSk7CisK
KyAgICBnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywgInJlc3BvbnNlIiwgR19DQUxMQkFDSyhmaWxl
Q2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2spLCBnX29iamVjdF9yZWYocmVxdWVzdCkpOwor
ICAgIGd0a193aWRnZXRfc2hvdyhkaWFsb2cpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKIHN0
YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiB7CiAg
ICAgaWYgKEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19wYXJlbnRfY2xhc3MpLT5jb25z
dHJ1Y3RlZCkKQEAgLTI2Myw2ICszMDksNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
Y2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICB3ZWJWaWV3
Q2xhc3MtPnNjcmlwdF9jb25maXJtID0gd2Via2l0V2ViVmlld1NjcmlwdENvbmZpcm07CiAgICAg
d2ViVmlld0NsYXNzLT5zY3JpcHRfcHJvbXB0ID0gd2Via2l0V2ViVmlld1NjcmlwdFByb21wdDsK
ICAgICB3ZWJWaWV3Q2xhc3MtPmRlY2lkZV9wb2xpY3kgPSB3ZWJraXRXZWJWaWV3RGVjaWRlUG9s
aWN5OworICAgIHdlYlZpZXdDbGFzcy0+cnVuX2ZpbGVfY2hvb3NlciA9IHdlYmtpdFdlYlZpZXdS
dW5GaWxlQ2hvb3NlcjsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSh3ZWJWaWV3Q2xh
c3MsIHNpemVvZihXZWJLaXRXZWJWaWV3UHJpdmF0ZSkpOwogCkBAIC02MjMsNiArNjcwLDM3IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFz
cyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfUE9MSUNZ
X0RFQ0lTSU9OX1RZUEUpOwogCiAgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6cnVuLWZp
bGUtY2hvb3NlcjoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvbiB3aGlj
aCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAcmVxdWVzdDogYSAjV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0CisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4g
dGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggYSAmbHQ7aW5wdXQKKyAgICAgKiB0eXBlPSdmaWxlJyAv
Jmd0OyBIVE1MIGVsZW1lbnQsIHJlcXVlc3RpbmcgZnJvbSBXZWJLaXQgdG8gc2hvdworICAgICAq
IGEgZGlhbG9nIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBmaWxlcyB0byBiZSB1cGxvYWRlZC4gVG8g
bGV0IHRoZQorICAgICAqIGFwcGxpY2F0aW9uIGtub3cgdGhlIGRldGFpbHMgb2YgdGhlIGZpbGUg
Y2hvb3NlciwgYXMgd2VsbCBhcyB0bworICAgICAqIGFsbG93IHRoZSBjbGllbnQgYXBwbGljYXRp
b24gdG8gZWl0aGVyIGNhbmNlbCB0aGUgcmVxdWVzdCBvcgorICAgICAqIHBlcmZvcm0gYW4gYWN0
dWFsIHNlbGVjdGlvbiBvZiBmaWxlcywgdGhlIHNpZ25hbCB3aWxsIHBhc3MgYW4KKyAgICAgKiBp
bnN0YW5jZSBvZiB0aGUgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBpbiB0aGUgQHJlcXVlc3QK
KyAgICAgKiBhcmd1bWVudC4KKyAgICAgKgorICAgICAqIFRoZSBkZWZhdWx0IHNpZ25hbCBoYW5k
bGVyIHdpbGwgYXN5bmNocm9ub3VzbHkgcnVuIGEgcmVndWxhcgorICAgICAqICNHdGtGaWxlQ2hv
b3NlckRpYWxvZyBmb3IgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aC4KKyAgICAgKgorICAgICAq
IFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2Vk
IGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBm
dXJ0aGVyLgorICAgICAqCisgICAgICovCisgICAgc2lnbmFsc1tSVU5fRklMRV9DSE9PU0VSXSA9
CisgICAgICAgIGdfc2lnbmFsX25ldygicnVuLWZpbGUtY2hvb3NlciIsCisgICAgICAgICAgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAg
ICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9P
RkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBydW5fZmlsZV9jaG9vc2VyKSwKKyAgICAgICAgICAg
ICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVs
YXRvciBkYXRhICovLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVB
Tl9fT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsIC8qIG51
bWJlciBvZiBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9G
SUxFX0NIT09TRVJfUkVRVUVTVCk7CisKKyAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3Ojpt
b3VzZS10YXJnZXQtY2hhbmdlZDoKICAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmll
dyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKICAgICAgKiBAaGl0X3Rlc3RfcmVzdWx0
OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CkBAIC03NzEsNiArODQ5LDEyIEBAIHZvaWQgd2Via2l0
V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXS0hpdFRl
c3RSZXN1bHRSZWYKICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbTU9VU0VfVEFS
R0VUX0NIQU5HRURdLCAwLCBwcml2LT5tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCksIG1v
ZGlmaWVycyk7CiB9CiAKK3ZvaWQgd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVxdWVzdChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3Qp
Cit7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3
LCBzaWduYWxzW1JVTl9GSUxFX0NIT09TRVJdLCAwLCByZXF1ZXN0LCAmcmV0dXJuVmFsdWUpOwor
fQorCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19uZXc6CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDAwODFiZTMuLjkxNjg5
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmgKQEAgLTMwLDEzICszMCwxNCBAQAogCiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNr
Rm9yd2FyZExpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0SGl0VGVzdFJlc3VsdC5oPgotI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29u
dGV4dC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UG9saWN5RGVjaXNpb24uaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRV
UklSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0Lmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0V2luZG93UHJvcGVydGllcy5oPgotI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UG9saWN5RGVj
aXNpb24uaD4KIAogR19CRUdJTl9ERUNMUwogCkBAIC0xNDAsNiArMTQxLDEwIEBAIHN0cnVjdCBf
V2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICBnYm9vbGVhbiAgICgqIGRlY2lkZV9wb2xpY3kpICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFBvbGljeURlY2lzaW9uICAgICAgKmRl
Y2lzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQ
b2xpY3lEZWNpc2lvblR5cGUgIHR5cGUpOworCisgICAgZ2Jvb2xlYW4gICAoKiBydW5fZmlsZV9j
aG9vc2VyKSAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QgICpyZXF1ZXN0KTsKKwogICAgIHZvaWQgICAgICAgKCogbW91c2VfdGFyZ2V0X2NoYW5nZWQp
IChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0ICAgICAgKmhpdF90ZXN0
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQg
ICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKaW5kZXggNzY4YTYy
MC4uZTVlN2QzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC00Myw2ICs0Myw3IEBAIHZvaWQgd2Via2l0
V2ViVmlld1J1bkphdmFTY3JpcHRBbGVydChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYg
bWVzc2FnZSk7CiBib29sIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybShXZWJLaXRX
ZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7CiBXS1N0cmluZ1JlZiB3ZWJraXRXZWJW
aWV3UnVuSmF2YVNjcmlwdFByb21wdChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVz
c2FnZSwgY29uc3QgQ1N0cmluZyYgZGVmYXVsdFRleHQpOwogdm9pZCB3ZWJraXRXZWJWaWV3TWFr
ZVBvbGljeURlY2lzaW9uKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUs
IFdlYktpdFBvbGljeURlY2lzaW9uKik7Cit2b2lkIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nl
clJlcXVlc3QoV2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCopOwogdm9p
ZCB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqLCBXS0hpdFRl
c3RSZXN1bHRSZWYsIHVuc2lnbmVkIG1vZGlmaWVycyk7CiAKICNlbmRpZiAvLyBXZWJLaXRXZWJW
aWV3UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCBjY2NlMDRmLi5jMGI3Mjg4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTI1LDYgKzI1LDcgQEAKICAgICA8eGk6aW5jbHVkZSBo
cmVmPSJ4bWwvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLnhtbCIvPgogICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLnhtbCIvPgogICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRIaXRUZXN0UmVzdWx0LnhtbCIvPgorICAgIDx4
aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QueG1sIi8+CiAgICAg
PHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEVycm9yLnhtbCIvPgogICA8L2NoYXB0ZXI+CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0
Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IDUwYzQyZGIuLmU4MTZjODYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0
aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtNDE4LDYgKzQxOCwzMCBAQCB3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2dldF90eXBlCiA8L1NFQ1RJT04+CiAKIDxTRUNUSU9OPgorPEZJTEU+V2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0PC9GSUxFPgorV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Cit3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbgord2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzCit3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Y2hvb3NlX2ZpbGVzCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2Zp
bGVzCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsCisKKzxTVUJTRUNUSU9OIFN0
YW5kYXJkPgorV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MKK1dFQktJVF9UWVBFX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNUCitXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1QKK1dFQktJVF9JU19G
SUxFX0NIT09TRVJfUkVRVUVTVAorV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTCitX
RUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1MKK1dFQktJVF9GSUxFX0NIT09TRVJf
UkVRVUVTVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdFByaXZhdGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZQor
PC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxFPldlYktpdEVycm9yPC9GSUxFPgogV0VCS0lU
X05FVFdPUktfRVJST1IKIFdFQktJVF9QTFVHSU5fRVJST1IKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwppbmRleCBjYmEy
ZGY0Li4zZjQxNDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCkBAIC05LDQgKzksNSBAQCB3ZWJraXRfdXJpX3Jl
c3BvbnNlX2dldF90eXBlCiB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3R5cGUKIHdlYmtpdF93aW5k
b3dfcHJvcGVydGllc19nZXRfdHlwZQogd2Via2l0X2Rvd25sb2FkX2dldF90eXBlCit3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmlu
ZGV4IDQ3ZGE5OGUuLjdkMTQ3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTIyNiw2
ICsyMjYsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbmV3V2ViVmlldzsKICAgICB9CiAK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXIoV2ViS2l0V2ViVmlldyosIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09C
SkVDVChyZXF1ZXN0KSk7CisgICAgICAgIHRlc3QtPm1fZmlsZUNob29zZXJSZXF1ZXN0ID0gcmVx
dWVzdDsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICAg
ICAgcmV0dXJuIFRSVUU7CisgICAgfQorCiAgICAgc3RhdGljIGdib29sZWFuIHNjcmlwdEFsZXJ0
KFdlYktpdFdlYlZpZXcqLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBVSUNsaWVudFRlc3QqIHRlc3Qp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKHRlc3QtPm1fc2NyaXB0VHlwZSkgewpAQCAtMjg0LDYg
KzI5Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2
YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkod2Via2l0X3dlYl92aWV3X2dl
dF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X3dlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNLKHZpZXdDcmVhdGUpLCB0aGlzKTsKKyAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxM
QkFDSyhydW5GaWxlQ2hvb3NlciksIHRoaXMpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
d2ViVmlldywgInNjcmlwdC1hbGVydCIsIEdfQ0FMTEJBQ0soc2NyaXB0QWxlcnQpLCB0aGlzKTsK
ICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzY3JpcHQtY29uZmlybSIsIEdf
Q0FMTEJBQ0soc2NyaXB0Q29uZmlybSksIHRoaXMpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fd2ViVmlldywgInNjcmlwdC1wcm9tcHQiLCBHX0NBTExCQUNLKHNjcmlwdFByb21wdCksIHRo
aXMpOwpAQCAtMzEyLDEyICszMjEsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tb3Vz
ZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCk7CiAgICAgfQogCisgICAgV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0KiBtb3VzZUJ1dHRvbkNsaWNrQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdChp
bnQgeCwgaW50IHkpCisgICAgeworICAgICAgICBtb3VzZUJ1dHRvbkNsaWNrKHgsIHkpOworICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX2ZpbGVD
aG9vc2VyUmVxdWVzdC5nZXQoKTsKKyAgICB9CisKICAgICBWZWN0b3I8V2ViVmlld0V2ZW50cz4g
bV93ZWJWaWV3RXZlbnRzOwogICAgIFNjcmlwdFR5cGUgbV9zY3JpcHRUeXBlOwogICAgIGJvb2wg
bV9zY3JpcHREaWFsb2dDb25maXJtZWQ7CiAgICAgV2luZG93UHJvcGVydGllcyBtX3dpbmRvd1By
b3BlcnRpZXM7CiAgICAgSGFzaFNldDxXVEY6OlN0cmluZz4gbV93aW5kb3dQcm9wZXJ0aWVzQ2hh
bmdlZDsKICAgICBHUmVmUHRyPFdlYktpdEhpdFRlc3RSZXN1bHQ+IG1fbW91c2VUYXJnZXRIaXRU
ZXN0UmVzdWx0OworICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBtX2ZpbGVD
aG9vc2VyUmVxdWVzdDsKICAgICB1bnNpZ25lZCBpbnQgbV9tb3VzZVRhcmdldE1vZGlmaWVyczsK
IH07CiAKQEAgLTMzMyw2ICszNTAsODggQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVS
ZWFkeUNsb3NlKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7CiB9CiAKK3N0YXRp
YyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwg
Y29uc3QgZ2NoYXIqIG1pbWVUeXBlKQoreworICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlcklu
Zm87CisgICAgZmlsdGVySW5mby5jb250YWlucyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7
CisgICAgZmlsdGVySW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKKyAgICByZXR1cm4gZ3RrX2Zp
bGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJJbmZvKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmaWxlQ2hvb3NlckhUTUxGb3JtYXQgPSAiPGh0bWw+PGJv
ZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7
cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+PC9ib2R5PjwvaHRtbD4iOworCisgICAgLy8gTXVs
dGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcuCisgICAgR093
blB0cjxjaGFyPiBzaW1wbGVGaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29z
ZXJIVE1MRm9ybWF0LCAiIikpOworICAgIHRlc3QtPmxvYWRIdG1sKHNpbXBsZUZpbGVVcGxvYWRI
VE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPm1vdXNl
QnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlv
bihmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5
cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9v
c2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7CisgICAgR3RrRmlsZUZpbHRl
ciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2Zp
bHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIGNv
bnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2Vy
dCghc2VsZWN0ZWRGaWxlcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNl
bChmaWxlQ2hvb3NlclJlcXVlc3QpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBhbGxv
d2VkLCBubyBNSU1FIGZpbHRlcmluZywgc29tZSBwcmUtc2VsZWN0ZWQgZmlsZXMuCisgICAgR093
blB0cjxjaGFyPiBtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50
ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJtdWx0aXBsZSIpKTsKKyAgICB0ZXN0LT5sb2FkSHRt
bChtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5t
b3VzZUJ1dHRvbkNsaWNrQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVj
dGlvbihmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAg
IGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBn
X2Fzc2VydCghZmlsdGVyKTsKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdf
YXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKworICAgIC8vIFNlbGVjdCBzb21lIGZpbGVzLgorICAg
IGNvbnN0IGdjaGFyKiBmaWxlc1RvU2VsZWN0WzRdID0geyAiL2ZvbyIsICIvZm9vL2JhciIsICIv
Zm9vL2Jhci9iYXoiLCAwIH07CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29z
ZV9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QsIGZpbGVzVG9TZWxlY3QpOworCisgICAgLy8gUGVy
Zm9ybSBhbm90aGVyIHJlcXVlc3QgdG8gY2hlY2sgaWYgdGhlIGxpc3Qgb2YgZmlsZXMgc2VsZWN0
ZWQKKyAgICAvLyBpbiB0aGUgcHJldmlvdXMgc3RlcCBhcHBlYXJzIG5vdyBhcyBwYXJ0IG9mIHRo
ZSBuZXcgcmVxdWVzdC4KKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5tb3VzZUJ1dHRv
bkNsaWNrQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBzZWxlY3RlZEZp
bGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxl
Q2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0
KCFzZWxlY3RlZEZpbGVzWzNdKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2Fu
Y2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5v
dCBhbGxvd2VkLCBvbmx5IGFjY2VwdCBpbWFnZXMsIGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4uCisg
ICAgR093blB0cjxjaGFyPiBtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmlu
dGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiYWNjZXB0PSdhdWRpby8qLHZpZGVvLyosaW1hZ2Uv
KiciKSk7CisgICAgdGVzdC0+bG9hZEh0bWwobWltZUZpbHRlcmVkRmlsZVVwbG9hZEhUTUwuZ2V0
KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGZpbGVDaG9v
c2VyUmVxdWVzdCA9IHRlc3QtPm1vdXNlQnV0dG9uQ2xpY2tBbmRXYWl0Rm9yRmlsZUNob29zZXJS
ZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
YWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbihmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIG1p
bWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxl
Q2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KG1pbWVUeXBlcyk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKG1pbWVUeXBlc1swXSwgPT0sICJhdWRpby8qIik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KG1pbWVUeXBlc1sxXSwgPT0sICJ2aWRlby8qIik7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVU
eXBlc1syXSwgPT0sICJpbWFnZS8qIik7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlc1szXSk7CisK
KyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNf
ZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklM
VEVSKGZpbHRlcikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVy
LCAiYXVkaW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRl
ciwgInZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0
ZXIsICJpbWFnZS8qIikpOworCisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBn
X2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0phdmFTY3JpcHREaWFsb2dzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsK
ICAgICBzdGF0aWMgY29uc3QgY2hhciogaHRtbE9uTG9hZEZvcm1hdCA9ICI8aHRtbD48Ym9keSBv
bkxvYWQ9XCIlc1wiPjwvYm9keT48L2h0bWw+IjsKQEAgLTQ1Niw2ICs1NTUsNyBAQCB2b2lkIGJl
Zm9yZUFsbCgpCiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzZXR0aW5n
cyIsIHRlc3RXZWJWaWV3U2V0dGluZ3MpOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAicmVwbGFjZS1jb250ZW50IiwgdGVzdFdlYlZpZXdSZXBsYWNlQ29udGVudCk7CiAg
ICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3JlYXRlLXJlYWR5LWNsb3Nl
IiwgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKTsKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJmaWxlLWNob29zZXItcmVxdWVzdCIsIHRlc3RXZWJWaWV3RmlsZUNo
b29zZXJSZXF1ZXN0KTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJq
YXZhc2NyaXB0LWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKTsKICAgICBV
SUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3aW5kb3ctcHJvcGVydGllcyIsIHRl
c3RXZWJWaWV3V2luZG93UHJvcGVydGllcyk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAibW91c2UtdGFyZ2V0IiwgdGVzdFdlYlZpZXdNb3VzZVRhcmdldCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5jcHAKaW5kZXggMDBkM2IzZS4uMjljNTNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApAQCAtMTgwLDMgKzE4
MCwzNCBAQCB2b2lkIFdlYlZpZXdUZXN0Ojptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2ln
bmVkIGludCBtb3VzZU1vZGlmaWVycykKICAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQo
KSk7CiB9CiAKK3ZvaWQgV2ViVmlld1Rlc3Q6Om1vdXNlQnV0dG9uQ2xpY2soaW50IHgsIGludCB5
LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCit7Cisg
ICAgbW91c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1BSRVNTLCB4LCB5LCBidXR0b24sIG1vdXNl
TW9kaWZpZXJzKTsKKyAgICBtb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUkVMRUFTRSwgeCwg
eSwgYnV0dG9uLCBtb3VzZU1vZGlmaWVycyk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6Om1vdXNl
QnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5LCB1bnNpZ25l
ZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCit7CisgICAgZ19hc3Nl
cnQobV9wYXJlbnRXaW5kb3cpOworICAgIEd0a1dpZGdldCogdmlld1dpZGdldCA9IEdUS19XSURH
RVQobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh2aWV3
V2lkZ2V0KSk7CisKKyAgICBHT3duUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZlbnRfbmV3KGV2
ZW50VHlwZSkpOworICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KHZpZXdXaWRnZXQpOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+YnV0dG9uLndpbmRvdyk7
CisKKyAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50
LT5idXR0b24ueCA9IHg7CisgICAgZXZlbnQtPmJ1dHRvbi55ID0geTsKKyAgICBldmVudC0+YnV0
dG9uLmF4ZXMgPSAwOworICAgIGV2ZW50LT5idXR0b24uc3RhdGUgPSBtb3VzZU1vZGlmaWVyczsK
KyAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKKworICAgIGV2ZW50LT5idXR0b24u
ZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxh
eV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh2aWV3V2lkZ2V0KSkp
OworCisgICAgaW50IHhSb290LCB5Um9vdDsKKyAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3Jk
cyhndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290
KTsKKyAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IHhSb290OworICAgIGV2ZW50LT5idXR0b24u
eV9yb290ID0geVJvb3Q7CisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdU
ZXN0LmgKaW5kZXggOTVhNTY5Yy4uN2Q5MjRiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCkBAIC00NSwxMSArNDUsMTUg
QEAgcHVibGljOgogICAgIHZvaWQgc2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CiAK
ICAgICB2b2lkIG1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IG1vdXNlTW9k
aWZpZXJzID0gMCk7CisgICAgdm9pZCBtb3VzZUJ1dHRvbkNsaWNrKGludCB4LCBpbnQgeSwgdW5z
aWduZWQgaW50IGJ1dHRvbiA9IDEsIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDApOwog
CiAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwogICAgIEdNYWluTG9vcCogbV9tYWluTG9v
cDsKICAgICBDU3RyaW5nIG1fYWN0aXZlVVJJOwogICAgIEd0a1dpZGdldCogbV9wYXJlbnRXaW5k
b3c7CisKK3ByaXZhdGU6CisgICAgdm9pZCBtb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlwZSwg
aW50LCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIH07CiAKICNlbmRpZiAvLyBX
ZWJWaWV3VGVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgK
aW5kZXggM2FmOTkwNC4uZGUwMzA5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDIuaApAQCAtMzAsMTMgKzMwLDE0IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXRFZGl0aW5nQ29tbWFuZHMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5o
PgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RXJyb3IuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0VGVz
dFJlc3VsdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVS
SVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0Lmg+Ci0jaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0V2ViVmlldy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaD4KIAogI3VuZGVmIF9fV0VC
S0lUMl9IX0lOU0lERV9fCi0tIAoxLjcuNy41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131037</attachid>
            <date>2012-03-09 07:22:48 -0800</date>
            <delta_ts>2012-03-09 10:30:16 -0800</delta_ts>
            <desc>Patch Proposal + Unit Tests + Docs</desc>
            <filename>0001-2012-03-09-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>59790</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAwNjMxOGFjOWJmNGUwNzAzNzQ5OWNmMGUxZGRhZDJjMzcyNjA4MjRkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDkgTWFyIDIwMTIgMTE6NDU6MDUgKzAxMDAKU3ViamVjdDogW1BBVENI
XSAyMDEyLTAzLTA5ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4K
CiAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYlVJQ2xpZW50J3MgcnVuT3BlblBhbmVsIGluIFdl
YktpdDJHVEsrCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc4NDkxCgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBBZGQg
YSBuZXcgcHVibGljIGNsYXNzIHRvIHRoZSBBUEksIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCwg
dG8gYmUKICAgICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6cnVu
LWZpbGUtY2hvb3NlciBzaWduYWwgdG8KICAgICAgICBsZXQgY2xpZW50IGFwcGxpY2F0aW9ucyB0
byBwcm92aWRlIHRoZWlyIG93biBmaWxlIGNob29zZXIgZGlhbG9nCiAgICAgICAgd2hlbiB0aGUg
dXNlIGludGVyYWN0cyB3aXRoIEhUTUwgSW5wdXQgZWxlbWVudHMgb2YgdHlwZSAnZmlsZScuCgog
ICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIG5ldyBzb3VyY2UgZmlsZXMgYW5kIGhlYWRl
cnMuCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qu
Y3BwOiBBZGRlZC4KICAgICAgICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpOgog
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdCk6CiAgICAgICAgKHdlYmtp
dEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXplKToKICAgICAgICAod2Via2l0RmlsZUNob29zZXJS
ZXF1ZXN0R2V0UHJvcGVydHkpOgogICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Y2xhc3NfaW5pdCk6CiAgICAgICAgKHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdENyZWF0ZSk6CiAg
ICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0
aW9uKToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVz
KToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2Zp
bHRlcik6CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMp
OgogICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVz
KToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCk6CiAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaDogQWRkZWQuCiAg
ICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QpOgogICAgICAgIChfV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0Q2xhc3MpOgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oOiBBZGRlZCwKICAgICAgICBjb250YWluaW5nIHRoZSBw
cm90b3R5cGUgb2Ygd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlLgoKICAgICAgICBQcm92
aWRlIHByaXZhdGUgQVBJIHRvIG1ha2UgYSBmaWxlIGNob29zZXIgcmVxdWVzdCBmcm9tIHRoZQog
ICAgICAgIFdlYlZpZXcsIGFuZCBwcm92aWRlIGEgZGVmYXVsdCBoYW5kbGVyIGZvciBpdC4KCiAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKICAgICAgICAoZmls
ZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKTogSGFuZGxlciBmb3IgdGhlICdyZXNwb25z
ZScKICAgICAgICBzaWduYWwgZm9yIHRoZSBHdGtGaWxlQ2hvb3NlckRpYWxvZyB1c2VkIGluIHRo
ZSBkZWZhdWx0CiAgICAgICAgaGFuZGxlci4gSXQgd2lsbCBjYWxsIHRvIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMKICAgICAgICBvciB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfY2FuY2VsIGFzIG5lZWRlZC4KICAgICAgICAod2Via2l0V2ViVmlld1J1bkZpbGVD
aG9vc2VyKTogRGVmYXVsdCBoYW5kbGVyIGZvciB0aGUgbmV3CiAgICAgICAgJ3J1bi1maWxlLWNo
b29zZXInIHNpZ25hbC4gSXQgd2lsbCBjcmVhdGUgYSBHdGtGaWxlQ2hvb3NlckRpYWxvZywKICAg
ICAgICBjb25uZWN0IHRvIHRoZSAncmVzcG9uc2UnIHNpZ25hbCBhbmQgc2hvdyBpdC4KICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBDb25uZWN0IHRoZSAncnVuLWZpbGUtY2hv
b3NlcicKICAgICAgICBzaWduYWwgdG8gdGhlIGRlZmF1bHQgaGFuZGxlciwgd2Via2l0V2ViVmll
d1J1bkZpbGVDaG9vc2VyLgogICAgICAgICh3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1
ZXN0KToKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKICAgICAg
ICAoX1dlYktpdFdlYlZpZXdDbGFzcyk6IEFkZGVkIHByb3RvdHlwZSBmb3IgdGhlIGhhbmRsZXIg
b2YgdGhlIG5ldwogICAgICAgICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwuCiAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOiBBZGRlZCBwcm90b3R5cGUg
Zm9yCiAgICAgICAgcHJpdmF0ZSBuZXcgZnVuY3Rpb24gd2Via2l0V2ViVmlld1J1bkZpbGVDaG9v
c2VyUmVxdWVzdC4KCiAgICAgICAgUHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcnVuT3Bl
blBhbmVsIGluIFdlYktpdFVJQ2xpZW50LgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFVJQ2xpZW50LmNwcDoKICAgICAgICAocnVuT3BlblBhbmVsKTogTmV3LCBpbXBsZW1lbnRz
IHJ1bk9wZW5QYW5lbCBieSBjcmVhdGluZyBhbgogICAgICAgIGluc3RhbmNlIG9mIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCBhbmQgYXNraW5nIHRoZSBXZWJWaWV3IHRvCiAgICAgICAgZW1pdCB0
aGUgJ3J1bi1maWxlLWNob29zZXInIHNpZ25hbCB3aXRoIGl0LgogICAgICAgIChhdHRhY2hVSUNs
aWVudFRvVmlldyk6IFJlZmVyZW5jZSB0aGUgbmV3IHJ1bk9wZW5QYW5lbCBmdW5jdGlvbi4KCiAg
ICAgICAgQWRkZWQgdGhlIG5ldyBwdWJsaWNoIGhlYWRlciB0byB0aGUgbWFpbiBoZWFkZXIuCgog
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOiBBZGRlZCBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QuaC4KCiAgICAgICAgTmV3IHVuaXQgdGVzdHMgZm9yIHRoZSBuZXcgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0IEFQSS4gQWxzbywKICAgICAgICBleHRlbmRlZCB0aGUgV2ViVmll
d1Rlc3QgY2xhc3MgdG8gYWxsb3cgc2ltdWxhdGluZyBtb3VzZSBjbGlja3MuCgogICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgogICAgICAgIChj
aGVja01pbWVUeXBlRm9yRmlsdGVyKTogTmV3LCBjaGVja3Mgd2hldGhlciBhIEd0a0ZpbGVGaWx0
ZXIKICAgICAgICBmaWx0ZXJzIGEgZ2l2ZW4gTUlNRSB0eXBlLCBhcyBzcGVjaWZpZWQgYnkgUkZD
IDIwNDYuCiAgICAgICAgKHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KTogTmV3IHVuaXQg
dGVzdC4KICAgICAgICAoYmVmb3JlQWxsKTogQWRkIHRoZSBuZXcgdW5pdCB0ZXN0IGFzIGFuIFVJ
Q2xpZW50VGVzdC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5jcHA6CiAgICAgICAgKFdlYlZpZXdUZXN0OjpjbGlja01vdXNlQnV0dG9uKTogTmV3IHB1Ymxp
YyBmdW5jdGlvbiB0byBzaW11bGF0ZSBhCiAgICAgICAgbW91c2UgY2xpY2sgdGhyb3VnaCBHZGtF
dmVudHMsIGFzIHRoZSBjb21iaW5hdGlvbiBvZiBhICdwcmVzcycgYW5kCiAgICAgICAgYSAncmVs
ZWFzZScgZXZlbnQuIFVzZWQgZnJvbSB0aGUgbmV3IHVuaXQgdGVzdCB0byBzaW11bGF0ZSB0aGUK
ICAgICAgICB1c2VyIHByZXNzaW5nIGluIHRoZSBidXR0b24gcmVuZGVyZWQgZm9yIGEgSFRNTCBJ
bnB1dCBlbGVtZW50LgogICAgICAgIChXZWJWaWV3VGVzdDo6ZXhlY3V0ZU1vdXNlQnV0dG9uRXZl
bnQpOiBOZXcgcHJpdmF0ZSBmdW5jdGlvbiB0bwogICAgICAgIHNpbXVsYXRlIGEgbW91c2UgZXZl
bnQgdGhyb3VnaCBHZGtFdmVudHMuCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJWaWV3VGVzdC5oOgoKICAgICAgICBVcGRhdGVkIGRvY3VtZW50YXRpb24gcmVsYXRlZCBmaWxl
cyB3aXRoIHRoZSBuZXcgQVBJLgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1zZWN0aW9ucy50eHQ6IEFkZGVkIG5ldyBBUEkuCiAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBuZXcgc2VjdGlvbi4KICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlczogQWRkZWQgZ2V0
X3R5cGUgZnVuY3Rpb24uCgoyMDEyLTAzLTA5ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNo
ZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYlVJQ2xpZW50J3MgcnVu
T3BlblBhbmVsIGluIFdlYktpdDJHVEsrCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4NDkxCgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKICAgICAgICBIYW5kbGUgdGhlIEdQdHJBcnJheSB0eXBlIGluIEdSZWZQdHIsIGJ5IGNhbGxp
bmcgZ19wdHJfYXJyYXlfcmVmCiAgICAgICAgYW5kIGdfcHRyX2FycmF5X3VucmVmIGluIHRoZSBp
bXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVmR1B0ciBhbmQgdGhlCiAgICAgICAgZnJlZU93bmVkR1B0
ciB0ZW1wbGF0ZSBmdW5jdGlvbnMuCgogICAgICAgICogd3RmL2dvYmplY3QvR1JlZlB0ci5jcHA6
CiAgICAgICAgKFdURjo6cmVmR1B0cik6CiAgICAgICAgKFdURik6CiAgICAgICAgKFdURjo6ZGVy
ZWZHUHRyKToKICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuaDoKICAgICAgICAoV1RGKToK
LS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICB8
ICAgMTkgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwICAg
ICAgfCAgIDEzICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVmUHRyLmgg
ICAgICAgIHwgICAgMiArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVk
ZWZzLmggICAgICB8ICAgIDEgKwogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDg4ICsrKysrCiBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5h
bSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgfCAgMzY1ICsrKysrKysrKysrKysrKysrKysrCiAu
Li4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmggICB8ICAgNzgg
KysrKysKIC4uLi9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCAgICAg
IHwgICAyOCArKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQu
Y3BwICAgfCAgIDEwICstCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmNwcCB8ICAgODIgKysrKysKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuaCAgIHwgICAgNyArCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld1ByaXZhdGUuaCAgICAgICB8ICAgIDEgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgICAgfCAgICAxICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IHwgICAyNCArKwogLi4uL1VJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcyAgICAgICAgfCAgICAxICsKIC4uLi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAgIHwgIDEwMCArKysrKysKIC4u
Li9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAgICAgICAgIHwgICAzMSAr
KwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaCAgfCAg
ICA0ICsKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCAgICAgICAg
IHwgICAgMyArLQogMjAgZmlsZXMgY2hhbmdlZCwgODYwIGluc2VydGlvbnMoKyksIDIgZGVsZXRp
b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGNjZDMzMS4uYTA4NmM1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTItMDMtMDkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5QYW5lbCBp
biBXZWJLaXQyR1RLKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg0OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBIYW5kbGUgdGhlIEdQdHJBcnJheSB0eXBlIGluIEdSZWZQdHIsIGJ5IGNhbGxpbmcgZ19w
dHJfYXJyYXlfcmVmCisgICAgICAgIGFuZCBnX3B0cl9hcnJheV91bnJlZiBpbiB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIHJlZkdQdHIgYW5kIHRoZQorICAgICAgICBmcmVlT3duZWRHUHRyIHRl
bXBsYXRlIGZ1bmN0aW9ucy4KKworICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwOgor
ICAgICAgICAoV1RGOjpyZWZHUHRyKToKKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OmRl
cmVmR1B0cik6CisgICAgICAgICogd3RmL2dvYmplY3QvR1JlZlB0ci5oOgorICAgICAgICAoV1RG
KToKKyAgICAgICAgKiB3dGYvZ29iamVjdC9HVHlwZWRlZnMuaDoKKwogMjAxMi0wMy0wOCAgQmVu
amFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXgg
Zm9yIE1TVkMgYWZ0ZXIgcjExMDI2NgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2Jq
ZWN0L0dSZWZQdHIuY3BwCmluZGV4IDMwZGYyYzkuLjNhMDE0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVmUHRyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAKQEAgLTEwNyw2ICsxMDcsMTkgQEAg
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1NvdXJjZSogcHRyKQogICAgICAgICBnX3NvdXJj
ZV91bnJlZihwdHIpOwogfQogCit0ZW1wbGF0ZSA8PiBHUHRyQXJyYXkqIHJlZkdQdHIoR1B0ckFy
cmF5KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19wdHJfYXJyYXlfcmVmKHB0cik7
CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1B0ckFy
cmF5KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19wdHJfYXJyYXlfdW5yZWYocHRy
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBFTkFCTEUoR0xJQl9TVVBQ
T1JUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQ
dHIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVmUHRyLmgKaW5kZXgg
OTJhY2ZmYy4uNGJmNWUxZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9n
b2JqZWN0L0dSZWZQdHIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3Qv
R1JlZlB0ci5oCkBAIC0yMDgsNiArMjA4LDggQEAgdGVtcGxhdGUgPD4gR1ZhcmlhbnQqIHJlZkdQ
dHIoR1ZhcmlhbnQqIHB0cik7CiB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHVmFyaWFudCog
cHRyKTsKIHRlbXBsYXRlIDw+IEdTb3VyY2UqIHJlZkdQdHIoR1NvdXJjZSogcHRyKTsKIHRlbXBs
YXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdTb3VyY2UqIHB0cik7Cit0ZW1wbGF0ZSA8PiBHUHRyQXJy
YXkqIHJlZkdQdHIoR1B0ckFycmF5KiBwdHIpOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIo
R1B0ckFycmF5KiBwdHIpOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIHJlZkdQ
dHIoVCogcHRyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2Jq
ZWN0L0dUeXBlZGVmcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dUeXBl
ZGVmcy5oCmluZGV4IGUyOTI1MGIuLmI4YmNiYWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCkBAIC01Niw2ICs1Niw3IEBAIHR5cGVkZWYgc3Ry
dWN0IF9HTWFpbkxvb3AgR01haW5Mb29wOwogdHlwZWRlZiBzdHJ1Y3QgX0dQYXR0ZXJuU3BlYyBH
UGF0dGVyblNwZWM7CiB0eXBlZGVmIHN0cnVjdCBfR1BvbGxhYmxlT3V0cHV0U3RyZWFtIEdQb2xs
YWJsZU91dHB1dFN0cmVhbTsKIHR5cGVkZWYgc3RydWN0IF9HU0xpc3QgR1NMaXN0OwordHlwZWRl
ZiBzdHJ1Y3QgX0dQdHJBcnJheSBHUHRyQXJyYXk7CiB0eXBlZGVmIHN0cnVjdCBfR1NvY2tldENs
aWVudCBHU29ja2V0Q2xpZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXRDb25uZWN0aW9uIEdT
b2NrZXRDb25uZWN0aW9uOwogdHlwZWRlZiBzdHJ1Y3QgX0dTb3VyY2UgR1NvdXJjZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCA2M2YwZTYyLi42OTBhMjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIw
MTItMDMtMDkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5QYW5lbCBpbiBXZWJL
aXQyR1RLKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg0OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYSBuZXcgcHVibGljIGNsYXNzIHRvIHRoZSBBUEksIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCwgdG8gYmUKKyAgICAgICAgZW1pdHRlZCBhbG9uZyB3aXRoIGEgbmV3IFdlYktpdFdlYlZpZXc6
OnJ1bi1maWxlLWNob29zZXIgc2lnbmFsIHRvCisgICAgICAgIGxldCBjbGllbnQgYXBwbGljYXRp
b25zIHRvIHByb3ZpZGUgdGhlaXIgb3duIGZpbGUgY2hvb3NlciBkaWFsb2cKKyAgICAgICAgd2hl
biB0aGUgdXNlIGludGVyYWN0cyB3aXRoIEhUTUwgSW5wdXQgZWxlbWVudHMgb2YgdHlwZSAnZmls
ZScuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHNvdXJjZSBmaWxlcyBh
bmQgaGVhZGVycy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQ
cml2YXRlKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9pbml0KToKKyAg
ICAgICAgKHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXplKToKKyAgICAgICAgKHdlYmtp
dEZpbGVDaG9vc2VyUmVxdWVzdEdldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdEZpbGVDaG9vc2VyUmVx
dWVzdENyZWF0ZSk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dz
X211bHRpcGxlX3NlbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X21pbWVfdHlwZXMpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzX2ZpbHRlcik6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY2hvb3NlX2ZpbGVzKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfc2VsZWN0ZWRfZmlsZXMpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2NhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0Lmg6IEFkZGVkLgorICAgICAgICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCk6
CisgICAgICAgIChfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaDogQWRkZWQs
CisgICAgICAgIGNvbnRhaW5pbmcgdGhlIHByb3RvdHlwZSBvZiB3ZWJraXRGaWxlQ2hvb3NlclJl
cXVlc3RDcmVhdGUuCisKKyAgICAgICAgUHJvdmlkZSBwcml2YXRlIEFQSSB0byBtYWtlIGEgZmls
ZSBjaG9vc2VyIHJlcXVlc3QgZnJvbSB0aGUKKyAgICAgICAgV2ViVmlldywgYW5kIHByb3ZpZGUg
YSBkZWZhdWx0IGhhbmRsZXIgZm9yIGl0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgIChmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2Fs
bGJhY2spOiBIYW5kbGVyIGZvciB0aGUgJ3Jlc3BvbnNlJworICAgICAgICBzaWduYWwgZm9yIHRo
ZSBHdGtGaWxlQ2hvb3NlckRpYWxvZyB1c2VkIGluIHRoZSBkZWZhdWx0CisgICAgICAgIGhhbmRs
ZXIuIEl0IHdpbGwgY2FsbCB0byB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX2Zp
bGVzCisgICAgICAgIG9yIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwgYXMgbmVl
ZGVkLgorICAgICAgICAod2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyKTogRGVmYXVsdCBoYW5k
bGVyIGZvciB0aGUgbmV3CisgICAgICAgICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwuIEl0IHdp
bGwgY3JlYXRlIGEgR3RrRmlsZUNob29zZXJEaWFsb2csCisgICAgICAgIGNvbm5lY3QgdG8gdGhl
ICdyZXNwb25zZScgc2lnbmFsIGFuZCBzaG93IGl0LgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2NsYXNzX2luaXQpOiBDb25uZWN0IHRoZSAncnVuLWZpbGUtY2hvb3NlcicKKyAgICAgICAgc2ln
bmFsIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIsIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nlci4K
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3QpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKF9XZWJLaXRXZWJW
aWV3Q2xhc3MpOiBBZGRlZCBwcm90b3R5cGUgZm9yIHRoZSBoYW5kbGVyIG9mIHRoZSBuZXcKKyAg
ICAgICAgJ3J1bi1maWxlLWNob29zZXInIHNpZ25hbC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOiBBZGRlZCBwcm90b3R5cGUgZm9yCisgICAgICAg
IHByaXZhdGUgbmV3IGZ1bmN0aW9uIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3Qu
CisKKyAgICAgICAgUHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcnVuT3BlblBhbmVsIGlu
IFdlYktpdFVJQ2xpZW50LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlD
bGllbnQuY3BwOgorICAgICAgICAocnVuT3BlblBhbmVsKTogTmV3LCBpbXBsZW1lbnRzIHJ1bk9w
ZW5QYW5lbCBieSBjcmVhdGluZyBhbgorICAgICAgICBpbnN0YW5jZSBvZiBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QgYW5kIGFza2luZyB0aGUgV2ViVmlldyB0bworICAgICAgICBlbWl0IHRoZSAn
cnVuLWZpbGUtY2hvb3Nlcicgc2lnbmFsIHdpdGggaXQuCisgICAgICAgIChhdHRhY2hVSUNsaWVu
dFRvVmlldyk6IFJlZmVyZW5jZSB0aGUgbmV3IHJ1bk9wZW5QYW5lbCBmdW5jdGlvbi4KKworICAg
ICAgICBBZGRlZCB0aGUgbmV3IHB1YmxpY2ggaGVhZGVyIHRvIHRoZSBtYWluIGhlYWRlci4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogQWRkZWQgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0LmguCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgZm9yIHRoZSBuZXcgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0IEFQSS4gQWxzbywKKyAgICAgICAgZXh0ZW5kZWQgdGhlIFdl
YlZpZXdUZXN0IGNsYXNzIHRvIGFsbG93IHNpbXVsYXRpbmcgbW91c2UgY2xpY2tzLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgorICAg
ICAgICAoY2hlY2tNaW1lVHlwZUZvckZpbHRlcik6IE5ldywgY2hlY2tzIHdoZXRoZXIgYSBHdGtG
aWxlRmlsdGVyCisgICAgICAgIGZpbHRlcnMgYSBnaXZlbiBNSU1FIHR5cGUsIGFzIHNwZWNpZmll
ZCBieSBSRkMgMjA0Ni4KKyAgICAgICAgKHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KTog
TmV3IHVuaXQgdGVzdC4KKyAgICAgICAgKGJlZm9yZUFsbCk6IEFkZCB0aGUgbmV3IHVuaXQgdGVz
dCBhcyBhbiBVSUNsaWVudFRlc3QuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJWaWV3VGVzdC5jcHA6CisgICAgICAgIChXZWJWaWV3VGVzdDo6Y2xpY2tNb3VzZUJ1dHRv
bik6IE5ldyBwdWJsaWMgZnVuY3Rpb24gdG8gc2ltdWxhdGUgYQorICAgICAgICBtb3VzZSBjbGlj
ayB0aHJvdWdoIEdka0V2ZW50cywgYXMgdGhlIGNvbWJpbmF0aW9uIG9mIGEgJ3ByZXNzJyBhbmQK
KyAgICAgICAgYSAncmVsZWFzZScgZXZlbnQuIFVzZWQgZnJvbSB0aGUgbmV3IHVuaXQgdGVzdCB0
byBzaW11bGF0ZSB0aGUKKyAgICAgICAgdXNlciBwcmVzc2luZyBpbiB0aGUgYnV0dG9uIHJlbmRl
cmVkIGZvciBhIEhUTUwgSW5wdXQgZWxlbWVudC4KKyAgICAgICAgKFdlYlZpZXdUZXN0OjpleGVj
dXRlTW91c2VCdXR0b25FdmVudCk6IE5ldyBwcml2YXRlIGZ1bmN0aW9uIHRvCisgICAgICAgIHNp
bXVsYXRlIGEgbW91c2UgZXZlbnQgdGhyb3VnaCBHZGtFdmVudHMuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaDoKKworICAgICAgICBVcGRhdGVkIGRvY3Vt
ZW50YXRpb24gcmVsYXRlZCBmaWxlcyB3aXRoIHRoZSBuZXcgQVBJLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkZWQgbmV3IEFQ
SS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21s
OiBBZGRlZCBuZXcgc2VjdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGsudHlwZXM6IEFkZGVkIGdldF90eXBlIGZ1bmN0aW9uLgorCiAyMDEyLTAzLTA4ICBU
b3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBb
UXRdIFVzZSBRdCdzIG1vZHVsZSBzeXN0ZW0gZm9yIGluc3RhbGwgcnVsZXMgYW5kIGRlcGVuZGlu
ZyBvbiBRdFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA5ODAwZmY1Li42NmI2Y2FlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODksNiArODksNyBAQCBsaWJ3ZWJraXQyZ3RraW5jbHVk
ZV9IRUFERVJTID0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxv
YWQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFZGl0aW5nQ29tbWFu
ZHMuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKKwkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIFwK
IAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmggXAog
CSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5oIFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bi5oIFwKQEAgLTU1Miw2ICs1NTMsOSBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlLmggXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5oIFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3Bw
IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMTEyNjUzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAKQEAgLTAsMCArMSwzNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIgorCisjaW5jbHVkZSAiV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYk9wZW5QYW5lbFBhcmFt
ZXRlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxnbGli
L2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8q
KgorICogU0VDVElPTjogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKiBAU2hvcnRfZGVzY3Jp
cHRpb246IEEgcmVxdWVzdCB0byBvcGVuIGEgZmlsZSBjaG9vc2VyCisgKiBAVGl0bGU6IFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdAorICogQFNlZV9hbHNvOiAjV2ViS2l0V2ViVmlldworICoKKyAq
IFdoZW5ldmVyIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIGEgJmx0O2lucHV0IHR5cGU9J2ZpbGUn
IC8mZ3Q7IEhUTUwKKyAqIGVsZW1lbnQsIFdlYktpdCB3aWxsIG5lZWQgdG8gc2hvdyBhIGRpYWxv
ZyB0byBjaG9vc2Ugb25lIG9yIG1vcmUKKyAqIGZpbGVzIHRvIGJlIHVwbG9hZGVkIHRvIHRoZSBz
ZXJ2ZXIgYWxvbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZm9ybQorICogZGF0YS4gRm9yIHRoYXQg
dG8gaGFwcGVuIGluIGEgZ2VuZXJhbCB3YXksIGluc3RlYWQgb2YganVzdCBvcGVuaW5nCisgKiBh
ICNHdGtGaWxlQ2hvb3NlckRpYWxvZyAod2hpY2ggbWlnaHQgYmUgbm90IGRlc2lyYWJsZSBpbiBz
b21lCisgKiBzcGVjaWZpYyBwbGF0Zm9ybXMsIHdoaWNoIGNvdWxkIHByZWZlciB0byB1c2UgdGhl
aXIgb3duIGZpbGUKKyAqIGNob29zZXIgZGlhbG9nKSwgV2ViS2l0IHdpbGwgZmlyZSB0aGUKKyAq
ICNXZWJLaXRXZWJWaWV3OjpydW4tZmlsZS1jaG9vc2VyIHNpZ25hbCB3aXRoIGEKKyAqICNXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3Qgb2JqZWN0LCB3aGljaCB3aWxsIGFsbG93IHRoZSBjbGllbnQK
KyAqIGFwcGxpY2F0aW9uIHRvIHNwZWNpZnkgdGhlIGZpbGVzIHRvIGJlIHNlbGVjdGVkLCB0byBp
bnNwZWN0IHRoZQorICogZGV0YWlscyBmcm9tIHRoZSByZXF1ZXN0IChlLmcuIGlmIG11bHRpcGxl
IHNlbGVjdGlvbiBzaG91bGQgYmUKKyAqIGFsbG93ZWQpIGFuZCB0byBjYW5jZWwgdGhlIHJlcXVl
c3QsIGluIGNhc2Ugbm90aGluZyB3YXMgZmluYWxseQorICogYmVpbmcgc2VsZWN0ZWQuCisgKgor
ICogSW4gY2FzZSB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIGRvZXMgbm90IHdpc2ggdG8gaGFuZGxl
IHRoaXMgc2lnbmFsLAorICogV2ViS2l0IHdpbGwgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlciB3
aGljaCB3aWxsIGFzeW5jaHJvbm91c2x5IHJ1bgorICogYSByZWd1bGFyICNHdGtGaWxlQ2hvb3Nl
ckRpYWxvZyBmb3IgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aC4KKyAqLworR19ERUZJTkVfVFlQ
RShXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdCwg
R19UWVBFX09CSkVDVCkKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRl
IHsKKyAgICBXS1JldGFpblB0cjxXS09wZW5QYW5lbFBhcmFtZXRlcnNSZWY+IHdrUGFyYW1ldGVy
czsKKyAgICBXS1JldGFpblB0cjxXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmPiB3a0xpc3Rl
bmVyOworICAgIEdSZWZQdHI8R3RrRmlsZUZpbHRlcj4gZmlsdGVyOworICAgIEdSZWZQdHI8R1B0
ckFycmF5PiBtaW1lVHlwZXM7CisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IHNlbGVjdGVkRmlsZXM7
CisgICAgYm9vbCBoYW5kbGVkUmVxdWVzdDsKK307CisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX0FMTE9XU19NVUxUSVBMRV9TRUxFQ1RJT04sCisgICAgUFJPUF9GSUxURVIsCisgICAg
UFJPUF9NSU1FX1RZUEVTLAorICAgIFBST1BfU0VMRUNURURfRklMRVMsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmVxdWVzdC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSk7CisgICAgbmV3IChyZXF1ZXN0LT5wcml2KSBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVF
U1Qob2JqZWN0KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpcyBhbHdheXMgaGFu
ZGxlZCBiZWZvcmUgZmluYWxpemluZy4KKyAgICBpZiAoIXJlcXVlc3QtPnByaXYtPmhhbmRsZWRS
ZXF1ZXN0KQorICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKHJlcXVl
c3QpOworCisgICAgcmVxdWVzdC0+cHJpdi0+fldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZh
dGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0Rmls
ZUNob29zZXJSZXF1ZXN0R2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQs
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2Jq
ZWN0KTsKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9BTExPV1NfTVVMVElQ
TEVfU0VMRUNUSU9OOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbihyZXF1ZXN0KSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GSUxURVI6CisgICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5
cGVzX2ZpbHRlcihyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NSU1F
X1RZUEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1NFTEVDVEVEX0ZJTEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2
YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1
ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY2xhc3NfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyogcmVxdWVzdENs
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhy
ZXF1ZXN0Q2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdEZpbGVDaG9v
c2VyUmVxdWVzdEZpbmFsaXplOworICAgIG9iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRGaWxlQ2hvb3NlclJlcXVlc3RHZXRQcm9wZXJ0eTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUocmVxdWVzdENsYXNzLCBzaXplb2YoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0
ZSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OmFsbG93cy1t
dWx0aXBsZS1zZWxlY3Rpb246CisgICAgICoKKyAgICAgKiBXaGV0aGVyIHRoZSBmaWxlIGNob29z
ZXIgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZQorICAgICAqIGZpbGVzLiBTZWUKKyAg
ICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlv
bigpIGZvcgorICAgICAqIG1vcmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9BTExPV1NfTVVMVElQTEVfU0VMRUNUSU9OLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oImFsbG93cy1tdWx0
aXBsZS1zZWxlY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF8oIkFsbG93cyBtdWx0aXBsZSBmaWxlIHNlbGVjdGlvbiIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIldo
ZXRoZXIgdGhlIGZpbGUgY2hvb3NlciBzaG91bGQgYWxsb3cgc2VsZWN0aW5nIG11bHRpcGxlIGZp
bGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisgICAgICogV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0OmZpbHRlcjoKKyAgICAgKgorICAgICAqIFRoZSBmaWx0ZXIg
Y3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdC4gU2VlCisgICAgICogd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcigpIGZvciBtb3JlCisg
ICAgICogZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9GSUxURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3Nw
ZWNfb2JqZWN0KCJmaWx0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiTUlNRSB0eXBlcyBmaWx0ZXIiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBmaWx0ZXIgY3Vy
cmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfRklMRV9GSUxURVIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3Q6bWltZS10eXBlczoKKyAgICAgKgorICAgICAqIEEgJU5VTEwtdGVybWluYXRlZCBh
cnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgTUlNRQorICAgICAqIHR5cGVz
IHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHNob3VsZCBoYW5kbGUuIFNlZQorICAgICAqIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcygpIGZvciBtb3JlIGRldGFpbHMu
CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFz
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTUlNRV9UWVBFUywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCgi
bWltZS10eXBlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJNSU1FIHR5cGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbGlzdCBvZiBNSU1FIHR5cGVzIGFzc29j
aWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUlYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6c2VsZWN0ZWQtZmls
ZXM6CisgICAgICoKKyAgICAgKiBBICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBj
b250YWluaW5nIHRoZSBsaXN0IG9mCisgICAgICogc2VsZWN0ZWQgZmlsZXMgY3VycmVudGx5IGFz
c29jaWF0ZWQgdG8gdGhlIHJlcXVlc3QuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoKSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAqLwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NFTEVDVEVEX0ZJTEVTLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2JveGVkKCJzZWxlY3Rl
ZC1maWxlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfKCJTZWxlY3RlZCBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgZmlsZXMg
YXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworfQorCitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHdlYmtpdEZpbGVDaG9vc2Vy
UmVxdWVzdENyZWF0ZShXS09wZW5QYW5lbFBhcmFtZXRlcnNSZWYgd2tQYXJhbWV0ZXJzLCBXS09w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIHdrTGlzdGVuZXIpCit7CisgICAgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgTlVMTCkpOworICAgIHJl
cXVlc3QtPnByaXYtPndrUGFyYW1ldGVycyA9IHdrUGFyYW1ldGVyczsKKyAgICByZXF1ZXN0LT5w
cml2LT53a0xpc3RlbmVyID0gd2tMaXN0ZW5lcjsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwor
LyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVj
dGlvbjoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBE
ZXRlcm1pbmUgd2hldGhlciB0aGUgZmlsZSBjaG9vc2VyIGFzc29jaWF0ZWQgdG8gdGhpcworICog
I1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBzaG91bGQgYWxsb3cgc2VsZWN0aW5nIG11bHRpcGxl
IGZpbGVzLAorICogd2hpY2ggZGVwZW5kcyBvbiB0aGUgSFRNTCBpbnB1dCBlbGVtZW50IGhhdmlu
ZyBhICdtdWx0aXBsZScKKyAqIGF0dHJpYnV0ZSBkZWZpbmVkLgorICoKKyAqIFJldHVybnM6ICVU
UlVFIGlmIHRoZSBmaWxlIGNob29zZXIgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZSBm
aWxlcyBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICovCitnYm9vbGVhbiB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbihXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJ
TEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCBGQUxTRSk7CisgICAgcmV0dXJuIFdLT3BlblBh
bmVsUGFyYW1ldGVyc0dldEFsbG93c011bHRpcGxlRmlsZXMocmVxdWVzdC0+cHJpdi0+d2tQYXJh
bWV0ZXJzLmdldCgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X21pbWVfdHlwZXM6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
CisgKgorICogR2V0IHRoZSBsaXN0IG9mIE1JTUUgdHlwZXMgdGhlIGZpbGUgY2hvb3NlciBkaWFs
b2cgc2hvdWxkIGhhbmRsZSwKKyAqIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGluIFJGQyAyMDQ2
IGZvciAibWVkaWEgdHlwZXMiLiBJdHMgY29udGVudHMKKyAqIGRlcGVuZCBvbiB0aGUgdmFsdWUg
b2YgdGhlICdhY2NlcHQnIGF0dHJpYnV0ZSBmb3IgSFRNTCBpbnB1dAorICogZWxlbWVudHMuCisg
KgorICogUmV0dXJuczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNmZXIgbm9uZSk6
IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBpZiBhIGxpc3Qgb2YgYWNj
ZXB0ZWQgTUlNRSB0eXBlcworICogaXMgZGVmaW5lZCBvciAlTlVMTCBvdGhlcndpc2UsIG1lYW5p
bmcgdGhhdCBhbnkgTUlNRSB0eXBlIHNob3VsZCBiZQorICogYWNjZXB0ZWQuIFRoaXMgYXJyYXkg
YW5kIGl0cyBjb250ZW50cyBhcmUgb3duZWQgYnkgV2ViS2l0R1RLKyBhbmQKKyAqIHNob3VsZCBu
b3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK2NvbnN0IGdjaGFyKiBjb25zdCogd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklM
RV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5t
aW1lVHlwZXMpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVl
c3QtPnByaXYtPm1pbWVUeXBlcy0+cGRhdGEpOworCisgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJl
Zj4gd2tNaW1lVHlwZXMoQWRvcHRXSywgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzQ29weUFjY2VwdGVk
TUlNRVR5cGVzKHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycy5nZXQoKSkpOworICAgIHNpemVf
dCBudW1PZk1pbWVUeXBlcyA9IFdLQXJyYXlHZXRTaXplKHdrTWltZVR5cGVzLmdldCgpKTsKKyAg
ICBpZiAoIW51bU9mTWltZVR5cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlcXVlc3Qt
PnByaXYtPm1pbWVUeXBlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1
bmMoZ19mcmVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBlczsg
KytpKSB7CisgICAgICAgIFdLU3RyaW5nUmVmIHdrTWltZVR5cGUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTWltZVR5cGVzLmdldCgpLCBpKSk7Cisg
ICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHRvSW1wbCh3a01pbWVUeXBlKS0+c3RyaW5n
KCk7CisgICAgICAgIGlmIChtaW1lVHlwZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPm1pbWVUeXBl
cy5nZXQoKSwgZ19zdHJkdXAobWltZVR5cGVTdHJpbmcudXRmOCgpLmRhdGEoKSkpOworICAgIH0K
KyAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzLmdldCgpLCAwKTsK
KworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnByaXYtPm1p
bWVUeXBlcy0+cGRhdGEpOworfQorCisvKioKKyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfbWltZV90eXBlc19maWx0ZXI6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0CisgKgorICogR2V0IHRoZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0
aCB0aGUgcmVxdWVzdCwgYWxyZWFkeSBzZXQKKyAqIHVwIHdpdGggdGhlIGxpc3Qgb2YgTUlNRSB0
eXBlcyBhcyByZXR1cm5lZCBieQorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9t
aW1lX3R5cGVzKCkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNHdGtGaWxl
RmlsdGVyIGlmIGEgbGlzdCBvZiBhY2NlcHRlZAorICogTUlNRSB0eXBlcyBpcyBkZWZpbmVkIG9y
ICVOVUxMIG90aGVyd2lzZS4gVGhlIHJldHVybmVkIG9iamVjdCBpcworICogb3duZWQgYnkgV2Vi
S2l0R1RLKyBzaG91bGQgbm90IGJlIG1vZGlmaWVkIG9yIGZyZWVkLgorICovCitHdGtGaWxlRmls
dGVyKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlm
IChyZXF1ZXN0LT5wcml2LT5maWx0ZXIpCisgICAgICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5m
aWx0ZXIuZ2V0KCk7CisKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiB3a01pbWVUeXBlcyhB
ZG9wdFdLLCBXS09wZW5QYW5lbFBhcmFtZXRlcnNDb3B5QWNjZXB0ZWRNSU1FVHlwZXMocmVxdWVz
dC0+cHJpdi0+d2tQYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgc2l6ZV90IG51bU9mTWltZVR5cGVz
ID0gV0tBcnJheUdldFNpemUod2tNaW1lVHlwZXMuZ2V0KCkpOworICAgIGlmICghbnVtT2ZNaW1l
VHlwZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRG8gbm90IHVzZSBhZG9wdEdSZWYg
aGVyZSwgc2luY2Ugd2Ugd2FudCB0byBzaW5rIHRoZSBmbG9hdGluZworICAgIC8vIHJlZmVyZW5j
ZSBmb3IgdGhlIG5ldyBpbnN0YW5jZSBvZiBHdGtGaWxlRmlsdGVyLCBzbyB3ZSBtYWtlCisgICAg
Ly8gc3VyZSB3ZSBrZWVwIHRoZSBvd25lcnNoaXAgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUg
cmVxdWVzdC4KKyAgICByZXF1ZXN0LT5wcml2LT5maWx0ZXIgPSBndGtfZmlsZV9maWx0ZXJfbmV3
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBlczsgKytpKSB7Cisg
ICAgICAgIFdLU3RyaW5nUmVmIHdrTWltZVR5cGUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTWltZVR5cGVzLmdldCgpLCBpKSk7CisgICAgICAgIFN0
cmluZyBtaW1lVHlwZVN0cmluZyA9IHRvSW1wbCh3a01pbWVUeXBlKS0+c3RyaW5nKCk7CisgICAg
ICAgIGlmIChtaW1lVHlwZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgZ3RrX2ZpbGVfZmlsdGVyX2FkZF9taW1lX3R5cGUocmVxdWVzdC0+cHJpdi0+Zmls
dGVyLmdldCgpLCBtaW1lVHlwZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXM6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0CisgKiBAZmlsZXM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkg
KHRyYW5zZmVyIG5vbmUpOiBhCisgKiAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3Ms
IGNvbnRhaW5pbmcgcGF0aHMgdG8gbG9jYWwgZmlsZXMuCisgKgorICogQXNrIFdlYktpdCB0byBj
aG9vc2UgbG9jYWwgZmlsZXMgZm9yIHVwbG9hZCBhbmQgY29tcGxldGUgdGhlCisgKiByZXF1ZXN0
LgorICovCit2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMoV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBnY2hhciogY29uc3QqIGZpbGVz
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNU
KHJlcXVlc3QpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGZpbGVzKTsKKworICAgIFdLUmV0YWlu
UHRyPFdLTXV0YWJsZUFycmF5UmVmPiB3a0Nob3NlbkZpbGVzKEFkb3B0V0ssIFdLTXV0YWJsZUFy
cmF5Q3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBmaWxlc1tpXTsgaSsrKSB7CisgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBwYXRoIGlzIHByZXNlbnRlZCBhcyBhbiBVUkkgKGVz
Y2FwZWQKKyAgICAgICAgLy8gc3RyaW5nLCB3aXRoIHRoZSAnZmlsZTovLycgcHJlZml4KSB0byBX
ZWJDb3JlIG90aGVyd2lzZSB0aGUKKyAgICAgICAgLy8gRmlsZUNob29zZXIgd29uJ3QgYWN0dWFs
bHkgY2hvb3NlIGl0LgorICAgICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlbmFtZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVzW2ldKSk7CisgICAgICAgIEdPd25QdHI8Y2hhcj4g
dXJpKGdfZmlsZV9nZXRfdXJpKGZpbGVuYW1lLmdldCgpKSk7CisgICAgICAgIFdLUmV0YWluUHRy
PFdLVVJMUmVmPiB3a1VSTChBZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1cmku
Z2V0KCkpKTsKKyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0od2tDaG9zZW5GaWxlcy5nZXQoKSwg
d2tVUkwuZ2V0KCkpOworICAgIH0KKyAgICBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyQ2hvb3Nl
RmlsZXMocmVxdWVzdC0+cHJpdi0+d2tMaXN0ZW5lci5nZXQoKSwgd2tDaG9zZW5GaWxlcy5nZXQo
KSk7CisgICAgcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QgPSB0cnVlOworfQorCisvKioK
KyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXM6CisgKiBA
cmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogR2V0IHRoZSBsaXN0
IG9mIHNlbGVjdGVkIGZpbGVzIGN1cnJlbnRseSBhc3NvY2lhdGVkIHRvIHRoZQorICogcmVxdWVz
dC4gVGhpcyBsaXN0IHdpbGwgbm9ybWFsbHkgYmUgZW1wdHkgd2l0aCB0aGUgZmlyc3QKKyAqIHJl
cXVlc3QgYW5kIHdpbGwgY29udGFpbiB0aGUgbGlzdCBvZiBmaWxlcyBwcmV2aW91c2x5IHNlbGVj
dGVkLAorICogaWYgYW55LCBpbiBmdXJ0aGVyIHJlcXVlc3RzIG92ZXIgdGhlIHNhbWUgSFRNTCBp
bnB1dCBFbGVtZW50LgorICoKKyAqIFJldHVybnM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkg
KHRyYW5zZmVyIG5vbmUpOiBhCisgKiAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3Mg
aWYgdGhlcmUgYXJlIHNlbGVjdGVkIGZpbGVzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVl
c3Qgb3IgJU5VTEwgb3RoZXJ3aXNlLiBUaGlzIGFycmF5IGFuZCBpdHMKKyAqIGNvbnRlbnRzIGFy
ZSBvd25lZCBieSBXZWJLaXRHVEsrIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIG9yCisgKiBm
cmVlZC4KKyAqLworY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVF
U1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzKQor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5z
ZWxlY3RlZEZpbGVzLT5wZGF0YSk7CisKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiBzZWxlY3Rl
ZEZpbGVOYW1lcyA9IHRvSW1wbChyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpLT5z
ZWxlY3RlZEZpbGVOYW1lcygpOworICAgIHNpemVfdCBudW1PZkZpbGVzID0gc2VsZWN0ZWRGaWxl
TmFtZXMuc2l6ZSgpOworICAgIGlmICghbnVtT2ZGaWxlcykKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5
X25ld193aXRoX2ZyZWVfZnVuYyhnX2ZyZWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bU9mRmlsZXM7ICsraSkgeworICAgICAgICBpZiAoc2VsZWN0ZWRGaWxlTmFtZXNbaV0uaXNF
bXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIENTdHJpbmcgZmlsZW5hbWUg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc2VsZWN0ZWRGaWxlTmFtZXNbaV0pOworICAgICAg
ICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgZ19z
dHJkdXAoZmlsZW5hbWUuZGF0YSgpKSk7CisgICAgfQorICAgIGdfcHRyX2FycmF5X2FkZChyZXF1
ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLmdldCgpLCAwKTsKKworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMtPnBkYXRhKTsK
K30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsOgorICogQHJl
cXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIEFzayBXZWJLaXQgdG8g
Y2FuY2VsIHRoZSByZXF1ZXN0LiBJdCdzIGltcG9ydGFudCB0byBkbyB0aGlzIGluIGNhc2UKKyAq
IG5vIHNlbGVjdGlvbiBoYXMgYmVlbiBtYWRlIGluIHRoZSBjbGllbnQsIG90aGVyd2lzZSB0aGUg
cmVxdWVzdAorICogd29uJ3QgYmUgcHJvcGVybHkgY29tcGxldGVkIGFuZCB0aGUgYnJvd3NlciB3
aWxsIGtlZXAgdGhlIHJlcXVlc3QKKyAqIHBlbmRpbmcgZm9yZXZlciwgd2hpY2ggbWlnaHQgY2F1
c2UgdGhlIGJyb3dzZXIgdG8gaGFuZy4KKyAqLwordm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY2FuY2VsKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSk7
CisgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lckNhbmNlbChyZXF1ZXN0LT5wcml2LT53a0xp
c3RlbmVyLmdldCgpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmE3MDY1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaApAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJf
SF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25s
eSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYK
KworI2lmbmRlZiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RfaAorI2RlZmluZSBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3RfaAorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfRklMRV9DSE9PU0VSX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
VFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KSkKKyNk
ZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFV
RVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19G
SUxFX0NIT09TRVJfUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCkpCisjZGVmaW5lIFdF
QktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCkpCisj
ZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVR
VUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICAgICAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MgICBXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGU7CisKK3N0cnVj
dCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAg
IC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgKnBy
aXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzIHsKKyAgICBH
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlICAgICAgICAgICAgICAgICAgICh2b2lkKTsK
KworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93
c19tdWx0aXBsZV9zZWxlY3Rpb24gIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3Qp
OworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICogY29uc3QgKgord2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzICAgICAgICAgICAgIChXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIEd0a0ZpbGVGaWx0ZXIgKgord2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlciAgICAgIChXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMgICAgICAgICAgICAgICAoV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGNvbnN0ICAgICAgKmZpbGVzKTsK
KworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqIGNvbnN0ICoKK3dlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMgICAgICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY2FuY2VsICAgICAgICAgICAgICAgICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCAqcmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNzIy
NGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRl
X2gKKworI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIgorI2luY2x1ZGUgIldl
YktpdFByaXZhdGUuaCIKKworV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiB3ZWJraXRGaWxlQ2hv
b3NlclJlcXVlc3RDcmVhdGUoV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmLCBXS09wZW5QYW5lbFJl
c3VsdExpc3RlbmVyUmVmKTsKKworI2VuZGlmIC8vIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFBy
aXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VUlDbGllbnQuY3BwCmluZGV4IDZmMGUxMWMuLjlmNzhjOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTIwLDEyICsy
MCwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdFVJQ2xpZW50Lmgi
CiAKKyNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5o
IgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2lu
ZG93UHJvcGVydGllc1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIApAQCAtMTM2LDYgKzEzOCwxMiBAQCBz
dGF0aWMgdm9pZCBwcmludEZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBj
b25zdCB2b2lkKikKICAgICB3ZWJraXRXZWJWaWV3UHJpbnRGcmFtZShXRUJLSVRfV0VCX1ZJRVco
dG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpLCBmcmFtZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ1
bk9wZW5QYW5lbChXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tPcGVuUGFuZWxQ
YXJhbWV0ZXJzUmVmIHBhcmFtZXRlcnMsIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYgbGlz
dGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0RmlsZUNob29zZXJSZXF1
ZXN0Q3JlYXRlKHBhcmFtZXRlcnMsIGxpc3RlbmVyKSk7CisgICAgd2Via2l0V2ViVmlld1J1bkZp
bGVDaG9vc2VyUmVxdWVzdChXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIHJlcXVlc3QuZ2V0
KCkpOworfQorCiB2b2lkIGF0dGFjaFVJQ2xpZW50VG9WaWV3KFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCiB7CiAgICAgV0tQYWdlVUlDbGllbnQgd2tVSUNsaWVudCA9IHsKQEAgLTE2OSw3ICsxNzcs
NyBAQCB2b2lkIGF0dGFjaFVJQ2xpZW50VG9WaWV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAg
ICAgICAgIDAsIC8vIGRpZERyYXcKICAgICAgICAgMCwgLy8gcGFnZURpZFNjcm9sbAogICAgICAg
ICAwLCAvLyBleGNlZWRlZERhdGFiYXNlUXVvdGEKLSAgICAgICAgMCwgLy8gcnVuT3BlblBhbmVs
CisgICAgICAgIHJ1bk9wZW5QYW5lbCwKICAgICAgICAgMCwgLy8gZGVjaWRlUG9saWN5Rm9yR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdAogICAgICAgICAwLCAvLyBoZWFkZXJIZWlnaHQKICAg
ICAgICAgMCwgLy8gZm9vdGVySGVpZ2h0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDRmMTdkNDYuLjVmYTE4M2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CkBAIC01OSw2ICs1OSw3IEBAIGVudW0gewogICAgIFNDUklQVF9ESUFMT0csCiAKICAgICBERUNJ
REVfUE9MSUNZLAorICAgIFJVTl9GSUxFX0NIT09TRVIsCiAKICAgICBNT1VTRV9UQVJHRVRfQ0hB
TkdFRCwKIApAQCAtMTg4LDYgKzE4OSw0OSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0
U2V0dGluZ3MoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0U2V0dGluZ3MqIHNldAogICAg
IGdfc2lnbmFsX2Nvbm5lY3Qoc2V0dGluZ3MsICJub3RpZnk6Onpvb20tdGV4dC1vbmx5IiwgR19D
QUxMQkFDSyh6b29tVGV4dE9ubHlDaGFuZ2VkKSwgd2ViVmlldyk7CiB9CiAKK3N0YXRpYyB2b2lk
IGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtEaWFsb2cqIGRpYWxvZywgZ2lu
dCByZXNwb25zZUlELCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAg
R1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IGFkb3B0ZWRSZXF1ZXN0ID0gYWRvcHRH
UmVmKHJlcXVlc3QpOworICAgIGlmIChyZXNwb25zZUlEID09IEdUS19SRVNQT05TRV9BQ0NFUFQp
IHsKKyAgICAgICAgR093blB0cjxHU0xpc3Q+IGZpbGVzTGlzdChndGtfZmlsZV9jaG9vc2VyX2dl
dF9maWxlbmFtZXMoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKSk7CisgICAgICAgIEdSZWZQdHI8
R1B0ckFycmF5PiBmaWxlc0FycmF5ID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsKKyAg
ICAgICAgZm9yIChHU0xpc3QqIGZpbGUgPSBmaWxlc0xpc3QuZ2V0KCk7IGZpbGU7IGZpbGUgPSBn
X3NsaXN0X25leHQoZmlsZSkpCisgICAgICAgICAgICBnX3B0cl9hcnJheV9hZGQoZmlsZXNBcnJh
eS5nZXQoKSwgZmlsZS0+ZGF0YSk7CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChmaWxlc0FycmF5
LmdldCgpLCAwKTsKKyAgICAgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29zZV9m
aWxlcyhhZG9wdGVkUmVxdWVzdC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBnY2hhciog
Y29uc3QqPihmaWxlc0FycmF5LT5wZGF0YSkpOworICAgIH0gZWxzZQorICAgICAgICB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGFkb3B0ZWRSZXF1ZXN0LmdldCgpKTsKKworICAg
IGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGRpYWxvZykpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBHdGtXaWRnZXQqIHRv
cGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVCh3ZWJWaWV3KSk7Cisg
ICAgaWYgKCF3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3codG9wbGV2ZWwpKQorICAgICAg
ICB0b3BsZXZlbCA9IDA7CisKKyAgICBnYm9vbGVhbiBhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA9
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uKHJl
cXVlc3QpOworICAgIEd0a1dpZGdldCogZGlhbG9nID0gZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFsb2df
bmV3KGFsbG93c011bHRpcGxlU2VsZWN0aW9uID8gXygiU2VsZWN0IEZpbGVzIikgOiBfKCJTZWxl
Y3QgRmlsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRvcGxldmVsID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19GSUxFX0NIT09TRVJf
QUNUSU9OX09QRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfT1BF
TiwgR1RLX1JFU1BPTlNFX0FDQ0VQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGlmIChHdGtGaWxlRmlsdGVyKiBmaWx0
ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJl
cXVlc3QpKQorICAgICAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9maWx0ZXIoR1RLX0ZJTEVfQ0hP
T1NFUihkaWFsb2cpLCBmaWx0ZXIpOworICAgIGd0a19maWxlX2Nob29zZXJfc2V0X3NlbGVjdF9t
dWx0aXBsZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIGFsbG93c011bHRpcGxlU2VsZWN0aW9u
KTsKKworICAgIGlmIChjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpKQorICAgICAg
ICBndGtfZmlsZV9jaG9vc2VyX3NlbGVjdF9maWxlbmFtZShHVEtfRklMRV9DSE9PU0VSKGRpYWxv
ZyksIHNlbGVjdGVkRmlsZXNbMF0pOworCisgICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2csICJy
ZXNwb25zZSIsIEdfQ0FMTEJBQ0soZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKSwg
Z19vYmplY3RfcmVmKHJlcXVlc3QpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsKKwor
ICAgIHJldHVybiBUUlVFOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0
ZWQoR09iamVjdCogb2JqZWN0KQogewogICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2Vi
X3ZpZXdfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCkBAIC0yOTAsNiArMzM0LDcgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3
ZWJWaWV3Q2xhc3MpCiAgICAgd2ViVmlld0NsYXNzLT5jcmVhdGUgPSB3ZWJraXRXZWJWaWV3Q3Jl
YXRlOwogICAgIHdlYlZpZXdDbGFzcy0+c2NyaXB0X2RpYWxvZyA9IHdlYmtpdFdlYlZpZXdTY3Jp
cHREaWFsb2c7CiAgICAgd2ViVmlld0NsYXNzLT5kZWNpZGVfcG9saWN5ID0gd2Via2l0V2ViVmll
d0RlY2lkZVBvbGljeTsKKyAgICB3ZWJWaWV3Q2xhc3MtPnJ1bl9maWxlX2Nob29zZXIgPSB3ZWJr
aXRXZWJWaWV3UnVuRmlsZUNob29zZXI7CiAKICAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUo
d2ViVmlld0NsYXNzLCBzaXplb2YoV2ViS2l0V2ViVmlld1ByaXZhdGUpKTsKIApAQCAtNjE1LDYg
KzY2MCwzNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRX
ZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9U
WVBFX1BPTElDWV9ERUNJU0lPTl9UWVBFKTsKIAogICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZp
ZXc6OnJ1bi1maWxlLWNob29zZXI6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZp
ZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQHJlcXVlc3Q6IGEgI1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1p
dHRlZCB3aGVuIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIGEgJmx0O2lucHV0CisgICAgICogdHlw
ZT0nZmlsZScgLyZndDsgSFRNTCBlbGVtZW50LCByZXF1ZXN0aW5nIGZyb20gV2ViS2l0IHRvIHNo
b3cKKyAgICAgKiBhIGRpYWxvZyB0byBzZWxlY3Qgb25lIG9yIG1vcmUgZmlsZXMgdG8gYmUgdXBs
b2FkZWQuIFRvIGxldCB0aGUKKyAgICAgKiBhcHBsaWNhdGlvbiBrbm93IHRoZSBkZXRhaWxzIG9m
IHRoZSBmaWxlIGNob29zZXIsIGFzIHdlbGwgYXMgdG8KKyAgICAgKiBhbGxvdyB0aGUgY2xpZW50
IGFwcGxpY2F0aW9uIHRvIGVpdGhlciBjYW5jZWwgdGhlIHJlcXVlc3Qgb3IKKyAgICAgKiBwZXJm
b3JtIGFuIGFjdHVhbCBzZWxlY3Rpb24gb2YgZmlsZXMsIHRoZSBzaWduYWwgd2lsbCBwYXNzIGFu
CisgICAgICogaW5zdGFuY2Ugb2YgdGhlICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgaW4gdGhl
IEByZXF1ZXN0CisgICAgICogYXJndW1lbnQuCisgICAgICoKKyAgICAgKiBUaGUgZGVmYXVsdCBz
aWduYWwgaGFuZGxlciB3aWxsIGFzeW5jaHJvbm91c2x5IHJ1biBhIHJlZ3VsYXIKKyAgICAgKiAj
R3RrRmlsZUNob29zZXJEaWFsb2cgZm9yIHRoZSB1c2VyIHRvIGludGVyYWN0IHdpdGguCisgICAg
ICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVp
bmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0
aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKgorICAgICAqLworICAgIHNpZ25hbHNbUlVOX0ZJTEVf
Q0hPT1NFUl0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoInJ1bi1maWxlLWNob29zZXIiLAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAg
R19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgcnVuX2ZpbGVfY2hvb3NlciksCisg
ICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAg
LyogYWNjdW11bGF0b3IgZGF0YSAqLywKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJz
aGFsX0JPT0xFQU5fX09CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFO
LCAxLCAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAqLworICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QpOworCisgICAgLyoqCiAgICAgICogV2ViS2l0
V2ViVmlldzo6bW91c2UtdGFyZ2V0LWNoYW5nZWQ6CiAgICAgICogQHdlYl92aWV3OiB0aGUgI1dl
YktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCiAgICAgICogQGhpdF90
ZXN0X3Jlc3VsdDogYSAjV2ViS2l0SGl0VGVzdFJlc3VsdApAQCAtODIyLDYgKzg5OCwxMiBAQCB2
b2lkIHdlYmtpdFdlYlZpZXdQcmludEZyYW1lKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdLRnJh
bWVSZWYgd2tGcmFtZSkKICAgICBnX3NpZ25hbF9jb25uZWN0KHByaW50T3BlcmF0aW9uLmxlYWtS
ZWYoKSwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhnX29iamVjdF91bnJlZiksIDApOwogfQogCit2
b2lkIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdib29sZWFu
IHJldHVyblZhbHVlOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tSVU5fRklM
RV9DSE9PU0VSXSwgMCwgcmVxdWVzdCwgJnJldHVyblZhbHVlKTsKK30KKwogLyoqCiAgKiB3ZWJr
aXRfd2ViX3ZpZXdfbmV3OgogICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCBmYjRjNDhhLi4wODk2Yzk2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0yOSwxMyAr
MjksMTYgQEAKICNkZWZpbmUgV2ViS2l0V2ViVmlld19oCiAKICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdEJhY2tGb3J3YXJkTGlzdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0SGl0VGVzdFJlc3VsdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2NyaXB0RGlhbG9n
Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJl
cXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4KKyNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdl
YlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oPgpAQCAtMTM4LDYgKzE0
MSwxMCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgZ2Jvb2xlYW4gICAoKiBk
ZWNpZGVfcG9saWN5KSAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lE
ZWNpc2lvbiAgICAgICpkZWNpc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlICAgdHlwZSk7CisKKyAgICBnYm9vbGVh
biAgICgqIHJ1bl9maWxlX2Nob29zZXIpICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAq
d2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCAgKnJlcXVlc3QpOworCiAgICAgdm9pZCAgICAgICAoKiBtb3Vz
ZV90YXJnZXRfY2hhbmdlZCkgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRIaXRUZXN0UmVz
dWx0ICAgICAgICpoaXRfdGVzdF9yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1By
aXZhdGUuaAppbmRleCBhZDhhYjIwLi5mMWNiM2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTQzLDYg
KzQzLDcgQEAgdm9pZCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0KFdlYktpdFdlYlZp
ZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKTsKIGJvb2wgd2Via2l0V2ViVmlld1J1bkphdmFT
Y3JpcHRDb25maXJtKFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKTsKIFdL
U3RyaW5nUmVmIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0UHJvbXB0KFdlYktpdFdlYlZpZXcq
LCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBDU3RyaW5nJiBkZWZhdWx0VGV4dCk7CiB2
b2lkIHdlYmtpdFdlYlZpZXdNYWtlUG9saWN5RGVjaXNpb24oV2ViS2l0V2ViVmlldyosIFdlYktp
dFBvbGljeURlY2lzaW9uVHlwZSwgV2ViS2l0UG9saWN5RGVjaXNpb24qKTsKK3ZvaWQgd2Via2l0
V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVxdWVzdChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV2Vi
S2l0V2ViVmlldyosIFdLSGl0VGVzdFJlc3VsdFJlZiwgdW5zaWduZWQgbW9kaWZpZXJzKTsKIHZv
aWQgd2Via2l0V2ViVmlld1ByaW50RnJhbWUoV2ViS2l0V2ViVmlldyosIFdLRnJhbWVSZWYpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCA0YTljYzc5Li5iNjRjZTJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21s
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1k
b2NzLnNnbWwKQEAgLTI1LDYgKzI1LDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9
InhtbC9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRl
IGhyZWY9InhtbC9XZWJLaXRIaXRUZXN0UmVzdWx0LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdFByaW50T3BlcmF0aW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRFcnJvci54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2Vi
S2l0RmluZENvbnRyb2xsZXIueG1sIi8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCBh
OGY1NDA4Li5lMDU4YjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTQzMiw2ICs0
MzIsMzAgQEAgd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfdHlwZQogPC9TRUNUSU9OPgogCiA8
U0VDVElPTj4KKzxGSUxFPldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDwvRklMRT4KK1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdAord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0
aXBsZV9zZWxlY3Rpb24KK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
cword2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcgord2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29zZV9maWxlcword2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcword2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2NhbmNlbAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dENsYXNzCitXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVAorV0VCS0lUX0ZJTEVfQ0hP
T1NFUl9SRVFVRVNUCitXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QKK1dFQktJVF9GSUxF
X0NIT09TRVJfUkVRVUVTVF9DTEFTUworV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NM
QVNTCitXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1RfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9O
IFByaXZhdGU+CitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlCit3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+CiA8RklMRT5X
ZWJLaXRQcmludE9wZXJhdGlvbjwvRklMRT4KIFdlYktpdFByaW50T3BlcmF0aW9uCiBXZWJLaXRQ
cmludE9wZXJhdGlvblJlc3BvbnNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKaW5kZXggOGU4ZDdiMS4uNWQ3ZWVkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay50eXBlcwpAQCAtOSw1ICs5LDYgQEAgd2Via2l0X3VyaV9yZXNwb25zZV9nZXRfdHlw
ZQogd2Via2l0X3VyaV9yZXF1ZXN0X2dldF90eXBlCiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNf
Z2V0X3R5cGUKIHdlYmtpdF9kb3dubG9hZF9nZXRfdHlwZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF90eXBlCiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF90eXBlCiB3ZWJraXRf
c2NyaXB0X2RpYWxvZ19nZXRfdHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IGJmZWRh
MTYuLjc3MDQ3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTIxOCw2ICsyMTgsMTQg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbmV3V2ViVmlldzsKICAgICB9CiAKKyAgICBzdGF0
aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXIoV2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCogcmVxdWVzdCwgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
dGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1
ZXN0KSk7CisgICAgICAgIHRlc3QtPm1fZmlsZUNob29zZXJSZXF1ZXN0ID0gcmVxdWVzdDsKKyAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJu
IFRSVUU7CisgICAgfQorCiAgICAgdm9pZCBzY3JpcHRBbGVydChXZWJLaXRTY3JpcHREaWFsb2cq
IGRpYWxvZykKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV9zY3JpcHREaWFsb2dUeXBlKSB7CkBA
IC0yODUsNiArMjkzLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgd2Via2l0X3NldHRpbmdz
X3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOwogICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0sodmlld0NyZWF0ZSksIHRoaXMp
OworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInJ1bi1maWxlLWNob29zZXIi
LCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyKSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LWRpYWxvZyIsIEdfQ0FMTEJBQ0soc2NyaXB0RGlhbG9n
KSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibW91c2UtdGFy
Z2V0LWNoYW5nZWQiLCBHX0NBTExCQUNLKG1vdXNlVGFyZ2V0Q2hhbmdlZCksIHRoaXMpOwogICAg
IH0KQEAgLTMxMSwxMiArMzIwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbW91c2VU
YXJnZXRIaXRUZXN0UmVzdWx0LmdldCgpOwogICAgIH0KIAorICAgIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoaW50
IHgsIGludCB5KQorICAgIHsKKyAgICAgICAgY2xpY2tNb3VzZUJ1dHRvbih4LCB5KTsKKyAgICAg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gbV9maWxlQ2hv
b3NlclJlcXVlc3QuZ2V0KCk7CisgICAgfQorCiAgICAgVmVjdG9yPFdlYlZpZXdFdmVudHM+IG1f
d2ViVmlld0V2ZW50czsKICAgICBXZWJLaXRTY3JpcHREaWFsb2dUeXBlIG1fc2NyaXB0RGlhbG9n
VHlwZTsKICAgICBib29sIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkOwogICAgIFdpbmRvd1Byb3Bl
cnRpZXMgbV93aW5kb3dQcm9wZXJ0aWVzOwogICAgIEhhc2hTZXQ8V1RGOjpTdHJpbmc+IG1fd2lu
ZG93UHJvcGVydGllc0NoYW5nZWQ7CiAgICAgR1JlZlB0cjxXZWJLaXRIaXRUZXN0UmVzdWx0PiBt
X21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdDsKKyAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdD4gbV9maWxlQ2hvb3NlclJlcXVlc3Q7CiAgICAgdW5zaWduZWQgaW50IG1fbW91c2VU
YXJnZXRNb2RpZmllcnM7CiB9OwogCkBAIC0zMzIsNiArMzQ5LDg4IEBAIHN0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZShVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xv
c2UpOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4gY2hlY2tNaW1lVHlwZUZvckZpbHRlcihHdGtGaWxl
RmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdjaGFyKiBtaW1lVHlwZSkKK3sKKyAgICBHdGtGaWxlRmls
dGVySW5mbyBmaWx0ZXJJbmZvOworICAgIGZpbHRlckluZm8uY29udGFpbnMgPSBHVEtfRklMRV9G
SUxURVJfTUlNRV9UWVBFOworICAgIGZpbHRlckluZm8ubWltZV90eXBlID0gbWltZVR5cGU7Cisg
ICAgcmV0dXJuIGd0a19maWxlX2ZpbHRlcl9maWx0ZXIoZmlsdGVyLCAmZmlsdGVySW5mbyk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KFVJQ2xpZW50VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0
VW50aWxNYXBwZWQoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZmlsZUNob29zZXJIVE1MRm9y
bWF0ID0gIjxodG1sPjxib2R5PjxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7bGVmdDow
O3RvcDowO21hcmdpbjowO3BhZGRpbmc6MCcgdHlwZT0nZmlsZScgJXMvPjwvYm9keT48L2h0bWw+
IjsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG5vIE1JTUUgZmls
dGVyaW5nLgorICAgIEdPd25QdHI8Y2hhcj4gc2ltcGxlRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBf
cHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgIiIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChz
aW1wbGVGaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBmaWxlQ2hvb3NlclJlcXVl
c3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1
LCA1KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19t
dWx0aXBsZV9zZWxlY3Rpb24oZmlsZUNob29zZXJSZXF1ZXN0KSk7CisKKyAgICBjb25zdCBnY2hh
ciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWlt
ZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOwor
ICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCgh
ZmlsdGVyKTsKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVz
dCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOworICAgIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKKworICAgIC8vIE11bHRpcGxl
IHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVk
IGZpbGVzLgorICAgIEdPd25QdHI8Y2hhcj4gbXVsdGlwbGVTZWxlY3Rpb25GaWxlVXBsb2FkSFRN
TChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAibXVsdGlwbGUiKSk7Cisg
ICAgdGVzdC0+bG9hZEh0bWwobXVsdGlwbGVTZWxlY3Rpb25GaWxlVXBsb2FkSFRNTC5nZXQoKSwg
MCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZmlsZUNob29zZXJS
ZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVl
c3QoNSwgNSk7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93
c19tdWx0aXBsZV9zZWxlY3Rpb24oZmlsZUNob29zZXJSZXF1ZXN0KSk7CisKKyAgICBtaW1lVHlw
ZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29z
ZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKKyAgICBmaWx0ZXIgPSB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKGZpbGVDaG9vc2Vy
UmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7CisgICAgc2VsZWN0ZWRGaWxlcyA9IHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICAvLyBTZWxlY3Qg
c29tZSBmaWxlcy4KKyAgICBjb25zdCBnY2hhciogZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28i
LCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6IiwgMCB9OworICAgIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0LCBmaWxlc1RvU2VsZWN0
KTsKKworICAgIC8vIFBlcmZvcm0gYW5vdGhlciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0
IG9mIGZpbGVzIHNlbGVjdGVkCisgICAgLy8gaW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBu
b3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVlc3QuCisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0g
dGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7
CisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2Vs
ZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZEZp
bGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7
CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoi
KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7CisgICAgd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOworCisgICAgLy8gTXVsdGlw
bGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgb25seSBhY2NlcHQgaW1hZ2VzLCBhdWRpbyBhbmQg
dmlkZW8gZmlsZXMuLgorICAgIEdPd25QdHI8Y2hhcj4gbWltZUZpbHRlcmVkRmlsZVVwbG9hZEhU
TUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgImFjY2VwdD0nYXVkaW8v
Kix2aWRlby8qLGltYWdlLyonIikpOworICAgIHRlc3QtPmxvYWRIdG1sKG1pbWVGaWx0ZXJlZEZp
bGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2Fp
dEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24oZmlsZUNob29zZXJSZXF1
ZXN0KSk7CisKKyAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X21pbWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChtaW1lVHlwZXMp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMF0sID09LCAiYXVkaW8vKiIpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMV0sID09LCAidmlkZW8vKiIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihtaW1lVHlwZXNbMl0sID09LCAiaW1hZ2UvKiIpOworICAgIGdfYXNzZXJ0KCFt
aW1lVHlwZXNbM10pOworCisgICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0
KEdUS19JU19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBl
Rm9yRmlsdGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlw
ZUZvckZpbHRlcihmaWx0ZXIsICJ2aWRlby8qIikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5
cGVGb3JGaWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsKKworICAgIHNlbGVjdGVkRmlsZXMgPSB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2Vy
UmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOworICAgIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKK30KKwogc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyhVSUNsaWVudFRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGh0bWxPbkxvYWRGb3JtYXQg
PSAiPGh0bWw+PGJvZHkgb25Mb2FkPVwiJXNcIj48L2JvZHk+PC9odG1sPiI7CkBAIC00NTksNiAr
NTU4LDcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAic2V0dGluZ3MiLCB0ZXN0V2ViVmlld1NldHRpbmdzKTsKICAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInJlcGxhY2UtY29udGVudCIsIHRlc3RXZWJWaWV3UmVw
bGFjZUNvbnRlbnQpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImNy
ZWF0ZS1yZWFkeS1jbG9zZSIsIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk7CisgICAgVUlD
bGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZmlsZS1jaG9vc2VyLXJlcXVlc3QiLCB0
ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdCk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAiamF2YXNjcmlwdC1kaWFsb2dzIiwgdGVzdFdlYlZpZXdKYXZhU2NyaXB0
RGlhbG9ncyk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAid2luZG93
LXByb3BlcnRpZXMiLCB0ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRpZXMpOwogICAgIFVJQ2xpZW50
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm1vdXNlLXRhcmdldCIsIHRlc3RXZWJWaWV3TW91
c2VUYXJnZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViVmlld1Rlc3QuY3BwCmluZGV4IDMxZGU3MjkuLjYzMjEzNjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5j
cHAKQEAgLTIwMiwzICsyMDIsMzQgQEAgdm9pZCBXZWJWaWV3VGVzdDo6bW91c2VNb3ZlVG8oaW50
IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCiAgICAgZ3RrX21haW5fZG9f
ZXZlbnQoZXZlbnQuZ2V0KCkpOwogfQogCit2b2lkIFdlYlZpZXdUZXN0OjpjbGlja01vdXNlQnV0
dG9uKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vdXNl
TW9kaWZpZXJzKQoreworICAgIGV4ZWN1dGVNb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUFJF
U1MsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmllcnMpOworICAgIGV4ZWN1dGVNb3VzZUJ1dHRv
bkV2ZW50KEdES19CVVRUT05fUkVMRUFTRSwgeCwgeSwgYnV0dG9uLCBtb3VzZU1vZGlmaWVycyk7
Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmV4ZWN1dGVNb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50
VHlwZSBldmVudFR5cGUsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWdu
ZWQgaW50IG1vdXNlTW9kaWZpZXJzKQoreworICAgIGdfYXNzZXJ0KG1fcGFyZW50V2luZG93KTsK
KyAgICBHdGtXaWRnZXQqIHZpZXdXaWRnZXQgPSBHVEtfV0lER0VUKG1fd2ViVmlldyk7CisgICAg
Z19hc3NlcnQoZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQodmlld1dpZGdldCkpOworCisgICAgR093
blB0cjxHZGtFdmVudD4gZXZlbnQoZ2RrX2V2ZW50X25ldyhldmVudFR5cGUpKTsKKyAgICBldmVu
dC0+YnV0dG9uLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKKyAg
ICBnX29iamVjdF9yZWYoZXZlbnQtPmJ1dHRvbi53aW5kb3cpOworCisgICAgZXZlbnQtPmJ1dHRv
bi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICBldmVudC0+YnV0dG9uLnggPSB4OworICAg
IGV2ZW50LT5idXR0b24ueSA9IHk7CisgICAgZXZlbnQtPmJ1dHRvbi5heGVzID0gMDsKKyAgICBl
dmVudC0+YnV0dG9uLnN0YXRlID0gbW91c2VNb2RpZmllcnM7CisgICAgZXZlbnQtPmJ1dHRvbi5i
dXR0b24gPSBidXR0b247CisKKyAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2Vf
bWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2Vy
KGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkodmlld1dpZGdldCkpKTsKKworICAgIGludCB4Um9vdCwg
eVJvb3Q7CisgICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KHZpZXdXaWRnZXQpLCB4LCB5LCAmeFJvb3QsICZ5Um9vdCk7CisgICAgZXZlbnQtPmJ1dHRv
bi54X3Jvb3QgPSB4Um9vdDsKKyAgICBldmVudC0+YnV0dG9uLnlfcm9vdCA9IHlSb290OworICAg
IGd0a19tYWluX2RvX2V2ZW50KGV2ZW50LmdldCgpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCmluZGV4IDAxZjQ2ODUu
LjA0ZjkyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViVmlld1Rlc3QuaApAQCAtNDcsMTIgKzQ3LDE2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwogCiAgICAgdm9pZCBtb3VzZU1vdmVU
byhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDApOworICAgIHZv
aWQgY2xpY2tNb3VzZUJ1dHRvbihpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24gPSAx
LCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAwKTsKIAogICAgIFdlYktpdFdlYlZpZXcq
IG1fd2ViVmlldzsKICAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CiAgICAgQ1N0cmluZyBtX2Fj
dGl2ZVVSSTsKICAgICBHdGtXaWRnZXQqIG1fcGFyZW50V2luZG93OwogICAgIENTdHJpbmcgbV9l
eHBlY3RlZFRpdGxlOworCitwcml2YXRlOgorICAgIHZvaWQgZXhlY3V0ZU1vdXNlQnV0dG9uRXZl
bnQoR2RrRXZlbnRUeXBlLCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwog
fTsKIAogI2VuZGlmIC8vIFdlYlZpZXdUZXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaAppbmRleCAwYTgwN2JjLi5kZGQyNGE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRFZGl0aW5nQ29tbWFuZHMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdEVudW1UeXBlcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RXJyb3IuaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0RmluZENvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEhpdFRl
c3RSZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFByaW50T3BlcmF0aW9uLmg+CkBA
IC0zOCw4ICszOSw4IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXNwb25zZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0V2ViQ29udGV4dC5oPgotI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2Uu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXcuaD4KKyNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXaW5kb3dQcm9w
ZXJ0aWVzLmg+CiAKICN1bmRlZiBfX1dFQktJVDJfSF9JTlNJREVfXwotLSAKMS43LjcuNgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131058</attachid>
            <date>2012-03-09 10:30:16 -0800</date>
            <delta_ts>2012-03-27 06:56:35 -0700</delta_ts>
            <desc>Patch Proposal + Unit Tests + Docs</desc>
            <filename>0001-2012-03-09-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>60672</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBlMjUzYjZiODE3Mjk3MDJmOWM0OWJjZjFiNzMzMjEyMjdlZmFkM2E3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDkgTWFyIDIwMTIgMTE6NDU6MDUgKzAxMDAKU3ViamVjdDogW1BBVENI
XSAyMDEyLTAzLTA5ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4K
CiAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYlVJQ2xpZW50J3MgcnVuT3BlblBhbmVsIGluIFdl
YktpdDJHVEsrCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc4NDkxCgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBBZGQg
YSBuZXcgcHVibGljIGNsYXNzIHRvIHRoZSBBUEksIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCwg
dG8gYmUKICAgICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6cnVu
LWZpbGUtY2hvb3NlciBzaWduYWwgdG8KICAgICAgICBsZXQgY2xpZW50IGFwcGxpY2F0aW9ucyB0
byBwcm92aWRlIHRoZWlyIG93biBmaWxlIGNob29zZXIgZGlhbG9nCiAgICAgICAgd2hlbiB0aGUg
dXNlIGludGVyYWN0cyB3aXRoIEhUTUwgSW5wdXQgZWxlbWVudHMgb2YgdHlwZSAnZmlsZScuCgog
ICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIG5ldyBzb3VyY2UgZmlsZXMgYW5kIGhlYWRl
cnMuCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qu
Y3BwOiBBZGRlZC4KICAgICAgICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpOgog
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdCk6CiAgICAgICAgKHdlYmtp
dEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXplKToKICAgICAgICAod2Via2l0RmlsZUNob29zZXJS
ZXF1ZXN0R2V0UHJvcGVydHkpOgogICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Y2xhc3NfaW5pdCk6CiAgICAgICAgKHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdENyZWF0ZSk6CiAg
ICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0
aW9uKToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVz
KToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2Zp
bHRlcik6CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMp
OgogICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVz
KToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCk6CiAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaDogQWRkZWQuCiAg
ICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QpOgogICAgICAgIChfV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0Q2xhc3MpOgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oOiBBZGRlZCwKICAgICAgICBjb250YWluaW5nIHRoZSBw
cm90b3R5cGUgb2Ygd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlLgoKICAgICAgICBQcm92
aWRlIHByaXZhdGUgQVBJIHRvIG1ha2UgYSBmaWxlIGNob29zZXIgcmVxdWVzdCBmcm9tIHRoZQog
ICAgICAgIFdlYlZpZXcsIGFuZCBwcm92aWRlIGEgZGVmYXVsdCBoYW5kbGVyIGZvciBpdC4KCiAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKICAgICAgICAoZmls
ZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKTogSGFuZGxlciBmb3IgdGhlICdyZXNwb25z
ZScKICAgICAgICBzaWduYWwgZm9yIHRoZSBHdGtGaWxlQ2hvb3NlckRpYWxvZyB1c2VkIGluIHRo
ZSBkZWZhdWx0CiAgICAgICAgaGFuZGxlci4gSXQgd2lsbCBjYWxsIHRvIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMKICAgICAgICBvciB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfY2FuY2VsIGFzIG5lZWRlZC4KICAgICAgICAod2Via2l0V2ViVmlld1J1bkZpbGVD
aG9vc2VyKTogRGVmYXVsdCBoYW5kbGVyIGZvciB0aGUgbmV3CiAgICAgICAgJ3J1bi1maWxlLWNo
b29zZXInIHNpZ25hbC4gSXQgd2lsbCBjcmVhdGUgYSBHdGtGaWxlQ2hvb3NlckRpYWxvZywKICAg
ICAgICBjb25uZWN0IHRvIHRoZSAncmVzcG9uc2UnIHNpZ25hbCBhbmQgc2hvdyBpdC4KICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBDb25uZWN0IHRoZSAncnVuLWZpbGUtY2hv
b3NlcicKICAgICAgICBzaWduYWwgdG8gdGhlIGRlZmF1bHQgaGFuZGxlciwgd2Via2l0V2ViVmll
d1J1bkZpbGVDaG9vc2VyLgogICAgICAgICh3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1
ZXN0KToKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKICAgICAg
ICAoX1dlYktpdFdlYlZpZXdDbGFzcyk6IEFkZGVkIHByb3RvdHlwZSBmb3IgdGhlIGhhbmRsZXIg
b2YgdGhlIG5ldwogICAgICAgICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwuCiAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOiBBZGRlZCBwcm90b3R5cGUg
Zm9yCiAgICAgICAgcHJpdmF0ZSBuZXcgZnVuY3Rpb24gd2Via2l0V2ViVmlld1J1bkZpbGVDaG9v
c2VyUmVxdWVzdC4KCiAgICAgICAgUHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcnVuT3Bl
blBhbmVsIGluIFdlYktpdFVJQ2xpZW50LgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFVJQ2xpZW50LmNwcDoKICAgICAgICAocnVuT3BlblBhbmVsKTogTmV3LCBpbXBsZW1lbnRz
IHJ1bk9wZW5QYW5lbCBieSBjcmVhdGluZyBhbgogICAgICAgIGluc3RhbmNlIG9mIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCBhbmQgYXNraW5nIHRoZSBXZWJWaWV3IHRvCiAgICAgICAgZW1pdCB0
aGUgJ3J1bi1maWxlLWNob29zZXInIHNpZ25hbCB3aXRoIGl0LgogICAgICAgIChhdHRhY2hVSUNs
aWVudFRvVmlldyk6IFJlZmVyZW5jZSB0aGUgbmV3IHJ1bk9wZW5QYW5lbCBmdW5jdGlvbi4KCiAg
ICAgICAgQWRkZWQgdGhlIG5ldyBwdWJsaWNoIGhlYWRlciB0byB0aGUgbWFpbiBoZWFkZXIuCgog
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOiBBZGRlZCBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QuaC4KCiAgICAgICAgTmV3IHVuaXQgdGVzdHMgZm9yIHRoZSBuZXcgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0IEFQSS4gQWxzbywKICAgICAgICBleHRlbmRlZCB0aGUgV2ViVmll
d1Rlc3QgY2xhc3MgdG8gYWxsb3cgc2ltdWxhdGluZyBtb3VzZSBjbGlja3MuCgogICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgogICAgICAgIChj
aGVja01pbWVUeXBlRm9yRmlsdGVyKTogTmV3LCBjaGVja3Mgd2hldGhlciBhIEd0a0ZpbGVGaWx0
ZXIKICAgICAgICBmaWx0ZXJzIGEgZ2l2ZW4gTUlNRSB0eXBlLCBhcyBzcGVjaWZpZWQgYnkgUkZD
IDIwNDYuCiAgICAgICAgKHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KTogTmV3IHVuaXQg
dGVzdC4KICAgICAgICAoYmVmb3JlQWxsKTogQWRkIHRoZSBuZXcgdW5pdCB0ZXN0IGFzIGFuIFVJ
Q2xpZW50VGVzdC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5jcHA6CiAgICAgICAgKFdlYlZpZXdUZXN0OjpjbGlja01vdXNlQnV0dG9uKTogTmV3IHB1Ymxp
YyBmdW5jdGlvbiB0byBzaW11bGF0ZSBhCiAgICAgICAgbW91c2UgY2xpY2sgdGhyb3VnaCBHZGtF
dmVudHMsIGFzIHRoZSBjb21iaW5hdGlvbiBvZiBhICdwcmVzcycgYW5kCiAgICAgICAgYSAncmVs
ZWFzZScgZXZlbnQuIFVzZWQgZnJvbSB0aGUgbmV3IHVuaXQgdGVzdCB0byBzaW11bGF0ZSB0aGUK
ICAgICAgICB1c2VyIHByZXNzaW5nIGluIHRoZSBidXR0b24gcmVuZGVyZWQgZm9yIGEgSFRNTCBJ
bnB1dCBlbGVtZW50LgogICAgICAgIChXZWJWaWV3VGVzdDo6ZXhlY3V0ZU1vdXNlQnV0dG9uRXZl
bnQpOiBOZXcgcHJpdmF0ZSBmdW5jdGlvbiB0bwogICAgICAgIHNpbXVsYXRlIGEgbW91c2UgZXZl
bnQgdGhyb3VnaCBHZGtFdmVudHMuCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJWaWV3VGVzdC5oOgoKICAgICAgICBVcGRhdGVkIGRvY3VtZW50YXRpb24gcmVsYXRlZCBmaWxl
cyB3aXRoIHRoZSBuZXcgQVBJLgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1zZWN0aW9ucy50eHQ6IEFkZGVkIG5ldyBBUEkuCiAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBuZXcgc2VjdGlvbi4KICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlczogQWRkZWQgZ2V0
X3R5cGUgZnVuY3Rpb24uCgoyMDEyLTAzLTA5ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNo
ZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYlVJQ2xpZW50J3MgcnVu
T3BlblBhbmVsIGluIFdlYktpdDJHVEsrCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4NDkxCgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKICAgICAgICBIYW5kbGUgdGhlIEdQdHJBcnJheSB0eXBlIGluIEdSZWZQdHIsIGJ5IGNhbGxp
bmcgZ19wdHJfYXJyYXlfcmVmCiAgICAgICAgYW5kIGdfcHRyX2FycmF5X3VucmVmIGluIHRoZSBp
bXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVmR1B0ciBhbmQgdGhlCiAgICAgICAgZnJlZU93bmVkR1B0
ciB0ZW1wbGF0ZSBmdW5jdGlvbnMuCgogICAgICAgICogd3RmL2dvYmplY3QvR1JlZlB0ci5jcHA6
CiAgICAgICAgKFdURjo6cmVmR1B0cik6CiAgICAgICAgKFdURik6CiAgICAgICAgKFdURjo6ZGVy
ZWZHUHRyKToKICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuaDoKICAgICAgICAoV1RGKToK
LS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICB8
ICAgMTkgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwICAg
ICAgfCAgIDEzICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVmUHRyLmgg
ICAgICAgIHwgICAgMiArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVk
ZWZzLmggICAgICB8ICAgIDEgKwogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDg4ICsrKysrCiBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5h
bSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgfCAgMzc3ICsrKysrKysrKysrKysrKysrKysrCiAu
Li4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmggICB8ICAgNzgg
KysrKwogLi4uL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oICAgICAg
fCAgIDI4ICsrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5j
cHAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuY3BwIHwgICA4MiArKysrKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oICAgfCAgICA3ICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3UHJpdmF0ZS5oICAgICAgIHwgICAgMSArCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLWRvY3Muc2dtbCAgICB8ICAgIDEgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQgfCAgIDI0ICsrCiAuLi4vVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzICAgICAgICB8ICAgIDEgKwogLi4uL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcCAgfCAgMTAwICsrKysrKwogLi4u
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCAgICAgICAgfCAgIDMxICsr
CiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oICB8ICAg
IDQgKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oICAgICAgICAg
fCAgICAzICstCiAyMCBmaWxlcyBjaGFuZ2VkLCA4NzIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlv
bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
Y2NkMzMxLi5hMDg2YzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBA
QAorMjAxMi0wMy0wOSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYlVJQ2xpZW50J3MgcnVuT3BlblBhbmVsIGlu
IFdlYktpdDJHVEsrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03ODQ5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEhhbmRsZSB0aGUgR1B0ckFycmF5IHR5cGUgaW4gR1JlZlB0ciwgYnkgY2FsbGluZyBnX3B0
cl9hcnJheV9yZWYKKyAgICAgICAgYW5kIGdfcHRyX2FycmF5X3VucmVmIGluIHRoZSBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgcmVmR1B0ciBhbmQgdGhlCisgICAgICAgIGZyZWVPd25lZEdQdHIgdGVt
cGxhdGUgZnVuY3Rpb25zLgorCisgICAgICAgICogd3RmL2dvYmplY3QvR1JlZlB0ci5jcHA6Cisg
ICAgICAgIChXVEY6OnJlZkdQdHIpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6ZGVy
ZWZHUHRyKToKKyAgICAgICAgKiB3dGYvZ29iamVjdC9HUmVmUHRyLmg6CisgICAgICAgIChXVEYp
OgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oOgorCiAyMDEyLTAzLTA4ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBm
b3IgTVNWQyBhZnRlciByMTEwMjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2dvYmplY3QvR1JlZlB0ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmpl
Y3QvR1JlZlB0ci5jcHAKaW5kZXggMzBkZjJjOS4uM2EwMTRkYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZ29iamVjdC9HUmVmUHRyLmNwcApAQCAtMTA3LDYgKzEwNywxOSBAQCB0
ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHU291cmNlKiBwdHIpCiAgICAgICAgIGdfc291cmNl
X3VucmVmKHB0cik7CiB9CiAKK3RlbXBsYXRlIDw+IEdQdHJBcnJheSogcmVmR1B0cihHUHRyQXJy
YXkqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX3B0cl9hcnJheV9yZWYocHRyKTsK
KyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHUHRyQXJy
YXkqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX3B0cl9hcnJheV91bnJlZihwdHIp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIEVOQUJMRShHTElCX1NVUFBP
UlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1JlZlB0
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAppbmRleCA5
MmFjZmZjLi5mNGZmM2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dv
YmplY3QvR1JlZlB0ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9H
UmVmUHRyLmgKQEAgLTIwOCw2ICsyMDgsOCBAQCB0ZW1wbGF0ZSA8PiBHVmFyaWFudCogcmVmR1B0
cihHVmFyaWFudCogcHRyKTsKIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdWYXJpYW50KiBw
dHIpOwogdGVtcGxhdGUgPD4gR1NvdXJjZSogcmVmR1B0cihHU291cmNlKiBwdHIpOwogdGVtcGxh
dGUgPD4gdm9pZCBkZXJlZkdQdHIoR1NvdXJjZSogcHRyKTsKK3RlbXBsYXRlIDw+IEdQdHJBcnJh
eSogcmVmR1B0cihHUHRyQXJyYXkqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdQdHJB
cnJheSopOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIHJlZkdQdHIoVCogcHRy
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dUeXBl
ZGVmcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCmlu
ZGV4IGUyOTI1MGIuLmI4YmNiYWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9n
b2JqZWN0L0dUeXBlZGVmcy5oCkBAIC01Niw2ICs1Niw3IEBAIHR5cGVkZWYgc3RydWN0IF9HTWFp
bkxvb3AgR01haW5Mb29wOwogdHlwZWRlZiBzdHJ1Y3QgX0dQYXR0ZXJuU3BlYyBHUGF0dGVyblNw
ZWM7CiB0eXBlZGVmIHN0cnVjdCBfR1BvbGxhYmxlT3V0cHV0U3RyZWFtIEdQb2xsYWJsZU91dHB1
dFN0cmVhbTsKIHR5cGVkZWYgc3RydWN0IF9HU0xpc3QgR1NMaXN0OwordHlwZWRlZiBzdHJ1Y3Qg
X0dQdHJBcnJheSBHUHRyQXJyYXk7CiB0eXBlZGVmIHN0cnVjdCBfR1NvY2tldENsaWVudCBHU29j
a2V0Q2xpZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXRDb25uZWN0aW9uIEdTb2NrZXRDb25u
ZWN0aW9uOwogdHlwZWRlZiBzdHJ1Y3QgX0dTb3VyY2UgR1NvdXJjZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA2
M2YwZTYyLi42OTBhMjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTItMDMtMDkg
IE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
VEtdIEltcGxlbWVudCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXQyR1RLKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg0OTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcg
cHVibGljIGNsYXNzIHRvIHRoZSBBUEksIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCwgdG8gYmUK
KyAgICAgICAgZW1pdHRlZCBhbG9uZyB3aXRoIGEgbmV3IFdlYktpdFdlYlZpZXc6OnJ1bi1maWxl
LWNob29zZXIgc2lnbmFsIHRvCisgICAgICAgIGxldCBjbGllbnQgYXBwbGljYXRpb25zIHRvIHBy
b3ZpZGUgdGhlaXIgb3duIGZpbGUgY2hvb3NlciBkaWFsb2cKKyAgICAgICAgd2hlbiB0aGUgdXNl
IGludGVyYWN0cyB3aXRoIEhUTUwgSW5wdXQgZWxlbWVudHMgb2YgdHlwZSAnZmlsZScuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHNvdXJjZSBmaWxlcyBhbmQgaGVhZGVy
cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKToK
KyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9pbml0KToKKyAgICAgICAgKHdl
YmtpdEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdEZpbGVDaG9v
c2VyUmVxdWVzdEdldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdENyZWF0
ZSk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxl
X3NlbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXMpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzX2ZpbHRlcik6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hv
b3NlX2ZpbGVzKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2Vs
ZWN0ZWRfZmlsZXMpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNl
bCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
Lmg6IEFkZGVkLgorICAgICAgICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCk6CisgICAgICAg
IChfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaDogQWRkZWQsCisgICAgICAg
IGNvbnRhaW5pbmcgdGhlIHByb3RvdHlwZSBvZiB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVh
dGUuCisKKyAgICAgICAgUHJvdmlkZSBwcml2YXRlIEFQSSB0byBtYWtlIGEgZmlsZSBjaG9vc2Vy
IHJlcXVlc3QgZnJvbSB0aGUKKyAgICAgICAgV2ViVmlldywgYW5kIHByb3ZpZGUgYSBkZWZhdWx0
IGhhbmRsZXIgZm9yIGl0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHA6CisgICAgICAgIChmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2spOiBI
YW5kbGVyIGZvciB0aGUgJ3Jlc3BvbnNlJworICAgICAgICBzaWduYWwgZm9yIHRoZSBHdGtGaWxl
Q2hvb3NlckRpYWxvZyB1c2VkIGluIHRoZSBkZWZhdWx0CisgICAgICAgIGhhbmRsZXIuIEl0IHdp
bGwgY2FsbCB0byB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2hvb3NlX2ZpbGVzCisgICAg
ICAgIG9yIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwgYXMgbmVlZGVkLgorICAg
ICAgICAod2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyKTogRGVmYXVsdCBoYW5kbGVyIGZvciB0
aGUgbmV3CisgICAgICAgICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwuIEl0IHdpbGwgY3JlYXRl
IGEgR3RrRmlsZUNob29zZXJEaWFsb2csCisgICAgICAgIGNvbm5lY3QgdG8gdGhlICdyZXNwb25z
ZScgc2lnbmFsIGFuZCBzaG93IGl0LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2lu
aXQpOiBDb25uZWN0IHRoZSAncnVuLWZpbGUtY2hvb3NlcicKKyAgICAgICAgc2lnbmFsIHRvIHRo
ZSBkZWZhdWx0IGhhbmRsZXIsIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nlci4KKyAgICAgICAg
KHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKF9XZWJLaXRXZWJWaWV3Q2xhc3Mp
OiBBZGRlZCBwcm90b3R5cGUgZm9yIHRoZSBoYW5kbGVyIG9mIHRoZSBuZXcKKyAgICAgICAgJ3J1
bi1maWxlLWNob29zZXInIHNpZ25hbC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3UHJpdmF0ZS5oOiBBZGRlZCBwcm90b3R5cGUgZm9yCisgICAgICAgIHByaXZhdGUg
bmV3IGZ1bmN0aW9uIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3QuCisKKyAgICAg
ICAgUHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcnVuT3BlblBhbmVsIGluIFdlYktpdFVJ
Q2xpZW50LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3Bw
OgorICAgICAgICAocnVuT3BlblBhbmVsKTogTmV3LCBpbXBsZW1lbnRzIHJ1bk9wZW5QYW5lbCBi
eSBjcmVhdGluZyBhbgorICAgICAgICBpbnN0YW5jZSBvZiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QgYW5kIGFza2luZyB0aGUgV2ViVmlldyB0bworICAgICAgICBlbWl0IHRoZSAncnVuLWZpbGUt
Y2hvb3Nlcicgc2lnbmFsIHdpdGggaXQuCisgICAgICAgIChhdHRhY2hVSUNsaWVudFRvVmlldyk6
IFJlZmVyZW5jZSB0aGUgbmV3IHJ1bk9wZW5QYW5lbCBmdW5jdGlvbi4KKworICAgICAgICBBZGRl
ZCB0aGUgbmV3IHB1YmxpY2ggaGVhZGVyIHRvIHRoZSBtYWluIGhlYWRlci4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogQWRkZWQgV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0LmguCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgZm9yIHRoZSBuZXcgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0IEFQSS4gQWxzbywKKyAgICAgICAgZXh0ZW5kZWQgdGhlIFdlYlZpZXdUZXN0
IGNsYXNzIHRvIGFsbG93IHNpbXVsYXRpbmcgbW91c2UgY2xpY2tzLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAoY2hl
Y2tNaW1lVHlwZUZvckZpbHRlcik6IE5ldywgY2hlY2tzIHdoZXRoZXIgYSBHdGtGaWxlRmlsdGVy
CisgICAgICAgIGZpbHRlcnMgYSBnaXZlbiBNSU1FIHR5cGUsIGFzIHNwZWNpZmllZCBieSBSRkMg
MjA0Ni4KKyAgICAgICAgKHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KTogTmV3IHVuaXQg
dGVzdC4KKyAgICAgICAgKGJlZm9yZUFsbCk6IEFkZCB0aGUgbmV3IHVuaXQgdGVzdCBhcyBhbiBV
SUNsaWVudFRlc3QuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3
VGVzdC5jcHA6CisgICAgICAgIChXZWJWaWV3VGVzdDo6Y2xpY2tNb3VzZUJ1dHRvbik6IE5ldyBw
dWJsaWMgZnVuY3Rpb24gdG8gc2ltdWxhdGUgYQorICAgICAgICBtb3VzZSBjbGljayB0aHJvdWdo
IEdka0V2ZW50cywgYXMgdGhlIGNvbWJpbmF0aW9uIG9mIGEgJ3ByZXNzJyBhbmQKKyAgICAgICAg
YSAncmVsZWFzZScgZXZlbnQuIFVzZWQgZnJvbSB0aGUgbmV3IHVuaXQgdGVzdCB0byBzaW11bGF0
ZSB0aGUKKyAgICAgICAgdXNlciBwcmVzc2luZyBpbiB0aGUgYnV0dG9uIHJlbmRlcmVkIGZvciBh
IEhUTUwgSW5wdXQgZWxlbWVudC4KKyAgICAgICAgKFdlYlZpZXdUZXN0OjpleGVjdXRlTW91c2VC
dXR0b25FdmVudCk6IE5ldyBwcml2YXRlIGZ1bmN0aW9uIHRvCisgICAgICAgIHNpbXVsYXRlIGEg
bW91c2UgZXZlbnQgdGhyb3VnaCBHZGtFdmVudHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViVmlld1Rlc3QuaDoKKworICAgICAgICBVcGRhdGVkIGRvY3VtZW50YXRpb24g
cmVsYXRlZCBmaWxlcyB3aXRoIHRoZSBuZXcgQVBJLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkZWQgbmV3IEFQSS4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBu
ZXcgc2VjdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsu
dHlwZXM6IEFkZGVkIGdldF90eXBlIGZ1bmN0aW9uLgorCiAyMDEyLTAzLTA4ICBUb3IgQXJuZSBW
ZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFVzZSBR
dCdzIG1vZHVsZSBzeXN0ZW0gZm9yIGluc3RhbGwgcnVsZXMgYW5kIGRlcGVuZGluZyBvbiBRdFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA5ODAwZmY1Li42NmI2Y2FlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbQpAQCAtODksNiArODksNyBAQCBsaWJ3ZWJraXQyZ3RraW5jbHVkZV9IRUFERVJT
ID0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCiAJ
JChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFZGl0aW5nQ29tbWFuZHMuaCBcCiAJ
JChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKKwkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIFwKIAkkKFdlYktp
dDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmggXAogCSQoV2ViS2l0
MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5oIFwKIAkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oIFwKQEAg
LTU1Miw2ICs1NTMsOSBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwIFwKKwlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3Bw
IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyZGY2
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIgorCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYk9wZW5QYW5lbFBhcmFtZXRlcnMuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxnbGliL2dpMThuLWxp
Yi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogU0VD
VElPTjogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKiBAU2hvcnRfZGVzY3JpcHRpb246IEEg
cmVxdWVzdCB0byBvcGVuIGEgZmlsZSBjaG9vc2VyCisgKiBAVGl0bGU6IFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdAorICogQFNlZV9hbHNvOiAjV2ViS2l0V2ViVmlldworICoKKyAqIFdoZW5ldmVy
IHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIGEgJmx0O2lucHV0IHR5cGU9J2ZpbGUnIC8mZ3Q7IEhU
TUwKKyAqIGVsZW1lbnQsIFdlYktpdCB3aWxsIG5lZWQgdG8gc2hvdyBhIGRpYWxvZyB0byBjaG9v
c2Ugb25lIG9yIG1vcmUKKyAqIGZpbGVzIHRvIGJlIHVwbG9hZGVkIHRvIHRoZSBzZXJ2ZXIgYWxv
bmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZm9ybQorICogZGF0YS4gRm9yIHRoYXQgdG8gaGFwcGVu
IGluIGEgZ2VuZXJhbCB3YXksIGluc3RlYWQgb2YganVzdCBvcGVuaW5nCisgKiBhICNHdGtGaWxl
Q2hvb3NlckRpYWxvZyAod2hpY2ggbWlnaHQgYmUgbm90IGRlc2lyYWJsZSBpbiBzb21lCisgKiBz
cGVjaWZpYyBwbGF0Zm9ybXMsIHdoaWNoIGNvdWxkIHByZWZlciB0byB1c2UgdGhlaXIgb3duIGZp
bGUKKyAqIGNob29zZXIgZGlhbG9nKSwgV2ViS2l0IHdpbGwgZmlyZSB0aGUKKyAqICNXZWJLaXRX
ZWJWaWV3OjpydW4tZmlsZS1jaG9vc2VyIHNpZ25hbCB3aXRoIGEKKyAqICNXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3Qgb2JqZWN0LCB3aGljaCB3aWxsIGFsbG93IHRoZSBjbGllbnQKKyAqIGFwcGxp
Y2F0aW9uIHRvIHNwZWNpZnkgdGhlIGZpbGVzIHRvIGJlIHNlbGVjdGVkLCB0byBpbnNwZWN0IHRo
ZQorICogZGV0YWlscyBmcm9tIHRoZSByZXF1ZXN0IChlLmcuIGlmIG11bHRpcGxlIHNlbGVjdGlv
biBzaG91bGQgYmUKKyAqIGFsbG93ZWQpIGFuZCB0byBjYW5jZWwgdGhlIHJlcXVlc3QsIGluIGNh
c2Ugbm90aGluZyB3YXMgZmluYWxseQorICogYmVpbmcgc2VsZWN0ZWQuCisgKgorICogSW4gY2Fz
ZSB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIGRvZXMgbm90IHdpc2ggdG8gaGFuZGxlIHRoaXMgc2ln
bmFsLAorICogV2ViS2l0IHdpbGwgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlciB3aGljaCB3aWxs
IGFzeW5jaHJvbm91c2x5IHJ1bgorICogYSByZWd1bGFyICNHdGtGaWxlQ2hvb3NlckRpYWxvZyBm
b3IgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aC4KKyAqLworR19ERUZJTkVfVFlQRShXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdCwgR19UWVBFX09C
SkVDVCkKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlIHsKKyAgICBX
S1JldGFpblB0cjxXS09wZW5QYW5lbFBhcmFtZXRlcnNSZWY+IHdrUGFyYW1ldGVyczsKKyAgICBX
S1JldGFpblB0cjxXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmPiB3a0xpc3RlbmVyOworICAg
IEdSZWZQdHI8R3RrRmlsZUZpbHRlcj4gZmlsdGVyOworICAgIEdSZWZQdHI8R1B0ckFycmF5PiBt
aW1lVHlwZXM7CisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IHNlbGVjdGVkRmlsZXM7CisgICAgYm9v
bCBoYW5kbGVkUmVxdWVzdDsKK307CisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FM
TE9XU19NVUxUSVBMRV9TRUxFQ1RJT04sCisgICAgUFJPUF9GSUxURVIsCisgICAgUFJPUF9NSU1F
X1RZUEVTLAorICAgIFBST1BfU0VMRUNURURfRklMRVMsCit9OworCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgcmVxdWVzdC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFU
RShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0UHJpdmF0ZSk7CisgICAgbmV3IChyZXF1ZXN0LT5wcml2KSBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3RQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZpbGVDaG9v
c2VyUmVxdWVzdEZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqZWN0
KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpcyBhbHdheXMgaGFuZGxlZCBiZWZv
cmUgZmluYWxpemluZy4KKyAgICBpZiAoIXJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0KQor
ICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKHJlcXVlc3QpOworCisg
ICAgcmVxdWVzdC0+cHJpdi0+fldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUoKTsKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcGFyZW50X2NsYXNz
KS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RmlsZUNob29zZXJS
ZXF1ZXN0R2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqZWN0KTsKKyAg
ICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9BTExPV1NfTVVMVElQTEVfU0VMRUNU
SU9OOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbihyZXF1ZXN0KSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9GSUxURVI6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRl
cihyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NSU1FX1RZUEVTOgor
ICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1NFTEVDVEVEX0ZJTEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2YWx1ZSwgd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2xh
c3NfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xh
c3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVz
dEZpbmFsaXplOworICAgIG9iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRGaWxlQ2hv
b3NlclJlcXVlc3RHZXRQcm9wZXJ0eTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUocmVx
dWVzdENsYXNzLCBzaXplb2YoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSkpOworCisg
ICAgLyoqCisgICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OmFsbG93cy1tdWx0aXBsZS1z
ZWxlY3Rpb246CisgICAgICoKKyAgICAgKiBXaGV0aGVyIHRoZSBmaWxlIGNob29zZXIgc2hvdWxk
IGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZQorICAgICAqIGZpbGVzLiBTZWUKKyAgICAgKiB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlvbigpIGZvcgor
ICAgICAqIG1vcmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJPUF9BTExPV1NfTVVMVElQTEVfU0VMRUNUSU9OLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oImFsbG93cy1tdWx0aXBsZS1zZWxl
Y3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIkFsbG93cyBtdWx0aXBsZSBmaWxlIHNlbGVjdGlvbiIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIldoZXRoZXIgdGhl
IGZpbGUgY2hvb3NlciBzaG91bGQgYWxsb3cgc2VsZWN0aW5nIG11bHRpcGxlIGZpbGVzIiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFM
U0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisgICAgICogV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0OmZpbHRlcjoKKyAgICAgKgorICAgICAqIFRoZSBmaWx0ZXIgY3VycmVudGx5
IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdC4gU2VlCisgICAgICogd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcigpIGZvciBtb3JlCisgICAgICogZGV0
YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVj
dENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9GSUxURVIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0
KCJmaWx0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiTUlNRSB0eXBlcyBmaWx0ZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBmaWx0ZXIgY3VycmVudGx5IGFz
c29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfRklMRV9GSUxURVIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6
bWltZS10eXBlczoKKyAgICAgKgorICAgICAqIEEgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBz
dHJpbmdzIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgTUlNRQorICAgICAqIHR5cGVzIHRoZSBmaWxl
IGNob29zZXIgZGlhbG9nIHNob3VsZCBoYW5kbGUuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcygpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICov
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTUlNRV9UWVBFUywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCgibWltZS10eXBl
cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJNSU1FIHR5cGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJUaGUgbGlzdCBvZiBNSU1FIHR5cGVzIGFzc29jaWF0ZWQgd2l0
aCB0aGUgcmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19UWVBFX1NUUlYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAv
KioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6c2VsZWN0ZWQtZmlsZXM6CisgICAg
ICoKKyAgICAgKiBBICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5n
IHRoZSBsaXN0IG9mCisgICAgICogc2VsZWN0ZWQgZmlsZXMgYXNzb2NpYXRlZCB0byB0aGUgY3Vy
cmVudCByZXF1ZXN0LiBTZWUKKyAgICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X3NlbGVjdGVkX2ZpbGVzKCkgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJPUF9TRUxFQ1RFRF9GSUxFUywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCgic2VsZWN0ZWQtZmlsZXMiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
U2VsZWN0ZWQgZmlsZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF8oIlRoZSBsaXN0IG9mIHNlbGVjdGVkIGZpbGVzIGFzc29jaWF0ZWQg
d2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUlYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKK30K
KworV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVh
dGUoV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHdrUGFyYW1ldGVycywgV0tPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lclJlZiB3a0xpc3RlbmVyKQoreworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIE5VTEwpKTsKKyAgICByZXF1ZXN0LT5wcml2
LT53a1BhcmFtZXRlcnMgPSB3a1BhcmFtZXRlcnM7CisgICAgcmVxdWVzdC0+cHJpdi0+d2tMaXN0
ZW5lciA9IHdrTGlzdGVuZXI7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKKy8qKgorICogd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb246CisgKiBA
cmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogRGV0ZXJtaW5lIHdo
ZXRoZXIgdGhlIGZpbGUgY2hvb3NlciBhc3NvY2lhdGVkIHRvIHRoaXMKKyAqICNXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3Qgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcywKKyAq
IHdoaWNoIGRlcGVuZHMgb24gdGhlIEhUTUwgaW5wdXQgZWxlbWVudCBoYXZpbmcgYSAnbXVsdGlw
bGUnCisgKiBhdHRyaWJ1dGUgZGVmaW5lZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUg
ZmlsZSBjaG9vc2VyIHNob3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMgb3IgJUZB
TFNFIG90aGVyd2lzZS4KKyAqLworZ2Jvb2xlYW4gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24oV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1
ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJf
UkVRVUVTVChyZXF1ZXN0KSwgRkFMU0UpOworICAgIHJldHVybiBXS09wZW5QYW5lbFBhcmFtZXRl
cnNHZXRBbGxvd3NNdWx0aXBsZUZpbGVzKHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycy5nZXQo
KSk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5
cGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIEdl
dCB0aGUgbGlzdCBvZiBNSU1FIHR5cGVzIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHNob3VsZCBo
YW5kbGUsCisgKiBpbiB0aGUgZm9ybWF0IHNwZWNpZmllZCBpbiBSRkMgMjA0NiBmb3IgIm1lZGlh
IHR5cGVzIi4gSXRzIGNvbnRlbnRzCisgKiBkZXBlbmQgb24gdGhlIHZhbHVlIG9mIHRoZSAnYWNj
ZXB0JyBhdHRyaWJ1dGUgZm9yIEhUTUwgaW5wdXQKKyAqIGVsZW1lbnRzLiBUaGlzIGZ1bmN0aW9u
IHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQgYmVmb3JlIHByZXNlbnRpbmcKKyAqIHRoZSBmaWxl
IGNob29zZXIgZGlhbG9nIHRvIHRoZSB1c2VyLCB0byBkZWNpZGUgd2hldGhlciB0byBhbGxvdyB0
aGUKKyAqIHVzZXIgdG8gc2VsZWN0IG11bHRpcGxlIGZpbGVzIGF0IG9uY2Ugb3Igb25seSBvbmUu
CisgKgorICogUmV0dXJuczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNmZXIgbm9u
ZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBpZiBhIGxpc3Qgb2Yg
YWNjZXB0ZWQgTUlNRSB0eXBlcworICogaXMgZGVmaW5lZCBvciAlTlVMTCBvdGhlcndpc2UsIG1l
YW5pbmcgdGhhdCBhbnkgTUlNRSB0eXBlIHNob3VsZCBiZQorICogYWNjZXB0ZWQuIFRoaXMgYXJy
YXkgYW5kIGl0cyBjb250ZW50cyBhcmUgb3duZWQgYnkgV2ViS2l0R1RLKyBhbmQKKyAqIHNob3Vs
ZCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK2NvbnN0IGdjaGFyKiBjb25zdCogd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
RklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2
LT5taW1lVHlwZXMpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJl
cXVlc3QtPnByaXYtPm1pbWVUeXBlcy0+cGRhdGEpOworCisgICAgV0tSZXRhaW5QdHI8V0tBcnJh
eVJlZj4gd2tNaW1lVHlwZXMoQWRvcHRXSywgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzQ29weUFjY2Vw
dGVkTUlNRVR5cGVzKHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycy5nZXQoKSkpOworICAgIHNp
emVfdCBudW1PZk1pbWVUeXBlcyA9IFdLQXJyYXlHZXRTaXplKHdrTWltZVR5cGVzLmdldCgpKTsK
KyAgICBpZiAoIW51bU9mTWltZVR5cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlcXVl
c3QtPnByaXYtPm1pbWVUeXBlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVl
X2Z1bmMoZ19mcmVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBl
czsgKytpKSB7CisgICAgICAgIFdLU3RyaW5nUmVmIHdrTWltZVR5cGUgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTWltZVR5cGVzLmdldCgpLCBpKSk7
CisgICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHRvSW1wbCh3a01pbWVUeXBlKS0+c3Ry
aW5nKCk7CisgICAgICAgIGlmIChtaW1lVHlwZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPm1pbWVU
eXBlcy5nZXQoKSwgZ19zdHJkdXAobWltZVR5cGVTdHJpbmcudXRmOCgpLmRhdGEoKSkpOworICAg
IH0KKyAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzLmdldCgpLCAw
KTsKKworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnByaXYt
Pm1pbWVUeXBlcy0+cGRhdGEpOworfQorCisvKioKKyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXI6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0CisgKgorICogR2V0IHRoZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0ZWQg
d2l0aCB0aGUgcmVxdWVzdCwgYWxyZWFkeSBzZXQKKyAqIHVwIHdpdGggdGhlIGxpc3Qgb2YgTUlN
RSB0eXBlcyBhcyByZXR1cm5lZCBieQorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9taW1lX3R5cGVzKCkuIFRoaXMgZnVuY3Rpb24gc2hvdWxkCisgKiBub3JtYWxseSBiZSBjYWxs
ZWQgYmVmb3JlIHByZXNlbnRpbmcgdGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgdG8gdGhlCisgKiB1
c2VyLCB0byBkZWNpZGUgd2hldGhlciB0byBhcHBseSBhIGZpbHRlciBzbyB0aGUgdXNlciB3b3Vs
ZCBub3QgYmUKKyAqIGFsbG93ZWQgdG8gc2VsZWN0IGZpbGVzIHdpdGggb3RoZXIgTUlNRSB0eXBl
cy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI0d0a0ZpbGVGaWx0ZXIgaWYg
YSBsaXN0IG9mIGFjY2VwdGVkCisgKiBNSU1FIHR5cGVzIGlzIGRlZmluZWQgb3IgJU5VTEwgb3Ro
ZXJ3aXNlLiBUaGUgcmV0dXJuZWQgb2JqZWN0IGlzCisgKiBvd25lZCBieSBXZWJLaXRHVEsrIHNo
b3VsZCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK0d0a0ZpbGVGaWx0ZXIqIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisgICAgaWYgKHJlcXVlc3Qt
PnByaXYtPmZpbHRlcikKKyAgICAgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPmZpbHRlci5nZXQo
KTsKKworICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IHdrTWltZVR5cGVzKEFkb3B0V0ssIFdL
T3BlblBhbmVsUGFyYW1ldGVyc0NvcHlBY2NlcHRlZE1JTUVUeXBlcyhyZXF1ZXN0LT5wcml2LT53
a1BhcmFtZXRlcnMuZ2V0KCkpKTsKKyAgICBzaXplX3QgbnVtT2ZNaW1lVHlwZXMgPSBXS0FycmF5
R2V0U2l6ZSh3a01pbWVUeXBlcy5nZXQoKSk7CisgICAgaWYgKCFudW1PZk1pbWVUeXBlcykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBEbyBub3QgdXNlIGFkb3B0R1JlZiBoZXJlLCBzaW5j
ZSB3ZSB3YW50IHRvIHNpbmsgdGhlIGZsb2F0aW5nCisgICAgLy8gcmVmZXJlbmNlIGZvciB0aGUg
bmV3IGluc3RhbmNlIG9mIEd0a0ZpbGVGaWx0ZXIsIHNvIHdlIG1ha2UKKyAgICAvLyBzdXJlIHdl
IGtlZXAgdGhlIG93bmVyc2hpcCBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZSByZXF1ZXN0Lgor
ICAgIHJlcXVlc3QtPnByaXYtPmZpbHRlciA9IGd0a19maWxlX2ZpbHRlcl9uZXcoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mTWltZVR5cGVzOyArK2kpIHsKKyAgICAgICAgV0tT
dHJpbmdSZWYgd2tNaW1lVHlwZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0
SXRlbUF0SW5kZXgod2tNaW1lVHlwZXMuZ2V0KCksIGkpKTsKKyAgICAgICAgU3RyaW5nIG1pbWVU
eXBlU3RyaW5nID0gdG9JbXBsKHdrTWltZVR5cGUpLT5zdHJpbmcoKTsKKyAgICAgICAgaWYgKG1p
bWVUeXBlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBn
dGtfZmlsZV9maWx0ZXJfYWRkX21pbWVfdHlwZShyZXF1ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCks
IG1pbWVUeXBlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIHJldHVybiByZXF1
ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2Nob29zZV9maWxlczoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3QKKyAqIEBmaWxlczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNmZXIg
bm9uZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncywgY29udGFpbmlu
ZyBwYXRocyB0byBsb2NhbCBmaWxlcy4KKyAqCisgKiBBc2sgV2ViS2l0IHRvIGNob29zZSBsb2Nh
bCBmaWxlcyBmb3IgdXBsb2FkIGFuZCBjb21wbGV0ZSB0aGUKKyAqIHJlcXVlc3QuCisgKi8KK3Zv
aWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29zZV9maWxlcyhXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IGdjaGFyKiBjb25zdCogZmlsZXMpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCkp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZmlsZXMpOworCisgICAgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlQXJyYXlSZWY+IHdrQ2hvc2VuRmlsZXMoQWRvcHRXSywgV0tNdXRhYmxlQXJyYXlDcmVhdGUo
KSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGZpbGVzW2ldOyBpKyspIHsKKyAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoZSBmaWxlIHBhdGggaXMgcHJlc2VudGVkIGFzIGFuIFVSSSAoZXNjYXBlZAorICAg
ICAgICAvLyBzdHJpbmcsIHdpdGggdGhlICdmaWxlOi8vJyBwcmVmaXgpIHRvIFdlYkNvcmUgb3Ro
ZXJ3aXNlIHRoZQorICAgICAgICAvLyBGaWxlQ2hvb3NlciB3b24ndCBhY3R1YWxseSBjaG9vc2Ug
aXQuCisgICAgICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGVuYW1lID0gYWRvcHRHUmVmKGdfZmlsZV9u
ZXdfZm9yX3BhdGgoZmlsZXNbaV0pKTsKKyAgICAgICAgR093blB0cjxjaGFyPiB1cmkoZ19maWxl
X2dldF91cmkoZmlsZW5hbWUuZ2V0KCkpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+
IHdrVVJMKEFkb3B0V0ssIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHVyaS5nZXQoKSkpOwor
ICAgICAgICBXS0FycmF5QXBwZW5kSXRlbSh3a0Nob3NlbkZpbGVzLmdldCgpLCB3a1VSTC5nZXQo
KSk7CisgICAgfQorICAgIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJDaG9vc2VGaWxlcyhyZXF1
ZXN0LT5wcml2LT53a0xpc3RlbmVyLmdldCgpLCB3a0Nob3NlbkZpbGVzLmdldCgpKTsKKyAgICBy
ZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7Cit9CisKKy8qKgorICogd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlczoKKyAqIEByZXF1ZXN0OiBh
ICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGxpc3Qgb2Ygc2VsZWN0
ZWQgZmlsZXMgY3VycmVudGx5IGFzc29jaWF0ZWQgdG8gdGhlCisgKiByZXF1ZXN0LiBUaGlzIGxp
c3Qgd2lsbCBub3JtYWxseSBiZSBlbXB0eSB3aXRoIHRoZSBmaXJzdCByZXF1ZXN0CisgKiBhbmQg
d2lsbCBjb250YWluIHRoZSBsaXN0IG9mIGZpbGVzIHByZXZpb3VzbHkgc2VsZWN0ZWQsIGlmIGFu
eSwgaW4KKyAqIGZ1cnRoZXIgcmVxdWVzdHMgb3ZlciB0aGUgc2FtZSBIVE1MIGlucHV0IEVsZW1l
bnQuIEl0J3MgaW1wb3J0YW50CisgKiB0byBub3RpY2UgdGhhdCB0aGlzIGxpc3Qgd29uJ3QgY2hh
bmdlIGZvciB0aGUgY3VycmVudCByZXF1ZXN0IGFmdGVyCisgKiBtYWtpbmcgYSBuZXcgc2VsZWN0
aW9uLCBzaW5jZSBpdCBkb2VzIG5vdCByZXByZXNlbnQgdGhlIGxpc3Qgb2YKKyAqIGZpbGVzIGJl
aW5nIHNlbGVjdGVkIGJ1dCB0aG9zZSB0aGF0IG1pZ2h0IGJlIGFzc29jaWF0ZWQgdG8gdGhlCisg
KiByZXF1ZXN0IGF0IHRoZSBtb21lbnQgaXQgZ2V0cyB0cmlnZ2VyZWQuIFRodXMsIHRoaXMgZnVu
Y3Rpb24gc2hvdWxkCisgKiBub3JtYWxseSBiZSBjYWxsZWQgb25seSBiZWZvcmUgcHJlc2VudGlu
ZyB0aGUgZmlsZSBjaG9vc2VyIGRpYWxvZworICogdG8gdGhlIHVzZXIsIHByb2JhYmx5IHRvIGRl
Y2lkZSB3aGV0aGVyIHRvIHBlcmZvcm0gc29tZSBleHRyYQorICogYWN0aW9uLCBsaWtlIGdldHRp
bmcgdGhvc2UgZmlsZXMgaW4gdGhlIGxpc3QgcHJlLXNlbGVjdGVkLgorICoKKyAqIFJldHVybnM6
IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVyIG5vbmUpOiBhCisgKiAlTlVMTC10
ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MgaWYgdGhlcmUgYXJlIHNlbGVjdGVkIGZpbGVzCisg
KiBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3Qgb3IgJU5VTEwgb3RoZXJ3aXNlLiBUaGlzIGFy
cmF5IGFuZCBpdHMKKyAqIGNvbnRlbnRzIGFyZSBvd25lZCBieSBXZWJLaXRHVEsrIGFuZCBzaG91
bGQgbm90IGJlIG1vZGlmaWVkIG9yCisgKiBmcmVlZC4KKyAqLworY29uc3QgZ2NoYXIqIGNvbnN0
KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1
ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7CisKKyAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiBzZWxlY3RlZEZpbGVOYW1lcyA9IHRvSW1wbChyZXF1ZXN0LT5w
cml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpLT5zZWxlY3RlZEZpbGVOYW1lcygpOworICAgIHNpemVf
dCBudW1PZkZpbGVzID0gc2VsZWN0ZWRGaWxlTmFtZXMuc2l6ZSgpOworICAgIGlmICghbnVtT2ZG
aWxlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZp
bGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX2ZyZWUpKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mRmlsZXM7ICsraSkgeworICAgICAgICBp
ZiAoc2VsZWN0ZWRGaWxlTmFtZXNbaV0uaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc2Vs
ZWN0ZWRGaWxlTmFtZXNbaV0pOworICAgICAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJp
di0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgZ19zdHJkdXAoZmlsZW5hbWUuZGF0YSgpKSk7CisgICAg
fQorICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLmdldCgp
LCAwKTsKKworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnBy
aXYtPnNlbGVjdGVkRmlsZXMtPnBkYXRhKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfY2FuY2VsOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdAorICoKKyAqIEFzayBXZWJLaXQgdG8gY2FuY2VsIHRoZSByZXF1ZXN0LiBJdCdzIGltcG9y
dGFudCB0byBkbyB0aGlzIGluIGNhc2UKKyAqIG5vIHNlbGVjdGlvbiBoYXMgYmVlbiBtYWRlIGlu
IHRoZSBjbGllbnQsIG90aGVyd2lzZSB0aGUgcmVxdWVzdAorICogd29uJ3QgYmUgcHJvcGVybHkg
Y29tcGxldGVkIGFuZCB0aGUgYnJvd3NlciB3aWxsIGtlZXAgdGhlIHJlcXVlc3QKKyAqIHBlbmRp
bmcgZm9yZXZlciwgd2hpY2ggbWlnaHQgY2F1c2UgdGhlIGJyb3dzZXIgdG8gaGFuZy4KKyAqLwor
dm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSUxF
X0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
ckNhbmNlbChyZXF1ZXN0LT5wcml2LT53a0xpc3RlbmVyLmdldCgpKTsKKyAgICByZXF1ZXN0LT5w
cml2LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDY1NjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lU
Ml9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBp
bmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3RfaAorI2RlZmluZSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RfaAorCisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QgICAgICAg
ICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFV
RVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RD
bGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9GSUxFX0NI
T09TRVJfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9GSUxFX0NIT09TRVJfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVR
VUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICAgICAg
ICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0Q2xhc3MgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzczsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHsK
KyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBl
ICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24gIChXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICog
Y29uc3QgKgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzICAgICAg
ICAgICAgIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJ
IEd0a0ZpbGVGaWx0ZXIgKgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5
cGVzX2ZpbHRlciAgICAgIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMg
ICAgICAgICAgICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
Y2hhciAqIGNvbnN0ICAgICAgKmZpbGVzKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqIGNv
bnN0ICoKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMgICAg
ICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsICAgICAgICAgICAgICAgICAg
ICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNzIyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRl
LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKworV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUoV0tPcGVuUGFuZWxQ
YXJhbWV0ZXJzUmVmLCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmKTsKKworI2VuZGlmIC8v
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCmluZGV4IDZmMGUxMWMuLjlm
NzhjOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRVSUNsaWVudC5jcHAKQEAgLTIwLDEyICsyMCwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYktpdFVJQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKIApAQCAtMTM2LDYgKzEzOCwxMiBAQCBzdGF0aWMgdm9pZCBwcmludEZyYW1lKFdLUGFnZVJl
ZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkKikKICAgICB3ZWJraXRXZWJWaWV3
UHJpbnRGcmFtZShXRUJLSVRfV0VCX1ZJRVcodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpLCBm
cmFtZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ1bk9wZW5QYW5lbChXS1BhZ2VSZWYgcGFnZSwgV0tG
cmFtZVJlZiBmcmFtZSwgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHBhcmFtZXRlcnMsIFdLT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8p
Cit7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9w
dEdSZWYod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKHBhcmFtZXRlcnMsIGxpc3RlbmVy
KSk7CisgICAgd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVxdWVzdChXRUJLSVRfV0VCX1ZJ
RVcoY2xpZW50SW5mbyksIHJlcXVlc3QuZ2V0KCkpOworfQorCiB2b2lkIGF0dGFjaFVJQ2xpZW50
VG9WaWV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgV0tQYWdlVUlDbGllbnQgd2tV
SUNsaWVudCA9IHsKQEAgLTE2OSw3ICsxNzcsNyBAQCB2b2lkIGF0dGFjaFVJQ2xpZW50VG9WaWV3
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgICAgIDAsIC8vIGRpZERyYXcKICAgICAgICAg
MCwgLy8gcGFnZURpZFNjcm9sbAogICAgICAgICAwLCAvLyBleGNlZWRlZERhdGFiYXNlUXVvdGEK
LSAgICAgICAgMCwgLy8gcnVuT3BlblBhbmVsCisgICAgICAgIHJ1bk9wZW5QYW5lbCwKICAgICAg
ICAgMCwgLy8gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdAogICAg
ICAgICAwLCAvLyBoZWFkZXJIZWlnaHQKICAgICAgICAgMCwgLy8gZm9vdGVySGVpZ2h0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmlu
ZGV4IDRmMTdkNDYuLjVmYTE4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC01OSw2ICs1OSw3IEBAIGVudW0gewogICAg
IFNDUklQVF9ESUFMT0csCiAKICAgICBERUNJREVfUE9MSUNZLAorICAgIFJVTl9GSUxFX0NIT09T
RVIsCiAKICAgICBNT1VTRV9UQVJHRVRfQ0hBTkdFRCwKIApAQCAtMTg4LDYgKzE4OSw0OSBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0U2V0dGluZ3MoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgV2ViS2l0U2V0dGluZ3MqIHNldAogICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2V0dGluZ3MsICJu
b3RpZnk6Onpvb20tdGV4dC1vbmx5IiwgR19DQUxMQkFDSyh6b29tVGV4dE9ubHlDaGFuZ2VkKSwg
d2ViVmlldyk7CiB9CiAKK3N0YXRpYyB2b2lkIGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxs
YmFjayhHdGtEaWFsb2cqIGRpYWxvZywgZ2ludCByZXNwb25zZUlELCBXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3Q+IGFkb3B0ZWRSZXF1ZXN0ID0gYWRvcHRHUmVmKHJlcXVlc3QpOworICAgIGlmIChyZXNwb25z
ZUlEID09IEdUS19SRVNQT05TRV9BQ0NFUFQpIHsKKyAgICAgICAgR093blB0cjxHU0xpc3Q+IGZp
bGVzTGlzdChndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlbmFtZXMoR1RLX0ZJTEVfQ0hPT1NFUihk
aWFsb2cpKSk7CisgICAgICAgIEdSZWZQdHI8R1B0ckFycmF5PiBmaWxlc0FycmF5ID0gYWRvcHRH
UmVmKGdfcHRyX2FycmF5X25ldygpKTsKKyAgICAgICAgZm9yIChHU0xpc3QqIGZpbGUgPSBmaWxl
c0xpc3QuZ2V0KCk7IGZpbGU7IGZpbGUgPSBnX3NsaXN0X25leHQoZmlsZSkpCisgICAgICAgICAg
ICBnX3B0cl9hcnJheV9hZGQoZmlsZXNBcnJheS5nZXQoKSwgZmlsZS0+ZGF0YSk7CisgICAgICAg
IGdfcHRyX2FycmF5X2FkZChmaWxlc0FycmF5LmdldCgpLCAwKTsKKyAgICAgICAgd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29zZV9maWxlcyhhZG9wdGVkUmVxdWVzdC5nZXQoKSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBnY2hhciogY29uc3QqPihmaWxlc0FycmF5LT5wZGF0YSkpOwor
ICAgIH0gZWxzZQorICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGFk
b3B0ZWRSZXF1ZXN0LmdldCgpKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VU
KGRpYWxvZykpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld1J1bkZpbGVDaG9v
c2VyKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVx
dWVzdCkKK3sKKyAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2
ZWwoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgaWYgKCF3aWRnZXRJc09uc2NyZWVuVG9wbGV2
ZWxXaW5kb3codG9wbGV2ZWwpKQorICAgICAgICB0b3BsZXZlbCA9IDA7CisKKyAgICBnYm9vbGVh
biBhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9h
bGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uKHJlcXVlc3QpOworICAgIEd0a1dpZGdldCogZGlhbG9n
ID0gZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFsb2dfbmV3KGFsbG93c011bHRpcGxlU2VsZWN0aW9uID8g
XygiU2VsZWN0IEZpbGVzIikgOiBfKCJTZWxlY3QgRmlsZSIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGxldmVsID8gR1RLX1dJTkRPVyh0
b3BsZXZlbCkgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUS19GSUxFX0NIT09TRVJfQUNUSU9OX09QRU4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX0NBTkNFTCwgR1RL
X1JFU1BPTlNFX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHVEtfU1RPQ0tfT1BFTiwgR1RLX1JFU1BPTlNFX0FDQ0VQVCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKwor
ICAgIGlmIChHdGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpKQorICAgICAgICBndGtfZmlsZV9jaG9v
c2VyX3NldF9maWx0ZXIoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBmaWx0ZXIpOworICAgIGd0
a19maWxlX2Nob29zZXJfc2V0X3NlbGVjdF9tdWx0aXBsZShHVEtfRklMRV9DSE9PU0VSKGRpYWxv
ZyksIGFsbG93c011bHRpcGxlU2VsZWN0aW9uKTsKKworICAgIGlmIChjb25zdCBnY2hhciogY29u
c3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dGVkX2ZpbGVzKHJlcXVlc3QpKQorICAgICAgICBndGtfZmlsZV9jaG9vc2VyX3NlbGVjdF9maWxl
bmFtZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIHNlbGVjdGVkRmlsZXNbMF0pOworCisgICAg
Z19zaWduYWxfY29ubmVjdChkaWFsb2csICJyZXNwb25zZSIsIEdfQ0FMTEJBQ0soZmlsZUNob29z
ZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKSwgZ19vYmplY3RfcmVmKHJlcXVlc3QpKTsKKyAgICBn
dGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsKKworICAgIHJldHVybiBUUlVFOworfQorCiBzdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogewogICAgIGlm
IChHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0
ZWQpCkBAIC0yOTAsNiArMzM0LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNz
X2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgd2ViVmlld0NsYXNz
LT5jcmVhdGUgPSB3ZWJraXRXZWJWaWV3Q3JlYXRlOwogICAgIHdlYlZpZXdDbGFzcy0+c2NyaXB0
X2RpYWxvZyA9IHdlYmtpdFdlYlZpZXdTY3JpcHREaWFsb2c7CiAgICAgd2ViVmlld0NsYXNzLT5k
ZWNpZGVfcG9saWN5ID0gd2Via2l0V2ViVmlld0RlY2lkZVBvbGljeTsKKyAgICB3ZWJWaWV3Q2xh
c3MtPnJ1bl9maWxlX2Nob29zZXIgPSB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXI7CiAKICAg
ICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUod2ViVmlld0NsYXNzLCBzaXplb2YoV2ViS2l0V2Vi
Vmlld1ByaXZhdGUpKTsKIApAQCAtNjE1LDYgKzY2MCwzNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1BPTElDWV9ERUNJU0lPTl9UWVBFKTsKIAog
ICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29zZXI6CisgICAgICog
QHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0
dGVkCisgICAgICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICAgICAq
CisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGludGVyYWN0cyB3
aXRoIGEgJmx0O2lucHV0CisgICAgICogdHlwZT0nZmlsZScgLyZndDsgSFRNTCBlbGVtZW50LCBy
ZXF1ZXN0aW5nIGZyb20gV2ViS2l0IHRvIHNob3cKKyAgICAgKiBhIGRpYWxvZyB0byBzZWxlY3Qg
b25lIG9yIG1vcmUgZmlsZXMgdG8gYmUgdXBsb2FkZWQuIFRvIGxldCB0aGUKKyAgICAgKiBhcHBs
aWNhdGlvbiBrbm93IHRoZSBkZXRhaWxzIG9mIHRoZSBmaWxlIGNob29zZXIsIGFzIHdlbGwgYXMg
dG8KKyAgICAgKiBhbGxvdyB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHRvIGVpdGhlciBjYW5jZWwg
dGhlIHJlcXVlc3Qgb3IKKyAgICAgKiBwZXJmb3JtIGFuIGFjdHVhbCBzZWxlY3Rpb24gb2YgZmls
ZXMsIHRoZSBzaWduYWwgd2lsbCBwYXNzIGFuCisgICAgICogaW5zdGFuY2Ugb2YgdGhlICNXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QgaW4gdGhlIEByZXF1ZXN0CisgICAgICogYXJndW1lbnQuCisg
ICAgICoKKyAgICAgKiBUaGUgZGVmYXVsdCBzaWduYWwgaGFuZGxlciB3aWxsIGFzeW5jaHJvbm91
c2x5IHJ1biBhIHJlZ3VsYXIKKyAgICAgKiAjR3RrRmlsZUNob29zZXJEaWFsb2cgZm9yIHRoZSB1
c2VyIHRvIGludGVyYWN0IHdpdGguCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBz
dG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAg
ICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKgorICAg
ICAqLworICAgIHNpZ25hbHNbUlVOX0ZJTEVfQ0hPT1NFUl0gPQorICAgICAgICBnX3NpZ25hbF9u
ZXcoInJ1bi1maWxlLWNob29zZXIiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9M
QVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdD
bGFzcywgcnVuX2ZpbGVfY2hvb3NlciksCisgICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9h
Y2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAgLyogYWNjdW11bGF0b3IgZGF0YSAqLywKKyAgICAg
ICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLCAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAq
LworICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1Qp
OworCisgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzo6bW91c2UtdGFyZ2V0LWNoYW5nZWQ6
CiAgICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25h
bCBpcyBlbWl0dGVkCiAgICAgICogQGhpdF90ZXN0X3Jlc3VsdDogYSAjV2ViS2l0SGl0VGVzdFJl
c3VsdApAQCAtODIyLDYgKzg5OCwxMiBAQCB2b2lkIHdlYmtpdFdlYlZpZXdQcmludEZyYW1lKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFdLRnJhbWVSZWYgd2tGcmFtZSkKICAgICBnX3NpZ25hbF9j
b25uZWN0KHByaW50T3BlcmF0aW9uLmxlYWtSZWYoKSwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhn
X29iamVjdF91bnJlZiksIDApOwogfQogCit2b2lkIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nl
clJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
KiByZXF1ZXN0KQoreworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFsX2Vt
aXQod2ViVmlldywgc2lnbmFsc1tSVU5fRklMRV9DSE9PU0VSXSwgMCwgcmVxdWVzdCwgJnJldHVy
blZhbHVlKTsKK30KKwogLyoqCiAgKiB3ZWJraXRfd2ViX3ZpZXdfbmV3OgogICoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCBmYjRj
NDhhLi4wODk2Yzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oCkBAIC0yOSwxMyArMjksMTYgQEAKICNkZWZpbmUgV2ViS2l0V2ViVmll
d19oCiAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgorI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxl
ci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0VGVzdFJlc3VsdC5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0U2NyaXB0RGlhbG9nLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQ
b2xpY3lEZWNpc2lvbi5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdFdlYkNvbnRleHQuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQb2xp
Y3lEZWNpc2lvbi5oPgpAQCAtMTM4LDYgKzE0MSwxMCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdD
bGFzcyB7CiAgICAgZ2Jvb2xlYW4gICAoKiBkZWNpZGVfcG9saWN5KSAgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lvbiAgICAgICpkZWNpc2lvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb25U
eXBlICAgdHlwZSk7CisKKyAgICBnYm9vbGVhbiAgICgqIHJ1bl9maWxlX2Nob29zZXIpICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAgKnJlcXVlc3Qp
OworCiAgICAgdm9pZCAgICAgICAoKiBtb3VzZV90YXJnZXRfY2hhbmdlZCkgKFdlYktpdFdlYlZp
ZXcgICAgICAgICAgICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0ICAgICAgICpoaXRfdGVzdF9yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAg
ICAgICAgICAgIG1vZGlmaWVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCBhZDhhYjIwLi5mMWNiM2U0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdQcml2YXRlLmgKQEAgLTQzLDYgKzQzLDcgQEAgdm9pZCB3ZWJraXRXZWJWaWV3UnVu
SmF2YVNjcmlwdEFsZXJ0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKTsK
IGJvb2wgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRDb25maXJtKFdlYktpdFdlYlZpZXcqLCBj
b25zdCBDU3RyaW5nJiBtZXNzYWdlKTsKIFdLU3RyaW5nUmVmIHdlYmtpdFdlYlZpZXdSdW5KYXZh
U2NyaXB0UHJvbXB0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlLCBjb25z
dCBDU3RyaW5nJiBkZWZhdWx0VGV4dCk7CiB2b2lkIHdlYmtpdFdlYlZpZXdNYWtlUG9saWN5RGVj
aXNpb24oV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSwgV2ViS2l0UG9s
aWN5RGVjaXNpb24qKTsKK3ZvaWQgd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVxdWVzdChX
ZWJLaXRXZWJWaWV3KiwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Kik7CiB2b2lkIHdlYmtpdFdl
YlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyosIFdLSGl0VGVzdFJlc3VsdFJl
ZiwgdW5zaWduZWQgbW9kaWZpZXJzKTsKIHZvaWQgd2Via2l0V2ViVmlld1ByaW50RnJhbWUoV2Vi
S2l0V2ViVmlldyosIFdLRnJhbWVSZWYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCA0YTlj
Yzc5Li5iNjRjZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTI1LDYgKzI1LDcgQEAKICAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLnht
bCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lz
aW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRIaXRUZXN0UmVzdWx0
LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFByaW50T3BlcmF0aW9u
LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRFcnJvci54bWwiLz4KICAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RmluZENvbnRyb2xsZXIueG1sIi8+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
c2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCBhOGY1NDA4Li5lMDU4YjEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQKQEAgLTQzMiw2ICs0MzIsMzAgQEAgd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9nZXRfdHlwZQogPC9TRUNUSU9OPgogCiA8U0VDVElPTj4KKzxGSUxFPldlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdDwvRklMRT4KK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAord2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24KK3dlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcword2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzX2ZpbHRlcgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nob29z
ZV9maWxlcword2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcwor
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbAorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzCitXRUJLSVRfVFlQRV9GSUxFX0NIT09T
RVJfUkVRVUVTVAorV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUCitXRUJLSVRfSVNfRklMRV9D
SE9PU0VSX1JFUVVFU1QKK1dFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVF9DTEFTUworV0VCS0lU
X0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTCitXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVF
U1RfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3RQcml2YXRlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUKKzwvU0VD
VElPTj4KKworPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRQcmludE9wZXJhdGlvbjwvRklMRT4KIFdl
YktpdFByaW50T3BlcmF0aW9uCiBXZWJLaXRQcmludE9wZXJhdGlvblJlc3BvbnNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlw
ZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlw
ZXMKaW5kZXggOGU4ZDdiMS4uNWQ3ZWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtOSw1ICs5LDYgQEAg
d2Via2l0X3VyaV9yZXNwb25zZV9nZXRfdHlwZQogd2Via2l0X3VyaV9yZXF1ZXN0X2dldF90eXBl
CiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3R5cGUKIHdlYmtpdF9kb3dubG9hZF9nZXRf
dHlwZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlCiB3ZWJraXRfZmluZF9j
b250cm9sbGVyX2dldF90eXBlCiB3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfdHlwZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdl
YlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdFdlYlZpZXcuY3BwCmluZGV4IGJmZWRhMTYuLjc3MDQ3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2Vi
Vmlldy5jcHAKQEAgLTIxOCw2ICsyMTgsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbmV3
V2ViVmlldzsKICAgICB9CiAKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXIoV2Vi
S2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgVUlDbGllbnRU
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisgICAgICAgIHRlc3QtPm1fZmlsZUNo
b29zZXJSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5t
X21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCiAgICAgdm9pZCBzY3Jp
cHRBbGVydChXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKICAgICB7CiAgICAgICAgIHN3aXRj
aCAobV9zY3JpcHREaWFsb2dUeXBlKSB7CkBAIC0yODUsNiArMjkzLDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRv
d3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyks
IFRSVUUpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIsIEdf
Q0FMTEJBQ0sodmlld0NyZWF0ZSksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
d2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyKSwg
dGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LWRpYWxv
ZyIsIEdfQ0FMTEJBQ0soc2NyaXB0RGlhbG9nKSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAibW91c2UtdGFyZ2V0LWNoYW5nZWQiLCBHX0NBTExCQUNLKG1vdXNl
VGFyZ2V0Q2hhbmdlZCksIHRoaXMpOwogICAgIH0KQEAgLTMxMSwxMiArMzIwLDIwIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0LmdldCgpOwogICAg
IH0KIAorICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogY2xpY2tNb3VzZUJ1dHRvbkFuZFdh
aXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoaW50IHgsIGludCB5KQorICAgIHsKKyAgICAgICAgY2xp
Y2tNb3VzZUJ1dHRvbih4LCB5KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OworICAgICAgICByZXR1cm4gbV9maWxlQ2hvb3NlclJlcXVlc3QuZ2V0KCk7CisgICAgfQorCiAg
ICAgVmVjdG9yPFdlYlZpZXdFdmVudHM+IG1fd2ViVmlld0V2ZW50czsKICAgICBXZWJLaXRTY3Jp
cHREaWFsb2dUeXBlIG1fc2NyaXB0RGlhbG9nVHlwZTsKICAgICBib29sIG1fc2NyaXB0RGlhbG9n
Q29uZmlybWVkOwogICAgIFdpbmRvd1Byb3BlcnRpZXMgbV93aW5kb3dQcm9wZXJ0aWVzOwogICAg
IEhhc2hTZXQ8V1RGOjpTdHJpbmc+IG1fd2luZG93UHJvcGVydGllc0NoYW5nZWQ7CiAgICAgR1Jl
ZlB0cjxXZWJLaXRIaXRUZXN0UmVzdWx0PiBtX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdDsKKyAg
ICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gbV9maWxlQ2hvb3NlclJlcXVlc3Q7
CiAgICAgdW5zaWduZWQgaW50IG1fbW91c2VUYXJnZXRNb2RpZmllcnM7CiB9OwogCkBAIC0zMzIs
NiArMzQ5LDg4IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZShVSUNs
aWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4gY2hl
Y2tNaW1lVHlwZUZvckZpbHRlcihHdGtGaWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdjaGFyKiBt
aW1lVHlwZSkKK3sKKyAgICBHdGtGaWxlRmlsdGVySW5mbyBmaWx0ZXJJbmZvOworICAgIGZpbHRl
ckluZm8uY29udGFpbnMgPSBHVEtfRklMRV9GSUxURVJfTUlNRV9UWVBFOworICAgIGZpbHRlcklu
Zm8ubWltZV90eXBlID0gbWltZVR5cGU7CisgICAgcmV0dXJuIGd0a19maWxlX2ZpbHRlcl9maWx0
ZXIoZmlsdGVyLCAmZmlsdGVySW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Rmls
ZUNob29zZXJSZXF1ZXN0KFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICBzdGF0aWMgY29u
c3QgY2hhciogZmlsZUNob29zZXJIVE1MRm9ybWF0ID0gIjxodG1sPjxib2R5PjxpbnB1dCBzdHls
ZT0ncG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO21hcmdpbjowO3BhZGRpbmc6MCcgdHlw
ZT0nZmlsZScgJXMvPjwvYm9keT48L2h0bWw+IjsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlv
bnMgbm90IGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgorICAgIEdPd25QdHI8Y2hhcj4gc2lt
cGxlRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwg
IiIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChzaW1wbGVGaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0KiBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5k
V2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24oZmlsZUNob29zZXJS
ZXF1ZXN0KSk7CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwor
ICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29z
ZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBjb25zdCBnY2hhciogY29u
c3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmls
ZXMpOworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBm
aWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgorICAgIEdPd25QdHI8Y2hhcj4gbXVs
dGlwbGVTZWxlY3Rpb25GaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJI
VE1MRm9ybWF0LCAibXVsdGlwbGUiKSk7CisgICAgdGVzdC0+bG9hZEh0bWwobXVsdGlwbGVTZWxl
Y3Rpb25GaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRv
bkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQod2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24oZmlsZUNob29z
ZXJSZXF1ZXN0KSk7CisKKyAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWlt
ZVR5cGVzKTsKKyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXNfZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRl
cik7CisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
c2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0
ZWRGaWxlcyk7CisKKyAgICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KKyAgICBjb25zdCBnY2hhciog
ZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6Iiwg
MCB9OworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jaG9vc2VfZmlsZXMoZmlsZUNo
b29zZXJSZXF1ZXN0LCBmaWxlc1RvU2VsZWN0KTsKKworICAgIC8vIFBlcmZvcm0gYW5vdGhlciBy
ZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCisgICAgLy8gaW4g
dGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVlc3Qu
CisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRG
b3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0
KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVk
RmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRG
aWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxl
c1szXSk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3Nl
clJlcXVlc3QpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgb25s
eSBhY2NlcHQgaW1hZ2VzLCBhdWRpbyBhbmQgdmlkZW8gZmlsZXMuLgorICAgIEdPd25QdHI8Y2hh
cj4gbWltZUZpbHRlcmVkRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2Vy
SFRNTEZvcm1hdCwgImFjY2VwdD0nYXVkaW8vKix2aWRlby8qLGltYWdlLyonIikpOworICAgIHRl
c3QtPmxvYWRIdG1sKG1pbWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0
ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBs
ZV9zZWxlY3Rpb24oZmlsZUNob29zZXJSZXF1ZXN0KSk7CisKKyAgICBtaW1lVHlwZXMgPSB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0
KTsKKyAgICBnX2Fzc2VydChtaW1lVHlwZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlw
ZXNbMF0sID09LCAiYXVkaW8vKiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMV0s
ID09LCAidmlkZW8vKiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMl0sID09LCAi
aW1hZ2UvKiIpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXNbM10pOworCisgICAgZmlsdGVyID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hv
b3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KEdUS19JU19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsK
KyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7
CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJ2aWRlby8qIikp
OworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIp
KTsKKworICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVj
dGVkRmlsZXMpOworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNo
b29zZXJSZXF1ZXN0KTsKK30KKwogc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlh
bG9ncyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGh0bWxPbkxvYWRGb3JtYXQgPSAiPGh0bWw+PGJvZHkgb25Mb2FkPVwiJXNcIj48
L2JvZHk+PC9odG1sPiI7CkBAIC00NTksNiArNTU4LDcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAg
IFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2V0dGluZ3MiLCB0ZXN0V2ViVmll
d1NldHRpbmdzKTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInJlcGxh
Y2UtY29udGVudCIsIHRlc3RXZWJWaWV3UmVwbGFjZUNvbnRlbnQpOwogICAgIFVJQ2xpZW50VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImNyZWF0ZS1yZWFkeS1jbG9zZSIsIHRlc3RXZWJWaWV3
Q3JlYXRlUmVhZHlDbG9zZSk7CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAiZmlsZS1jaG9vc2VyLXJlcXVlc3QiLCB0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdCk7
CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiamF2YXNjcmlwdC1kaWFs
b2dzIiwgdGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyk7CiAgICAgVUlDbGllbnRUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAid2luZG93LXByb3BlcnRpZXMiLCB0ZXN0V2ViVmlld1dpbmRv
d1Byb3BlcnRpZXMpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm1v
dXNlLXRhcmdldCIsIHRlc3RXZWJWaWV3TW91c2VUYXJnZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCmluZGV4IDMx
ZGU3MjkuLjYzMjEzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKQEAgLTIwMiwzICsyMDIsMzQgQEAgdm9pZCBX
ZWJWaWV3VGVzdDo6bW91c2VNb3ZlVG8oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgbW91c2VN
b2RpZmllcnMpCiAgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOwogfQogCit2b2lk
IFdlYlZpZXdUZXN0OjpjbGlja01vdXNlQnV0dG9uKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50
IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzKQoreworICAgIGV4ZWN1dGVNb3Vz
ZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUFJFU1MsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmll
cnMpOworICAgIGV4ZWN1dGVNb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUkVMRUFTRSwgeCwg
eSwgYnV0dG9uLCBtb3VzZU1vZGlmaWVycyk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmV4ZWN1
dGVNb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlwZSBldmVudFR5cGUsIGludCB4LCBpbnQgeSwg
dW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzKQoreworICAg
IGdfYXNzZXJ0KG1fcGFyZW50V2luZG93KTsKKyAgICBHdGtXaWRnZXQqIHZpZXdXaWRnZXQgPSBH
VEtfV0lER0VUKG1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQoZ3RrX3dpZGdldF9nZXRfcmVhbGl6
ZWQodmlld1dpZGdldCkpOworCisgICAgR093blB0cjxHZGtFdmVudD4gZXZlbnQoZ2RrX2V2ZW50
X25ldyhldmVudFR5cGUpKTsKKyAgICBldmVudC0+YnV0dG9uLndpbmRvdyA9IGd0a193aWRnZXRf
Z2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKKyAgICBnX29iamVjdF9yZWYoZXZlbnQtPmJ1dHRvbi53
aW5kb3cpOworCisgICAgZXZlbnQtPmJ1dHRvbi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAg
ICBldmVudC0+YnV0dG9uLnggPSB4OworICAgIGV2ZW50LT5idXR0b24ueSA9IHk7CisgICAgZXZl
bnQtPmJ1dHRvbi5heGVzID0gMDsKKyAgICBldmVudC0+YnV0dG9uLnN0YXRlID0gbW91c2VNb2Rp
ZmllcnM7CisgICAgZXZlbnQtPmJ1dHRvbi5idXR0b24gPSBidXR0b247CisKKyAgICBldmVudC0+
YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZ2Rr
X2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkodmlld1dp
ZGdldCkpKTsKKworICAgIGludCB4Um9vdCwgeVJvb3Q7CisgICAgZ2RrX3dpbmRvd19nZXRfcm9v
dF9jb29yZHMoZ3RrX3dpZGdldF9nZXRfd2luZG93KHZpZXdXaWRnZXQpLCB4LCB5LCAmeFJvb3Qs
ICZ5Um9vdCk7CisgICAgZXZlbnQtPmJ1dHRvbi54X3Jvb3QgPSB4Um9vdDsKKyAgICBldmVudC0+
YnV0dG9uLnlfcm9vdCA9IHlSb290OworICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50LmdldCgp
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1dlYlZpZXdUZXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJWaWV3VGVzdC5oCmluZGV4IDAxZjQ2ODUuLjA0ZjkyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaApAQCAtNDcsMTIg
KzQ3LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBl
ZCgpOwogCiAgICAgdm9pZCBtb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBt
b3VzZU1vZGlmaWVycyA9IDApOworICAgIHZvaWQgY2xpY2tNb3VzZUJ1dHRvbihpbnQgeCwgaW50
IHksIHVuc2lnbmVkIGludCBidXR0b24gPSAxLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMg
PSAwKTsKIAogICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKICAgICBHTWFpbkxvb3AqIG1f
bWFpbkxvb3A7CiAgICAgQ1N0cmluZyBtX2FjdGl2ZVVSSTsKICAgICBHdGtXaWRnZXQqIG1fcGFy
ZW50V2luZG93OwogICAgIENTdHJpbmcgbV9leHBlY3RlZFRpdGxlOworCitwcml2YXRlOgorICAg
IHZvaWQgZXhlY3V0ZU1vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlLCBpbnQsIGludCwgdW5z
aWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogfTsKIAogI2VuZGlmIC8vIFdlYlZpZXdUZXN0X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCAwYTgwN2Jj
Li5kZGQyNGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5o
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFZGl0aW5nQ29tbWFu
ZHMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RXJyb3IuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmluZENvbnRyb2xsZXIuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdEhpdFRlc3RSZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdFByaW50T3BlcmF0aW9uLmg+CkBAIC0zOCw4ICszOSw4IEBACiAjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXNw
b25zZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4dC5oPgotI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdl
YlZpZXcuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmg+CiAKICN1bmRlZiBfX1dFQktJVDJf
SF9JTlNJREVfXwotLSAKMS43LjcuNgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134053</attachid>
            <date>2012-03-27 06:56:35 -0700</date>
            <delta_ts>2012-04-20 04:57:54 -0700</delta_ts>
            <desc>Patch Proposal + Unit Tests + Docs</desc>
            <filename>0001-2012-03-27-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>60812</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBlM2JiNjk5NmNkNTFkMmJhM2Q5NGUwMzE5YzQyYmY3YzU1M2JiMjY3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBUdWUsIDI3IE1hciAyMDEyIDEzOjU1OjQ0ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wMy0yNyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5QYW5lbCBpbiBX
ZWJLaXQyR1RLKwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODQ5MQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgQWRk
IGEgbmV3IHB1YmxpYyBjbGFzcyB0byB0aGUgQVBJLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qs
IHRvIGJlCiAgICAgICAgZW1pdHRlZCBhbG9uZyB3aXRoIGEgbmV3IFdlYktpdFdlYlZpZXc6OnJ1
bi1maWxlLWNob29zZXIgc2lnbmFsIHRvCiAgICAgICAgbGV0IGNsaWVudCBhcHBsaWNhdGlvbnMg
dG8gcHJvdmlkZSB0aGVpciBvd24gZmlsZSBjaG9vc2VyIGRpYWxvZwogICAgICAgIHdoZW4gdGhl
IHVzZSBpbnRlcmFjdHMgd2l0aCBIVE1MIElucHV0IGVsZW1lbnRzIG9mIHR5cGUgJ2ZpbGUnLgoK
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGRlZCBuZXcgc291cmNlIGZpbGVzIGFuZCBoZWFk
ZXJzLgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
LmNwcDogQWRkZWQuCiAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKToK
ICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2luaXQpOgogICAgICAgICh3ZWJr
aXRGaWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZSk6CiAgICAgICAgKHdlYmtpdEZpbGVDaG9vc2Vy
UmVxdWVzdEdldFByb3BlcnR5KToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2NsYXNzX2luaXQpOgogICAgICAgICh3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUpOgog
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVj
dGlvbik6CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
cyk6CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19m
aWx0ZXIpOgogICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVz
KToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9wcmV2aW91c2x5X3Nl
bGVjdGVkX2ZpbGVzKToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNl
bCk6CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qu
aDogQWRkZWQuCiAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QpOgogICAgICAgIChf
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MpOgogICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oOiBBZGRlZCwKICAgICAgICBjb250
YWluaW5nIHRoZSBwcm90b3R5cGUgb2Ygd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlLgoK
ICAgICAgICBQcm92aWRlIHByaXZhdGUgQVBJIHRvIG1ha2UgYSBmaWxlIGNob29zZXIgcmVxdWVz
dCBmcm9tIHRoZQogICAgICAgIFdlYlZpZXcsIGFuZCBwcm92aWRlIGEgZGVmYXVsdCBoYW5kbGVy
IGZvciBpdC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoK
ICAgICAgICAoZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKTogSGFuZGxlciBmb3Ig
dGhlICdyZXNwb25zZScKICAgICAgICBzaWduYWwgZm9yIHRoZSBHdGtGaWxlQ2hvb3NlckRpYWxv
ZyB1c2VkIGluIHRoZSBkZWZhdWx0CiAgICAgICAgaGFuZGxlci4gSXQgd2lsbCBjYWxsIHRvIHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMKICAgICAgICBvciB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsIGFzIG5lZWRlZC4KICAgICAgICAod2Via2l0V2Vi
Vmlld1J1bkZpbGVDaG9vc2VyKTogRGVmYXVsdCBoYW5kbGVyIGZvciB0aGUgbmV3CiAgICAgICAg
J3J1bi1maWxlLWNob29zZXInIHNpZ25hbC4gSXQgd2lsbCBjcmVhdGUgYSBHdGtGaWxlQ2hvb3Nl
ckRpYWxvZywKICAgICAgICBjb25uZWN0IHRvIHRoZSAncmVzcG9uc2UnIHNpZ25hbCBhbmQgc2hv
dyBpdC4KICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBDb25uZWN0IHRoZSAn
cnVuLWZpbGUtY2hvb3NlcicKICAgICAgICBzaWduYWwgdG8gdGhlIGRlZmF1bHQgaGFuZGxlciwg
d2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyLgogICAgICAgICh3ZWJraXRXZWJWaWV3UnVuRmls
ZUNob29zZXJSZXF1ZXN0KToKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuaDoKICAgICAgICAoX1dlYktpdFdlYlZpZXdDbGFzcyk6IEFkZGVkIHByb3RvdHlwZSBmb3Ig
dGhlIGhhbmRsZXIgb2YgdGhlIG5ldwogICAgICAgICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwu
CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOiBBZGRl
ZCBwcm90b3R5cGUgZm9yCiAgICAgICAgcHJpdmF0ZSBuZXcgZnVuY3Rpb24gd2Via2l0V2ViVmll
d1J1bkZpbGVDaG9vc2VyUmVxdWVzdC4KCiAgICAgICAgUHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlv
biBmb3IgcnVuT3BlblBhbmVsIGluIFdlYktpdFVJQ2xpZW50LgoKICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcDoKICAgICAgICAocnVuT3BlblBhbmVsKTogTmV3
LCBpbXBsZW1lbnRzIHJ1bk9wZW5QYW5lbCBieSBjcmVhdGluZyBhbgogICAgICAgIGluc3RhbmNl
IG9mIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBhbmQgYXNraW5nIHRoZSBXZWJWaWV3IHRvCiAg
ICAgICAgZW1pdCB0aGUgJ3J1bi1maWxlLWNob29zZXInIHNpZ25hbCB3aXRoIGl0LgogICAgICAg
IChhdHRhY2hVSUNsaWVudFRvVmlldyk6IFJlZmVyZW5jZSB0aGUgbmV3IHJ1bk9wZW5QYW5lbCBm
dW5jdGlvbi4KCiAgICAgICAgQWRkZWQgdGhlIG5ldyBwdWJsaWNoIGhlYWRlciB0byB0aGUgbWFp
biBoZWFkZXIuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOiBBZGRlZCBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaC4KCiAgICAgICAgTmV3IHVuaXQgdGVzdHMgZm9yIHRo
ZSBuZXcgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IEFQSS4gQWxzbywKICAgICAgICBleHRlbmRl
ZCB0aGUgV2ViVmlld1Rlc3QgY2xhc3MgdG8gYWxsb3cgc2ltdWxhdGluZyBtb3VzZSBjbGlja3Mu
CgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3Bw
OgogICAgICAgIChjaGVja01pbWVUeXBlRm9yRmlsdGVyKTogTmV3LCBjaGVja3Mgd2hldGhlciBh
IEd0a0ZpbGVGaWx0ZXIKICAgICAgICBmaWx0ZXJzIGEgZ2l2ZW4gTUlNRSB0eXBlLCBhcyBzcGVj
aWZpZWQgYnkgUkZDIDIwNDYuCiAgICAgICAgKHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0
KTogTmV3IHVuaXQgdGVzdC4KICAgICAgICAoYmVmb3JlQWxsKTogQWRkIHRoZSBuZXcgdW5pdCB0
ZXN0IGFzIGFuIFVJQ2xpZW50VGVzdC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJWaWV3VGVzdC5jcHA6CiAgICAgICAgKFdlYlZpZXdUZXN0OjpjbGlja01vdXNlQnV0dG9u
KTogTmV3IHB1YmxpYyBmdW5jdGlvbiB0byBzaW11bGF0ZSBhCiAgICAgICAgbW91c2UgY2xpY2sg
dGhyb3VnaCBHZGtFdmVudHMsIGFzIHRoZSBjb21iaW5hdGlvbiBvZiBhICdwcmVzcycgYW5kCiAg
ICAgICAgYSAncmVsZWFzZScgZXZlbnQuIFVzZWQgZnJvbSB0aGUgbmV3IHVuaXQgdGVzdCB0byBz
aW11bGF0ZSB0aGUKICAgICAgICB1c2VyIHByZXNzaW5nIGluIHRoZSBidXR0b24gcmVuZGVyZWQg
Zm9yIGEgSFRNTCBJbnB1dCBlbGVtZW50LgogICAgICAgIChXZWJWaWV3VGVzdDo6ZXhlY3V0ZU1v
dXNlQnV0dG9uRXZlbnQpOiBOZXcgcHJpdmF0ZSBmdW5jdGlvbiB0bwogICAgICAgIHNpbXVsYXRl
IGEgbW91c2UgZXZlbnQgdGhyb3VnaCBHZGtFdmVudHMuCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oOgoKICAgICAgICBVcGRhdGVkIGRvY3VtZW50YXRpb24g
cmVsYXRlZCBmaWxlcyB3aXRoIHRoZSBuZXcgQVBJLgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6IEFkZGVkIG5ldyBBUEkuCiAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBuZXcg
c2VjdGlvbi4KICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBl
czogQWRkZWQgZ2V0X3R5cGUgZnVuY3Rpb24uCgoyMDEyLTAzLTI3ICBNYXJpbyBTYW5jaGV6IFBy
YWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYlVJ
Q2xpZW50J3MgcnVuT3BlblBhbmVsIGluIFdlYktpdDJHVEsrCiAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NDkxCgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICBIYW5kbGUgdGhlIEdQdHJBcnJheSB0eXBlIGluIEdSZWZQ
dHIsIGJ5IGNhbGxpbmcgZ19wdHJfYXJyYXlfcmVmCiAgICAgICAgYW5kIGdfcHRyX2FycmF5X3Vu
cmVmIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVmR1B0ciBhbmQgdGhlCiAgICAgICAg
ZnJlZU93bmVkR1B0ciB0ZW1wbGF0ZSBmdW5jdGlvbnMuCgogICAgICAgICogd3RmL2dvYmplY3Qv
R1JlZlB0ci5jcHA6CiAgICAgICAgKFdURjo6cmVmR1B0cik6CiAgICAgICAgKFdURik6CiAgICAg
ICAgKFdURjo6ZGVyZWZHUHRyKToKICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuaDoKICAg
ICAgICAoV1RGKToKICAgICAgICAqIHd0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oOgoKUmVuYW1lIGZ1
bmN0aW9ucwoKYXNkYWQKLS0tCiBTb3VyY2UvV1RGL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMTkgKwogU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmNw
cCAgICAgICAgICAgICAgICAgfCAgIDEzICsKIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0
ci5oICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dU
eXBlZGVmcy5oICAgICAgICAgICAgICAgICB8ICAgIDEgKwogU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDg4ICsrKysrCiBTb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogLi4uL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgfCAgMzc3ICsrKysrKysr
KysrKysrKysrKysrCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0LmggICB8ICAgNzggKysrKwogLi4uL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
UHJpdmF0ZS5oICAgICAgfCAgIDI4ICsrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRVSUNsaWVudC5jcHAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIHwgICA4MyArKysrKwogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oICAgfCAgICA1ICstCiAuLi4vVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCAgICAgICB8ICAgIDEgKwogLi4uL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgICAgfCAgICAxICsKIC4uLi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IHwgICAyNCArKwog
Li4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcyAgICAgICAgfCAgICAx
ICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAgIHwg
IDEwMCArKysrKysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAg
ICAgICAgIHwgICAzMiArKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2Vi
Vmlld1Rlc3QuaCAgfCAgICA0ICsKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dl
YmtpdDIuaCAgICAgICAgIHwgICAgMyArLQogMjAgZmlsZXMgY2hhbmdlZCwgODcxIGluc2VydGlv
bnMoKyksIDMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA3M2IxOGUw
Li40ZGY3Y2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAzLTI3ICBNYXJpbyBTYW5jaGV6
IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQg
V2ViVUlDbGllbnQncyBydW5PcGVuUGFuZWwgaW4gV2ViS2l0MkdUSysKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NDkxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGFuZGxlIHRoZSBHUHRyQXJyYXkgdHlw
ZSBpbiBHUmVmUHRyLCBieSBjYWxsaW5nIGdfcHRyX2FycmF5X3JlZgorICAgICAgICBhbmQgZ19w
dHJfYXJyYXlfdW5yZWYgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSByZWZHUHRyIGFuZCB0
aGUKKyAgICAgICAgZnJlZU93bmVkR1B0ciB0ZW1wbGF0ZSBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiB3dGYvZ29iamVjdC9HUmVmUHRyLmNwcDoKKyAgICAgICAgKFdURjo6cmVmR1B0cik6CisgICAg
ICAgIChXVEYpOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHIpOgorICAgICAgICAqIHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgICogd3RmL2dvYmplY3QvR1R5
cGVkZWZzLmg6CisKIDIwMTItMDMtMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgU2V0IGVvbC1zdHlsZTogbmF0aXZlIG9uIFdURi5zbG4gcGVyIFJ5YW4gU2xl
ZXZpJ3MgcmVxdWVzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0
ci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwCmluZGV4IDMwZGYyYzku
LjNhMDE0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmNwcApAQCAtMTA3LDYgKzEwNywx
OSBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHU291cmNlKiBwdHIpCiAgICAgICAgIGdf
c291cmNlX3VucmVmKHB0cik7CiB9CiAKK3RlbXBsYXRlIDw+IEdQdHJBcnJheSogcmVmR1B0cihH
UHRyQXJyYXkqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX3B0cl9hcnJheV9yZWYo
cHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihH
UHRyQXJyYXkqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX3B0cl9hcnJheV91bnJl
ZihwdHIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIEVOQUJMRShHTElC
X1NVUFBPUlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaCBi
L1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5oCmluZGV4IDkyYWNmZmMuLmY0ZmYzZDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5oCkBAIC0yMDgsNiArMjA4LDggQEAgdGVtcGxhdGUg
PD4gR1ZhcmlhbnQqIHJlZkdQdHIoR1ZhcmlhbnQqIHB0cik7CiB0ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cihHVmFyaWFudCogcHRyKTsKIHRlbXBsYXRlIDw+IEdTb3VyY2UqIHJlZkdQdHIoR1Nv
dXJjZSogcHRyKTsKIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdTb3VyY2UqIHB0cik7Cit0
ZW1wbGF0ZSA8PiBHUHRyQXJyYXkqIHJlZkdQdHIoR1B0ckFycmF5Kik7Cit0ZW1wbGF0ZSA8PiB2
b2lkIGRlcmVmR1B0cihHUHRyQXJyYXkqKTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUKiByZWZHUHRyKFQqIHB0cikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmpl
Y3QvR1R5cGVkZWZzLmggYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCmluZGV4
IGUyOTI1MGIuLmQwMTc5NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1R5
cGVkZWZzLmgKKysrIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HVHlwZWRlZnMuaApAQCAtNTUs
NiArNTUsNyBAQCB0eXBlZGVmIHN0cnVjdCBfR01haW5Db250ZXh0IEdNYWluQ29udGV4dDsKIHR5
cGVkZWYgc3RydWN0IF9HTWFpbkxvb3AgR01haW5Mb29wOwogdHlwZWRlZiBzdHJ1Y3QgX0dQYXR0
ZXJuU3BlYyBHUGF0dGVyblNwZWM7CiB0eXBlZGVmIHN0cnVjdCBfR1BvbGxhYmxlT3V0cHV0U3Ry
ZWFtIEdQb2xsYWJsZU91dHB1dFN0cmVhbTsKK3R5cGVkZWYgc3RydWN0IF9HUHRyQXJyYXkgR1B0
ckFycmF5OwogdHlwZWRlZiBzdHJ1Y3QgX0dTTGlzdCBHU0xpc3Q7CiB0eXBlZGVmIHN0cnVjdCBf
R1NvY2tldENsaWVudCBHU29ja2V0Q2xpZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXRDb25u
ZWN0aW9uIEdTb2NrZXRDb25uZWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDUwMzNmOTEuLjBkY2NlMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MSBAQAorMjAxMi0wMy0yNyAgTWFyaW8gU2FuY2hleiBQ
cmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFdl
YlVJQ2xpZW50J3MgcnVuT3BlblBhbmVsIGluIFdlYktpdDJHVEsrCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODQ5MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBwdWJsaWMgY2xhc3MgdG8g
dGhlIEFQSSwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LCB0byBiZQorICAgICAgICBlbWl0dGVk
IGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6cnVuLWZpbGUtY2hvb3NlciBzaWduYWwg
dG8KKyAgICAgICAgbGV0IGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gcHJvdmlkZSB0aGVpciBvd24g
ZmlsZSBjaG9vc2VyIGRpYWxvZworICAgICAgICB3aGVuIHRoZSB1c2UgaW50ZXJhY3RzIHdpdGgg
SFRNTCBJbnB1dCBlbGVtZW50cyBvZiB0eXBlICdmaWxlJy4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOiBBZGRlZCBuZXcgc291cmNlIGZpbGVzIGFuZCBoZWFkZXJzLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpOgorICAgICAgICAod2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2luaXQpOgorICAgICAgICAod2Via2l0RmlsZUNob29zZXJS
ZXF1ZXN0RmluYWxpemUpOgorICAgICAgICAod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0R2V0UHJv
cGVydHkpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NsYXNzX2luaXQp
OgorICAgICAgICAod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKToKKyAgICAgICAgKHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uKToKKyAg
ICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyk6CisgICAg
ICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKToK
KyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMpOgorICAg
ICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9wcmV2aW91c2x5X3NlbGVjdGVk
X2ZpbGVzKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oOiBB
ZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QpOgorICAgICAgICAoX1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmg6IEFkZGVkLAorICAgICAgICBjb250
YWluaW5nIHRoZSBwcm90b3R5cGUgb2Ygd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlLgor
CisgICAgICAgIFByb3ZpZGUgcHJpdmF0ZSBBUEkgdG8gbWFrZSBhIGZpbGUgY2hvb3NlciByZXF1
ZXN0IGZyb20gdGhlCisgICAgICAgIFdlYlZpZXcsIGFuZCBwcm92aWRlIGEgZGVmYXVsdCBoYW5k
bGVyIGZvciBpdC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwOgorICAgICAgICAoZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKTogSGFuZGxl
ciBmb3IgdGhlICdyZXNwb25zZScKKyAgICAgICAgc2lnbmFsIGZvciB0aGUgR3RrRmlsZUNob29z
ZXJEaWFsb2cgdXNlZCBpbiB0aGUgZGVmYXVsdAorICAgICAgICBoYW5kbGVyLiBJdCB3aWxsIGNh
bGwgdG8gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcworICAgICAgICBv
ciB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsIGFzIG5lZWRlZC4KKyAgICAgICAg
KHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nlcik6IERlZmF1bHQgaGFuZGxlciBmb3IgdGhlIG5l
dworICAgICAgICAncnVuLWZpbGUtY2hvb3Nlcicgc2lnbmFsLiBJdCB3aWxsIGNyZWF0ZSBhIEd0
a0ZpbGVDaG9vc2VyRGlhbG9nLAorICAgICAgICBjb25uZWN0IHRvIHRoZSAncmVzcG9uc2UnIHNp
Z25hbCBhbmQgc2hvdyBpdC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KTog
Q29ubmVjdCB0aGUgJ3J1bi1maWxlLWNob29zZXInCisgICAgICAgIHNpZ25hbCB0byB0aGUgZGVm
YXVsdCBoYW5kbGVyLCB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXIuCisgICAgICAgICh3ZWJr
aXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgIChfV2ViS2l0V2ViVmlld0NsYXNzKTogQWRk
ZWQgcHJvdG90eXBlIGZvciB0aGUgaGFuZGxlciBvZiB0aGUgbmV3CisgICAgICAgICdydW4tZmls
ZS1jaG9vc2VyJyBzaWduYWwuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld1ByaXZhdGUuaDogQWRkZWQgcHJvdG90eXBlIGZvcgorICAgICAgICBwcml2YXRlIG5ldyBm
dW5jdGlvbiB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0LgorCisgICAgICAgIFBy
b3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXRVSUNsaWVu
dC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcDoKKyAg
ICAgICAgKHJ1bk9wZW5QYW5lbCk6IE5ldywgaW1wbGVtZW50cyBydW5PcGVuUGFuZWwgYnkgY3Jl
YXRpbmcgYW4KKyAgICAgICAgaW5zdGFuY2Ugb2YgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IGFu
ZCBhc2tpbmcgdGhlIFdlYlZpZXcgdG8KKyAgICAgICAgZW1pdCB0aGUgJ3J1bi1maWxlLWNob29z
ZXInIHNpZ25hbCB3aXRoIGl0LgorICAgICAgICAoYXR0YWNoVUlDbGllbnRUb1ZpZXcpOiBSZWZl
cmVuY2UgdGhlIG5ldyBydW5PcGVuUGFuZWwgZnVuY3Rpb24uCisKKyAgICAgICAgQWRkZWQgdGhl
IG5ldyBwdWJsaWNoIGhlYWRlciB0byB0aGUgbWFpbiBoZWFkZXIuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6IEFkZGVkIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5o
LgorCisgICAgICAgIE5ldyB1bml0IHRlc3RzIGZvciB0aGUgbmV3IFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCBBUEkuIEFsc28sCisgICAgICAgIGV4dGVuZGVkIHRoZSBXZWJWaWV3VGVzdCBjbGFz
cyB0byBhbGxvdyBzaW11bGF0aW5nIG1vdXNlIGNsaWNrcy4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKGNoZWNrTWlt
ZVR5cGVGb3JGaWx0ZXIpOiBOZXcsIGNoZWNrcyB3aGV0aGVyIGEgR3RrRmlsZUZpbHRlcgorICAg
ICAgICBmaWx0ZXJzIGEgZ2l2ZW4gTUlNRSB0eXBlLCBhcyBzcGVjaWZpZWQgYnkgUkZDIDIwNDYu
CisgICAgICAgICh0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdCk6IE5ldyB1bml0IHRlc3Qu
CisgICAgICAgIChiZWZvcmVBbGwpOiBBZGQgdGhlIG5ldyB1bml0IHRlc3QgYXMgYW4gVUlDbGll
bnRUZXN0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3Qu
Y3BwOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24pOiBOZXcgcHVibGlj
IGZ1bmN0aW9uIHRvIHNpbXVsYXRlIGEKKyAgICAgICAgbW91c2UgY2xpY2sgdGhyb3VnaCBHZGtF
dmVudHMsIGFzIHRoZSBjb21iaW5hdGlvbiBvZiBhICdwcmVzcycgYW5kCisgICAgICAgIGEgJ3Jl
bGVhc2UnIGV2ZW50LiBVc2VkIGZyb20gdGhlIG5ldyB1bml0IHRlc3QgdG8gc2ltdWxhdGUgdGhl
CisgICAgICAgIHVzZXIgcHJlc3NpbmcgaW4gdGhlIGJ1dHRvbiByZW5kZXJlZCBmb3IgYSBIVE1M
IElucHV0IGVsZW1lbnQuCisgICAgICAgIChXZWJWaWV3VGVzdDo6ZXhlY3V0ZU1vdXNlQnV0dG9u
RXZlbnQpOiBOZXcgcHJpdmF0ZSBmdW5jdGlvbiB0bworICAgICAgICBzaW11bGF0ZSBhIG1vdXNl
IGV2ZW50IHRocm91Z2ggR2RrRXZlbnRzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0Lmg6CisKKyAgICAgICAgVXBkYXRlZCBkb2N1bWVudGF0aW9uIHJlbGF0
ZWQgZmlsZXMgd2l0aCB0aGUgbmV3IEFQSS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6IEFkZGVkIG5ldyBBUEkuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkZWQgbmV3IHNl
Y3Rpb24uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVz
OiBBZGRlZCBnZXRfdHlwZSBmdW5jdGlvbi4KKwogMjAxMi0wMy0yNyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIHJlc291cmNl
cyBBUEkgdG8gV2ViS2l0MiBHVEsrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDg2NDdhOWIuLjZl
NjI4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC05MCw2ICs5MCw3IEBAIGxpYndlYmtpdDJn
dGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREb3dubG9hZC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVkaXRp
bmdDb21tYW5kcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9y
LmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xs
ZXIuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0
LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dC5oIFwKQEAgLTU1NCw2ICs1NTUsOSBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVkaXRpbmdDb21tYW5kcy5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgXAorCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgXAorCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIFwK
KwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3RQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhp
dFRlc3RSZXN1bHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRIaXRUZXN0UmVzdWx0LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEhpdFRlc3RSZXN1bHRQcml2YXRlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwZTZkZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdC5jcHAKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdC5oIgorCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYk9wZW5QYW5lbFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0CisgKiBAU2hvcnRfZGVzY3JpcHRpb246IEEgcmVxdWVzdCB0byBvcGVuIGEg
ZmlsZSBjaG9vc2VyCisgKiBAVGl0bGU6IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICogQFNl
ZV9hbHNvOiAjV2ViS2l0V2ViVmlldworICoKKyAqIFdoZW5ldmVyIHRoZSB1c2VyIGludGVyYWN0
cyB3aXRoIGEgJmx0O2lucHV0IHR5cGU9J2ZpbGUnIC8mZ3Q7IEhUTUwKKyAqIGVsZW1lbnQsIFdl
YktpdCB3aWxsIG5lZWQgdG8gc2hvdyBhIGRpYWxvZyB0byBjaG9vc2Ugb25lIG9yIG1vcmUKKyAq
IGZpbGVzIHRvIGJlIHVwbG9hZGVkIHRvIHRoZSBzZXJ2ZXIgYWxvbmcgd2l0aCB0aGUgcmVzdCBv
ZiB0aGUgZm9ybQorICogZGF0YS4gRm9yIHRoYXQgdG8gaGFwcGVuIGluIGEgZ2VuZXJhbCB3YXks
IGluc3RlYWQgb2YganVzdCBvcGVuaW5nCisgKiBhICNHdGtGaWxlQ2hvb3NlckRpYWxvZyAod2hp
Y2ggbWlnaHQgYmUgbm90IGRlc2lyYWJsZSBpbiBzb21lCisgKiBzcGVjaWZpYyBwbGF0Zm9ybXMs
IHdoaWNoIGNvdWxkIHByZWZlciB0byB1c2UgdGhlaXIgb3duIGZpbGUKKyAqIGNob29zZXIgZGlh
bG9nKSwgV2ViS2l0IHdpbGwgZmlyZSB0aGUKKyAqICNXZWJLaXRXZWJWaWV3OjpydW4tZmlsZS1j
aG9vc2VyIHNpZ25hbCB3aXRoIGEKKyAqICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qgb2JqZWN0
LCB3aGljaCB3aWxsIGFsbG93IHRoZSBjbGllbnQKKyAqIGFwcGxpY2F0aW9uIHRvIHNwZWNpZnkg
dGhlIGZpbGVzIHRvIGJlIHNlbGVjdGVkLCB0byBpbnNwZWN0IHRoZQorICogZGV0YWlscyBmcm9t
IHRoZSByZXF1ZXN0IChlLmcuIGlmIG11bHRpcGxlIHNlbGVjdGlvbiBzaG91bGQgYmUKKyAqIGFs
bG93ZWQpIGFuZCB0byBjYW5jZWwgdGhlIHJlcXVlc3QsIGluIGNhc2Ugbm90aGluZyB3YXMgZmlu
YWxseQorICogYmVpbmcgc2VsZWN0ZWQuCisgKgorICogSW4gY2FzZSB0aGUgY2xpZW50IGFwcGxp
Y2F0aW9uIGRvZXMgbm90IHdpc2ggdG8gaGFuZGxlIHRoaXMgc2lnbmFsLAorICogV2ViS2l0IHdp
bGwgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlciB3aGljaCB3aWxsIGFzeW5jaHJvbm91c2x5IHJ1
bgorICogYSByZWd1bGFyICNHdGtGaWxlQ2hvb3NlckRpYWxvZyBmb3IgdGhlIHVzZXIgdG8gaW50
ZXJhY3Qgd2l0aC4KKyAqLworR19ERUZJTkVfVFlQRShXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qs
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdCwgR19UWVBFX09CSkVDVCkKKworc3RydWN0IF9X
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlIHsKKyAgICBXS1JldGFpblB0cjxXS09wZW5Q
YW5lbFBhcmFtZXRlcnNSZWY+IHdrUGFyYW1ldGVyczsKKyAgICBXS1JldGFpblB0cjxXS09wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyUmVmPiB3a0xpc3RlbmVyOworICAgIEdSZWZQdHI8R3RrRmlsZUZp
bHRlcj4gZmlsdGVyOworICAgIEdSZWZQdHI8R1B0ckFycmF5PiBtaW1lVHlwZXM7CisgICAgR1Jl
ZlB0cjxHUHRyQXJyYXk+IHNlbGVjdGVkRmlsZXM7CisgICAgYm9vbCBoYW5kbGVkUmVxdWVzdDsK
K307CisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FMTE9XU19NVUxUSVBMRV9TRUxF
Q1RJT04sCisgICAgUFJPUF9GSUxURVIsCisgICAgUFJPUF9NSU1FX1RZUEVTLAorICAgIFBST1Bf
U0VMRUNURURfRklMRVMsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmVx
dWVzdC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRf
VFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0
ZSk7CisgICAgbmV3IChyZXF1ZXN0LT5wcml2KSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2
YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVl
c3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqZWN0KTsKKworICAgIC8vIE1ha2Ug
c3VyZSB0aGUgcmVxdWVzdCBpcyBhbHdheXMgaGFuZGxlZCBiZWZvcmUgZmluYWxpemluZy4KKyAg
ICBpZiAoIXJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0KQorICAgICAgICB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKHJlcXVlc3QpOworCisgICAgcmVxdWVzdC0+cHJpdi0+
fldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0R2V0UHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBX
RUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqZWN0KTsKKyAgICBzd2l0Y2ggKHByb3BJZCkg
eworICAgIGNhc2UgUFJPUF9BTExPV1NfTVVMVElQTEVfU0VMRUNUSU9OOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dz
X211bHRpcGxlX3NlbGVjdGlvbihyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9GSUxURVI6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NSU1FX1RZUEVTOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9ib3hlZCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVz
KHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVEVEX0ZJTEVT
OgorICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9wcmV2aW91c2x5X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jbGFzc19pbml0
KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09i
amVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Cisg
ICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0RmluYWxp
emU7CisgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdEZpbGVDaG9vc2VyUmVx
dWVzdEdldFByb3BlcnR5OworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1ZXN0Q2xh
c3MsIHNpemVvZihXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKSk7CisKKyAgICAvKioK
KyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6YWxsb3dzLW11bHRpcGxlLXNlbGVjdGlv
bjoKKyAgICAgKgorICAgICAqIFdoZXRoZXIgdGhlIGZpbGUgY2hvb3NlciBzaG91bGQgYWxsb3cg
c2VsZWN0aW5nIG11bHRpcGxlCisgICAgICogZmlsZXMuIFNlZQorICAgICAqIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uKCkgZm9yCisgICAgICog
bW9yZSBkZXRhaWxzLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X0FMTE9XU19NVUxUSVBMRV9TRUxFQ1RJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigiYWxsb3dzLW11bHRpcGxlLXNlbGVjdGlvbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XygiQWxsb3dzIG11bHRpcGxlIGZpbGUgc2VsZWN0aW9uIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiV2hldGhlciB0aGUgZmlsZSBj
aG9vc2VyIHNob3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3Q6ZmlsdGVyOgorICAgICAqCisgICAgICogVGhlIGZpbHRlciBjdXJyZW50bHkgYXNzb2Np
YXRlZCB3aXRoIHRoZSByZXF1ZXN0LiBTZWUKKyAgICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKCkgZm9yIG1vcmUKKyAgICAgKiBkZXRhaWxzLgor
ICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0ZJTFRFUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoImZpbHRl
ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJNSU1FIHR5cGVzIGZpbHRlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGZpbHRlciBjdXJyZW50bHkgYXNzb2NpYXRl
ZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9GSUxFX0ZJTFRFUiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDptaW1lLXR5
cGVzOgorICAgICAqCisgICAgICogQSAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3Mg
Y29udGFpbmluZyB0aGUgbGlzdCBvZiBNSU1FCisgICAgICogdHlwZXMgdGhlIGZpbGUgY2hvb3Nl
ciBkaWFsb2cgc2hvdWxkIGhhbmRsZS4gU2VlCisgICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9taW1lX3R5cGVzKCkgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9NSU1FX1RZUEVTLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2JveGVkKCJtaW1lLXR5cGVzIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1J
TUUgdHlwZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8oIlRoZSBsaXN0IG9mIE1JTUUgdHlwZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBy
ZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHX1RZUEVfU1RSViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgIC8qKgorICAg
ICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpzZWxlY3RlZC1maWxlczoKKyAgICAgKgorICAg
ICAqIEEgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGxp
c3Qgb2YKKyAgICAgKiBzZWxlY3RlZCBmaWxlcyBhc3NvY2lhdGVkIHRvIHRoZSBjdXJyZW50IHJl
cXVlc3QuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfcHJldmlv
dXNseV9zZWxlY3RlZF9maWxlcygpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICovCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1BfU0VMRUNURURfRklMRVMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm94ZWQoInNlbGVjdGVkLWZpbGVz
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8oIlNlbGVjdGVkIGZpbGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbGlzdCBvZiBzZWxlY3RlZCBmaWxlcyBhc3NvY2lh
dGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJWLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
Cit9CisKK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0
Q3JlYXRlKFdLT3BlblBhbmVsUGFyYW1ldGVyc1JlZiB3a1BhcmFtZXRlcnMsIFdLT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXJSZWYgd2tMaXN0ZW5lcikKK3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1QoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBOVUxMKSk7CisgICAgcmVxdWVzdC0+
cHJpdi0+d2tQYXJhbWV0ZXJzID0gd2tQYXJhbWV0ZXJzOworICAgIHJlcXVlc3QtPnByaXYtPndr
TGlzdGVuZXIgPSB3a0xpc3RlbmVyOworICAgIHJldHVybiByZXF1ZXN0OworfQorCisvKioKKyAq
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uOgor
ICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIERldGVybWlu
ZSB3aGV0aGVyIHRoZSBmaWxlIGNob29zZXIgYXNzb2NpYXRlZCB0byB0aGlzCisgKiAjV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0IHNob3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMs
CisgKiB3aGljaCBkZXBlbmRzIG9uIHRoZSBIVE1MIGlucHV0IGVsZW1lbnQgaGF2aW5nIGEgJ211
bHRpcGxlJworICogYXR0cmlidXRlIGRlZmluZWQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYg
dGhlIGZpbGUgY2hvb3NlciBzaG91bGQgYWxsb3cgc2VsZWN0aW5nIG11bHRpcGxlIGZpbGVzIG9y
ICVGQUxTRSBvdGhlcndpc2UuCisgKi8KK2dib29sZWFuIHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCog
cmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9P
U0VSX1JFUVVFU1QocmVxdWVzdCksIEZBTFNFKTsKKyAgICByZXR1cm4gV0tPcGVuUGFuZWxQYXJh
bWV0ZXJzR2V0QWxsb3dzTXVsdGlwbGVGaWxlcyhyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMu
Z2V0KCkpOworfQorCisvKioKKyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWlt
ZV90eXBlczoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisg
KiBHZXQgdGhlIGxpc3Qgb2YgTUlNRSB0eXBlcyB0aGUgZmlsZSBjaG9vc2VyIGRpYWxvZyBzaG91
bGQgaGFuZGxlLAorICogaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgaW4gUkZDIDIwNDYgZm9yICJt
ZWRpYSB0eXBlcyIuIEl0cyBjb250ZW50cworICogZGVwZW5kIG9uIHRoZSB2YWx1ZSBvZiB0aGUg
J2FjY2VwdCcgYXR0cmlidXRlIGZvciBIVE1MIGlucHV0CisgKiBlbGVtZW50cy4gVGhpcyBmdW5j
dGlvbiBzaG91bGQgbm9ybWFsbHkgYmUgY2FsbGVkIGJlZm9yZSBwcmVzZW50aW5nCisgKiB0aGUg
ZmlsZSBjaG9vc2VyIGRpYWxvZyB0byB0aGUgdXNlciwgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYWxs
b3cgdGhlCisgKiB1c2VyIHRvIHNlbGVjdCBtdWx0aXBsZSBmaWxlcyBhdCBvbmNlIG9yIG9ubHkg
b25lLgorICoKKyAqIFJldHVybnM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVy
IG5vbmUpOiBhCisgKiAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MgaWYgYSBsaXN0
IG9mIGFjY2VwdGVkIE1JTUUgdHlwZXMKKyAqIGlzIGRlZmluZWQgb3IgJU5VTEwgb3RoZXJ3aXNl
LCBtZWFuaW5nIHRoYXQgYW55IE1JTUUgdHlwZSBzaG91bGQgYmUKKyAqIGFjY2VwdGVkLiBUaGlz
IGFycmF5IGFuZCBpdHMgY29udGVudHMgYXJlIG93bmVkIGJ5IFdlYktpdEdUSysgYW5kCisgKiBz
aG91bGQgbm90IGJlIG1vZGlmaWVkIG9yIGZyZWVkLgorICovCitjb25zdCBnY2hhciogY29uc3Qq
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKyAgICBpZiAocmVxdWVzdC0+
cHJpdi0+bWltZVR5cGVzKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioq
PihyZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMtPnBkYXRhKTsKKworICAgIFdLUmV0YWluUHRyPFdL
QXJyYXlSZWY+IHdrTWltZVR5cGVzKEFkb3B0V0ssIFdLT3BlblBhbmVsUGFyYW1ldGVyc0NvcHlB
Y2NlcHRlZE1JTUVUeXBlcyhyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpKTsKKyAg
ICBzaXplX3QgbnVtT2ZNaW1lVHlwZXMgPSBXS0FycmF5R2V0U2l6ZSh3a01pbWVUeXBlcy5nZXQo
KSk7CisgICAgaWYgKCFudW1PZk1pbWVUeXBlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3X3dpdGhf
ZnJlZV9mdW5jKGdfZnJlZSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZNaW1l
VHlwZXM7ICsraSkgeworICAgICAgICBXS1N0cmluZ1JlZiB3a01pbWVUeXBlID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a01pbWVUeXBlcy5nZXQoKSwg
aSkpOworICAgICAgICBTdHJpbmcgbWltZVR5cGVTdHJpbmcgPSB0b0ltcGwod2tNaW1lVHlwZSkt
PnN0cmluZygpOworICAgICAgICBpZiAobWltZVR5cGVTdHJpbmcuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5t
aW1lVHlwZXMuZ2V0KCksIGdfc3RyZHVwKG1pbWVUeXBlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsK
KyAgICB9CisgICAgZ19wdHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlcy5nZXQo
KSwgMCk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihyZXF1ZXN0LT5w
cml2LT5taW1lVHlwZXMtPnBkYXRhKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIEdldCB0aGUgZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lh
dGVkIHdpdGggdGhlIHJlcXVlc3QsIGFscmVhZHkgc2V0CisgKiB1cCB3aXRoIHRoZSBsaXN0IG9m
IE1JTUUgdHlwZXMgYXMgcmV0dXJuZWQgYnkKKyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfbWltZV90eXBlcygpLiBUaGlzIGZ1bmN0aW9uIHNob3VsZAorICogbm9ybWFsbHkgYmUg
Y2FsbGVkIGJlZm9yZSBwcmVzZW50aW5nIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHRvIHRoZQor
ICogdXNlciwgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYXBwbHkgYSBmaWx0ZXIgc28gdGhlIHVzZXIg
d291bGQgbm90IGJlCisgKiBhbGxvd2VkIHRvIHNlbGVjdCBmaWxlcyB3aXRoIG90aGVyIE1JTUUg
dHlwZXMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNHdGtGaWxlRmlsdGVy
IGlmIGEgbGlzdCBvZiBhY2NlcHRlZAorICogTUlNRSB0eXBlcyBpcyBkZWZpbmVkIG9yICVOVUxM
IG90aGVyd2lzZS4gVGhlIHJldHVybmVkIG9iamVjdCBpcworICogb3duZWQgYnkgV2ViS2l0R1RL
KyBzaG91bGQgbm90IGJlIG1vZGlmaWVkIG9yIGZyZWVkLgorICovCitHdGtGaWxlRmlsdGVyKiB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1
ZXN0LT5wcml2LT5maWx0ZXIpCisgICAgICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5maWx0ZXIu
Z2V0KCk7CisKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiB3a01pbWVUeXBlcyhBZG9wdFdL
LCBXS09wZW5QYW5lbFBhcmFtZXRlcnNDb3B5QWNjZXB0ZWRNSU1FVHlwZXMocmVxdWVzdC0+cHJp
di0+d2tQYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgc2l6ZV90IG51bU9mTWltZVR5cGVzID0gV0tB
cnJheUdldFNpemUod2tNaW1lVHlwZXMuZ2V0KCkpOworICAgIGlmICghbnVtT2ZNaW1lVHlwZXMp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRG8gbm90IHVzZSBhZG9wdEdSZWYgaGVyZSwg
c2luY2Ugd2Ugd2FudCB0byBzaW5rIHRoZSBmbG9hdGluZworICAgIC8vIHJlZmVyZW5jZSBmb3Ig
dGhlIG5ldyBpbnN0YW5jZSBvZiBHdGtGaWxlRmlsdGVyLCBzbyB3ZSBtYWtlCisgICAgLy8gc3Vy
ZSB3ZSBrZWVwIHRoZSBvd25lcnNoaXAgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgcmVxdWVz
dC4KKyAgICByZXF1ZXN0LT5wcml2LT5maWx0ZXIgPSBndGtfZmlsZV9maWx0ZXJfbmV3KCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBlczsgKytpKSB7CisgICAgICAg
IFdLU3RyaW5nUmVmIHdrTWltZVR5cGUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJh
eUdldEl0ZW1BdEluZGV4KHdrTWltZVR5cGVzLmdldCgpLCBpKSk7CisgICAgICAgIFN0cmluZyBt
aW1lVHlwZVN0cmluZyA9IHRvSW1wbCh3a01pbWVUeXBlKS0+c3RyaW5nKCk7CisgICAgICAgIGlm
IChtaW1lVHlwZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgZ3RrX2ZpbGVfZmlsdGVyX2FkZF9taW1lX3R5cGUocmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdl
dCgpLCBtaW1lVHlwZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXM6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0CisgKiBAZmlsZXM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKHRyYW5z
ZmVyIG5vbmUpOiBhCisgKiAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MsIGNvbnRh
aW5pbmcgcGF0aHMgdG8gbG9jYWwgZmlsZXMuCisgKgorICogQXNrIFdlYktpdCB0byBzZWxlY3Qg
bG9jYWwgZmlsZXMgZm9yIHVwbG9hZCBhbmQgY29tcGxldGUgdGhlCisgKiByZXF1ZXN0LgorICov
Cit2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMoV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBnY2hhciogY29uc3QqIGZpbGVzKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVl
c3QpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGZpbGVzKTsKKworICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZUFycmF5UmVmPiB3a0Nob3NlbkZpbGVzKEFkb3B0V0ssIFdLTXV0YWJsZUFycmF5Q3Jl
YXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBmaWxlc1tpXTsgaSsrKSB7CisgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGUgZmlsZSBwYXRoIGlzIHByZXNlbnRlZCBhcyBhbiBVUkkgKGVzY2FwZWQK
KyAgICAgICAgLy8gc3RyaW5nLCB3aXRoIHRoZSAnZmlsZTovLycgcHJlZml4KSB0byBXZWJDb3Jl
IG90aGVyd2lzZSB0aGUKKyAgICAgICAgLy8gRmlsZUNob29zZXIgd29uJ3QgYWN0dWFsbHkgY2hv
b3NlIGl0LgorICAgICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlbmFtZSA9IGFkb3B0R1JlZihnX2Zp
bGVfbmV3X2Zvcl9wYXRoKGZpbGVzW2ldKSk7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpKGdf
ZmlsZV9nZXRfdXJpKGZpbGVuYW1lLmdldCgpKSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVmPiB3a1VSTChBZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1cmkuZ2V0KCkp
KTsKKyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0od2tDaG9zZW5GaWxlcy5nZXQoKSwgd2tVUkwu
Z2V0KCkpOworICAgIH0KKyAgICBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyQ2hvb3NlRmlsZXMo
cmVxdWVzdC0+cHJpdi0+d2tMaXN0ZW5lci5nZXQoKSwgd2tDaG9zZW5GaWxlcy5nZXQoKSk7Cisg
ICAgcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QgPSB0cnVlOworfQorCisvKioKKyAqIHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfcHJldmlvdXNseV9zZWxlY3RlZF9maWxlczoK
KyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBHZXQgdGhl
IGxpc3Qgb2Ygc2VsZWN0ZWQgZmlsZXMgY3VycmVudGx5IGFzc29jaWF0ZWQgdG8gdGhlCisgKiBy
ZXF1ZXN0LiBUaGlzIGxpc3Qgd2lsbCBub3JtYWxseSBiZSBlbXB0eSB3aXRoIHRoZSBmaXJzdCBy
ZXF1ZXN0CisgKiBhbmQgd2lsbCBjb250YWluIHRoZSBsaXN0IG9mIGZpbGVzIHByZXZpb3VzbHkg
c2VsZWN0ZWQsIGlmIGFueSwgaW4KKyAqIGZ1cnRoZXIgcmVxdWVzdHMgb3ZlciB0aGUgc2FtZSBI
VE1MIGlucHV0IEVsZW1lbnQuIEl0J3MgaW1wb3J0YW50CisgKiB0byBub3RpY2UgdGhhdCB0aGlz
IGxpc3Qgd29uJ3QgY2hhbmdlIGZvciB0aGUgY3VycmVudCByZXF1ZXN0IGFmdGVyCisgKiBtYWtp
bmcgYSBuZXcgc2VsZWN0aW9uLCBzaW5jZSBpdCBkb2VzIG5vdCByZXByZXNlbnQgdGhlIGxpc3Qg
b2YKKyAqIGZpbGVzIGJlaW5nIHNlbGVjdGVkIGJ1dCB0aG9zZSB0aGF0IG1pZ2h0IGJlIGFzc29j
aWF0ZWQgdG8gdGhlCisgKiByZXF1ZXN0IGF0IHRoZSBtb21lbnQgaXQgZ2V0cyB0cmlnZ2VyZWQu
IFRodXMsIHRoaXMgZnVuY3Rpb24gc2hvdWxkCisgKiBub3JtYWxseSBiZSBjYWxsZWQgb25seSBi
ZWZvcmUgcHJlc2VudGluZyB0aGUgZmlsZSBjaG9vc2VyIGRpYWxvZworICogdG8gdGhlIHVzZXIs
IHByb2JhYmx5IHRvIGRlY2lkZSB3aGV0aGVyIHRvIHBlcmZvcm0gc29tZSBleHRyYQorICogYWN0
aW9uLCBsaWtlIGdldHRpbmcgdGhvc2UgZmlsZXMgaW4gdGhlIGxpc3QgcHJlLXNlbGVjdGVkLgor
ICoKKyAqIFJldHVybnM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVyIG5vbmUp
OiBhCisgKiAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MgaWYgdGhlcmUgYXJlIHNl
bGVjdGVkIGZpbGVzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3Qgb3IgJU5VTEwgb3Ro
ZXJ3aXNlLiBUaGlzIGFycmF5IGFuZCBpdHMKKyAqIGNvbnRlbnRzIGFyZSBvd25lZCBieSBXZWJL
aXRHVEsrIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIG9yCisgKiBmcmVlZC4KKyAqLworY29u
c3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3ByZXZpb3Vz
bHlfc2VsZWN0ZWRfZmlsZXMoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChy
ZXF1ZXN0KSwgMCk7CisgICAgaWYgKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMpCisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnByaXYtPnNlbGVj
dGVkRmlsZXMtPnBkYXRhKTsKKworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IHNlbGVjdGVkRmls
ZU5hbWVzID0gdG9JbXBsKHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycy5nZXQoKSktPnNlbGVj
dGVkRmlsZU5hbWVzKCk7CisgICAgc2l6ZV90IG51bU9mRmlsZXMgPSBzZWxlY3RlZEZpbGVOYW1l
cy5zaXplKCk7CisgICAgaWYgKCFudW1PZkZpbGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3
X3dpdGhfZnJlZV9mdW5jKGdfZnJlZSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
T2ZGaWxlczsgKytpKSB7CisgICAgICAgIGlmIChzZWxlY3RlZEZpbGVOYW1lc1tpXS5pc0VtcHR5
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzZWxlY3RlZEZpbGVOYW1lc1tpXSk7CisgICAgICAgIGdf
cHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLmdldCgpLCBnX3N0cmR1
cChmaWxlbmFtZS5kYXRhKCkpKTsKKyAgICB9CisgICAgZ19wdHJfYXJyYXlfYWRkKHJlcXVlc3Qt
PnByaXYtPnNlbGVjdGVkRmlsZXMuZ2V0KCksIDApOworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Z2NoYXIqKj4ocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcy0+cGRhdGEpOworfQor
CisvKioKKyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWw6CisgKiBAcmVxdWVz
dDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogQXNrIFdlYktpdCB0byBjYW5j
ZWwgdGhlIHJlcXVlc3QuIEl0J3MgaW1wb3J0YW50IHRvIGRvIHRoaXMgaW4gY2FzZQorICogbm8g
c2VsZWN0aW9uIGhhcyBiZWVuIG1hZGUgaW4gdGhlIGNsaWVudCwgb3RoZXJ3aXNlIHRoZSByZXF1
ZXN0CisgKiB3b24ndCBiZSBwcm9wZXJseSBjb21wbGV0ZWQgYW5kIHRoZSBicm93c2VyIHdpbGwg
a2VlcCB0aGUgcmVxdWVzdAorICogcGVuZGluZyBmb3JldmVyLCB3aGljaCBtaWdodCBjYXVzZSB0
aGUgYnJvd3NlciB0byBoYW5nLgorICovCit2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9jYW5jZWwoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpKTsKKyAg
ICBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyQ2FuY2VsKHJlcXVlc3QtPnByaXYtPndrTGlzdGVu
ZXIuZ2V0KCkpOworICAgIHJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0ID0gdHJ1ZTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NjVmNzY2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lO
U0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3
ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisj
aWZuZGVmIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdF9oCisjZGVmaW5lIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdF9oCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9G
SUxFX0NIT09TRVJfUkVRVUVTVCAgICAgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBF
X0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QpKQorI2RlZmlu
ZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1Qs
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lU
X0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKSkKKyNkZWZp
bmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNU
LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QgICAgICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyAgIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdFByaXZhdGUgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9X
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8
IHByaXZhdGUgPiovCisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSAqcHJpdjsK
K307CisKK3N0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MgeworICAgIEdPYmpl
Y3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwor
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dz
X211bHRpcGxlX3NlbGVjdGlvbiAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVz
dCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKiBjb25zdCAqCit3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMgICAgICAgICAgICAgICAgKFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgR3RrRmlsZUZpbHRlciAqCit3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyICAgICAgICAgKFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyAgICAgICAgICAgICAgICAgIChX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogY29uc3Qg
ICAgICAqZmlsZXMpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICogY29uc3QgKgord2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9wcmV2aW91c2x5X3NlbGVjdGVkX2ZpbGVzIChXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwgICAgICAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYWY3MjI0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaApAQCAt
MCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdFByaXZhdGVfaAorCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorCitXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdENyZWF0ZShXS09wZW5QYW5lbFBhcmFtZXRl
cnNSZWYsIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYpOworCisjZW5kaWYgLy8gV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKaW5kZXggNmYwZTExYy4uOWY3OGM5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xp
ZW50LmNwcApAQCAtMjAsMTIgKzIwLDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0VUlDbGllbnQuaCIKIAorI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCkBA
IC0xMzYsNiArMTM4LDEyIEBAIHN0YXRpYyB2b2lkIHByaW50RnJhbWUoV0tQYWdlUmVmIHBhZ2Us
IFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQqKQogICAgIHdlYmtpdFdlYlZpZXdQcmludEZy
YW1lKFdFQktJVF9XRUJfVklFVyh0b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKSksIGZyYW1lKTsK
IH0KIAorc3RhdGljIHZvaWQgcnVuT3BlblBhbmVsKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVm
IGZyYW1lLCBXS09wZW5QYW5lbFBhcmFtZXRlcnNSZWYgcGFyYW1ldGVycywgV0tPcGVuUGFuZWxS
ZXN1bHRMaXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAg
ICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0R1JlZih3
ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUocGFyYW1ldGVycywgbGlzdGVuZXIpKTsKKyAg
ICB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0KFdFQktJVF9XRUJfVklFVyhjbGll
bnRJbmZvKSwgcmVxdWVzdC5nZXQoKSk7Cit9CisKIHZvaWQgYXR0YWNoVUlDbGllbnRUb1ZpZXco
V2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBXS1BhZ2VVSUNsaWVudCB3a1VJQ2xpZW50
ID0gewpAQCAtMTY5LDcgKzE3Nyw3IEBAIHZvaWQgYXR0YWNoVUlDbGllbnRUb1ZpZXcoV2ViS2l0
V2ViVmlldyogd2ViVmlldykKICAgICAgICAgMCwgLy8gZGlkRHJhdwogICAgICAgICAwLCAvLyBw
YWdlRGlkU2Nyb2xsCiAgICAgICAgIDAsIC8vIGV4Y2VlZGVkRGF0YWJhc2VRdW90YQotICAgICAg
ICAwLCAvLyBydW5PcGVuUGFuZWwKKyAgICAgICAgcnVuT3BlblBhbmVsLAogICAgICAgICAwLCAv
LyBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0CiAgICAgICAgIDAs
IC8vIGhlYWRlckhlaWdodAogICAgICAgICAwLCAvLyBmb290ZXJIZWlnaHQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggYjM1
ZDcyOS4uMTdkMDU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTcwLDYgKzcwLDggQEAgZW51bSB7CiAKICAgICBSRVNP
VVJDRV9MT0FEX1NUQVJURUQsCiAKKyAgICBSVU5fRklMRV9DSE9PU0VSLAorCiAgICAgTEFTVF9T
SUdOQUwKIH07CiAKQEAgLTIwMiw2ICsyMDQsNDkgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmll
d1NldFNldHRpbmdzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFNldHRpbmdzKiBzZXQK
ICAgICBnX3NpZ25hbF9jb25uZWN0KHNldHRpbmdzLCAibm90aWZ5Ojp6b29tLXRleHQtb25seSIs
IEdfQ0FMTEJBQ0soem9vbVRleHRPbmx5Q2hhbmdlZCksIHdlYlZpZXcpOwogfQogCitzdGF0aWMg
dm9pZCBmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrRGlhbG9nKiBkaWFsb2cs
IGdpbnQgcmVzcG9uc2VJRCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQorewor
ICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBhZG9wdGVkUmVxdWVzdCA9IGFk
b3B0R1JlZihyZXF1ZXN0KTsKKyAgICBpZiAocmVzcG9uc2VJRCA9PSBHVEtfUkVTUE9OU0VfQUND
RVBUKSB7CisgICAgICAgIEdPd25QdHI8R1NMaXN0PiBmaWxlc0xpc3QoZ3RrX2ZpbGVfY2hvb3Nl
cl9nZXRfZmlsZW5hbWVzKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSkpOworICAgICAgICBHUmVm
UHRyPEdQdHJBcnJheT4gZmlsZXNBcnJheSA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXcoKSk7
CisgICAgICAgIGZvciAoR1NMaXN0KiBmaWxlID0gZmlsZXNMaXN0LmdldCgpOyBmaWxlOyBmaWxl
ID0gZ19zbGlzdF9uZXh0KGZpbGUpKQorICAgICAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGZpbGVz
QXJyYXkuZ2V0KCksIGZpbGUtPmRhdGEpOworICAgICAgICBnX3B0cl9hcnJheV9hZGQoZmlsZXNB
cnJheS5nZXQoKSwgMCk7CisgICAgICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxl
Y3RfZmlsZXMoYWRvcHRlZFJlcXVlc3QuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ2No
YXIqIGNvbnN0Kj4oZmlsZXNBcnJheS0+cGRhdGEpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChhZG9wdGVkUmVxdWVzdC5nZXQoKSk7CisK
KyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVChkaWFsb2cpKTsKK30KKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgR3RrV2lkZ2V0
KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmlldykp
OworICAgIGlmICghd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHRvcGxldmVsKSkKKyAg
ICAgICAgdG9wbGV2ZWwgPSAwOworCisgICAgZ2Jvb2xlYW4gYWxsb3dzTXVsdGlwbGVTZWxlY3Rp
b24gPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxsb3dzX211bHRpcGxlX3NlbGVjdGlv
bihyZXF1ZXN0KTsKKyAgICBHdGtXaWRnZXQqIGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlh
bG9nX25ldyhhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA/IF8oIlNlbGVjdCBGaWxlcyIpIDogXygi
U2VsZWN0IEZpbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b3BsZXZlbCA/IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9P
U0VSX0FDVElPTl9PUEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NL
X09QRU4sIEdUS19SRVNQT05TRV9BQ0NFUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoR3RrRmlsZUZpbHRlciog
ZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRl
cihyZXF1ZXN0KSkKKyAgICAgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZmlsdGVyKEdUS19GSUxF
X0NIT09TRVIoZGlhbG9nKSwgZmlsdGVyKTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9zZWxl
Y3RfbXVsdGlwbGUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBhbGxvd3NNdWx0aXBsZVNlbGVj
dGlvbik7CisKKyAgICBpZiAoY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9wcmV2aW91c2x5X3NlbGVjdGVkX2ZpbGVzKHJl
cXVlc3QpKQorICAgICAgICBndGtfZmlsZV9jaG9vc2VyX3NlbGVjdF9maWxlbmFtZShHVEtfRklM
RV9DSE9PU0VSKGRpYWxvZyksIHNlbGVjdGVkRmlsZXNbMF0pOworCisgICAgZ19zaWduYWxfY29u
bmVjdChkaWFsb2csICJyZXNwb25zZSIsIEdfQ0FMTEJBQ0soZmlsZUNob29zZXJEaWFsb2dSZXNw
b25zZUNhbGxiYWNrKSwgZ19vYmplY3RfcmVmKHJlcXVlc3QpKTsKKyAgICBndGtfd2lkZ2V0X3No
b3coZGlhbG9nKTsKKworICAgIHJldHVybiBUUlVFOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRX
ZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogewogICAgIGlmIChHX09CSkVDVF9D
TEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCkBAIC0zMDgs
NiArMzUzLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0
V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgd2ViVmlld0NsYXNzLT5jcmVhdGUgPSB3
ZWJraXRXZWJWaWV3Q3JlYXRlOwogICAgIHdlYlZpZXdDbGFzcy0+c2NyaXB0X2RpYWxvZyA9IHdl
YmtpdFdlYlZpZXdTY3JpcHREaWFsb2c7CiAgICAgd2ViVmlld0NsYXNzLT5kZWNpZGVfcG9saWN5
ID0gd2Via2l0V2ViVmlld0RlY2lkZVBvbGljeTsKKyAgICB3ZWJWaWV3Q2xhc3MtPnJ1bl9maWxl
X2Nob29zZXIgPSB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXI7CiAKICAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUod2ViVmlld0NsYXNzLCBzaXplb2YoV2ViS2l0V2ViVmlld1ByaXZhdGUp
KTsKIApAQCAtNzA2LDYgKzc1MiwzNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xh
c3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAg
ICAgICAgIEdfVFlQRV9OT05FLCAyLAogICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVf
V0VCX1JFU09VUkNFLAogICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfVVJJX1JFUVVF
U1QpOworCisgICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29zZXI6
CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25h
bCBpcyBlbWl0dGVkCisgICAgICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGlu
dGVyYWN0cyB3aXRoIGEgJmx0O2lucHV0CisgICAgICogdHlwZT0nZmlsZScgLyZndDsgSFRNTCBl
bGVtZW50LCByZXF1ZXN0aW5nIGZyb20gV2ViS2l0IHRvIHNob3cKKyAgICAgKiBhIGRpYWxvZyB0
byBzZWxlY3Qgb25lIG9yIG1vcmUgZmlsZXMgdG8gYmUgdXBsb2FkZWQuIFRvIGxldCB0aGUKKyAg
ICAgKiBhcHBsaWNhdGlvbiBrbm93IHRoZSBkZXRhaWxzIG9mIHRoZSBmaWxlIGNob29zZXIsIGFz
IHdlbGwgYXMgdG8KKyAgICAgKiBhbGxvdyB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHRvIGVpdGhl
ciBjYW5jZWwgdGhlIHJlcXVlc3Qgb3IKKyAgICAgKiBwZXJmb3JtIGFuIGFjdHVhbCBzZWxlY3Rp
b24gb2YgZmlsZXMsIHRoZSBzaWduYWwgd2lsbCBwYXNzIGFuCisgICAgICogaW5zdGFuY2Ugb2Yg
dGhlICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgaW4gdGhlIEByZXF1ZXN0CisgICAgICogYXJn
dW1lbnQuCisgICAgICoKKyAgICAgKiBUaGUgZGVmYXVsdCBzaWduYWwgaGFuZGxlciB3aWxsIGFz
eW5jaHJvbm91c2x5IHJ1biBhIHJlZ3VsYXIKKyAgICAgKiAjR3RrRmlsZUNob29zZXJEaWFsb2cg
Zm9yIHRoZSB1c2VyIHRvIGludGVyYWN0IHdpdGguCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAl
VFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2
ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAg
ICAgKgorICAgICAqLworICAgIHNpZ25hbHNbUlVOX0ZJTEVfQ0hPT1NFUl0gPQorICAgICAgICBn
X3NpZ25hbF9uZXcoInJ1bi1maWxlLWNob29zZXIiLAorICAgICAgICAgICAgICAgICAgICAgR19U
WVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lH
TkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktp
dFdlYlZpZXdDbGFzcywgcnVuX2ZpbGVfY2hvb3NlciksCisgICAgICAgICAgICAgICAgICAgICBn
X3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAgLyogYWNjdW11bGF0b3IgZGF0YSAq
LywKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwK
KyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLCAvKiBudW1iZXIgb2YgcGFy
YW1ldGVycyAqLworICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VS
X1JFUVVFU1QpOwogfQogCiBzdGF0aWMgYm9vbCB1cGRhdGVSZXBsYWNlQ29udGVudFN0YXR1cyhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50KQpAQCAtODk5
LDYgKzk3NiwxMiBAQCBXZWJLaXRXZWJSZXNvdXJjZSogd2Via2l0V2ViVmlld1Jlc291cmNlTG9h
ZEZpbmlzaGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIHVpbgogICAgIHJldHVybiByZXNvdXJj
ZTsKIH0KIAordm9pZCB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAg
ICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25h
bHNbUlVOX0ZJTEVfQ0hPT1NFUl0sIDAsIHJlcXVlc3QsICZyZXR1cm5WYWx1ZSk7Cit9CisKIC8q
KgogICogd2Via2l0X3dlYl92aWV3X25ldzoKICAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggOTkyYjJjNi4uMzZmYmVmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApA
QCAtMzEsOSArMzEsMTEgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0VGVzdFJlc3VsdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0SmF2YXNjcmlwdFJlc3VsdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UG9saWN5
RGVjaXNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNjcmlwdERpYWxvZy5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dFVSSVJlcXVlc3QuaD4KQEAgLTQxLDcgKzQzLDYgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dFdlYlJlc291cmNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgotI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0UG9saWN5RGVjaXNpb24uaD4KIAogR19CRUdJTl9ERUNMUwogCkBAIC0xNDks
NiArMTUwLDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgIHZvaWQgICAgICAg
KCogcmVzb3VyY2VfbG9hZF9zdGFydGVkKSAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2Vi
X3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRX
ZWJSZXNvdXJjZSAgICAgICAgICpyZXNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdFVSSVJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOworICAg
IGdib29sZWFuICAgKCogcnVuX2ZpbGVfY2hvb3NlcikgICAgICAoV2ViS2l0V2ViVmlldyAgICAg
ICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgICpyZXF1ZXN0KTsKIAogICAgIC8qIFBhZGRp
bmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDAp
ICh2b2lkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCmluZGV4IDczYzkzNTEuLjNiOTFmMWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZh
dGUuaApAQCAtNDYsNiArNDYsNyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdNYWtlUG9saWN5RGVjaXNp
b24oV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSwgVwogdm9pZCB3ZWJr
aXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqLCBXS0hpdFRlc3RSZXN1
bHRSZWYsIHVuc2lnbmVkIG1vZGlmaWVycyk7CiB2b2lkIHdlYmtpdFdlYlZpZXdQcmludEZyYW1l
KFdlYktpdFdlYlZpZXcqLCBXS0ZyYW1lUmVmKTsKIHZvaWQgd2Via2l0V2ViVmlld1Jlc291cmNl
TG9hZFN0YXJ0ZWQoV2ViS2l0V2ViVmlldyosIFdLRnJhbWVSZWYsIHVpbnQ2NF90IHJlc291cmNl
SWRlbnRpZmllciwgV2ViS2l0VVJJUmVxdWVzdCosIGJvb2wgaXNNYWluUmVzb3VyY2UpOwordm9p
ZCB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0KFdlYktpdFdlYlZpZXcqLCBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QqKTsKIFdlYktpdFdlYlJlc291cmNlKiB3ZWJraXRXZWJWaWV3
R2V0TG9hZGluZ1dlYlJlc291cmNlKFdlYktpdFdlYlZpZXcqLCB1aW50NjRfdCByZXNvdXJjZUlk
ZW50aWZpZXIpOwogdm9pZCB3ZWJraXRXZWJWaWV3UmVtb3ZlTG9hZGluZ1dlYlJlc291cmNlKFdl
YktpdFdlYlZpZXcqLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpOwogV2ViS2l0V2ViUmVz
b3VyY2UqIHdlYmtpdFdlYlZpZXdSZXNvdXJjZUxvYWRGaW5pc2hlZChXZWJLaXRXZWJWaWV3Kiwg
dWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCmluZGV4IDlm
MDg2NjMuLjE3NDlmYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApAQCAtMjgsNiArMjgsNyBAQAog
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRQcmludE9wZXJhdGlvbi54bWwiLz4KICAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0V2ViUmVzb3VyY2UueG1sIi8+CiAgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEVycm9yLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdEZpbmRDb250cm9sbGVyLnhtbCIvPgogICA8L2NoYXB0ZXI+CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IGJmZTUwNzguLjExZmE5YTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9u
cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLXNlY3Rpb25zLnR4dApAQCAtNTE4LDYgKzUxOCwzMCBAQCB3ZWJraXRfamF2YXNjcmlwdF9l
cnJvcl9xdWFyawogPC9TRUNUSU9OPgogCiA8U0VDVElPTj4KKzxGSUxFPldlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdDwvRklMRT4KK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAord2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2FsbG93c19tdWx0aXBsZV9zZWxlY3Rpb24KK3dlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcword2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzX2ZpbHRlcgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVj
dF9maWxlcword2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9wcmV2aW91c2x5X3NlbGVj
dGVkX2ZpbGVzCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsCisKKzxTVUJTRUNU
SU9OIFN0YW5kYXJkPgorV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MKK1dFQktJVF9UWVBF
X0ZJTEVfQ0hPT1NFUl9SRVFVRVNUCitXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1QKK1dFQktJ
VF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVAorV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NM
QVNTCitXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1MKK1dFQktJVF9GSUxFX0NI
T09TRVJfUkVRVUVTVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
dHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxFPldlYktpdEZpbmRDb250cm9sbGVy
PC9GSUxFPgogV2ViS2l0RmluZENvbnRyb2xsZXIKIFdlYktpdEZpbmRPcHRpb25zCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlw
ZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlw
ZXMKaW5kZXggZmRiMjFjYS4uY2E2ZTM1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtOSw2ICs5LDcgQEAg
d2Via2l0X3VyaV9yZXNwb25zZV9nZXRfdHlwZQogd2Via2l0X3VyaV9yZXF1ZXN0X2dldF90eXBl
CiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3R5cGUKIHdlYmtpdF9kb3dubG9hZF9nZXRf
dHlwZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlCiB3ZWJraXRfZmluZF9j
b250cm9sbGVyX2dldF90eXBlCiB3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfdHlwZQogd2Via2l0
X2phdmFzY3JpcHRfcmVzdWx0X2dldF90eXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKaW5kZXgg
Nzg3Nzk2Yy4uMWYwZmE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcApAQCAtMjE4LDYgKzIx
OCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBuZXdXZWJWaWV3OwogICAgIH0KIAorICAg
IHN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiwgV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNU
KHJlcXVlc3QpKTsKKyAgICAgICAgdGVzdC0+bV9maWxlQ2hvb3NlclJlcXVlc3QgPSByZXF1ZXN0
OworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgICAgICBy
ZXR1cm4gVFJVRTsKKyAgICB9CisKICAgICB2b2lkIHNjcmlwdEFsZXJ0KFdlYktpdFNjcmlwdERp
YWxvZyogZGlhbG9nKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX3NjcmlwdERpYWxvZ1R5cGUp
IHsKQEAgLTI4NSw2ICsyOTMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2luZG93c19hdXRvbWF0aWNhbGx5KHdlYmtp
dF93ZWJfdmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KSwgVFJVRSk7CiAgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY3JlYXRlIiwgR19DQUxMQkFDSyh2aWV3Q3JlYXRlKSwg
dGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAicnVuLWZpbGUtY2hv
b3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29zZXIpLCB0aGlzKTsKICAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChtX3dlYlZpZXcsICJzY3JpcHQtZGlhbG9nIiwgR19DQUxMQkFDSyhzY3JpcHRE
aWFsb2cpLCB0aGlzKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJtb3Vz
ZS10YXJnZXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobW91c2VUYXJnZXRDaGFuZ2VkKSwgdGhpcyk7
CiAgICAgfQpAQCAtMzExLDEyICszMjAsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9t
b3VzZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCk7CiAgICAgfQogCisgICAgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVz
dChpbnQgeCwgaW50IHkpCisgICAgeworICAgICAgICBjbGlja01vdXNlQnV0dG9uKHgsIHkpOwor
ICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX2Zp
bGVDaG9vc2VyUmVxdWVzdC5nZXQoKTsKKyAgICB9CisKICAgICBWZWN0b3I8V2ViVmlld0V2ZW50
cz4gbV93ZWJWaWV3RXZlbnRzOwogICAgIFdlYktpdFNjcmlwdERpYWxvZ1R5cGUgbV9zY3JpcHRE
aWFsb2dUeXBlOwogICAgIGJvb2wgbV9zY3JpcHREaWFsb2dDb25maXJtZWQ7CiAgICAgV2luZG93
UHJvcGVydGllcyBtX3dpbmRvd1Byb3BlcnRpZXM7CiAgICAgSGFzaFNldDxXVEY6OlN0cmluZz4g
bV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZDsKICAgICBHUmVmUHRyPFdlYktpdEhpdFRlc3RSZXN1
bHQ+IG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0OworICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0PiBtX2ZpbGVDaG9vc2VyUmVxdWVzdDsKICAgICB1bnNpZ25lZCBpbnQgbV9t
b3VzZVRhcmdldE1vZGlmaWVyczsKIH07CiAKQEAgLTMzMiw2ICszNDksODggQEAgc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0
OjpDbG9zZSk7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0
a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQoreworICAgIEd0a0Zp
bGVGaWx0ZXJJbmZvIGZpbHRlckluZm87CisgICAgZmlsdGVySW5mby5jb250YWlucyA9IEdUS19G
SUxFX0ZJTFRFUl9NSU1FX1RZUEU7CisgICAgZmlsdGVySW5mby5taW1lX3R5cGUgPSBtaW1lVHlw
ZTsKKyAgICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJJbmZv
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QoVUlDbGll
bnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0Fu
ZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmaWxlQ2hvb3NlckhU
TUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTts
ZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+PC9ib2R5Pjwv
aHRtbD4iOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlN
RSBmaWx0ZXJpbmcuCisgICAgR093blB0cjxjaGFyPiBzaW1wbGVGaWxlVXBsb2FkSFRNTChnX3N0
cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiIikpOworICAgIHRlc3QtPmxvYWRI
dG1sKHNpbXBsZUZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIGZpbGVDaG9vc2Vy
UmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1
ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxs
b3dzX211bHRpcGxlX3NlbGVjdGlvbihmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIGNvbnN0
IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBl
cyk7CisgICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNz
ZXJ0KCFmaWx0ZXIpOworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfcHJldmlvdXNseV9zZWxlY3RlZF9maWxlcyhm
aWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKyAgICB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisK
KyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLCBz
b21lIHByZS1zZWxlY3RlZCBmaWxlcy4KKyAgICBHT3duUHRyPGNoYXI+IG11bHRpcGxlU2VsZWN0
aW9uRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwg
Im11bHRpcGxlIikpOworICAgIHRlc3QtPmxvYWRIdG1sKG11bHRpcGxlU2VsZWN0aW9uRmlsZVVw
bG9hZEhUTUwuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
ICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9y
RmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9hbGxvd3NfbXVsdGlwbGVfc2VsZWN0aW9uKGZpbGVDaG9vc2VyUmVxdWVzdCkp
OworCisgICAgbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7Cisg
ICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2Zp
bHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIHNl
bGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3ByZXZpb3VzbHlf
c2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0
ZWRGaWxlcyk7CisKKyAgICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KKyAgICBjb25zdCBnY2hhciog
ZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6Iiwg
MCB9OworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMoZmlsZUNo
b29zZXJSZXF1ZXN0LCBmaWxlc1RvU2VsZWN0KTsKKworICAgIC8vIFBlcmZvcm0gYW5vdGhlciBy
ZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCisgICAgLy8gaW4g
dGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVlc3Qu
CisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRG
b3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfcHJldmlvdXNseV9zZWxlY3RlZF9maWxlcyhmaWxlQ2hv
b3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFz
ZWxlY3RlZEZpbGVzWzNdKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2Vs
KGZpbGVDaG9vc2VyUmVxdWVzdCk7CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBh
bGxvd2VkLCBvbmx5IGFjY2VwdCBpbWFnZXMsIGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4uCisgICAg
R093blB0cjxjaGFyPiBtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYo
ZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiYWNjZXB0PSdhdWRpby8qLHZpZGVvLyosaW1hZ2UvKici
KSk7CisgICAgdGVzdC0+bG9hZEh0bWwobWltZUZpbHRlcmVkRmlsZVVwbG9hZEhUTUwuZ2V0KCks
IDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGZpbGVDaG9vc2Vy
UmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1
ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfYWxs
b3dzX211bHRpcGxlX3NlbGVjdGlvbihmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIG1pbWVU
eXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hv
b3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KG1pbWVUeXBlcyk7CisgICAgZ19hc3NlcnRfY21w
c3RyKG1pbWVUeXBlc1swXSwgPT0sICJhdWRpby8qIik7CisgICAgZ19hc3NlcnRfY21wc3RyKG1p
bWVUeXBlc1sxXSwgPT0sICJ2aWRlby8qIik7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBl
c1syXSwgPT0sICJpbWFnZS8qIik7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlc1szXSk7CisKKyAg
ICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmls
dGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklMVEVS
KGZpbHRlcikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAi
YXVkaW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwg
InZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIs
ICJpbWFnZS8qIikpOworCisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfcHJldmlvdXNseV9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3Qp
OworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7Cit9CisKIHN0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3MoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBodG1sT25Mb2FkRm9ybWF0ID0gIjxodG1s
Pjxib2R5IG9uTG9hZD1cIiVzXCI+PC9ib2R5PjwvaHRtbD4iOwpAQCAtNTE5LDYgKzYxOCw3IEBA
IHZvaWQgYmVmb3JlQWxsKCkKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
InNldHRpbmdzIiwgdGVzdFdlYlZpZXdTZXR0aW5ncyk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJyZXBsYWNlLWNvbnRlbnQiLCB0ZXN0V2ViVmlld1JlcGxhY2VDb250
ZW50KTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjcmVhdGUtcmVh
ZHktY2xvc2UiLCB0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UpOworICAgIFVJQ2xpZW50VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImZpbGUtY2hvb3Nlci1yZXF1ZXN0IiwgdGVzdFdlYlZp
ZXdGaWxlQ2hvb3NlclJlcXVlc3QpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImphdmFzY3JpcHQtZGlhbG9ncyIsIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3Mp
OwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndpbmRvdy1wcm9wZXJ0
aWVzIiwgdGVzdFdlYlZpZXdXaW5kb3dQcm9wZXJ0aWVzKTsKICAgICBVSUNsaWVudFRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJtb3VzZS10YXJnZXQiLCB0ZXN0V2ViVmlld01vdXNlVGFyZ2V0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YlZpZXdUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YlZpZXdUZXN0LmNwcAppbmRleCAwOWY5N2Y2Li5iZDBjNWYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCkBAIC0x
OTgsNiArMTk4LDM4IEBAIHZvaWQgV2ViVmlld1Rlc3Q6Om1vdXNlTW92ZVRvKGludCB4LCBpbnQg
eSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzKQogICAgIGd0a19tYWluX2RvX2V2ZW50KGV2
ZW50LmdldCgpKTsKIH0KIAordm9pZCBXZWJWaWV3VGVzdDo6Y2xpY2tNb3VzZUJ1dHRvbihpbnQg
eCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVy
cykKK3sKKyAgICBkb01vdXNlQnV0dG9uRXZlbnQoR0RLX0JVVFRPTl9QUkVTUywgeCwgeSwgYnV0
dG9uLCBtb3VzZU1vZGlmaWVycyk7CisgICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05f
UkVMRUFTRSwgeCwgeSwgYnV0dG9uLCBtb3VzZU1vZGlmaWVycyk7Cit9CisKK3ZvaWQgV2ViVmll
d1Rlc3Q6OmRvTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCBpbnQgeCwg
aW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykK
K3sKKyAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lk
Z2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0
X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdk
a19ldmVudF9uZXcoZXZlbnRUeXBlKSk7CisgICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBndGtf
d2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5i
dXR0b24ud2luZG93KTsKKworICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJ
TUU7CisgICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5Owor
ICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1v
dXNlTW9kaWZpZXJzOworICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOworCisgICAg
ZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2lu
dGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5
KHZpZXdXaWRnZXQpKSk7CisKKyAgICBpbnQgeFJvb3QsIHlSb290OworICAgIGdka193aW5kb3df
Z2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwg
JnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7CisgICAg
ZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVu
dC5nZXQoKSk7Cit9CisKIHN0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKEdP
YmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViVmlld1Rlc3QqIHRlc3QpCiB7CiAgICAg
dGVzdC0+bV9qYXZhc2NyaXB0UmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0
X2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgdGVzdC0+bV9qYXZhc2NyaXB0RXJyb3Ip
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2Vi
Vmlld1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZp
ZXdUZXN0LmgKaW5kZXggMzRhZmIwNC4uMTUzZmEzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCkBAIC00Nyw2ICs0Nyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwog
CiAgICAgdm9pZCBtb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1v
ZGlmaWVycyA9IDApOworICAgIHZvaWQgY2xpY2tNb3VzZUJ1dHRvbihpbnQgeCwgaW50IHksIHVu
c2lnbmVkIGludCBidXR0b24gPSAxLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAwKTsK
IAogICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIHJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxG
aW5pc2hlZChjb25zdCBjaGFyKiBqYXZhc2NyaXB0LCBHRXJyb3IqKik7CiAKQEAgLTY0LDYgKzY1
LDkgQEAgcHVibGljOgogICAgIENTdHJpbmcgbV9leHBlY3RlZFRpdGxlOwogICAgIFdlYktpdEph
dmFzY3JpcHRSZXN1bHQqIG1famF2YXNjcmlwdFJlc3VsdDsKICAgICBHRXJyb3IqKiBtX2phdmFz
Y3JpcHRFcnJvcjsKKworcHJpdmF0ZToKKyAgICB2b2lkIGRvTW91c2VCdXR0b25FdmVudChHZGtF
dmVudFR5cGUsIGludCwgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiB9OwogCiAj
ZW5kaWYgLy8gV2ViVmlld1Rlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mi5oCmluZGV4IDdkM2ZiMGEuLjEyNjMxNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdEVkaXRpbmdDb21tYW5kcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RW51
bVR5cGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFcnJvci5oPgorI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXRGaW5kQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0VGVzdFJlc3Vs
dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SmF2YXNjcmlwdFJlc3VsdC5oPgpAQCAtNDAs
OCArNDEsOCBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVzcG9uc2UuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dFdlYlJlc291cmNlLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlldy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0V2ViVmlld0Jhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdpbmRvd1Byb3BlcnRp
ZXMuaD4KIAogI3VuZGVmIF9fV0VCS0lUMl9IX0lOU0lERV9fCi0tIAoxLjcuNy42Cgo=
</data>
<flag name="review"
          id="138212"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="143231"
          type_id="3"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138070</attachid>
            <date>2012-04-20 04:57:54 -0700</date>
            <delta_ts>2012-04-20 04:59:51 -0700</delta_ts>
            <desc>Patch Proposal + Unit Tests + Docs</desc>
            <filename>0001-2012-04-20-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>61477</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA1OWYzNTc5MmM0ZjA4MTdhNDNlM2JmYzBhOGIzZjUyY2MyMzhlNzMxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDIwIEFwciAyMDEyIDExOjIzOjM1ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wNC0yMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5QYW5lbCBpbiBX
ZWJLaXQyR1RLKwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODQ5MQoKICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCgogICAgICAgIEFk
ZCBhIG5ldyBwdWJsaWMgY2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
LCB0byBiZQogICAgICAgIGVtaXR0ZWQgYWxvbmcgd2l0aCBhIG5ldyBXZWJLaXRXZWJWaWV3Ojpy
dW4tZmlsZS1jaG9vc2VyIHNpZ25hbCB0bwogICAgICAgIGxldCBjbGllbnQgYXBwbGljYXRpb25z
IHRvIHByb3ZpZGUgdGhlaXIgb3duIGZpbGUgY2hvb3NlciBkaWFsb2cKICAgICAgICB3aGVuIHRo
ZSB1c2UgaW50ZXJhY3RzIHdpdGggSFRNTCBJbnB1dCBlbGVtZW50cyBvZiB0eXBlICdmaWxlJy4K
CiAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHNvdXJjZSBmaWxlcyBhbmQgaGVh
ZGVycy4KICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dC5jcHA6IEFkZGVkLgogICAgICAgIChfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSk6
CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9pbml0KToKICAgICAgICAod2Vi
a2l0RmlsZUNob29zZXJSZXF1ZXN0RmluYWxpemUpOgogICAgICAgICh3ZWJraXRGaWxlQ2hvb3Nl
clJlcXVlc3RHZXRQcm9wZXJ0eSk6CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9jbGFzc19pbml0KToKICAgICAgICAod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKToK
ICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKToKICAg
ICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcik6
CiAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxl
KToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyk6CiAg
ICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMpOgog
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKToKICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oOiBBZGRlZC4KICAgICAg
ICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCk6CiAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RDbGFzcyk6CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3RQcml2YXRlLmg6IEFkZGVkLAogICAgICAgIGNvbnRhaW5pbmcgdGhlIHByb3Rv
dHlwZSBvZiB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUuCgogICAgICAgIFByb3ZpZGUg
cHJpdmF0ZSBBUEkgdG8gbWFrZSBhIGZpbGUgY2hvb3NlciByZXF1ZXN0IGZyb20gdGhlCiAgICAg
ICAgV2ViVmlldywgYW5kIHByb3ZpZGUgYSBkZWZhdWx0IGhhbmRsZXIgZm9yIGl0LgoKICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgogICAgICAgIChmaWxlQ2hv
b3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2spOiBIYW5kbGVyIGZvciB0aGUgJ3Jlc3BvbnNlJwog
ICAgICAgIHNpZ25hbCBmb3IgdGhlIEd0a0ZpbGVDaG9vc2VyRGlhbG9nIHVzZWQgaW4gdGhlIGRl
ZmF1bHQKICAgICAgICBoYW5kbGVyLiBJdCB3aWxsIGNhbGwgdG8gd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X3NlbGVjdF9maWxlcwogICAgICAgIG9yIHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9jYW5jZWwgYXMgbmVlZGVkLgogICAgICAgICh3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29z
ZXIpOiBEZWZhdWx0IGhhbmRsZXIgZm9yIHRoZSBuZXcKICAgICAgICAncnVuLWZpbGUtY2hvb3Nl
cicgc2lnbmFsLiBJdCB3aWxsIGNyZWF0ZSBhIEd0a0ZpbGVDaG9vc2VyRGlhbG9nLAogICAgICAg
IGNvbm5lY3QgdG8gdGhlICdyZXNwb25zZScgc2lnbmFsIGFuZCBzaG93IGl0LgogICAgICAgICh3
ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IENvbm5lY3QgdGhlICdydW4tZmlsZS1jaG9vc2Vy
JwogICAgICAgIHNpZ25hbCB0byB0aGUgZGVmYXVsdCBoYW5kbGVyLCB3ZWJraXRXZWJWaWV3UnVu
RmlsZUNob29zZXIuCiAgICAgICAgKHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3Qp
OgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgogICAgICAgIChf
V2ViS2l0V2ViVmlld0NsYXNzKTogQWRkZWQgcHJvdG90eXBlIGZvciB0aGUgaGFuZGxlciBvZiB0
aGUgbmV3CiAgICAgICAgJ3J1bi1maWxlLWNob29zZXInIHNpZ25hbC4KICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6IEFkZGVkIHByb3RvdHlwZSBmb3IK
ICAgICAgICBwcml2YXRlIG5ldyBmdW5jdGlvbiB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJS
ZXF1ZXN0LgoKICAgICAgICBQcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIGZvciBydW5PcGVuUGFu
ZWwgaW4gV2ViS2l0VUlDbGllbnQuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VUlDbGllbnQuY3BwOgogICAgICAgIChydW5PcGVuUGFuZWwpOiBOZXcsIGltcGxlbWVudHMgcnVu
T3BlblBhbmVsIGJ5IGNyZWF0aW5nIGFuCiAgICAgICAgaW5zdGFuY2Ugb2YgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0IGFuZCBhc2tpbmcgdGhlIFdlYlZpZXcgdG8KICAgICAgICBlbWl0IHRoZSAn
cnVuLWZpbGUtY2hvb3Nlcicgc2lnbmFsIHdpdGggaXQuCiAgICAgICAgKGF0dGFjaFVJQ2xpZW50
VG9WaWV3KTogUmVmZXJlbmNlIHRoZSBuZXcgcnVuT3BlblBhbmVsIGZ1bmN0aW9uLgoKICAgICAg
ICBBZGRlZCB0aGUgbmV3IHB1YmxpY2ggaGVhZGVyIHRvIHRoZSBtYWluIGhlYWRlci4KCiAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6IEFkZGVkIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdC5oLgoKICAgICAgICBOZXcgdW5pdCB0ZXN0cyBmb3IgdGhlIG5ldyBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QgQVBJLiBBbHNvLAogICAgICAgIGV4dGVuZGVkIHRoZSBXZWJWaWV3VGVz
dCBjbGFzcyB0byBhbGxvdyBzaW11bGF0aW5nIG1vdXNlIGNsaWNrcy4KCiAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHA6CiAgICAgICAgKGNoZWNr
TWltZVR5cGVGb3JGaWx0ZXIpOiBOZXcsIGNoZWNrcyB3aGV0aGVyIGEgR3RrRmlsZUZpbHRlcgog
ICAgICAgIGZpbHRlcnMgYSBnaXZlbiBNSU1FIHR5cGUsIGFzIHNwZWNpZmllZCBieSBSRkMgMjA0
Ni4KICAgICAgICAodGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QpOiBOZXcgdW5pdCB0ZXN0
LgogICAgICAgIChiZWZvcmVBbGwpOiBBZGQgdGhlIG5ldyB1bml0IHRlc3QgYXMgYW4gVUlDbGll
bnRUZXN0LgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNw
cDoKICAgICAgICAoV2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24pOiBOZXcgcHVibGljIGZ1
bmN0aW9uIHRvIHNpbXVsYXRlIGEKICAgICAgICBtb3VzZSBjbGljayB0aHJvdWdoIEdka0V2ZW50
cywgYXMgdGhlIGNvbWJpbmF0aW9uIG9mIGEgJ3ByZXNzJyBhbmQKICAgICAgICBhICdyZWxlYXNl
JyBldmVudC4gVXNlZCBmcm9tIHRoZSBuZXcgdW5pdCB0ZXN0IHRvIHNpbXVsYXRlIHRoZQogICAg
ICAgIHVzZXIgcHJlc3NpbmcgaW4gdGhlIGJ1dHRvbiByZW5kZXJlZCBmb3IgYSBIVE1MIElucHV0
IGVsZW1lbnQuCiAgICAgICAgKFdlYlZpZXdUZXN0OjpleGVjdXRlTW91c2VCdXR0b25FdmVudCk6
IE5ldyBwcml2YXRlIGZ1bmN0aW9uIHRvCiAgICAgICAgc2ltdWxhdGUgYSBtb3VzZSBldmVudCB0
aHJvdWdoIEdka0V2ZW50cy4KICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZp
ZXdUZXN0Lmg6CgogICAgICAgIFVwZGF0ZWQgZG9jdW1lbnRhdGlvbiByZWxhdGVkIGZpbGVzIHdp
dGggdGhlIG5ldyBBUEkuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLXNlY3Rpb25zLnR4dDogQWRkZWQgbmV3IEFQSS4KICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6IEFkZGVkIG5ldyBzZWN0aW9uLgogICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGRlZCBnZXRfdHlw
ZSBmdW5jdGlvbi4KCjIwMTItMDQtMjAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBp
Z2FsaWEuY29tPgoKICAgICAgICBbR1RLXSBJbXBsZW1lbnQgV2ViVUlDbGllbnQncyBydW5PcGVu
UGFuZWwgaW4gV2ViS2l0MkdUSysKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzg0OTEKCiAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgoK
ICAgICAgICBIYW5kbGUgdGhlIEdQdHJBcnJheSB0eXBlIGluIEdSZWZQdHIsIGJ5IGNhbGxpbmcg
Z19wdHJfYXJyYXlfcmVmCiAgICAgICAgYW5kIGdfcHRyX2FycmF5X3VucmVmIGluIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgcmVmR1B0ciBhbmQgdGhlCiAgICAgICAgZnJlZU93bmVkR1B0ciB0
ZW1wbGF0ZSBmdW5jdGlvbnMuCgogICAgICAgICogd3RmL2dvYmplY3QvR1JlZlB0ci5jcHA6CiAg
ICAgICAgKFdURjo6cmVmR1B0cik6CiAgICAgICAgKFdURik6CiAgICAgICAgKFdURjo6ZGVyZWZH
UHRyKToKICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuaDoKICAgICAgICAoV1RGKToKICAg
ICAgICAqIHd0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oOgotLS0KIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOSArCiBTb3VyY2UvV1RGL3d0Zi9n
b2JqZWN0L0dSZWZQdHIuY3BwICAgICAgICAgICAgICAgICB8ICAgMTMgKwogU291cmNlL1dURi93
dGYvZ29iamVjdC9HUmVmUHRyLmggICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9X
VEYvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmggICAgICAgICAgICAgICAgIHwgICAgMSArCiBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgODggKysr
KysKIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgNCArCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNw
cCB8ICAzODUgKysrKysrKysrKysrKysrKysrKysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QuaCAgIHwgICA3OCArKysrCiAuLi4vQVBJL2d0ay9XZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmggICAgICB8ICAgMjggKysKIC4uLi9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcCAgIHwgICAxMCArLQogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgfCAgIDgyICsrKysrCiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggICB8ICAgIDUg
Ky0KIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oICAgICAgIHwg
ICAgMSArCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbCAg
ICB8ICAgIDEgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9u
cy50eHQgfCAgIDI0ICsrCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5
cGVzICAgICAgICB8ICAgIDEgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRXZWJWaWV3LmNwcCAgfCAgMTA4ICsrKysrKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1dlYlZpZXdUZXN0LmNwcCAgICAgICAgfCAgIDMyICsrCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oICB8ICAgIDQgKwogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oICAgICAgICAgfCAgICAzICstCiAyMCBmaWxlcyBjaGFu
Z2VkLCA4ODYgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRl
LmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCmluZGV4IDRiNGMxYTguLjA5NDU2ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTItMDQt
MjAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAg
IFtHVEtdIEltcGxlbWVudCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXQyR1RL
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg0OTEK
KworICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCisKKyAgICAgICAgSGFuZGxl
IHRoZSBHUHRyQXJyYXkgdHlwZSBpbiBHUmVmUHRyLCBieSBjYWxsaW5nIGdfcHRyX2FycmF5X3Jl
ZgorICAgICAgICBhbmQgZ19wdHJfYXJyYXlfdW5yZWYgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9m
IHRoZSByZWZHUHRyIGFuZCB0aGUKKyAgICAgICAgZnJlZU93bmVkR1B0ciB0ZW1wbGF0ZSBmdW5j
dGlvbnMuCisKKyAgICAgICAgKiB3dGYvZ29iamVjdC9HUmVmUHRyLmNwcDoKKyAgICAgICAgKFdU
Rjo6cmVmR1B0cik6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHIpOgor
ICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuaDoKKyAgICAgICAgKFdURik6CisgICAgICAg
ICogd3RmL2dvYmplY3QvR1R5cGVkZWZzLmg6CisKIDIwMTItMDQtMTggIE15bGVzIE1heGZpZWxk
ICA8bW1heGZpZWxkQGdvb2dsZS5jb20+CiAKICAgICAgICAgU29tZWhvdywgdGhlcmUncyBhbiBl
cnJhbnQgYmFja3NsYXNoIGluIG15IGxhc3QgV1RGIHBhdGNoCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVm
UHRyLmNwcAppbmRleCAzMGRmMmM5Li4zYTAxNGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9nb2JqZWN0L0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0
ci5jcHAKQEAgLTEwNyw2ICsxMDcsMTkgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1Nv
dXJjZSogcHRyKQogICAgICAgICBnX3NvdXJjZV91bnJlZihwdHIpOwogfQogCit0ZW1wbGF0ZSA8
PiBHUHRyQXJyYXkqIHJlZkdQdHIoR1B0ckFycmF5KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAg
ICAgICAgZ19wdHJfYXJyYXlfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxh
dGUgPD4gdm9pZCBkZXJlZkdQdHIoR1B0ckFycmF5KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAg
ICAgICAgZ19wdHJfYXJyYXlfdW5yZWYocHRyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
ICNlbmRpZiAvLyBFTkFCTEUoR0xJQl9TVVBQT1JUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvZ29iamVjdC9HUmVmUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaApp
bmRleCA5MmFjZmZjLi5mNGZmM2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0
L0dSZWZQdHIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaApAQCAtMjA4
LDYgKzIwOCw4IEBAIHRlbXBsYXRlIDw+IEdWYXJpYW50KiByZWZHUHRyKEdWYXJpYW50KiBwdHIp
OwogdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1ZhcmlhbnQqIHB0cik7CiB0ZW1wbGF0ZSA8
PiBHU291cmNlKiByZWZHUHRyKEdTb3VyY2UqIHB0cik7CiB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVm
R1B0cihHU291cmNlKiBwdHIpOwordGVtcGxhdGUgPD4gR1B0ckFycmF5KiByZWZHUHRyKEdQdHJB
cnJheSopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1B0ckFycmF5Kik7CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogcmVmR1B0cihUKiBwdHIpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oIGIvU291cmNlL1dURi93dGYvZ29i
amVjdC9HVHlwZWRlZnMuaAppbmRleCBlMjkyNTBiLi5kMDE3OTY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmpl
Y3QvR1R5cGVkZWZzLmgKQEAgLTU1LDYgKzU1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dNYWluQ29u
dGV4dCBHTWFpbkNvbnRleHQ7CiB0eXBlZGVmIHN0cnVjdCBfR01haW5Mb29wIEdNYWluTG9vcDsK
IHR5cGVkZWYgc3RydWN0IF9HUGF0dGVyblNwZWMgR1BhdHRlcm5TcGVjOwogdHlwZWRlZiBzdHJ1
Y3QgX0dQb2xsYWJsZU91dHB1dFN0cmVhbSBHUG9sbGFibGVPdXRwdXRTdHJlYW07Cit0eXBlZGVm
IHN0cnVjdCBfR1B0ckFycmF5IEdQdHJBcnJheTsKIHR5cGVkZWYgc3RydWN0IF9HU0xpc3QgR1NM
aXN0OwogdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXRDbGllbnQgR1NvY2tldENsaWVudDsKIHR5cGVk
ZWYgc3RydWN0IF9HU29ja2V0Q29ubmVjdGlvbiBHU29ja2V0Q29ubmVjdGlvbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpp
bmRleCAzMmJkNzkzLi44ZjVlNzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTIt
MDQtMjAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFtHVEtdIEltcGxlbWVudCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXQy
R1RLKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg0
OTEKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCisKKyAgICAgICAgQWRk
IGEgbmV3IHB1YmxpYyBjbGFzcyB0byB0aGUgQVBJLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qs
IHRvIGJlCisgICAgICAgIGVtaXR0ZWQgYWxvbmcgd2l0aCBhIG5ldyBXZWJLaXRXZWJWaWV3Ojpy
dW4tZmlsZS1jaG9vc2VyIHNpZ25hbCB0bworICAgICAgICBsZXQgY2xpZW50IGFwcGxpY2F0aW9u
cyB0byBwcm92aWRlIHRoZWlyIG93biBmaWxlIGNob29zZXIgZGlhbG9nCisgICAgICAgIHdoZW4g
dGhlIHVzZSBpbnRlcmFjdHMgd2l0aCBIVE1MIElucHV0IGVsZW1lbnRzIG9mIHR5cGUgJ2ZpbGUn
LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIG5ldyBzb3VyY2UgZmlsZXMgYW5k
IGhlYWRlcnMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJp
dmF0ZSk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRG
aWxlQ2hvb3NlclJlcXVlc3RHZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRGaWxlQ2hvb3NlclJlcXVl
c3RDcmVhdGUpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90
eXBlc19maWx0ZXIpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9z
ZWxlY3RfbXVsdGlwbGUpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3Nl
bGVjdF9maWxlcyk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Nl
bGVjdGVkX2ZpbGVzKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5j
ZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dC5oOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QpOgorICAgICAg
ICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmg6IEFkZGVkLAorICAgICAg
ICBjb250YWluaW5nIHRoZSBwcm90b3R5cGUgb2Ygd2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3Jl
YXRlLgorCisgICAgICAgIFByb3ZpZGUgcHJpdmF0ZSBBUEkgdG8gbWFrZSBhIGZpbGUgY2hvb3Nl
ciByZXF1ZXN0IGZyb20gdGhlCisgICAgICAgIFdlYlZpZXcsIGFuZCBwcm92aWRlIGEgZGVmYXVs
dCBoYW5kbGVyIGZvciBpdC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuY3BwOgorICAgICAgICAoZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKTog
SGFuZGxlciBmb3IgdGhlICdyZXNwb25zZScKKyAgICAgICAgc2lnbmFsIGZvciB0aGUgR3RrRmls
ZUNob29zZXJEaWFsb2cgdXNlZCBpbiB0aGUgZGVmYXVsdAorICAgICAgICBoYW5kbGVyLiBJdCB3
aWxsIGNhbGwgdG8gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcworICAg
ICAgICBvciB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsIGFzIG5lZWRlZC4KKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nlcik6IERlZmF1bHQgaGFuZGxlciBmb3Ig
dGhlIG5ldworICAgICAgICAncnVuLWZpbGUtY2hvb3Nlcicgc2lnbmFsLiBJdCB3aWxsIGNyZWF0
ZSBhIEd0a0ZpbGVDaG9vc2VyRGlhbG9nLAorICAgICAgICBjb25uZWN0IHRvIHRoZSAncmVzcG9u
c2UnIHNpZ25hbCBhbmQgc2hvdyBpdC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19p
bml0KTogQ29ubmVjdCB0aGUgJ3J1bi1maWxlLWNob29zZXInCisgICAgICAgIHNpZ25hbCB0byB0
aGUgZGVmYXVsdCBoYW5kbGVyLCB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXIuCisgICAgICAg
ICh3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgIChfV2ViS2l0V2ViVmlld0NsYXNz
KTogQWRkZWQgcHJvdG90eXBlIGZvciB0aGUgaGFuZGxlciBvZiB0aGUgbmV3CisgICAgICAgICdy
dW4tZmlsZS1jaG9vc2VyJyBzaWduYWwuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld1ByaXZhdGUuaDogQWRkZWQgcHJvdG90eXBlIGZvcgorICAgICAgICBwcml2YXRl
IG5ldyBmdW5jdGlvbiB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0LgorCisgICAg
ICAgIFByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXRV
SUNsaWVudC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNw
cDoKKyAgICAgICAgKHJ1bk9wZW5QYW5lbCk6IE5ldywgaW1wbGVtZW50cyBydW5PcGVuUGFuZWwg
YnkgY3JlYXRpbmcgYW4KKyAgICAgICAgaW5zdGFuY2Ugb2YgV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0IGFuZCBhc2tpbmcgdGhlIFdlYlZpZXcgdG8KKyAgICAgICAgZW1pdCB0aGUgJ3J1bi1maWxl
LWNob29zZXInIHNpZ25hbCB3aXRoIGl0LgorICAgICAgICAoYXR0YWNoVUlDbGllbnRUb1ZpZXcp
OiBSZWZlcmVuY2UgdGhlIG5ldyBydW5PcGVuUGFuZWwgZnVuY3Rpb24uCisKKyAgICAgICAgQWRk
ZWQgdGhlIG5ldyBwdWJsaWNoIGhlYWRlciB0byB0aGUgbWFpbiBoZWFkZXIuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6IEFkZGVkIFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdC5oLgorCisgICAgICAgIE5ldyB1bml0IHRlc3RzIGZvciB0aGUgbmV3IFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCBBUEkuIEFsc28sCisgICAgICAgIGV4dGVuZGVkIHRoZSBXZWJWaWV3VGVz
dCBjbGFzcyB0byBhbGxvdyBzaW11bGF0aW5nIG1vdXNlIGNsaWNrcy4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKGNo
ZWNrTWltZVR5cGVGb3JGaWx0ZXIpOiBOZXcsIGNoZWNrcyB3aGV0aGVyIGEgR3RrRmlsZUZpbHRl
cgorICAgICAgICBmaWx0ZXJzIGEgZ2l2ZW4gTUlNRSB0eXBlLCBhcyBzcGVjaWZpZWQgYnkgUkZD
IDIwNDYuCisgICAgICAgICh0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdCk6IE5ldyB1bml0
IHRlc3QuCisgICAgICAgIChiZWZvcmVBbGwpOiBBZGQgdGhlIG5ldyB1bml0IHRlc3QgYXMgYW4g
VUlDbGllbnRUZXN0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuY3BwOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24pOiBOZXcg
cHVibGljIGZ1bmN0aW9uIHRvIHNpbXVsYXRlIGEKKyAgICAgICAgbW91c2UgY2xpY2sgdGhyb3Vn
aCBHZGtFdmVudHMsIGFzIHRoZSBjb21iaW5hdGlvbiBvZiBhICdwcmVzcycgYW5kCisgICAgICAg
IGEgJ3JlbGVhc2UnIGV2ZW50LiBVc2VkIGZyb20gdGhlIG5ldyB1bml0IHRlc3QgdG8gc2ltdWxh
dGUgdGhlCisgICAgICAgIHVzZXIgcHJlc3NpbmcgaW4gdGhlIGJ1dHRvbiByZW5kZXJlZCBmb3Ig
YSBIVE1MIElucHV0IGVsZW1lbnQuCisgICAgICAgIChXZWJWaWV3VGVzdDo6ZXhlY3V0ZU1vdXNl
QnV0dG9uRXZlbnQpOiBOZXcgcHJpdmF0ZSBmdW5jdGlvbiB0bworICAgICAgICBzaW11bGF0ZSBh
IG1vdXNlIGV2ZW50IHRocm91Z2ggR2RrRXZlbnRzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1dlYlZpZXdUZXN0Lmg6CisKKyAgICAgICAgVXBkYXRlZCBkb2N1bWVudGF0aW9u
IHJlbGF0ZWQgZmlsZXMgd2l0aCB0aGUgbmV3IEFQSS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6IEFkZGVkIG5ldyBBUEkuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkZWQg
bmV3IHNlY3Rpb24uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LnR5cGVzOiBBZGRlZCBnZXRfdHlwZSBmdW5jdGlvbi4KKwogMjAxMi0wNC0xOCAgSmVyIE5vYmxl
ICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBGdWxsIFNjcmVlbiBtb2RlIGRvZXMg
bm90IHByZXNlcnZlIENBTGF5ZXIgb3JkZXJpbmcgYWZ0ZXIgZXhpdGluZy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUuYW0KaW5kZXggMWRmMTMxMDIuLjAyZGNkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC05
Miw2ICs5Miw3IEBAIGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJJChXZWJLaXQy
KS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEVkaXRpbmdDb21tYW5kcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0SmF2YXNjcmlwdFJlc3VsdC5oIFwKQEAgLTU2Myw2ICs1NjQsOSBAQCB3ZWJraXQy
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVk
aXRpbmdDb21tYW5kcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRFcnJvci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJv
ci5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdC5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZ1bGxzY3JlZW5DbGllbnQuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGdWxsc2NyZWVuQ2xpZW50LmggXAogCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjNiYWE3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwCkBAIC0wLDAgKzEsMzg1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCIKKworI2luY2x1ZGUgIldlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJPcGVuUGFuZWxQYXJhbWV0
ZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8Z2xpYi9n
aTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisvKioK
KyAqIFNFQ1RJT046IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICogQFNob3J0X2Rlc2NyaXB0
aW9uOiBBIHJlcXVlc3QgdG8gb3BlbiBhIGZpbGUgY2hvb3NlcgorICogQFRpdGxlOiBXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QKKyAqIEBTZWVfYWxzbzogI1dlYktpdFdlYlZpZXcKKyAqCisgKiBX
aGVuZXZlciB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBhbiAmbHQ7aW5wdXQgdHlwZT0nZmlsZScg
LyZndDsKKyAqIEhUTUwgZWxlbWVudCwgV2ViS2l0IHdpbGwgbmVlZCB0byBzaG93IGEgZGlhbG9n
IHRvIGNob29zZSBvbmUgb3IKKyAqIG1vcmUgZmlsZXMgdG8gYmUgdXBsb2FkZWQgdG8gdGhlIHNl
cnZlciBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZQorICogZm9ybSBkYXRhLiBGb3IgdGhhdCB0
byBoYXBwZW4gaW4gYSBnZW5lcmFsIHdheSwgaW5zdGVhZCBvZiBqdXN0CisgKiBvcGVuaW5nIGEg
I0d0a0ZpbGVDaG9vc2VyRGlhbG9nICh3aGljaCBtaWdodCBiZSBub3QgZGVzaXJhYmxlIGluCisg
KiBzb21lIGNhc2VzLCB3aGljaCBjb3VsZCBwcmVmZXIgdG8gdXNlIHRoZWlyIG93biBmaWxlIGNo
b29zZXIKKyAqIGRpYWxvZyksIFdlYktpdCB3aWxsIGZpcmUgdGhlICNXZWJLaXRXZWJWaWV3Ojpy
dW4tZmlsZS1jaG9vc2VyCisgKiBzaWduYWwgd2l0aCBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3Qgb2JqZWN0LCB3aGljaCB3aWxsIGFsbG93CisgKiB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHRv
IHNwZWNpZnkgdGhlIGZpbGVzIHRvIGJlIHNlbGVjdGVkLCB0bworICogaW5zcGVjdCB0aGUgZGV0
YWlscyBvZiB0aGUgcmVxdWVzdCAoZS5nLiBpZiBtdWx0aXBsZSBzZWxlY3Rpb24KKyAqIHNob3Vs
ZCBiZSBhbGxvd2VkKSBhbmQgdG8gY2FuY2VsIHRoZSByZXF1ZXN0LCBpbiBjYXNlIG5vdGhpbmcg
d2FzCisgKiBzZWxlY3RlZC4KKyAqCisgKiBJbiBjYXNlIHRoZSBjbGllbnQgYXBwbGljYXRpb24g
ZG9lcyBub3Qgd2lzaCB0byBoYW5kbGUgdGhpcyBzaWduYWwsCisgKiBXZWJLaXQgd2lsbCBwcm92
aWRlIGEgZGVmYXVsdCBoYW5kbGVyIHdoaWNoIHdpbGwgYXN5bmNocm9ub3VzbHkgcnVuCisgKiBh
IHJlZ3VsYXIgI0d0a0ZpbGVDaG9vc2VyRGlhbG9nIGZvciB0aGUgdXNlciB0byBpbnRlcmFjdCB3
aXRoLgorICovCitHX0RFRklORV9UWVBFKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCwgd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNUKQorCitzdHJ1Y3QgX1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgeworICAgIFdLUmV0YWluUHRyPFdLT3BlblBhbmVsUGFy
YW1ldGVyc1JlZj4gd2tQYXJhbWV0ZXJzOworICAgIFdLUmV0YWluUHRyPFdLT3BlblBhbmVsUmVz
dWx0TGlzdGVuZXJSZWY+IHdrTGlzdGVuZXI7CisgICAgR1JlZlB0cjxHdGtGaWxlRmlsdGVyPiBm
aWx0ZXI7CisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IG1pbWVUeXBlczsKKyAgICBHUmVmUHRyPEdQ
dHJBcnJheT4gc2VsZWN0ZWRGaWxlczsKKyAgICBib29sIGhhbmRsZWRSZXF1ZXN0OworfTsKKwor
ZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRklMVEVSLAorICAgIFBST1BfTUlNRV9UWVBF
UywKKyAgICBQUk9QX1NFTEVDVF9NVUxUSVBMRSwKKyAgICBQUk9QX1NFTEVDVEVEX0ZJTEVTLAor
fTsKKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2luaXQoV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIHJlcXVlc3QtPnByaXYgPSBHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUocmVxdWVzdCwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VS
X1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpOworICAgIG5ldyAocmVx
dWVzdC0+cHJpdikgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSgpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNUKG9iamVjdCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHJlcXVlc3Qg
aXMgYWx3YXlzIGhhbmRsZWQgYmVmb3JlIGZpbmFsaXppbmcuCisgICAgaWYgKCFyZXF1ZXN0LT5w
cml2LT5oYW5kbGVkUmVxdWVzdCkKKyAgICAgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2NhbmNlbChyZXF1ZXN0KTsKKworICAgIHJlcXVlc3QtPnByaXYtPn5XZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdEdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7Cisg
ICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hPT1NF
Ul9SRVFVRVNUKG9iamVjdCk7CisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1Bf
RklMVEVSOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTUlNRV9UWVBFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm94
ZWQodmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhyZXF1
ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RfTVVMVElQTEU6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1NFTEVDVEVEX0ZJTEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2YWx1
ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfY2xhc3NfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNz
KQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdEZpbGVDaG9vc2Vy
UmVxdWVzdEZpbmFsaXplOworICAgIG9iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRG
aWxlQ2hvb3NlclJlcXVlc3RHZXRQcm9wZXJ0eTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZh
dGUocmVxdWVzdENsYXNzLCBzaXplb2YoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSkp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OmZpbHRlcjoKKyAg
ICAgKgorICAgICAqIFRoZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVx
dWVzdC4gU2VlCisgICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5
cGVzX2ZpbHRlcigpIGZvciBtb3JlCisgICAgICogZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9GSUxURVIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJmaWx0ZXIiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTUlNRSB0eXBlcyBm
aWx0ZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlRoZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVz
dCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR1RLX1RZUEVfRklMRV9GSUxURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAvKioK
KyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6bWltZS10eXBlczoKKyAgICAgKgorICAg
ICAqIEEgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGxp
c3Qgb2YgTUlNRQorICAgICAqIHR5cGVzIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHNob3VsZCBo
YW5kbGUuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90
eXBlcygpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfTUlNRV9UWVBFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19ib3hlZCgibWltZS10eXBlcyIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJNSU1FIHR5cGVzIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUg
bGlzdCBvZiBNSU1FIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NU
UlYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3Q6c2VsZWN0LW11bHRpcGxlOgorICAgICAqCisgICAgICogV2hldGhlciB0aGUg
ZmlsZSBjaG9vc2VyIHNob3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUKKyAgICAgKiBmaWxl
cy4gU2VlCisgICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVs
dGlwbGUoKSBmb3IKKyAgICAgKiBtb3JlIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBST1BfU0VMRUNUX01VTFRJUExFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oInNlbGVjdC1tdWx0aXBsZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XygiU2VsZWN0IG11bHRpcGxlIGZpbGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiV2hldGhlciB0aGUgZmlsZSBjaG9vc2VyIHNo
b3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6c2Vs
ZWN0ZWQtZmlsZXM6CisgICAgICoKKyAgICAgKiBBICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Yg
c3RyaW5ncyBjb250YWluaW5nIHRoZSBsaXN0IG9mCisgICAgICogc2VsZWN0ZWQgZmlsZXMgYXNz
b2NpYXRlZCB0byB0aGUgY3VycmVudCByZXF1ZXN0LiBTZWUKKyAgICAgKiB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKCkgZm9yIG1vcmUgZGV0YWlscy4KKyAg
ICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TRUxFQ1RFRF9GSUxFUywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCgi
c2VsZWN0ZWQtZmlsZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiU2VsZWN0ZWQgZmlsZXMiKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBsaXN0IG9mIHNlbGVjdGVk
IGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUlYsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKK30KKworV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiB3ZWJraXRGaWxl
Q2hvb3NlclJlcXVlc3RDcmVhdGUoV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHdrUGFyYW1ldGVy
cywgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiB3a0xpc3RlbmVyKQoreworICAgIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVT
VChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIE5VTEwpKTsK
KyAgICByZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMgPSB3a1BhcmFtZXRlcnM7CisgICAgcmVx
dWVzdC0+cHJpdi0+d2tMaXN0ZW5lciA9IHdrTGlzdGVuZXI7CisgICAgcmV0dXJuIHJlcXVlc3Q7
Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVz
OgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIEdldCB0
aGUgbGlzdCBvZiBNSU1FIHR5cGVzIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHNob3VsZCBoYW5k
bGUsCisgKiBpbiB0aGUgZm9ybWF0IHNwZWNpZmllZCBpbiBSRkMgMjA0NiBmb3IgIm1lZGlhIHR5
cGVzIi4gSXRzIGNvbnRlbnRzCisgKiBkZXBlbmQgb24gdGhlIHZhbHVlIG9mIHRoZSAnYWNjZXB0
JyBhdHRyaWJ1dGUgZm9yIEhUTUwgaW5wdXQKKyAqIGVsZW1lbnRzLiBUaGlzIGZ1bmN0aW9uIHNo
b3VsZCBub3JtYWxseSBiZSBjYWxsZWQgYmVmb3JlIHByZXNlbnRpbmcKKyAqIHRoZSBmaWxlIGNo
b29zZXIgZGlhbG9nIHRvIHRoZSB1c2VyLCB0byBkZWNpZGUgd2hldGhlciB0byBhbGxvdyB0aGUK
KyAqIHVzZXIgdG8gc2VsZWN0IG11bHRpcGxlIGZpbGVzIGF0IG9uY2Ugb3Igb25seSBvbmUuCisg
KgorICogUmV0dXJuczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNmZXIgbm9uZSk6
IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBpZiBhIGxpc3Qgb2YgYWNj
ZXB0ZWQgTUlNRSB0eXBlcworICogaXMgZGVmaW5lZCBvciAlTlVMTCBvdGhlcndpc2UsIG1lYW5p
bmcgdGhhdCBhbnkgTUlNRSB0eXBlIHNob3VsZCBiZQorICogYWNjZXB0ZWQuIFRoaXMgYXJyYXkg
YW5kIGl0cyBjb250ZW50cyBhcmUgb3duZWQgYnkgV2ViS2l0R1RLKyBhbmQKKyAqIHNob3VsZCBu
b3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK2NvbnN0IGdjaGFyKiBjb25zdCogd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklM
RV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5t
aW1lVHlwZXMpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVl
c3QtPnByaXYtPm1pbWVUeXBlcy0+cGRhdGEpOworCisgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJl
Zj4gd2tNaW1lVHlwZXMoQWRvcHRXSywgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzQ29weUFjY2VwdGVk
TUlNRVR5cGVzKHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycy5nZXQoKSkpOworICAgIHNpemVf
dCBudW1PZk1pbWVUeXBlcyA9IFdLQXJyYXlHZXRTaXplKHdrTWltZVR5cGVzLmdldCgpKTsKKyAg
ICBpZiAoIW51bU9mTWltZVR5cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlcXVlc3Qt
PnByaXYtPm1pbWVUeXBlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1
bmMoZ19mcmVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBlczsg
KytpKSB7CisgICAgICAgIFdLU3RyaW5nUmVmIHdrTWltZVR5cGUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTWltZVR5cGVzLmdldCgpLCBpKSk7Cisg
ICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHRvSW1wbCh3a01pbWVUeXBlKS0+c3RyaW5n
KCk7CisgICAgICAgIGlmIChtaW1lVHlwZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPm1pbWVUeXBl
cy5nZXQoKSwgZ19zdHJkdXAobWltZVR5cGVTdHJpbmcudXRmOCgpLmRhdGEoKSkpOworICAgIH0K
KyAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzLmdldCgpLCAwKTsK
KworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnByaXYtPm1p
bWVUeXBlcy0+cGRhdGEpOworfQorCisvKioKKyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfbWltZV90eXBlc19maWx0ZXI6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0CisgKgorICogR2V0IHRoZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0
aCB0aGUgcmVxdWVzdCwgcmVhZHkgdG8gYmUKKyAqIHVzZWQgYnkgI0d0a0ZpbGVDaG9vc2VyLiBU
aGlzIGZ1bmN0aW9uIHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQKKyAqIGJlZm9yZSBwcmVzZW50
aW5nIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHRvIHRoZSB1c2VyLCB0byBkZWNpZGUKKyAqIHdo
ZXRoZXIgdG8gYXBwbHkgYSBmaWx0ZXIgc28gdGhlIHVzZXIgd291bGQgbm90IGJlIGFsbG93ZWQg
dG8KKyAqIHNlbGVjdCBmaWxlcyB3aXRoIG90aGVyIE1JTUUgdHlwZXMuCisgKgorICogU2VlIHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcygpIGlmIHlvdSBhcmUKKyAq
IGludGVyZXN0ZWQgaW4gZ2V0dGluZyB0aGUgbGlzdCBvZiBhY2NlcHRlZCBNSU1FIHR5cGVzLgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSAjR3RrRmlsZUZpbHRlciBpZiBhIGxp
c3Qgb2YgYWNjZXB0ZWQKKyAqIE1JTUUgdHlwZXMgaXMgZGVmaW5lZCBvciAlTlVMTCBvdGhlcndp
c2UuIFRoZSByZXR1cm5lZCBvYmplY3QgaXMKKyAqIG93bmVkIGJ5IFdlYktpdEdUSysgc2hvdWxk
IG5vdCBiZSBtb2RpZmllZCBvciBmcmVlZC4KKyAqLworR3RrRmlsZUZpbHRlciogd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKyAgICBpZiAocmVxdWVzdC0+cHJp
di0+ZmlsdGVyKQorICAgICAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdldCgpOwor
CisgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gd2tNaW1lVHlwZXMoQWRvcHRXSywgV0tPcGVu
UGFuZWxQYXJhbWV0ZXJzQ29weUFjY2VwdGVkTUlNRVR5cGVzKHJlcXVlc3QtPnByaXYtPndrUGFy
YW1ldGVycy5nZXQoKSkpOworICAgIHNpemVfdCBudW1PZk1pbWVUeXBlcyA9IFdLQXJyYXlHZXRT
aXplKHdrTWltZVR5cGVzLmdldCgpKTsKKyAgICBpZiAoIW51bU9mTWltZVR5cGVzKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIC8vIERvIG5vdCB1c2UgYWRvcHRHUmVmIGhlcmUsIHNpbmNlIHdl
IHdhbnQgdG8gc2luayB0aGUgZmxvYXRpbmcKKyAgICAvLyByZWZlcmVuY2UgZm9yIHRoZSBuZXcg
aW5zdGFuY2Ugb2YgR3RrRmlsZUZpbHRlciwgc28gd2UgbWFrZQorICAgIC8vIHN1cmUgd2Uga2Vl
cCB0aGUgb3duZXJzaGlwIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhlIHJlcXVlc3QuCisgICAg
cmVxdWVzdC0+cHJpdi0+ZmlsdGVyID0gZ3RrX2ZpbGVfZmlsdGVyX25ldygpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZNaW1lVHlwZXM7ICsraSkgeworICAgICAgICBXS1N0cmlu
Z1JlZiB3a01pbWVUeXBlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVt
QXRJbmRleCh3a01pbWVUeXBlcy5nZXQoKSwgaSkpOworICAgICAgICBTdHJpbmcgbWltZVR5cGVT
dHJpbmcgPSB0b0ltcGwod2tNaW1lVHlwZSktPnN0cmluZygpOworICAgICAgICBpZiAobWltZVR5
cGVTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGd0a19m
aWxlX2ZpbHRlcl9hZGRfbWltZV90eXBlKHJlcXVlc3QtPnByaXYtPmZpbHRlci5nZXQoKSwgbWlt
ZVR5cGVTdHJpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlcXVlc3Qt
PnByaXYtPmZpbHRlci5nZXQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZToKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QKKyAqCisgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZmlsZSBjaG9vc2VyIGFz
c29jaWF0ZWQgdG8gdGhpcworICogI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBzaG91bGQgYWxs
b3cgc2VsZWN0aW5nIG11bHRpcGxlIGZpbGVzLAorICogd2hpY2ggZGVwZW5kcyBvbiB0aGUgSFRN
TCBpbnB1dCBlbGVtZW50IGhhdmluZyBhICdtdWx0aXBsZScKKyAqIGF0dHJpYnV0ZSBkZWZpbmVk
LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBmaWxlIGNob29zZXIgc2hvdWxkIGFsbG93
IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcyBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICovCitnYm9v
bGVhbiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCBGQUxTRSk7CisgICAg
cmV0dXJuIFdLT3BlblBhbmVsUGFyYW1ldGVyc0dldEFsbG93c011bHRpcGxlRmlsZXMocmVxdWVz
dC0+cHJpdi0+d2tQYXJhbWV0ZXJzLmdldCgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdAorICogQGZpbGVzOiAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpICh0cmFu
c2ZlciBub25lKTogYQorICogJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzLCBjb250
YWluaW5nIHBhdGhzIHRvIGxvY2FsIGZpbGVzLgorICoKKyAqIEFzayBXZWJLaXQgdG8gc2VsZWN0
IGxvY2FsIGZpbGVzIGZvciB1cGxvYWQgYW5kIGNvbXBsZXRlIHRoZQorICogcmVxdWVzdC4KKyAq
Lwordm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgY29uc3QgZ2NoYXIqIGNvbnN0KiBmaWxlcykKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1
ZXN0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChmaWxlcyk7CisKKyAgICBHUmVmUHRyPEdQdHJB
cnJheT4gc2VsZWN0ZWRGaWxlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVl
X2Z1bmMoZ19mcmVlKSk7CisgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IHdrQ2hv
c2VuRmlsZXMoQWRvcHRXSywgV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGZpbGVzW2ldOyBpKyspIHsKKyAgICAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZW5hbWUg
PSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChmaWxlc1tpXSkpOworCisgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGUgZmlsZSBwYXRoIGlzIHByZXNlbnRlZCBhcyBhbiBVUkkgKGVzY2FwZWQK
KyAgICAgICAgLy8gc3RyaW5nLCB3aXRoIHRoZSAnZmlsZTovLycgcHJlZml4KSB0byBXZWJDb3Jl
IG90aGVyd2lzZSB0aGUKKyAgICAgICAgLy8gRmlsZUNob29zZXIgd29uJ3QgYWN0dWFsbHkgY2hv
b3NlIGl0LgorICAgICAgICBHT3duUHRyPGNoYXI+IHVyaShnX2ZpbGVfZ2V0X3VyaShmaWxlbmFt
ZS5nZXQoKSkpOworICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkwoQWRvcHRXSywg
V0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcodXJpLmdldCgpKSk7CisgICAgICAgIFdLQXJyYXlB
cHBlbmRJdGVtKHdrQ2hvc2VuRmlsZXMuZ2V0KCksIHdrVVJMLmdldCgpKTsKKworICAgICAgICAv
LyBEbyBub3QgdXNlIHRoZSBVUkkgaGVyZSBiZWNhdXNlIHRoaXMgd29uJ3QgcmVhY2ggV2ViQ29y
ZS4KKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHNlbGVjdGVkRmlsZXMuZ2V0KCksIGdfc3RyZHVw
KGZpbGVzW2ldKSk7CisgICAgfQorICAgIGdfcHRyX2FycmF5X2FkZChzZWxlY3RlZEZpbGVzLmdl
dCgpLCAwKTsKKworICAgIC8vIFNlbGVjdCB0aGUgZmlsZXMgaW4gV2ViQ29yZSBhbmQgdXBkYXRl
IGxvY2FsIHByaXZhdGUgYXR0cmlidXRlcy4KKyAgICBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVy
Q2hvb3NlRmlsZXMocmVxdWVzdC0+cHJpdi0+d2tMaXN0ZW5lci5nZXQoKSwgd2tDaG9zZW5GaWxl
cy5nZXQoKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcyA9IHNlbGVjdGVkRmls
ZXM7CisgICAgcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QgPSB0cnVlOworfQorCisvKioK
KyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXM6CisgKiBA
cmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogR2V0IHRoZSBsaXN0
IG9mIHNlbGVjdGVkIGZpbGVzIGN1cnJlbnRseSBhc3NvY2lhdGVkIHRvIHRoZQorICogcmVxdWVz
dC4gSW5pdGlhbGx5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgbWV0aG9kIGNvbnRhaW5zIGFu
eQorICogZmlsZXMgc2VsZWN0ZWQgaW4gcHJldmlvdXMgZmlsZSBjaG9vc2VyIHJlcXVlc3RzIGZv
ciB0aGlzIEhUTUwKKyAqIGlucHV0IGVsZW1lbnQuIE9uY2Ugd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X3NlbGVjdF9maWxlcywgdGhlCisgKiB2YWx1ZSB3aWxsIHJlZmxlY3Qgd2hhdGV2ZXIg
ZmlsZSBhcmUgZ2l2ZW4uCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm9ybWFsbHkgYmUg
Y2FsbGVkIG9ubHkgYmVmb3JlIHByZXNlbnRpbmcgdGhlCisgKiBmaWxlIGNob29zZXIgZGlhbG9n
IHRvIHRoZSB1c2VyLCB0byBkZWNpZGUgd2hldGhlciB0byBwZXJmb3JtIHNvbWUKKyAqIGV4dHJh
IGFjdGlvbiwgbGlrZSBwcmUtc2VsZWN0aW5nIHRoZSBmaWxlcyBmcm9tIGEgcHJldmlvdXMgcmVx
dWVzdC4KKyAqCisgKiBSZXR1cm5zOiAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpICh0cmFuc2Zl
ciBub25lKTogYQorICogJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGlmIHRoZXJl
IGFyZSBzZWxlY3RlZCBmaWxlcworICogYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IG9yICVO
VUxMIG90aGVyd2lzZS4gVGhpcyBhcnJheSBhbmQgaXRzCisgKiBjb250ZW50cyBhcmUgb3duZWQg
YnkgV2ViS2l0R1RLKyBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBvcgorICogZnJlZWQuCisg
Ki8KK2NvbnN0IGdjaGFyKiBjb25zdCogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9z
ZWxlY3RlZF9maWxlcyhXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVl
c3QpLCAwKTsKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcykKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRG
aWxlcy0+cGRhdGEpOworCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4gc2VsZWN0ZWRGaWxlTmFt
ZXMgPSB0b0ltcGwocmVxdWVzdC0+cHJpdi0+d2tQYXJhbWV0ZXJzLmdldCgpKS0+c2VsZWN0ZWRG
aWxlTmFtZXMoKTsKKyAgICBzaXplX3QgbnVtT2ZGaWxlcyA9IHNlbGVjdGVkRmlsZU5hbWVzLnNp
emUoKTsKKyAgICBpZiAoIW51bU9mRmlsZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVx
dWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0
aF9mcmVlX2Z1bmMoZ19mcmVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZkZp
bGVzOyArK2kpIHsKKyAgICAgICAgaWYgKHNlbGVjdGVkRmlsZU5hbWVzW2ldLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHNlbGVjdGVkRmlsZU5hbWVzW2ldKTsKKyAgICAgICAgZ19wdHJf
YXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMuZ2V0KCksIGdfc3RyZHVwKGZp
bGVuYW1lLmRhdGEoKSkpOworICAgIH0KKyAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJp
di0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgMCk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7Cit9CisKKy8q
KgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbDoKKyAqIEByZXF1ZXN0OiBh
ICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBBc2sgV2ViS2l0IHRvIGNhbmNlbCB0
aGUgcmVxdWVzdC4gSXQncyBpbXBvcnRhbnQgdG8gZG8gdGhpcyBpbiBjYXNlCisgKiBubyBzZWxl
Y3Rpb24gaGFzIGJlZW4gbWFkZSBpbiB0aGUgY2xpZW50LCBvdGhlcndpc2UgdGhlIHJlcXVlc3QK
KyAqIHdvbid0IGJlIHByb3Blcmx5IGNvbXBsZXRlZCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBrZWVw
IHRoZSByZXF1ZXN0CisgKiBwZW5kaW5nIGZvcmV2ZXIsIHdoaWNoIG1pZ2h0IGNhdXNlIHRoZSBi
cm93c2VyIHRvIGhhbmcuCisgKi8KK3ZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nh
bmNlbChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCkpOworICAgIFdL
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXJDYW5jZWwocmVxdWVzdC0+cHJpdi0+d2tMaXN0ZW5lci5n
ZXQoKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QgPSB0cnVlOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGVl
Yzk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURF
X18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtp
dDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5k
ZWYgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0X2gKKyNkZWZpbmUgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0X2gKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNUICAgICAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRklM
RV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCkpCisjZGVmaW5lIFdF
QktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRklMRV9DSE9P
U0VSX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfSVNf
RklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QpKQorI2RlZmluZSBX
RUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCAgICAgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzICAgV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
UHJpdmF0ZSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJp
dmF0ZSA+Ki8KKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlICpwcml2OworfTsK
Kworc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyB7CisgICAgR09iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfdHlwZSAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lU
X0FQSSBjb25zdCBnY2hhciAqIGNvbnN0ICoKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlcyAgICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7
CisKK1dFQktJVF9BUEkgR3RrRmlsZUZpbHRlciAqCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVl
c3QpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X3NlbGVjdF9tdWx0aXBsZSAgIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3Qp
OworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3Rf
ZmlsZXMgICAgICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
ICogY29uc3QgICAgICAqZmlsZXMpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICogY29uc3Qg
Kgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyAgICAoV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsICAgICAgICAgICAgICAgIChXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hZjcyMjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCIK
KyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCog
d2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKFdLT3BlblBhbmVsUGFyYW1ldGVyc1JlZiwg
V0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZik7CisKKyNlbmRpZiAvLyBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3RQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAppbmRleCA2ZjBlMTFjLi45Zjc4YzljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3Bw
CkBAIC0yMCwxMiArMjAsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJL
aXRVSUNsaWVudC5oIgogCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0
ZS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgogI2luY2x1
ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKQEAgLTEzNiw2
ICsxMzgsMTIgQEAgc3RhdGljIHZvaWQgcHJpbnRGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFt
ZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCopCiAgICAgd2Via2l0V2ViVmlld1ByaW50RnJhbWUoV0VC
S0lUX1dFQl9WSUVXKHRvSW1wbChwYWdlKS0+dmlld1dpZGdldCgpKSwgZnJhbWUpOwogfQogCitz
dGF0aWMgdm9pZCBydW5PcGVuUGFuZWwoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUs
IFdLT3BlblBhbmVsUGFyYW1ldGVyc1JlZiBwYXJhbWV0ZXJzLCBXS09wZW5QYW5lbFJlc3VsdExp
c3RlbmVyUmVmIGxpc3RlbmVyLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIEdSZWZQ
dHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdEZp
bGVDaG9vc2VyUmVxdWVzdENyZWF0ZShwYXJhbWV0ZXJzLCBsaXN0ZW5lcikpOworICAgIHdlYmtp
dFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3QoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8p
LCByZXF1ZXN0LmdldCgpKTsKK30KKwogdm9pZCBhdHRhY2hVSUNsaWVudFRvVmlldyhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIFdLUGFnZVVJQ2xpZW50IHdrVUlDbGllbnQgPSB7CkBA
IC0xNjksNyArMTc3LDcgQEAgdm9pZCBhdHRhY2hVSUNsaWVudFRvVmlldyhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogICAgICAgICAwLCAvLyBkaWREcmF3CiAgICAgICAgIDAsIC8vIHBhZ2VEaWRT
Y3JvbGwKICAgICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1b3RhCi0gICAgICAgIDAsIC8v
IHJ1bk9wZW5QYW5lbAorICAgICAgICBydW5PcGVuUGFuZWwsCiAgICAgICAgIDAsIC8vIGRlY2lk
ZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKICAgICAgICAgMCwgLy8gaGVh
ZGVySGVpZ2h0CiAgICAgICAgIDAsIC8vIGZvb3RlckhlaWdodApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCA3YTZjMDFkLi4x
MTNlZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3LmNwcApAQCAtNzQsNiArNzQsOCBAQCBlbnVtIHsKICAgICBFTlRFUl9GVUxMU0NS
RUVOLAogICAgIExFQVZFX0ZVTExTQ1JFRU4sCiAKKyAgICBSVU5fRklMRV9DSE9PU0VSLAorCiAg
ICAgTEFTVF9TSUdOQUwKIH07CiAKQEAgLTIwNiw2ICsyMDgsNDkgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld1NldFNldHRpbmdzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFNldHRp
bmdzKiBzZXQKICAgICBnX3NpZ25hbF9jb25uZWN0KHNldHRpbmdzLCAibm90aWZ5Ojp6b29tLXRl
eHQtb25seSIsIEdfQ0FMTEJBQ0soem9vbVRleHRPbmx5Q2hhbmdlZCksIHdlYlZpZXcpOwogfQog
CitzdGF0aWMgdm9pZCBmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrRGlhbG9n
KiBkaWFsb2csIGdpbnQgcmVzcG9uc2VJRCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1
ZXN0KQoreworICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBhZG9wdGVkUmVx
dWVzdCA9IGFkb3B0R1JlZihyZXF1ZXN0KTsKKyAgICBpZiAocmVzcG9uc2VJRCA9PSBHVEtfUkVT
UE9OU0VfQUNDRVBUKSB7CisgICAgICAgIEdPd25QdHI8R1NMaXN0PiBmaWxlc0xpc3QoZ3RrX2Zp
bGVfY2hvb3Nlcl9nZXRfZmlsZW5hbWVzKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSkpOworICAg
ICAgICBHUmVmUHRyPEdQdHJBcnJheT4gZmlsZXNBcnJheSA9IGFkb3B0R1JlZihnX3B0cl9hcnJh
eV9uZXcoKSk7CisgICAgICAgIGZvciAoR1NMaXN0KiBmaWxlID0gZmlsZXNMaXN0LmdldCgpOyBm
aWxlOyBmaWxlID0gZ19zbGlzdF9uZXh0KGZpbGUpKQorICAgICAgICAgICAgZ19wdHJfYXJyYXlf
YWRkKGZpbGVzQXJyYXkuZ2V0KCksIGZpbGUtPmRhdGEpOworICAgICAgICBnX3B0cl9hcnJheV9h
ZGQoZmlsZXNBcnJheS5nZXQoKSwgMCk7CisgICAgICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9zZWxlY3RfZmlsZXMoYWRvcHRlZFJlcXVlc3QuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgZ2NoYXIqIGNvbnN0Kj4oZmlsZXNBcnJheS0+cGRhdGEpKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChhZG9wdGVkUmVxdWVzdC5n
ZXQoKSk7CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVChkaWFsb2cpKTsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAg
R3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQo
d2ViVmlldykpOworICAgIGlmICghd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHRvcGxl
dmVsKSkKKyAgICAgICAgdG9wbGV2ZWwgPSAwOworCisgICAgZ2Jvb2xlYW4gYWxsb3dzTXVsdGlw
bGVTZWxlY3Rpb24gPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0
aXBsZShyZXF1ZXN0KTsKKyAgICBHdGtXaWRnZXQqIGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJf
ZGlhbG9nX25ldyhhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA/IF8oIlNlbGVjdCBGaWxlcyIpIDog
XygiU2VsZWN0IEZpbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b3BsZXZlbCA/IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9D
SE9PU0VSX0FDVElPTl9PUEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NU
T0NLX09QRU4sIEdUS19SRVNQT05TRV9BQ0NFUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoR3RrRmlsZUZpbHRl
ciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2Zp
bHRlcihyZXF1ZXN0KSkKKyAgICAgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZmlsdGVyKEdUS19G
SUxFX0NIT09TRVIoZGlhbG9nKSwgZmlsdGVyKTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9z
ZWxlY3RfbXVsdGlwbGUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBhbGxvd3NNdWx0aXBsZVNl
bGVjdGlvbik7CisKKyAgICBpZiAoY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KSkK
KyAgICAgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZWxlY3RfZmlsZW5hbWUoR1RLX0ZJTEVfQ0hPT1NF
UihkaWFsb2cpLCBzZWxlY3RlZEZpbGVzWzBdKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZGlh
bG9nLCAicmVzcG9uc2UiLCBHX0NBTExCQUNLKGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxs
YmFjayksIGdfb2JqZWN0X3JlZihyZXF1ZXN0KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGRpYWxv
Zyk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Nv
bnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBpZiAoR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQpAQCAtMzEzLDYgKzM1OCw3
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdD
bGFzcyogd2ViVmlld0NsYXNzKQogICAgIHdlYlZpZXdDbGFzcy0+Y3JlYXRlID0gd2Via2l0V2Vi
Vmlld0NyZWF0ZTsKICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9kaWFsb2cgPSB3ZWJraXRXZWJW
aWV3U2NyaXB0RGlhbG9nOwogICAgIHdlYlZpZXdDbGFzcy0+ZGVjaWRlX3BvbGljeSA9IHdlYmtp
dFdlYlZpZXdEZWNpZGVQb2xpY3k7CisgICAgd2ViVmlld0NsYXNzLT5ydW5fZmlsZV9jaG9vc2Vy
ID0gd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKHdlYlZpZXdDbGFzcywgc2l6ZW9mKFdlYktpdFdlYlZpZXdQcml2YXRlKSk7CiAKQEAg
LTc1Nyw2ICs4MDMsMzYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQo
V2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICAgICAgICAgICBn
X3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAsCiAgICAgICAgICAgICAgICAgICAg
ICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19WT0lELAogICAgICAgICAgICAgICAgICAgICAgR19U
WVBFX0JPT0xFQU4sIDApOworICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpydW4tZmls
ZS1jaG9vc2VyOgorICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNo
IHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiB0
aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBhICZsdDtpbnB1dAorICAgICAqIHR5cGU9J2ZpbGUnIC8m
Z3Q7IEhUTUwgZWxlbWVudCwgcmVxdWVzdGluZyBmcm9tIFdlYktpdCB0byBzaG93CisgICAgICog
YSBkaWFsb2cgdG8gc2VsZWN0IG9uZSBvciBtb3JlIGZpbGVzIHRvIGJlIHVwbG9hZGVkLiBUbyBs
ZXQgdGhlCisgICAgICogYXBwbGljYXRpb24ga25vdyB0aGUgZGV0YWlscyBvZiB0aGUgZmlsZSBj
aG9vc2VyLCBhcyB3ZWxsIGFzIHRvCisgICAgICogYWxsb3cgdGhlIGNsaWVudCBhcHBsaWNhdGlv
biB0byBlaXRoZXIgY2FuY2VsIHRoZSByZXF1ZXN0IG9yCisgICAgICogcGVyZm9ybSBhbiBhY3R1
YWwgc2VsZWN0aW9uIG9mIGZpbGVzLCB0aGUgc2lnbmFsIHdpbGwgcGFzcyBhbgorICAgICAqIGlu
c3RhbmNlIG9mIHRoZSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IGluIHRoZSBAcmVxdWVzdAor
ICAgICAqIGFyZ3VtZW50LgorICAgICAqCisgICAgICogVGhlIGRlZmF1bHQgc2lnbmFsIGhhbmRs
ZXIgd2lsbCBhc3luY2hyb25vdXNseSBydW4gYSByZWd1bGFyCisgICAgICogI0d0a0ZpbGVDaG9v
c2VyRGlhbG9nIGZvciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoLgorICAgICAqCisgICAgICog
UmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQg
Zm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1
cnRoZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBzaWduYWxzW1JVTl9GSUxFX0NIT09TRVJdID0K
KyAgICAgICAgZ19zaWduYWxfbmV3KCJydW4tZmlsZS1jaG9vc2VyIiwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAgICAg
ICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09G
RlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHJ1bl9maWxlX2Nob29zZXIpLAorICAgICAgICAgICAg
ICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCAwIC8qIGFjY3VtdWxh
dG9yIGRhdGEgKi8sCisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFO
X19PQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwgLyogbnVt
YmVyIG9mIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0ZJ
TEVfQ0hPT1NFUl9SRVFVRVNUKTsKIH0KIAogc3RhdGljIGJvb2wgdXBkYXRlUmVwbGFjZUNvbnRl
bnRTdGF0dXMoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVu
dCkKQEAgLTk2NCw2ICsxMDQwLDEyIEBAIGJvb2wgd2Via2l0V2ViVmlld0xlYXZlRnVsbFNjcmVl
bihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHJldHVybiAhcmV0dXJuVmFsdWU7CiB9CiAK
K3ZvaWQgd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ2Jvb2xl
YW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW1JVTl9G
SUxFX0NIT09TRVJdLCAwLCByZXF1ZXN0LCAmcmV0dXJuVmFsdWUpOworfQorCiAvKioKICAqIHdl
YmtpdF93ZWJfdmlld19uZXc6CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IGY1YzIxYzUuLmM1NjIwNWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTMxLDkg
KzMxLDExIEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CiAjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dERlZmluZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5o
PgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmluZENvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdEhpdFRlc3RSZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEph
dmFzY3JpcHRSZXN1bHQuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFBvbGljeURlY2lzaW9u
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTY3JpcHREaWFsb2cuaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdFNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXF1
ZXN0Lmg+CkBAIC00MSw3ICs0Myw2IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJSZXNv
dXJjZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdFBvbGljeURlY2lzaW9uLmg+CiAKIEdfQkVHSU5fREVDTFMKIApAQCAtMTUxLDYgKzE1Miw4
IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYktpdFVSSVJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOwog
ICAgIGdib29sZWFuICAgKCogZW50ZXJfZnVsbHNjcmVlbikgICAgICAoV2ViS2l0V2ViVmlldyAg
ICAgICAgICAgICAqd2ViX3ZpZXcpOwogICAgIGdib29sZWFuICAgKCogbGVhdmVfZnVsbHNjcmVl
bikgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOworICAgIGdib29s
ZWFuICAgKCogcnVuX2ZpbGVfY2hvb3NlcikgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgICpyZXF1ZXN0KTsKIAogICAgIC8qIFBhZGRpbmcgZm9y
IGZ1dHVyZSBleHBhbnNpb24gKi8KICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lk
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3UHJpdmF0ZS5oCmluZGV4IDcwZDZkNmQuLjcxN2QyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaApA
QCAtNDYsNiArNDYsNyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdNYWtlUG9saWN5RGVjaXNpb24oV2Vi
S2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSwgVwogdm9pZCB3ZWJraXRXZWJW
aWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqLCBXS0hpdFRlc3RSZXN1bHRSZWYs
IHVuc2lnbmVkIG1vZGlmaWVycyk7CiB2b2lkIHdlYmtpdFdlYlZpZXdQcmludEZyYW1lKFdlYktp
dFdlYlZpZXcqLCBXS0ZyYW1lUmVmKTsKIHZvaWQgd2Via2l0V2ViVmlld1Jlc291cmNlTG9hZFN0
YXJ0ZWQoV2ViS2l0V2ViVmlldyosIFdLRnJhbWVSZWYsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRp
ZmllciwgV2ViS2l0VVJJUmVxdWVzdCosIGJvb2wgaXNNYWluUmVzb3VyY2UpOwordm9pZCB3ZWJr
aXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqKTsKIFdlYktpdFdlYlJlc291cmNlKiB3ZWJraXRXZWJWaWV3R2V0TG9h
ZGluZ1dlYlJlc291cmNlKFdlYktpdFdlYlZpZXcqLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZp
ZXIpOwogdm9pZCB3ZWJraXRXZWJWaWV3UmVtb3ZlTG9hZGluZ1dlYlJlc291cmNlKFdlYktpdFdl
YlZpZXcqLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpOwogV2ViS2l0V2ViUmVzb3VyY2Uq
IHdlYmtpdFdlYlZpZXdSZXNvdXJjZUxvYWRGaW5pc2hlZChXZWJLaXRXZWJWaWV3KiwgdWludDY0
X3QgcmVzb3VyY2VJZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCmluZGV4IDMyYzcyNTUu
LjgyMTEyN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApAQCAtMjgsNiArMjgsNyBAQAogICAgIDx4
aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRQcmludE9wZXJhdGlvbi54bWwiLz4KICAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0V2ViUmVzb3VyY2UueG1sIi8+CiAgICAgPHhpOmluY2x1
ZGUgaHJlZj0ieG1sL1dlYktpdEVycm9yLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9Inht
bC9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0i
eG1sL1dlYktpdEZpbmRDb250cm9sbGVyLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9Inht
bC9XZWJLaXRDb29raWVNYW5hZ2VyLnhtbCIvPgogICA8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMu
dHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNl
Y3Rpb25zLnR4dAppbmRleCBkYzM4MDk1Li5kYzVlNjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9u
cy50eHQKQEAgLTUyMSw2ICs1MjEsMzAgQEAgd2Via2l0X2phdmFzY3JpcHRfZXJyb3JfcXVhcmsK
IDwvU0VDVElPTj4KIAogPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q8
L0ZJTEU+CitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfbWltZV90eXBlcword2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzX2ZpbHRlcgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVs
dGlwbGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMKK3dlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMKK3dlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9jYW5jZWwKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3RDbGFzcworV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QKK1dFQktJ
VF9GSUxFX0NIT09TRVJfUkVRVUVTVAorV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUCitX
RUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1MKK1dFQktJVF9JU19GSUxFX0NIT09TRVJf
UkVRVUVTVF9DTEFTUworV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0dFVF9DTEFTUworCis8
U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZQord2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9O
PgogPEZJTEU+V2ViS2l0RmluZENvbnRyb2xsZXI8L0ZJTEU+CiBXZWJLaXRGaW5kQ29udHJvbGxl
cgogV2ViS2l0RmluZE9wdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwppbmRleCA0M2FiNGY1Li4xY2E4MjFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGsudHlwZXMKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLnR5cGVzCkBAIC05LDYgKzksNyBAQCB3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF90eXBl
CiB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3R5cGUKIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19n
ZXRfdHlwZQogd2Via2l0X2Rvd25sb2FkX2dldF90eXBlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X3R5cGUKIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3R5cGUKIHdlYmtpdF9z
Y3JpcHRfZGlhbG9nX2dldF90eXBlCiB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3R5cGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAppbmRleCBmNjlmNTI5Li42ZjljNTQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdFdlYlZpZXcuY3BwCkBAIC0yMTgsNiArMjE4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG5ld1dlYlZpZXc7CiAgICAgfQogCisgICAgc3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9v
c2VyKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIFVJ
Q2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVs
ZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworICAgICAgICB0ZXN0LT5t
X2ZpbGVDaG9vc2VyUmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
dGVzdC0+bV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKwogICAgIHZv
aWQgc2NyaXB0QWxlcnQoV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKG1fc2NyaXB0RGlhbG9nVHlwZSkgewpAQCAtMjg1LDYgKzI5Myw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fb3Bl
bl93aW5kb3dzX2F1dG9tYXRpY2FsbHkod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dl
YlZpZXcpLCBUUlVFKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJjcmVh
dGUiLCBHX0NBTExCQUNLKHZpZXdDcmVhdGUpLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX3dlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hv
b3NlciksIHRoaXMpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlw
dC1kaWFsb2ciLCBHX0NBTExCQUNLKHNjcmlwdERpYWxvZyksIHRoaXMpOwogICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fd2ViVmlldywgIm1vdXNlLXRhcmdldC1jaGFuZ2VkIiwgR19DQUxMQkFD
Syhtb3VzZVRhcmdldENoYW5nZWQpLCB0aGlzKTsKICAgICB9CkBAIC0zMTEsMTIgKzMyMCwyMCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdC5nZXQo
KTsKICAgICB9CiAKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIGNsaWNrTW91c2VCdXR0
b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KGludCB4LCBpbnQgeSkKKyAgICB7CisgICAg
ICAgIGNsaWNrTW91c2VCdXR0b24oeCwgeSk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIG1fZmlsZUNob29zZXJSZXF1ZXN0LmdldCgpOworICAg
IH0KKwogICAgIFZlY3RvcjxXZWJWaWV3RXZlbnRzPiBtX3dlYlZpZXdFdmVudHM7CiAgICAgV2Vi
S2l0U2NyaXB0RGlhbG9nVHlwZSBtX3NjcmlwdERpYWxvZ1R5cGU7CiAgICAgYm9vbCBtX3Njcmlw
dERpYWxvZ0NvbmZpcm1lZDsKICAgICBXaW5kb3dQcm9wZXJ0aWVzIG1fd2luZG93UHJvcGVydGll
czsKICAgICBIYXNoU2V0PFdURjo6U3RyaW5nPiBtX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkOwog
ICAgIEdSZWZQdHI8V2ViS2l0SGl0VGVzdFJlc3VsdD4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1
bHQ7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IG1fZmlsZUNob29zZXJS
ZXF1ZXN0OwogICAgIHVuc2lnbmVkIGludCBtX21vdXNlVGFyZ2V0TW9kaWZpZXJzOwogfTsKIApA
QCAtMzMyLDYgKzM0OSw5NiBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xv
c2UoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OkNsb3NlKTsKIH0KIAorc3RhdGljIGdib29s
ZWFuIGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoR3RrRmlsZUZpbHRlciogZmlsdGVyLCBjb25zdCBn
Y2hhciogbWltZVR5cGUpCit7CisgICAgR3RrRmlsZUZpbHRlckluZm8gZmlsdGVySW5mbzsKKyAg
ICBmaWx0ZXJJbmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVSX01JTUVfVFlQRTsKKyAgICBm
aWx0ZXJJbmZvLm1pbWVfdHlwZSA9IG1pbWVUeXBlOworICAgIHJldHVybiBndGtfZmlsZV9maWx0
ZXJfZmlsdGVyKGZpbHRlciwgJmZpbHRlckluZm8pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0ZpbGVDaG9vc2VyUmVxdWVzdChVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGZpbGVDaG9vc2VySFRNTEZvcm1hdCA9ICI8aHRtbD48Ym9keT48aW5w
dXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDttYXJnaW46MDtwYWRkaW5n
OjAnIHR5cGU9J2ZpbGUnICVzLz48L2JvZHk+PC9odG1sPiI7CisKKyAgICAvLyBNdWx0aXBsZSBz
ZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZy4KKyAgICBHT3duUHRyPGNo
YXI+IHNpbXBsZUZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxG
b3JtYXQsICIiKSk7CisgICAgdGVzdC0+bG9hZEh0bWwoc2ltcGxlRmlsZVVwbG9hZEhUTUwuZ2V0
KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1
dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZpbGVDaG9vc2Vy
UmVxdWVzdCkpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsK
KyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKKyAgICBHdGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKGZpbGVDaG9v
c2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7CisgICAgY29uc3QgZ2NoYXIqIGNv
bnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxl
Y3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZp
bGVzKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2Vy
UmVxdWVzdCk7CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIGFsbG93ZWQsIG5vIE1JTUUg
ZmlsdGVyaW5nLCBzb21lIHByZS1zZWxlY3RlZCBmaWxlcy4KKyAgICBHT3duUHRyPGNoYXI+IG11
bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2Vy
SFRNTEZvcm1hdCwgIm11bHRpcGxlIikpOworICAgIHRlc3QtPmxvYWRIdG1sKG11bHRpcGxlU2Vs
ZWN0aW9uRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0
b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZpbGVDaG9vc2VyUmVx
dWVzdCkpOworCisgICAgbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBl
cyk7CisgICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5
cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOwor
ICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmls
ZXMpOworCisgICAgLy8gU2VsZWN0IHNvbWUgZmlsZXMuCisgICAgY29uc3QgZ2NoYXIqIGZpbGVz
VG9TZWxlY3RbNF0gPSB7ICIvZm9vIiwgIi9mb28vYmFyIiwgIi9mb28vYmFyL2JheiIsIDAgfTsK
KyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKGZpbGVDaG9vc2Vy
UmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7CisKKyAgICAvLyBDaGVjayB0aGUgZmlsZXMgdGhhdCBo
YXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwor
ICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3Rl
ZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxl
c1sxXSwgPT0sICIvZm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVz
WzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNd
KTsKKworICAgIC8vIFBlcmZvcm0gYW5vdGhlciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0
IG9mIGZpbGVzIHNlbGVjdGVkCisgICAgLy8gaW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBu
b3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVlc3QuCisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0g
dGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7
CisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2Vs
ZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZEZp
bGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7
CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoi
KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7CisgICAgd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOworCisgICAgLy8gTXVsdGlw
bGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgb25seSBhY2NlcHQgaW1hZ2VzLCBhdWRpbyBhbmQg
dmlkZW8gZmlsZXMuLgorICAgIEdPd25QdHI8Y2hhcj4gbWltZUZpbHRlcmVkRmlsZVVwbG9hZEhU
TUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgImFjY2VwdD0nYXVkaW8v
Kix2aWRlby8qLGltYWdlLyonIikpOworICAgIHRlc3QtPmxvYWRIdG1sKG1pbWVGaWx0ZXJlZEZp
bGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2Fp
dEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJSZXF1ZXN0KSk7
CisKKyAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVf
dHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChtaW1lVHlwZXMpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMF0sID09LCAiYXVkaW8vKiIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihtaW1lVHlwZXNbMV0sID09LCAidmlkZW8vKiIpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihtaW1lVHlwZXNbMl0sID09LCAiaW1hZ2UvKiIpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlw
ZXNbM10pOworCisgICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9t
aW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KEdUS19J
U19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmls
dGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZp
bHRlcihmaWx0ZXIsICJ2aWRlby8qIikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JG
aWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsKKworICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVz
dCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOworICAgIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKK30KKwogc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGh0bWxPbkxvYWRGb3JtYXQgPSAiPGh0
bWw+PGJvZHkgb25Mb2FkPVwiJXNcIj48L2JvZHk+PC9odG1sPiI7CkBAIC01OTAsNiArNjk3LDcg
QEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAic2V0dGluZ3MiLCB0ZXN0V2ViVmlld1NldHRpbmdzKTsKICAgICBXZWJWaWV3VGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgInJlcGxhY2UtY29udGVudCIsIHRlc3RXZWJWaWV3UmVwbGFjZUNv
bnRlbnQpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImNyZWF0ZS1y
ZWFkeS1jbG9zZSIsIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk7CisgICAgVUlDbGllbnRU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZmlsZS1jaG9vc2VyLXJlcXVlc3QiLCB0ZXN0V2Vi
Vmlld0ZpbGVDaG9vc2VyUmVxdWVzdCk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAiamF2YXNjcmlwdC1kaWFsb2dzIiwgdGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9n
cyk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAid2luZG93LXByb3Bl
cnRpZXMiLCB0ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRpZXMpOwogICAgIFVJQ2xpZW50VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm1vdXNlLXRhcmdldCIsIHRlc3RXZWJWaWV3TW91c2VUYXJn
ZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViVmlld1Rlc3QuY3BwCmluZGV4IGQzYzRmZGIuLjdhOWU0OWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKQEAg
LTE5OCw2ICsxOTgsMTIgQEAgdm9pZCBXZWJWaWV3VGVzdDo6bW91c2VNb3ZlVG8oaW50IHgsIGlu
dCB5LCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCiAgICAgZ3RrX21haW5fZG9fZXZlbnQo
ZXZlbnQuZ2V0KCkpOwogfQogCit2b2lkIFdlYlZpZXdUZXN0OjpjbGlja01vdXNlQnV0dG9uKGlu
dCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZp
ZXJzKQoreworICAgIGRvTW91c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1BSRVNTLCB4LCB5LCBi
dXR0b24sIG1vdXNlTW9kaWZpZXJzKTsKKyAgICBkb01vdXNlQnV0dG9uRXZlbnQoR0RLX0JVVFRP
Tl9SRUxFQVNFLCB4LCB5LCBidXR0b24sIG1vdXNlTW9kaWZpZXJzKTsKK30KKwogdm9pZCBXZWJW
aWV3VGVzdDo6a2V5U3Ryb2tlKHVuc2lnbmVkIGludCBrZXlWYWwsIHVuc2lnbmVkIGludCBrZXlN
b2RpZmllcnMpCiB7CiAgICAgZ19hc3NlcnQobV9wYXJlbnRXaW5kb3cpOwpAQCAtMjI0LDYgKzIz
MCwzMiBAQCB2b2lkIFdlYlZpZXdUZXN0OjprZXlTdHJva2UodW5zaWduZWQgaW50IGtleVZhbCwg
dW5zaWduZWQgaW50IGtleU1vZGlmaWVycykKICAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5n
ZXQoKSk7CiB9CiAKK3ZvaWQgV2ViVmlld1Rlc3Q6OmRvTW91c2VCdXR0b25FdmVudChHZGtFdmVu
dFR5cGUgZXZlbnRUeXBlLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2ln
bmVkIGludCBtb3VzZU1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7
CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOworICAg
IGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdP
d25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoZXZlbnRUeXBlKSk7CisgICAgZXZl
bnQtPmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCk7Cisg
ICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsKKworICAgIGV2ZW50LT5idXR0
b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAg
ICBldmVudC0+YnV0dG9uLnkgPSB5OworICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAg
ZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOworICAgIGV2ZW50LT5idXR0b24u
YnV0dG9uID0gYnV0dG9uOworCisgICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNl
X21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdl
cihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7CisKKyAgICBpbnQgeFJvb3Qs
IHlSb290OworICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dp
bmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5idXR0
b24ueF9yb290ID0geFJvb3Q7CisgICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKKyAg
ICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Cit9CisKIHN0YXRpYyB2b2lkIHJ1bkph
dmFTY3JpcHRSZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2Vi
Vmlld1Rlc3QqIHRlc3QpCiB7CiAgICAgdGVzdC0+bV9qYXZhc2NyaXB0UmVzdWx0ID0gd2Via2l0
X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0X2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwg
dGVzdC0+bV9qYXZhc2NyaXB0RXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKaW5kZXggNzIzM2NjZC4uOTJlMTIzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJW
aWV3VGVzdC5oCkBAIC00Nyw2ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dJbldpbmRv
d0FuZFdhaXRVbnRpbE1hcHBlZCgpOwogCiAgICAgdm9pZCBtb3VzZU1vdmVUbyhpbnQgeCwgaW50
IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDApOworICAgIHZvaWQgY2xpY2tNb3Vz
ZUJ1dHRvbihpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24gPSAxLCB1bnNpZ25lZCBp
bnQgbW91c2VNb2RpZmllcnMgPSAwKTsKICAgICB2b2lkIGtleVN0cm9rZSh1bnNpZ25lZCBpbnQg
a2V5VmFsLCB1bnNpZ25lZCBpbnQga2V5TW9kaWZpZXJzID0gMCk7CiAKICAgICBXZWJLaXRKYXZh
c2NyaXB0UmVzdWx0KiBydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hh
ciogamF2YXNjcmlwdCwgR0Vycm9yKiopOwpAQCAtNjUsNiArNjYsOSBAQCBwdWJsaWM6CiAgICAg
Q1N0cmluZyBtX2V4cGVjdGVkVGl0bGU7CiAgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogbV9q
YXZhc2NyaXB0UmVzdWx0OwogICAgIEdFcnJvcioqIG1famF2YXNjcmlwdEVycm9yOworCitwcml2
YXRlOgorICAgIHZvaWQgZG9Nb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlwZSwgaW50LCBpbnQs
IHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIH07CiAKICNlbmRpZiAvLyBXZWJWaWV3VGVz
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXggNWU3
ZjZjYS4uYzU0NjBmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtp
dDIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RWRpdGluZ0Nv
bW1hbmRzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdEVycm9yLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbmRDb250cm9sbGVyLmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+CiAjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRKYXZhc2NyaXB0UmVzdWx0Lmg+CkBAIC00MSw4ICs0Miw4IEBACiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRVUklSZXNwb25zZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
V2ViQ29udGV4dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViUmVzb3VyY2UuaD4KLSNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRXZWJWaWV3Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgogCiAjdW5kZWYgX19X
RUJLSVQyX0hfSU5TSURFX18KLS0gCjEuNy43LjYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138072</attachid>
            <date>2012-04-20 04:59:51 -0700</date>
            <delta_ts>2012-04-23 09:20:09 -0700</delta_ts>
            <desc>Patch Proposal + Unit Tests + Docs</desc>
            <filename>0001-2012-04-20-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>61473</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA1OWYzNTc5MmM0ZjA4MTdhNDNlM2JmYzBhOGIzZjUyY2MyMzhlNzMxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDIwIEFwciAyMDEyIDExOjIzOjM1ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wNC0yMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5QYW5lbCBpbiBX
ZWJLaXQyR1RLKwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODQ5MQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgQWRk
IGEgbmV3IHB1YmxpYyBjbGFzcyB0byB0aGUgQVBJLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qs
IHRvIGJlCiAgICAgICAgZW1pdHRlZCBhbG9uZyB3aXRoIGEgbmV3IFdlYktpdFdlYlZpZXc6OnJ1
bi1maWxlLWNob29zZXIgc2lnbmFsIHRvCiAgICAgICAgbGV0IGNsaWVudCBhcHBsaWNhdGlvbnMg
dG8gcHJvdmlkZSB0aGVpciBvd24gZmlsZSBjaG9vc2VyIGRpYWxvZwogICAgICAgIHdoZW4gdGhl
IHVzZSBpbnRlcmFjdHMgd2l0aCBIVE1MIElucHV0IGVsZW1lbnRzIG9mIHR5cGUgJ2ZpbGUnLgoK
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGRlZCBuZXcgc291cmNlIGZpbGVzIGFuZCBoZWFk
ZXJzLgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
LmNwcDogQWRkZWQuCiAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKToK
ICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2luaXQpOgogICAgICAgICh3ZWJr
aXRGaWxlQ2hvb3NlclJlcXVlc3RGaW5hbGl6ZSk6CiAgICAgICAgKHdlYmtpdEZpbGVDaG9vc2Vy
UmVxdWVzdEdldFByb3BlcnR5KToKICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2NsYXNzX2luaXQpOgogICAgICAgICh3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUpOgog
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMpOgogICAg
ICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKToK
ICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUp
OgogICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKToKICAg
ICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyk6CiAg
ICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwpOgogICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg6IEFkZGVkLgogICAgICAg
IChfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KToKICAgICAgICAoX1dlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdENsYXNzKToKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdFByaXZhdGUuaDogQWRkZWQsCiAgICAgICAgY29udGFpbmluZyB0aGUgcHJvdG90
eXBlIG9mIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdENyZWF0ZS4KCiAgICAgICAgUHJvdmlkZSBw
cml2YXRlIEFQSSB0byBtYWtlIGEgZmlsZSBjaG9vc2VyIHJlcXVlc3QgZnJvbSB0aGUKICAgICAg
ICBXZWJWaWV3LCBhbmQgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlciBmb3IgaXQuCgogICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CiAgICAgICAgKGZpbGVDaG9v
c2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayk6IEhhbmRsZXIgZm9yIHRoZSAncmVzcG9uc2UnCiAg
ICAgICAgc2lnbmFsIGZvciB0aGUgR3RrRmlsZUNob29zZXJEaWFsb2cgdXNlZCBpbiB0aGUgZGVm
YXVsdAogICAgICAgIGhhbmRsZXIuIEl0IHdpbGwgY2FsbCB0byB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3Rfc2VsZWN0X2ZpbGVzCiAgICAgICAgb3Igd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2NhbmNlbCBhcyBuZWVkZWQuCiAgICAgICAgKHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nl
cik6IERlZmF1bHQgaGFuZGxlciBmb3IgdGhlIG5ldwogICAgICAgICdydW4tZmlsZS1jaG9vc2Vy
JyBzaWduYWwuIEl0IHdpbGwgY3JlYXRlIGEgR3RrRmlsZUNob29zZXJEaWFsb2csCiAgICAgICAg
Y29ubmVjdCB0byB0aGUgJ3Jlc3BvbnNlJyBzaWduYWwgYW5kIHNob3cgaXQuCiAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19jbGFzc19pbml0KTogQ29ubmVjdCB0aGUgJ3J1bi1maWxlLWNob29zZXIn
CiAgICAgICAgc2lnbmFsIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIsIHdlYmtpdFdlYlZpZXdSdW5G
aWxlQ2hvb3Nlci4KICAgICAgICAod2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVxdWVzdCk6
CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CiAgICAgICAgKF9X
ZWJLaXRXZWJWaWV3Q2xhc3MpOiBBZGRlZCBwcm90b3R5cGUgZm9yIHRoZSBoYW5kbGVyIG9mIHRo
ZSBuZXcKICAgICAgICAncnVuLWZpbGUtY2hvb3Nlcicgc2lnbmFsLgogICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaDogQWRkZWQgcHJvdG90eXBlIGZvcgog
ICAgICAgIHByaXZhdGUgbmV3IGZ1bmN0aW9uIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJl
cXVlc3QuCgogICAgICAgIFByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJ1bk9wZW5QYW5l
bCBpbiBXZWJLaXRVSUNsaWVudC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRV
SUNsaWVudC5jcHA6CiAgICAgICAgKHJ1bk9wZW5QYW5lbCk6IE5ldywgaW1wbGVtZW50cyBydW5P
cGVuUGFuZWwgYnkgY3JlYXRpbmcgYW4KICAgICAgICBpbnN0YW5jZSBvZiBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QgYW5kIGFza2luZyB0aGUgV2ViVmlldyB0bwogICAgICAgIGVtaXQgdGhlICdy
dW4tZmlsZS1jaG9vc2VyJyBzaWduYWwgd2l0aCBpdC4KICAgICAgICAoYXR0YWNoVUlDbGllbnRU
b1ZpZXcpOiBSZWZlcmVuY2UgdGhlIG5ldyBydW5PcGVuUGFuZWwgZnVuY3Rpb24uCgogICAgICAg
IEFkZGVkIHRoZSBuZXcgcHVibGljaCBoZWFkZXIgdG8gdGhlIG1haW4gaGVhZGVyLgoKICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogQWRkZWQgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0LmguCgogICAgICAgIE5ldyB1bml0IHRlc3RzIGZvciB0aGUgbmV3IFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCBBUEkuIEFsc28sCiAgICAgICAgZXh0ZW5kZWQgdGhlIFdlYlZpZXdUZXN0
IGNsYXNzIHRvIGFsbG93IHNpbXVsYXRpbmcgbW91c2UgY2xpY2tzLgoKICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDoKICAgICAgICAoY2hlY2tN
aW1lVHlwZUZvckZpbHRlcik6IE5ldywgY2hlY2tzIHdoZXRoZXIgYSBHdGtGaWxlRmlsdGVyCiAg
ICAgICAgZmlsdGVycyBhIGdpdmVuIE1JTUUgdHlwZSwgYXMgc3BlY2lmaWVkIGJ5IFJGQyAyMDQ2
LgogICAgICAgICh0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdCk6IE5ldyB1bml0IHRlc3Qu
CiAgICAgICAgKGJlZm9yZUFsbCk6IEFkZCB0aGUgbmV3IHVuaXQgdGVzdCBhcyBhbiBVSUNsaWVu
dFRlc3QuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3Bw
OgogICAgICAgIChXZWJWaWV3VGVzdDo6Y2xpY2tNb3VzZUJ1dHRvbik6IE5ldyBwdWJsaWMgZnVu
Y3Rpb24gdG8gc2ltdWxhdGUgYQogICAgICAgIG1vdXNlIGNsaWNrIHRocm91Z2ggR2RrRXZlbnRz
LCBhcyB0aGUgY29tYmluYXRpb24gb2YgYSAncHJlc3MnIGFuZAogICAgICAgIGEgJ3JlbGVhc2Un
IGV2ZW50LiBVc2VkIGZyb20gdGhlIG5ldyB1bml0IHRlc3QgdG8gc2ltdWxhdGUgdGhlCiAgICAg
ICAgdXNlciBwcmVzc2luZyBpbiB0aGUgYnV0dG9uIHJlbmRlcmVkIGZvciBhIEhUTUwgSW5wdXQg
ZWxlbWVudC4KICAgICAgICAoV2ViVmlld1Rlc3Q6OmV4ZWN1dGVNb3VzZUJ1dHRvbkV2ZW50KTog
TmV3IHByaXZhdGUgZnVuY3Rpb24gdG8KICAgICAgICBzaW11bGF0ZSBhIG1vdXNlIGV2ZW50IHRo
cm91Z2ggR2RrRXZlbnRzLgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuaDoKCiAgICAgICAgVXBkYXRlZCBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgZmlsZXMgd2l0
aCB0aGUgbmV3IEFQSS4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstc2VjdGlvbnMudHh0OiBBZGRlZCBuZXcgQVBJLgogICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkZWQgbmV3IHNlY3Rpb24uCiAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXM6IEFkZGVkIGdldF90eXBl
IGZ1bmN0aW9uLgoKMjAxMi0wNC0yMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGln
YWxpYS5jb20+CgogICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5Q
YW5lbCBpbiBXZWJLaXQyR1RLKwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODQ5MQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAg
ICAgICAgSGFuZGxlIHRoZSBHUHRyQXJyYXkgdHlwZSBpbiBHUmVmUHRyLCBieSBjYWxsaW5nIGdf
cHRyX2FycmF5X3JlZgogICAgICAgIGFuZCBnX3B0cl9hcnJheV91bnJlZiBpbiB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIHJlZkdQdHIgYW5kIHRoZQogICAgICAgIGZyZWVPd25lZEdQdHIgdGVt
cGxhdGUgZnVuY3Rpb25zLgoKICAgICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwOgogICAg
ICAgIChXVEY6OnJlZkdQdHIpOgogICAgICAgIChXVEYpOgogICAgICAgIChXVEY6OmRlcmVmR1B0
cik6CiAgICAgICAgKiB3dGYvZ29iamVjdC9HUmVmUHRyLmg6CiAgICAgICAgKFdURik6CiAgICAg
ICAgKiB3dGYvZ29iamVjdC9HVHlwZWRlZnMuaDoKLS0tCiBTb3VyY2UvV1RGL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTkgKwogU291cmNlL1dURi93dGYvZ29i
amVjdC9HUmVmUHRyLmNwcCAgICAgICAgICAgICAgICAgfCAgIDEzICsKIFNvdXJjZS9XVEYvd3Rm
L2dvYmplY3QvR1JlZlB0ci5oICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oICAgICAgICAgICAgICAgICB8ICAgIDEgKwogU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDg4ICsrKysr
CiBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDQgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAg
fCAgMzg1ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0LmggICB8ICAgNzggKysrKwogLi4uL0FQSS9ndGsvV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oICAgICAgfCAgIDI4ICsrCiAuLi4vV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIHwgICA4MiArKysrKwogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oICAgfCAgICA1ICst
CiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCAgICAgICB8ICAg
IDEgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgICAg
fCAgICAxICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMu
dHh0IHwgICAyNCArKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBl
cyAgICAgICAgfCAgICAxICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViVmlldy5jcHAgIHwgIDEwOCArKysrKysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJWaWV3VGVzdC5jcHAgICAgICAgIHwgICAzMiArKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaCAgfCAgICA0ICsKIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCAgICAgICAgIHwgICAgMyArLQogMjAgZmlsZXMgY2hhbmdl
ZCwgODg2IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5o
CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZwppbmRleCA0YjRjMWE4Li4wOTQ1NmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA0LTIw
ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBb
R1RLXSBJbXBsZW1lbnQgV2ViVUlDbGllbnQncyBydW5PcGVuUGFuZWwgaW4gV2ViS2l0MkdUSysK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NDkxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGFuZGxlIHRo
ZSBHUHRyQXJyYXkgdHlwZSBpbiBHUmVmUHRyLCBieSBjYWxsaW5nIGdfcHRyX2FycmF5X3JlZgor
ICAgICAgICBhbmQgZ19wdHJfYXJyYXlfdW5yZWYgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRo
ZSByZWZHUHRyIGFuZCB0aGUKKyAgICAgICAgZnJlZU93bmVkR1B0ciB0ZW1wbGF0ZSBmdW5jdGlv
bnMuCisKKyAgICAgICAgKiB3dGYvZ29iamVjdC9HUmVmUHRyLmNwcDoKKyAgICAgICAgKFdURjo6
cmVmR1B0cik6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHIpOgorICAg
ICAgICAqIHd0Zi9nb2JqZWN0L0dSZWZQdHIuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgICog
d3RmL2dvYmplY3QvR1R5cGVkZWZzLmg6CisKIDIwMTItMDQtMTggIE15bGVzIE1heGZpZWxkICA8
bW1heGZpZWxkQGdvb2dsZS5jb20+CiAKICAgICAgICAgU29tZWhvdywgdGhlcmUncyBhbiBlcnJh
bnQgYmFja3NsYXNoIGluIG15IGxhc3QgV1RGIHBhdGNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRy
LmNwcAppbmRleCAzMGRmMmM5Li4zYTAxNGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9n
b2JqZWN0L0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5j
cHAKQEAgLTEwNyw2ICsxMDcsMTkgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1NvdXJj
ZSogcHRyKQogICAgICAgICBnX3NvdXJjZV91bnJlZihwdHIpOwogfQogCit0ZW1wbGF0ZSA8PiBH
UHRyQXJyYXkqIHJlZkdQdHIoR1B0ckFycmF5KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAg
ICAgZ19wdHJfYXJyYXlfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUg
PD4gdm9pZCBkZXJlZkdQdHIoR1B0ckFycmF5KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAg
ICAgZ19wdHJfYXJyYXlfdW5yZWYocHRyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNl
bmRpZiAvLyBFTkFCTEUoR0xJQl9TVVBQT1JUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
Z29iamVjdC9HUmVmUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaAppbmRl
eCA5MmFjZmZjLi5mNGZmM2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dS
ZWZQdHIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuaApAQCAtMjA4LDYg
KzIwOCw4IEBAIHRlbXBsYXRlIDw+IEdWYXJpYW50KiByZWZHUHRyKEdWYXJpYW50KiBwdHIpOwog
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1ZhcmlhbnQqIHB0cik7CiB0ZW1wbGF0ZSA8PiBH
U291cmNlKiByZWZHUHRyKEdTb3VyY2UqIHB0cik7CiB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0
cihHU291cmNlKiBwdHIpOwordGVtcGxhdGUgPD4gR1B0ckFycmF5KiByZWZHUHRyKEdQdHJBcnJh
eSopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1B0ckFycmF5Kik7CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogcmVmR1B0cihUKiBwdHIpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oIGIvU291cmNlL1dURi93dGYvZ29iamVj
dC9HVHlwZWRlZnMuaAppbmRleCBlMjkyNTBiLi5kMDE3OTY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3Qv
R1R5cGVkZWZzLmgKQEAgLTU1LDYgKzU1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dNYWluQ29udGV4
dCBHTWFpbkNvbnRleHQ7CiB0eXBlZGVmIHN0cnVjdCBfR01haW5Mb29wIEdNYWluTG9vcDsKIHR5
cGVkZWYgc3RydWN0IF9HUGF0dGVyblNwZWMgR1BhdHRlcm5TcGVjOwogdHlwZWRlZiBzdHJ1Y3Qg
X0dQb2xsYWJsZU91dHB1dFN0cmVhbSBHUG9sbGFibGVPdXRwdXRTdHJlYW07Cit0eXBlZGVmIHN0
cnVjdCBfR1B0ckFycmF5IEdQdHJBcnJheTsKIHR5cGVkZWYgc3RydWN0IF9HU0xpc3QgR1NMaXN0
OwogdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXRDbGllbnQgR1NvY2tldENsaWVudDsKIHR5cGVkZWYg
c3RydWN0IF9HU29ja2V0Q29ubmVjdGlvbiBHU29ja2V0Q29ubmVjdGlvbjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCAzMmJkNzkzLi44ZjVlNzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTItMDQt
MjAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAg
IFtHVEtdIEltcGxlbWVudCBXZWJVSUNsaWVudCdzIHJ1bk9wZW5QYW5lbCBpbiBXZWJLaXQyR1RL
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg0OTEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBu
ZXcgcHVibGljIGNsYXNzIHRvIHRoZSBBUEksIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCwgdG8g
YmUKKyAgICAgICAgZW1pdHRlZCBhbG9uZyB3aXRoIGEgbmV3IFdlYktpdFdlYlZpZXc6OnJ1bi1m
aWxlLWNob29zZXIgc2lnbmFsIHRvCisgICAgICAgIGxldCBjbGllbnQgYXBwbGljYXRpb25zIHRv
IHByb3ZpZGUgdGhlaXIgb3duIGZpbGUgY2hvb3NlciBkaWFsb2cKKyAgICAgICAgd2hlbiB0aGUg
dXNlIGludGVyYWN0cyB3aXRoIEhUTUwgSW5wdXQgZWxlbWVudHMgb2YgdHlwZSAnZmlsZScuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHNvdXJjZSBmaWxlcyBhbmQgaGVh
ZGVycy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRl
KToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9pbml0KToKKyAgICAgICAg
KHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdEZpbGVD
aG9vc2VyUmVxdWVzdEdldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdENy
ZWF0ZSk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlw
ZXMpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVz
X2ZpbHRlcik6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dF9tdWx0aXBsZSk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0
X2ZpbGVzKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0
ZWRfZmlsZXMpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg6
IEFkZGVkLgorICAgICAgICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCk6CisgICAgICAgIChf
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaDogQWRkZWQsCisgICAgICAgIGNv
bnRhaW5pbmcgdGhlIHByb3RvdHlwZSBvZiB3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUu
CisKKyAgICAgICAgUHJvdmlkZSBwcml2YXRlIEFQSSB0byBtYWtlIGEgZmlsZSBjaG9vc2VyIHJl
cXVlc3QgZnJvbSB0aGUKKyAgICAgICAgV2ViVmlldywgYW5kIHByb3ZpZGUgYSBkZWZhdWx0IGhh
bmRsZXIgZm9yIGl0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHA6CisgICAgICAgIChmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2spOiBIYW5k
bGVyIGZvciB0aGUgJ3Jlc3BvbnNlJworICAgICAgICBzaWduYWwgZm9yIHRoZSBHdGtGaWxlQ2hv
b3NlckRpYWxvZyB1c2VkIGluIHRoZSBkZWZhdWx0CisgICAgICAgIGhhbmRsZXIuIEl0IHdpbGwg
Y2FsbCB0byB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzCisgICAgICAg
IG9yIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwgYXMgbmVlZGVkLgorICAgICAg
ICAod2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyKTogRGVmYXVsdCBoYW5kbGVyIGZvciB0aGUg
bmV3CisgICAgICAgICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwuIEl0IHdpbGwgY3JlYXRlIGEg
R3RrRmlsZUNob29zZXJEaWFsb2csCisgICAgICAgIGNvbm5lY3QgdG8gdGhlICdyZXNwb25zZScg
c2lnbmFsIGFuZCBzaG93IGl0LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQp
OiBDb25uZWN0IHRoZSAncnVuLWZpbGUtY2hvb3NlcicKKyAgICAgICAgc2lnbmFsIHRvIHRoZSBk
ZWZhdWx0IGhhbmRsZXIsIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nlci4KKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKF9XZWJLaXRXZWJWaWV3Q2xhc3MpOiBB
ZGRlZCBwcm90b3R5cGUgZm9yIHRoZSBoYW5kbGVyIG9mIHRoZSBuZXcKKyAgICAgICAgJ3J1bi1m
aWxlLWNob29zZXInIHNpZ25hbC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3UHJpdmF0ZS5oOiBBZGRlZCBwcm90b3R5cGUgZm9yCisgICAgICAgIHByaXZhdGUgbmV3
IGZ1bmN0aW9uIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3QuCisKKyAgICAgICAg
UHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcnVuT3BlblBhbmVsIGluIFdlYktpdFVJQ2xp
ZW50LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwOgor
ICAgICAgICAocnVuT3BlblBhbmVsKTogTmV3LCBpbXBsZW1lbnRzIHJ1bk9wZW5QYW5lbCBieSBj
cmVhdGluZyBhbgorICAgICAgICBpbnN0YW5jZSBvZiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qg
YW5kIGFza2luZyB0aGUgV2ViVmlldyB0bworICAgICAgICBlbWl0IHRoZSAncnVuLWZpbGUtY2hv
b3Nlcicgc2lnbmFsIHdpdGggaXQuCisgICAgICAgIChhdHRhY2hVSUNsaWVudFRvVmlldyk6IFJl
ZmVyZW5jZSB0aGUgbmV3IHJ1bk9wZW5QYW5lbCBmdW5jdGlvbi4KKworICAgICAgICBBZGRlZCB0
aGUgbmV3IHB1YmxpY2ggaGVhZGVyIHRvIHRoZSBtYWluIGhlYWRlci4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogQWRkZWQgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
LmguCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgZm9yIHRoZSBuZXcgV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0IEFQSS4gQWxzbywKKyAgICAgICAgZXh0ZW5kZWQgdGhlIFdlYlZpZXdUZXN0IGNs
YXNzIHRvIGFsbG93IHNpbXVsYXRpbmcgbW91c2UgY2xpY2tzLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAoY2hlY2tN
aW1lVHlwZUZvckZpbHRlcik6IE5ldywgY2hlY2tzIHdoZXRoZXIgYSBHdGtGaWxlRmlsdGVyCisg
ICAgICAgIGZpbHRlcnMgYSBnaXZlbiBNSU1FIHR5cGUsIGFzIHNwZWNpZmllZCBieSBSRkMgMjA0
Ni4KKyAgICAgICAgKHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KTogTmV3IHVuaXQgdGVz
dC4KKyAgICAgICAgKGJlZm9yZUFsbCk6IEFkZCB0aGUgbmV3IHVuaXQgdGVzdCBhcyBhbiBVSUNs
aWVudFRlc3QuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5jcHA6CisgICAgICAgIChXZWJWaWV3VGVzdDo6Y2xpY2tNb3VzZUJ1dHRvbik6IE5ldyBwdWJs
aWMgZnVuY3Rpb24gdG8gc2ltdWxhdGUgYQorICAgICAgICBtb3VzZSBjbGljayB0aHJvdWdoIEdk
a0V2ZW50cywgYXMgdGhlIGNvbWJpbmF0aW9uIG9mIGEgJ3ByZXNzJyBhbmQKKyAgICAgICAgYSAn
cmVsZWFzZScgZXZlbnQuIFVzZWQgZnJvbSB0aGUgbmV3IHVuaXQgdGVzdCB0byBzaW11bGF0ZSB0
aGUKKyAgICAgICAgdXNlciBwcmVzc2luZyBpbiB0aGUgYnV0dG9uIHJlbmRlcmVkIGZvciBhIEhU
TUwgSW5wdXQgZWxlbWVudC4KKyAgICAgICAgKFdlYlZpZXdUZXN0OjpleGVjdXRlTW91c2VCdXR0
b25FdmVudCk6IE5ldyBwcml2YXRlIGZ1bmN0aW9uIHRvCisgICAgICAgIHNpbXVsYXRlIGEgbW91
c2UgZXZlbnQgdGhyb3VnaCBHZGtFdmVudHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViVmlld1Rlc3QuaDoKKworICAgICAgICBVcGRhdGVkIGRvY3VtZW50YXRpb24gcmVs
YXRlZCBmaWxlcyB3aXRoIHRoZSBuZXcgQVBJLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkZWQgbmV3IEFQSS4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBuZXcg
c2VjdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlw
ZXM6IEFkZGVkIGdldF90eXBlIGZ1bmN0aW9uLgorCiAyMDEyLTA0LTE4ICBKZXIgTm9ibGUgIDxq
ZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEZ1bGwgU2NyZWVuIG1vZGUgZG9lcyBub3Qg
cHJlc2VydmUgQ0FMYXllciBvcmRlcmluZyBhZnRlciBleGl0aW5nLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5h
bQppbmRleCAxZGYxMzEwMi4uMDJkY2Q2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTkyLDYg
KzkyLDcgQEAgbGlid2Via2l0Mmd0a2luY2x1ZGVfSEVBREVSUyA9IFwKIAkkKFdlYktpdDIpL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEhpdFRlc3RSZXN1bHQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRKYXZhc2NyaXB0UmVzdWx0LmggXApAQCAtNTYzLDYgKzU2NCw5IEBAIHdlYmtpdDJfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RWRpdGlu
Z0NvbW1hbmRzLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVy
cm9yLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNw
cCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RnVsbHNjcmVlbkNsaWVudC5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZ1bGxzY3JlZW5DbGllbnQuaCBcCiAJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5jcHAgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Jh
YTc2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAKQEAgLTAsMCArMSwzODUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIgorCisjaW5jbHVkZSAiV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYk9wZW5QYW5lbFBhcmFtZXRlcnMu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxnbGliL2dpMThu
LWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICog
U0VDVElPTjogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKiBAU2hvcnRfZGVzY3JpcHRpb246
IEEgcmVxdWVzdCB0byBvcGVuIGEgZmlsZSBjaG9vc2VyCisgKiBAVGl0bGU6IFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdAorICogQFNlZV9hbHNvOiAjV2ViS2l0V2ViVmlldworICoKKyAqIFdoZW5l
dmVyIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIGFuICZsdDtpbnB1dCB0eXBlPSdmaWxlJyAvJmd0
OworICogSFRNTCBlbGVtZW50LCBXZWJLaXQgd2lsbCBuZWVkIHRvIHNob3cgYSBkaWFsb2cgdG8g
Y2hvb3NlIG9uZSBvcgorICogbW9yZSBmaWxlcyB0byBiZSB1cGxvYWRlZCB0byB0aGUgc2VydmVy
IGFsb25nIHdpdGggdGhlIHJlc3Qgb2YgdGhlCisgKiBmb3JtIGRhdGEuIEZvciB0aGF0IHRvIGhh
cHBlbiBpbiBhIGdlbmVyYWwgd2F5LCBpbnN0ZWFkIG9mIGp1c3QKKyAqIG9wZW5pbmcgYSAjR3Rr
RmlsZUNob29zZXJEaWFsb2cgKHdoaWNoIG1pZ2h0IGJlIG5vdCBkZXNpcmFibGUgaW4KKyAqIHNv
bWUgY2FzZXMsIHdoaWNoIGNvdWxkIHByZWZlciB0byB1c2UgdGhlaXIgb3duIGZpbGUgY2hvb3Nl
cgorICogZGlhbG9nKSwgV2ViS2l0IHdpbGwgZmlyZSB0aGUgI1dlYktpdFdlYlZpZXc6OnJ1bi1m
aWxlLWNob29zZXIKKyAqIHNpZ25hbCB3aXRoIGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBv
YmplY3QsIHdoaWNoIHdpbGwgYWxsb3cKKyAqIHRoZSBjbGllbnQgYXBwbGljYXRpb24gdG8gc3Bl
Y2lmeSB0aGUgZmlsZXMgdG8gYmUgc2VsZWN0ZWQsIHRvCisgKiBpbnNwZWN0IHRoZSBkZXRhaWxz
IG9mIHRoZSByZXF1ZXN0IChlLmcuIGlmIG11bHRpcGxlIHNlbGVjdGlvbgorICogc2hvdWxkIGJl
IGFsbG93ZWQpIGFuZCB0byBjYW5jZWwgdGhlIHJlcXVlc3QsIGluIGNhc2Ugbm90aGluZyB3YXMK
KyAqIHNlbGVjdGVkLgorICoKKyAqIEluIGNhc2UgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBkb2Vz
IG5vdCB3aXNoIHRvIGhhbmRsZSB0aGlzIHNpZ25hbCwKKyAqIFdlYktpdCB3aWxsIHByb3ZpZGUg
YSBkZWZhdWx0IGhhbmRsZXIgd2hpY2ggd2lsbCBhc3luY2hyb25vdXNseSBydW4KKyAqIGEgcmVn
dWxhciAjR3RrRmlsZUNob29zZXJEaWFsb2cgZm9yIHRoZSB1c2VyIHRvIGludGVyYWN0IHdpdGgu
CisgKi8KK0dfREVGSU5FX1RZUEUoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LCB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBfV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0UHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tPcGVuUGFuZWxQYXJhbWV0
ZXJzUmVmPiB3a1BhcmFtZXRlcnM7CisgICAgV0tSZXRhaW5QdHI8V0tPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lclJlZj4gd2tMaXN0ZW5lcjsKKyAgICBHUmVmUHRyPEd0a0ZpbGVGaWx0ZXI+IGZpbHRl
cjsKKyAgICBHUmVmUHRyPEdQdHJBcnJheT4gbWltZVR5cGVzOworICAgIEdSZWZQdHI8R1B0ckFy
cmF5PiBzZWxlY3RlZEZpbGVzOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7Cit9OworCitlbnVt
IHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9GSUxURVIsCisgICAgUFJPUF9NSU1FX1RZUEVTLAor
ICAgIFBST1BfU0VMRUNUX01VTFRJUExFLAorICAgIFBST1BfU0VMRUNURURfRklMRVMsCit9Owor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdChXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmVxdWVzdC0+cHJpdiA9IEdfVFlQRV9J
TlNUQU5DRV9HRVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVR
VUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSk7CisgICAgbmV3IChyZXF1ZXN0
LT5wcml2KSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdEZpbGVDaG9vc2VyUmVxdWVzdEZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9P
U0VSX1JFUVVFU1Qob2JqZWN0KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpcyBh
bHdheXMgaGFuZGxlZCBiZWZvcmUgZmluYWxpemluZy4KKyAgICBpZiAoIXJlcXVlc3QtPnByaXYt
PmhhbmRsZWRSZXF1ZXN0KQorICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2Fu
Y2VsKHJlcXVlc3QpOworCisgICAgcmVxdWVzdC0+cHJpdi0+fldlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0RmlsZUNob29zZXJSZXF1ZXN0R2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JF
UVVFU1Qob2JqZWN0KTsKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9GSUxU
RVI6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9NSU1FX1RZUEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2
YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3Qp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVF9NVUxUSVBMRToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfU0VMRUNURURfRklMRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKHZhbHVlLCB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9j
bGFzc19pbml0KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7CisgICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0RmlsZUNob29zZXJSZXF1
ZXN0RmluYWxpemU7CisgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdEZpbGVD
aG9vc2VyUmVxdWVzdEdldFByb3BlcnR5OworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShy
ZXF1ZXN0Q2xhc3MsIHNpemVvZihXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKSk7CisK
KyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6ZmlsdGVyOgorICAgICAq
CisgICAgICogVGhlIGZpbHRlciBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0
LiBTZWUKKyAgICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNf
ZmlsdGVyKCkgZm9yIG1vcmUKKyAgICAgKiBkZXRhaWxzLgorICAgICAqLworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUk9QX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoImZpbHRlciIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJNSU1FIHR5cGVzIGZpbHRl
ciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXygiVGhlIGZpbHRlciBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0Iiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VEtfVFlQRV9GSUxFX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgIC8qKgorICAg
ICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDptaW1lLXR5cGVzOgorICAgICAqCisgICAgICog
QSAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUgbGlzdCBv
ZiBNSU1FCisgICAgICogdHlwZXMgdGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgc2hvdWxkIGhhbmRs
ZS4gU2VlCisgICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVz
KCkgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJPUF9NSU1FX1RZUEVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19wYXJhbV9zcGVjX2JveGVkKCJtaW1lLXR5cGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1JTUUgdHlwZXMiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBsaXN0
IG9mIE1JTUUgdHlwZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdDpzZWxlY3QtbXVsdGlwbGU6CisgICAgICoKKyAgICAgKiBXaGV0aGVyIHRoZSBmaWxl
IGNob29zZXIgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZQorICAgICAqIGZpbGVzLiBT
ZWUKKyAgICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBs
ZSgpIGZvcgorICAgICAqIG1vcmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9TRUxFQ1RfTVVMVElQTEUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigic2VsZWN0LW11bHRpcGxlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJT
ZWxlY3QgbXVsdGlwbGUgZmlsZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJXaGV0aGVyIHRoZSBmaWxlIGNob29zZXIgc2hvdWxk
IGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpzZWxlY3Rl
ZC1maWxlczoKKyAgICAgKgorICAgICAqIEEgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJp
bmdzIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YKKyAgICAgKiBzZWxlY3RlZCBmaWxlcyBhc3NvY2lh
dGVkIHRvIHRoZSBjdXJyZW50IHJlcXVlc3QuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoKSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAq
LworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NFTEVDVEVEX0ZJTEVTLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2JveGVkKCJzZWxl
Y3RlZC1maWxlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJTZWxlY3RlZCBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgZmls
ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworfQorCitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHdlYmtpdEZpbGVDaG9v
c2VyUmVxdWVzdENyZWF0ZShXS09wZW5QYW5lbFBhcmFtZXRlcnNSZWYgd2tQYXJhbWV0ZXJzLCBX
S09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIHdrTGlzdGVuZXIpCit7CisgICAgV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgTlVMTCkpOworICAg
IHJlcXVlc3QtPnByaXYtPndrUGFyYW1ldGVycyA9IHdrUGFyYW1ldGVyczsKKyAgICByZXF1ZXN0
LT5wcml2LT53a0xpc3RlbmVyID0gd2tMaXN0ZW5lcjsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30K
KworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXM6Cisg
KiBAcmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogR2V0IHRoZSBs
aXN0IG9mIE1JTUUgdHlwZXMgdGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgc2hvdWxkIGhhbmRsZSwK
KyAqIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGluIFJGQyAyMDQ2IGZvciAibWVkaWEgdHlwZXMi
LiBJdHMgY29udGVudHMKKyAqIGRlcGVuZCBvbiB0aGUgdmFsdWUgb2YgdGhlICdhY2NlcHQnIGF0
dHJpYnV0ZSBmb3IgSFRNTCBpbnB1dAorICogZWxlbWVudHMuIFRoaXMgZnVuY3Rpb24gc2hvdWxk
IG5vcm1hbGx5IGJlIGNhbGxlZCBiZWZvcmUgcHJlc2VudGluZworICogdGhlIGZpbGUgY2hvb3Nl
ciBkaWFsb2cgdG8gdGhlIHVzZXIsIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGFsbG93IHRoZQorICog
dXNlciB0byBzZWxlY3QgbXVsdGlwbGUgZmlsZXMgYXQgb25jZSBvciBvbmx5IG9uZS4KKyAqCisg
KiBSZXR1cm5zOiAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpICh0cmFuc2ZlciBub25lKTogYQor
ICogJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGlmIGEgbGlzdCBvZiBhY2NlcHRl
ZCBNSU1FIHR5cGVzCisgKiBpcyBkZWZpbmVkIG9yICVOVUxMIG90aGVyd2lzZSwgbWVhbmluZyB0
aGF0IGFueSBNSU1FIHR5cGUgc2hvdWxkIGJlCisgKiBhY2NlcHRlZC4gVGhpcyBhcnJheSBhbmQg
aXRzIGNvbnRlbnRzIGFyZSBvd25lZCBieSBXZWJLaXRHVEsrIGFuZAorICogc2hvdWxkIG5vdCBi
ZSBtb2RpZmllZCBvciBmcmVlZC4KKyAqLworY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NI
T09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisgICAgaWYgKHJlcXVlc3QtPnByaXYtPm1pbWVU
eXBlcykKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVxdWVzdC0+
cHJpdi0+bWltZVR5cGVzLT5wZGF0YSk7CisKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiB3
a01pbWVUeXBlcyhBZG9wdFdLLCBXS09wZW5QYW5lbFBhcmFtZXRlcnNDb3B5QWNjZXB0ZWRNSU1F
VHlwZXMocmVxdWVzdC0+cHJpdi0+d2tQYXJhbWV0ZXJzLmdldCgpKSk7CisgICAgc2l6ZV90IG51
bU9mTWltZVR5cGVzID0gV0tBcnJheUdldFNpemUod2tNaW1lVHlwZXMuZ2V0KCkpOworICAgIGlm
ICghbnVtT2ZNaW1lVHlwZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVxdWVzdC0+cHJp
di0+bWltZVR5cGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhn
X2ZyZWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mTWltZVR5cGVzOyArK2kp
IHsKKyAgICAgICAgV0tTdHJpbmdSZWYgd2tNaW1lVHlwZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tNaW1lVHlwZXMuZ2V0KCksIGkpKTsKKyAgICAg
ICAgU3RyaW5nIG1pbWVUeXBlU3RyaW5nID0gdG9JbXBsKHdrTWltZVR5cGUpLT5zdHJpbmcoKTsK
KyAgICAgICAgaWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzLmdl
dCgpLCBnX3N0cmR1cChtaW1lVHlwZVN0cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgfQorICAg
IGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMuZ2V0KCksIDApOworCisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVxdWVzdC0+cHJpdi0+bWltZVR5
cGVzLT5wZGF0YSk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9taW1lX3R5cGVzX2ZpbHRlcjoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QKKyAqCisgKiBHZXQgdGhlIGZpbHRlciBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRo
ZSByZXF1ZXN0LCByZWFkeSB0byBiZQorICogdXNlZCBieSAjR3RrRmlsZUNob29zZXIuIFRoaXMg
ZnVuY3Rpb24gc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZAorICogYmVmb3JlIHByZXNlbnRpbmcg
dGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgdG8gdGhlIHVzZXIsIHRvIGRlY2lkZQorICogd2hldGhl
ciB0byBhcHBseSBhIGZpbHRlciBzbyB0aGUgdXNlciB3b3VsZCBub3QgYmUgYWxsb3dlZCB0bwor
ICogc2VsZWN0IGZpbGVzIHdpdGggb3RoZXIgTUlNRSB0eXBlcy4KKyAqCisgKiBTZWUgd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKCkgaWYgeW91IGFyZQorICogaW50
ZXJlc3RlZCBpbiBnZXR0aW5nIHRoZSBsaXN0IG9mIGFjY2VwdGVkIE1JTUUgdHlwZXMuCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNHdGtGaWxlRmlsdGVyIGlmIGEgbGlzdCBv
ZiBhY2NlcHRlZAorICogTUlNRSB0eXBlcyBpcyBkZWZpbmVkIG9yICVOVUxMIG90aGVyd2lzZS4g
VGhlIHJldHVybmVkIG9iamVjdCBpcworICogb3duZWQgYnkgV2ViS2l0R1RLKyBzaG91bGQgbm90
IGJlIG1vZGlmaWVkIG9yIGZyZWVkLgorICovCitHdGtGaWxlRmlsdGVyKiB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklM
RV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5m
aWx0ZXIpCisgICAgICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCk7CisKKyAg
ICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiB3a01pbWVUeXBlcyhBZG9wdFdLLCBXS09wZW5QYW5l
bFBhcmFtZXRlcnNDb3B5QWNjZXB0ZWRNSU1FVHlwZXMocmVxdWVzdC0+cHJpdi0+d2tQYXJhbWV0
ZXJzLmdldCgpKSk7CisgICAgc2l6ZV90IG51bU9mTWltZVR5cGVzID0gV0tBcnJheUdldFNpemUo
d2tNaW1lVHlwZXMuZ2V0KCkpOworICAgIGlmICghbnVtT2ZNaW1lVHlwZXMpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLy8gRG8gbm90IHVzZSBhZG9wdEdSZWYgaGVyZSwgc2luY2Ugd2Ugd2Fu
dCB0byBzaW5rIHRoZSBmbG9hdGluZworICAgIC8vIHJlZmVyZW5jZSBmb3IgdGhlIG5ldyBpbnN0
YW5jZSBvZiBHdGtGaWxlRmlsdGVyLCBzbyB3ZSBtYWtlCisgICAgLy8gc3VyZSB3ZSBrZWVwIHRo
ZSBvd25lcnNoaXAgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgcmVxdWVzdC4KKyAgICByZXF1
ZXN0LT5wcml2LT5maWx0ZXIgPSBndGtfZmlsZV9maWx0ZXJfbmV3KCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBlczsgKytpKSB7CisgICAgICAgIFdLU3RyaW5nUmVm
IHdrTWltZVR5cGUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdElu
ZGV4KHdrTWltZVR5cGVzLmdldCgpLCBpKSk7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmlu
ZyA9IHRvSW1wbCh3a01pbWVUeXBlKS0+c3RyaW5nKCk7CisgICAgICAgIGlmIChtaW1lVHlwZVN0
cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZ3RrX2ZpbGVf
ZmlsdGVyX2FkZF9taW1lX3R5cGUocmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdldCgpLCBtaW1lVHlw
ZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJp
di0+ZmlsdGVyLmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfc2VsZWN0X211bHRpcGxlOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdAorICoKKyAqIERldGVybWluZSB3aGV0aGVyIHRoZSBmaWxlIGNob29zZXIgYXNzb2Np
YXRlZCB0byB0aGlzCisgKiAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHNob3VsZCBhbGxvdyBz
ZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMsCisgKiB3aGljaCBkZXBlbmRzIG9uIHRoZSBIVE1MIGlu
cHV0IGVsZW1lbnQgaGF2aW5nIGEgJ211bHRpcGxlJworICogYXR0cmlidXRlIGRlZmluZWQuCisg
KgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGZpbGUgY2hvb3NlciBzaG91bGQgYWxsb3cgc2Vs
ZWN0aW5nIG11bHRpcGxlIGZpbGVzIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKi8KK2dib29sZWFu
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIEZBTFNFKTsKKyAgICByZXR1
cm4gV0tPcGVuUGFuZWxQYXJhbWV0ZXJzR2V0QWxsb3dzTXVsdGlwbGVGaWxlcyhyZXF1ZXN0LT5w
cml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpOworfQorCisvKioKKyAqIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXM6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0CisgKiBAZmlsZXM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVy
IG5vbmUpOiBhCisgKiAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MsIGNvbnRhaW5p
bmcgcGF0aHMgdG8gbG9jYWwgZmlsZXMuCisgKgorICogQXNrIFdlYktpdCB0byBzZWxlY3QgbG9j
YWwgZmlsZXMgZm9yIHVwbG9hZCBhbmQgY29tcGxldGUgdGhlCisgKiByZXF1ZXN0LgorICovCit2
b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMoV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBnY2hhciogY29uc3QqIGZpbGVzKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3Qp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGZpbGVzKTsKKworICAgIEdSZWZQdHI8R1B0ckFycmF5
PiBzZWxlY3RlZEZpbGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVu
YyhnX2ZyZWUpKTsKKyAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gd2tDaG9zZW5G
aWxlcyhBZG9wdFdLLCBXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBmb3IgKGludCBpID0g
MDsgZmlsZXNbaV07IGkrKykgeworICAgICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlbmFtZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVzW2ldKSk7CisKKyAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoZSBmaWxlIHBhdGggaXMgcHJlc2VudGVkIGFzIGFuIFVSSSAoZXNjYXBlZAorICAg
ICAgICAvLyBzdHJpbmcsIHdpdGggdGhlICdmaWxlOi8vJyBwcmVmaXgpIHRvIFdlYkNvcmUgb3Ro
ZXJ3aXNlIHRoZQorICAgICAgICAvLyBGaWxlQ2hvb3NlciB3b24ndCBhY3R1YWxseSBjaG9vc2Ug
aXQuCisgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpKGdfZmlsZV9nZXRfdXJpKGZpbGVuYW1lLmdl
dCgpKSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTChBZG9wdFdLLCBXS1VS
TENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1cmkuZ2V0KCkpKTsKKyAgICAgICAgV0tBcnJheUFwcGVu
ZEl0ZW0od2tDaG9zZW5GaWxlcy5nZXQoKSwgd2tVUkwuZ2V0KCkpOworCisgICAgICAgIC8vIERv
IG5vdCB1c2UgdGhlIFVSSSBoZXJlIGJlY2F1c2UgdGhpcyB3b24ndCByZWFjaCBXZWJDb3JlLgor
ICAgICAgICBnX3B0cl9hcnJheV9hZGQoc2VsZWN0ZWRGaWxlcy5nZXQoKSwgZ19zdHJkdXAoZmls
ZXNbaV0pKTsKKyAgICB9CisgICAgZ19wdHJfYXJyYXlfYWRkKHNlbGVjdGVkRmlsZXMuZ2V0KCks
IDApOworCisgICAgLy8gU2VsZWN0IHRoZSBmaWxlcyBpbiBXZWJDb3JlIGFuZCB1cGRhdGUgbG9j
YWwgcHJpdmF0ZSBhdHRyaWJ1dGVzLgorICAgIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJDaG9v
c2VGaWxlcyhyZXF1ZXN0LT5wcml2LT53a0xpc3RlbmVyLmdldCgpLCB3a0Nob3NlbkZpbGVzLmdl
dCgpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzID0gc2VsZWN0ZWRGaWxlczsK
KyAgICByZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7Cit9CisKKy8qKgorICog
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlczoKKyAqIEByZXF1
ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGxpc3Qgb2Yg
c2VsZWN0ZWQgZmlsZXMgY3VycmVudGx5IGFzc29jaWF0ZWQgdG8gdGhlCisgKiByZXF1ZXN0LiBJ
bml0aWFsbHksIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBtZXRob2QgY29udGFpbnMgYW55Cisg
KiBmaWxlcyBzZWxlY3RlZCBpbiBwcmV2aW91cyBmaWxlIGNob29zZXIgcmVxdWVzdHMgZm9yIHRo
aXMgSFRNTAorICogaW5wdXQgZWxlbWVudC4gT25jZSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3Rfc2VsZWN0X2ZpbGVzLCB0aGUKKyAqIHZhbHVlIHdpbGwgcmVmbGVjdCB3aGF0ZXZlciBmaWxl
IGFyZSBnaXZlbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3JtYWxseSBiZSBjYWxs
ZWQgb25seSBiZWZvcmUgcHJlc2VudGluZyB0aGUKKyAqIGZpbGUgY2hvb3NlciBkaWFsb2cgdG8g
dGhlIHVzZXIsIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHBlcmZvcm0gc29tZQorICogZXh0cmEgYWN0
aW9uLCBsaWtlIHByZS1zZWxlY3RpbmcgdGhlIGZpbGVzIGZyb20gYSBwcmV2aW91cyByZXF1ZXN0
LgorICoKKyAqIFJldHVybnM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVyIG5v
bmUpOiBhCisgKiAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MgaWYgdGhlcmUgYXJl
IHNlbGVjdGVkIGZpbGVzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3Qgb3IgJU5VTEwg
b3RoZXJ3aXNlLiBUaGlzIGFycmF5IGFuZCBpdHMKKyAqIGNvbnRlbnRzIGFyZSBvd25lZCBieSBX
ZWJLaXRHVEsrIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIG9yCisgKiBmcmVlZC4KKyAqLwor
Y29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dGVkX2ZpbGVzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCks
IDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzKQorICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVz
LT5wZGF0YSk7CisKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiBzZWxlY3RlZEZpbGVOYW1lcyA9
IHRvSW1wbChyZXF1ZXN0LT5wcml2LT53a1BhcmFtZXRlcnMuZ2V0KCkpLT5zZWxlY3RlZEZpbGVO
YW1lcygpOworICAgIHNpemVfdCBudW1PZkZpbGVzID0gc2VsZWN0ZWRGaWxlTmFtZXMuc2l6ZSgp
OworICAgIGlmICghbnVtT2ZGaWxlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXF1ZXN0
LT5wcml2LT5zZWxlY3RlZEZpbGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2Zy
ZWVfZnVuYyhnX2ZyZWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mRmlsZXM7
ICsraSkgeworICAgICAgICBpZiAoc2VsZWN0ZWRGaWxlTmFtZXNbaV0uaXNFbXB0eSgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24oc2VsZWN0ZWRGaWxlTmFtZXNbaV0pOworICAgICAgICBnX3B0cl9hcnJh
eV9hZGQocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgZ19zdHJkdXAoZmlsZW5h
bWUuZGF0YSgpKSk7CisgICAgfQorICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5z
ZWxlY3RlZEZpbGVzLmdldCgpLCAwKTsKKworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdj
aGFyKio+KHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMtPnBkYXRhKTsKK30KKworLyoqCisg
KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsOgorICogQHJlcXVlc3Q6IGEgI1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIEFzayBXZWJLaXQgdG8gY2FuY2VsIHRoZSBy
ZXF1ZXN0LiBJdCdzIGltcG9ydGFudCB0byBkbyB0aGlzIGluIGNhc2UKKyAqIG5vIHNlbGVjdGlv
biBoYXMgYmVlbiBtYWRlIGluIHRoZSBjbGllbnQsIG90aGVyd2lzZSB0aGUgcmVxdWVzdAorICog
d29uJ3QgYmUgcHJvcGVybHkgY29tcGxldGVkIGFuZCB0aGUgYnJvd3NlciB3aWxsIGtlZXAgdGhl
IHJlcXVlc3QKKyAqIHBlbmRpbmcgZm9yZXZlciwgd2hpY2ggbWlnaHQgY2F1c2UgdGhlIGJyb3dz
ZXIgdG8gaGFuZy4KKyAqLwordm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2Vs
KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgV0tPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lckNhbmNlbChyZXF1ZXN0LT5wcml2LT53a0xpc3RlbmVyLmdldCgp
KTsKKyAgICByZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZWVjOTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93
ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RfaAorI2RlZmluZSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3RfaAorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVm
aW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRklMRV9DSE9P
U0VSX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90
eXBlKCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9GSUxFX0NI
T09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lU
X0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19GSUxFX0NIT09TRVJf
UkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9JU19GSUxF
X0NIT09TRVJfUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJ
VF9GSUxFX0NIT09TRVJfUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0ICAgICAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MgICBXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2
YXRlIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRl
ID4qLworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitz
dHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF90eXBlICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJ
IGNvbnN0IGdjaGFyICogY29uc3QgKgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9t
aW1lX3R5cGVzICAgICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKwor
V0VCS0lUX0FQSSBHdGtGaWxlRmlsdGVyICoKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlc19maWx0ZXIgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7
CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
c2VsZWN0X211bHRpcGxlICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisK
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxl
cyAgICAgICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBj
b25zdCAgICAgICpmaWxlcyk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKiBjb25zdCAqCit3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzICAgIChXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwgICAgICAgICAgICAgICAgKFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmFmNzIyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgKQEAgLTAsMCArMSwyOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3RQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKworV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiB3ZWJr
aXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUoV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmLCBXS09w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmKTsKKworI2VuZGlmIC8vIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0VUlDbGllbnQuY3BwCmluZGV4IDZmMGUxMWMuLjlmNzhjOWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKQEAg
LTIwLDEyICsyMCwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdFVJ
Q2xpZW50LmgiCiAKKyNpbmNsdWRlICJXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2YXRlLmgiCiAjaW5jbHVkZSAi
V2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIApAQCAtMTM2LDYgKzEz
OCwxMiBAQCBzdGF0aWMgdm9pZCBwcmludEZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVm
IGZyYW1lLCBjb25zdCB2b2lkKikKICAgICB3ZWJraXRXZWJWaWV3UHJpbnRGcmFtZShXRUJLSVRf
V0VCX1ZJRVcodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpLCBmcmFtZSk7CiB9CiAKK3N0YXRp
YyB2b2lkIHJ1bk9wZW5QYW5lbChXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tP
cGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHBhcmFtZXRlcnMsIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVu
ZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgR1JlZlB0cjxX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0RmlsZUNo
b29zZXJSZXF1ZXN0Q3JlYXRlKHBhcmFtZXRlcnMsIGxpc3RlbmVyKSk7CisgICAgd2Via2l0V2Vi
Vmlld1J1bkZpbGVDaG9vc2VyUmVxdWVzdChXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIHJl
cXVlc3QuZ2V0KCkpOworfQorCiB2b2lkIGF0dGFjaFVJQ2xpZW50VG9WaWV3KFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCiB7CiAgICAgV0tQYWdlVUlDbGllbnQgd2tVSUNsaWVudCA9IHsKQEAgLTE2
OSw3ICsxNzcsNyBAQCB2b2lkIGF0dGFjaFVJQ2xpZW50VG9WaWV3KFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCiAgICAgICAgIDAsIC8vIGRpZERyYXcKICAgICAgICAgMCwgLy8gcGFnZURpZFNjcm9s
bAogICAgICAgICAwLCAvLyBleGNlZWRlZERhdGFiYXNlUXVvdGEKLSAgICAgICAgMCwgLy8gcnVu
T3BlblBhbmVsCisgICAgICAgIHJ1bk9wZW5QYW5lbCwKICAgICAgICAgMCwgLy8gZGVjaWRlUG9s
aWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdAogICAgICAgICAwLCAvLyBoZWFkZXJI
ZWlnaHQKICAgICAgICAgMCwgLy8gZm9vdGVySGVpZ2h0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDdhNmMwMWQuLjExM2Vl
ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuY3BwCkBAIC03NCw2ICs3NCw4IEBAIGVudW0gewogICAgIEVOVEVSX0ZVTExTQ1JFRU4s
CiAgICAgTEVBVkVfRlVMTFNDUkVFTiwKIAorICAgIFJVTl9GSUxFX0NIT09TRVIsCisKICAgICBM
QVNUX1NJR05BTAogfTsKIApAQCAtMjA2LDYgKzIwOCw0OSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRX
ZWJWaWV3U2V0U2V0dGluZ3MoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0U2V0dGluZ3Mq
IHNldAogICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2V0dGluZ3MsICJub3RpZnk6Onpvb20tdGV4dC1v
bmx5IiwgR19DQUxMQkFDSyh6b29tVGV4dE9ubHlDaGFuZ2VkKSwgd2ViVmlldyk7CiB9CiAKK3N0
YXRpYyB2b2lkIGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtEaWFsb2cqIGRp
YWxvZywgZ2ludCByZXNwb25zZUlELCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3Qp
Cit7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IGFkb3B0ZWRSZXF1ZXN0
ID0gYWRvcHRHUmVmKHJlcXVlc3QpOworICAgIGlmIChyZXNwb25zZUlEID09IEdUS19SRVNQT05T
RV9BQ0NFUFQpIHsKKyAgICAgICAgR093blB0cjxHU0xpc3Q+IGZpbGVzTGlzdChndGtfZmlsZV9j
aG9vc2VyX2dldF9maWxlbmFtZXMoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKSk7CisgICAgICAg
IEdSZWZQdHI8R1B0ckFycmF5PiBmaWxlc0FycmF5ID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25l
dygpKTsKKyAgICAgICAgZm9yIChHU0xpc3QqIGZpbGUgPSBmaWxlc0xpc3QuZ2V0KCk7IGZpbGU7
IGZpbGUgPSBnX3NsaXN0X25leHQoZmlsZSkpCisgICAgICAgICAgICBnX3B0cl9hcnJheV9hZGQo
ZmlsZXNBcnJheS5nZXQoKSwgZmlsZS0+ZGF0YSk7CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChm
aWxlc0FycmF5LmdldCgpLCAwKTsKKyAgICAgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X3NlbGVjdF9maWxlcyhhZG9wdGVkUmVxdWVzdC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBnY2hhciogY29uc3QqPihmaWxlc0FycmF5LT5wZGF0YSkpOworICAgIH0gZWxzZQorICAgICAg
ICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGFkb3B0ZWRSZXF1ZXN0LmdldCgp
KTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGRpYWxvZykpOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBHdGtX
aWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVCh3ZWJW
aWV3KSk7CisgICAgaWYgKCF3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3codG9wbGV2ZWwp
KQorICAgICAgICB0b3BsZXZlbCA9IDA7CisKKyAgICBnYm9vbGVhbiBhbGxvd3NNdWx0aXBsZVNl
bGVjdGlvbiA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxl
KHJlcXVlc3QpOworICAgIEd0a1dpZGdldCogZGlhbG9nID0gZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFs
b2dfbmV3KGFsbG93c011bHRpcGxlU2VsZWN0aW9uID8gXygiU2VsZWN0IEZpbGVzIikgOiBfKCJT
ZWxlY3QgRmlsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvcGxldmVsID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19GSUxFX0NIT09T
RVJfQUNUSU9OX09QRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tf
T1BFTiwgR1RLX1JFU1BPTlNFX0FDQ0VQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGlmIChHdGtGaWxlRmlsdGVyKiBm
aWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVy
KHJlcXVlc3QpKQorICAgICAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9maWx0ZXIoR1RLX0ZJTEVf
Q0hPT1NFUihkaWFsb2cpLCBmaWx0ZXIpOworICAgIGd0a19maWxlX2Nob29zZXJfc2V0X3NlbGVj
dF9tdWx0aXBsZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIGFsbG93c011bHRpcGxlU2VsZWN0
aW9uKTsKKworICAgIGlmIChjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpKQorICAg
ICAgICBndGtfZmlsZV9jaG9vc2VyX3NlbGVjdF9maWxlbmFtZShHVEtfRklMRV9DSE9PU0VSKGRp
YWxvZyksIHNlbGVjdGVkRmlsZXNbMF0pOworCisgICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2cs
ICJyZXNwb25zZSIsIEdfQ0FMTEJBQ0soZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNr
KSwgZ19vYmplY3RfcmVmKHJlcXVlc3QpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsK
KworICAgIHJldHVybiBUUlVFOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3Ry
dWN0ZWQoR09iamVjdCogb2JqZWN0KQogewogICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRf
d2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCkBAIC0zMTMsNiArMzU4LDcgQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNz
KiB3ZWJWaWV3Q2xhc3MpCiAgICAgd2ViVmlld0NsYXNzLT5jcmVhdGUgPSB3ZWJraXRXZWJWaWV3
Q3JlYXRlOwogICAgIHdlYlZpZXdDbGFzcy0+c2NyaXB0X2RpYWxvZyA9IHdlYmtpdFdlYlZpZXdT
Y3JpcHREaWFsb2c7CiAgICAgd2ViVmlld0NsYXNzLT5kZWNpZGVfcG9saWN5ID0gd2Via2l0V2Vi
Vmlld0RlY2lkZVBvbGljeTsKKyAgICB3ZWJWaWV3Q2xhc3MtPnJ1bl9maWxlX2Nob29zZXIgPSB3
ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXI7CiAKICAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZh
dGUod2ViVmlld0NsYXNzLCBzaXplb2YoV2ViS2l0V2ViVmlld1ByaXZhdGUpKTsKIApAQCAtNzU3
LDYgKzgwMywzNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJL
aXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgIGdfc2ln
bmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCwKICAgICAgICAgICAgICAgICAgICAgIHdl
YmtpdF9tYXJzaGFsX0JPT0xFQU5fX1ZPSUQsCiAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVf
Qk9PTEVBTiwgMCk7CisgICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnJ1bi1maWxlLWNo
b29zZXI6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhl
IHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSB1
c2VyIGludGVyYWN0cyB3aXRoIGEgJmx0O2lucHV0CisgICAgICogdHlwZT0nZmlsZScgLyZndDsg
SFRNTCBlbGVtZW50LCByZXF1ZXN0aW5nIGZyb20gV2ViS2l0IHRvIHNob3cKKyAgICAgKiBhIGRp
YWxvZyB0byBzZWxlY3Qgb25lIG9yIG1vcmUgZmlsZXMgdG8gYmUgdXBsb2FkZWQuIFRvIGxldCB0
aGUKKyAgICAgKiBhcHBsaWNhdGlvbiBrbm93IHRoZSBkZXRhaWxzIG9mIHRoZSBmaWxlIGNob29z
ZXIsIGFzIHdlbGwgYXMgdG8KKyAgICAgKiBhbGxvdyB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHRv
IGVpdGhlciBjYW5jZWwgdGhlIHJlcXVlc3Qgb3IKKyAgICAgKiBwZXJmb3JtIGFuIGFjdHVhbCBz
ZWxlY3Rpb24gb2YgZmlsZXMsIHRoZSBzaWduYWwgd2lsbCBwYXNzIGFuCisgICAgICogaW5zdGFu
Y2Ugb2YgdGhlICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgaW4gdGhlIEByZXF1ZXN0CisgICAg
ICogYXJndW1lbnQuCisgICAgICoKKyAgICAgKiBUaGUgZGVmYXVsdCBzaWduYWwgaGFuZGxlciB3
aWxsIGFzeW5jaHJvbm91c2x5IHJ1biBhIHJlZ3VsYXIKKyAgICAgKiAjR3RrRmlsZUNob29zZXJE
aWFsb2cgZm9yIHRoZSB1c2VyIHRvIGludGVyYWN0IHdpdGguCisgICAgICoKKyAgICAgKiBSZXR1
cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3Ig
dGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhl
ci4KKyAgICAgKgorICAgICAqLworICAgIHNpZ25hbHNbUlVOX0ZJTEVfQ0hPT1NFUl0gPQorICAg
ICAgICBnX3NpZ25hbF9uZXcoInJ1bi1maWxlLWNob29zZXIiLAorICAgICAgICAgICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAg
IEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VU
KFdlYktpdFdlYlZpZXdDbGFzcywgcnVuX2ZpbGVfY2hvb3NlciksCisgICAgICAgICAgICAgICAg
ICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAgLyogYWNjdW11bGF0b3Ig
ZGF0YSAqLywKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09C
SkVDVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLCAvKiBudW1iZXIg
b2YgcGFyYW1ldGVycyAqLworICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRklMRV9D
SE9PU0VSX1JFUVVFU1QpOwogfQogCiBzdGF0aWMgYm9vbCB1cGRhdGVSZXBsYWNlQ29udGVudFN0
YXR1cyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50KQpA
QCAtOTY0LDYgKzEwNDAsMTIgQEAgYm9vbCB3ZWJraXRXZWJWaWV3TGVhdmVGdWxsU2NyZWVuKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcmV0dXJuICFyZXR1cm5WYWx1ZTsKIH0KIAordm9p
ZCB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnYm9vbGVhbiBy
ZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbUlVOX0ZJTEVf
Q0hPT1NFUl0sIDAsIHJlcXVlc3QsICZyZXR1cm5WYWx1ZSk7Cit9CisKIC8qKgogICogd2Via2l0
X3dlYl92aWV3X25ldzoKICAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggZjVjMjFjNS4uYzU2MjA1YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMzEsOSArMzEs
MTEgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVm
aW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0SGl0VGVzdFJlc3VsdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SmF2YXNj
cmlwdFJlc3VsdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UG9saWN5RGVjaXNpb24uaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNjcmlwdERpYWxvZy5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3Qu
aD4KQEAgLTQxLDcgKzQzLDYgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlJlc291cmNl
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgotI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
UG9saWN5RGVjaXNpb24uaD4KIAogR19CRUdJTl9ERUNMUwogCkBAIC0xNTEsNiArMTUyLDggQEAg
c3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViS2l0VVJJUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7CiAgICAg
Z2Jvb2xlYW4gICAoKiBlbnRlcl9mdWxsc2NyZWVuKSAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICp3ZWJfdmlldyk7CiAgICAgZ2Jvb2xlYW4gICAoKiBsZWF2ZV9mdWxsc2NyZWVuKSAg
ICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisgICAgZ2Jvb2xlYW4g
ICAoKiBydW5fZmlsZV9jaG9vc2VyKSAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3
ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCAgKnJlcXVlc3QpOwogCiAgICAgLyogUGFkZGluZyBmb3IgZnV0
dXJlIGV4cGFuc2lvbiAqLwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdQcml2YXRlLmgKaW5kZXggNzBkNmQ2ZC4uNzE3ZDJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC00
Niw2ICs0Niw3IEBAIHZvaWQgd2Via2l0V2ViVmlld01ha2VQb2xpY3lEZWNpc2lvbihXZWJLaXRX
ZWJWaWV3KiwgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlLCBXCiB2b2lkIHdlYmtpdFdlYlZpZXdN
b3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyosIFdLSGl0VGVzdFJlc3VsdFJlZiwgdW5z
aWduZWQgbW9kaWZpZXJzKTsKIHZvaWQgd2Via2l0V2ViVmlld1ByaW50RnJhbWUoV2ViS2l0V2Vi
VmlldyosIFdLRnJhbWVSZWYpOwogdm9pZCB3ZWJraXRXZWJWaWV3UmVzb3VyY2VMb2FkU3RhcnRl
ZChXZWJLaXRXZWJWaWV3KiwgV0tGcmFtZVJlZiwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVy
LCBXZWJLaXRVUklSZXF1ZXN0KiwgYm9vbCBpc01haW5SZXNvdXJjZSk7Cit2b2lkIHdlYmtpdFdl
YlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCopOwogV2ViS2l0V2ViUmVzb3VyY2UqIHdlYmtpdFdlYlZpZXdHZXRMb2FkaW5n
V2ViUmVzb3VyY2UoV2ViS2l0V2ViVmlldyosIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllcik7
CiB2b2lkIHdlYmtpdFdlYlZpZXdSZW1vdmVMb2FkaW5nV2ViUmVzb3VyY2UoV2ViS2l0V2ViVmll
dyosIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllcik7CiBXZWJLaXRXZWJSZXNvdXJjZSogd2Vi
a2l0V2ViVmlld1Jlc291cmNlTG9hZEZpbmlzaGVkKFdlYktpdFdlYlZpZXcqLCB1aW50NjRfdCBy
ZXNvdXJjZUlkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5kZXggMzJjNzI1NS4uODIx
MTI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCkBAIC0yOCw2ICsyOCw3IEBACiAgICAgPHhpOmlu
Y2x1ZGUgaHJlZj0ieG1sL1dlYktpdFByaW50T3BlcmF0aW9uLnhtbCIvPgogICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRXZWJSZXNvdXJjZS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBo
cmVmPSJ4bWwvV2ViS2l0RXJyb3IueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwv
V2ViS2l0RmluZENvbnRyb2xsZXIueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdENvb2tpZU1hbmFnZXIueG1sIi8+CiAgIDwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlv
bnMudHh0CmluZGV4IGRjMzgwOTUuLmRjNWU2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4
dApAQCAtNTIxLDYgKzUyMSwzMCBAQCB3ZWJraXRfamF2YXNjcmlwdF9lcnJvcl9xdWFyawogPC9T
RUNUSU9OPgogCiA8U0VDVElPTj4KKzxGSUxFPldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDwvRklM
RT4KK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlw
ZXNfZmlsdGVyCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBs
ZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcword2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcword2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2NhbmNlbAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdENsYXNzCitXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVAorV0VCS0lUX0ZJ
TEVfQ0hPT1NFUl9SRVFVRVNUCitXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QKK1dFQktJ
VF9GSUxFX0NIT09TRVJfUkVRVUVTVF9DTEFTUworV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFV
RVNUX0NMQVNTCitXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1RfR0VUX0NMQVNTCisKKzxTVUJT
RUNUSU9OIFByaXZhdGU+CitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlCit3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+CiA8
RklMRT5XZWJLaXRGaW5kQ29udHJvbGxlcjwvRklMRT4KIFdlYktpdEZpbmRDb250cm9sbGVyCiBX
ZWJLaXRGaW5kT3B0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCmluZGV4IDQzYWI0ZjUuLjFjYTgyMWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50
eXBlcworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGsudHlwZXMKQEAgLTksNiArOSw3IEBAIHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3R5cGUKIHdl
YmtpdF91cmlfcmVxdWVzdF9nZXRfdHlwZQogd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF90
eXBlCiB3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfdHlwZQogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfdHlwZQogd2Via2l0X3Njcmlw
dF9kaWFsb2dfZ2V0X3R5cGUKIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfdHlwZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IGY2OWY1MjkuLjZmOWM1NDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViVmlldy5jcHAKQEAgLTIxOCw2ICsyMTgsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bmV3V2ViVmlldzsKICAgICB9CiAKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXIo
V2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgVUlDbGll
bnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVk
V2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisgICAgICAgIHRlc3QtPm1fZmls
ZUNob29zZXJSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0
LT5tX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCiAgICAgdm9pZCBz
Y3JpcHRBbGVydChXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKICAgICB7CiAgICAgICAgIHN3
aXRjaCAobV9zY3JpcHREaWFsb2dUeXBlKSB7CkBAIC0yODUsNiArMjkzLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dp
bmRvd3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmll
dyksIFRSVUUpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIs
IEdfQ0FMTEJBQ0sodmlld0NyZWF0ZSksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fd2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2Vy
KSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LWRp
YWxvZyIsIEdfQ0FMTEJBQ0soc2NyaXB0RGlhbG9nKSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAibW91c2UtdGFyZ2V0LWNoYW5nZWQiLCBHX0NBTExCQUNLKG1v
dXNlVGFyZ2V0Q2hhbmdlZCksIHRoaXMpOwogICAgIH0KQEAgLTMxMSwxMiArMzIwLDIwIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0LmdldCgpOwog
ICAgIH0KIAorICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogY2xpY2tNb3VzZUJ1dHRvbkFu
ZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoaW50IHgsIGludCB5KQorICAgIHsKKyAgICAgICAg
Y2xpY2tNb3VzZUJ1dHRvbih4LCB5KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxv
b3ApOworICAgICAgICByZXR1cm4gbV9maWxlQ2hvb3NlclJlcXVlc3QuZ2V0KCk7CisgICAgfQor
CiAgICAgVmVjdG9yPFdlYlZpZXdFdmVudHM+IG1fd2ViVmlld0V2ZW50czsKICAgICBXZWJLaXRT
Y3JpcHREaWFsb2dUeXBlIG1fc2NyaXB0RGlhbG9nVHlwZTsKICAgICBib29sIG1fc2NyaXB0RGlh
bG9nQ29uZmlybWVkOwogICAgIFdpbmRvd1Byb3BlcnRpZXMgbV93aW5kb3dQcm9wZXJ0aWVzOwog
ICAgIEhhc2hTZXQ8V1RGOjpTdHJpbmc+IG1fd2luZG93UHJvcGVydGllc0NoYW5nZWQ7CiAgICAg
R1JlZlB0cjxXZWJLaXRIaXRUZXN0UmVzdWx0PiBtX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdDsK
KyAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gbV9maWxlQ2hvb3NlclJlcXVl
c3Q7CiAgICAgdW5zaWduZWQgaW50IG1fbW91c2VUYXJnZXRNb2RpZmllcnM7CiB9OwogCkBAIC0z
MzIsNiArMzQ5LDk2IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZShV
SUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4g
Y2hlY2tNaW1lVHlwZUZvckZpbHRlcihHdGtGaWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdjaGFy
KiBtaW1lVHlwZSkKK3sKKyAgICBHdGtGaWxlRmlsdGVySW5mbyBmaWx0ZXJJbmZvOworICAgIGZp
bHRlckluZm8uY29udGFpbnMgPSBHVEtfRklMRV9GSUxURVJfTUlNRV9UWVBFOworICAgIGZpbHRl
ckluZm8ubWltZV90eXBlID0gbWltZVR5cGU7CisgICAgcmV0dXJuIGd0a19maWxlX2ZpbHRlcl9m
aWx0ZXIoZmlsdGVyLCAmZmlsdGVySW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
RmlsZUNob29zZXJSZXF1ZXN0KFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogZmlsZUNob29zZXJIVE1MRm9ybWF0ID0gIjxodG1sPjxib2R5PjxpbnB1dCBz
dHlsZT0ncG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO21hcmdpbjowO3BhZGRpbmc6MCcg
dHlwZT0nZmlsZScgJXMvPjwvYm9keT48L2h0bWw+IjsKKworICAgIC8vIE11bHRpcGxlIHNlbGVj
dGlvbnMgbm90IGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgorICAgIEdPd25QdHI8Y2hhcj4g
c2ltcGxlRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1h
dCwgIiIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChzaW1wbGVGaWxlVXBsb2FkSFRNTC5nZXQoKSwg
MCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9u
QW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJSZXF1
ZXN0KSk7CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAg
IGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBjb25zdCBnY2hhciogY29uc3Qq
IHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVk
X2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMp
OworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1
ZXN0KTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBmaWx0
ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgorICAgIEdPd25QdHI8Y2hhcj4gbXVsdGlw
bGVTZWxlY3Rpb25GaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1M
Rm9ybWF0LCAibXVsdGlwbGUiKSk7CisgICAgdGVzdC0+bG9hZEh0bWwobXVsdGlwbGVTZWxlY3Rp
b25GaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFu
ZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQod2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJSZXF1ZXN0
KSk7CisKKyAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsK
KyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNf
ZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7CisgICAg
c2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRf
ZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7
CisKKyAgICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KKyAgICBjb25zdCBnY2hhciogZmlsZXNUb1Nl
bGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6IiwgMCB9OworICAg
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMoZmlsZUNob29zZXJSZXF1
ZXN0LCBmaWxlc1RvU2VsZWN0KTsKKworICAgIC8vIENoZWNrIHRoZSBmaWxlcyB0aGF0IGhhdmUg
YmVlbiBqdXN0IHNlbGVjdGVkLgorICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAg
Z19hc3NlcnQoc2VsZWN0ZWRGaWxlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmls
ZXNbMF0sID09LCAiL2ZvbyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFd
LCA9PSwgIi9mb28vYmFyIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0s
ID09LCAiL2Zvby9iYXIvYmF6Iik7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOwor
CisgICAgLy8gUGVyZm9ybSBhbm90aGVyIHJlcXVlc3QgdG8gY2hlY2sgaWYgdGhlIGxpc3Qgb2Yg
ZmlsZXMgc2VsZWN0ZWQKKyAgICAvLyBpbiB0aGUgcHJldmlvdXMgc3RlcCBhcHBlYXJzIG5vdyBh
cyBwYXJ0IG9mIHRoZSBuZXcgcmVxdWVzdC4KKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0
LT5jbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAg
ICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3Rl
ZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOwor
ICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisKKyAgICAvLyBNdWx0aXBsZSBz
ZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBvbmx5IGFjY2VwdCBpbWFnZXMsIGF1ZGlvIGFuZCB2aWRl
byBmaWxlcy4uCisgICAgR093blB0cjxjaGFyPiBtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRNTChn
X3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiYWNjZXB0PSdhdWRpby8qLHZp
ZGVvLyosaW1hZ2UvKiciKSk7CisgICAgdGVzdC0+bG9hZEh0bWwobWltZUZpbHRlcmVkRmlsZVVw
bG9hZEhUTUwuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
ICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9y
RmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKwor
ICAgIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
cyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KG1pbWVUeXBlcyk7CisgICAgZ19h
c3NlcnRfY21wc3RyKG1pbWVUeXBlc1swXSwgPT0sICJhdWRpby8qIik7CisgICAgZ19hc3NlcnRf
Y21wc3RyKG1pbWVUeXBlc1sxXSwgPT0sICJ2aWRlby8qIik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KG1pbWVUeXBlc1syXSwgPT0sICJpbWFnZS8qIik7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlc1sz
XSk7CisKKyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVf
dHlwZXNfZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoR1RLX0lTX0ZJ
TEVfRklMVEVSKGZpbHRlcikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIo
ZmlsdGVyLCAiYXVkaW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVy
KGZpbHRlciwgInZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRl
cihmaWx0ZXIsICJpbWFnZS8qIikpOworCisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsK
KyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciogaHRtbE9uTG9hZEZvcm1hdCA9ICI8aHRtbD48
Ym9keSBvbkxvYWQ9XCIlc1wiPjwvYm9keT48L2h0bWw+IjsKQEAgLTU5MCw2ICs2OTcsNyBAQCB2
b2lkIGJlZm9yZUFsbCgpCiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJz
ZXR0aW5ncyIsIHRlc3RXZWJWaWV3U2V0dGluZ3MpOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAicmVwbGFjZS1jb250ZW50IiwgdGVzdFdlYlZpZXdSZXBsYWNlQ29udGVu
dCk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3JlYXRlLXJlYWR5
LWNsb3NlIiwgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKTsKKyAgICBVSUNsaWVudFRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmaWxlLWNob29zZXItcmVxdWVzdCIsIHRlc3RXZWJWaWV3
RmlsZUNob29zZXJSZXF1ZXN0KTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJqYXZhc2NyaXB0LWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKTsK
ICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3aW5kb3ctcHJvcGVydGll
cyIsIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGllcyk7CiAgICAgVUlDbGllbnRUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAibW91c2UtdGFyZ2V0IiwgdGVzdFdlYlZpZXdNb3VzZVRhcmdldCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJW
aWV3VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJW
aWV3VGVzdC5jcHAKaW5kZXggZDNjNGZkYi4uN2E5ZTQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApAQCAtMTk4
LDYgKzE5OCwxMiBAQCB2b2lkIFdlYlZpZXdUZXN0Ojptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHks
IHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKICAgICBndGtfbWFpbl9kb19ldmVudChldmVu
dC5nZXQoKSk7CiB9CiAKK3ZvaWQgV2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24oaW50IHgs
IGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMp
Cit7CisgICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUFJFU1MsIHgsIHksIGJ1dHRv
biwgbW91c2VNb2RpZmllcnMpOworICAgIGRvTW91c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1JF
TEVBU0UsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmllcnMpOworfQorCiB2b2lkIFdlYlZpZXdU
ZXN0OjprZXlTdHJva2UodW5zaWduZWQgaW50IGtleVZhbCwgdW5zaWduZWQgaW50IGtleU1vZGlm
aWVycykKIHsKICAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CkBAIC0yMjQsNiArMjMwLDMy
IEBAIHZvaWQgV2ViVmlld1Rlc3Q6OmtleVN0cm9rZSh1bnNpZ25lZCBpbnQga2V5VmFsLCB1bnNp
Z25lZCBpbnQga2V5TW9kaWZpZXJzKQogICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50LmdldCgp
KTsKIH0KIAordm9pZCBXZWJWaWV3VGVzdDo6ZG9Nb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlw
ZSBldmVudFR5cGUsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQg
aW50IG1vdXNlTW9kaWZpZXJzKQoreworICAgIGdfYXNzZXJ0KG1fcGFyZW50V2luZG93KTsKKyAg
ICBHdGtXaWRnZXQqIHZpZXdXaWRnZXQgPSBHVEtfV0lER0VUKG1fd2ViVmlldyk7CisgICAgZ19h
c3NlcnQoZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQodmlld1dpZGdldCkpOworCisgICAgR093blB0
cjxHZGtFdmVudD4gZXZlbnQoZ2RrX2V2ZW50X25ldyhldmVudFR5cGUpKTsKKyAgICBldmVudC0+
YnV0dG9uLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKKyAgICBn
X29iamVjdF9yZWYoZXZlbnQtPmJ1dHRvbi53aW5kb3cpOworCisgICAgZXZlbnQtPmJ1dHRvbi50
aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICBldmVudC0+YnV0dG9uLnggPSB4OworICAgIGV2
ZW50LT5idXR0b24ueSA9IHk7CisgICAgZXZlbnQtPmJ1dHRvbi5heGVzID0gMDsKKyAgICBldmVu
dC0+YnV0dG9uLnN0YXRlID0gbW91c2VNb2RpZmllcnM7CisgICAgZXZlbnQtPmJ1dHRvbi5idXR0
b24gPSBidXR0b247CisKKyAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2VfbWFu
YWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGd0
a193aWRnZXRfZ2V0X2Rpc3BsYXkodmlld1dpZGdldCkpKTsKKworICAgIGludCB4Um9vdCwgeVJv
b3Q7CisgICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdldF9nZXRfd2luZG93
KHZpZXdXaWRnZXQpLCB4LCB5LCAmeFJvb3QsICZ5Um9vdCk7CisgICAgZXZlbnQtPmJ1dHRvbi54
X3Jvb3QgPSB4Um9vdDsKKyAgICBldmVudC0+YnV0dG9uLnlfcm9vdCA9IHlSb290OworICAgIGd0
a19tYWluX2RvX2V2ZW50KGV2ZW50LmdldCgpKTsKK30KKwogc3RhdGljIHZvaWQgcnVuSmF2YVNj
cmlwdFJlYWR5Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBXZWJWaWV3
VGVzdCogdGVzdCkKIHsKICAgICB0ZXN0LT5tX2phdmFzY3JpcHRSZXN1bHQgPSB3ZWJraXRfd2Vi
X3ZpZXdfcnVuX2phdmFzY3JpcHRfZmluaXNoKHRlc3QtPm1fd2ViVmlldywgcmVzdWx0LCB0ZXN0
LT5tX2phdmFzY3JpcHRFcnJvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAppbmRleCA3MjMzY2NkLi45MmUxMjM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdU
ZXN0LmgKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2hvd0luV2luZG93QW5k
V2FpdFVudGlsTWFwcGVkKCk7CiAKICAgICB2b2lkIG1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSwg
dW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCk7CisgICAgdm9pZCBjbGlja01vdXNlQnV0
dG9uKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiA9IDEsIHVuc2lnbmVkIGludCBt
b3VzZU1vZGlmaWVycyA9IDApOwogICAgIHZvaWQga2V5U3Ryb2tlKHVuc2lnbmVkIGludCBrZXlW
YWwsIHVuc2lnbmVkIGludCBrZXlNb2RpZmllcnMgPSAwKTsKIAogICAgIFdlYktpdEphdmFzY3Jp
cHRSZXN1bHQqIHJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZChjb25zdCBjaGFyKiBq
YXZhc2NyaXB0LCBHRXJyb3IqKik7CkBAIC02NSw2ICs2Niw5IEBAIHB1YmxpYzoKICAgICBDU3Ry
aW5nIG1fZXhwZWN0ZWRUaXRsZTsKICAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBtX2phdmFz
Y3JpcHRSZXN1bHQ7CiAgICAgR0Vycm9yKiogbV9qYXZhc2NyaXB0RXJyb3I7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBkb01vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlLCBpbnQsIGludCwgdW5z
aWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogfTsKIAogI2VuZGlmIC8vIFdlYlZpZXdUZXN0X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCA1ZTdmNmNh
Li5jNTQ2MGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5o
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFZGl0aW5nQ29tbWFu
ZHMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RXJyb3IuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmluZENvbnRyb2xsZXIuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdEhpdFRlc3RSZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdEphdmFzY3JpcHRSZXN1bHQuaD4KQEAgLTQxLDggKzQyLDggQEAKICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdFVSSVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJD
b250ZXh0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJSZXNvdXJjZS5oPgotI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dFdlYlZpZXcuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmg+CiAKICN1bmRlZiBfX1dFQktJ
VDJfSF9JTlNJREVfXwotLSAKMS43LjcuNgoK
</data>
<flag name="review"
          id="143332"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>