<?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>48512</bug_id>
          
          <creation_ts>2010-10-28 04:56:10 -0700</creation_ts>
          <short_desc>[GTK] Implement sample browser app for WebKit2</short_desc>
          <delta_ts>2011-03-31 05:54:26 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52805</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Amruth Raj">amruthraj</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>andersca</cc>
    
    <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kenneth</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ravi.kasibhatla</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>300997</commentid>
    <comment_count>0</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-10-28 04:56:10 -0700</bug_when>
    <thetext>Implement sample MiniBrowser app for WebKit2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301719</commentid>
    <comment_count>1</comment_count>
      <attachid>72327</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-10-29 06:29:50 -0700</bug_when>
    <thetext>Created attachment 72327
Implements sample GTK based Browser app on WebKit2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301746</commentid>
    <comment_count>2</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-10-29 07:15:55 -0700</bug_when>
    <thetext>Adding myself to the CC list for this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303427</commentid>
    <comment_count>3</comment_count>
      <attachid>72687</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-11-02 09:47:15 -0700</bug_when>
    <thetext>Created attachment 72687
MiniBrowser implementation for WebKit2 GTK port

MiniBrowser implementation for WebKit2 GTK port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303433</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-02 09:54:27 -0700</bug_when>
    <thetext>Attachment 72687 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/MiniBrowser/gtk/main.cpp:31:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKitTools/MiniBrowser/gtk/BrowserView.cpp:31:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKitTools/MiniBrowser/gtk/BrowserWindow.cpp:31:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKitTools/MiniBrowser/gtk/MiniBrowser.cpp:31:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 4 in 9 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>309749</commentid>
    <comment_count>5</comment_count>
      <attachid>72687</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-11-16 08:55:59 -0800</bug_when>
    <thetext>Comment on attachment 72687
MiniBrowser implementation for WebKit2 GTK port

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

&gt; WebKitTools/MiniBrowser/gtk/BrowserView.cpp:38
&gt; +BrowserView::BrowserView()
&gt; +    : m_wkview(0)
&gt; +{
&gt; +}

Shouldn&apos;t you implement this using the GTK C API ? For testing the API as well??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326536</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-12-24 02:23:43 -0800</bug_when>
    <thetext>GTK reviewers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330765</commentid>
    <comment_count>7</comment_count>
      <attachid>78238</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-07 07:24:22 -0800</bug_when>
    <thetext>Created attachment 78238
MiniBrowser implementation for WebKit2 GTK port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330978</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-07 13:41:21 -0800</bug_when>
    <thetext>Attachment 78238 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;GNUmakefile.am&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/MiniBrowser/gtk/BrowserView.cpp&apos;, u&apos;Tools/MiniBrowser/gtk/BrowserView.h&apos;, u&apos;Tools/MiniBrowser/gtk/BrowserWindow.cpp&apos;, u&apos;Tools/MiniBrowser/gtk/BrowserWindow.h&apos;, u&apos;Tools/MiniBrowser/gtk/GNUmakefile.am&apos;, u&apos;Tools/MiniBrowser/gtk/MiniBrowser.cpp&apos;, u&apos;Tools/MiniBrowser/gtk/MiniBrowser.h&apos;, u&apos;Tools/MiniBrowser/gtk/main.cpp&apos;]&quot; exit_code: 1
Tools/MiniBrowser/gtk/MiniBrowser.cpp:31:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Tools/MiniBrowser/gtk/main.cpp:31:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Tools/MiniBrowser/gtk/BrowserView.cpp:31:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Tools/MiniBrowser/gtk/BrowserWindow.cpp:31:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 4 in 11 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>363971</commentid>
    <comment_count>9</comment_count>
      <attachid>85050</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-08 08:26:02 -0800</bug_when>
    <thetext>Created attachment 85050
Updated patch

This is the current patch I use for testing, I think we should do a C application like the GTKLauncher. Use it if you want to test current code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369877</commentid>
    <comment_count>10</comment_count>
      <attachid>86211</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-18 14:19:37 -0700</bug_when>
    <thetext>Created attachment 86211
Proposed patch

C application based on the GtkLauncher, it basically loads and goes backward and forward. There are some style false positives because this is an application using the API a webkit internal file.

Added also bug 56668 to check the use of bool in the C API. Added also bug 56680 to make the generated forwarding headers work for c files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369879</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-18 14:20:56 -0700</bug_when>
    <thetext>Attachment 86211 did not pass style-queue:

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

Tools/MiniBrowser/gtk/main.c:30:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Tools/MiniBrowser/gtk/main.c:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 5 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>369957</commentid>
    <comment_count>12</comment_count>
      <attachid>86211</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-18 15:27:14 -0700</bug_when>
    <thetext>Comment on attachment 86211
Proposed patch

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

Looks good!. Just needs a little bit of cleanup.

&gt; Tools/MiniBrowser/gtk/main.c:37
&gt; +static void activateUriEntryCb(GtkWidget *entry, gpointer data)

Why not pass in the WebView as the data parameter?

&gt; Tools/MiniBrowser/gtk/main.c:41
&gt; +    g_assert(uri);

Is it possible for get_text to return NULL here? If so it should be handled. If not, I think we can remove the assertion.

&gt; Tools/MiniBrowser/gtk/main.c:65
&gt; +static GtkWidget *createBrowser(GtkWidget *window, GtkWidget *uriEntry, WKViewRef *webView)
&gt; +{
&gt; +    GtkWidget *webViewWidget = WKViewGetWindow(*webView);
&gt; +
&gt; +    return webViewWidget;
&gt; +}

Just remove this entirely and call  WKViewGetWindow(...) at the callsite.

&gt; Tools/MiniBrowser/gtk/main.c:111
&gt; +    GtkWidget *vbox;
&gt; +    GtkWidget *window;
&gt; +    GtkWidget *uriEntry;
&gt; +    GtkWidget *webViewWidget;

My preference is to declare these where you first use them. We should check to see if this is the way that the Mac C code is written. If so, we should follow the same style.

&gt; Tools/MiniBrowser/gtk/main.c:119
&gt; +    webViewWidget = WKViewGetWindow(*webView);

This seems to be unused?

&gt; Tools/MiniBrowser/gtk/main.c:125
&gt; +    gtk_box_pack_start(GTK_BOX(vbox), createBrowser(window, uriEntry, webView), TRUE, TRUE, 0);

As stated above, simply use WKViewGetWindow above.

&gt; Tools/MiniBrowser/gtk/main.c:149
&gt; +    GtkWidget *main_window;

main_window ==&gt; mainWindow.

&gt; Tools/MiniBrowser/gtk/main.c:157
&gt; +    gchar *uri =(gchar*)(argc &gt; 1 ? argv[1] : &quot;http://www.google.com/&quot;);

Missing a space here after =. Should we use &quot;http://webkitgtk.org &quot; as the default page? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372182</commentid>
    <comment_count>13</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-23 09:08:30 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 86211 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86211&amp;action=review
&gt; 
&gt; Looks good!. Just needs a little bit of cleanup.
&gt; 
&gt; &gt; Tools/MiniBrowser/gtk/main.c:37
&gt; &gt; +static void activateUriEntryCb(GtkWidget *entry, gpointer data)
&gt; 
&gt; Why not pass in the WebView as the data parameter?
&gt; 

I tried this one before :), and discarded it because the callback is used for the uri entry and for the stock button, which requires a g_signal_connect_swapped with the uriEntry using the data parameter.

&gt; &gt; Tools/MiniBrowser/gtk/main.c:41
&gt; &gt; +    g_assert(uri);
&gt; 
&gt; Is it possible for get_text to return NULL here? If so it should be handled. If not, I think we can remove the assertion.
&gt; 

Apparently it can&apos;t, documentation is not clear but I&apos;ve checked the code and it returns &quot;&quot; if the buffer is NULL. 

&gt; &gt; Tools/MiniBrowser/gtk/main.c:65
&gt; &gt; +static GtkWidget *createBrowser(GtkWidget *window, GtkWidget *uriEntry, WKViewRef *webView)
&gt; &gt; +{
&gt; &gt; +    GtkWidget *webViewWidget = WKViewGetWindow(*webView);
&gt; &gt; +
&gt; &gt; +    return webViewWidget;
&gt; &gt; +}
&gt; 
&gt; Just remove this entirely and call  WKViewGetWindow(...) at the callsite.
&gt;

Ok, I had left it because in the future we will need it to create multiple windows, but yeah, not sure what we will do and we can add it later.

&gt; &gt; Tools/MiniBrowser/gtk/main.c:111
&gt; &gt; +    GtkWidget *vbox;
&gt; &gt; +    GtkWidget *window;
&gt; &gt; +    GtkWidget *uriEntry;
&gt; &gt; +    GtkWidget *webViewWidget;
&gt; 
&gt; My preference is to declare these where you first use them. We should check to see if this is the way that the Mac C code is written. If so, we should follow the same style.
&gt;

This comes from the old GtkLauncher, initially I thought it was using some style more similar to a gnome application, that is why I left this like that, but yeah, we an keep the webkit style.

&gt; &gt; Tools/MiniBrowser/gtk/main.c:119
&gt; &gt; +    webViewWidget = WKViewGetWindow(*webView);
&gt; 
&gt; This seems to be unused?
&gt; 

Yep, leftover, sorry about that.

&gt; 
&gt; &gt; Tools/MiniBrowser/gtk/main.c:149
&gt; &gt; +    GtkWidget *main_window;
&gt; 
&gt; main_window ==&gt; mainWindow.
&gt; 

Ok.

&gt; &gt; Tools/MiniBrowser/gtk/main.c:157
&gt; &gt; +    gchar *uri =(gchar*)(argc &gt; 1 ? argv[1] : &quot;http://www.google.com/&quot;);
&gt; 
&gt; Missing a space here after =. Should we use &quot;http://webkitgtk.org &quot; as the default page? :)

Your are right! :)

Thanks for the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372193</commentid>
    <comment_count>14</comment_count>
      <attachid>86627</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-23 09:31:21 -0700</bug_when>
    <thetext>Created attachment 86627
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372199</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-23 09:34:17 -0700</bug_when>
    <thetext>Attachment 86627 did not pass style-queue:

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

Tools/MiniBrowser/gtk/main.c:30:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Tools/MiniBrowser/gtk/main.c:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 5 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>372217</commentid>
    <comment_count>16</comment_count>
      <attachid>86627</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-23 09:57:27 -0700</bug_when>
    <thetext>Comment on attachment 86627
Proposed patch

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

Sorry. I missed a few things. :/ My only issues here are minor style issues, but I feel like the change to createWindow will need another round.

&gt; Tools/MiniBrowser/gtk/main.c:29
&gt; +// FIXME: replace bool type in the C API
&gt; +// https://bugs.webkit.org/show_bug.cgi?id=56668

I guess we may eventually need to add the stdbool.h to the headers ourselvses. :/

&gt; Tools/MiniBrowser/gtk/main.c:33
&gt; +#include &lt;WebKit2/WebKit2.h&gt;
&gt; +#include &lt;gtk/gtk.h&gt;

You shoud reorder these includes.

&gt; Tools/MiniBrowser/gtk/main.c:44
&gt; +static void destroyCb(GtkWidget *widget, GtkWidget *window)

Please change Cb to Callback everywhere.

&gt; Tools/MiniBrowser/gtk/main.c:49
&gt; +static void goBackCb(GtkWidget *widget, WKViewRef *webView)

Ditto.

&gt; Tools/MiniBrowser/gtk/main.c:54
&gt; +static void goForwardCb(GtkWidget *widget, WKViewRef *webView)

Ditto.

&gt; Tools/MiniBrowser/gtk/main.c:120
&gt; +    GtkWidget *window;
&gt; +    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
&gt; +    gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
&gt; +    gtk_widget_set_name(window, &quot;MiniBrowser&quot;);
&gt; +
&gt; +    WKContextRef context = WKContextGetSharedProcessContext();
&gt; +    *webView = WKViewCreate(context, 0);
&gt; +
&gt; +    GtkWidget *uriEntry;
&gt; +    uriEntry = gtk_entry_new();
&gt; +
&gt; +    GtkWidget *vbox;
&gt; +    vbox = gtk_vbox_new(FALSE, 0);
&gt; +    gtk_box_pack_start(GTK_BOX(vbox), createToolbar(uriEntry, webView), FALSE, FALSE, 0);
&gt; +    gtk_box_pack_start(GTK_BOX(vbox), WKViewGetWindow(*webView), TRUE, TRUE, 0);
&gt; +
&gt; +    gtk_container_add(GTK_CONTAINER(window), vbox);
&gt; +
&gt; +    g_signal_connect(window, &quot;destroy&quot;, G_CALLBACK(destroyCb), NULL);
&gt; +
&gt; +    return window;

Oh, sorry. I guess I wasn&apos;t totally clear. You should do:

GtkWindow* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 

and the same with context, uriEntry, vbox, etc.

&gt; Tools/MiniBrowser/gtk/main.c:144
&gt; +    WKViewRef webView;
&gt; +    GtkWidget *mainWindow;
&gt; +    mainWindow = createWindow(&amp;webView);
&gt; +

I think I just realized what&apos;s confusing me about this bit. Here&apos;s my suggested change:

1. Create the WKWebView externally with a helper: createWebView.
2. Pass the WebView widget to createWindow.

In the end it will look like this:

WkViewRef webView = createWebView();
GtkWidget *mainWindow = createWindow(&amp;webView);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372218</commentid>
    <comment_count>17</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-23 09:58:28 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Oh, sorry. I guess I wasn&apos;t totally clear. You should do:
&gt; GtkWindow* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 

Here I should have said:

GtkWindow *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373529</commentid>
    <comment_count>18</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-25 08:31:40 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 86627 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86627&amp;action=review
&gt; 
&gt; Sorry. I missed a few things. :/ My only issues here are minor style issues, but I feel like the change to createWindow will need another round.
&gt; 
&gt; &gt; Tools/MiniBrowser/gtk/main.c:29
&gt; &gt; +// FIXME: replace bool type in the C API
&gt; &gt; +// https://bugs.webkit.org/show_bug.cgi?id=56668
&gt; 
&gt; I guess we may eventually need to add the stdbool.h to the headers ourselvses. :/
&gt; 

Yep, I&apos;ll add it to the  WKBaseGtk.h.

&gt; &gt; Tools/MiniBrowser/gtk/main.c:33
&gt; &gt; +#include &lt;WebKit2/WebKit2.h&gt;
&gt; &gt; +#include &lt;gtk/gtk.h&gt;
&gt; 
&gt; You shoud reorder these includes.
&gt; 

I think it assumes gtk is external and will complain if we reorder, like it does for the stdbool.h, but in that case we need it before the webkit2.h.

&gt; &gt; Tools/MiniBrowser/gtk/main.c:144
&gt; &gt; +    WKViewRef webView;
&gt; &gt; +    GtkWidget *mainWindow;
&gt; &gt; +    mainWindow = createWindow(&amp;webView);
&gt; &gt; +
&gt; 
&gt; I think I just realized what&apos;s confusing me about this bit. Here&apos;s my suggested change:
&gt; 
&gt; 1. Create the WKWebView externally with a helper: createWebView.
&gt; 2. Pass the WebView widget to createWindow.
&gt; 
&gt; In the end it will look like this:
&gt; 
&gt; WkViewRef webView = createWebView();
&gt; GtkWidget *mainWindow = createWindow(&amp;webView);

I understand, I like it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373619</commentid>
    <comment_count>19</comment_count>
      <attachid>86961</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-25 11:19:10 -0700</bug_when>
    <thetext>Created attachment 86961
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373620</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-25 11:20:40 -0700</bug_when>
    <thetext>Attachment 86961 did not pass style-queue:

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

Tools/MiniBrowser/gtk/main.c:28:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 7 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>373627</commentid>
    <comment_count>21</comment_count>
      <attachid>86961</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-25 11:29:45 -0700</bug_when>
    <thetext>Comment on attachment 86961
Proposed patch

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

Great! Please change all WKViewRef* to just be WKViewRef since WKViewRef is already a pointer type.

&gt; Tools/MiniBrowser/gtk/GNUmakefile.am:2
&gt; +#MiniBrowser

I think you can omit this.

&gt; Tools/MiniBrowser/gtk/main.c:33
&gt; +    WKViewRef *webView = g_object_get_data(G_OBJECT(entry), &quot;web-view&quot;);

data should now just be a WKViewRef. See below.

&gt; Tools/MiniBrowser/gtk/main.c:53
&gt; +static GtkWidget *createToolbar(GtkWidget *uriEntry, WKViewRef *webView)

Here just use WKViewRef  instead of WKViewRef*.

&gt; Tools/MiniBrowser/gtk/main.c:64
&gt; +    /* the back button */

Please either make these comments into full sentences or just remove them. You can probalby just remove them.

&gt; Tools/MiniBrowser/gtk/main.c:69
&gt; +    /* The forward button */

Ditto.

&gt; Tools/MiniBrowser/gtk/main.c:74
&gt; +    /* The URL entry */

Ditto.

&gt; Tools/MiniBrowser/gtk/main.c:81
&gt; +    /* The go button */

Ditto.

&gt; Tools/MiniBrowser/gtk/main.c:94
&gt; +    WKContextRef context = WKContextGetSharedProcessContext();
&gt; +
&gt; +    return WKViewCreate(context, 0);

Please just change this to: WKViewCreate(WKContextGetSharedProcessContext(), 0);

&gt; Tools/MiniBrowser/gtk/main.c:97
&gt; +static GtkWidget *createWindow(WKViewRef* webView)

Here just use WKViewRef instead of WKViewRef*. It&apos;s already a pointer.

&gt; Tools/MiniBrowser/gtk/main.c:135
&gt; +    GtkWidget *mainWindow = createWindow(&amp;webView);

Here you should just pass the WKViewRef itself, since it&apos;s already a pointer.

&gt; Tools/MiniBrowser/gtk/main.c:137
&gt; +    gchar *uri = (gchar*)(argc &gt; 1 ? argv[1] : &quot;http://www.webkitgtk.org/&quot;);

Is this cast necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374388</commentid>
    <comment_count>22</comment_count>
      <attachid>86961</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-03-28 03:54:07 -0700</bug_when>
    <thetext>Comment on attachment 86961
Proposed patch

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

&gt; Tools/MiniBrowser/gtk/main.c:66
&gt; +    g_signal_connect(G_OBJECT(item), &quot;clicked&quot;, G_CALLBACK(goBackCallback), webView);

g_signal_connect macros receive a gpointer, so you can avoid casts and simply use g_signal_connect(item, ...);

&gt; Tools/MiniBrowser/gtk/main.c:138
&gt; +    gchar *fileURL = filenameToURL(uri);

I think we could/should use g_file_new_for_commandline_arg() when argc &gt; 1 and then simply g_file_get_uri() instead of filenameToURL. Do we really need to check whether the file exists when it&apos;s a local path?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376222</commentid>
    <comment_count>23</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-30 05:46:55 -0700</bug_when>
    <thetext>Thanks very much for the comments, adding them and committing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376223</commentid>
    <comment_count>24</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-30 05:48:24 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; &gt; Tools/MiniBrowser/gtk/main.c:138
&gt; &gt; +    gchar *fileURL = filenameToURL(uri);
&gt; 
&gt; I think we could/should use g_file_new_for_commandline_arg() when argc &gt; 1 and then simply g_file_get_uri() instead of filenameToURL. Do we really need to check whether the file exists when it&apos;s a local path?

Just for the record, I&apos;m not adding this change because it chages the behavior of what the gtklauncher is already doing, it is a fair request, we can discuss if it is what we want in other bug. Thanks for the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376227</commentid>
    <comment_count>25</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-30 05:58:39 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #22)
&gt; &gt; &gt; Tools/MiniBrowser/gtk/main.c:138
&gt; &gt; &gt; +    gchar *fileURL = filenameToURL(uri);
&gt; &gt; 
&gt; &gt; I think we could/should use g_file_new_for_commandline_arg() when argc &gt; 1 and then simply g_file_get_uri() instead of filenameToURL. Do we really need to check whether the file exists when it&apos;s a local path?
&gt; 
&gt; Just for the record, I&apos;m not adding this change because it chages the behavior of what the gtklauncher is already doing, it is a fair request, we can discuss if it is what we want in other bug. Thanks for the comment.

After checking in more detail the implementation I realized the code is not doing exactly what I was thinking in the laucher, so I&apos;m proposing a solution with carlos suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376231</commentid>
    <comment_count>26</comment_count>
      <attachid>87511</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-30 06:04:39 -0700</bug_when>
    <thetext>Created attachment 87511
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376236</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-30 06:06:33 -0700</bug_when>
    <thetext>Attachment 87511 did not pass style-queue:

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

Tools/MiniBrowser/gtk/main.c:28:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 7 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>376735</commentid>
    <comment_count>28</comment_count>
      <attachid>87511</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-30 15:28:06 -0700</bug_when>
    <thetext>Comment on attachment 87511
Proposed patch

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

&gt; Tools/MiniBrowser/gtk/main.c:133
&gt; +    const gchar *uri = argc &gt; 1 ? argv[1] : &quot;http://www.webkitgtk.org/&quot;;
&gt; +    gchar *fileURL = filenameToURL(uri);
&gt; +
&gt; +    WKPageLoadURL(WKViewGetPage(webView), WKURLCreateWithURL(fileURL));
&gt; +    g_free(fileURL);

Please change this to be (including changing the name of filenameToURL to argumentToURL):

gchar* url = argumentToURL(argc &gt; 1 ? argv[1] : &quot;http://www.webkitgtk.org/&quot;);
WKPageLoadURL(WKViewGetPage(webView), WKURLCreateWithURL(url));
g_free(url);

We do not necessarily know if the argument is a path or a URL or whether the result is a file or web URL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377089</commentid>
    <comment_count>29</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-31 05:54:26 -0700</bug_when>
    <thetext>Thanks for the comments, landed: http://trac.webkit.org/changeset/82570</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72327</attachid>
            <date>2010-10-29 06:29:50 -0700</date>
            <delta_ts>2010-11-02 09:48:09 -0700</delta_ts>
            <desc>Implements sample GTK based Browser app on WebKit2</desc>
            <filename>MiniBrowser.diff</filename>
            <type>text/plain</type>
            <size>25744</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2Yzk3YTc0Li44MDQ5YzM1
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTAtMTAtMjkgIFZhbXNoaWtyaXNobmEuWWVsbGVua2kgIDx2YW1zaGlAbW90b3JvbGEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBNaW5pQnJvd3NlcihTYW1wbGUgQnJvd3NlcikgZm9yIFdlYktpdDIgR3RrIHBvcnQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMgorCisg
ICAgICAgICogR05VbWFrZWZpbGUuYW06IENoYW5nZXMgdG8gYnVpbGQgTWluaWJyb3dzZXIgQXBw
CisKIDIwMTAtMTAtMjggIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3JvbGEuY29tPiBhbmQg
UmF2aSBLYXNpYmhhdGxhICA8cmF2aS5rYXNpYmhhdGxhQG1vdG9yb2xhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFt
IGIvR05VbWFrZWZpbGUuYW0KaW5kZXggMTZkMDZjMC4uMjI2ZjRiMCAxMDA2NDQKLS0tIGEvR05V
bWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTU4NCw2ICs1ODQsNyBAQCBpbmNs
dWRlIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KICMgSW5jbHVkZSBtb2R1bGUgbWFrZWZpbGVzIGJh
c2VkIG9uIGJ1aWxkIHN5c3RlbQogaWYgRU5BQkxFX1dFQktJVDIKIGluY2x1ZGUgV2ViS2l0Mi9H
TlVtYWtlZmlsZS5hbQoraW5jbHVkZSBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9ndGsvR05VbWFr
ZWZpbGUuYW0KIAogZWxzZSAgI0VOQUJMRV9XRUJLSVQyCiBpbmNsdWRlIFdlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9HTlVtYWtlZmlsZS5hbQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGRhNWUyZjQuLjlmN2M1ZmMgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0NCBAQAorMjAxMC0xMC0yOSAgVmFtc2hpa3Jpc2huYS5ZZWxsZW5raSAgPHZh
bXNoaUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IE1pbmlCcm93c2VyIGZvciBHdGsgcG9ydC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTEyCisKKyAgICAgICAg
KiBNaW5pQnJvd3Nlci9ndGs6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9Ccm93
c2VyVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoQnJvd3NlclZpZXc6OkJyb3dzZXJWaWV3KToK
KyAgICAgICAgKEJyb3dzZXJWaWV3Ojp+QnJvd3NlclZpZXcpOgorICAgICAgICAoQnJvd3NlclZp
ZXc6OmxvYWRVcmwpOgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9Ccm93c2VyVmlldy5oOiBB
ZGRlZC4KKyAgICAgICAgKEJyb3dzZXJWaWV3OjpnZXRXZWJWaWV3KToKKyAgICAgICAgKEJyb3dz
ZXJWaWV3OjpnZXRQYWdlUmVmKToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvQnJvd3Nlcldp
bmRvdy5jcHA6IEFkZGVkLgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyk6
CisgICAgICAgIChCcm93c2VyV2luZG93Ojp+QnJvd3NlcldpbmRvdyk6CisgICAgICAgIChCcm93
c2VyV2luZG93OjpnZXRVcmxlbnRyeSk6CisgICAgICAgIChCcm93c2VyV2luZG93OjphY3RpdmF0
ZVVybEVudHJ5KToKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6OmdvdG9VUkwpOgorICAgICAgICAo
QnJvd3NlcldpbmRvdzo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6OnNo
b3dXaW5kb3cpOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6Y3JlYXRlTWVudWJhcik6CisgICAg
ICAgIChCcm93c2VyV2luZG93OjpjcmVhdGVUb29sYmFyKToKKyAgICAgICAgKEJyb3dzZXJXaW5k
b3c6OmNyZWF0ZUJyb3dzZXIpOgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2lu
ZG93Lmg6IEFkZGVkLgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6Y3JlYXRlKToKKyAgICAgICAg
KiBNaW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW06IEFkZGVkLgorICAgICAgICAqIE1pbmlC
cm93c2VyL2d0ay9NaW5pQnJvd3Nlci5jcHA6IEFkZGVkLgorICAgICAgICAoTWluaUJyb3dzZXI6
OnNoYXJlZCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6fk1pbmlCcm93c2VyKToKKyAgICAgICAg
KE1pbmlCcm93c2VyOjpjcmVhdGVOZXdXaW5kb3cpOgorICAgICAgICAoTWluaUJyb3dzZXI6OmNs
b3NlQ3VycmVudFdpbmRvdyk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6cmVnaXN0ZXJXaW5kb3cp
OgorICAgICAgICAoTWluaUJyb3dzZXI6OnVucmVnaXN0ZXJXaW5kb3cpOgorICAgICAgICAoTWlu
aUJyb3dzZXI6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL01pbmlC
cm93c2VyLmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9tYWluLmNwcDogQWRk
ZWQuCisgICAgICAgIChtYWluKToKKwogMjAxMC0xMC0yNyAgQWRhbSBSb2JlbiAgPGFyb2JlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgQ2F0Y2ggZXhjZXB0aW9ucyB3aGVuIGNoZWNraW5nIGlmIHdl
J3JlIGluc2lkZSBhIGdpdCB3b3JraW5nIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJWaWV3LmNwcCBiL1dlYktpdFRvb2xzL01pbmlCcm93
c2VyL2d0ay9Ccm93c2VyVmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZGZiZWNmOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0
ay9Ccm93c2VyVmlldy5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us
IAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
CisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSAKKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiAK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCAKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIAorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiQnJvd3NlclZpZXcuaCIKKworI2luY2x1ZGUgIkJyb3dzZXJXaW5kb3cuaCIK
KworQnJvd3NlclZpZXc6OkJyb3dzZXJWaWV3KCkKKyAgICA6IG1fd2t2aWV3KDApCit7Cit9CisK
K0Jyb3dzZXJWaWV3OjpCcm93c2VyVmlldyhHZGtSZWN0YW5nbGUgd2ViVmlld1JlY3QsIEd0a1dp
ZGdldCogcGFyZW50V2luZG93KQoreworICAgIFdLQ29udGV4dFJlZiBjb250ZXh0ID0gV0tDb250
ZXh0R2V0U2hhcmVkUHJvY2Vzc0NvbnRleHQoKTsKKworICAgIFdLUGFnZU5hbWVzcGFjZVJlZiBw
YWdlTmFtZXNwYWNlID0gV0tQYWdlTmFtZXNwYWNlQ3JlYXRlKGNvbnRleHQpOworICAgICAgICAg
ICAgCisgICAgbV93a3ZpZXcgPSBXS1ZpZXdDcmVhdGUod2ViVmlld1JlY3QsIHBhZ2VOYW1lc3Bh
Y2UsIHBhcmVudFdpbmRvdyk7Cit9CisKK0Jyb3dzZXJWaWV3Ojp+QnJvd3NlclZpZXcoKQorewor
ICAgIFdLUGFnZUNsb3NlKGdldFBhZ2VSZWYoKSk7Cit9CisKK3ZvaWQgQnJvd3NlclZpZXc6Omxv
YWRVcmwoY29uc3QgY2hhciogdXJsKQoreworICAgIFdLUGFnZUxvYWRVUkwoZ2V0UGFnZVJlZigp
LCBXS1VSTENyZWF0ZVdpdGhVUkwodXJsKSk7Cit9CisKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L01pbmlCcm93c2VyL2d0ay9Ccm93c2VyVmlldy5oIGIvV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIv
Z3RrL0Jyb3dzZXJWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5
MWM4OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93
c2VyVmlldy5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgor
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIAorICogb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCAKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSAK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIAorICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAorICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBCcm93c2VyVmlld19oCisjZGVmaW5lIEJyb3dzZXJWaWV3X2gKKworI2luY2x1ZGUgPFdlYktp
dDIvV2ViS2l0Mi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworY2xhc3MgQnJvd3NlclZpZXcg
eworcHVibGljOiAKKyAgICBCcm93c2VyVmlldygpOworICAgIEJyb3dzZXJWaWV3KEdka1JlY3Rh
bmdsZSB3ZWJWaWV3UmVjdCwgR3RrV2lkZ2V0KiBwYXJlbnRXaW5kb3cpOworICAgIH5Ccm93c2Vy
VmlldygpOworICAgIAorICAgIHZvaWQgbG9hZFVybChjb25zdCBjaGFyKiB1cmwpOworICAgIAor
ICAgIEd0a1dpZGdldCogZ2V0V2ViVmlldygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
V0tWaWV3R2V0V2luZG93KG1fd2t2aWV3KTsKKyAgICB9IAorCitwcml2YXRlOgorICAgIFdLUGFn
ZVJlZiBnZXRQYWdlUmVmKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXS1ZpZXdHZXRQ
YWdlKG1fd2t2aWV3KTsKKyAgICB9CisgICAgCisgICAgV0tWaWV3UmVmIG1fd2t2aWV3OworfTsK
KworI2VuZGlmIC8vIEJyb3dzZXJWaWV3X2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL01pbmlC
cm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmNwcCBiL1dlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0
ay9Ccm93c2VyV2luZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
YTlkZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jy
b3dzZXJXaW5kb3cuY3BwCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwg
CisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciAK
KyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IAorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqIHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIAorICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIAorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIAor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiAKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyAKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJCcm93c2VyV2luZG93LmgiCisKKyNpbmNsdWRlICJCcm93c2VyVmlldy5oIgor
I2luY2x1ZGUgIk1pbmlCcm93c2VyLmgiCisKK0Jyb3dzZXJXaW5kb3c6OkJyb3dzZXJXaW5kb3co
KQorICAgIDogbV9icm93c2VyVmlldygwKQorICAgICwgbV93aW5kb3dNYWluKDApCisgICAgLCBt
X3dpbmRvd0dyb3VwKDApCisgICAgLCBtX3dpbmRvd1VSTEVudHJ5KDApCit7Cit9CisKK0Jyb3dz
ZXJXaW5kb3c6On5Ccm93c2VyV2luZG93KCkKK3sKKyAgICBpZiAobV9icm93c2VyVmlldykgewor
ICAgICAgICBkZWxldGUgbV9icm93c2VyVmlldzsKKyAgICAgICAgbV9icm93c2VyVmlldyA9IDA7
CisgICAgfQorICAgIGd0a193aWRnZXRfZGVzdHJveShtX3dpbmRvd01haW4pOworfQorCitjb25z
dCBnY2hhciogQnJvd3NlcldpbmRvdzo6Z2V0VXJsZW50cnkoKQoreworICAgIHJldHVybiBndGtf
ZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKG1fd2luZG93VVJMRW50cnkpKTsKK30KKwordm9pZCBC
cm93c2VyV2luZG93OjphY3RpdmF0ZVVybEVudHJ5KEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRl
ciBkYXRhKQoreworICAgIEJyb3dzZXJXaW5kb3cqIGJyb3dzZXJXaW5kb3cgPSBzdGF0aWNfY2Fz
dDxCcm93c2VyV2luZG93Kj4oZGF0YSk7CisgICAgY29uc3QgZ2NoYXIqIHVybCA9IGJyb3dzZXJX
aW5kb3ctPmdldFVybGVudHJ5KCk7CisgICAgYnJvd3NlcldpbmRvdy0+Z290b1VSTCh1cmwpOwor
fQorCit2b2lkIEJyb3dzZXJXaW5kb3c6OmdvdG9VUkwoY29uc3QgY2hhciogdXJsKQoreworICAg
IG1fYnJvd3NlclZpZXctPmxvYWRVcmwodXJsKTsKK30KKwordm9pZCBCcm93c2VyV2luZG93Ojpj
cmVhdGVXaW5kb3coaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIEd0a1dpZGdldCogd2lu
ZG93VmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7CisgICAgCisgICAgbV93aW5kb3dNYWlu
ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZ3RrX3dpbmRvd19z
ZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1cobV93aW5kb3dNYWluKSwgd2lkdGgsIGhlaWdodCk7
CisgICAgZ3RrX3dpZGdldF9zZXRfbmFtZShtX3dpbmRvd01haW4sICJNaW5pQnJvd3NlciIpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QobV93aW5kb3dNYWluKSwgImRlc3Ryb3kiLCBH
X0NBTExCQUNLKE1pbmlCcm93c2VyOjpjbG9zZUN1cnJlbnRXaW5kb3cpLCAoZ3BvaW50ZXIpdGhp
cyk7CisKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh3aW5kb3dWYm94KSwgY3JlYXRl
TWVudWJhcigpLCBGQUxTRSwgRkFMU0UsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtf
Qk9YKHdpbmRvd1Zib3gpLCBjcmVhdGVUb29sYmFyKCksIEZBTFNFLCBGQUxTRSwgMCk7CisgICAg
Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1god2luZG93VmJveCksIGNyZWF0ZUJyb3dzZXIoKSwg
VFJVRSwgVFJVRSwgMCk7CisKKyAgICBndGtfd2luZG93X2FkZF9hY2NlbF9ncm91cChHVEtfV0lO
RE9XKG1fd2luZG93TWFpbiksIG1fd2luZG93R3JvdXApOworICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIobV93aW5kb3dNYWluKSwgd2luZG93VmJveCk7Cit9CisKK3ZvaWQgQnJv
d3NlcldpbmRvdzo6c2hvd1dpbmRvdygpCit7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdU
S19XSURHRVQobV9icm93c2VyVmlldy0+Z2V0V2ViVmlldygpKSk7CisgICAgZ3RrX3dpZGdldF9z
aG93X2FsbChtX3dpbmRvd01haW4pOworfQorCitHdGtXaWRnZXQqIEJyb3dzZXJXaW5kb3c6OmNy
ZWF0ZU1lbnViYXIoKQoreworICAgIEd0a1dpZGdldCogZmlsZSwgKmZpbGVNZW51LCAqd2luZG93
TmV3LCAqd2luZG93Q2xvc2U7CisgICAgR3RrV2lkZ2V0KiB3aW5kb3dNZW51YmFyID0gZ3RrX21l
bnVfYmFyX25ldygpOworICAgIG1fd2luZG93R3JvdXAgPSBndGtfYWNjZWxfZ3JvdXBfbmV3KCk7
CisKKyAgICBmaWxlID0gZ3RrX21lbnVfaXRlbV9uZXdfd2l0aF9sYWJlbCgiRmlsZSIpOworICAg
IGZpbGVNZW51ID0gZ3RrX21lbnVfbmV3KCk7CisgICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVu
dShHVEtfTUVOVV9JVEVNKGZpbGUpLCBmaWxlTWVudSk7CisgICAgZ3RrX21lbnVfc2hlbGxfYXBw
ZW5kKEdUS19NRU5VX1NIRUxMKHdpbmRvd01lbnViYXIpLCBmaWxlKTsKKworICAgIHdpbmRvd05l
dyA9IGd0a19pbWFnZV9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX05FVywgbV93
aW5kb3dHcm91cCk7CisgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVCh3aW5kb3dOZXcpLCAi
YWN0aXZhdGUiLCBHX0NBTExCQUNLKE1pbmlCcm93c2VyOjpjcmVhdGVOZXdXaW5kb3cpLCBOVUxM
KTsKKyAgICB3aW5kb3dDbG9zZSA9IGd0a19pbWFnZV9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2so
R1RLX1NUT0NLX1FVSVQsIG1fd2luZG93R3JvdXApOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19P
QkpFQ1Qod2luZG93Q2xvc2UpLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKE1pbmlCcm93c2VyOjpj
bG9zZUN1cnJlbnRXaW5kb3cpLCAoZ3BvaW50ZXIpdGhpcyk7CisgICAgZ3RrX21lbnVfc2hlbGxf
YXBwZW5kKEdUS19NRU5VX1NIRUxMKGZpbGVNZW51KSwgd2luZG93TmV3KTsKKyAgICBndGtfbWVu
dV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwoZmlsZU1lbnUpLCB3aW5kb3dDbG9zZSk7CisK
KyAgICByZXR1cm4gd2luZG93TWVudWJhcjsKK30KKworR3RrV2lkZ2V0KiBCcm93c2VyV2luZG93
OjpjcmVhdGVUb29sYmFyKCkKK3sKKyAgICBHdGtXaWRnZXQqIHdpbmRvd1Rvb2xiYXIgPSBndGtf
dG9vbGJhcl9uZXcoKTsKKyAgICBndGtfdG9vbGJhcl9zZXRfb3JpZW50YXRpb24oR1RLX1RPT0xC
QVIod2luZG93VG9vbGJhciksIEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKTsgCisgICAgZ3Rr
X3Rvb2xiYXJfc2V0X3N0eWxlKEdUS19UT09MQkFSKHdpbmRvd1Rvb2xiYXIpLCBHVEtfVE9PTEJB
Ul9CT1RIX0hPUklaKTsKKyAgICBHdGtUb29sSXRlbSogaXRlbTsKKworICAgIC8vIFRoZSBVUkwg
ZW50cnkKKyAgICBpdGVtID0gZ3RrX3Rvb2xfaXRlbV9uZXcoKTsKKyAgICBndGtfdG9vbF9pdGVt
X3NldF9leHBhbmQoaXRlbSwgVFJVRSk7CisgICAgbV93aW5kb3dVUkxFbnRyeSA9IGd0a19lbnRy
eV9uZXcoKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGl0ZW0pLCBtX3dp
bmRvd1VSTEVudHJ5KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKG1fd2luZG93VVJM
RW50cnkpLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKEJyb3dzZXJXaW5kb3c6OmFjdGl2YXRlVXJs
RW50cnkpLCAoZ3BvaW50ZXIpdGhpcyk7CisgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0KEdUS19UT09M
QkFSKHdpbmRvd1Rvb2xiYXIpLCBpdGVtLCAtMSk7IAorICAgIAorICAgIC8vIFRoZSBHbyBidXR0
b24KKyAgICBpdGVtID0gZ3RrX3Rvb2xfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19P
Syk7CisgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVChpdGVtKSwgImNsaWNrZWQiLCBHX0NB
TExCQUNLKEJyb3dzZXJXaW5kb3c6OmFjdGl2YXRlVXJsRW50cnkpLCAoZ3BvaW50ZXIpdGhpcyk7
CisgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0KEdUS19UT09MQkFSKHdpbmRvd1Rvb2xiYXIpLCBpdGVt
LCAtMSk7CisgICAgZ3RrX3Rvb2xiYXJfc2V0X2ljb25fc2l6ZShHVEtfVE9PTEJBUih3aW5kb3dU
b29sYmFyKSwgR1RLX0lDT05fU0laRV9TTUFMTF9UT09MQkFSKTsKKworICAgIHJldHVybiB3aW5k
b3dUb29sYmFyOworfQorCitHdGtXaWRnZXQqIEJyb3dzZXJXaW5kb3c6OmNyZWF0ZUJyb3dzZXIo
KQoreworICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisgICAgCisgICAgR3RrV2lkZ2V0
KiBzY3JvbGxlZFdpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KDAsIDApOworICAgIGd0
a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVk
V2luZG93KSwgR1RLX1BPTElDWV9BVVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKKyAg
ICAKKyAgICBndGtfd2lkZ2V0X2dldF9zaXplX3JlcXVlc3QobV93aW5kb3dNYWluLCAmd2lkdGgs
ICZoZWlnaHQpOworICAgIEdka1JlY3RhbmdsZSB3ZWJWaWV3UmVjdCA9IHswLCAwLCB3aWR0aCwg
aGVpZ2h0fTsKKyAgICBtX2Jyb3dzZXJWaWV3ID0gbmV3IEJyb3dzZXJWaWV3KHdlYlZpZXdSZWN0
LCBtX3dpbmRvd01haW4pOworICAgIAorICAgIGd0a19zY3JvbGxlZF93aW5kb3dfYWRkX3dpdGhf
dmlld3BvcnQoR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksIEdUS19XSURHRVQo
bV9icm93c2VyVmlldy0+Z2V0V2ViVmlldygpKSk7CisgICAKKyAgICByZXR1cm4gc2Nyb2xsZWRX
aW5kb3c7Cit9CisKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93
c2VyV2luZG93LmggYi9XZWJLaXRUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjY2Y1MGYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5oCkBAIC0w
LDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlv
biwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIAorICogb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSAKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIAorICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIAorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCcm93c2VyV2luZG93
X2gKKyNkZWZpbmUgQnJvd3NlcldpbmRvd19oCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK2Ns
YXNzIEJyb3dzZXJWaWV3OworCitjbGFzcyBCcm93c2VyV2luZG93IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgQnJvd3NlcldpbmRvdyogY3JlYXRlKCkKKyAgICB7ICAgCisgICAgICAgIHJldHVybiBu
ZXcgQnJvd3NlcldpbmRvdzsKKyAgICB9ICAgCisgICAgc3RhdGljIHZvaWQgYWN0aXZhdGVVcmxF
bnRyeShHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSk7CisKKyAgICB2b2lkIGNyZWF0
ZVdpbmRvdyhpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIHZvaWQgc2hvd1dpbmRvdygpOwor
ICAgIAorICAgIHZvaWQgZ290b1VSTChjb25zdCBjaGFyKiB1cmwpOworICAgIGNvbnN0IGdjaGFy
KiBnZXRVcmxlbnRyeSgpOworCisgICAgfkJyb3dzZXJXaW5kb3coKTsKKyAgICAKK3ByaXZhdGU6
CisgICAgQnJvd3NlcldpbmRvdygpOworCisgICAgR3RrV2lkZ2V0KiBjcmVhdGVNZW51YmFyKCk7
CisgICAgR3RrV2lkZ2V0KiBjcmVhdGVUb29sYmFyKCk7CisgICAgR3RrV2lkZ2V0KiBjcmVhdGVC
cm93c2VyKCk7CisKKyAgICBCcm93c2VyVmlldyAqbV9icm93c2VyVmlldzsKKyAgICBHdGtXaWRn
ZXQgKm1fd2luZG93TWFpbjsKKyAgICBHdGtBY2NlbEdyb3VwICptX3dpbmRvd0dyb3VwOworICAg
IEd0a1dpZGdldCAqbV93aW5kb3dVUkxFbnRyeTsKK307CisKKyNlbmRpZiAvLyBCcm93c2VyV2lu
ZG93X2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0ay9HTlVtYWtlZmls
ZS5hbSBiL1dlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0ay9HTlVtYWtlZmlsZS5hbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTYzYTZmCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNDUg
QEAKK01pbmlCcm93c2VyIDo9ICQoc3JjZGlyKS9XZWJLaXRUb29scy9NaW5pQnJvd3Nlci9ndGsK
K01pbmlCcm93c2VyRndkSGVhZGVycyA6PSAkKEdFTlNPVVJDRVNfV0VCS0lUMikvaW5jbHVkZQor
CisjTWluaUJyb3dzZXIKK2Jpbl9QUk9HUkFNUyArPSBcCisJUHJvZ3JhbXMvTWluaUJyb3dzZXIK
KworUHJvZ3JhbXNfTWluaUJyb3dzZXJfQ1BQRkxBR1MgPSBcCisJLUkkKHNyY2RpcikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlIFwKKwktSSQoc3JjZGlyKS9XZWJLaXQyIFwKKwktSSQo
c3JjZGlyKS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQyBcCisJLUkkKHNyY2RpcikvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ayBcCisJLUkkKHNyY2RpcikvV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIv
Z3RrIFwKKwktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQyIFwKKwkkKGdsb2JhbF9jcHBmbGFncykg
XAorCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKKwkkKEdUS19DRkxBR1MpCisKK1Byb2dy
YW1zX01pbmlCcm93c2VyX1NPVVJDRVMgPSBcCisJV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvZ3Rr
L0Jyb3dzZXJWaWV3LmNwcCBcCisJV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJW
aWV3LmggXAorCVdlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmNwcCBc
CisJV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuaCBcCisJV2ViS2l0
VG9vbHMvTWluaUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmNwcCBcCisJV2ViS2l0VG9vbHMvTWlu
aUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmggXAorCVdlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0
ay9tYWluLmNwcAorCitCVUlMVF9TT1VSQ0VTICs9IFwKKwlXZWJLaXQyLmgJCisKK1dlYktpdDIu
aDogJChzcmNkaXIpL1dlYktpdFRvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFk
ZXJzLnBsCisJJChBTV9WX0dFTikkKFBFUkwpICQ8ICQoTWluaUJyb3dzZXIpICQoTWluaUJyb3dz
ZXJGd2RIZWFkZXJzKSBndGsgIiIKKworUHJvZ3JhbXNfTWluaUJyb3dzZXJfTERBREQgPSBcCisJ
bGliSmF2YVNjcmlwdENvcmUubGEgXAorCWxpYkBMSUJXRUJLSVRHVEtfTkFNRUAtQFdFQktJVEdU
S19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAor
CSQoR0xJQl9MSUJTKSBcCisJJChHVEtfTElCUykKKworUHJvZ3JhbXNfTWluaUJyb3dzZXJfTERG
TEFHUyA9IFwKKwktbm8tZmFzdC1pbnN0YWxsIFwKKwktbm8taW5zdGFsbAorCitDTEVBTkZJTEVT
ICs9IFwKKwkkKHRvcF9idWlsZGRpcikvUHJvZ3JhbXMvTWluaUJyb3dzZXIKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0ay9NaW5pQnJvd3Nlci5jcHAgYi9XZWJLaXRUb29s
cy9NaW5pQnJvd3Nlci9ndGsvTWluaUJyb3dzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE0MjUyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9NaW5p
QnJvd3Nlci9ndGsvTWluaUJyb3dzZXIuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIAorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgCisgKiBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IAorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgT1IgCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IAorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSAKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIAorICogTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAorICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIk1pbmlCcm93c2VyLmgiCisKKyNpbmNsdWRlICJCcm93c2Vy
V2luZG93LmgiCisKK01pbmlCcm93c2VyKiBNaW5pQnJvd3Nlcjo6c2hhcmVkKCkKK3sKKyAgICBz
dGF0aWMgTWluaUJyb3dzZXIqIGluc3RhbmNlID0gMDsKKyAgICBpZiAoIWluc3RhbmNlKQorICAg
ICAgICBpbnN0YW5jZSA9IG5ldyBNaW5pQnJvd3NlcigpOworICAgIHJldHVybiBpbnN0YW5jZTsK
K30KKworTWluaUJyb3dzZXI6On5NaW5pQnJvd3NlcigpCit7CisgICAgbV9icm93c2VyV2luZG93
cy5jbGVhcigpOworICAgIGd0a19tYWluX3F1aXQoKTsKK30KKwordm9pZCBNaW5pQnJvd3Nlcjo6
Y3JlYXRlTmV3V2luZG93KEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQoreworICAg
IE1pbmlCcm93c2VyOjpzaGFyZWQoKS0+Y3JlYXRlV2luZG93KCk7Cit9CisKK3ZvaWQgTWluaUJy
b3dzZXI6OmNsb3NlQ3VycmVudFdpbmRvdyhHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0
YSkKK3sKKyAgICBCcm93c2VyV2luZG93KiB3aW5kb3cgPSBzdGF0aWNfY2FzdDxCcm93c2VyV2lu
ZG93Kj4oZGF0YSk7CisgICAgTWluaUJyb3dzZXI6OnNoYXJlZCgpLT51bnJlZ2lzdGVyV2luZG93
KHdpbmRvdyk7Cit9CisKK3ZvaWQgTWluaUJyb3dzZXI6OnJlZ2lzdGVyV2luZG93KEJyb3dzZXJX
aW5kb3cqIHdpbmRvdykKK3sKKyAgICBtX2Jyb3dzZXJXaW5kb3dzLmluc2VydCh3aW5kb3cpOwor
fQorCit2b2lkIE1pbmlCcm93c2VyOjp1bnJlZ2lzdGVyV2luZG93KEJyb3dzZXJXaW5kb3cqIHdp
bmRvdykKK3sKKyAgICBzdGQ6OnNldDxCcm93c2VyV2luZG93Kj46Oml0ZXJhdG9yIGl0OworICAg
IGl0ID0gbV9icm93c2VyV2luZG93cy5maW5kKHdpbmRvdyk7CisgICAgaWYgKGl0ID09IG1fYnJv
d3NlcldpbmRvd3MuZW5kKCkpIAorICAgICAgICByZXR1cm47CisKKyAgICBtX2Jyb3dzZXJXaW5k
b3dzLmVyYXNlKHdpbmRvdyk7CisgICAgZGVsZXRlIHdpbmRvdzsKKyAgICB3aW5kb3cgPSAwOwor
ICAgIAorICAgIGlmIChtX2Jyb3dzZXJXaW5kb3dzLmVtcHR5KCkpCisgICAgICAgIGd0a19tYWlu
X3F1aXQoKTsKK30KKwordm9pZCBNaW5pQnJvd3Nlcjo6Y3JlYXRlV2luZG93KCkKK3sKKyAgICBC
cm93c2VyV2luZG93KiBicm93c2VyV2luZG93ID0gQnJvd3NlcldpbmRvdzo6Y3JlYXRlKCk7Cisg
ICAgcmVnaXN0ZXJXaW5kb3coYnJvd3NlcldpbmRvdyk7CisgICAgYnJvd3NlcldpbmRvdy0+Y3Jl
YXRlV2luZG93KDgwMCwgNjAwKTsKKyAgICBicm93c2VyV2luZG93LT5nb3RvVVJMKCJodHRwOi8v
d2Via2l0Lm9yZyIpOworICAgIGJyb3dzZXJXaW5kb3ctPnNob3dXaW5kb3coKTsKK30KZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0ay9NaW5pQnJvd3Nlci5oIGIvV2ViS2l0
VG9vbHMvTWluaUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjAzYWZlMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL01p
bmlCcm93c2VyL2d0ay9NaW5pQnJvd3Nlci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIAorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgCisgKiBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IAorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgT1IgCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IAorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSAKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIAorICogTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAorICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBNaW5pQnJvd3Nlcl9oCisjZGVmaW5lIE1pbmlCcm93c2VyX2gK
KworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxzZXQ+CisKK2NsYXNzIEJyb3dzZXJX
aW5kb3c7CisKK2NsYXNzIE1pbmlCcm93c2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgTWluaUJy
b3dzZXIqIHNoYXJlZCgpOworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU5ld1dpbmRvdyhHdGtXaWRn
ZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSk7CisgICAgc3RhdGljIHZvaWQgY2xvc2VDdXJyZW50
V2luZG93KEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKTsKKworICAgIH5NaW5pQnJv
d3NlcigpOworICAgIAorICAgIHZvaWQgY3JlYXRlV2luZG93KCk7CisgICAgdm9pZCByZWdpc3Rl
cldpbmRvdyhCcm93c2VyV2luZG93Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVyV2luZG93KEJyb3dz
ZXJXaW5kb3cqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RkOjpzZXQ8QnJvd3NlcldpbmRvdyo+
IG1fYnJvd3NlcldpbmRvd3M7ICAgIAorfTsKKworI2VuZGlmIC8vIE1pbmlCcm93c2VyX2gKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmNwcCBiL1dlYktpdFRv
b2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jNDNjMTRjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvTWluaUJyb3dz
ZXIvZ3RrL21haW4uY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAK
KyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIAor
ICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCAKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSAKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIAorICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAorICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgIk1pbmlCcm93c2VyLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK2ludCBt
YWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCit7CisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2
KTsKKyAgICAKKyAgICBNaW5pQnJvd3Nlcjo6c2hhcmVkKCktPmNyZWF0ZVdpbmRvdygpOworICAg
IGd0a19tYWluKCk7CisgICAgCisgICAgcmV0dXJuIDA7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72687</attachid>
            <date>2010-11-02 09:47:15 -0700</date>
            <delta_ts>2011-01-07 07:24:22 -0800</delta_ts>
            <desc>MiniBrowser implementation for WebKit2 GTK port</desc>
            <filename>MiniBrowser.patch</filename>
            <type>text/plain</type>
            <size>25114</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUxNzA1KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA1MTcxOSkKQEAgLTEsMyArMSw0NCBAQAorMjAxMC0xMC0yOSAgVmFtc2hpa3Jpc2huYS5Z
ZWxsZW5raSAgPHZhbXNoaUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IE1pbmlCcm93c2VyIGZvciBHdGsgcG9y
dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTEy
CisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGs6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93
c2VyL2d0ay9Ccm93c2VyVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoQnJvd3NlclZpZXc6OkJy
b3dzZXJWaWV3KToKKyAgICAgICAgKEJyb3dzZXJWaWV3Ojp+QnJvd3NlclZpZXcpOgorICAgICAg
ICAoQnJvd3NlclZpZXc6OmxvYWRVcmwpOgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9Ccm93
c2VyVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKEJyb3dzZXJWaWV3OjpnZXRXZWJWaWV3KToKKyAg
ICAgICAgKEJyb3dzZXJWaWV3OjpnZXRQYWdlUmVmKToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9n
dGsvQnJvd3NlcldpbmRvdy5jcHA6IEFkZGVkLgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6QnJv
d3NlcldpbmRvdyk6CisgICAgICAgIChCcm93c2VyV2luZG93Ojp+QnJvd3NlcldpbmRvdyk6Cisg
ICAgICAgIChCcm93c2VyV2luZG93OjpnZXRVcmxlbnRyeSk6CisgICAgICAgIChCcm93c2VyV2lu
ZG93OjphY3RpdmF0ZVVybEVudHJ5KToKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6OmdvdG9VUkwp
OgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKEJyb3dz
ZXJXaW5kb3c6OnNob3dXaW5kb3cpOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6Y3JlYXRlTWVu
dWJhcik6CisgICAgICAgIChCcm93c2VyV2luZG93OjpjcmVhdGVUb29sYmFyKToKKyAgICAgICAg
KEJyb3dzZXJXaW5kb3c6OmNyZWF0ZUJyb3dzZXIpOgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0
ay9Ccm93c2VyV2luZG93Lmg6IEFkZGVkLgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6Y3JlYXRl
KToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW06IEFkZGVkLgorICAg
ICAgICAqIE1pbmlCcm93c2VyL2d0ay9NaW5pQnJvd3Nlci5jcHA6IEFkZGVkLgorICAgICAgICAo
TWluaUJyb3dzZXI6OnNoYXJlZCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6fk1pbmlCcm93c2Vy
KToKKyAgICAgICAgKE1pbmlCcm93c2VyOjpjcmVhdGVOZXdXaW5kb3cpOgorICAgICAgICAoTWlu
aUJyb3dzZXI6OmNsb3NlQ3VycmVudFdpbmRvdyk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6cmVn
aXN0ZXJXaW5kb3cpOgorICAgICAgICAoTWluaUJyb3dzZXI6OnVucmVnaXN0ZXJXaW5kb3cpOgor
ICAgICAgICAoTWluaUJyb3dzZXI6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgICogTWluaUJyb3dz
ZXIvZ3RrL01pbmlCcm93c2VyLmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9t
YWluLmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKwogMjAxMC0xMC0yNyAgQWRhbSBSb2Jl
biAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2F0Y2ggZXhjZXB0aW9ucyB3aGVuIGNo
ZWNraW5nIGlmIHdlJ3JlIGluc2lkZSBhIGdpdCB3b3JraW5nIGRpcmVjdG9yeQpJbmRleDogV2Vi
S2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlclZpZXcuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJWaWV3LmNwcAkocmV2aXNpb24g
NTE3MTkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3Jv
bGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIAorICogb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCAKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSAKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIAorICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAorICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
IkJyb3dzZXJWaWV3LmgiCisKKyNpbmNsdWRlICJCcm93c2VyV2luZG93LmgiCisKK0Jyb3dzZXJW
aWV3OjpCcm93c2VyVmlldygpCisgICAgOiBtX3drdmlldygwKQoreworfQorCitCcm93c2VyVmll
dzo6QnJvd3NlclZpZXcoR2RrUmVjdGFuZ2xlIHdlYlZpZXdSZWN0LCBHdGtXaWRnZXQqIHBhcmVu
dFdpbmRvdykKK3sKKyAgICBXS0NvbnRleHRSZWYgY29udGV4dCA9IFdLQ29udGV4dEdldFNoYXJl
ZFByb2Nlc3NDb250ZXh0KCk7CisKKyAgICBXS1BhZ2VOYW1lc3BhY2VSZWYgcGFnZU5hbWVzcGFj
ZSA9IFdLUGFnZU5hbWVzcGFjZUNyZWF0ZShjb250ZXh0KTsKKyAgICAgICAgICAgIAorICAgIG1f
d2t2aWV3ID0gV0tWaWV3Q3JlYXRlKHdlYlZpZXdSZWN0LCBwYWdlTmFtZXNwYWNlLCBwYXJlbnRX
aW5kb3cpOworfQorCitCcm93c2VyVmlldzo6fkJyb3dzZXJWaWV3KCkKK3sKKyAgICBXS1BhZ2VD
bG9zZShnZXRQYWdlUmVmKCkpOworfQorCit2b2lkIEJyb3dzZXJWaWV3Ojpsb2FkVXJsKGNvbnN0
IGNoYXIqIHVybCkKK3sKKyAgICBXS1BhZ2VMb2FkVVJMKGdldFBhZ2VSZWYoKSwgV0tVUkxDcmVh
dGVXaXRoVVJMKHVybCkpOworfQorCkluZGV4OiBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9ndGsv
QnJvd3NlcldpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0
ay9Ccm93c2VyV2luZG93LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9NaW5pQnJvd3Nl
ci9ndGsvQnJvd3NlcldpbmRvdy5oCShyZXZpc2lvbiA1MTcxOSkKQEAgLTAsMCArMSw2NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3IgCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSAKKyAqIGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUyAKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiAKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBPUiAKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCAKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIAorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgCisgKiBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJyb3dzZXJXaW5kb3dfaAorI2RlZmluZSBC
cm93c2VyV2luZG93X2gKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworY2xhc3MgQnJvd3NlclZp
ZXc7CisKK2NsYXNzIEJyb3dzZXJXaW5kb3cgeworcHVibGljOgorICAgIHN0YXRpYyBCcm93c2Vy
V2luZG93KiBjcmVhdGUoKQorICAgIHsgICAKKyAgICAgICAgcmV0dXJuIG5ldyBCcm93c2VyV2lu
ZG93OworICAgIH0gICAKKyAgICBzdGF0aWMgdm9pZCBhY3RpdmF0ZVVybEVudHJ5KEd0a1dpZGdl
dCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKTsKKworICAgIHZvaWQgY3JlYXRlV2luZG93KGludCB3
aWR0aCwgaW50IGhlaWdodCk7CisgICAgdm9pZCBzaG93V2luZG93KCk7CisgICAgCisgICAgdm9p
ZCBnb3RvVVJMKGNvbnN0IGNoYXIqIHVybCk7CisgICAgY29uc3QgZ2NoYXIqIGdldFVybGVudHJ5
KCk7CisKKyAgICB+QnJvd3NlcldpbmRvdygpOworICAgIAorcHJpdmF0ZToKKyAgICBCcm93c2Vy
V2luZG93KCk7CisKKyAgICBHdGtXaWRnZXQqIGNyZWF0ZU1lbnViYXIoKTsKKyAgICBHdGtXaWRn
ZXQqIGNyZWF0ZVRvb2xiYXIoKTsKKyAgICBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoKTsKKwor
ICAgIEJyb3dzZXJWaWV3ICptX2Jyb3dzZXJWaWV3OworICAgIEd0a1dpZGdldCAqbV93aW5kb3dN
YWluOworICAgIEd0a0FjY2VsR3JvdXAgKm1fd2luZG93R3JvdXA7CisgICAgR3RrV2lkZ2V0ICpt
X3dpbmRvd1VSTEVudHJ5OworfTsKKworI2VuZGlmIC8vIEJyb3dzZXJXaW5kb3dfaApJbmRleDog
V2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9ndGsvTWluaUJyb3dzZXIuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmNwcAkocmV2aXNp
b24gNTE3MTkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgor
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIAorICogb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCAKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSAK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIAorICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAorICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgIk1pbmlCcm93c2VyLmgiCisKKyNpbmNsdWRlICJCcm93c2VyV2luZG93LmgiCisKK01pbmlC
cm93c2VyKiBNaW5pQnJvd3Nlcjo6c2hhcmVkKCkKK3sKKyAgICBzdGF0aWMgTWluaUJyb3dzZXIq
IGluc3RhbmNlID0gMDsKKyAgICBpZiAoIWluc3RhbmNlKQorICAgICAgICBpbnN0YW5jZSA9IG5l
dyBNaW5pQnJvd3NlcigpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworTWluaUJyb3dzZXI6
On5NaW5pQnJvd3NlcigpCit7CisgICAgbV9icm93c2VyV2luZG93cy5jbGVhcigpOworICAgIGd0
a19tYWluX3F1aXQoKTsKK30KKwordm9pZCBNaW5pQnJvd3Nlcjo6Y3JlYXRlTmV3V2luZG93KEd0
a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQoreworICAgIE1pbmlCcm93c2VyOjpzaGFy
ZWQoKS0+Y3JlYXRlV2luZG93KCk7Cit9CisKK3ZvaWQgTWluaUJyb3dzZXI6OmNsb3NlQ3VycmVu
dFdpbmRvdyhHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBCcm93c2Vy
V2luZG93KiB3aW5kb3cgPSBzdGF0aWNfY2FzdDxCcm93c2VyV2luZG93Kj4oZGF0YSk7CisgICAg
TWluaUJyb3dzZXI6OnNoYXJlZCgpLT51bnJlZ2lzdGVyV2luZG93KHdpbmRvdyk7Cit9CisKK3Zv
aWQgTWluaUJyb3dzZXI6OnJlZ2lzdGVyV2luZG93KEJyb3dzZXJXaW5kb3cqIHdpbmRvdykKK3sK
KyAgICBtX2Jyb3dzZXJXaW5kb3dzLmluc2VydCh3aW5kb3cpOworfQorCit2b2lkIE1pbmlCcm93
c2VyOjp1bnJlZ2lzdGVyV2luZG93KEJyb3dzZXJXaW5kb3cqIHdpbmRvdykKK3sKKyAgICBzdGQ6
OnNldDxCcm93c2VyV2luZG93Kj46Oml0ZXJhdG9yIGl0OworICAgIGl0ID0gbV9icm93c2VyV2lu
ZG93cy5maW5kKHdpbmRvdyk7CisgICAgaWYgKGl0ID09IG1fYnJvd3NlcldpbmRvd3MuZW5kKCkp
IAorICAgICAgICByZXR1cm47CisKKyAgICBtX2Jyb3dzZXJXaW5kb3dzLmVyYXNlKHdpbmRvdyk7
CisgICAgZGVsZXRlIHdpbmRvdzsKKyAgICB3aW5kb3cgPSAwOworICAgIAorICAgIGlmIChtX2Jy
b3dzZXJXaW5kb3dzLmVtcHR5KCkpCisgICAgICAgIGd0a19tYWluX3F1aXQoKTsKK30KKwordm9p
ZCBNaW5pQnJvd3Nlcjo6Y3JlYXRlV2luZG93KCkKK3sKKyAgICBCcm93c2VyV2luZG93KiBicm93
c2VyV2luZG93ID0gQnJvd3NlcldpbmRvdzo6Y3JlYXRlKCk7CisgICAgcmVnaXN0ZXJXaW5kb3co
YnJvd3NlcldpbmRvdyk7CisgICAgYnJvd3NlcldpbmRvdy0+Y3JlYXRlV2luZG93KDgwMCwgNjAw
KTsKKyAgICBicm93c2VyV2luZG93LT5nb3RvVVJMKCJodHRwOi8vd2Via2l0Lm9yZyIpOworICAg
IGJyb3dzZXJXaW5kb3ctPnNob3dXaW5kb3coKTsKK30KSW5kZXg6IFdlYktpdFRvb2xzL01pbmlC
cm93c2VyL2d0ay9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9NaW5p
QnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9N
aW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDUxNzE5KQpAQCAtMCwwICsx
LDQ0IEBACisjTWluaUJyb3dzZXIKK2Jpbl9QUk9HUkFNUyArPSBcCisJUHJvZ3JhbXMvTWluaUJy
b3dzZXIKKworUHJvZ3JhbXNfTWluaUJyb3dzZXJfQ1BQRkxBR1MgPSBcCisJLUkkKHNyY2Rpcikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlIFwKKwktSSQoc3JjZGlyKS9XZWJLaXQyIFwK
KwktSSQoc3JjZGlyKS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQyBcCisJLUkkKHNyY2RpcikvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ayBcCisJLUkkKHNyY2RpcikvV2ViS2l0VG9vbHMvTWluaUJy
b3dzZXIvZ3RrIFwKKwktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQyIFwKKwkkKGdsb2JhbF9jcHBm
bGFncykgXAorCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKKwkkKEdUS19DRkxBR1MpCisK
K1Byb2dyYW1zX01pbmlCcm93c2VyX1NPVVJDRVMgPSBcCisJV2ViS2l0VG9vbHMvTWluaUJyb3dz
ZXIvZ3RrL0Jyb3dzZXJWaWV3LmNwcCBcCisJV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jy
b3dzZXJWaWV3LmggXAorCVdlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93
LmNwcCBcCisJV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuaCBcCisJ
V2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmNwcCBcCisJV2ViS2l0VG9v
bHMvTWluaUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmggXAorCVdlYktpdFRvb2xzL01pbmlCcm93
c2VyL2d0ay9tYWluLmNwcAorCitCVUlMVF9TT1VSQ0VTICs9IFwKKwlXZWJLaXQyLmgJCisKK01p
bmlCcm93c2VyIDo9ICQoc3JjZGlyKS9XZWJLaXRUb29scy9NaW5pQnJvd3Nlci9ndGsKK01pbmlC
cm93c2VyRndkSGVhZGVycyA6PSAkKEdFTlNPVVJDRVNfV0VCS0lUMikvaW5jbHVkZQorV2ViS2l0
Mi5oOiAkKHNyY2RpcikvV2ViS2l0VG9vbHMvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhl
YWRlcnMucGwKKwkkKEFNX1ZfR0VOKSQoUEVSTCkgJDwgJChNaW5pQnJvd3NlcikgJChNaW5pQnJv
d3NlckZ3ZEhlYWRlcnMpIGd0ayAiIgorCitQcm9ncmFtc19NaW5pQnJvd3Nlcl9MREFERCA9IFwK
KwlsaWJKYXZhU2NyaXB0Q29yZS5sYSBcCisJbGliQExJQldFQktJVEdUS19OQU1FQC1AV0VCS0lU
R1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBc
CisJJChHTElCX0xJQlMpIFwKKwkkKEdUS19MSUJTKQorCitQcm9ncmFtc19NaW5pQnJvd3Nlcl9M
REZMQUdTID0gXAorCS1uby1mYXN0LWluc3RhbGwgXAorCS1uby1pbnN0YWxsCisKK0NMRUFORklM
RVMgKz0gXAorCSQodG9wX2J1aWxkZGlyKS9Qcm9ncmFtcy9NaW5pQnJvd3NlcgpJbmRleDogV2Vi
S2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXRUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlclZpZXcuaAkocmV2aXNpb24gNTE3MTkp
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlm
aWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIAorICogb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCAKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSAKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIAorICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCcm93c2Vy
Vmlld19oCisjZGVmaW5lIEJyb3dzZXJWaWV3X2gKKworI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0
Mi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworY2xhc3MgQnJvd3NlclZpZXcgeworcHVibGlj
OiAKKyAgICBCcm93c2VyVmlldygpOworICAgIEJyb3dzZXJWaWV3KEdka1JlY3RhbmdsZSB3ZWJW
aWV3UmVjdCwgR3RrV2lkZ2V0KiBwYXJlbnRXaW5kb3cpOworICAgIH5Ccm93c2VyVmlldygpOwor
ICAgIAorICAgIHZvaWQgbG9hZFVybChjb25zdCBjaGFyKiB1cmwpOworICAgIAorICAgIEd0a1dp
ZGdldCogZ2V0V2ViVmlldygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV0tWaWV3R2V0
V2luZG93KG1fd2t2aWV3KTsKKyAgICB9IAorCitwcml2YXRlOgorICAgIFdLUGFnZVJlZiBnZXRQ
YWdlUmVmKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKG1fd2t2
aWV3KTsKKyAgICB9CisgICAgCisgICAgV0tWaWV3UmVmIG1fd2t2aWV3OworfTsKKworI2VuZGlm
IC8vIEJyb3dzZXJWaWV3X2gKSW5kZXg6IFdlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0ay9tYWlu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jcHAJKHJl
dmlzaW9uIDUxNzE5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEw
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisg
KiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciAKKyAq
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
TmVpdGhlciB0aGUgbmFtZSBvZiBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMgbWF5IAorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqIHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIAorICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIAorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIAorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiAKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyAKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyAKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJNaW5pQnJvd3Nlci5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7
CisgICAgCisgICAgTWluaUJyb3dzZXI6OnNoYXJlZCgpLT5jcmVhdGVXaW5kb3coKTsKKyAgICBn
dGtfbWFpbigpOworICAgIAorICAgIHJldHVybiAwOworfQpJbmRleDogV2ViS2l0VG9vbHMvTWlu
aUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvTWlu
aUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9N
aW5pQnJvd3Nlci9ndGsvTWluaUJyb3dzZXIuaAkocmV2aXNpb24gNTE3MTkpCkBAIC0wLDAgKzEs
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisg
KiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAK
KyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIAorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9y
b2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
CisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMgCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIAorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSAKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIAor
ICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIAorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNaW5pQnJvd3Nlcl9oCisjZGVm
aW5lIE1pbmlCcm93c2VyX2gKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxzZXQ+
CisKK2NsYXNzIEJyb3dzZXJXaW5kb3c7CisKK2NsYXNzIE1pbmlCcm93c2VyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgTWluaUJyb3dzZXIqIHNoYXJlZCgpOworICAgIHN0YXRpYyB2b2lkIGNyZWF0
ZU5ld1dpbmRvdyhHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSk7CisgICAgc3RhdGlj
IHZvaWQgY2xvc2VDdXJyZW50V2luZG93KEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRh
KTsKKworICAgIH5NaW5pQnJvd3NlcigpOworICAgIAorICAgIHZvaWQgY3JlYXRlV2luZG93KCk7
CisgICAgdm9pZCByZWdpc3RlcldpbmRvdyhCcm93c2VyV2luZG93Kik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyV2luZG93KEJyb3dzZXJXaW5kb3cqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RkOjpz
ZXQ8QnJvd3NlcldpbmRvdyo+IG1fYnJvd3NlcldpbmRvd3M7ICAgIAorfTsKKworI2VuZGlmIC8v
IE1pbmlCcm93c2VyX2gKSW5kZXg6IFdlYktpdFRvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2Vy
V2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJv
d3NlcldpbmRvdy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9n
dGsvQnJvd3NlcldpbmRvdy5jcHAJKHJldmlzaW9uIDUxNzE5KQpAQCAtMCwwICsxLDE1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3IgCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSAKKyAqIGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUyAKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiAKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBPUiAKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCAKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIAorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgCisgKiBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiQnJvd3NlcldpbmRvdy5oIgorCisjaW5j
bHVkZSAiQnJvd3NlclZpZXcuaCIKKyNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgorCitCcm93c2Vy
V2luZG93OjpCcm93c2VyV2luZG93KCkKKyAgICA6IG1fYnJvd3NlclZpZXcoMCkKKyAgICAsIG1f
d2luZG93TWFpbigwKQorICAgICwgbV93aW5kb3dHcm91cCgwKQorICAgICwgbV93aW5kb3dVUkxF
bnRyeSgwKQoreworfQorCitCcm93c2VyV2luZG93Ojp+QnJvd3NlcldpbmRvdygpCit7CisgICAg
aWYgKG1fYnJvd3NlclZpZXcpIHsKKyAgICAgICAgZGVsZXRlIG1fYnJvd3NlclZpZXc7CisgICAg
ICAgIG1fYnJvd3NlclZpZXcgPSAwOworICAgIH0KKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV93
aW5kb3dNYWluKTsKK30KKworY29uc3QgZ2NoYXIqIEJyb3dzZXJXaW5kb3c6OmdldFVybGVudHJ5
KCkKK3sKKyAgICByZXR1cm4gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShtX3dpbmRvd1VS
TEVudHJ5KSk7Cit9CisKK3ZvaWQgQnJvd3NlcldpbmRvdzo6YWN0aXZhdGVVcmxFbnRyeShHdGtX
aWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBCcm93c2VyV2luZG93KiBicm93
c2VyV2luZG93ID0gc3RhdGljX2Nhc3Q8QnJvd3NlcldpbmRvdyo+KGRhdGEpOworICAgIGNvbnN0
IGdjaGFyKiB1cmwgPSBicm93c2VyV2luZG93LT5nZXRVcmxlbnRyeSgpOworICAgIGJyb3dzZXJX
aW5kb3ctPmdvdG9VUkwodXJsKTsKK30KKwordm9pZCBCcm93c2VyV2luZG93Ojpnb3RvVVJMKGNv
bnN0IGNoYXIqIHVybCkKK3sKKyAgICBtX2Jyb3dzZXJWaWV3LT5sb2FkVXJsKHVybCk7Cit9CisK
K3ZvaWQgQnJvd3NlcldpbmRvdzo6Y3JlYXRlV2luZG93KGludCB3aWR0aCwgaW50IGhlaWdodCkK
K3sKKyAgICBHdGtXaWRnZXQqIHdpbmRvd1Zib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApOwor
ICAgIAorICAgIG1fd2luZG93TWFpbiA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVW
RUwpOworICAgIGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKG1fd2luZG93
TWFpbiksIHdpZHRoLCBoZWlnaHQpOworICAgIGd0a193aWRnZXRfc2V0X25hbWUobV93aW5kb3dN
YWluLCAiTWluaUJyb3dzZXIiKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKG1fd2lu
ZG93TWFpbiksICJkZXN0cm95IiwgR19DQUxMQkFDSyhNaW5pQnJvd3Nlcjo6Y2xvc2VDdXJyZW50
V2luZG93KSwgKGdwb2ludGVyKXRoaXMpOworCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19C
T1god2luZG93VmJveCksIGNyZWF0ZU1lbnViYXIoKSwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBn
dGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh3aW5kb3dWYm94KSwgY3JlYXRlVG9vbGJhcigpLCBG
QUxTRSwgRkFMU0UsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHdpbmRvd1Zi
b3gpLCBjcmVhdGVCcm93c2VyKCksIFRSVUUsIFRSVUUsIDApOworCisgICAgZ3RrX3dpbmRvd19h
ZGRfYWNjZWxfZ3JvdXAoR1RLX1dJTkRPVyhtX3dpbmRvd01haW4pLCBtX3dpbmRvd0dyb3VwKTsK
KyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fd2luZG93TWFpbiksIHdpbmRv
d1Zib3gpOworfQorCit2b2lkIEJyb3dzZXJXaW5kb3c6OnNob3dXaW5kb3coKQoreworICAgIGd0
a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKG1fYnJvd3NlclZpZXctPmdldFdlYlZpZXco
KSkpOworICAgIGd0a193aWRnZXRfc2hvd19hbGwobV93aW5kb3dNYWluKTsKK30KKworR3RrV2lk
Z2V0KiBCcm93c2VyV2luZG93OjpjcmVhdGVNZW51YmFyKCkKK3sKKyAgICBHdGtXaWRnZXQqIGZp
bGUsICpmaWxlTWVudSwgKndpbmRvd05ldywgKndpbmRvd0Nsb3NlOworICAgIEd0a1dpZGdldCog
d2luZG93TWVudWJhciA9IGd0a19tZW51X2Jhcl9uZXcoKTsKKyAgICBtX3dpbmRvd0dyb3VwID0g
Z3RrX2FjY2VsX2dyb3VwX25ldygpOworCisgICAgZmlsZSA9IGd0a19tZW51X2l0ZW1fbmV3X3dp
dGhfbGFiZWwoIkZpbGUiKTsKKyAgICBmaWxlTWVudSA9IGd0a19tZW51X25ldygpOworICAgIGd0
a19tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoR1RLX01FTlVfSVRFTShmaWxlKSwgZmlsZU1lbnUpOwor
ICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTCh3aW5kb3dNZW51YmFyKSwg
ZmlsZSk7CisKKyAgICB3aW5kb3dOZXcgPSBndGtfaW1hZ2VfbWVudV9pdGVtX25ld19mcm9tX3N0
b2NrKEdUS19TVE9DS19ORVcsIG1fd2luZG93R3JvdXApOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
R19PQkpFQ1Qod2luZG93TmV3KSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhNaW5pQnJvd3Nlcjo6
Y3JlYXRlTmV3V2luZG93KSwgTlVMTCk7CisgICAgd2luZG93Q2xvc2UgPSBndGtfaW1hZ2VfbWVu
dV9pdGVtX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19RVUlULCBtX3dpbmRvd0dyb3VwKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKHdpbmRvd0Nsb3NlKSwgImFjdGl2YXRlIiwgR19D
QUxMQkFDSyhNaW5pQnJvd3Nlcjo6Y2xvc2VDdXJyZW50V2luZG93KSwgKGdwb2ludGVyKXRoaXMp
OworICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChmaWxlTWVudSksIHdp
bmRvd05ldyk7CisgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKGZpbGVN
ZW51KSwgd2luZG93Q2xvc2UpOworCisgICAgcmV0dXJuIHdpbmRvd01lbnViYXI7Cit9CisKK0d0
a1dpZGdldCogQnJvd3NlcldpbmRvdzo6Y3JlYXRlVG9vbGJhcigpCit7CisgICAgR3RrV2lkZ2V0
KiB3aW5kb3dUb29sYmFyID0gZ3RrX3Rvb2xiYXJfbmV3KCk7CisgICAgZ3RrX3Rvb2xiYXJfc2V0
X29yaWVudGF0aW9uKEdUS19UT09MQkFSKHdpbmRvd1Rvb2xiYXIpLCBHVEtfT1JJRU5UQVRJT05f
SE9SSVpPTlRBTCk7IAorICAgIGd0a190b29sYmFyX3NldF9zdHlsZShHVEtfVE9PTEJBUih3aW5k
b3dUb29sYmFyKSwgR1RLX1RPT0xCQVJfQk9USF9IT1JJWik7CisgICAgR3RrVG9vbEl0ZW0qIGl0
ZW07CisKKyAgICAvLyBUaGUgVVJMIGVudHJ5CisgICAgaXRlbSA9IGd0a190b29sX2l0ZW1fbmV3
KCk7CisgICAgZ3RrX3Rvb2xfaXRlbV9zZXRfZXhwYW5kKGl0ZW0sIFRSVUUpOworICAgIG1fd2lu
ZG93VVJMRW50cnkgPSBndGtfZW50cnlfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RL
X0NPTlRBSU5FUihpdGVtKSwgbV93aW5kb3dVUkxFbnRyeSk7CisgICAgZ19zaWduYWxfY29ubmVj
dChHX09CSkVDVChtX3dpbmRvd1VSTEVudHJ5KSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhCcm93
c2VyV2luZG93OjphY3RpdmF0ZVVybEVudHJ5KSwgKGdwb2ludGVyKXRoaXMpOworICAgIGd0a190
b29sYmFyX2luc2VydChHVEtfVE9PTEJBUih3aW5kb3dUb29sYmFyKSwgaXRlbSwgLTEpOyAKKyAg
ICAKKyAgICAvLyBUaGUgR28gYnV0dG9uCisgICAgaXRlbSA9IGd0a190b29sX2J1dHRvbl9uZXdf
ZnJvbV9zdG9jayhHVEtfU1RPQ0tfT0spOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1Qo
aXRlbSksICJjbGlja2VkIiwgR19DQUxMQkFDSyhCcm93c2VyV2luZG93OjphY3RpdmF0ZVVybEVu
dHJ5KSwgKGdwb2ludGVyKXRoaXMpOworICAgIGd0a190b29sYmFyX2luc2VydChHVEtfVE9PTEJB
Uih3aW5kb3dUb29sYmFyKSwgaXRlbSwgLTEpOworICAgIGd0a190b29sYmFyX3NldF9pY29uX3Np
emUoR1RLX1RPT0xCQVIod2luZG93VG9vbGJhciksIEdUS19JQ09OX1NJWkVfU01BTExfVE9PTEJB
Uik7CisKKyAgICByZXR1cm4gd2luZG93VG9vbGJhcjsKK30KKworR3RrV2lkZ2V0KiBCcm93c2Vy
V2luZG93OjpjcmVhdGVCcm93c2VyKCkKK3sKKyAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAw
OworICAgIAorICAgIEd0a1dpZGdldCogc2Nyb2xsZWRXaW5kb3cgPSBndGtfc2Nyb2xsZWRfd2lu
ZG93X25ldygwLCAwKTsKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1ND
Uk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtf
UE9MSUNZX0FVVE9NQVRJQyk7CisgICAgCisgICAgZ3RrX3dpZGdldF9nZXRfc2l6ZV9yZXF1ZXN0
KG1fd2luZG93TWFpbiwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBHZGtSZWN0YW5nbGUgd2ViVmll
d1JlY3QgPSB7MCwgMCwgd2lkdGgsIGhlaWdodH07CisgICAgbV9icm93c2VyVmlldyA9IG5ldyBC
cm93c2VyVmlldyh3ZWJWaWV3UmVjdCwgbV93aW5kb3dNYWluKTsKKyAgICAKKyAgICBndGtfc2Ny
b2xsZWRfd2luZG93X2FkZF93aXRoX3ZpZXdwb3J0KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xs
ZWRXaW5kb3cpLCBHVEtfV0lER0VUKG1fYnJvd3NlclZpZXctPmdldFdlYlZpZXcoKSkpOworICAg
CisgICAgcmV0dXJuIHNjcm9sbGVkV2luZG93OworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78238</attachid>
            <date>2011-01-07 07:24:22 -0800</date>
            <delta_ts>2011-03-18 14:19:37 -0700</delta_ts>
            <desc>MiniBrowser implementation for WebKit2 GTK port</desc>
            <filename>48512.patch.complete</filename>
            <type>text/plain</type>
            <size>26157</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiA3NTA1NCkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiAr
MjIzLDcgQEAKIGluY2x1ZGUgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQogaWYgRU5BQkxFX1dFQktJ
VDIKIGluY2x1ZGUgV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQoraW5jbHVkZSBUb29scy9NaW5pQnJv
d3Nlci9ndGsvR05VbWFrZWZpbGUuYW0KIGVsc2UKIGluY2x1ZGUgV2ViS2l0L2d0ay9HTlVtYWtl
ZmlsZS5hbQogaW5jbHVkZSBXZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR05VbWFrZWZpbGUuYW0K
SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDc1MjQy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDEt
MDcgVmFtc2hpa3Jpc2huYS5ZZWxsZW5raSAgPHZhbXNoaUBtb3Rvcm9sYS5jb20+IAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBNaW5p
QnJvd3NlciBmb3IgR3RrIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00ODUxMgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisKIDIwMTEt
MDEtMDYgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNzUyNDIpCisrKyBUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAxMS0wMS0wNyBWYW1zaGlrcmlz
aG5hLlllbGxlbmtpICA8dmFtc2hpQG1vdG9yb2xhLmNvbT4gCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IE1pbmlCcm93c2VyIGZvciBH
dGsgcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ4NTEyCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGs6IEFkZGVkLgorICAgICAgICAqIE1p
bmlCcm93c2VyL2d0ay9Ccm93c2VyVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoQnJvd3NlclZp
ZXc6OkJyb3dzZXJWaWV3KToKKyAgICAgICAgKEJyb3dzZXJWaWV3Ojp+QnJvd3NlclZpZXcpOgor
ICAgICAgICAoQnJvd3NlclZpZXc6OmxvYWRVcmwpOgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0
ay9Ccm93c2VyVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKEJyb3dzZXJWaWV3OjpnZXRXZWJWaWV3
KToKKyAgICAgICAgKEJyb3dzZXJWaWV3OjpnZXRQYWdlUmVmKToKKyAgICAgICAgKiBNaW5pQnJv
d3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jcHA6IEFkZGVkLgorICAgICAgICAoQnJvd3NlcldpbmRv
dzo6QnJvd3NlcldpbmRvdyk6CisgICAgICAgIChCcm93c2VyV2luZG93Ojp+QnJvd3NlcldpbmRv
dyk6CisgICAgICAgIChCcm93c2VyV2luZG93OjpnZXRVcmxlbnRyeSk6CisgICAgICAgIChCcm93
c2VyV2luZG93OjphY3RpdmF0ZVVybEVudHJ5KToKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6Omdv
dG9VUkwpOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6Y3JlYXRlV2luZG93KToKKyAgICAgICAg
KEJyb3dzZXJXaW5kb3c6OnNob3dXaW5kb3cpOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6Y3Jl
YXRlTWVudWJhcik6CisgICAgICAgIChCcm93c2VyV2luZG93OjpjcmVhdGVUb29sYmFyKToKKyAg
ICAgICAgKEJyb3dzZXJXaW5kb3c6OmNyZWF0ZUJyb3dzZXIpOgorICAgICAgICAqIE1pbmlCcm93
c2VyL2d0ay9Ccm93c2VyV2luZG93Lmg6IEFkZGVkLgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6
Y3JlYXRlKToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW06IEFkZGVk
LgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9NaW5pQnJvd3Nlci5jcHA6IEFkZGVkLgorICAg
ICAgICAoTWluaUJyb3dzZXI6OnNoYXJlZCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6fk1pbmlC
cm93c2VyKToKKyAgICAgICAgKE1pbmlCcm93c2VyOjpjcmVhdGVOZXdXaW5kb3cpOgorICAgICAg
ICAoTWluaUJyb3dzZXI6OmNsb3NlQ3VycmVudFdpbmRvdyk6CisgICAgICAgIChNaW5pQnJvd3Nl
cjo6cmVnaXN0ZXJXaW5kb3cpOgorICAgICAgICAoTWluaUJyb3dzZXI6OnVucmVnaXN0ZXJXaW5k
b3cpOgorICAgICAgICAoTWluaUJyb3dzZXI6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgICogTWlu
aUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2Vy
L2d0ay9tYWluLmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKwogMjAxMS0wMS0wNyAgSmVk
cnplaiBOb3dhY2tpICA8amVkcnplai5ub3dhY2tpQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBDc2FiYSBPc3p0cm9nb27DoWMuCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9ndGsv
QnJvd3NlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93
c2VyVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3Nl
clZpZXcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwgCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciAKKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogTmVpdGhlciB0aGUgbmFtZSBvZiBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IAorICogYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAK
KyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
IAorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIAorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IE9SIAorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiAKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyAKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJCcm93c2VyVmlldy5oIgorCisjaW5jbHVkZSAiQnJvd3NlcldpbmRv
dy5oIgorCitCcm93c2VyVmlldzo6QnJvd3NlclZpZXcoKQorICAgIDogbV93a3ZpZXcoMCkKK3sK
K30KKworQnJvd3NlclZpZXc6OkJyb3dzZXJWaWV3KEdka1JlY3RhbmdsZSB3ZWJWaWV3UmVjdCwg
R3RrV2lkZ2V0KiBwYXJlbnRXaW5kb3cpCit7CisgICAgV0tDb250ZXh0UmVmIGNvbnRleHQgPSBX
S0NvbnRleHRHZXRTaGFyZWRQcm9jZXNzQ29udGV4dCgpOworICAgIG1fd2t2aWV3ID0gV0tWaWV3
Q3JlYXRlKHdlYlZpZXdSZWN0LCBjb250ZXh0LCAwLCBwYXJlbnRXaW5kb3cpOworfQorCitCcm93
c2VyVmlldzo6fkJyb3dzZXJWaWV3KCkKK3sKKyAgICBXS1BhZ2VDbG9zZShnZXRQYWdlUmVmKCkp
OworfQorCit2b2lkIEJyb3dzZXJWaWV3Ojpsb2FkVXJsKGNvbnN0IGNoYXIqIHVybCkKK3sKKyAg
ICBXS1BhZ2VMb2FkVVJMKGdldFBhZ2VSZWYoKSwgV0tVUkxDcmVhdGVXaXRoVVJMKHVybCkpOwor
fQorCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmgJKHJldmlzaW9uIDAp
CisrKyBUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmls
aXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmlj
YXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSwgCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciAKKyAqIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmli
dXRvcnMgbWF5IAorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIAorICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIAorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIAorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCAKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiAKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyAKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyAKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQnJvd3Nlcldp
bmRvd19oCisjZGVmaW5lIEJyb3dzZXJXaW5kb3dfaAorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgor
CitjbGFzcyBCcm93c2VyVmlldzsKKworY2xhc3MgQnJvd3NlcldpbmRvdyB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIEJyb3dzZXJXaW5kb3cqIGNyZWF0ZSgpCisgICAgeyAgIAorICAgICAgICByZXR1
cm4gbmV3IEJyb3dzZXJXaW5kb3c7CisgICAgfSAgIAorICAgIHN0YXRpYyB2b2lkIGFjdGl2YXRl
VXJsRW50cnkoR3RrV2lkZ2V0KiwgZ3BvaW50ZXIpOworCisgICAgdm9pZCBjcmVhdGVXaW5kb3co
aW50LCBpbnQpOworICAgIHZvaWQgc2hvd1dpbmRvdygpOworICAgIAorICAgIHZvaWQgZ290b1VS
TChjb25zdCBjaGFyKik7CisgICAgY29uc3QgZ2NoYXIqIGdldFVybGVudHJ5KCk7CisKKyAgICB+
QnJvd3NlcldpbmRvdygpOworICAgIAorcHJpdmF0ZToKKyAgICBCcm93c2VyV2luZG93KCk7CisK
KyAgICBHdGtXaWRnZXQqIGNyZWF0ZU1lbnViYXIoKTsKKyAgICBHdGtXaWRnZXQqIGNyZWF0ZVRv
b2xiYXIoKTsKKyAgICBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoKTsKKworICAgIEJyb3dzZXJW
aWV3KiBtX2Jyb3dzZXJWaWV3OworICAgIEd0a1dpZGdldCogbV93aW5kb3dNYWluOworICAgIEd0
a0FjY2VsR3JvdXAqIG1fd2luZG93R3JvdXA7CisgICAgR3RrV2lkZ2V0KiBtX3dpbmRvd1VSTEVu
dHJ5OworfTsKKworI2VuZGlmIC8vIEJyb3dzZXJXaW5kb3dfaApJbmRleDogVG9vbHMvTWluaUJy
b3dzZXIvZ3RrL01pbmlCcm93c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nl
ci9ndGsvTWluaUJyb3dzZXIuY3BwCShyZXZpc2lvbiAwKQorKysgVG9vbHMvTWluaUJyb3dzZXIv
Z3RrL01pbmlCcm93c2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UsIAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3IgCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSAKKyAqIGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUyAKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBPUiAKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCAKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIAorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgCisgKiBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiTWluaUJyb3dzZXIuaCIKKworI2luY2x1ZGUgIkJy
b3dzZXJXaW5kb3cuaCIKKworTWluaUJyb3dzZXIqIE1pbmlCcm93c2VyOjpzaGFyZWQoKQorewor
ICAgIHN0YXRpYyBNaW5pQnJvd3NlciogaW5zdGFuY2UgPSAwOworICAgIGlmICghaW5zdGFuY2Up
CisgICAgICAgIGluc3RhbmNlID0gbmV3IE1pbmlCcm93c2VyKCk7CisgICAgcmV0dXJuIGluc3Rh
bmNlOworfQorCitNaW5pQnJvd3Nlcjo6fk1pbmlCcm93c2VyKCkKK3sKKyAgICBtX2Jyb3dzZXJX
aW5kb3dzLmNsZWFyKCk7CisgICAgZ3RrX21haW5fcXVpdCgpOworfQorCit2b2lkIE1pbmlCcm93
c2VyOjpjcmVhdGVOZXdXaW5kb3coR3RrV2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVyIGRhdGEpCit7
CisgICAgTWluaUJyb3dzZXI6OnNoYXJlZCgpLT5jcmVhdGVXaW5kb3coKTsKK30KKwordm9pZCBN
aW5pQnJvd3Nlcjo6Y2xvc2VDdXJyZW50V2luZG93KEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRl
ciBkYXRhKQoreworICAgIEJyb3dzZXJXaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PEJyb3dz
ZXJXaW5kb3cqPihkYXRhKTsKKyAgICBNaW5pQnJvd3Nlcjo6c2hhcmVkKCktPnVucmVnaXN0ZXJX
aW5kb3cod2luZG93KTsKK30KKwordm9pZCBNaW5pQnJvd3Nlcjo6cmVnaXN0ZXJXaW5kb3coQnJv
d3NlcldpbmRvdyogd2luZG93KQoreworICAgIG1fYnJvd3NlcldpbmRvd3MuaW5zZXJ0KHdpbmRv
dyk7Cit9CisKK3ZvaWQgTWluaUJyb3dzZXI6OnVucmVnaXN0ZXJXaW5kb3coQnJvd3NlcldpbmRv
dyogd2luZG93KQoreworICAgIHN0ZDo6c2V0PEJyb3dzZXJXaW5kb3cqPjo6aXRlcmF0b3IgaXQ7
CisgICAgaXQgPSBtX2Jyb3dzZXJXaW5kb3dzLmZpbmQod2luZG93KTsKKyAgICBpZiAoaXQgPT0g
bV9icm93c2VyV2luZG93cy5lbmQoKSkgCisgICAgICAgIHJldHVybjsKKworICAgIG1fYnJvd3Nl
cldpbmRvd3MuZXJhc2Uod2luZG93KTsKKyAgICBkZWxldGUgd2luZG93OworICAgIHdpbmRvdyA9
IDA7CisgICAgCisgICAgaWYgKG1fYnJvd3NlcldpbmRvd3MuZW1wdHkoKSkKKyAgICAgICAgZ3Rr
X21haW5fcXVpdCgpOworfQorCit2b2lkIE1pbmlCcm93c2VyOjpjcmVhdGVXaW5kb3coKQorewor
ICAgIEJyb3dzZXJXaW5kb3cqIGJyb3dzZXJXaW5kb3cgPSBCcm93c2VyV2luZG93OjpjcmVhdGUo
KTsKKyAgICByZWdpc3RlcldpbmRvdyhicm93c2VyV2luZG93KTsKKyAgICBicm93c2VyV2luZG93
LT5jcmVhdGVXaW5kb3coODAwLCA2MDApOworICAgIGJyb3dzZXJXaW5kb3ctPmdvdG9VUkwoImh0
dHA6Ly93ZWJraXQub3JnIik7CisgICAgYnJvd3NlcldpbmRvdy0+c2hvd1dpbmRvdygpOworfQpJ
bmRleDogVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL01pbmlCcm93c2VyL2d0ay9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMCkKKysrIFRv
b2xzL01pbmlCcm93c2VyL2d0ay9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1NCBAQAorCisjTWluaUJyb3dzZXIKK2Jpbl9QUk9HUkFNUyArPSBcCisgICBQcm9ncmFtcy9N
aW5pQnJvd3NlcgorCitQcm9ncmFtc19NaW5pQnJvd3Nlcl9DUFBGTEFHUyA9IFwKKyAgIC1JJChz
cmNkaXIpL1dlYktpdDIgXAorICAgLUkkKHNyY2RpcikvV2ViS2l0Mi9TaGFyZWQgXAorICAgLUkk
KHNyY2RpcikvV2ViS2l0Mi9TaGFyZWQvQVBJL2MgXAorICAgLUkkKHNyY2RpcikvV2ViS2l0Mi9T
aGFyZWQvQVBJL2MvZ3RrIFwKKyAgIC1JJChzcmNkaXIpL1dlYktpdDIvVUlQcm9jZXNzIFwKKyAg
IC1JJChzcmNkaXIpL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DIFwKKyAgIC1JJChzcmNkaXIpL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ayBcCisgICAtSSQoc3JjZGlyKS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvY3BwIFwKKyAgIC1JJChzcmNkaXIpL1Rvb2xzL01pbmlCcm93c2VyL2d0ayBcCisg
ICAtSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL2luY2x1ZGUgXAorICAg
LUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlL0phdmFTY3Jp
cHRDb3JlIFwKKyAgIC1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5j
bHVkZS9XZWJDb3JlIFwKKyAgIC1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvaW5jbHVkZS9XZWJLaXQyIFwKKyAgIC1JJCh0b3BfYnVpbGRkaXIpL1dlYktpdDIgXAorICAg
JChnbG9iYWxfY3BwZmxhZ3MpIFwKKyAgICQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKKyAg
ICQoR0xJQl9DRkxBR1MpIFwKKyAgICQoR1RLX0NGTEFHUykKKworUHJvZ3JhbXNfTWluaUJyb3dz
ZXJfU09VUkNFUyA9IFwKKyAgIFRvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyVmlldy5jcHAg
XAorICAgVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJWaWV3LmggXAorICAgVG9vbHMvTWlu
aUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuY3BwIFwKKyAgIFRvb2xzL01pbmlCcm93c2VyL2d0
ay9Ccm93c2VyV2luZG93LmggXAorICAgVG9vbHMvTWluaUJyb3dzZXIvZ3RrL01pbmlCcm93c2Vy
LmNwcCBcCisgICBUb29scy9NaW5pQnJvd3Nlci9ndGsvTWluaUJyb3dzZXIuaCBcCisgICBUb29s
cy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jcHAKKworQlVJTFRfU09VUkNFUyArPSBcCisgICBnZW5l
cmF0ZS1taW5pYnJvd3Nlci1mb3J3YXJkLWhlYWRlcnMKKworTWluaUJyb3dzZXIgOj0gJChzcmNk
aXIpL1Rvb2xzL01pbmlCcm93c2VyL2d0aworTWluaUJyb3dzZXJGd2RIZWFkZXJzIDo9ICQoR0VO
U09VUkNFU19XRUJLSVQyKS9pbmNsdWRlCitnZW5lcmF0ZS1taW5pYnJvd3Nlci1mb3J3YXJkLWhl
YWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwg
JChQcm9ncmFtc19NaW5pQnJvd3Nlcl9TT1VSQ0VTKQorICAgJChBTV9WX0dFTikkKFBFUkwpICQ8
ICQoTWluaUJyb3dzZXIpICQoTWluaUJyb3dzZXJGd2RIZWFkZXJzKSBndGsKKyAgICQoQU1fVl9H
RU4pJChQRVJMKSAkPCAkKE1pbmlCcm93c2VyKSAkKE1pbmlCcm93c2VyRndkSGVhZGVycykgc291
cCAKKworUHJvZ3JhbXNfTWluaUJyb3dzZXJfTERBREQgPSBcCisgICBsaWJ3ZWJraXQyZ3RrLUBX
RUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05A
LmxhIFwKKyAgICQoR0xJQl9MSUJTKSBcCisgICAkKEdUS19MSUJTKQorCitQcm9ncmFtc19NaW5p
QnJvd3Nlcl9MREZMQUdTID0gXAorICAgLW5vLWZhc3QtaW5zdGFsbCBcCisgICAtbm8taW5zdGFs
bAorCitDTEVBTkZJTEVTICs9IFwKKyAgICQodG9wX2J1aWxkZGlyKS9Qcm9ncmFtcy9NaW5pQnJv
d3NlcgpJbmRleDogVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJWaWV3LmgJKHJldmlzaW9uIDApCisr
KyBUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlclZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9u
LCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UsIAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IgCisgKiBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
TW90b3JvbGEgTW9iaWxpdHksIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
IG1heSAKKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiAKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiAKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCAKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIAorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJyb3dzZXJWaWV3X2gK
KyNkZWZpbmUgQnJvd3NlclZpZXdfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+Cisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorCitjbGFzcyBCcm93c2VyVmlldyB7CitwdWJsaWM6IAorICAg
IEJyb3dzZXJWaWV3KCk7CisgICAgQnJvd3NlclZpZXcoR2RrUmVjdGFuZ2xlIHdlYlZpZXdSZWN0
LCBHdGtXaWRnZXQqIHBhcmVudFdpbmRvdyk7CisgICAgfkJyb3dzZXJWaWV3KCk7CisgICAgCisg
ICAgdm9pZCBsb2FkVXJsKGNvbnN0IGNoYXIqIHVybCk7CisgICAgCisgICAgR3RrV2lkZ2V0KiBn
ZXRXZWJWaWV3KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXS1ZpZXdHZXRXaW5kb3co
bV93a3ZpZXcpOworICAgIH0gCisKK3ByaXZhdGU6CisgICAgV0tQYWdlUmVmIGdldFBhZ2VSZWYo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdLVmlld0dldFBhZ2UobV93a3ZpZXcpOwor
ICAgIH0KKyAgICAKKyAgICBXS1ZpZXdSZWYgbV93a3ZpZXc7Cit9OworCisjZW5kaWYgLy8gQnJv
d3NlclZpZXdfaApJbmRleDogVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmNwcAkocmV2aXNpb24gMCkKKysrIFRv
b2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICog
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IgCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTW90b3JvbGEg
TW9iaWxpdHksIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSAKKyAq
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUyAKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiAKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBPUiAKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCAKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIAorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgCisgKiBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiTWluaUJyb3dzZXIuaCIKKworI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sK
KyAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3YpOworICAgIAorICAgIE1pbmlCcm93c2VyOjpzaGFy
ZWQoKS0+Y3JlYXRlV2luZG93KCk7CisgICAgZ3RrX21haW4oKTsKKyAgICAKKyAgICByZXR1cm4g
MDsKK30KSW5kZXg6IFRvb2xzL01pbmlCcm93c2VyL2d0ay9NaW5pQnJvd3Nlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL01pbmlCcm93c2VyL2d0ay9NaW5pQnJvd3Nlci5oCShyZXZpc2lvbiAwKQor
KysgVG9vbHMvTWluaUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlv
biwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIAorICogb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSAKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIAorICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIAorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNaW5pQnJvd3Nlcl9o
CisjZGVmaW5lIE1pbmlCcm93c2VyX2gKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRl
IDxzZXQ+CisKK2NsYXNzIEJyb3dzZXJXaW5kb3c7CisKK2NsYXNzIE1pbmlCcm93c2VyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgTWluaUJyb3dzZXIqIHNoYXJlZCgpOworICAgIHN0YXRpYyB2b2lk
IGNyZWF0ZU5ld1dpbmRvdyhHdGtXaWRnZXQqLCBncG9pbnRlcik7CisgICAgc3RhdGljIHZvaWQg
Y2xvc2VDdXJyZW50V2luZG93KEd0a1dpZGdldCosIGdwb2ludGVyKTsKKworICAgIH5NaW5pQnJv
d3NlcigpOworICAgIAorICAgIHZvaWQgY3JlYXRlV2luZG93KCk7CisgICAgdm9pZCByZWdpc3Rl
cldpbmRvdyhCcm93c2VyV2luZG93Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVyV2luZG93KEJyb3dz
ZXJXaW5kb3cqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RkOjpzZXQ8QnJvd3NlcldpbmRvdyo+
IG1fYnJvd3NlcldpbmRvd3M7ICAgIAorfTsKKworI2VuZGlmIC8vIE1pbmlCcm93c2VyX2gKSW5k
ZXg6IFRvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jcHAJKHJldmlzaW9uIDApCisr
KyBUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmls
aXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmlj
YXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSwgCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciAKKyAqIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmli
dXRvcnMgbWF5IAorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIAorICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIAorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIAorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCAKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiAKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyAKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyAKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJCcm93c2Vy
V2luZG93LmgiCisKKyNpbmNsdWRlICJCcm93c2VyVmlldy5oIgorI2luY2x1ZGUgIk1pbmlCcm93
c2VyLmgiCisKK0Jyb3dzZXJXaW5kb3c6OkJyb3dzZXJXaW5kb3coKQorICAgIDogbV9icm93c2Vy
VmlldygwKQorICAgICwgbV93aW5kb3dNYWluKDApCisgICAgLCBtX3dpbmRvd0dyb3VwKDApCisg
ICAgLCBtX3dpbmRvd1VSTEVudHJ5KDApCit7Cit9CisKK0Jyb3dzZXJXaW5kb3c6On5Ccm93c2Vy
V2luZG93KCkKK3sKKyAgICBpZiAobV9icm93c2VyVmlldykgeworICAgICAgICBkZWxldGUgbV9i
cm93c2VyVmlldzsKKyAgICAgICAgbV9icm93c2VyVmlldyA9IDA7CisgICAgfQorICAgIGd0a193
aWRnZXRfZGVzdHJveShtX3dpbmRvd01haW4pOworfQorCitjb25zdCBnY2hhciogQnJvd3Nlcldp
bmRvdzo6Z2V0VXJsZW50cnkoKQoreworICAgIHJldHVybiBndGtfZW50cnlfZ2V0X3RleHQoR1RL
X0VOVFJZKG1fd2luZG93VVJMRW50cnkpKTsKK30KKwordm9pZCBCcm93c2VyV2luZG93OjphY3Rp
dmF0ZVVybEVudHJ5KEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQoreworICAgIEJy
b3dzZXJXaW5kb3cqIGJyb3dzZXJXaW5kb3cgPSBzdGF0aWNfY2FzdDxCcm93c2VyV2luZG93Kj4o
ZGF0YSk7CisgICAgY29uc3QgZ2NoYXIqIHVybCA9IGJyb3dzZXJXaW5kb3ctPmdldFVybGVudHJ5
KCk7CisgICAgYnJvd3NlcldpbmRvdy0+Z290b1VSTCh1cmwpOworfQorCit2b2lkIEJyb3dzZXJX
aW5kb3c6OmdvdG9VUkwoY29uc3QgY2hhciogdXJsKQoreworICAgIG1fYnJvd3NlclZpZXctPmxv
YWRVcmwodXJsKTsKK30KKwordm9pZCBCcm93c2VyV2luZG93OjpjcmVhdGVXaW5kb3coaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIEd0a1dpZGdldCogd2luZG93VmJveCA9IGd0a192Ym94
X25ldyhGQUxTRSwgMCk7CisgICAgCisgICAgbV93aW5kb3dNYWluID0gZ3RrX3dpbmRvd19uZXco
R1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdU
S19XSU5ET1cobV93aW5kb3dNYWluKSwgd2lkdGgsIGhlaWdodCk7CisgICAgZ3RrX3dpZGdldF9z
ZXRfbmFtZShtX3dpbmRvd01haW4sICJNaW5pQnJvd3NlciIpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoR19PQkpFQ1QobV93aW5kb3dNYWluKSwgImRlc3Ryb3kiLCBHX0NBTExCQUNLKE1pbmlCcm93
c2VyOjpjbG9zZUN1cnJlbnRXaW5kb3cpLCAoZ3BvaW50ZXIpdGhpcyk7CisKKyAgICBndGtfYm94
X3BhY2tfc3RhcnQoR1RLX0JPWCh3aW5kb3dWYm94KSwgY3JlYXRlTWVudWJhcigpLCBGQUxTRSwg
RkFMU0UsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHdpbmRvd1Zib3gpLCBj
cmVhdGVUb29sYmFyKCksIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0
KEdUS19CT1god2luZG93VmJveCksIGNyZWF0ZUJyb3dzZXIoKSwgVFJVRSwgVFJVRSwgMCk7CisK
KyAgICBndGtfd2luZG93X2FkZF9hY2NlbF9ncm91cChHVEtfV0lORE9XKG1fd2luZG93TWFpbiks
IG1fd2luZG93R3JvdXApOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV93
aW5kb3dNYWluKSwgd2luZG93VmJveCk7Cit9CisKK3ZvaWQgQnJvd3NlcldpbmRvdzo6c2hvd1dp
bmRvdygpCit7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQobV9icm93c2Vy
Vmlldy0+Z2V0V2ViVmlldygpKSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX3dpbmRvd01h
aW4pOworfQorCitHdGtXaWRnZXQqIEJyb3dzZXJXaW5kb3c6OmNyZWF0ZU1lbnViYXIoKQorewor
ICAgIEd0a1dpZGdldCogZmlsZSwgKmZpbGVNZW51LCAqd2luZG93TmV3LCAqd2luZG93Q2xvc2U7
CisgICAgR3RrV2lkZ2V0KiB3aW5kb3dNZW51YmFyID0gZ3RrX21lbnVfYmFyX25ldygpOworICAg
IG1fd2luZG93R3JvdXAgPSBndGtfYWNjZWxfZ3JvdXBfbmV3KCk7CisKKyAgICBmaWxlID0gZ3Rr
X21lbnVfaXRlbV9uZXdfd2l0aF9sYWJlbCgiRmlsZSIpOworICAgIGZpbGVNZW51ID0gZ3RrX21l
bnVfbmV3KCk7CisgICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudShHVEtfTUVOVV9JVEVNKGZp
bGUpLCBmaWxlTWVudSk7CisgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxM
KHdpbmRvd01lbnViYXIpLCBmaWxlKTsKKworICAgIHdpbmRvd05ldyA9IGd0a19pbWFnZV9tZW51
X2l0ZW1fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX05FVywgbV93aW5kb3dHcm91cCk7CisgICAg
Z19zaWduYWxfY29ubmVjdChHX09CSkVDVCh3aW5kb3dOZXcpLCAiYWN0aXZhdGUiLCBHX0NBTExC
QUNLKE1pbmlCcm93c2VyOjpjcmVhdGVOZXdXaW5kb3cpLCBOVUxMKTsKKyAgICB3aW5kb3dDbG9z
ZSA9IGd0a19pbWFnZV9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX1FVSVQsIG1f
d2luZG93R3JvdXApOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1Qod2luZG93Q2xvc2Up
LCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKE1pbmlCcm93c2VyOjpjbG9zZUN1cnJlbnRXaW5kb3cp
LCAoZ3BvaW50ZXIpdGhpcyk7CisgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NI
RUxMKGZpbGVNZW51KSwgd2luZG93TmV3KTsKKyAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RL
X01FTlVfU0hFTEwoZmlsZU1lbnUpLCB3aW5kb3dDbG9zZSk7CisKKyAgICByZXR1cm4gd2luZG93
TWVudWJhcjsKK30KKworR3RrV2lkZ2V0KiBCcm93c2VyV2luZG93OjpjcmVhdGVUb29sYmFyKCkK
K3sKKyAgICBHdGtXaWRnZXQqIHdpbmRvd1Rvb2xiYXIgPSBndGtfdG9vbGJhcl9uZXcoKTsKKyAg
ICBndGtfdG9vbGJhcl9zZXRfb3JpZW50YXRpb24oR1RLX1RPT0xCQVIod2luZG93VG9vbGJhciks
IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKTsgCisgICAgZ3RrX3Rvb2xiYXJfc2V0X3N0eWxl
KEdUS19UT09MQkFSKHdpbmRvd1Rvb2xiYXIpLCBHVEtfVE9PTEJBUl9CT1RIX0hPUklaKTsKKyAg
ICBHdGtUb29sSXRlbSogaXRlbTsKKworICAgIC8vIFRoZSBVUkwgZW50cnkKKyAgICBpdGVtID0g
Z3RrX3Rvb2xfaXRlbV9uZXcoKTsKKyAgICBndGtfdG9vbF9pdGVtX3NldF9leHBhbmQoaXRlbSwg
VFJVRSk7CisgICAgbV93aW5kb3dVUkxFbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICBndGtf
Y29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGl0ZW0pLCBtX3dpbmRvd1VSTEVudHJ5KTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKG1fd2luZG93VVJMRW50cnkpLCAiYWN0aXZhdGUi
LCBHX0NBTExCQUNLKEJyb3dzZXJXaW5kb3c6OmFjdGl2YXRlVXJsRW50cnkpLCAoZ3BvaW50ZXIp
dGhpcyk7CisgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0KEdUS19UT09MQkFSKHdpbmRvd1Rvb2xiYXIp
LCBpdGVtLCAtMSk7IAorICAgIAorICAgIC8vIFRoZSBHbyBidXR0b24KKyAgICBpdGVtID0gZ3Rr
X3Rvb2xfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19PSyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChHX09CSkVDVChpdGVtKSwgImNsaWNrZWQiLCBHX0NBTExCQUNLKEJyb3dzZXJXaW5k
b3c6OmFjdGl2YXRlVXJsRW50cnkpLCAoZ3BvaW50ZXIpdGhpcyk7CisgICAgZ3RrX3Rvb2xiYXJf
aW5zZXJ0KEdUS19UT09MQkFSKHdpbmRvd1Rvb2xiYXIpLCBpdGVtLCAtMSk7CisgICAgZ3RrX3Rv
b2xiYXJfc2V0X2ljb25fc2l6ZShHVEtfVE9PTEJBUih3aW5kb3dUb29sYmFyKSwgR1RLX0lDT05f
U0laRV9TTUFMTF9UT09MQkFSKTsKKworICAgIHJldHVybiB3aW5kb3dUb29sYmFyOworfQorCitH
dGtXaWRnZXQqIEJyb3dzZXJXaW5kb3c6OmNyZWF0ZUJyb3dzZXIoKQoreworICAgIGludCB3aWR0
aCA9IDAsIGhlaWdodCA9IDA7CisgICAgCisgICAgR3RrV2lkZ2V0KiBzY3JvbGxlZFdpbmRvdyA9
IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KDAsIDApOworICAgIGd0a19zY3JvbGxlZF93aW5kb3df
c2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwgR1RLX1BPTElD
WV9BVVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKKyAgICAKKyAgICBndGtfd2lkZ2V0
X2dldF9zaXplX3JlcXVlc3QobV93aW5kb3dNYWluLCAmd2lkdGgsICZoZWlnaHQpOworICAgIEdk
a1JlY3RhbmdsZSB3ZWJWaWV3UmVjdCA9IHswLCAwLCB3aWR0aCwgaGVpZ2h0fTsKKyAgICBtX2Jy
b3dzZXJWaWV3ID0gbmV3IEJyb3dzZXJWaWV3KHdlYlZpZXdSZWN0LCBtX3dpbmRvd01haW4pOwor
ICAgIAorICAgIGd0a19zY3JvbGxlZF93aW5kb3dfYWRkX3dpdGhfdmlld3BvcnQoR1RLX1NDUk9M
TEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksIEdUS19XSURHRVQobV9icm93c2VyVmlldy0+Z2V0
V2ViVmlldygpKSk7CisgICAKKyAgICByZXR1cm4gc2Nyb2xsZWRXaW5kb3c7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85050</attachid>
            <date>2011-03-08 08:26:02 -0800</date>
            <delta_ts>2011-03-18 14:19:37 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>minibrowser.patch</filename>
            <type>text/plain</type>
            <size>25914</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDMzMDE2MjIwYTgxYmZmMGMwNDA3NTAxMzU2NzgyNzU4OGZjOTZhMTkKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVGh1IEphbiAyMCAx
MzozNDo1NSAyMDExICswMTAwCgogICAgMjAxMS0wMi0xMSBWYW1zaGlrcmlzaG5hLlllbGxlbmtp
IDx2YW1zaGlAbW90b3JvbGEuY29tPiBhbmQgQWxlamFuZHJvIEcuIENhc3RybyA8YWxleEBpZ2Fs
aWEuY29tPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogICAg
CiAgICAgICAgICAgIEltcGxlbWVudCBNaW5pQnJvd3NlciBmb3IgR3RrIHBvcnQuCiAgICAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMgogICAgCiAg
ICAgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEd0ayBNaW5pQnJvd3Nlci4K
ICAgIAogICAgICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgogICAgCiAgICAyMDExLTAyLTExICBW
YW1zaGlrcmlzaG5hLlllbGxlbmtpICA8dmFtc2hpQG1vdG9yb2xhLmNvbT4gYW5kIEFsZWphbmRy
byBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAgICAKICAgICAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAgICAgICAgICAgSW1wbGVtZW50IE1pbmlCcm93c2Vy
IGZvciBHdGsgcG9ydC4KICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ4NTEyCiAgICAKICAgICAgICAgICAgSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgR3RrIE1pbmlCcm93c2VyLgogICAgCiAgICAgICAgICAgICogTWluaUJyb3dzZXIvZ3Rr
OiBBZGRlZC4KICAgICAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvQnJvd3NlclZpZXcuY3BwOiBB
ZGRlZC4KICAgICAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvQnJvd3NlclZpZXcuaDogQWRkZWQu
CiAgICAgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuY3BwOiBBZGRlZC4K
ICAgICAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5oOiBBZGRlZC4KICAg
ICAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW06IEFkZGVkLgogICAgICAg
ICAgICAqIE1pbmlCcm93c2VyL2d0ay9NaW5pQnJvd3Nlci5jcHA6IEFkZGVkLgogICAgICAgICAg
ICAqIE1pbmlCcm93c2VyL2d0ay9NaW5pQnJvd3Nlci5oOiBBZGRlZC4KICAgICAgICAgICAgKiBN
aW5pQnJvd3Nlci9ndGsvbWFpbi5jcHA6IEFkZGVkLgoKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBi
L0NoYW5nZUxvZwppbmRleCBmZGQzNTA5Li42OGRlNWJmIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cK
KysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDItMTEgIFZhbXNoaWtyaXNo
bmEuWWVsbGVua2kgIDx2YW1zaGlAbW90b3JvbGEuY29tPiBhbmQgQWxlamFuZHJvIEcuIENhc3Ry
byAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnQgTWluaUJyb3dzZXIgZm9yIEd0ayBwb3J0LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTIKKworICAgICAg
ICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHdGsgTWluaUJyb3dzZXIuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKwogMjAxMS0wMy0wNCAgRGltaXRyaSBHbGF6a292ICA8ZGds
YXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRp
ZmYgLS1naXQgYS9HTlVtYWtlZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IGY4NzY5NGIu
LmFmNTQ4OTEgMTAwNjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFt
CkBAIC0yMjksNiArMjI5LDcgQEAgaW5jbHVkZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUuYW0KIGluY2x1ZGUgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KIGlmIEVOQUJM
RV9XRUJLSVQyCiBpbmNsdWRlIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCitpbmNsdWRl
IFRvb2xzL01pbmlCcm93c2VyL2d0ay9HTlVtYWtlZmlsZS5hbQogIyBbR1RLXSBSZWZhY3RvciB0
aGUgdHJhbnNsYXRpb25zIG5vdyB0aGF0IHdlIGhhdmUgd2Via2l0MgogIyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTUxNTMKIHN0YW1wLXBvOgpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDFhNWQzNTguLmNmOTkxZTEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxMS0wMi0xMSAgVmFtc2hpa3Jpc2huYS5ZZWxsZW5raSAgPHZhbXNoaUBt
b3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dCBNaW5pQnJvd3NlciBmb3IgR3RrIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMgorCisgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRp
b24gb2YgdGhlIEd0ayBNaW5pQnJvd3Nlci4KKworICAgICAgICAqIE1pbmlCcm93c2VyL2d0azog
QWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJWaWV3LmNwcDogQWRkZWQu
CisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJWaWV3Lmg6IEFkZGVkLgorICAgICAg
ICAqIE1pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmNwcDogQWRkZWQuCisgICAgICAgICog
TWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuaDogQWRkZWQuCisgICAgICAgICogTWluaUJy
b3dzZXIvZ3RrL0dOVW1ha2VmaWxlLmFtOiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9n
dGsvTWluaUJyb3dzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvTWlu
aUJyb3dzZXIuaDogQWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL21haW4uY3BwOiBB
ZGRlZC4KKwogMjAxMS0wMy0wNyAgT2phbiBWYWZhaSAgPG9qYW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJv
d3Nlci9ndGsvQnJvd3NlclZpZXcuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJW
aWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Y1NTRmCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJWaWV3LmNwcApAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5
LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJ
R0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICog
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICog
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJCcm93c2VyVmlldy5oIgorCisjaW5jbHVkZSAiQnJvd3Nlcldp
bmRvdy5oIgorCitCcm93c2VyVmlldzo6QnJvd3NlclZpZXcoKQoreworICAgIFdLQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tDb250ZXh0R2V0U2hhcmVkUHJvY2Vzc0NvbnRleHQoKTsKKyAgICBtX3dr
dmlldyA9IFdLVmlld0NyZWF0ZShjb250ZXh0LCAwKTsKK30KKworQnJvd3NlclZpZXc6On5Ccm93
c2VyVmlldygpCit7CisgICAgV0tQYWdlQ2xvc2UoZ2V0UGFnZVJlZigpKTsKK30KKwordm9pZCBC
cm93c2VyVmlldzo6bG9hZFVybChjb25zdCBjaGFyKiB1cmwpCit7CisgICAgV0tQYWdlTG9hZFVS
TChnZXRQYWdlUmVmKCksIFdLVVJMQ3JlYXRlV2l0aFVSTCh1cmwpKTsKK30KZGlmZiAtLWdpdCBh
L1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyVmlldy5oIGIvVG9vbHMvTWluaUJyb3dzZXIv
Z3RrL0Jyb3dzZXJWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0
NDI2ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyVmll
dy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEg
TW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisg
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJyb3dzZXJW
aWV3X2gKKyNkZWZpbmUgQnJvd3NlclZpZXdfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQy
Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitjbGFzcyBCcm93c2VyVmlldyB7CitwdWJsaWM6
CisgICAgQnJvd3NlclZpZXcoKTsKKyAgICB+QnJvd3NlclZpZXcoKTsKKworICAgIHZvaWQgbG9h
ZFVybChjb25zdCBjaGFyKiB1cmwpOworCisgICAgR3RrV2lkZ2V0KiBnZXRXZWJWaWV3KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBXS1ZpZXdHZXRXaW5kb3cobV93a3ZpZXcpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBXS1BhZ2VSZWYgZ2V0UGFnZVJlZigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3drdmlldyk7CisgICAgfQorCisgICAgV0tW
aWV3UmVmIG1fd2t2aWV3OworfTsKKworI2VuZGlmIC8vIEJyb3dzZXJWaWV3X2gKZGlmZiAtLWdp
dCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmNwcCBiL1Rvb2xzL01pbmlC
cm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mMjM3MWYzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3Rr
L0Jyb3dzZXJXaW5kb3cuY3BwCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJCcm93c2VyV2luZG93
LmgiCisKKyNpbmNsdWRlICJCcm93c2VyVmlldy5oIgorI2luY2x1ZGUgIk1pbmlCcm93c2VyLmgi
CisKK0Jyb3dzZXJXaW5kb3c6OkJyb3dzZXJXaW5kb3coKQorICAgIDogbV9icm93c2VyVmlldygw
KQorICAgICwgbV93aW5kb3dNYWluKDApCisgICAgLCBtX3dpbmRvd0dyb3VwKDApCisgICAgLCBt
X3dpbmRvd1VSTEVudHJ5KDApCit7Cit9CisKK0Jyb3dzZXJXaW5kb3c6On5Ccm93c2VyV2luZG93
KCkKK3sKKyAgICBpZiAobV9icm93c2VyVmlldykgeworICAgICAgICBkZWxldGUgbV9icm93c2Vy
VmlldzsKKyAgICAgICAgbV9icm93c2VyVmlldyA9IDA7CisgICAgfQorICAgIGd0a193aWRnZXRf
ZGVzdHJveShtX3dpbmRvd01haW4pOworfQorCitjb25zdCBnY2hhciogQnJvd3NlcldpbmRvdzo6
Z2V0VXJsZW50cnkoKQoreworICAgIHJldHVybiBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZ
KG1fd2luZG93VVJMRW50cnkpKTsKK30KKwordm9pZCBCcm93c2VyV2luZG93OjphY3RpdmF0ZVVy
bEVudHJ5KEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQoreworICAgIEJyb3dzZXJX
aW5kb3cqIGJyb3dzZXJXaW5kb3cgPSBzdGF0aWNfY2FzdDxCcm93c2VyV2luZG93Kj4oZGF0YSk7
CisgICAgY29uc3QgZ2NoYXIqIHVybCA9IGJyb3dzZXJXaW5kb3ctPmdldFVybGVudHJ5KCk7Cisg
ICAgYnJvd3NlcldpbmRvdy0+Z290b1VSTCh1cmwpOworfQorCit2b2lkIEJyb3dzZXJXaW5kb3c6
OmdvdG9VUkwoY29uc3QgY2hhciogdXJsKQoreworICAgIG1fYnJvd3NlclZpZXctPmxvYWRVcmwo
dXJsKTsKK30KKwordm9pZCBCcm93c2VyV2luZG93OjpjcmVhdGVXaW5kb3coaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQoreworICAgIEd0a1dpZGdldCogd2luZG93VmJveCA9IGd0a192Ym94X25ldyhG
QUxTRSwgMCk7CisKKyAgICBtX3dpbmRvd01haW4gPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9X
X1RPUExFVkVMKTsKKyAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyht
X3dpbmRvd01haW4pLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBndGtfd2lkZ2V0X3NldF9uYW1lKG1f
d2luZG93TWFpbiwgIk1pbmlCcm93c2VyIik7CisgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVD
VChtX3dpbmRvd01haW4pLCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0soTWluaUJyb3dzZXI6OmNsb3Nl
Q3VycmVudFdpbmRvdyksIChncG9pbnRlcil0aGlzKTsKKworICAgIGd0a19ib3hfcGFja19zdGFy
dChHVEtfQk9YKHdpbmRvd1Zib3gpLCBjcmVhdGVNZW51YmFyKCksIEZBTFNFLCBGQUxTRSwgMCk7
CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1god2luZG93VmJveCksIGNyZWF0ZVRvb2xi
YXIoKSwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh3
aW5kb3dWYm94KSwgY3JlYXRlQnJvd3NlcigpLCBUUlVFLCBUUlVFLCAwKTsKKworICAgIGd0a193
aW5kb3dfYWRkX2FjY2VsX2dyb3VwKEdUS19XSU5ET1cobV93aW5kb3dNYWluKSwgbV93aW5kb3dH
cm91cCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3dpbmRvd01haW4p
LCB3aW5kb3dWYm94KTsKK30KKwordm9pZCBCcm93c2VyV2luZG93OjpzaG93V2luZG93KCkKK3sK
KyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChtX2Jyb3dzZXJWaWV3LT5nZXRX
ZWJWaWV3KCkpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1fd2luZG93TWFpbik7Cit9CisK
K0d0a1dpZGdldCogQnJvd3NlcldpbmRvdzo6Y3JlYXRlTWVudWJhcigpCit7CisgICAgR3RrV2lk
Z2V0KiBmaWxlLCAqZmlsZU1lbnUsICp3aW5kb3dOZXcsICp3aW5kb3dDbG9zZTsKKyAgICBHdGtX
aWRnZXQqIHdpbmRvd01lbnViYXIgPSBndGtfbWVudV9iYXJfbmV3KCk7CisgICAgbV93aW5kb3dH
cm91cCA9IGd0a19hY2NlbF9ncm91cF9uZXcoKTsKKworICAgIGZpbGUgPSBndGtfbWVudV9pdGVt
X25ld193aXRoX2xhYmVsKCJGaWxlIik7CisgICAgZmlsZU1lbnUgPSBndGtfbWVudV9uZXcoKTsK
KyAgICBndGtfbWVudV9pdGVtX3NldF9zdWJtZW51KEdUS19NRU5VX0lURU0oZmlsZSksIGZpbGVN
ZW51KTsKKyAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwod2luZG93TWVu
dWJhciksIGZpbGUpOworCisgICAgd2luZG93TmV3ID0gZ3RrX2ltYWdlX21lbnVfaXRlbV9uZXdf
ZnJvbV9zdG9jayhHVEtfU1RPQ0tfTkVXLCBtX3dpbmRvd0dyb3VwKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KEdfT0JKRUNUKHdpbmRvd05ldyksICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soTWluaUJy
b3dzZXI6OmNyZWF0ZU5ld1dpbmRvdyksIE5VTEwpOworICAgIHdpbmRvd0Nsb3NlID0gZ3RrX2lt
YWdlX21lbnVfaXRlbV9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfUVVJVCwgbV93aW5kb3dHcm91
cCk7CisgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVCh3aW5kb3dDbG9zZSksICJhY3RpdmF0
ZSIsIEdfQ0FMTEJBQ0soTWluaUJyb3dzZXI6OmNsb3NlQ3VycmVudFdpbmRvdyksIChncG9pbnRl
cil0aGlzKTsKKyAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwoZmlsZU1l
bnUpLCB3aW5kb3dOZXcpOworICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVM
TChmaWxlTWVudSksIHdpbmRvd0Nsb3NlKTsKKworICAgIHJldHVybiB3aW5kb3dNZW51YmFyOwor
fQorCitHdGtXaWRnZXQqIEJyb3dzZXJXaW5kb3c6OmNyZWF0ZVRvb2xiYXIoKQoreworICAgIEd0
a1dpZGdldCogd2luZG93VG9vbGJhciA9IGd0a190b29sYmFyX25ldygpOworICAgIGd0a19vcmll
bnRhYmxlX3NldF9vcmllbnRhdGlvbihHVEtfT1JJRU5UQUJMRSh3aW5kb3dUb29sYmFyKSwgR1RL
X09SSUVOVEFUSU9OX0hPUklaT05UQUwpOworICAgIGd0a190b29sYmFyX3NldF9zdHlsZShHVEtf
VE9PTEJBUih3aW5kb3dUb29sYmFyKSwgR1RLX1RPT0xCQVJfQk9USF9IT1JJWik7CisgICAgR3Rr
VG9vbEl0ZW0qIGl0ZW07CisKKyAgICAvLyBUaGUgVVJMIGVudHJ5CisgICAgaXRlbSA9IGd0a190
b29sX2l0ZW1fbmV3KCk7CisgICAgZ3RrX3Rvb2xfaXRlbV9zZXRfZXhwYW5kKGl0ZW0sIFRSVUUp
OworICAgIG1fd2luZG93VVJMRW50cnkgPSBndGtfZW50cnlfbmV3KCk7CisgICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUihpdGVtKSwgbV93aW5kb3dVUkxFbnRyeSk7CisgICAgZ19z
aWduYWxfY29ubmVjdChHX09CSkVDVChtX3dpbmRvd1VSTEVudHJ5KSwgImFjdGl2YXRlIiwgR19D
QUxMQkFDSyhCcm93c2VyV2luZG93OjphY3RpdmF0ZVVybEVudHJ5KSwgKGdwb2ludGVyKXRoaXMp
OworICAgIGd0a190b29sYmFyX2luc2VydChHVEtfVE9PTEJBUih3aW5kb3dUb29sYmFyKSwgaXRl
bSwgLTEpOworCisgICAgLy8gVGhlIEdvIGJ1dHRvbgorICAgIGl0ZW0gPSBndGtfdG9vbF9idXR0
b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX09LKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdf
T0JKRUNUKGl0ZW0pLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0soQnJvd3NlcldpbmRvdzo6YWN0aXZh
dGVVcmxFbnRyeSksIChncG9pbnRlcil0aGlzKTsKKyAgICBndGtfdG9vbGJhcl9pbnNlcnQoR1RL
X1RPT0xCQVIod2luZG93VG9vbGJhciksIGl0ZW0sIC0xKTsKKyAgICBndGtfdG9vbGJhcl9zZXRf
aWNvbl9zaXplKEdUS19UT09MQkFSKHdpbmRvd1Rvb2xiYXIpLCBHVEtfSUNPTl9TSVpFX1NNQUxM
X1RPT0xCQVIpOworCisgICAgcmV0dXJuIHdpbmRvd1Rvb2xiYXI7Cit9CisKK0d0a1dpZGdldCog
QnJvd3NlcldpbmRvdzo6Y3JlYXRlQnJvd3NlcigpCit7CisgICAgR3RrV2lkZ2V0KiBzY3JvbGxl
ZFdpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KDAsIDApOworCisgICAgbV9icm93c2Vy
VmlldyA9IG5ldyBCcm93c2VyVmlldygpOworCisgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19hZGRf
d2l0aF92aWV3cG9ydChHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwgbV9icm93
c2VyVmlldy0+Z2V0V2ViVmlldygpKTsKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xp
Y3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksIEdUS19QT0xJQ1lfQVVUT01B
VElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisKKyAgICByZXR1cm4gc2Nyb2xsZWRXaW5kb3c7
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5oIGIv
VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hNWMxNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJy
b3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICoKKyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTW90b3JvbGEgTW9iaWxpdHksIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBCcm93c2VyV2luZG93X2gKKyNkZWZpbmUgQnJvd3NlcldpbmRvd19oCisK
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK2NsYXNzIEJyb3dzZXJWaWV3OworCitjbGFzcyBCcm93
c2VyV2luZG93IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQnJvd3NlcldpbmRvdyogY3JlYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQnJvd3NlcldpbmRvdzsKKyAgICB9CisgICAgc3Rh
dGljIHZvaWQgYWN0aXZhdGVVcmxFbnRyeShHdGtXaWRnZXQqLCBncG9pbnRlcik7CisKKyAgICB2
b2lkIGNyZWF0ZVdpbmRvdyhpbnQsIGludCk7CisgICAgdm9pZCBzaG93V2luZG93KCk7CisKKyAg
ICB2b2lkIGdvdG9VUkwoY29uc3QgY2hhciopOworICAgIGNvbnN0IGdjaGFyKiBnZXRVcmxlbnRy
eSgpOworCisgICAgfkJyb3dzZXJXaW5kb3coKTsKKworcHJpdmF0ZToKKyAgICBCcm93c2VyV2lu
ZG93KCk7CisKKyAgICBHdGtXaWRnZXQqIGNyZWF0ZU1lbnViYXIoKTsKKyAgICBHdGtXaWRnZXQq
IGNyZWF0ZVRvb2xiYXIoKTsKKyAgICBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoKTsKKworICAg
IEJyb3dzZXJWaWV3KiBtX2Jyb3dzZXJWaWV3OworICAgIEd0a1dpZGdldCogbV93aW5kb3dNYWlu
OworICAgIEd0a0FjY2VsR3JvdXAqIG1fd2luZG93R3JvdXA7CisgICAgR3RrV2lkZ2V0KiBtX3dp
bmRvd1VSTEVudHJ5OworfTsKKworI2VuZGlmIC8vIEJyb3dzZXJXaW5kb3dfaApkaWZmIC0tZ2l0
IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvVG9vbHMvTWluaUJyb3dz
ZXIvZ3RrL0dOVW1ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
Ljg3MGEwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvR05VbWFr
ZWZpbGUuYW0KQEAgLTAsMCArMSw1NCBAQAorCisjTWluaUJyb3dzZXIKK2Jpbl9QUk9HUkFNUyAr
PSBcCisJUHJvZ3JhbXMvTWluaUJyb3dzZXIKKworUHJvZ3JhbXNfTWluaUJyb3dzZXJfQ1BQRkxB
R1MgPSBcCisJLUkkKFdlYktpdDIpIFwKKwktSSQoV2ViS2l0MikvU2hhcmVkIFwKKwktSSQoV2Vi
S2l0MikvU2hhcmVkL0FQSS9jIFwKKwktSSQoV2ViS2l0MikvU2hhcmVkL0FQSS9jL2d0ayBcCisJ
LUkkKFdlYktpdDIpL1VJUHJvY2VzcyBcCisJLUkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvQyBc
CisJLUkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvQy9ndGsgXAorCS1JJChXZWJLaXQyKS9VSVBy
b2Nlc3MvQVBJL2NwcCBcCisJLUkkKHNyY2RpcikvVG9vbHMvTWluaUJyb3dzZXIvZ3RrIFwKKwkt
SSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL2luY2x1ZGUgXAorCS1JJCh0
b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZS9KYXZhU2NyaXB0Q29y
ZSBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlL1dl
YkNvcmUgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVk
ZS9XZWJLaXQyIFwKKwktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQyIFwKKwkkKGdsb2JhbF9jcHBm
bGFncykgXAorCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKKwkkKEdMSUJfQ0ZMQUdTKSBc
CisJJChHVEtfQ0ZMQUdTKQorCitQcm9ncmFtc19NaW5pQnJvd3Nlcl9TT1VSQ0VTID0gXAorCVRv
b2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyVmlldy5jcHAgXAorCVRvb2xzL01pbmlCcm93c2Vy
L2d0ay9Ccm93c2VyVmlldy5oIFwKKwlUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRv
dy5jcHAgXAorCVRvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmggXAorCVRvb2xz
L01pbmlCcm93c2VyL2d0ay9NaW5pQnJvd3Nlci5jcHAgXAorCVRvb2xzL01pbmlCcm93c2VyL2d0
ay9NaW5pQnJvd3Nlci5oIFwKKwlUb29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jcHAKKworQlVJ
TFRfU09VUkNFUyArPSBcCisJZ2VuZXJhdGUtbWluaWJyb3dzZXItZm9yd2FyZC1oZWFkZXJzCisK
K01pbmlCcm93c2VyIDo9ICQoc3JjZGlyKS9Ub29scy9NaW5pQnJvd3Nlci9ndGsKK01pbmlCcm93
c2VyRndkSGVhZGVycyA6PSAkKEdFTlNPVVJDRVNfV0VCS0lUMikvaW5jbHVkZQorZ2VuZXJhdGUt
bWluaWJyb3dzZXItZm9yd2FyZC1oZWFkZXJzOiAkKFdlYktpdDIpL1NjcmlwdHMvZ2VuZXJhdGUt
Zm9yd2FyZGluZy1oZWFkZXJzLnBsICQoUHJvZ3JhbXNfTWluaUJyb3dzZXJfU09VUkNFUykKKwkk
KEFNX1ZfR0VOKSQoUEVSTCkgJDwgJChNaW5pQnJvd3NlcikgJChNaW5pQnJvd3NlckZ3ZEhlYWRl
cnMpIGd0aworCSQoQU1fVl9HRU4pJChQRVJMKSAkPCAkKE1pbmlCcm93c2VyKSAkKE1pbmlCcm93
c2VyRndkSGVhZGVycykgc291cAorCitQcm9ncmFtc19NaW5pQnJvd3Nlcl9MREFERCA9IFwKKwls
aWJ3ZWJraXQyZ3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJ
X01JTk9SX1ZFUlNJT05ALmxhIFwKKwkkKEdMSUJfTElCUykgXAorCSQoR1RLX0xJQlMpCisKK1By
b2dyYW1zX01pbmlCcm93c2VyX0xERkxBR1MgPSBcCisJLW5vLWZhc3QtaW5zdGFsbCBcCisJLW5v
LWluc3RhbGwKKworQ0xFQU5GSUxFUyArPSBcCisJJCh0b3BfYnVpbGRkaXIpL1Byb2dyYW1zL01p
bmlCcm93c2VyCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvTWluaUJyb3dzZXIu
Y3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjhhZjQxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
TWluaUJyb3dzZXIvZ3RrL01pbmlCcm93c2VyLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAor
ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJN
aW5pQnJvd3Nlci5oIgorCisjaW5jbHVkZSAiQnJvd3NlcldpbmRvdy5oIgorCitNaW5pQnJvd3Nl
ciogTWluaUJyb3dzZXI6OnNoYXJlZCgpCit7CisgICAgc3RhdGljIE1pbmlCcm93c2VyKiBpbnN0
YW5jZSA9IDA7CisgICAgaWYgKCFpbnN0YW5jZSkKKyAgICAgICAgaW5zdGFuY2UgPSBuZXcgTWlu
aUJyb3dzZXIoKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK01pbmlCcm93c2VyOjp+TWlu
aUJyb3dzZXIoKQoreworICAgIG1fYnJvd3NlcldpbmRvd3MuY2xlYXIoKTsKKyAgICBndGtfbWFp
bl9xdWl0KCk7Cit9CisKK3ZvaWQgTWluaUJyb3dzZXI6OmNyZWF0ZU5ld1dpbmRvdyhHdGtXaWRn
ZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBNaW5pQnJvd3Nlcjo6c2hhcmVkKCkt
PmNyZWF0ZVdpbmRvdygpOworfQorCit2b2lkIE1pbmlCcm93c2VyOjpjbG9zZUN1cnJlbnRXaW5k
b3coR3RrV2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgQnJvd3NlcldpbmRv
dyogd2luZG93ID0gc3RhdGljX2Nhc3Q8QnJvd3NlcldpbmRvdyo+KGRhdGEpOworICAgIE1pbmlC
cm93c2VyOjpzaGFyZWQoKS0+dW5yZWdpc3RlcldpbmRvdyh3aW5kb3cpOworfQorCit2b2lkIE1p
bmlCcm93c2VyOjpyZWdpc3RlcldpbmRvdyhCcm93c2VyV2luZG93KiB3aW5kb3cpCit7CisgICAg
bV9icm93c2VyV2luZG93cy5pbnNlcnQod2luZG93KTsKK30KKwordm9pZCBNaW5pQnJvd3Nlcjo6
dW5yZWdpc3RlcldpbmRvdyhCcm93c2VyV2luZG93KiB3aW5kb3cpCit7CisgICAgc3RkOjpzZXQ8
QnJvd3NlcldpbmRvdyo+OjppdGVyYXRvciBpdDsKKyAgICBpdCA9IG1fYnJvd3NlcldpbmRvd3Mu
ZmluZCh3aW5kb3cpOworICAgIGlmIChpdCA9PSBtX2Jyb3dzZXJXaW5kb3dzLmVuZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2Jyb3dzZXJXaW5kb3dzLmVyYXNlKHdpbmRvdyk7CisgICAg
ZGVsZXRlIHdpbmRvdzsKKyAgICB3aW5kb3cgPSAwOworCisgICAgaWYgKG1fYnJvd3NlcldpbmRv
d3MuZW1wdHkoKSkKKyAgICAgICAgZ3RrX21haW5fcXVpdCgpOworfQorCit2b2lkIE1pbmlCcm93
c2VyOjpjcmVhdGVXaW5kb3coKQoreworICAgIEJyb3dzZXJXaW5kb3cqIGJyb3dzZXJXaW5kb3cg
PSBCcm93c2VyV2luZG93OjpjcmVhdGUoKTsKKyAgICByZWdpc3RlcldpbmRvdyhicm93c2VyV2lu
ZG93KTsKKyAgICBicm93c2VyV2luZG93LT5jcmVhdGVXaW5kb3coODAwLCA2MDApOworICAgIGJy
b3dzZXJXaW5kb3ctPmdvdG9VUkwoImh0dHA6Ly93ZWJraXQub3JnIik7CisgICAgYnJvd3Nlcldp
bmRvdy0+c2hvd1dpbmRvdygpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3Rr
L01pbmlCcm93c2VyLmggYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvTWluaUJyb3dzZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc2ZDJlMwotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9NaW5pQnJvd3Nlci5oCkBAIC0wLDAgKzEsNTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogTmVpdGhlciB0aGUgbmFtZSBvZiBNb3Rvcm9s
YSBNb2JpbGl0eSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUK
KyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1pbmlCcm93c2VyX2gKKyNkZWZpbmUgTWluaUJy
b3dzZXJfaAorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHNldD4KKworY2xhc3Mg
QnJvd3NlcldpbmRvdzsKKworY2xhc3MgTWluaUJyb3dzZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBNaW5pQnJvd3Nlciogc2hhcmVkKCk7CisgICAgc3RhdGljIHZvaWQgY3JlYXRlTmV3V2luZG93
KEd0a1dpZGdldCosIGdwb2ludGVyKTsKKyAgICBzdGF0aWMgdm9pZCBjbG9zZUN1cnJlbnRXaW5k
b3coR3RrV2lkZ2V0KiwgZ3BvaW50ZXIpOworCisgICAgfk1pbmlCcm93c2VyKCk7CisKKyAgICB2
b2lkIGNyZWF0ZVdpbmRvdygpOworICAgIHZvaWQgcmVnaXN0ZXJXaW5kb3coQnJvd3NlcldpbmRv
dyopOworICAgIHZvaWQgdW5yZWdpc3RlcldpbmRvdyhCcm93c2VyV2luZG93Kik7CisKK3ByaXZh
dGU6CisgICAgc3RkOjpzZXQ8QnJvd3NlcldpbmRvdyo+IG1fYnJvd3NlcldpbmRvd3M7Cit9Owor
CisjZW5kaWYgLy8gTWluaUJyb3dzZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIv
Z3RrL21haW4uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkM2M2NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jcHAKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hU
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgor
CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICAgIGd0a19pbml0KCZhcmdj
LCAmYXJndik7CisKKyAgICBNaW5pQnJvd3Nlcjo6c2hhcmVkKCktPmNyZWF0ZVdpbmRvdygpOwor
ICAgIGd0a19tYWluKCk7CisKKyAgICByZXR1cm4gMDsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86211</attachid>
            <date>2011-03-18 14:19:37 -0700</date>
            <delta_ts>2011-03-23 09:31:21 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>minibrowser.patch</filename>
            <type>text/plain</type>
            <size>10192</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IGVmMGIxZjllNjMxMGRmNGEyZDgwZDRlNTVkY2QxZjVkZTU5ZDk1ZmIKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVGh1IEphbiAyMCAx
MzozNDo1NSAyMDExICswMTAwCgogICAgMjAxMS0wMy0xOCAgVmFtc2hpa3Jpc2huYS5ZZWxsZW5r
aSAgPHZhbXNoaUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBp
Z2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgog
ICAgCiAgICAgICAgICAgIEltcGxlbWVudCBNaW5pQnJvd3NlciBmb3IgR3RrIHBvcnQuCiAgICAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMgogICAg
CiAgICAgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEd0ayBNaW5pQnJvd3Nl
ci4KICAgIAogICAgICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgogICAgCiAgICAyMDExLTAzLTE4
ICBWYW1zaGlrcmlzaG5hLlllbGxlbmtpICA8dmFtc2hpQG1vdG9yb2xhLmNvbT4gYW5kIEFsZWph
bmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAgICAKICAgICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAgICAgICAgICAgSW1wbGVtZW50IE1pbmlCcm93
c2VyIGZvciBHdGsgcG9ydC4KICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ4NTEyCiAgICAKICAgICAgICAgICAgSW5pdGlhbCBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgR3RrIE1pbmlCcm93c2VyLgogICAgCiAgICAgICAgICAgICogTWluaUJyb3dzZXIv
Z3RrL0dOVW1ha2VmaWxlLmFtOiBBZGRlZC4KICAgICAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsv
bWFpbi5jOiBBZGRlZC4KICAgICAgICAgICAgKGFjdGl2YXRlVXJpRW50cnlDYik6CiAgICAgICAg
ICAgIChkZXN0cm95Q2IpOgogICAgICAgICAgICAoZ29CYWNrQ2IpOgogICAgICAgICAgICAoZ29G
b3J3YXJkQ2IpOgogICAgICAgICAgICAoY3JlYXRlQnJvd3Nlcik6CiAgICAgICAgICAgIChjcmVh
dGVUb29sYmFyKToKICAgICAgICAgICAgKGNyZWF0ZVdpbmRvdyk6CiAgICAgICAgICAgIChmaWxl
bmFtZVRvVVJMKToKICAgICAgICAgICAgKG1haW4pOgoKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBi
L0NoYW5nZUxvZwppbmRleCA5Yjc5NWY4Li5jZGFhM2I2IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cK
KysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDMtMTggIFZhbXNoaWtyaXNo
bmEuWWVsbGVua2kgIDx2YW1zaGlAbW90b3JvbGEuY29tPiBhbmQgQWxlamFuZHJvIEcuIENhc3Ry
byAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnQgTWluaUJyb3dzZXIgZm9yIEd0ayBwb3J0LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTIKKworICAgICAg
ICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHdGsgTWluaUJyb3dzZXIuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKwogMjAxMS0wMy0xMCAgVmlhdGNoZXNsYXYgT3N0YXBlbmtv
ICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBMYXN6bG8gR29tYm9zLgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmls
ZS5hbQppbmRleCBmODc2OTRiLi5hZjU0ODkxIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQor
KysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtMjI5LDYgKzIyOSw3IEBAIGluY2x1ZGUgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCiBpbmNsdWRlIFNvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCiBpZiBFTkFCTEVfV0VCS0lUMgogaW5jbHVkZSBTb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbQoraW5jbHVkZSBUb29scy9NaW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW0K
ICMgW0dUS10gUmVmYWN0b3IgdGhlIHRyYW5zbGF0aW9ucyBub3cgdGhhdCB3ZSBoYXZlIHdlYmtp
dDIKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MTUzCiBzdGFt
cC1wbzoKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCA2OTEzMTU3Li4wODc4NWIyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDMtMTggIFZhbXNoaWtyaXNobmEu
WWVsbGVua2kgIDx2YW1zaGlAbW90b3JvbGEuY29tPiBhbmQgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbXBsZW1lbnQgTWluaUJyb3dzZXIgZm9yIEd0ayBwb3J0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTIKKworICAgICAgICBJ
bml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHdGsgTWluaUJyb3dzZXIuCisKKyAgICAgICAg
KiBNaW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW06IEFkZGVkLgorICAgICAgICAqIE1pbmlC
cm93c2VyL2d0ay9tYWluLmM6IEFkZGVkLgorICAgICAgICAoYWN0aXZhdGVVcmlFbnRyeUNiKToK
KyAgICAgICAgKGRlc3Ryb3lDYik6CisgICAgICAgIChnb0JhY2tDYik6CisgICAgICAgIChnb0Zv
cndhcmRDYik6CisgICAgICAgIChjcmVhdGVCcm93c2VyKToKKyAgICAgICAgKGNyZWF0ZVRvb2xi
YXIpOgorICAgICAgICAoY3JlYXRlV2luZG93KToKKyAgICAgICAgKGZpbGVuYW1lVG9VUkwpOgor
ICAgICAgICAobWFpbik6CisKIDIwMTEtMDMtMTggIEpvaG4gS25vdHRlbmJlbHQgIDxqa25vdHRl
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KZGlmZiAtLWdpdCBhL1Rvb2xz
L01pbmlCcm93c2VyL2d0ay9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9H
TlVtYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmJjMTM4
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0dOVW1ha2VmaWxlLmFt
CkBAIC0wLDAgKzEsMzUgQEAKKworI01pbmlCcm93c2VyCitiaW5fUFJPR1JBTVMgKz0gXAorCVBy
b2dyYW1zL01pbmlCcm93c2VyCisKK1Byb2dyYW1zX01pbmlCcm93c2VyX0NQUEZMQUdTID0gXAor
CS1JJChzcmNkaXIpL1NvdXJjZSBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9pbmNsdWRlIFwKKwkkKGdsb2JhbF9jcHBmbGFncykgXAorCSQoR0xJQl9DRkxBR1Mp
IFwKKwkkKEdUS19DRkxBR1MpCisKK1Byb2dyYW1zX01pbmlCcm93c2VyX1NPVVJDRVMgPSBcCisJ
VG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYworCitCVUlMVF9TT1VSQ0VTICs9IFwKKwlnZW5l
cmF0ZS1taW5pYnJvd3Nlci1mb3J3YXJkLWhlYWRlcnMKKworTWluaUJyb3dzZXIgOj0gJChzcmNk
aXIpL1Rvb2xzL01pbmlCcm93c2VyL2d0aworTWluaUJyb3dzZXJGd2RIZWFkZXJzIDo9ICQoR0VO
U09VUkNFU19XRUJLSVQyKS9pbmNsdWRlCitnZW5lcmF0ZS1taW5pYnJvd3Nlci1mb3J3YXJkLWhl
YWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwg
JChQcm9ncmFtc19NaW5pQnJvd3Nlcl9TT1VSQ0VTKQorCSQoQU1fVl9HRU4pJChQRVJMKSAkPCAk
KE1pbmlCcm93c2VyKSAkKE1pbmlCcm93c2VyRndkSGVhZGVycykgZ3RrCisJJChBTV9WX0dFTikk
KFBFUkwpICQ8ICQoTWluaUJyb3dzZXIpICQoTWluaUJyb3dzZXJGd2RIZWFkZXJzKSBzb3VwCisK
K1Byb2dyYW1zX01pbmlCcm93c2VyX0xEQUREID0gXAorCWxpYndlYmtpdDJndGstQFdFQktJVEdU
S19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAor
CSQoR0xJQl9MSUJTKSBcCisJJChHVEtfTElCUykKKworUHJvZ3JhbXNfTWluaUJyb3dzZXJfTERG
TEFHUyA9IFwKKwktbm8tZmFzdC1pbnN0YWxsIFwKKwktbm8taW5zdGFsbAorCitDTEVBTkZJTEVT
ICs9IFwKKwkkKHRvcF9idWlsZGRpcikvUHJvZ3JhbXMvTWluaUJyb3dzZXIKZGlmZiAtLWdpdCBh
L1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFp
bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzQyZmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCkBAIC0wLDAgKzEsMTY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRklYTUU6IHJlcGxhY2UgYm9vbCB0eXBlIGluIHRo
ZSBDIEFQSQorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NjY4
CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+Cisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorCitzdGF0aWMgR3RrV2lkZ2V0ICpjcmVhdGVXaW5kb3coV0tW
aWV3UmVmICp3ZWJWaWV3KTsKKworc3RhdGljIHZvaWQgYWN0aXZhdGVVcmlFbnRyeUNiKEd0a1dp
ZGdldCAqZW50cnksIGdwb2ludGVyIGRhdGEpCit7CisgICAgV0tWaWV3UmVmICp3ZWJWaWV3ID0g
Z19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QoZW50cnkpLCAid2ViLXZpZXciKTsKKyAgICBjb25z
dCBnY2hhciAqdXJpID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShlbnRyeSkpOworICAg
IGdfYXNzZXJ0KHVyaSk7CisgICAgV0tQYWdlTG9hZFVSTChXS1ZpZXdHZXRQYWdlKCp3ZWJWaWV3
KSwgV0tVUkxDcmVhdGVXaXRoVVJMKHVyaSkpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95Q2Io
R3RrV2lkZ2V0ICp3aWRnZXQsIEd0a1dpZGdldCAqd2luZG93KQoreworICAgIGd0a19tYWluX3F1
aXQoKTsKK30KKworc3RhdGljIHZvaWQgZ29CYWNrQ2IoR3RrV2lkZ2V0ICp3aWRnZXQsIFdLVmll
d1JlZiAqd2ViVmlldykKK3sKKyAgICBXS1BhZ2VHb0JhY2soV0tWaWV3R2V0UGFnZSgqd2ViVmll
dykpOworfQorCitzdGF0aWMgdm9pZCBnb0ZvcndhcmRDYihHdGtXaWRnZXQgKndpZGdldCwgV0tW
aWV3UmVmICp3ZWJWaWV3KQoreworICAgIFdLUGFnZUdvRm9yd2FyZChXS1ZpZXdHZXRQYWdlKCp3
ZWJWaWV3KSk7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQgKmNyZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0
ICp3aW5kb3csIEd0a1dpZGdldCAqdXJpRW50cnksIFdLVmlld1JlZiAqd2ViVmlldykKK3sKKyAg
ICBHdGtXaWRnZXQgKndlYlZpZXdXaWRnZXQgPSBXS1ZpZXdHZXRXaW5kb3coKndlYlZpZXcpOwor
CisgICAgcmV0dXJuIHdlYlZpZXdXaWRnZXQ7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQgKmNyZWF0
ZVRvb2xiYXIoR3RrV2lkZ2V0ICp1cmlFbnRyeSwgV0tWaWV3UmVmICp3ZWJWaWV3KQoreworICAg
IEd0a1dpZGdldCAqdG9vbGJhciA9IGd0a190b29sYmFyX25ldygpOworCisjaWYgR1RLX0NIRUNL
X1ZFUlNJT04oMiwgMTUsIDApCisgICAgZ3RrX29yaWVudGFibGVfc2V0X29yaWVudGF0aW9uKEdU
S19PUklFTlRBQkxFKHRvb2xiYXIpLCBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7CisjZWxz
ZQorICAgIGd0a190b29sYmFyX3NldF9vcmllbnRhdGlvbihHVEtfVE9PTEJBUih0b29sYmFyKSwg
R1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpOworI2VuZGlmCisgICAgZ3RrX3Rvb2xiYXJfc2V0
X3N0eWxlKEdUS19UT09MQkFSKHRvb2xiYXIpLCBHVEtfVE9PTEJBUl9CT1RIX0hPUklaKTsKKwor
ICAgIEd0a1Rvb2xJdGVtICppdGVtOworCisgICAgLyogdGhlIGJhY2sgYnV0dG9uICovCisgICAg
aXRlbSA9IGd0a190b29sX2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfR09fQkFDSyk7
CisgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVChpdGVtKSwgImNsaWNrZWQiLCBHX0NBTExC
QUNLKGdvQmFja0NiKSwgd2ViVmlldyk7CisgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0KEdUS19UT09M
QkFSKHRvb2xiYXIpLCBpdGVtLCAtMSk7CisKKyAgICAvKiBUaGUgZm9yd2FyZCBidXR0b24gKi8K
KyAgICBpdGVtID0gZ3RrX3Rvb2xfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19HT19G
T1JXQVJEKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKGl0ZW0pLCAiY2xpY2tlZCIs
IEdfQ0FMTEJBQ0soZ29Gb3J3YXJkQ2IpLCB3ZWJWaWV3KTsKKyAgICBndGtfdG9vbGJhcl9pbnNl
cnQoR1RLX1RPT0xCQVIodG9vbGJhciksIGl0ZW0sIC0xKTsKKworICAgIC8qIFRoZSBVUkwgZW50
cnkgKi8KKyAgICBpdGVtID0gZ3RrX3Rvb2xfaXRlbV9uZXcoKTsKKyAgICBndGtfdG9vbF9pdGVt
X3NldF9leHBhbmQoaXRlbSwgVFJVRSk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUihpdGVtKSwgdXJpRW50cnkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QodXJp
RW50cnkpLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKGFjdGl2YXRlVXJpRW50cnlDYiksIE5VTEwp
OworICAgIGd0a190b29sYmFyX2luc2VydChHVEtfVE9PTEJBUih0b29sYmFyKSwgaXRlbSwgLTEp
OworCisgICAgLyogVGhlIGdvIGJ1dHRvbiAqLworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JK
RUNUKHVyaUVudHJ5KSwgIndlYi12aWV3Iiwgd2ViVmlldyk7CisgICAgaXRlbSA9IGd0a190b29s
X2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfT0spOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChHX09CSkVDVChpdGVtKSwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGFjdGl2YXRl
VXJpRW50cnlDYiksIChncG9pbnRlcil1cmlFbnRyeSk7CisgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0
KEdUS19UT09MQkFSKHRvb2xiYXIpLCBpdGVtLCAtMSk7CisKKyAgICByZXR1cm4gdG9vbGJhcjsK
K30KKworc3RhdGljIEd0a1dpZGdldCAqY3JlYXRlV2luZG93KFdLVmlld1JlZiAqd2ViVmlldykK
K3sKKyAgICBHdGtXaWRnZXQgKnZib3g7CisgICAgR3RrV2lkZ2V0ICp3aW5kb3c7CisgICAgR3Rr
V2lkZ2V0ICp1cmlFbnRyeTsKKyAgICBHdGtXaWRnZXQgKndlYlZpZXdXaWRnZXQ7CisKKyAgICB3
aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBndGtfd2lu
ZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA4MDAsIDYwMCk7CisgICAg
Z3RrX3dpZGdldF9zZXRfbmFtZSh3aW5kb3csICJNaW5pQnJvd3NlciIpOworCisgICAgV0tDb250
ZXh0UmVmIGNvbnRleHQgPSBXS0NvbnRleHRHZXRTaGFyZWRQcm9jZXNzQ29udGV4dCgpOworICAg
ICp3ZWJWaWV3ID0gV0tWaWV3Q3JlYXRlKGNvbnRleHQsIDApOworICAgIHdlYlZpZXdXaWRnZXQg
PSBXS1ZpZXdHZXRXaW5kb3coKndlYlZpZXcpOworCisgICAgdXJpRW50cnkgPSBndGtfZW50cnlf
bmV3KCk7CisKKyAgICB2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTsKKyAgICBndGtfYm94
X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgY3JlYXRlVG9vbGJhcih1cmlFbnRyeSwgd2ViVmll
dyksIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJv
eCksIGNyZWF0ZUJyb3dzZXIod2luZG93LCB1cmlFbnRyeSwgd2ViVmlldyksIFRSVUUsIFRSVUUs
IDApOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94
KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0so
ZGVzdHJveUNiKSwgTlVMTCk7CisKKyAgICByZXR1cm4gd2luZG93OworfQorCitzdGF0aWMgZ2No
YXIgKmZpbGVuYW1lVG9VUkwoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgaWYgKCFnX2Zp
bGVfdGVzdChmaWxlbmFtZSwgR19GSUxFX1RFU1RfRVhJU1RTKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBHRmlsZSAqZ2ZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVuYW1lKTsKKyAg
ICBnY2hhciAqZmlsZVVSTCA9IGdfZmlsZV9nZXRfdXJpKGdmaWxlKTsKKyAgICBnX29iamVjdF91
bnJlZihnZmlsZSk7CisKKyAgICByZXR1cm4gZmlsZVVSTDsKK30KKworaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBXS1ZpZXdSZWYgd2ViVmlldzsKKyAgICBHdGtXaWRn
ZXQgKm1haW5fd2luZG93OworCisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKKyAgICBpZiAo
IWdfdGhyZWFkX3N1cHBvcnRlZCgpKQorICAgICAgICBnX3RocmVhZF9pbml0KE5VTEwpOworCisg
ICAgbWFpbl93aW5kb3cgPSBjcmVhdGVXaW5kb3coJndlYlZpZXcpOworCisgICAgZ2NoYXIgKnVy
aSA9KGdjaGFyKikoYXJnYyA+IDEgPyBhcmd2WzFdIDogImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8i
KTsKKyAgICBnY2hhciAqZmlsZVVSTCA9IGZpbGVuYW1lVG9VUkwodXJpKTsKKworICAgIFdLUGFn
ZUxvYWRVUkwoV0tWaWV3R2V0UGFnZSh3ZWJWaWV3KSwgV0tVUkxDcmVhdGVXaXRoVVJMKGZpbGVV
UkwpKTsKKyAgICBnX2ZyZWUoZmlsZVVSTCk7CisKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMo
V0tWaWV3R2V0V2luZG93KHdlYlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1haW5f
d2luZG93KTsKKyAgICBndGtfbWFpbigpOworCisgICAgcmV0dXJuIDA7Cit9Cg==
</data>
<flag name="review"
          id="78446"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86627</attachid>
            <date>2011-03-23 09:31:21 -0700</date>
            <delta_ts>2011-03-25 11:19:10 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>minibrowser.patch</filename>
            <type>text/plain</type>
            <size>9805</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDJjY2VkNDZjZDA0YjZhYzRkODJhNjYzZjE0ZDgxYzU4MmJjZTc5MzUKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVGh1IEphbiAyMCAx
MzozNDo1NSAyMDExICswMTAwCgogICAgMjAxMS0wMy0xOCAgVmFtc2hpa3Jpc2huYS5ZZWxsZW5r
aSAgPHZhbXNoaUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBp
Z2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgog
ICAgCiAgICAgICAgICAgIEltcGxlbWVudCBNaW5pQnJvd3NlciBmb3IgR3RrIHBvcnQuCiAgICAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMgogICAg
CiAgICAgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEd0ayBNaW5pQnJvd3Nl
ci4KICAgIAogICAgICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgogICAgCiAgICAyMDExLTAzLTE4
ICBWYW1zaGlrcmlzaG5hLlllbGxlbmtpICA8dmFtc2hpQG1vdG9yb2xhLmNvbT4gYW5kIEFsZWph
bmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAgICAKICAgICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAgICAgICAgICAgSW1wbGVtZW50IE1pbmlCcm93
c2VyIGZvciBHdGsgcG9ydC4KICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ4NTEyCiAgICAKICAgICAgICAgICAgSW5pdGlhbCBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgR3RrIE1pbmlCcm93c2VyLgogICAgCiAgICAgICAgICAgICogTWluaUJyb3dzZXIv
Z3RrL0dOVW1ha2VmaWxlLmFtOiBBZGRlZC4KICAgICAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsv
bWFpbi5jOiBBZGRlZC4KICAgICAgICAgICAgKGFjdGl2YXRlVXJpRW50cnlDYik6CiAgICAgICAg
ICAgIChkZXN0cm95Q2IpOgogICAgICAgICAgICAoZ29CYWNrQ2IpOgogICAgICAgICAgICAoZ29G
b3J3YXJkQ2IpOgogICAgICAgICAgICAoY3JlYXRlVG9vbGJhcik6CiAgICAgICAgICAgIChjcmVh
dGVXaW5kb3cpOgogICAgICAgICAgICAoZmlsZW5hbWVUb1VSTCk6CiAgICAgICAgICAgIChtYWlu
KToKCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggZGFhMTE2ZC4uNjQw
YWUxYSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDExLTAzLTE4ICBWYW1zaGlrcmlzaG5hLlllbGxlbmtpICA8dmFtc2hpQG1vdG9yb2xh
LmNvbT4gYW5kIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IE1pbmlC
cm93c2VyIGZvciBHdGsgcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ4NTEyCisKKyAgICAgICAgSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0
aGUgR3RrIE1pbmlCcm93c2VyLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisKIDIwMTEt
MDMtMjMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZp
bGUuYW0KaW5kZXggZjg3Njk0Yi4uYWY1NDg5MSAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0K
KysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTIyOSw2ICsyMjksNyBAQCBpbmNsdWRlIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQogaWYgRU5BQkxFX1dFQktJVDIKIGluY2x1ZGUgU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUuYW0KK2luY2x1ZGUgVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0dOVW1ha2VmaWxlLmFt
CiAjIFtHVEtdIFJlZmFjdG9yIHRoZSB0cmFuc2xhdGlvbnMgbm93IHRoYXQgd2UgaGF2ZSB3ZWJr
aXQyCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTE1Mwogc3Rh
bXAtcG86CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggZmY1OTZjNi4uNTc2NTIxOCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDExLTAzLTE4ICBWYW1zaGlrcmlzaG5h
LlllbGxlbmtpICA8dmFtc2hpQG1vdG9yb2xhLmNvbT4gYW5kIEFsZWphbmRybyBHLiBDYXN0cm8g
IDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IE1pbmlCcm93c2VyIGZvciBHdGsgcG9ydC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTEyCisKKyAgICAgICAg
SW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR3RrIE1pbmlCcm93c2VyLgorCisgICAgICAg
ICogTWluaUJyb3dzZXIvZ3RrL0dOVW1ha2VmaWxlLmFtOiBBZGRlZC4KKyAgICAgICAgKiBNaW5p
QnJvd3Nlci9ndGsvbWFpbi5jOiBBZGRlZC4KKyAgICAgICAgKGFjdGl2YXRlVXJpRW50cnlDYik6
CisgICAgICAgIChkZXN0cm95Q2IpOgorICAgICAgICAoZ29CYWNrQ2IpOgorICAgICAgICAoZ29G
b3J3YXJkQ2IpOgorICAgICAgICAoY3JlYXRlVG9vbGJhcik6CisgICAgICAgIChjcmVhdGVXaW5k
b3cpOgorICAgICAgICAoZmlsZW5hbWVUb1VSTCk6CisgICAgICAgIChtYWluKToKKwogMjAxMS0w
My0yMiAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9HTlVtYWtl
ZmlsZS5hbSBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9HTlVtYWtlZmlsZS5hbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmJjMTM4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvTWluaUJyb3dzZXIvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzUgQEAKKworI01p
bmlCcm93c2VyCitiaW5fUFJPR1JBTVMgKz0gXAorCVByb2dyYW1zL01pbmlCcm93c2VyCisKK1By
b2dyYW1zX01pbmlCcm93c2VyX0NQUEZMQUdTID0gXAorCS1JJChzcmNkaXIpL1NvdXJjZSBcCisJ
LUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlIFwKKwkkKGds
b2JhbF9jcHBmbGFncykgXAorCSQoR0xJQl9DRkxBR1MpIFwKKwkkKEdUS19DRkxBR1MpCisKK1By
b2dyYW1zX01pbmlCcm93c2VyX1NPVVJDRVMgPSBcCisJVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21h
aW4uYworCitCVUlMVF9TT1VSQ0VTICs9IFwKKwlnZW5lcmF0ZS1taW5pYnJvd3Nlci1mb3J3YXJk
LWhlYWRlcnMKKworTWluaUJyb3dzZXIgOj0gJChzcmNkaXIpL1Rvb2xzL01pbmlCcm93c2VyL2d0
aworTWluaUJyb3dzZXJGd2RIZWFkZXJzIDo9ICQoR0VOU09VUkNFU19XRUJLSVQyKS9pbmNsdWRl
CitnZW5lcmF0ZS1taW5pYnJvd3Nlci1mb3J3YXJkLWhlYWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0
cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgJChQcm9ncmFtc19NaW5pQnJvd3Nlcl9T
T1VSQ0VTKQorCSQoQU1fVl9HRU4pJChQRVJMKSAkPCAkKE1pbmlCcm93c2VyKSAkKE1pbmlCcm93
c2VyRndkSGVhZGVycykgZ3RrCisJJChBTV9WX0dFTikkKFBFUkwpICQ8ICQoTWluaUJyb3dzZXIp
ICQoTWluaUJyb3dzZXJGd2RIZWFkZXJzKSBzb3VwCisKK1Byb2dyYW1zX01pbmlCcm93c2VyX0xE
QUREID0gXAorCWxpYndlYmtpdDJndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdF
QktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAorCSQoR0xJQl9MSUJTKSBcCisJJChHVEtf
TElCUykKKworUHJvZ3JhbXNfTWluaUJyb3dzZXJfTERGTEFHUyA9IFwKKwktbm8tZmFzdC1pbnN0
YWxsIFwKKwktbm8taW5zdGFsbAorCitDTEVBTkZJTEVTICs9IFwKKwkkKHRvcF9idWlsZGRpcikv
UHJvZ3JhbXMvTWluaUJyb3dzZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9t
YWluLmMgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjFlZDk2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJv
d3Nlci9ndGsvbWFpbi5jCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFs
cEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRklYTUU6IHJlcGxhY2UgYm9vbCB0eXBlIGluIHRoZSBDIEFQSQorLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NjY4CisjaW5jbHVkZSA8c3RkYm9vbC5oPgor
CisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitz
dGF0aWMgR3RrV2lkZ2V0ICpjcmVhdGVXaW5kb3coV0tWaWV3UmVmICp3ZWJWaWV3KTsKKworc3Rh
dGljIHZvaWQgYWN0aXZhdGVVcmlFbnRyeUNiKEd0a1dpZGdldCAqZW50cnksIGdwb2ludGVyIGRh
dGEpCit7CisgICAgV0tWaWV3UmVmICp3ZWJWaWV3ID0gZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpF
Q1QoZW50cnkpLCAid2ViLXZpZXciKTsKKyAgICBjb25zdCBnY2hhciAqdXJpID0gZ3RrX2VudHJ5
X2dldF90ZXh0KEdUS19FTlRSWShlbnRyeSkpOworICAgIFdLUGFnZUxvYWRVUkwoV0tWaWV3R2V0
UGFnZSgqd2ViVmlldyksIFdLVVJMQ3JlYXRlV2l0aFVSTCh1cmkpKTsKK30KKworc3RhdGljIHZv
aWQgZGVzdHJveUNiKEd0a1dpZGdldCAqd2lkZ2V0LCBHdGtXaWRnZXQgKndpbmRvdykKK3sKKyAg
ICBndGtfbWFpbl9xdWl0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGdvQmFja0NiKEd0a1dpZGdldCAq
d2lkZ2V0LCBXS1ZpZXdSZWYgKndlYlZpZXcpCit7CisgICAgV0tQYWdlR29CYWNrKFdLVmlld0dl
dFBhZ2UoKndlYlZpZXcpKTsKK30KKworc3RhdGljIHZvaWQgZ29Gb3J3YXJkQ2IoR3RrV2lkZ2V0
ICp3aWRnZXQsIFdLVmlld1JlZiAqd2ViVmlldykKK3sKKyAgICBXS1BhZ2VHb0ZvcndhcmQoV0tW
aWV3R2V0UGFnZSgqd2ViVmlldykpOworfQorCitzdGF0aWMgR3RrV2lkZ2V0ICpjcmVhdGVUb29s
YmFyKEd0a1dpZGdldCAqdXJpRW50cnksIFdLVmlld1JlZiAqd2ViVmlldykKK3sKKyAgICBHdGtX
aWRnZXQgKnRvb2xiYXIgPSBndGtfdG9vbGJhcl9uZXcoKTsKKworI2lmIEdUS19DSEVDS19WRVJT
SU9OKDIsIDE1LCAwKQorICAgIGd0a19vcmllbnRhYmxlX3NldF9vcmllbnRhdGlvbihHVEtfT1JJ
RU5UQUJMRSh0b29sYmFyKSwgR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpOworI2Vsc2UKKyAg
ICBndGtfdG9vbGJhcl9zZXRfb3JpZW50YXRpb24oR1RLX1RPT0xCQVIodG9vbGJhciksIEdUS19P
UklFTlRBVElPTl9IT1JJWk9OVEFMKTsKKyNlbmRpZgorICAgIGd0a190b29sYmFyX3NldF9zdHls
ZShHVEtfVE9PTEJBUih0b29sYmFyKSwgR1RLX1RPT0xCQVJfQk9USF9IT1JJWik7CisKKyAgICBH
dGtUb29sSXRlbSAqaXRlbTsKKworICAgIC8qIHRoZSBiYWNrIGJ1dHRvbiAqLworICAgIGl0ZW0g
PSBndGtfdG9vbF9idXR0b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX0dPX0JBQ0spOworICAg
IGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QoaXRlbSksICJjbGlja2VkIiwgR19DQUxMQkFDSyhn
b0JhY2tDYiksIHdlYlZpZXcpOworICAgIGd0a190b29sYmFyX2luc2VydChHVEtfVE9PTEJBUih0
b29sYmFyKSwgaXRlbSwgLTEpOworCisgICAgLyogVGhlIGZvcndhcmQgYnV0dG9uICovCisgICAg
aXRlbSA9IGd0a190b29sX2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfR09fRk9SV0FS
RCk7CisgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVChpdGVtKSwgImNsaWNrZWQiLCBHX0NB
TExCQUNLKGdvRm9yd2FyZENiKSwgd2ViVmlldyk7CisgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0KEdU
S19UT09MQkFSKHRvb2xiYXIpLCBpdGVtLCAtMSk7CisKKyAgICAvKiBUaGUgVVJMIGVudHJ5ICov
CisgICAgaXRlbSA9IGd0a190b29sX2l0ZW1fbmV3KCk7CisgICAgZ3RrX3Rvb2xfaXRlbV9zZXRf
ZXhwYW5kKGl0ZW0sIFRSVUUpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
aXRlbSksIHVyaUVudHJ5KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKHVyaUVudHJ5
KSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhhY3RpdmF0ZVVyaUVudHJ5Q2IpLCBOVUxMKTsKKyAg
ICBndGtfdG9vbGJhcl9pbnNlcnQoR1RLX1RPT0xCQVIodG9vbGJhciksIGl0ZW0sIC0xKTsKKwor
ICAgIC8qIFRoZSBnbyBidXR0b24gKi8KKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh1
cmlFbnRyeSksICJ3ZWItdmlldyIsIHdlYlZpZXcpOworICAgIGl0ZW0gPSBndGtfdG9vbF9idXR0
b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX09LKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQoR19PQkpFQ1QoaXRlbSksICJjbGlja2VkIiwgR19DQUxMQkFDSyhhY3RpdmF0ZVVyaUVu
dHJ5Q2IpLCAoZ3BvaW50ZXIpdXJpRW50cnkpOworICAgIGd0a190b29sYmFyX2luc2VydChHVEtf
VE9PTEJBUih0b29sYmFyKSwgaXRlbSwgLTEpOworCisgICAgcmV0dXJuIHRvb2xiYXI7Cit9CisK
K3N0YXRpYyBHdGtXaWRnZXQgKmNyZWF0ZVdpbmRvdyhXS1ZpZXdSZWYgKndlYlZpZXcpCit7Cisg
ICAgR3RrV2lkZ2V0ICp3aW5kb3c7CisgICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJ
TkRPV19UT1BMRVZFTCk7CisgICAgZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdUS19XSU5E
T1cod2luZG93KSwgODAwLCA2MDApOworICAgIGd0a193aWRnZXRfc2V0X25hbWUod2luZG93LCAi
TWluaUJyb3dzZXIiKTsKKworICAgIFdLQ29udGV4dFJlZiBjb250ZXh0ID0gV0tDb250ZXh0R2V0
U2hhcmVkUHJvY2Vzc0NvbnRleHQoKTsKKyAgICAqd2ViVmlldyA9IFdLVmlld0NyZWF0ZShjb250
ZXh0LCAwKTsKKworICAgIEd0a1dpZGdldCAqdXJpRW50cnk7CisgICAgdXJpRW50cnkgPSBndGtf
ZW50cnlfbmV3KCk7CisKKyAgICBHdGtXaWRnZXQgKnZib3g7CisgICAgdmJveCA9IGd0a192Ym94
X25ldyhGQUxTRSwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGNy
ZWF0ZVRvb2xiYXIodXJpRW50cnksIHdlYlZpZXcpLCBGQUxTRSwgRkFMU0UsIDApOworICAgIGd0
a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBXS1ZpZXdHZXRXaW5kb3coKndlYlZpZXcp
LCBUUlVFLCBUUlVFLCAwKTsKKworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
d2luZG93KSwgdmJveCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgImRlc3Ryb3ki
LCBHX0NBTExCQUNLKGRlc3Ryb3lDYiksIE5VTEwpOworCisgICAgcmV0dXJuIHdpbmRvdzsKK30K
Kworc3RhdGljIGdjaGFyICpmaWxlbmFtZVRvVVJMKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorewor
ICAgIGlmICghZ19maWxlX3Rlc3QoZmlsZW5hbWUsIEdfRklMRV9URVNUX0VYSVNUUykpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgR0ZpbGUgKmdmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aChm
aWxlbmFtZSk7CisgICAgZ2NoYXIgKmZpbGVVUkwgPSBnX2ZpbGVfZ2V0X3VyaShnZmlsZSk7Cisg
ICAgZ19vYmplY3RfdW5yZWYoZ2ZpbGUpOworCisgICAgcmV0dXJuIGZpbGVVUkw7Cit9CisKK2lu
dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgZ3RrX2luaXQoJmFyZ2MsICZh
cmd2KTsKKyAgICBpZiAoIWdfdGhyZWFkX3N1cHBvcnRlZCgpKQorICAgICAgICBnX3RocmVhZF9p
bml0KE5VTEwpOworCisgICAgV0tWaWV3UmVmIHdlYlZpZXc7CisgICAgR3RrV2lkZ2V0ICptYWlu
V2luZG93OworICAgIG1haW5XaW5kb3cgPSBjcmVhdGVXaW5kb3coJndlYlZpZXcpOworCisgICAg
Z2NoYXIgKnVyaSA9IChnY2hhciopKGFyZ2MgPiAxID8gYXJndlsxXSA6ICJodHRwOi8vd3d3Lndl
YmtpdGd0ay5vcmcvIik7CisgICAgZ2NoYXIgKmZpbGVVUkwgPSBmaWxlbmFtZVRvVVJMKHVyaSk7
CisKKyAgICBXS1BhZ2VMb2FkVVJMKFdLVmlld0dldFBhZ2Uod2ViVmlldyksIFdLVVJMQ3JlYXRl
V2l0aFVSTChmaWxlVVJMKSk7CisgICAgZ19mcmVlKGZpbGVVUkwpOworCisgICAgZ3RrX3dpZGdl
dF9ncmFiX2ZvY3VzKFdLVmlld0dldFdpbmRvdyh3ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9z
aG93X2FsbChtYWluV2luZG93KTsKKyAgICBndGtfbWFpbigpOworCisgICAgcmV0dXJuIDA7Cit9
Cg==
</data>
<flag name="review"
          id="78930"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86961</attachid>
            <date>2011-03-25 11:19:10 -0700</date>
            <delta_ts>2011-03-30 06:04:39 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>minibrowser.patch</filename>
            <type>text/plain</type>
            <size>11258</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDgyOGU3MTYwZDk2NTMyYTQ2MDk4MDgzOWY1YzUxNmU0M2IxNWRkN2QKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIE1hciAyNSAx
NjoyNjo0OSAyMDExICswMTAwCgogICAgMjAxMS0wMy0yNSAgVmFtc2hpa3Jpc2huYS5ZZWxsZW5r
aSAgPHZhbXNoaUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBp
Z2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgog
ICAgCiAgICAgICAgICAgIEltcGxlbWVudCBNaW5pQnJvd3NlciBmb3IgR3RrIHBvcnQuCiAgICAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMgogICAg
CiAgICAgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEd0ayBNaW5pQnJvd3Nl
ci4KICAgIAogICAgICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgogICAgCiAgICAyMDExLTAzLTI1
ICBWYW1zaGlrcmlzaG5hLlllbGxlbmtpICA8dmFtc2hpQG1vdG9yb2xhLmNvbT4gYW5kIEFsZWph
bmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAgICAKICAgICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAgICAgICAgICAgSW1wbGVtZW50IE1pbmlCcm93
c2VyIGZvciBHdGsgcG9ydC4KICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ4NTEyCiAgICAKICAgICAgICAgICAgSW5pdGlhbCBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgR3RrIE1pbmlCcm93c2VyLgogICAgCiAgICAgICAgICAgICogTWluaUJyb3dzZXIv
Z3RrL0dOVW1ha2VmaWxlLmFtOiBBZGRlZC4KICAgICAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsv
bWFpbi5jOiBBZGRlZC4KICAgICAgICAgICAgKGFjdGl2YXRlVXJpRW50cnlDYWxsYmFjayk6CiAg
ICAgICAgICAgIChkZXN0cm95Q2FsbGJhY2spOgogICAgICAgICAgICAoZ29CYWNrQ2FsbGJhY2sp
OgogICAgICAgICAgICAoZ29Gb3J3YXJkQ2FsbGJhY2spOgogICAgICAgICAgICAoY3JlYXRlVG9v
bGJhcik6CiAgICAgICAgICAgIChjcmVhdGVXZWJWaWV3KToKICAgICAgICAgICAgKGNyZWF0ZVdp
bmRvdyk6CiAgICAgICAgICAgIChmaWxlbmFtZVRvVVJMKToKICAgICAgICAgICAgKG1haW4pOgog
ICAgCiAgICAyMDExLTAzLTI1ICBWYW1zaGlrcmlzaG5hLlllbGxlbmtpICA8dmFtc2hpQG1vdG9y
b2xhLmNvbT4gYW5kIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAgICAK
ICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAgICAgICAgICAg
SW1wbGVtZW50IE1pbmlCcm93c2VyIGZvciBHdGsgcG9ydC4KICAgICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTEyCiAgICAKICAgICAgICAgICAgKiBT
aGFyZWQvQVBJL2MvZ3RrL1dLQmFzZUd0ay5oOiBBZGQgdGhlIHN0ZGJvb2wuaCBpbmNsdWRlLgoK
ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyZDUxOGNmLi41ZjQwNTNl
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTEtMDMtMjUgIFZhbXNoaWtyaXNobmEuWWVsbGVua2kgIDx2YW1zaGlAbW90b3JvbGEuY29t
PiBhbmQgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgTWluaUJyb3dz
ZXIgZm9yIEd0ayBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDg1MTIKKworICAgICAgICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBH
dGsgTWluaUJyb3dzZXIuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKwogMjAxMS0wMy0y
MyAgR2VvcmdlIEd1byAgPEdlb3JnZS5HdW9Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmls
ZS5hbQppbmRleCBmODc2OTRiLi5hZjU0ODkxIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQor
KysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtMjI5LDYgKzIyOSw3IEBAIGluY2x1ZGUgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCiBpbmNsdWRlIFNvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCiBpZiBFTkFCTEVfV0VCS0lUMgogaW5jbHVkZSBTb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbQoraW5jbHVkZSBUb29scy9NaW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW0K
ICMgW0dUS10gUmVmYWN0b3IgdGhlIHRyYW5zbGF0aW9ucyBub3cgdGhhdCB3ZSBoYXZlIHdlYmtp
dDIKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MTUzCiBzdGFt
cC1wbzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCA2ZGY2OGNmLi5lNmQ2YjUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMTEtMDMtMjUgIFZhbXNoaWtyaXNobmEuWWVsbGVua2kgIDx2YW1zaGlAbW90
b3JvbGEuY29tPiBhbmQgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
TWluaUJyb3dzZXIgZm9yIEd0ayBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTIKKworICAgICAgICAqIFNoYXJlZC9BUEkvYy9ndGsvV0tC
YXNlR3RrLmg6IEFkZCB0aGUgc3RkYm9vbC5oIGluY2x1ZGUuCisKIDIwMTEtMDMtMTEgICBBbXJ1
dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xhLmNvbT4gYW5kIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL2d0ay9XS0Jhc2VHdGsu
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9ndGsvV0tCYXNlR3RrLmgKaW5kZXggOGYz
NGVkMy4uZWI4OGY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL2d0
ay9XS0Jhc2VHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvZ3RrL1dLQmFz
ZUd0ay5oCkBAIC0zMiw2ICszMiw4IEBACiAjZXJyb3IgIlBsZWFzZSAjaW5jbHVkZSBcIldLQmFz
ZS5oXCIgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZGlyZWN0bHkuIgogI2VuZGlmCiAKKyNpbmNsdWRl
IDxzdGRib29sLmg+CisKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLVmlldyogV0tWaWV3
UmVmOwogCiAjZW5kaWYgLyogV0tCYXNlR3RrX2ggKi8KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkNWQ1Y2NjLi5mYjA1NDcwIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDMtMjUgIFZhbXNoaWtyaXNobmEuWWVsbGVua2kgIDx2YW1zaGlAbW90b3JvbGEuY29t
PiBhbmQgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgTWluaUJyb3dz
ZXIgZm9yIEd0ayBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDg1MTIKKworICAgICAgICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBH
dGsgTWluaUJyb3dzZXIuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUu
YW06IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9tYWluLmM6IEFkZGVkLgorICAg
ICAgICAoYWN0aXZhdGVVcmlFbnRyeUNhbGxiYWNrKToKKyAgICAgICAgKGRlc3Ryb3lDYWxsYmFj
ayk6CisgICAgICAgIChnb0JhY2tDYWxsYmFjayk6CisgICAgICAgIChnb0ZvcndhcmRDYWxsYmFj
ayk6CisgICAgICAgIChjcmVhdGVUb29sYmFyKToKKyAgICAgICAgKGNyZWF0ZVdlYlZpZXcpOgor
ICAgICAgICAoY3JlYXRlV2luZG93KToKKyAgICAgICAgKGZpbGVuYW1lVG9VUkwpOgorICAgICAg
ICAobWFpbik6CisKIDIwMTEtMDMtMjQgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2
aWVycy5jb20+CiAKICAgICAgICAgW3d4XSBGaXggdGhlIGJ1aWxkIHNvIHRoYXQgZ2NjLTQuMSBh
bmQgdXAgY2FuIGJlIHVzZWQgdG8gYnVpbGQgb24gU25vd0xlb3BhcmQuCmRpZmYgLS1naXQgYS9U
b29scy9NaW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9NaW5pQnJvd3Nlci9n
dGsvR05VbWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJi
YzEzOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9HTlVtYWtlZmls
ZS5hbQpAQCAtMCwwICsxLDM1IEBACisKKyNNaW5pQnJvd3NlcgorYmluX1BST0dSQU1TICs9IFwK
KwlQcm9ncmFtcy9NaW5pQnJvd3NlcgorCitQcm9ncmFtc19NaW5pQnJvd3Nlcl9DUFBGTEFHUyA9
IFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvaW5jbHVkZSBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKEdMSUJfQ0ZM
QUdTKSBcCisJJChHVEtfQ0ZMQUdTKQorCitQcm9ncmFtc19NaW5pQnJvd3Nlcl9TT1VSQ0VTID0g
XAorCVRvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKKworQlVJTFRfU09VUkNFUyArPSBcCisJ
Z2VuZXJhdGUtbWluaWJyb3dzZXItZm9yd2FyZC1oZWFkZXJzCisKK01pbmlCcm93c2VyIDo9ICQo
c3JjZGlyKS9Ub29scy9NaW5pQnJvd3Nlci9ndGsKK01pbmlCcm93c2VyRndkSGVhZGVycyA6PSAk
KEdFTlNPVVJDRVNfV0VCS0lUMikvaW5jbHVkZQorZ2VuZXJhdGUtbWluaWJyb3dzZXItZm9yd2Fy
ZC1oZWFkZXJzOiAkKFdlYktpdDIpL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJz
LnBsICQoUHJvZ3JhbXNfTWluaUJyb3dzZXJfU09VUkNFUykKKwkkKEFNX1ZfR0VOKSQoUEVSTCkg
JDwgJChNaW5pQnJvd3NlcikgJChNaW5pQnJvd3NlckZ3ZEhlYWRlcnMpIGd0aworCSQoQU1fVl9H
RU4pJChQRVJMKSAkPCAkKE1pbmlCcm93c2VyKSAkKE1pbmlCcm93c2VyRndkSGVhZGVycykgc291
cAorCitQcm9ncmFtc19NaW5pQnJvd3Nlcl9MREFERCA9IFwKKwlsaWJ3ZWJraXQyZ3RrLUBXRUJL
SVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxh
IFwKKwkkKEdMSUJfTElCUykgXAorCSQoR1RLX0xJQlMpCisKK1Byb2dyYW1zX01pbmlCcm93c2Vy
X0xERkxBR1MgPSBcCisJLW5vLWZhc3QtaW5zdGFsbCBcCisJLW5vLWluc3RhbGwKKworQ0xFQU5G
SUxFUyArPSBcCisJJCh0b3BfYnVpbGRkaXIpL1Byb2dyYW1zL01pbmlCcm93c2VyCmRpZmYgLS1n
aXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3Rr
L21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGFmYzFkCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYwpAQCAtMCwwICsxLDE0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4K
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK3N0YXRpYyB2b2lkIGFjdGl2YXRlVXJpRW50cnlDYWxs
YmFjayhHdGtXaWRnZXQgKmVudHJ5LCBncG9pbnRlciBkYXRhKQoreworICAgIFdLVmlld1JlZiAq
d2ViVmlldyA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGVudHJ5KSwgIndlYi12aWV3Iik7
CisgICAgY29uc3QgZ2NoYXIgKnVyaSA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZW50
cnkpKTsKKyAgICBXS1BhZ2VMb2FkVVJMKFdLVmlld0dldFBhZ2UoKndlYlZpZXcpLCBXS1VSTENy
ZWF0ZVdpdGhVUkwodXJpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lDYWxsYmFjayhHdGtX
aWRnZXQgKndpZGdldCwgR3RrV2lkZ2V0ICp3aW5kb3cpCit7CisgICAgZ3RrX21haW5fcXVpdCgp
OworfQorCitzdGF0aWMgdm9pZCBnb0JhY2tDYWxsYmFjayhHdGtXaWRnZXQgKndpZGdldCwgV0tW
aWV3UmVmICp3ZWJWaWV3KQoreworICAgIFdLUGFnZUdvQmFjayhXS1ZpZXdHZXRQYWdlKCp3ZWJW
aWV3KSk7Cit9CisKK3N0YXRpYyB2b2lkIGdvRm9yd2FyZENhbGxiYWNrKEd0a1dpZGdldCAqd2lk
Z2V0LCBXS1ZpZXdSZWYgKndlYlZpZXcpCit7CisgICAgV0tQYWdlR29Gb3J3YXJkKFdLVmlld0dl
dFBhZ2UoKndlYlZpZXcpKTsKK30KKworc3RhdGljIEd0a1dpZGdldCAqY3JlYXRlVG9vbGJhcihH
dGtXaWRnZXQgKnVyaUVudHJ5LCBXS1ZpZXdSZWYgKndlYlZpZXcpCit7CisgICAgR3RrV2lkZ2V0
ICp0b29sYmFyID0gZ3RrX3Rvb2xiYXJfbmV3KCk7CisKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigy
LCAxNSwgMCkKKyAgICBndGtfb3JpZW50YWJsZV9zZXRfb3JpZW50YXRpb24oR1RLX09SSUVOVEFC
TEUodG9vbGJhciksIEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKTsKKyNlbHNlCisgICAgZ3Rr
X3Rvb2xiYXJfc2V0X29yaWVudGF0aW9uKEdUS19UT09MQkFSKHRvb2xiYXIpLCBHVEtfT1JJRU5U
QVRJT05fSE9SSVpPTlRBTCk7CisjZW5kaWYKKyAgICBndGtfdG9vbGJhcl9zZXRfc3R5bGUoR1RL
X1RPT0xCQVIodG9vbGJhciksIEdUS19UT09MQkFSX0JPVEhfSE9SSVopOworCisgICAgLyogdGhl
IGJhY2sgYnV0dG9uICovCisgICAgR3RrVG9vbEl0ZW0gKml0ZW0gPSBndGtfdG9vbF9idXR0b25f
bmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX0dPX0JBQ0spOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
R19PQkpFQ1QoaXRlbSksICJjbGlja2VkIiwgR19DQUxMQkFDSyhnb0JhY2tDYWxsYmFjayksIHdl
YlZpZXcpOworICAgIGd0a190b29sYmFyX2luc2VydChHVEtfVE9PTEJBUih0b29sYmFyKSwgaXRl
bSwgLTEpOworCisgICAgLyogVGhlIGZvcndhcmQgYnV0dG9uICovCisgICAgaXRlbSA9IGd0a190
b29sX2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfR09fRk9SV0FSRCk7CisgICAgZ19z
aWduYWxfY29ubmVjdChHX09CSkVDVChpdGVtKSwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGdvRm9y
d2FyZENhbGxiYWNrKSwgd2ViVmlldyk7CisgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0KEdUS19UT09M
QkFSKHRvb2xiYXIpLCBpdGVtLCAtMSk7CisKKyAgICAvKiBUaGUgVVJMIGVudHJ5ICovCisgICAg
aXRlbSA9IGd0a190b29sX2l0ZW1fbmV3KCk7CisgICAgZ3RrX3Rvb2xfaXRlbV9zZXRfZXhwYW5k
KGl0ZW0sIFRSVUUpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoaXRlbSks
IHVyaUVudHJ5KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKHVyaUVudHJ5KSwgImFj
dGl2YXRlIiwgR19DQUxMQkFDSyhhY3RpdmF0ZVVyaUVudHJ5Q2FsbGJhY2spLCBOVUxMKTsKKyAg
ICBndGtfdG9vbGJhcl9pbnNlcnQoR1RLX1RPT0xCQVIodG9vbGJhciksIGl0ZW0sIC0xKTsKKwor
ICAgIC8qIFRoZSBnbyBidXR0b24gKi8KKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh1
cmlFbnRyeSksICJ3ZWItdmlldyIsIHdlYlZpZXcpOworICAgIGl0ZW0gPSBndGtfdG9vbF9idXR0
b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX09LKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQoR19PQkpFQ1QoaXRlbSksICJjbGlja2VkIiwgR19DQUxMQkFDSyhhY3RpdmF0ZVVyaUVu
dHJ5Q2FsbGJhY2spLCAoZ3BvaW50ZXIpdXJpRW50cnkpOworICAgIGd0a190b29sYmFyX2luc2Vy
dChHVEtfVE9PTEJBUih0b29sYmFyKSwgaXRlbSwgLTEpOworCisgICAgcmV0dXJuIHRvb2xiYXI7
Cit9CisKK3N0YXRpYyBXS1ZpZXdSZWYgY3JlYXRlV2ViVmlldygpCit7CisgICAgV0tDb250ZXh0
UmVmIGNvbnRleHQgPSBXS0NvbnRleHRHZXRTaGFyZWRQcm9jZXNzQ29udGV4dCgpOworCisgICAg
cmV0dXJuIFdLVmlld0NyZWF0ZShjb250ZXh0LCAwKTsKK30KKworc3RhdGljIEd0a1dpZGdldCAq
Y3JlYXRlV2luZG93KFdLVmlld1JlZiogd2ViVmlldykKK3sKKyAgICBHdGtXaWRnZXQgKndpbmRv
dyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGd0a193aW5kb3df
c2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDgwMCwgNjAwKTsKKyAgICBndGtf
d2lkZ2V0X3NldF9uYW1lKHdpbmRvdywgIk1pbmlCcm93c2VyIik7CisKKyAgICBHdGtXaWRnZXQg
KnVyaUVudHJ5ID0gZ3RrX2VudHJ5X25ldygpOworCisgICAgR3RrV2lkZ2V0ICp2Ym94ID0gZ3Rr
X3Zib3hfbmV3KEZBTFNFLCAwKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94
KSwgY3JlYXRlVG9vbGJhcih1cmlFbnRyeSwgd2ViVmlldyksIEZBTFNFLCBGQUxTRSwgMCk7Cisg
ICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIFdLVmlld0dldFdpbmRvdygqd2Vi
VmlldyksIFRSVUUsIFRSVUUsIDApOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUih3aW5kb3cpLCB2Ym94KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAiZGVz
dHJveSIsIEdfQ0FMTEJBQ0soZGVzdHJveUNhbGxiYWNrKSwgTlVMTCk7CisKKyAgICByZXR1cm4g
d2luZG93OworfQorCitzdGF0aWMgZ2NoYXIgKmZpbGVuYW1lVG9VUkwoY29uc3QgY2hhciAqZmls
ZW5hbWUpCit7CisgICAgaWYgKCFnX2ZpbGVfdGVzdChmaWxlbmFtZSwgR19GSUxFX1RFU1RfRVhJ
U1RTKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHRmlsZSAqZ2ZpbGUgPSBnX2ZpbGVfbmV3
X2Zvcl9wYXRoKGZpbGVuYW1lKTsKKyAgICBnY2hhciAqZmlsZVVSTCA9IGdfZmlsZV9nZXRfdXJp
KGdmaWxlKTsKKyAgICBnX29iamVjdF91bnJlZihnZmlsZSk7CisKKyAgICByZXR1cm4gZmlsZVVS
TDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBndGtfaW5p
dCgmYXJnYywgJmFyZ3YpOworICAgIGlmICghZ190aHJlYWRfc3VwcG9ydGVkKCkpCisgICAgICAg
IGdfdGhyZWFkX2luaXQoTlVMTCk7CisKKyAgICBXS1ZpZXdSZWYgd2ViVmlldyA9IGNyZWF0ZVdl
YlZpZXcoKTsKKyAgICBHdGtXaWRnZXQgKm1haW5XaW5kb3cgPSBjcmVhdGVXaW5kb3coJndlYlZp
ZXcpOworCisgICAgZ2NoYXIgKnVyaSA9IChnY2hhciopKGFyZ2MgPiAxID8gYXJndlsxXSA6ICJo
dHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIik7CisgICAgZ2NoYXIgKmZpbGVVUkwgPSBmaWxlbmFt
ZVRvVVJMKHVyaSk7CisKKyAgICBXS1BhZ2VMb2FkVVJMKFdLVmlld0dldFBhZ2Uod2ViVmlldyks
IFdLVVJMQ3JlYXRlV2l0aFVSTChmaWxlVVJMID8gZmlsZVVSTCA6IHVyaSkpOworICAgIGdfZnJl
ZShmaWxlVVJMKTsKKworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhXS1ZpZXdHZXRXaW5kb3co
d2ViVmlldykpOworICAgIGd0a193aWRnZXRfc2hvd19hbGwobWFpbldpbmRvdyk7CisgICAgZ3Rr
X21haW4oKTsKKworICAgIHJldHVybiAwOworfQo=
</data>
<flag name="review"
          id="79337"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87511</attachid>
            <date>2011-03-30 06:04:39 -0700</date>
            <delta_ts>2011-03-30 15:28:06 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>minibrowser.patch</filename>
            <type>text/plain</type>
            <size>10954</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDk3YmU1NGEwYmQ4NTFjNDRhNWRhZjY2MjA2OTU5ZTc3MTMyZDRkZWQKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIE1hciAyNSAx
NjoyNjo0OSAyMDExICswMTAwCgogICAgMjAxMS0wMy0yNSAgVmFtc2hpa3Jpc2huYS5ZZWxsZW5r
aSAgPHZhbXNoaUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBp
Z2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgog
ICAgCiAgICAgICAgICAgIEltcGxlbWVudCBNaW5pQnJvd3NlciBmb3IgR3RrIHBvcnQuCiAgICAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMgogICAg
CiAgICAgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEd0ayBNaW5pQnJvd3Nl
ci4KICAgIAogICAgICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgogICAgCiAgICAyMDExLTAzLTI1
ICBWYW1zaGlrcmlzaG5hLlllbGxlbmtpICA8dmFtc2hpQG1vdG9yb2xhLmNvbT4gYW5kIEFsZWph
bmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAgICAKICAgICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAgICAgICAgICAgSW1wbGVtZW50IE1pbmlCcm93
c2VyIGZvciBHdGsgcG9ydC4KICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ4NTEyCiAgICAKICAgICAgICAgICAgSW5pdGlhbCBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgR3RrIE1pbmlCcm93c2VyLgogICAgCiAgICAgICAgICAgICogTWluaUJyb3dzZXIv
Z3RrL0dOVW1ha2VmaWxlLmFtOiBBZGRlZC4KICAgICAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsv
bWFpbi5jOiBBZGRlZC4KICAgICAgICAgICAgKGFjdGl2YXRlVXJpRW50cnlDYWxsYmFjayk6CiAg
ICAgICAgICAgIChkZXN0cm95Q2FsbGJhY2spOgogICAgICAgICAgICAoZ29CYWNrQ2FsbGJhY2sp
OgogICAgICAgICAgICAoZ29Gb3J3YXJkQ2FsbGJhY2spOgogICAgICAgICAgICAoY3JlYXRlVG9v
bGJhcik6CiAgICAgICAgICAgIChjcmVhdGVXZWJWaWV3KToKICAgICAgICAgICAgKGNyZWF0ZVdp
bmRvdyk6CiAgICAgICAgICAgIChmaWxlbmFtZVRvVVJMKToKICAgICAgICAgICAgKG1haW4pOgog
ICAgCiAgICAyMDExLTAzLTI1ICBWYW1zaGlrcmlzaG5hLlllbGxlbmtpICA8dmFtc2hpQG1vdG9y
b2xhLmNvbT4gYW5kIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAgICAK
ICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAgICAgICAgICAg
SW1wbGVtZW50IE1pbmlCcm93c2VyIGZvciBHdGsgcG9ydC4KICAgICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTEyCiAgICAKICAgICAgICAgICAgKiBT
aGFyZWQvQVBJL2MvZ3RrL1dLQmFzZUd0ay5oOiBBZGQgdGhlIHN0ZGJvb2wuaCBpbmNsdWRlLgoK
ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBlNjhjN2UxLi5iYzQ2YTli
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTEtMDMtMjUgIFZhbXNoaWtyaXNobmEuWWVsbGVua2kgIDx2YW1zaGlAbW90b3JvbGEuY29t
PiBhbmQgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgTWluaUJyb3dz
ZXIgZm9yIEd0ayBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDg1MTIKKworICAgICAgICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBH
dGsgTWluaUJyb3dzZXIuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKwogMjAxMS0wMy0y
OSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJ1YmJl
ci1zdGFtcGVkIGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1naXQgYS9HTlVtYWtlZmlsZS5hbSBi
L0dOVW1ha2VmaWxlLmFtCmluZGV4IGY4NzY5NGIuLmFmNTQ4OTEgMTAwNjQ0Ci0tLSBhL0dOVW1h
a2VmaWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0yMjksNiArMjI5LDcgQEAgaW5jbHVk
ZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KIGlmIEVOQUJMRV9XRUJLSVQyCiBpbmNsdWRlIFNvdXJjZS9X
ZWJLaXQyL0dOVW1ha2VmaWxlLmFtCitpbmNsdWRlIFRvb2xzL01pbmlCcm93c2VyL2d0ay9HTlVt
YWtlZmlsZS5hbQogIyBbR1RLXSBSZWZhY3RvciB0aGUgdHJhbnNsYXRpb25zIG5vdyB0aGF0IHdl
IGhhdmUgd2Via2l0MgogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTUxNTMKIHN0YW1wLXBvOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDEzM2FkMmUuLjUyZmUwMDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0wMy0yNSAgVmFtc2hpa3Jpc2huYS5ZZWxsZW5raSAg
PHZhbXNoaUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudCBNaW5pQnJvd3NlciBmb3IgR3RrIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMgorCisgICAgICAgICogU2hhcmVkL0FQ
SS9jL2d0ay9XS0Jhc2VHdGsuaDogQWRkIHRoZSBzdGRib29sLmggaW5jbHVkZS4KKwogMjAxMS0w
My0xMSAgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3JvbGEuY29tPiBhbmQgTWFydGluIFJv
Ymluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvZ3Rr
L1dLQmFzZUd0ay5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL2d0ay9XS0Jhc2VHdGsu
aAppbmRleCA4ZjM0ZWQzLi5lYjg4ZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQVBJL2MvZ3RrL1dLQmFzZUd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkv
Yy9ndGsvV0tCYXNlR3RrLmgKQEAgLTMyLDYgKzMyLDggQEAKICNlcnJvciAiUGxlYXNlICNpbmNs
dWRlIFwiV0tCYXNlLmhcIiBpbnN0ZWFkIG9mIHRoaXMgZmlsZSBkaXJlY3RseS4iCiAjZW5kaWYK
IAorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tW
aWV3KiBXS1ZpZXdSZWY7CiAKICNlbmRpZiAvKiBXS0Jhc2VHdGtfaCAqLwpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDAwMGUyYmYuLjU0NjlmNmMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxMS0wMy0yNSAgVmFtc2hpa3Jpc2huYS5ZZWxsZW5raSAgPHZhbXNoaUBt
b3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dCBNaW5pQnJvd3NlciBmb3IgR3RrIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMgorCisgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRp
b24gb2YgdGhlIEd0ayBNaW5pQnJvd3Nlci4KKworICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9H
TlVtYWtlZmlsZS5hbTogQWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL21haW4uYzog
QWRkZWQuCisgICAgICAgIChhY3RpdmF0ZVVyaUVudHJ5Q2FsbGJhY2spOgorICAgICAgICAoZGVz
dHJveUNhbGxiYWNrKToKKyAgICAgICAgKGdvQmFja0NhbGxiYWNrKToKKyAgICAgICAgKGdvRm9y
d2FyZENhbGxiYWNrKToKKyAgICAgICAgKGNyZWF0ZVRvb2xiYXIpOgorICAgICAgICAoY3JlYXRl
V2ViVmlldyk6CisgICAgICAgIChjcmVhdGVXaW5kb3cpOgorICAgICAgICAoZmlsZW5hbWVUb1VS
TCk6CisgICAgICAgIChtYWluKToKKwogMjAxMS0wMy0zMCAgTWFjaWVqIFN0YWNob3dpYWsgIDxt
anNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1n
aXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9NaW5pQnJv
d3Nlci9ndGsvR05VbWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjRkYTBhZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9HTlVt
YWtlZmlsZS5hbQpAQCAtMCwwICsxLDMzIEBACitiaW5fUFJPR1JBTVMgKz0gXAorCVByb2dyYW1z
L01pbmlCcm93c2VyCisKK1Byb2dyYW1zX01pbmlCcm93c2VyX0NQUEZMQUdTID0gXAorCS1JJChz
cmNkaXIpL1NvdXJjZSBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9pbmNsdWRlIFwKKwkkKGdsb2JhbF9jcHBmbGFncykgXAorCSQoR0xJQl9DRkxBR1MpIFwKKwkk
KEdUS19DRkxBR1MpCisKK1Byb2dyYW1zX01pbmlCcm93c2VyX1NPVVJDRVMgPSBcCisJVG9vbHMv
TWluaUJyb3dzZXIvZ3RrL21haW4uYworCitCVUlMVF9TT1VSQ0VTICs9IFwKKwlnZW5lcmF0ZS1t
aW5pYnJvd3Nlci1mb3J3YXJkLWhlYWRlcnMKKworTWluaUJyb3dzZXIgOj0gJChzcmNkaXIpL1Rv
b2xzL01pbmlCcm93c2VyL2d0aworTWluaUJyb3dzZXJGd2RIZWFkZXJzIDo9ICQoR0VOU09VUkNF
U19XRUJLSVQyKS9pbmNsdWRlCitnZW5lcmF0ZS1taW5pYnJvd3Nlci1mb3J3YXJkLWhlYWRlcnM6
ICQoV2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgJChQcm9n
cmFtc19NaW5pQnJvd3Nlcl9TT1VSQ0VTKQorCSQoQU1fVl9HRU4pJChQRVJMKSAkPCAkKE1pbmlC
cm93c2VyKSAkKE1pbmlCcm93c2VyRndkSGVhZGVycykgZ3RrCisJJChBTV9WX0dFTikkKFBFUkwp
ICQ8ICQoTWluaUJyb3dzZXIpICQoTWluaUJyb3dzZXJGd2RIZWFkZXJzKSBzb3VwCisKK1Byb2dy
YW1zX01pbmlCcm93c2VyX0xEQUREID0gXAorCWxpYndlYmtpdDJndGstQFdFQktJVEdUS19BUElf
TUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAorCSQoR0xJ
Ql9MSUJTKSBcCisJJChHVEtfTElCUykKKworUHJvZ3JhbXNfTWluaUJyb3dzZXJfTERGTEFHUyA9
IFwKKwktbm8tZmFzdC1pbnN0YWxsIFwKKwktbm8taW5zdGFsbAorCitDTEVBTkZJTEVTICs9IFwK
KwkkKHRvcF9idWlsZGRpcikvUHJvZ3JhbXMvTWluaUJyb3dzZXIKZGlmZiAtLWdpdCBhL1Rvb2xz
L01pbmlCcm93c2VyL2d0ay9tYWluLmMgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZTMxNzAKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKworc3RhdGljIHZvaWQgYWN0aXZhdGVVcmlFbnRyeUNhbGxiYWNrKEd0a1dp
ZGdldCAqZW50cnksIGdwb2ludGVyIGRhdGEpCit7CisgICAgV0tWaWV3UmVmIHdlYlZpZXcgPSBn
X29iamVjdF9nZXRfZGF0YShHX09CSkVDVChlbnRyeSksICJ3ZWItdmlldyIpOworICAgIGNvbnN0
IGdjaGFyICp1cmkgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGVudHJ5KSk7CisgICAg
V0tQYWdlTG9hZFVSTChXS1ZpZXdHZXRQYWdlKHdlYlZpZXcpLCBXS1VSTENyZWF0ZVdpdGhVUkwo
dXJpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lDYWxsYmFjayhHdGtXaWRnZXQgKndpZGdl
dCwgR3RrV2lkZ2V0ICp3aW5kb3cpCit7CisgICAgZ3RrX21haW5fcXVpdCgpOworfQorCitzdGF0
aWMgdm9pZCBnb0JhY2tDYWxsYmFjayhHdGtXaWRnZXQgKndpZGdldCwgV0tWaWV3UmVmIHdlYlZp
ZXcpCit7CisgICAgV0tQYWdlR29CYWNrKFdLVmlld0dldFBhZ2Uod2ViVmlldykpOworfQorCitz
dGF0aWMgdm9pZCBnb0ZvcndhcmRDYWxsYmFjayhHdGtXaWRnZXQgKndpZGdldCwgV0tWaWV3UmVm
IHdlYlZpZXcpCit7CisgICAgV0tQYWdlR29Gb3J3YXJkKFdLVmlld0dldFBhZ2Uod2ViVmlldykp
OworfQorCitzdGF0aWMgR3RrV2lkZ2V0ICpjcmVhdGVUb29sYmFyKEd0a1dpZGdldCAqdXJpRW50
cnksIFdLVmlld1JlZiB3ZWJWaWV3KQoreworICAgIEd0a1dpZGdldCAqdG9vbGJhciA9IGd0a190
b29sYmFyX25ldygpOworCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTUsIDApCisgICAgZ3Rr
X29yaWVudGFibGVfc2V0X29yaWVudGF0aW9uKEdUS19PUklFTlRBQkxFKHRvb2xiYXIpLCBHVEtf
T1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7CisjZWxzZQorICAgIGd0a190b29sYmFyX3NldF9vcmll
bnRhdGlvbihHVEtfVE9PTEJBUih0b29sYmFyKSwgR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwp
OworI2VuZGlmCisgICAgZ3RrX3Rvb2xiYXJfc2V0X3N0eWxlKEdUS19UT09MQkFSKHRvb2xiYXIp
LCBHVEtfVE9PTEJBUl9CT1RIX0hPUklaKTsKKworICAgIEd0a1Rvb2xJdGVtICppdGVtID0gZ3Rr
X3Rvb2xfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19HT19CQUNLKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KGl0ZW0sICJjbGlja2VkIiwgR19DQUxMQkFDSyhnb0JhY2tDYWxsYmFjayks
IChncG9pbnRlcil3ZWJWaWV3KTsKKyAgICBndGtfdG9vbGJhcl9pbnNlcnQoR1RLX1RPT0xCQVIo
dG9vbGJhciksIGl0ZW0sIC0xKTsKKworICAgIGl0ZW0gPSBndGtfdG9vbF9idXR0b25fbmV3X2Zy
b21fc3RvY2soR1RLX1NUT0NLX0dPX0ZPUldBUkQpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19P
QkpFQ1QoaXRlbSksICJjbGlja2VkIiwgR19DQUxMQkFDSyhnb0ZvcndhcmRDYWxsYmFjayksIChn
cG9pbnRlcil3ZWJWaWV3KTsKKyAgICBndGtfdG9vbGJhcl9pbnNlcnQoR1RLX1RPT0xCQVIodG9v
bGJhciksIGl0ZW0sIC0xKTsKKworICAgIGl0ZW0gPSBndGtfdG9vbF9pdGVtX25ldygpOworICAg
IGd0a190b29sX2l0ZW1fc2V0X2V4cGFuZChpdGVtLCBUUlVFKTsKKyAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKGl0ZW0pLCB1cmlFbnRyeSk7CisgICAgZ19zaWduYWxfY29ubmVj
dCh1cmlFbnRyeSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhhY3RpdmF0ZVVyaUVudHJ5Q2FsbGJh
Y2spLCBOVUxMKTsKKyAgICBndGtfdG9vbGJhcl9pbnNlcnQoR1RLX1RPT0xCQVIodG9vbGJhciks
IGl0ZW0sIC0xKTsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHVyaUVudHJ5KSwg
IndlYi12aWV3IiwgKGdwb2ludGVyKXdlYlZpZXcpOworICAgIGl0ZW0gPSBndGtfdG9vbF9idXR0
b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX09LKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQoaXRlbSwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGFjdGl2YXRlVXJpRW50cnlDYWxsYmFj
ayksIChncG9pbnRlcil1cmlFbnRyeSk7CisgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0KEdUS19UT09M
QkFSKHRvb2xiYXIpLCBpdGVtLCAtMSk7CisKKyAgICByZXR1cm4gdG9vbGJhcjsKK30KKworc3Rh
dGljIFdLVmlld1JlZiBjcmVhdGVXZWJWaWV3KCkKK3sKKyAgICByZXR1cm4gV0tWaWV3Q3JlYXRl
KFdLQ29udGV4dEdldFNoYXJlZFByb2Nlc3NDb250ZXh0KCksIDApOworfQorCitzdGF0aWMgR3Rr
V2lkZ2V0ICpjcmVhdGVXaW5kb3coV0tWaWV3UmVmIHdlYlZpZXcpCit7CisgICAgR3RrV2lkZ2V0
ICp3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBndGtf
d2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA4MDAsIDYwMCk7Cisg
ICAgZ3RrX3dpZGdldF9zZXRfbmFtZSh3aW5kb3csICJNaW5pQnJvd3NlciIpOworCisgICAgR3Rr
V2lkZ2V0ICp1cmlFbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKworICAgIEd0a1dpZGdldCAqdmJv
eCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19C
T1godmJveCksIGNyZWF0ZVRvb2xiYXIodXJpRW50cnksIHdlYlZpZXcpLCBGQUxTRSwgRkFMU0Us
IDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBXS1ZpZXdHZXRXaW5k
b3cod2ViVmlldyksIFRSVUUsIFRSVUUsIDApOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RL
X0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93
LCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0soZGVzdHJveUNhbGxiYWNrKSwgTlVMTCk7CisKKyAgICBy
ZXR1cm4gd2luZG93OworfQorCitzdGF0aWMgZ2NoYXIgKmZpbGVuYW1lVG9VUkwoY29uc3QgY2hh
ciAqZmlsZW5hbWUpCit7CisgICAgR0ZpbGUgKmdmaWxlID0gZ19maWxlX25ld19mb3JfY29tbWFu
ZGxpbmVfYXJnKGZpbGVuYW1lKTsKKyAgICBnY2hhciAqZmlsZVVSTCA9IGdfZmlsZV9nZXRfdXJp
KGdmaWxlKTsKKyAgICBnX29iamVjdF91bnJlZihnZmlsZSk7CisKKyAgICByZXR1cm4gZmlsZVVS
TDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBndGtfaW5p
dCgmYXJnYywgJmFyZ3YpOworCisgICAgaWYgKCFnX3RocmVhZF9zdXBwb3J0ZWQoKSkKKyAgICAg
ICAgZ190aHJlYWRfaW5pdChOVUxMKTsKKworICAgIFdLVmlld1JlZiB3ZWJWaWV3ID0gY3JlYXRl
V2ViVmlldygpOworICAgIEd0a1dpZGdldCAqbWFpbldpbmRvdyA9IGNyZWF0ZVdpbmRvdyh3ZWJW
aWV3KTsKKworICAgIGNvbnN0IGdjaGFyICp1cmkgPSBhcmdjID4gMSA/IGFyZ3ZbMV0gOiAiaHR0
cDovL3d3dy53ZWJraXRndGsub3JnLyI7CisgICAgZ2NoYXIgKmZpbGVVUkwgPSBmaWxlbmFtZVRv
VVJMKHVyaSk7CisKKyAgICBXS1BhZ2VMb2FkVVJMKFdLVmlld0dldFBhZ2Uod2ViVmlldyksIFdL
VVJMQ3JlYXRlV2l0aFVSTChmaWxlVVJMKSk7CisgICAgZ19mcmVlKGZpbGVVUkwpOworCisgICAg
Z3RrX3dpZGdldF9ncmFiX2ZvY3VzKFdLVmlld0dldFdpbmRvdyh3ZWJWaWV3KSk7CisgICAgZ3Rr
X3dpZGdldF9zaG93X2FsbChtYWluV2luZG93KTsKKyAgICBndGtfbWFpbigpOworCisgICAgcmV0
dXJuIDA7Cit9Cg==
</data>
<flag name="review"
          id="79939"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>