<?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>54827</bug_id>
          
          <creation_ts>2011-02-20 09:17:22 -0800</creation_ts>
          <short_desc>[GTK] Add context menu support for Webkit2</short_desc>
          <delta_ts>2011-06-13 02:35:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          <dependson>57944</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alejandro G. Castro">alex</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>354283</commentid>
    <comment_count>0</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-20 09:17:22 -0800</bug_when>
    <thetext>We still need to add the context menu support for Webkit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384721</commentid>
    <comment_count>1</comment_count>
      <attachid>89347</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-13 00:48:43 -0700</bug_when>
    <thetext>Created attachment 89347
Patch

This patch adds support for context menus. Not all options exposed by the context menu work in this moment, since they have to be implemented in minibrowser and WebKitWebView. This patch depends on bug #57944.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384932</commentid>
    <comment_count>2</comment_count>
      <attachid>89347</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-13 09:14:27 -0700</bug_when>
    <thetext>Comment on attachment 89347
Patch

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

Great work. I have a few minor quibbles, but very minor.

&gt; Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp:208
&gt; +    return action ? String::fromUTF8(gtk_action_get_label(action)) : String();

Nice.

&gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:37
&gt; +#define WEBKIT_CONTEXT_MENU_ACTION &quot;webkit-context-menu&quot;

Please use a static const instead of a define and use WebKit naming style.

&gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:116
&gt; +    case WebCore::ContextMenuItemTagCopyImageUrlToClipboard:

This shouldn&apos;t be GTK_STOCK_COPY?

&gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:154
&gt; +            GtkAction* action = 0;
&gt; +            GOwnPtr&lt;char&gt; actionName(g_strdup_printf(&quot;context-menu-action-%d&quot;, item.action()));
&gt; +
&gt; +            if (item.type() == WebCore::CheckableActionType) {
&gt; +                action = GTK_ACTION(gtk_toggle_action_new(actionName.get(), item.title().utf8().data(), 0, gtkStockIDFromContextMenuAction(item.action())));
&gt; +                gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), item.checked());
&gt; +            } else
&gt; +                action = gtk_action_new(actionName.get(), item.title().utf8().data(), 0, gtkStockIDFromContextMenuAction(item.action()));
&gt; +
&gt; +            gtk_action_set_sensitive(action, item.enabled());

Would you consider splitting this out into a helper? Something like getActionForWebContextMenuItem. You could use early returns and it would make this for loop easier to read.

&gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:160
&gt; +            g_object_unref(action);

Perhaps a GRefPtr?

&gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:179
&gt; +    GtkMenu* menu = GTK_MENU(gtk_menu_new());
&gt; +    populateMenu(menu, items);

I think it would simplify things to change populateMenu to createGtkMenu and have it responsible for creating the GtkMenu itself. You could change this to:

GtkMenu* menu = createGtkMenu(items);

and simplify the submenu case above.

&gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:180
&gt; +    webkitWebViewBaseShowContextMenu(WEBKIT_WEB_VIEW_BASE(m_webView), menu, position);

I&apos;d much rather have the logic for showing the menu be in this class? Do you have a particular reason for having it in the WebView GObject?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385595</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-14 02:03:34 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 89347 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89347&amp;action=review
&gt; 
&gt; Great work. I have a few minor quibbles, but very minor.
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp:208
&gt; &gt; +    return action ? String::fromUTF8(gtk_action_get_label(action)) : String();
&gt; 
&gt; Nice.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:37
&gt; &gt; +#define WEBKIT_CONTEXT_MENU_ACTION &quot;webkit-context-menu&quot;
&gt; 
&gt; Please use a static const instead of a define and use WebKit naming style.

Ok, this was copied from Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp, do you want me to change that one too? or do I file another bug report for that?

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:116
&gt; &gt; +    case WebCore::ContextMenuItemTagCopyImageUrlToClipboard:
&gt; 
&gt; This shouldn&apos;t be GTK_STOCK_COPY?

No idea, it was copied from the same file. 

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:154
&gt; &gt; +            GtkAction* action = 0;
&gt; &gt; +            GOwnPtr&lt;char&gt; actionName(g_strdup_printf(&quot;context-menu-action-%d&quot;, item.action()));
&gt; &gt; +
&gt; &gt; +            if (item.type() == WebCore::CheckableActionType) {
&gt; &gt; +                action = GTK_ACTION(gtk_toggle_action_new(actionName.get(), item.title().utf8().data(), 0, gtkStockIDFromContextMenuAction(item.action())));
&gt; &gt; +                gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), item.checked());
&gt; &gt; +            } else
&gt; &gt; +                action = gtk_action_new(actionName.get(), item.title().utf8().data(), 0, gtkStockIDFromContextMenuAction(item.action()));
&gt; &gt; +
&gt; &gt; +            gtk_action_set_sensitive(action, item.enabled());
&gt; 
&gt; Would you consider splitting this out into a helper? Something like getActionForWebContextMenuItem. You could use early returns and it would make this for loop easier to read.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:160
&gt; &gt; +            g_object_unref(action);
&gt; 
&gt; Perhaps a GRefPtr?

Yes.

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:179
&gt; &gt; +    GtkMenu* menu = GTK_MENU(gtk_menu_new());
&gt; &gt; +    populateMenu(menu, items);
&gt; 
&gt; I think it would simplify things to change populateMenu to createGtkMenu and have it responsible for creating the GtkMenu itself. You could change this to:
&gt; 
&gt; GtkMenu* menu = createGtkMenu(items);
&gt; 
&gt; and simplify the submenu case above.

hmm, I&apos;ll try that way.

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:180
&gt; &gt; +    webkitWebViewBaseShowContextMenu(WEBKIT_WEB_VIEW_BASE(m_webView), menu, position);
&gt; 
&gt; I&apos;d much rather have the logic for showing the menu be in this class? Do you have a particular reason for having it in the WebView GObject?

Yes, we don&apos;t implement GtkWidget::popup-menu signal yet, but we could use the same code like we currently do in webkit1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386493</commentid>
    <comment_count>4</comment_count>
      <attachid>89762</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-15 03:17:01 -0700</bug_when>
    <thetext>Created attachment 89762
Updated pach according to review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392927</commentid>
    <comment_count>5</comment_count>
      <attachid>89762</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-26 16:07:14 -0700</bug_when>
    <thetext>Comment on attachment 89762
Updated pach according to review

Looks okay, but going to remove the review flag until we resolve the dependency as changes there will most certainly make this one obsolete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395196</commentid>
    <comment_count>6</comment_count>
      <attachid>91660</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-29 03:26:25 -0700</bug_when>
    <thetext>Created attachment 91660
Patch updated to current git master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395198</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-29 03:28:22 -0700</bug_when>
    <thetext>Attachment 91660 did not pass style-queue:

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

Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:347:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 10 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>397185</commentid>
    <comment_count>8</comment_count>
      <attachid>91660</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-03 10:53:10 -0700</bug_when>
    <thetext>Comment on attachment 91660
Patch updated to current git master

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

Very nice change. We should no longer duplicate code between WebCore/WebKit1 and WebKit2 though. Do you mind finding a way to avoid it. One way is to build a helper class which is used by both WebCore for WebKit1 and WebKit2.

&gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:175
&gt; +        const WebContextMenuItemData&amp; item = items.at(i);
&gt; +        GtkWidget* menuItem;
&gt; +
&gt; +        if (item.type() == WebCore::SeparatorType)
&gt; +            menuItem = gtk_separator_menu_item_new();
&gt; +        else {
&gt; +            GRefPtr&lt;GtkAction&gt; action = getActionForWebContextMenuItem(item);
&gt; +            g_signal_connect(action.get(), &quot;activate&quot;, G_CALLBACK(contextMenuItemActivatedCallback), m_page);
&gt; +
&gt; +            menuItem = gtk_action_create_menu_item(action.get());
&gt; +
&gt; +            if (item.type() == WebCore::SubmenuType) {
&gt; +                GtkMenu* subMenu = createGtkMenu(item.submenu());
&gt; +                gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuItem), GTK_WIDGET(subMenu));
&gt; +            }
&gt; +        }
&gt; +
&gt; +        gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);

This could should probably be a helper function like convertContextMenuItemDataToGtkMenuItem. That would allow early returns and make the code a little cleaner, I think.

&gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:187
&gt; +    GtkMenu* menu = createGtkMenu(items);
&gt; +    webkitWebViewBaseShowContextMenu(WEBKIT_WEB_VIEW_BASE(m_webView), menu, position);

No need to cache the menu as a local variable here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397782</commentid>
    <comment_count>9</comment_count>
      <attachid>92211</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-04 03:45:31 -0700</bug_when>
    <thetext>Created attachment 92211
New patch

We don&apos;t actually need any new class, we can use the existing ContextMenu and ContextMenuItem WebCore classes. I&apos;ve implemented the missing methods in both classes and used from webkit2 code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419039</commentid>
    <comment_count>10</comment_count>
      <attachid>92211</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-10 16:22:10 -0700</bug_when>
    <thetext>Comment on attachment 92211
New patch

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

Sorry for the very late review. This looks great!

The only major change I&apos;d like to see before landing is that all the code in Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp move to the WebContextMenuProxyGtk including having the WebContextMenuProxyGtk store the lastPopupPosition.

If this isn&apos;t possible or doesn&apos;t make sense for some other reason, let&apos;s talk about it when we&apos;re both around.

&gt; Source/WebCore/platform/gtk/ContextMenuGtk.cpp:82
&gt; +    GList* children = gtk_container_get_children(GTK_CONTAINER(menu));

GOwnPtr here?

&gt; Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp:126
&gt;      GtkAction* platformAction = 0;

I think you should use GRefPtr here.

&gt; Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp:129
&gt;          platformAction = GTK_ACTION(gtk_toggle_action_new(actionName.get(), title.utf8().data(), 0, gtkStockIDFromContextMenuAction(action)));

You&apos;ll need adoptPtr here.

&gt; Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp:132
&gt;          platformAction = gtk_action_new(actionName.get(), title.utf8().data(), 0, gtkStockIDFromContextMenuAction(action));

And here as well.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:335
&gt; +static IntPoint globalPointForClientPoint(GdkWindow* window, const IntPoint&amp; clientPoint)
&gt; +{
&gt; +    int x, y;
&gt; +    gdk_window_get_origin(window, &amp;x, &amp;y);
&gt; +    return clientPoint + IntSize(x, y);
&gt; +}

Could you remove this and simply use convertWidgetRectToScreenRect from WebCore/platform/GtkUtilities.h?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:340
&gt; +static void popupMenuPositionFunction(GtkMenu* menu, gint* x, gint* y, gboolean* pushIn, gpointer userData)
&gt; +{
&gt; +    WebKitWebViewBase* view = WEBKIT_WEB_VIEW_BASE(userData);
&gt; +    WebKitWebViewBasePrivate* priv = view-&gt;priv;

I wish we could share more of this with WebKit1. :(

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:364
&gt; +    priv-&gt;lastPopupPosition = globalPointForClientPoint(gtk_widget_get_window(GTK_WIDGET(webViewBase)), position);

I&apos;d say just use webViewBase-&gt;priv-&gt;lastPopupPosition here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:366
&gt; +    gtk_menu_popup(menu, 0, 0, &amp;popupMenuPositionFunction, webViewBase, 3, gtk_get_current_event_time());

3 is a magic number, so you should drop a quick line of documentation explaining it.

&gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:39
&gt; +static const char* contextMenuActionId = &quot;webkit-context-menu-action&quot;;

Mind prefixing this with g like gContextMenuActionId? I&apos;ve been doing that lately for globals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419462</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-13 01:10:19 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 92211 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92211&amp;action=review
&gt; 
&gt; Sorry for the very late review. This looks great!

No problem :-)

&gt; The only major change I&apos;d like to see before landing is that all the code in Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp move to the WebContextMenuProxyGtk including having the WebContextMenuProxyGtk store the lastPopupPosition.
&gt; 
&gt; If this isn&apos;t possible or doesn&apos;t make sense for some other reason, let&apos;s talk about it when we&apos;re both around.

I don&apos;t remember I&apos;ll look at it again.

&gt; &gt; Source/WebCore/platform/gtk/ContextMenuGtk.cpp:82
&gt; &gt; +    GList* children = gtk_container_get_children(GTK_CONTAINER(menu));
&gt; 
&gt; GOwnPtr here?

Yes.

&gt; &gt; Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp:126
&gt; &gt;      GtkAction* platformAction = 0;
&gt; 
&gt; I think you should use GRefPtr here.

Ok.

&gt; &gt; Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp:129
&gt; &gt;          platformAction = GTK_ACTION(gtk_toggle_action_new(actionName.get(), title.utf8().data(), 0, gtkStockIDFromContextMenuAction(action)));
&gt; 
&gt; You&apos;ll need adoptPtr here.
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp:132
&gt; &gt;          platformAction = gtk_action_new(actionName.get(), title.utf8().data(), 0, gtkStockIDFromContextMenuAction(action));
&gt; 
&gt; And here as well.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:335
&gt; &gt; +static IntPoint globalPointForClientPoint(GdkWindow* window, const IntPoint&amp; clientPoint)
&gt; &gt; +{
&gt; &gt; +    int x, y;
&gt; &gt; +    gdk_window_get_origin(window, &amp;x, &amp;y);
&gt; &gt; +    return clientPoint + IntSize(x, y);
&gt; &gt; +}
&gt; 
&gt; Could you remove this and simply use convertWidgetRectToScreenRect from WebCore/platform/GtkUtilities.h?

I&apos;m not sure, this code is also in WebKit1 and it&apos;s part of the code that could be moved to WebCore in a following patch, so I&apos;ll look at it after landing.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:340
&gt; &gt; +static void popupMenuPositionFunction(GtkMenu* menu, gint* x, gint* y, gboolean* pushIn, gpointer userData)
&gt; &gt; +{
&gt; &gt; +    WebKitWebViewBase* view = WEBKIT_WEB_VIEW_BASE(userData);
&gt; &gt; +    WebKitWebViewBasePrivate* priv = view-&gt;priv;
&gt; 
&gt; I wish we could share more of this with WebKit1. :(
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:364
&gt; &gt; +    priv-&gt;lastPopupPosition = globalPointForClientPoint(gtk_widget_get_window(GTK_WIDGET(webViewBase)), position);
&gt; 
&gt; I&apos;d say just use webViewBase-&gt;priv-&gt;lastPopupPosition here.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:366
&gt; &gt; +    gtk_menu_popup(menu, 0, 0, &amp;popupMenuPositionFunction, webViewBase, 3, gtk_get_current_event_time());
&gt; 
&gt; 3 is a magic number, so you should drop a quick line of documentation explaining it.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:39
&gt; &gt; +static const char* contextMenuActionId = &quot;webkit-context-menu-action&quot;;
&gt; 
&gt; Mind prefixing this with g like gContextMenuActionId? I&apos;ve been doing that lately for globals.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419484</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-13 02:35:48 -0700</bug_when>
    <thetext>Committed r88634: &lt;http://trac.webkit.org/changeset/88634&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89347</attachid>
            <date>2011-04-13 00:48:43 -0700</date>
            <delta_ts>2011-04-15 03:17:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-context-menu.diff</filename>
            <type>text/plain</type>
            <size>21747</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZTliYzY0Li5jMjA5MTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTEtMDQtMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IEFkZCBjb250ZXh0IG1lbnUgc3VwcG9ydCBmb3IgV2Via2l0MgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ4MjcKKworICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9Db250ZXh0TWVudUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6
c2V0UGxhdGZvcm1EZXNjcmlwdGlvbik6IE1ha2Ugc3VyZSB3ZSBkb24ndAorICAgICAgICBkZXN0
cm95IHRoZSBtZW51IGlmIHRoZSBuZXcgY29udGV4dCBtZW51IGlzIHRoZSBjdXJyZW50IG9uZS4K
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVZlY3Rvcik6IEltcGxlbWVudCB0aGlz
IG1ldGhvZCB0byByZXR1cm4KKyAgICAgICAgdGhlIGxpc3Qgb2YgbWVudSBpdGVtcyBpbiB0aGUg
Z2l2ZW4gY29udGV4dCBtZW51IHJlcXVpcmVkIGJ5IFdlYktpdDIuCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
TWVudUl0ZW06OnRpdGxlKTogQ29udmVydCB0aGUgdGl0bGUgZnJvbSBVVEYtOC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbTo6Y2hlY2tlZCk6IEltcGxlbWVudCB0aGlzLCByZXF1
aXJlZCBieQorICAgICAgICBXZWJLaXQyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVJ
dGVtOjplbmFibGVkKTogSW1wbGVtZW50IHRoaXMsIHJlcXVpcmVkIGJ5CisgICAgICAgIFdlYktp
dDIuCisKIDIwMTEtMDQtMDggIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcAppbmRleCBiMzQ2MzFkLi4wMzZhYWIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0ay5jcHAKQEAg
LTQ5LDYgKzQ5LDggQEAgdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0
ZW0mIGl0ZW0pCiB2b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRm
b3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCiB7CiAgICAgQVNTRVJUKG1lbnUpOworICAgIGlmICht
X3BsYXRmb3JtRGVzY3JpcHRpb24gPT0gbWVudSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICht
X3BsYXRmb3JtRGVzY3JpcHRpb24pCiAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lE
R0VUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOwogCkBAIC02OCwxMSArNzAsMjIgQEAgUGxhdGZv
cm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9u
KCkKICAgICByZXR1cm4gZGVzY3JpcHRpb247CiB9CiAKLVZlY3RvcjxDb250ZXh0TWVudUl0ZW0+
IGNvbnRleHRNZW51SXRlbVZlY3Rvcihjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbikKK1Zl
Y3RvcjxDb250ZXh0TWVudUl0ZW0+IGNvbnRleHRNZW51SXRlbVZlY3Rvcihjb25zdCBQbGF0Zm9y
bU1lbnVEZXNjcmlwdGlvbiBtZW51KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KICAgICBW
ZWN0b3I8Q29udGV4dE1lbnVJdGVtPiBtZW51SXRlbVZlY3RvcjsKKworICAgIEdMaXN0KiBjaGls
ZHJlbiA9IGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpOwor
ICAgIGludCBpdGVtQ291bnQgPSBnX2xpc3RfbGVuZ3RoKGNoaWxkcmVuKTsKKyAgICBtZW51SXRl
bVZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkoaXRlbUNvdW50KTsKKworICAgIGZvciAoR0xpc3QqIGl0
ZW0gPSBjaGlsZHJlbjsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAg
IEd0a1dpZGdldCogd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0Kj4oaXRlbS0+ZGF0YSk7
CisgICAgICAgIGlmICghR1RLX0lTX01FTlVfSVRFTSh3aWRnZXQpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIG1lbnVJdGVtVmVjdG9yLmFwcGVuZChDb250ZXh0TWVudUl0ZW0oR1RL
X01FTlVfSVRFTSh3aWRnZXQpKSk7CisgICAgfQorICAgIGdfbGlzdF9mcmVlKGNoaWxkcmVuKTsK
KwogICAgIHJldHVybiBtZW51SXRlbVZlY3RvcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcAppbmRleCBiZGQzOTYyLi41ZjAy
NjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJ
dGVtR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJ
dGVtR3RrLmNwcApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRB
Y3Rpb24oQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQogU3RyaW5nIENvbnRleHRNZW51SXRlbTo6
dGl0bGUoKSBjb25zdAogewogICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrX2FjdGl2YXRhYmxl
X2dldF9yZWxhdGVkX2FjdGlvbihHVEtfQUNUSVZBVEFCTEUobV9wbGF0Zm9ybURlc2NyaXB0aW9u
KSk7Ci0gICAgcmV0dXJuIGFjdGlvbiA/IFN0cmluZyhndGtfYWN0aW9uX2dldF9sYWJlbChhY3Rp
b24pKSA6IFN0cmluZygpOworICAgIHJldHVybiBhY3Rpb24gPyBTdHJpbmc6OmZyb21VVEY4KGd0
a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbikpIDogU3RyaW5nKCk7CiB9CiAKIHZvaWQgQ29udGV4
dE1lbnVJdGVtOjpzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKQpAQCAtMjM1LDE2ICsyMzUs
MTYgQEAgdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldENoZWNrZWQoYm9vbCBzaG91bGRDaGVjaykK
IAogYm9vbCBDb250ZXh0TWVudUl0ZW06OmNoZWNrZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgd2l0aCBXZWJLaXQyIENvbnRleHRNZW51IGNoYW5nZXMuCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRf
cmVsYXRlZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxFKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOwor
ICAgIGlmIChhY3Rpb24gJiYgR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGd0a190b2dnbGVfYWN0aW9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0
aW9uKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIENvbnRleHRNZW51SXRlbTo6ZW5h
YmxlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB3aXRoIFdlYktpdDIgQ29u
dGV4dE1lbnUgY2hhbmdlcy4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxz
ZTsKKyAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9h
Y3Rpb24oR1RLX0FDVElWQVRBQkxFKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOworICAgIHJldHVy
biBhY3Rpb24gPyBndGtfYWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0aW9uKSA6IGZhbHNlOwogfQog
CiB2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0RW5hYmxlZChib29sIHNob3VsZEVuYWJsZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCAyZGY0YTQyLi5hNzE1NjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAK
KzIwMTEtMDQtMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFk
ZCBjb250ZXh0IG1lbnUgc3VwcG9ydCBmb3IgV2Via2l0MgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ4MjcKKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkpOiBDcmVhdGUgYSBjb250ZXh0CisgICAgICAgIG1l
bnUgcHJveHkuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VCdXR0b25QcmVzc0V2ZW50KTogUmVtb3Zl
IEZJWE1FIGNvbW1lbnQgYWJvdXQKKyAgICAgICAgY29udGV4dCBtZW51IG5vdCBzdXBwb3J0ZWQu
CisgICAgICAgIChnbG9iYWxQb2ludEZvckNsaWVudFBvaW50KTogRnVuY3Rpb24gY29waWVkIGZy
b20gd2Via2l0MSB0bworICAgICAgICBjb252ZXJ0IGEgcG9pbnQgaW4gd2lkZ2V0IGNvb3JkaW5h
dGVzIHRvIGdsb2JhbCBjb29yZGluYXRlcy4KKyAgICAgICAgKHBvcHVwTWVudVBvc2l0aW9uRnVu
Y3Rpb24pOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTaG93Q29udGV4dE1lbnUpOiBTaG93
IHRoZSBnaXZlbiBjb250ZXh0IG1lbnUgYXQKKyAgICAgICAgdGhlIGdpdmVuIHBvc2l0aW9uLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpndGtTdG9ja0lERnJvbUNvbnRleHRNZW51QWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6Y29udGV4dE1lbnVJdGVtQWN0aXZhdGVkQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpwb3B1bGF0ZU1lbnUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpzaG93Q29udGV4dE1lbnUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpoaWRlQ29udGV4dE1lbnUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpXZWJDb250ZXh0TWVudVBy
b3h5R3RrKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eUd0azo6fldlYkNv
bnRleHRNZW51UHJveHlHdGspOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1l
bnVQcm94eUd0ay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94
eUd0azo6Y3JlYXRlKToKKwogMjAxMS0wNC0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAwMmRlZDg3Li44MTBjYmE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5hbQpAQCAtMzg3LDYgKzM4Nyw4IEBAIGxpYldlYktpdDJfbGFfU09VUkNFUyA9IFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5R3Rr
LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAg
XAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAgXAorCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlH
dGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3Rvckd0ay5j
cHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1w
bC5jcHAKaW5kZXggYzM0ZTZiOS4uYzE3MWIwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMzAsNyArMzAsNyBAQAog
CiAjaW5jbHVkZSAiQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIKKyNpbmNs
dWRlICJXZWJDb250ZXh0TWVudVByb3h5R3RrLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTE5Nywx
MCArMTk3LDkgQEAgUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6
OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSoKICAgICByZXR1cm4gMDsKIH0KIAot
UGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlQ29u
dGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQorUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVBy
b3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkq
IHBhZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gV2ViQ29udGV4dE1lbnVQcm94eUd0azo6Y3JlYXRlKG1fdmlldywgcGFnZSk7CiB9CiAKIHZv
aWQgUGFnZUNsaWVudEltcGw6OnNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNh
dG9yPiwgYm9vbCBmYWRlT3V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IGRmOGI5ZWQuLjBkODY1NzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3QmFzZS5jcHAKQEAgLTU4LDYgKzU4LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGUgewogICAgIEludFBvaW50IHByZXZpb3VzQ2xpY2tQb2ludDsKICAgICBndWludCBwcmV2
aW91c0NsaWNrQnV0dG9uOwogICAgIGd1aW50MzIgcHJldmlvdXNDbGlja1RpbWU7CisgICAgSW50
UG9pbnQgbGFzdFBvcHVwUG9zaXRpb247CiAKICAgICAvLyBFZGl0b3IKICAgICBHUmVmUHRyPEd0
a1dpZGdldD4gZWRpdG9yV2lkZ2V0OwpAQCAtMjY2LDEzICsyNjcsNiBAQCBzdGF0aWMgZ3VpbnQz
MiBnZXRFdmVudFRpbWUoR2RrRXZlbnQqIGV2ZW50KQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
V2ViVmlld0Jhc2VCdXR0b25QcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1
dHRvbiogYnV0dG9uRXZlbnQpCiB7Ci0gICAgaWYgKGJ1dHRvbkV2ZW50LT5idXR0b24gPT0gMykg
ewotICAgICAgICAvLyBGSVhNRTogW0dUS10gQWRkIGNvbnRleHQgbWVudSBzdXBwb3J0IGZvciBX
ZWJraXQyLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTQ4MjcKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJuIEZBTFNF
OwotICAgIH0KLQogICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOwogCiAgICAgLy8g
Rm9yIGRvdWJsZSBhbmQgdHJpcGxlIGNsaWNrcyBHREsgc2VuZHMgYm90aCBhIG5vcm1hbCBidXR0
b24gcHJlc3MgZXZlbnQKQEAgLTYzOCwzICs2MzIsNDEgQEAgV2ViUGFnZVByb3h5KiB3ZWJraXRX
ZWJWaWV3QmFzZUdldFBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQogICAgIHJl
dHVybiB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZS5nZXQoKTsKIH0KIAorc3RhdGljIEludFBvaW50
IGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQoR2RrV2luZG93KiB3aW5kb3csIGNvbnN0IEludFBv
aW50JiBjbGllbnRQb2ludCkKK3sKKyAgICBpbnQgeCwgeTsKKyAgICBnZGtfd2luZG93X2dldF9v
cmlnaW4od2luZG93LCAmeCwgJnkpOworICAgIHJldHVybiBjbGllbnRQb2ludCArIEludFNpemUo
eCwgeSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvcHVwTWVudVBvc2l0aW9uRnVuY3Rpb24oR3RrTWVu
dSogbWVudSwgZ2ludCogeCwgZ2ludCogeSwgZ2Jvb2xlYW4qIHB1c2hJbiwgZ3BvaW50ZXIgdXNl
ckRhdGEpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVdf
QkFTRSh1c2VyRGF0YSk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gdmll
dy0+cHJpdjsKKyAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbihH
VEtfV0lER0VUKHZpZXcpKTsKKyAgICBHdGtSZXF1aXNpdGlvbiBtZW51U2l6ZTsKKworI2lmZGVm
IEdUS19BUElfVkVSU0lPTl8yCisgICAgZ3RrX3dpZGdldF9zaXplX3JlcXVlc3QoR1RLX1dJREdF
VChtZW51KSwgJm1lbnVTaXplKTsKKyNlbHNlCisgICAgZ3RrX3dpZGdldF9nZXRfcHJlZmVycmVk
X3NpemUoR1RLX1dJREdFVChtZW51KSwgJm1lbnVTaXplLCBOVUxMKTsKKyNlbmRpZgorCisgICAg
KnggPSBwcml2LT5sYXN0UG9wdXBQb3NpdGlvbi54KCk7CisgICAgaWYgKCgqeCArIG1lbnVTaXpl
LndpZHRoKSA+PSBnZGtfc2NyZWVuX2dldF93aWR0aChzY3JlZW4pKQorICAgICAgICAqeCAtPSBt
ZW51U2l6ZS53aWR0aDsKKworICAgICp5ID0gcHJpdi0+bGFzdFBvcHVwUG9zaXRpb24ueSgpOwor
ICAgIGlmICgoKnkgKyBtZW51U2l6ZS5oZWlnaHQpID49IGdka19zY3JlZW5fZ2V0X2hlaWdodChz
Y3JlZW4pKQorICAgICAgICAqeSAtPSBtZW51U2l6ZS5oZWlnaHQ7CisKKyAgICAqcHVzaEluID0g
RkFMU0U7Cit9CisKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VTaG93Q29udGV4dE1lbnUoV2ViS2l0
V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBHdGtNZW51KiBtZW51LCBjb25zdCBJbnRQb2ludCYg
cG9zaXRpb24pCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmll
d0Jhc2UtPnByaXY7CisgICAgcHJpdi0+bGFzdFBvcHVwUG9zaXRpb24gPSBnbG9iYWxQb2ludEZv
ckNsaWVudFBvaW50KGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHdlYlZpZXdCYXNl
KSksIHBvc2l0aW9uKTsKKworICAgIGd0a19tZW51X3BvcHVwKG1lbnUsIDAsIDAsICZwb3B1cE1l
bnVQb3NpdGlvbkZ1bmN0aW9uLCB3ZWJWaWV3QmFzZSwgMywgZ3RrX2dldF9jdXJyZW50X2V2ZW50
X3RpbWUoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCmluZGV4IDdmM2NhZWMuLjVlNDQ1NTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCkBAIC0xNCw2ICsxNCw3IEBAIEdfQkVHSU5fREVDTFMK
IHZvaWQgd2Via2l0V2ViVmlld0Jhc2VHZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KFdlYktp
dFdlYlZpZXdCYXNlKiwgY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxXVEY6
OlN0cmluZz4mIGNvbW1hbmRMaXN0KTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQ
YWdlKFdlYktpdFdlYlZpZXdCYXNlKiwgV0tDb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZik7CiBX
ZWJQYWdlUHJveHkqIHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXZWJLaXRXZWJWaWV3QmFzZSop
Owordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNob3dDb250ZXh0TWVudShXZWJLaXRXZWJWaWV3QmFz
ZSosIEd0a01lbnUqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogCiAKIEdfRU5EX0RFQ0xT
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51
UHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVu
dVByb3h5R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzFkYTIx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250
ZXh0TWVudVByb3h5R3RrLmNwcApAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkNvbnRleHRNZW51UHJveHlHdGsuaCIKKworI2luY2x1ZGUgIkdPd25QdHIuaCIKKyNp
bmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHRNZW51SXRlbURhdGEuaCIK
KyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCisjZGVmaW5lIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OICJ3ZWJraXQtY29udGV4
dC1tZW51IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGd0a1N0
b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oY29uc3QgV2ViQ29yZTo6Q29udGV4dE1lbnVBY3Rp
b24mIGFjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgV2ViQ29yZTo6
Q29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZDoKKyAgICBjYXNlIFdlYkNvcmU6
OkNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgorICAgIGNhc2UgV2ViQ29y
ZTo6Q29udGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgorICAgIGNhc2Ug
V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnQ29weToKKyAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19DT1BZOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5l
d1dpbmRvdzoKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUlu
TmV3V2luZG93OgorICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1l
SW5OZXdXaW5kb3c6CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVk
aWFJbk5ld1dpbmRvdzoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PUEVOOworICAgIGNhc2Ug
V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgorICAgIGNhc2Ug
V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAg
cmV0dXJuIEdUS19TVE9DS19TQVZFOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVt
VGFnR29CYWNrOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0JBQ0s7CisgICAgY2FzZSBX
ZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6CisgICAgICAgIHJldHVybiBHVEtf
U1RPQ0tfR09fRk9SV0FSRDsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1N0
b3A6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU1RPUDsKKyAgICBjYXNlIFdlYkNvcmU6OkNv
bnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19SRUZSRVNI
OworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnQ3V0OgorICAgICAgICByZXR1
cm4gR1RLX1NUT0NLX0NVVDsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1Bh
c3RlOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1BBU1RFOworICAgIGNhc2UgV2ViQ29yZTo6
Q29udGV4dE1lbnVJdGVtVGFnRGVsZXRlOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0RFTEVU
RTsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKKyAgICAg
ICAgcmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfQUxMOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4
dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBX
ZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZzoKKyAgICAgICAgcmV0dXJu
IEdUS19TVE9DS19OTzsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ0xlYXJu
U3BlbGxpbmc6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT0s7CisgICAgY2FzZSBXZWJDb3Jl
OjpDb250ZXh0TWVudUl0ZW1UYWdPdGhlcjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19NSVNT
SU5HX0lNQUdFOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnU2VhcmNoSW5T
cG90bGlnaHQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfRklORDsKKyAgICBjYXNlIFdlYkNv
cmU6OkNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19GSU5EOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZh
dWx0QXBwbGljYXRpb246CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT1BFTjsKKyAgICBjYXNl
IFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVBERlpvb21JbjoKKyAgICAgICAgcmV0dXJuIEdUS19T
VE9DS19aT09NX0lOOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtUERGWm9vbU91
dDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19aT09NX09VVDsKKyAgICBjYXNlIFdlYkNvcmU6
OkNvbnRleHRNZW51SXRlbVBERkF1dG9TaXplOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1pP
T01fRklUOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6Cisg
ICAgICAgIHJldHVybiBHVEtfU1RPQ0tfR09fRk9SV0FSRDsKKyAgICBjYXNlIFdlYkNvcmU6OkNv
bnRleHRNZW51SXRlbVBERlByZXZpb3VzUGFnZToKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19H
T19CQUNLOworICAgIC8vIE5ldyB0YWdzLCBub3QgcGFydCBvZiBBUEkKKyAgICBjYXNlIFdlYkNv
cmU6OkNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NL
X09QRU47CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5n
OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NQRUxMX0NIRUNLOworICAgIGNhc2UgV2ViQ29y
ZTo6Q29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnU6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
U0VMRUNUX0ZPTlQ7CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9u
dHM6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0ZPTlQ7CisgICAgY2FzZSBXZWJD
b3JlOjpDb250ZXh0TWVudUl0ZW1UYWdCb2xkOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0JP
TEQ7CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6CisgICAgICAg
IHJldHVybiBHVEtfU1RPQ0tfSVRBTElDOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJ
dGVtVGFnVW5kZXJsaW5lOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1VOREVSTElORTsKKyAg
ICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnM6CisgICAgICAgIHJl
dHVybiBHVEtfU1RPQ0tfU0VMRUNUX0NPTE9SOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1l
bnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9sczoKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRN
ZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDoKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51
SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJvYXJkOgorICAgICAgICAvLyBObyBpY29uIGZvciB0
aGlzLgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRl
bVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0ZVTExT
Q1JFRU47CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCBjb250ZXh0TWVudUl0ZW1BY3RpdmF0ZWRDYWxsYmFjayhHdGtBY3Rpb24qIGFjdGlv
biwgV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIGdib29sZWFuIGlzVG9nZ2xlID0gR1RLX0lT
X1RPR0dMRV9BQ1RJT04oYWN0aW9uKTsKKyAgICBXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbURh
dGEgaXRlbShpc1RvZ2dsZSA/IFdlYkNvcmU6OkNoZWNrYWJsZUFjdGlvblR5cGUgOiBXZWJDb3Jl
OjpBY3Rpb25UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PFdlYkNvcmU6OkNvbnRleHRNZW51QWN0aW9uPihHUE9JTlRFUl9UT19JTlQoZ19v
YmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QoYWN0aW9uKSwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T04pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrX2FjdGlv
bl9nZXRfbGFiZWwoYWN0aW9uKSwgZ3RrX2FjdGlvbl9nZXRfc2Vuc2l0aXZlKGFjdGlvbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUb2dnbGUgPyBndGtfdG9n
Z2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpIDogZmFsc2Up
OworICAgIHBhZ2UtPmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGl0ZW0pOworfQorCit2b2lkIFdl
YkNvbnRleHRNZW51UHJveHlHdGs6OnBvcHVsYXRlTWVudShHdGtNZW51KiBtZW51LCBjb25zdCBW
ZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgV2ViQ29udGV4
dE1lbnVJdGVtRGF0YSYgaXRlbSA9IGl0ZW1zLmF0KGkpOworICAgICAgICBHdGtXaWRnZXQqIG1l
bnVJdGVtOworCisgICAgICAgIGlmIChpdGVtLnR5cGUoKSA9PSBXZWJDb3JlOjpTZXBhcmF0b3JU
eXBlKQorICAgICAgICAgICAgbWVudUl0ZW0gPSBndGtfc2VwYXJhdG9yX21lbnVfaXRlbV9uZXco
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IDA7Cisg
ICAgICAgICAgICBHT3duUHRyPGNoYXI+IGFjdGlvbk5hbWUoZ19zdHJkdXBfcHJpbnRmKCJjb250
ZXh0LW1lbnUtYWN0aW9uLSVkIiwgaXRlbS5hY3Rpb24oKSkpOworCisgICAgICAgICAgICBpZiAo
aXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6Q2hlY2thYmxlQWN0aW9uVHlwZSkgeworICAgICAgICAg
ICAgICAgIGFjdGlvbiA9IEdUS19BQ1RJT04oZ3RrX3RvZ2dsZV9hY3Rpb25fbmV3KGFjdGlvbk5h
bWUuZ2V0KCksIGl0ZW0udGl0bGUoKS51dGY4KCkuZGF0YSgpLCAwLCBndGtTdG9ja0lERnJvbUNv
bnRleHRNZW51QWN0aW9uKGl0ZW0uYWN0aW9uKCkpKSk7CisgICAgICAgICAgICAgICAgZ3RrX3Rv
Z2dsZV9hY3Rpb25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rpb24pLCBpdGVtLmNo
ZWNrZWQoKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhY3Rpb24gPSBn
dGtfYWN0aW9uX25ldyhhY3Rpb25OYW1lLmdldCgpLCBpdGVtLnRpdGxlKCkudXRmOCgpLmRhdGEo
KSwgMCwgZ3RrU3RvY2tJREZyb21Db250ZXh0TWVudUFjdGlvbihpdGVtLmFjdGlvbigpKSk7CisK
KyAgICAgICAgICAgIGd0a19hY3Rpb25fc2V0X3NlbnNpdGl2ZShhY3Rpb24sIGl0ZW0uZW5hYmxl
ZCgpKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGFjdGlvbiksIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OLCBHSU5UX1RPX1BPSU5URVIoaXRlbS5hY3Rpb24oKSkp
OworCisgICAgICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGFjdGlvbiwgImFjdGl2YXRlIiwgR19D
QUxMQkFDSyhjb250ZXh0TWVudUl0ZW1BY3RpdmF0ZWRDYWxsYmFjayksIG1fcGFnZSk7CisKKyAg
ICAgICAgICAgIG1lbnVJdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVtKGFjdGlvbik7
CisgICAgICAgICAgICBnX29iamVjdF91bnJlZihhY3Rpb24pOworCisgICAgICAgICAgICBpZiAo
aXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6U3VibWVudVR5cGUpIHsKKyAgICAgICAgICAgICAgICBH
dGtXaWRnZXQqIHN1Yk1lbnUgPSBndGtfbWVudV9uZXcoKTsKKyAgICAgICAgICAgICAgICBwb3B1
bGF0ZU1lbnUoR1RLX01FTlUoc3ViTWVudSksIGl0ZW0uc3VibWVudSgpKTsKKyAgICAgICAgICAg
ICAgICBndGtfbWVudV9pdGVtX3NldF9zdWJtZW51KEdUS19NRU5VX0lURU0obWVudUl0ZW0pLCBz
dWJNZW51KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGd0a19tZW51X3No
ZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtZW51KSwgbWVudUl0ZW0pOworICAgIH0KK30KKwor
dm9pZCBXZWJDb250ZXh0TWVudVByb3h5R3RrOjpzaG93Q29udGV4dE1lbnUoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0
YT4mIGl0ZW1zKQoreworICAgIGlmIChpdGVtcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEd0a01lbnUqIG1lbnUgPSBHVEtfTUVOVShndGtfbWVudV9uZXcoKSk7CisgICAgcG9w
dWxhdGVNZW51KG1lbnUsIGl0ZW1zKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVNob3dDb250ZXh0
TWVudShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3dlYlZpZXcpLCBtZW51LCBwb3NpdGlvbik7Cit9
CisKK3ZvaWQgV2ViQ29udGV4dE1lbnVQcm94eUd0azo6aGlkZUNvbnRleHRNZW51KCkKK3sKK30K
KworV2ViQ29udGV4dE1lbnVQcm94eUd0azo6V2ViQ29udGV4dE1lbnVQcm94eUd0ayhHdGtXaWRn
ZXQqIHdlYlZpZXcsIFdlYlBhZ2VQcm94eSogcGFnZSkKKyAgICA6IG1fd2ViVmlldyh3ZWJWaWV3
KQorICAgICwgbV9wYWdlKHBhZ2UpCit7Cit9CisKK1dlYkNvbnRleHRNZW51UHJveHlHdGs6On5X
ZWJDb250ZXh0TWVudVByb3h5R3RrKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJv
eHlHdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94
eUd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOGEzZTgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51
UHJveHlHdGsuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbnRleHRNZW51UHJveHlHdGtfaAorI2Rl
ZmluZSBXZWJDb250ZXh0TWVudVByb3h5R3RrX2gKKworI2luY2x1ZGUgIldlYkNvbnRleHRNZW51
UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNvbnRleHRNZW51SXRl
bURhdGE7CitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFdlYkNvbnRleHRNZW51UHJveHlH
dGsgOiBwdWJsaWMgV2ViQ29udGV4dE1lbnVQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eUd0az4gY3JlYXRlKEd0a1dpZGdldCogd2ViVmll
dywgV2ViUGFnZVByb3h5KiBwYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBXZWJDb250ZXh0TWVudVByb3h5R3RrKHdlYlZpZXcsIHBhZ2UpKTsKKyAgICB9CisgICAgfldl
YkNvbnRleHRNZW51UHJveHlHdGsoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1l
bnUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJ
dGVtRGF0YT4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZUNvbnRleHRNZW51KCk7CisKK3ByaXZh
dGU6CisgICAgV2ViQ29udGV4dE1lbnVQcm94eUd0ayhHdGtXaWRnZXQqLCBXZWJQYWdlUHJveHkq
KTsKKyAgICB2b2lkIHBvcHVsYXRlTWVudShHdGtNZW51KiwgY29uc3QgVmVjdG9yPFdlYkNvbnRl
eHRNZW51SXRlbURhdGE+Jik7CisKKyAgICBHdGtXaWRnZXQqIG1fd2ViVmlldzsKKyAgICBXZWJQ
YWdlUHJveHkqIG1fcGFnZTsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBXZWJDb250ZXh0TWVudVByb3h5R3RrX2gK
</data>
<flag name="review"
          id="82011"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89762</attachid>
            <date>2011-04-15 03:17:01 -0700</date>
            <delta_ts>2011-04-29 03:26:25 -0700</delta_ts>
            <desc>Updated pach according to review</desc>
            <filename>wk2-context-menu2.diff</filename>
            <type>text/plain</type>
            <size>21876</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1YjQ2NjEwLi43MDFhODZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTEtMDQtMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IEFkZCBjb250ZXh0IG1lbnUgc3VwcG9ydCBmb3IgV2Via2l0MgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ4MjcKKworICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9Db250ZXh0TWVudUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6
c2V0UGxhdGZvcm1EZXNjcmlwdGlvbik6IE1ha2Ugc3VyZSB3ZSBkb24ndAorICAgICAgICBkZXN0
cm95IHRoZSBtZW51IGlmIHRoZSBuZXcgY29udGV4dCBtZW51IGlzIHRoZSBjdXJyZW50IG9uZS4K
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVZlY3Rvcik6IEltcGxlbWVudCB0aGlz
IG1ldGhvZCB0byByZXR1cm4KKyAgICAgICAgdGhlIGxpc3Qgb2YgbWVudSBpdGVtcyBpbiB0aGUg
Z2l2ZW4gY29udGV4dCBtZW51IHJlcXVpcmVkIGJ5IFdlYktpdDIuCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
TWVudUl0ZW06OnRpdGxlKTogQ29udmVydCB0aGUgdGl0bGUgZnJvbSBVVEYtOC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbTo6Y2hlY2tlZCk6IEltcGxlbWVudCB0aGlzLCByZXF1
aXJlZCBieQorICAgICAgICBXZWJLaXQyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVJ
dGVtOjplbmFibGVkKTogSW1wbGVtZW50IHRoaXMsIHJlcXVpcmVkIGJ5CisgICAgICAgIFdlYktp
dDIuCisKIDIwMTEtMDQtMTQgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBhOTc0
Y2Q1Li4yYjRhZTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDQtMTUgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFkZCBjb250ZXh0IG1lbnUg
c3VwcG9ydCBmb3IgV2Via2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTQ4MjcKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZp
bGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGll
bnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZUNvbnRl
eHRNZW51UHJveHkpOiBDcmVhdGUgYSBjb250ZXh0CisgICAgICAgIG1lbnUgcHJveHkuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAgICAgICAo
d2Via2l0V2ViVmlld0Jhc2VCdXR0b25QcmVzc0V2ZW50KTogUmVtb3ZlIEZJWE1FIGNvbW1lbnQg
YWJvdXQKKyAgICAgICAgY29udGV4dCBtZW51IG5vdCBzdXBwb3J0ZWQuCisgICAgICAgIChnbG9i
YWxQb2ludEZvckNsaWVudFBvaW50KTogRnVuY3Rpb24gY29waWVkIGZyb20gd2Via2l0MSB0bwor
ICAgICAgICBjb252ZXJ0IGEgcG9pbnQgaW4gd2lkZ2V0IGNvb3JkaW5hdGVzIHRvIGdsb2JhbCBj
b29yZGluYXRlcy4KKyAgICAgICAgKHBvcHVwTWVudVBvc2l0aW9uRnVuY3Rpb24pOgorICAgICAg
ICAod2Via2l0V2ViVmlld0Jhc2VTaG93Q29udGV4dE1lbnUpOiBTaG93IHRoZSBnaXZlbiBjb250
ZXh0IG1lbnUgYXQKKyAgICAgICAgdGhlIGdpdmVuIHBvc2l0aW9uLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpndGtTdG9ja0lERnJvbUNvbnRleHRNZW51QWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
Y29udGV4dE1lbnVJdGVtQWN0aXZhdGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpnZXRB
Y3Rpb25Gb3JXZWJDb250ZXh0TWVudUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0
TWVudVByb3h5R3RrOjpjcmVhdGVHdGtNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4
dE1lbnVQcm94eUd0azo6c2hvd0NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29u
dGV4dE1lbnVQcm94eUd0azo6aGlkZUNvbnRleHRNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29udGV4dE1lbnVQcm94eUd0azo6V2ViQ29udGV4dE1lbnVQcm94eUd0ayk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlHdGs6On5XZWJDb250ZXh0TWVudVByb3h5R3RrKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuaDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlHdGs6OmNyZWF0ZSk6CisKIDIw
MTEtMDQtMTQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9Db250ZXh0TWVudUd0ay5jcHAKaW5kZXggYjM0NjMxZC4uMDM2YWFiMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVHdGsuY3BwCkBAIC00OSw2ICs0OSw4
IEBAIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiBpdGVtKQog
dm9pZCBDb250ZXh0TWVudTo6c2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBtZW51KQogewogICAgIEFTU0VSVChtZW51KTsKKyAgICBpZiAobV9wbGF0Zm9ybURl
c2NyaXB0aW9uID09IG1lbnUpCisgICAgICAgIHJldHVybjsKICAgICBpZiAobV9wbGF0Zm9ybURl
c2NyaXB0aW9uKQogICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVChtX3BsYXRm
b3JtRGVzY3JpcHRpb24pKTsKIApAQCAtNjgsMTEgKzcwLDIyIEBAIFBsYXRmb3JtTWVudURlc2Ny
aXB0aW9uIENvbnRleHRNZW51OjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpCiAgICAgcmV0
dXJuIGRlc2NyaXB0aW9uOwogfQogCi1WZWN0b3I8Q29udGV4dE1lbnVJdGVtPiBjb250ZXh0TWVu
dUl0ZW1WZWN0b3IoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24pCitWZWN0b3I8Q29udGV4
dE1lbnVJdGVtPiBjb250ZXh0TWVudUl0ZW1WZWN0b3IoY29uc3QgUGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24gbWVudSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCiAgICAgVmVjdG9yPENvbnRl
eHRNZW51SXRlbT4gbWVudUl0ZW1WZWN0b3I7CisKKyAgICBHTGlzdCogY2hpbGRyZW4gPSBndGtf
Y29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKTsKKyAgICBpbnQgaXRl
bUNvdW50ID0gZ19saXN0X2xlbmd0aChjaGlsZHJlbik7CisgICAgbWVudUl0ZW1WZWN0b3IucmVz
ZXJ2ZUNhcGFjaXR5KGl0ZW1Db3VudCk7CisKKyAgICBmb3IgKEdMaXN0KiBpdGVtID0gY2hpbGRy
ZW47IGl0ZW07IGl0ZW0gPSBnX2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBHdGtXaWRnZXQq
IHdpZGdldCA9IHN0YXRpY19jYXN0PEd0a1dpZGdldCo+KGl0ZW0tPmRhdGEpOworICAgICAgICBp
ZiAoIUdUS19JU19NRU5VX0lURU0od2lkZ2V0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBtZW51SXRlbVZlY3Rvci5hcHBlbmQoQ29udGV4dE1lbnVJdGVtKEdUS19NRU5VX0lURU0o
d2lkZ2V0KSkpOworICAgIH0KKyAgICBnX2xpc3RfZnJlZShjaGlsZHJlbik7CisKICAgICByZXR1
cm4gbWVudUl0ZW1WZWN0b3I7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAKaW5kZXggYmRkMzk2Mi4uNWYwMjYyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAK
QEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0QWN0aW9uKENvbnRl
eHRNZW51QWN0aW9uIGFjdGlvbikKIFN0cmluZyBDb250ZXh0TWVudUl0ZW06OnRpdGxlKCkgY29u
c3QKIHsKICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRl
ZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxFKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOwotICAgIHJl
dHVybiBhY3Rpb24gPyBTdHJpbmcoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uKSkgOiBTdHJp
bmcoKTsKKyAgICByZXR1cm4gYWN0aW9uID8gU3RyaW5nOjpmcm9tVVRGOChndGtfYWN0aW9uX2dl
dF9sYWJlbChhY3Rpb24pKSA6IFN0cmluZygpOwogfQogCiB2b2lkIENvbnRleHRNZW51SXRlbTo6
c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKQEAgLTIzNSwxNiArMjM1LDE2IEBAIHZvaWQg
Q29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wgc2hvdWxkQ2hlY2spCiAKIGJvb2wgQ29u
dGV4dE1lbnVJdGVtOjpjaGVja2VkKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHdpdGggV2ViS2l0MiBDb250ZXh0TWVudSBjaGFuZ2VzLgotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0
aW9uKEdUS19BQ1RJVkFUQUJMRShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKKyAgICBpZiAoYWN0
aW9uICYmIEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikpCisgICAgICAgIHJldHVybiBndGtf
dG9nZ2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpOwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBDb250ZXh0TWVudUl0ZW06OmVuYWJsZWQoKSBjb25z
dAogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgd2l0aCBXZWJLaXQyIENvbnRleHRNZW51IGNo
YW5nZXMuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgR3Rr
QWN0aW9uKiBhY3Rpb24gPSBndGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19B
Q1RJVkFUQUJMRShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKKyAgICByZXR1cm4gYWN0aW9uID8g
Z3RrX2FjdGlvbl9nZXRfc2Vuc2l0aXZlKGFjdGlvbikgOiBmYWxzZTsKIH0KIAogdm9pZCBDb250
ZXh0TWVudUl0ZW06OnNldEVuYWJsZWQoYm9vbCBzaG91bGRFbmFibGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
LmFtCmluZGV4IDAyZGVkODcuLjgxMGNiYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0zODcs
NiArMzg3LDggQEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlHdGsuY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcCBcCisJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmggXAorCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUd0ay5jcHAgXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yR3RrLmNwcCBcCiAJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCBl
MzFiYWZkLi5kOWQ4MTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJD
aHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgorI2luY2x1ZGUgIldlYkNvbnRl
eHRNZW51UHJveHlHdGsuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTkyLDEwICsxOTIsOSBAQCBQ
YXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBN
ZW51UHJveHkoV2ViUGFnZVByb3h5KgogICAgIHJldHVybiAwOwogfQogCi1QYXNzUmVmUHRyPFdl
YkNvbnRleHRNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVDb250ZXh0TWVudVByb3h5
KFdlYlBhZ2VQcm94eSopCitQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFBhZ2VDbGll
bnRJbXBsOjpjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSogcGFnZSkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBXZWJDb250ZXh0
TWVudVByb3h5R3RrOjpjcmVhdGUobV92aWV3LCBwYWdlKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50
SW1wbDo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sIGZh
ZGVPdXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggNDA1M2YzOS4uY2ExODJjMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApA
QCAtNTgsNiArNTgsNyBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAgICAg
SW50UG9pbnQgcHJldmlvdXNDbGlja1BvaW50OwogICAgIGd1aW50IHByZXZpb3VzQ2xpY2tCdXR0
b247CiAgICAgZ3VpbnQzMiBwcmV2aW91c0NsaWNrVGltZTsKKyAgICBJbnRQb2ludCBsYXN0UG9w
dXBQb3NpdGlvbjsKIAogICAgIC8vIEVkaXRvcgogICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBlZGl0
b3JXaWRnZXQ7CkBAIC0yNjgsMTMgKzI2OSw2IEBAIHN0YXRpYyBndWludDMyIGdldEV2ZW50VGlt
ZShHZGtFdmVudCogZXZlbnQpCiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUJ1
dHRvblByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBidXR0b25F
dmVudCkKIHsKLSAgICBpZiAoYnV0dG9uRXZlbnQtPmJ1dHRvbiA9PSAzKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBbR1RLXSBBZGQgY29udGV4dCBtZW51IHN1cHBvcnQgZm9yIFdlYmtpdDIuCi0gICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDgyNwotICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCiAg
ICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7CiAKICAgICAvLyBGb3IgZG91YmxlIGFu
ZCB0cmlwbGUgY2xpY2tzIEdESyBzZW5kcyBib3RoIGEgbm9ybWFsIGJ1dHRvbiBwcmVzcyBldmVu
dApAQCAtNjQwLDMgKzYzNCw0MSBAQCBXZWJQYWdlUHJveHkqIHdlYmtpdFdlYlZpZXdCYXNlR2V0
UGFnZShXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCiAgICAgcmV0dXJuIHdlYlZpZXdC
YXNlLT5wcml2LT5wYWdlLmdldCgpOwogfQogCitzdGF0aWMgSW50UG9pbnQgZ2xvYmFsUG9pbnRG
b3JDbGllbnRQb2ludChHZGtXaW5kb3cqIHdpbmRvdywgY29uc3QgSW50UG9pbnQmIGNsaWVudFBv
aW50KQoreworICAgIGludCB4LCB5OworICAgIGdka193aW5kb3dfZ2V0X29yaWdpbih3aW5kb3cs
ICZ4LCAmeSk7CisgICAgcmV0dXJuIGNsaWVudFBvaW50ICsgSW50U2l6ZSh4LCB5KTsKK30KKwor
c3RhdGljIHZvaWQgcG9wdXBNZW51UG9zaXRpb25GdW5jdGlvbihHdGtNZW51KiBtZW51LCBnaW50
KiB4LCBnaW50KiB5LCBnYm9vbGVhbiogcHVzaEluLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAg
ICBXZWJLaXRXZWJWaWV3QmFzZSogdmlldyA9IFdFQktJVF9XRUJfVklFV19CQVNFKHVzZXJEYXRh
KTsKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB2aWV3LT5wcml2OworICAg
IEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKEdUS19XSURHRVQodmll
dykpOworICAgIEd0a1JlcXVpc2l0aW9uIG1lbnVTaXplOworCisjaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKKyAgICBndGtfd2lkZ2V0X3NpemVfcmVxdWVzdChHVEtfV0lER0VUKG1lbnUpLCAmbWVu
dVNpemUpOworI2Vsc2UKKyAgICBndGtfd2lkZ2V0X2dldF9wcmVmZXJyZWRfc2l6ZShHVEtfV0lE
R0VUKG1lbnUpLCAmbWVudVNpemUsIE5VTEwpOworI2VuZGlmCisKKyAgICAqeCA9IHByaXYtPmxh
c3RQb3B1cFBvc2l0aW9uLngoKTsKKyAgICBpZiAoKCp4ICsgbWVudVNpemUud2lkdGgpID49IGdk
a19zY3JlZW5fZ2V0X3dpZHRoKHNjcmVlbikpCisgICAgICAgICp4IC09IG1lbnVTaXplLndpZHRo
OworCisgICAgKnkgPSBwcml2LT5sYXN0UG9wdXBQb3NpdGlvbi55KCk7CisgICAgaWYgKCgqeSAr
IG1lbnVTaXplLmhlaWdodCkgPj0gZ2RrX3NjcmVlbl9nZXRfaGVpZ2h0KHNjcmVlbikpCisgICAg
ICAgICp5IC09IG1lbnVTaXplLmhlaWdodDsKKworICAgICpwdXNoSW4gPSBGQUxTRTsKK30KKwor
dm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNob3dDb250ZXh0TWVudShXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UsIEd0a01lbnUqIG1lbnUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKK3sK
KyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsK
KyAgICBwcml2LT5sYXN0UG9wdXBQb3NpdGlvbiA9IGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQo
Z3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQod2ViVmlld0Jhc2UpKSwgcG9zaXRpb24p
OworCisgICAgZ3RrX21lbnVfcG9wdXAobWVudSwgMCwgMCwgJnBvcHVwTWVudVBvc2l0aW9uRnVu
Y3Rpb24sIHdlYlZpZXdCYXNlLCAzLCBndGtfZ2V0X2N1cnJlbnRfZXZlbnRfdGltZSgpKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5kZXggN2YzY2FlYy4uNWU0NDU1MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlLmgKQEAgLTE0LDYgKzE0LDcgQEAgR19CRUdJTl9ERUNMUwogdm9pZCB3ZWJraXRX
ZWJWaWV3QmFzZUdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoV2ViS2l0V2ViVmlld0Jhc2Uq
LCBjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgVmVjdG9yPFdURjo6U3RyaW5nPiYgY29t
bWFuZExpc3QpOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0V2Vi
Vmlld0Jhc2UqLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmKTsKIFdlYlBhZ2VQcm94eSog
d2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdlYktpdFdlYlZpZXdCYXNlKik7Cit2b2lkIHdlYmtp
dFdlYlZpZXdCYXNlU2hvd0NvbnRleHRNZW51KFdlYktpdFdlYlZpZXdCYXNlKiwgR3RrTWVudSos
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAKIAogR19FTkRfREVDTFMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZWU1MDAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlH
dGsuY3BwCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29udGV4
dE1lbnVQcm94eUd0ay5oIgorCisjaW5jbHVkZSAiR093blB0ci5oIgorI2luY2x1ZGUgIkludFBv
aW50LmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgorI2luY2x1ZGUgIldl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3N0YXRp
YyBjb25zdCBjaGFyKiBjb250ZXh0TWVudUFjdGlvbklkID0gIndlYmtpdC1jb250ZXh0LW1lbnUi
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGd0a1N0b2NrSURG
cm9tQ29udGV4dE1lbnVBY3Rpb24oY29uc3QgV2ViQ29yZTo6Q29udGV4dE1lbnVBY3Rpb24mIGFj
dGlvbikKK3sKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4
dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZDoKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRl
eHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgorICAgIGNhc2UgV2ViQ29yZTo6Q29u
dGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgorICAgIGNhc2UgV2ViQ29y
ZTo6Q29udGV4dE1lbnVJdGVtVGFnQ29weToKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19DT1BZ
OworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRv
dzoKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2lu
ZG93OgorICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdX
aW5kb3c6CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5l
d1dpbmRvdzoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PUEVOOworICAgIGNhc2UgV2ViQ29y
ZTo6Q29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgorICAgIGNhc2UgV2ViQ29y
ZTo6Q29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAgcmV0dXJu
IEdUS19TVE9DS19TQVZFOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnR29C
YWNrOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0JBQ0s7CisgICAgY2FzZSBXZWJDb3Jl
OjpDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
R09fRk9SV0FSRDsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1N0b3A6Cisg
ICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU1RPUDsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRN
ZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19SRUZSRVNIOworICAg
IGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnQ3V0OgorICAgICAgICByZXR1cm4gR1RL
X1NUT0NLX0NVVDsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1Bhc3RlOgor
ICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1BBU1RFOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4
dE1lbnVJdGVtVGFnRGVsZXRlOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0RFTEVURTsKKyAg
ICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKKyAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19TRUxFQ1RfQUxMOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJ
dGVtVGFnU3BlbGxpbmdHdWVzczoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBXZWJDb3Jl
OjpDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZzoKKyAgICAgICAgcmV0dXJuIEdUS19T
VE9DS19OTzsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxp
bmc6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT0s7CisgICAgY2FzZSBXZWJDb3JlOjpDb250
ZXh0TWVudUl0ZW1UYWdPdGhlcjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19NSVNTSU5HX0lN
QUdFOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnU2VhcmNoSW5TcG90bGln
aHQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfRklORDsKKyAgICBjYXNlIFdlYkNvcmU6OkNv
bnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19GSU5E
OworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0QXBw
bGljYXRpb246CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT1BFTjsKKyAgICBjYXNlIFdlYkNv
cmU6OkNvbnRleHRNZW51SXRlbVBERlpvb21JbjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19a
T09NX0lOOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKKyAg
ICAgICAgcmV0dXJuIEdUS19TVE9DS19aT09NX09VVDsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRl
eHRNZW51SXRlbVBERkF1dG9TaXplOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1pPT01fRklU
OworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6CisgICAgICAg
IHJldHVybiBHVEtfU1RPQ0tfR09fRk9SV0FSRDsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRN
ZW51SXRlbVBERlByZXZpb3VzUGFnZToKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19HT19CQUNL
OworICAgIC8vIE5ldyB0YWdzLCBub3QgcGFydCBvZiBBUEkKKyAgICBjYXNlIFdlYkNvcmU6OkNv
bnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX09QRU47
CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nOgorICAg
ICAgICByZXR1cm4gR1RLX1NUT0NLX1NQRUxMX0NIRUNLOworICAgIGNhc2UgV2ViQ29yZTo6Q29u
dGV4dE1lbnVJdGVtVGFnRm9udE1lbnU6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNU
X0ZPTlQ7CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHM6Cisg
ICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0ZPTlQ7CisgICAgY2FzZSBXZWJDb3JlOjpD
b250ZXh0TWVudUl0ZW1UYWdCb2xkOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0JPTEQ7Cisg
ICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6CisgICAgICAgIHJldHVy
biBHVEtfU1RPQ0tfSVRBTElDOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFn
VW5kZXJsaW5lOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1VOREVSTElORTsKKyAgICBjYXNl
IFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnM6CisgICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfU0VMRUNUX0NPTE9SOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVt
VGFnVG9nZ2xlTWVkaWFDb250cm9sczoKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRl
bVRhZ1RvZ2dsZU1lZGlhTG9vcDoKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRh
Z0NvcHlJbWFnZVVybFRvQ2xpcGJvYXJkOgorICAgICAgICAvLyBObyBpY29uIGZvciB0aGlzLgor
ICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ0Vu
dGVyVmlkZW9GdWxsc2NyZWVuOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0ZVTExTQ1JFRU47
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCBjb250ZXh0TWVudUl0ZW1BY3RpdmF0ZWRDYWxsYmFjayhHdGtBY3Rpb24qIGFjdGlvbiwgV2Vi
UGFnZVByb3h5KiBwYWdlKQoreworICAgIGdib29sZWFuIGlzVG9nZ2xlID0gR1RLX0lTX1RPR0dM
RV9BQ1RJT04oYWN0aW9uKTsKKyAgICBXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbURhdGEgaXRl
bShpc1RvZ2dsZSA/IFdlYkNvcmU6OkNoZWNrYWJsZUFjdGlvblR5cGUgOiBXZWJDb3JlOjpBY3Rp
b25UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PFdlYkNvcmU6OkNvbnRleHRNZW51QWN0aW9uPihHUE9JTlRFUl9UT19JTlQoZ19vYmplY3Rf
Z2V0X2RhdGEoR19PQkpFQ1QoYWN0aW9uKSwgY29udGV4dE1lbnVBY3Rpb25JZCkpKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtfYWN0aW9uX2dldF9sYWJlbChh
Y3Rpb24pLCBndGtfYWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0aW9uKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RvZ2dsZSA/IGd0a190b2dnbGVfYWN0aW9uX2dl
dF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkgOiBmYWxzZSk7CisgICAgcGFnZS0+
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoaXRlbSk7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEd0a0Fj
dGlvbj4gZ2V0QWN0aW9uRm9yV2ViQ29udGV4dE1lbnVJdGVtKGNvbnN0IFdlYkNvbnRleHRNZW51
SXRlbURhdGEmIGl0ZW0pCit7CisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSAwOworICAgIEdPd25Q
dHI8Y2hhcj4gYWN0aW9uTmFtZShnX3N0cmR1cF9wcmludGYoImNvbnRleHQtbWVudS1hY3Rpb24t
JWQiLCBpdGVtLmFjdGlvbigpKSk7CisKKyAgICBpZiAoaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6
Q2hlY2thYmxlQWN0aW9uVHlwZSkgeworICAgICAgICBhY3Rpb24gPSBHVEtfQUNUSU9OKGd0a190
b2dnbGVfYWN0aW9uX25ldyhhY3Rpb25OYW1lLmdldCgpLCBpdGVtLnRpdGxlKCkudXRmOCgpLmRh
dGEoKSwgMCwgZ3RrU3RvY2tJREZyb21Db250ZXh0TWVudUFjdGlvbihpdGVtLmFjdGlvbigpKSkp
OworICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9O
KGFjdGlvbiksIGl0ZW0uY2hlY2tlZCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYWN0aW9uID0g
Z3RrX2FjdGlvbl9uZXcoYWN0aW9uTmFtZS5nZXQoKSwgaXRlbS50aXRsZSgpLnV0ZjgoKS5kYXRh
KCksIDAsIGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oaXRlbS5hY3Rpb24oKSkpOwor
CisgICAgZ3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZlKGFjdGlvbiwgaXRlbS5lbmFibGVkKCkpOwor
ICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGFjdGlvbiksIGNvbnRleHRNZW51QWN0aW9u
SWQsIEdJTlRfVE9fUE9JTlRFUihpdGVtLmFjdGlvbigpKSk7CisKKyAgICByZXR1cm4gYWRvcHRH
UmVmKGFjdGlvbik7Cit9CisKK0d0a01lbnUqIFdlYkNvbnRleHRNZW51UHJveHlHdGs6OmNyZWF0
ZUd0a01lbnUoY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVtcykKK3sK
KyAgICBHdGtNZW51KiBtZW51ID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBX
ZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBpdGVtID0gaXRlbXMuYXQoaSk7CisgICAgICAgIEd0a1dp
ZGdldCogbWVudUl0ZW07CisKKyAgICAgICAgaWYgKGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OlNl
cGFyYXRvclR5cGUpCisgICAgICAgICAgICBtZW51SXRlbSA9IGd0a19zZXBhcmF0b3JfbWVudV9p
dGVtX25ldygpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3RrQWN0aW9u
PiBhY3Rpb24gPSBnZXRBY3Rpb25Gb3JXZWJDb250ZXh0TWVudUl0ZW0oaXRlbSk7CisgICAgICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KGFjdGlvbi5nZXQoKSwgImFjdGl2YXRlIiwgR19DQUxMQkFD
Syhjb250ZXh0TWVudUl0ZW1BY3RpdmF0ZWRDYWxsYmFjayksIG1fcGFnZSk7CisKKyAgICAgICAg
ICAgIG1lbnVJdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVtKGFjdGlvbi5nZXQoKSk7
CisKKyAgICAgICAgICAgIGlmIChpdGVtLnR5cGUoKSA9PSBXZWJDb3JlOjpTdWJtZW51VHlwZSkg
eworICAgICAgICAgICAgICAgIEd0a01lbnUqIHN1Yk1lbnUgPSBjcmVhdGVHdGtNZW51KGl0ZW0u
c3VibWVudSgpKTsKKyAgICAgICAgICAgICAgICBndGtfbWVudV9pdGVtX3NldF9zdWJtZW51KEdU
S19NRU5VX0lURU0obWVudUl0ZW0pLCBHVEtfV0lER0VUKHN1Yk1lbnUpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9T
SEVMTChtZW51KSwgbWVudUl0ZW0pOworICAgIH0KKworICAgIHJldHVybiBtZW51OworfQorCit2
b2lkIFdlYkNvbnRleHRNZW51UHJveHlHdGs6OnNob3dDb250ZXh0TWVudShjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRh
PiYgaXRlbXMpCit7CisgICAgaWYgKGl0ZW1zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3RrTWVudSogbWVudSA9IGNyZWF0ZUd0a01lbnUoaXRlbXMpOworICAgIHdlYmtpdFdl
YlZpZXdCYXNlU2hvd0NvbnRleHRNZW51KFdFQktJVF9XRUJfVklFV19CQVNFKG1fd2ViVmlldyks
IG1lbnUsIHBvc2l0aW9uKTsKK30KKwordm9pZCBXZWJDb250ZXh0TWVudVByb3h5R3RrOjpoaWRl
Q29udGV4dE1lbnUoKQoreworfQorCitXZWJDb250ZXh0TWVudVByb3h5R3RrOjpXZWJDb250ZXh0
TWVudVByb3h5R3RrKEd0a1dpZGdldCogd2ViVmlldywgV2ViUGFnZVByb3h5KiBwYWdlKQorICAg
IDogbV93ZWJWaWV3KHdlYlZpZXcpCisgICAgLCBtX3BhZ2UocGFnZSkKK3sKK30KKworV2ViQ29u
dGV4dE1lbnVQcm94eUd0azo6fldlYkNvbnRleHRNZW51UHJveHlHdGsoKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNjNkMGRiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29udGV4
dE1lbnVQcm94eUd0a19oCisjZGVmaW5lIFdlYkNvbnRleHRNZW51UHJveHlHdGtfaAorCisjaW5j
bHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViQ29udGV4dE1lbnVJdGVtRGF0YTsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKKworY2xhc3Mg
V2ViQ29udGV4dE1lbnVQcm94eUd0ayA6IHB1YmxpYyBXZWJDb250ZXh0TWVudVByb3h5IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5R3RrPiBjcmVh
dGUoR3RrV2lkZ2V0KiB3ZWJWaWV3LCBXZWJQYWdlUHJveHkqIHBhZ2UpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkNvbnRleHRNZW51UHJveHlHdGsod2ViVmlldywgcGFn
ZSkpOworICAgIH0KKyAgICB+V2ViQ29udGV4dE1lbnVQcm94eUd0aygpOworCisgICAgdmlydHVh
bCB2b2lkIHNob3dDb250ZXh0TWVudShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFZl
Y3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYpOworICAgIHZpcnR1YWwgdm9pZCBoaWRlQ29u
dGV4dE1lbnUoKTsKKworcHJpdmF0ZToKKyAgICBXZWJDb250ZXh0TWVudVByb3h5R3RrKEd0a1dp
ZGdldCosIFdlYlBhZ2VQcm94eSopOworICAgIEd0a01lbnUqIGNyZWF0ZUd0a01lbnUoY29uc3Qg
VmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+Jik7CisKKyAgICBHdGtXaWRnZXQqIG1fd2Vi
VmlldzsKKyAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKK307CisKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBXZWJDb250ZXh0TWVudVByb3h5R3RrX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91660</attachid>
            <date>2011-04-29 03:26:25 -0700</date>
            <delta_ts>2011-05-04 03:45:31 -0700</delta_ts>
            <desc>Patch updated to current git master</desc>
            <filename>wk2-context-menu3.diff</filename>
            <type>text/plain</type>
            <size>21353</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjYTFjMWI5Li5mNDk2NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTEtMDQtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IEFkZCBjb250ZXh0IG1lbnUgc3VwcG9ydCBmb3IgV2Via2l0MgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ4MjcKKworICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9Db250ZXh0TWVudUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6
c2V0UGxhdGZvcm1EZXNjcmlwdGlvbik6IE1ha2Ugc3VyZSB3ZSBkb24ndAorICAgICAgICBkZXN0
cm95IHRoZSBtZW51IGlmIHRoZSBuZXcgY29udGV4dCBtZW51IGlzIHRoZSBjdXJyZW50IG9uZS4K
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVZlY3Rvcik6IEltcGxlbWVudCB0aGlz
IG1ldGhvZCB0byByZXR1cm4KKyAgICAgICAgdGhlIGxpc3Qgb2YgbWVudSBpdGVtcyBpbiB0aGUg
Z2l2ZW4gY29udGV4dCBtZW51IHJlcXVpcmVkIGJ5IFdlYktpdDIuCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
TWVudUl0ZW06OnRpdGxlKTogQ29udmVydCB0aGUgdGl0bGUgZnJvbSBVVEYtOC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbTo6Y2hlY2tlZCk6IEltcGxlbWVudCB0aGlzLCByZXF1
aXJlZCBieSBXZWJLaXQyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtOjplbmFi
bGVkKTogRGl0dG8uCisKIDIwMTEtMDQtMjkgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29n
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
aW5kZXggZDlhZGRiNi4uMjg1ZDIxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM1IEBACiAyMDEx
LTA0LTI5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAorICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBBZGQgY29u
dGV4dCBtZW51IHN1cHBvcnQgZm9yIFdlYmtpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU0ODI3CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTog
QWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpj
cmVhdGVDb250ZXh0TWVudVByb3h5KTogQ3JlYXRlIGEgY29udGV4dAorICAgICAgICBtZW51IHBy
b3h5LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoK
KyAgICAgICAgKGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQpOiBGdW5jdGlvbiBjb3BpZWQgZnJv
bSB3ZWJraXQxIHRvCisgICAgICAgIGNvbnZlcnQgYSBwb2ludCBpbiB3aWRnZXQgY29vcmRpbmF0
ZXMgdG8gZ2xvYmFsIGNvb3JkaW5hdGVzLgorICAgICAgICAocG9wdXBNZW51UG9zaXRpb25GdW5j
dGlvbik6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVNob3dDb250ZXh0TWVudSk6IFNob3cg
dGhlIGdpdmVuIGNvbnRleHQgbWVudSBhdAorICAgICAgICB0aGUgZ2l2ZW4gcG9zaXRpb24uCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6Omd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0Ojpjb250ZXh0TWVudUl0ZW1BY3RpdmF0ZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6OmdldEFjdGlvbkZvcldlYkNvbnRleHRNZW51SXRlbSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvbnRleHRNZW51UHJveHlHdGs6OmNyZWF0ZUd0a01lbnUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpoaWRlQ29udGV4dE1lbnUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpXZWJDb250ZXh0TWVudVByb3h5R3Rr
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eUd0azo6fldlYkNvbnRleHRN
ZW51UHJveHlHdGspOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94
eUd0ay5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUuaC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQ
cm94eUd0azo6Y3JlYXRlKToKKworMjAxMS0wNC0yOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IGEgY3Jhc2ggYWZ0
ZXIgcjg1MjE0LgogCiAgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2UuY3BwOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRN
ZW51R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0ay5j
cHAKaW5kZXggYjM0NjMxZC4uMDM2YWFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ29udGV4dE1lbnVHdGsuY3BwCkBAIC00OSw2ICs0OSw4IEBAIHZvaWQgQ29udGV4dE1l
bnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogdm9pZCBDb250ZXh0TWVudTo6
c2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQogewog
ICAgIEFTU0VSVChtZW51KTsKKyAgICBpZiAobV9wbGF0Zm9ybURlc2NyaXB0aW9uID09IG1lbnUp
CisgICAgICAgIHJldHVybjsKICAgICBpZiAobV9wbGF0Zm9ybURlc2NyaXB0aW9uKQogICAgICAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVChtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsK
IApAQCAtNjgsMTEgKzcwLDIyIEBAIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51
OjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpCiAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwog
fQogCi1WZWN0b3I8Q29udGV4dE1lbnVJdGVtPiBjb250ZXh0TWVudUl0ZW1WZWN0b3IoY29uc3Qg
UGxhdGZvcm1NZW51RGVzY3JpcHRpb24pCitWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiBjb250ZXh0
TWVudUl0ZW1WZWN0b3IoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotCiAgICAgVmVjdG9yPENvbnRleHRNZW51SXRlbT4gbWVudUl0
ZW1WZWN0b3I7CisKKyAgICBHTGlzdCogY2hpbGRyZW4gPSBndGtfY29udGFpbmVyX2dldF9jaGls
ZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKTsKKyAgICBpbnQgaXRlbUNvdW50ID0gZ19saXN0X2xl
bmd0aChjaGlsZHJlbik7CisgICAgbWVudUl0ZW1WZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KGl0ZW1D
b3VudCk7CisKKyAgICBmb3IgKEdMaXN0KiBpdGVtID0gY2hpbGRyZW47IGl0ZW07IGl0ZW0gPSBn
X2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHN0YXRpY19j
YXN0PEd0a1dpZGdldCo+KGl0ZW0tPmRhdGEpOworICAgICAgICBpZiAoIUdUS19JU19NRU5VX0lU
RU0od2lkZ2V0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtZW51SXRlbVZlY3Rv
ci5hcHBlbmQoQ29udGV4dE1lbnVJdGVtKEdUS19NRU5VX0lURU0od2lkZ2V0KSkpOworICAgIH0K
KyAgICBnX2xpc3RfZnJlZShjaGlsZHJlbik7CisKICAgICByZXR1cm4gbWVudUl0ZW1WZWN0b3I7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVu
dUl0ZW1HdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRl
bUd0ay5jcHAKaW5kZXggYmRkMzk2Mi4uNWYwMjYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAKQEAgLTIwNSw3ICsyMDUsNyBA
QCB2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0QWN0aW9uKENvbnRleHRNZW51QWN0aW9uIGFjdGlv
bikKIFN0cmluZyBDb250ZXh0TWVudUl0ZW06OnRpdGxlKCkgY29uc3QKIHsKICAgICBHdGtBY3Rp
b24qIGFjdGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9hY3Rpb24oR1RLX0FDVElW
QVRBQkxFKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOwotICAgIHJldHVybiBhY3Rpb24gPyBTdHJp
bmcoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uKSkgOiBTdHJpbmcoKTsKKyAgICByZXR1cm4g
YWN0aW9uID8gU3RyaW5nOjpmcm9tVVRGOChndGtfYWN0aW9uX2dldF9sYWJlbChhY3Rpb24pKSA6
IFN0cmluZygpOwogfQogCiB2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VGl0bGUoY29uc3QgU3Ry
aW5nJiB0aXRsZSkKQEAgLTIzNSwxNiArMjM1LDE2IEBAIHZvaWQgQ29udGV4dE1lbnVJdGVtOjpz
ZXRDaGVja2VkKGJvb2wgc2hvdWxkQ2hlY2spCiAKIGJvb2wgQ29udGV4dE1lbnVJdGVtOjpjaGVj
a2VkKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHdpdGggV2ViS2l0MiBDb250
ZXh0TWVudSBjaGFuZ2VzLgotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgR3RrQWN0aW9uKiBh
Y3Rpb24gPSBndGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19BQ1RJVkFUQUJM
RShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKKyAgICBpZiAoYWN0aW9uICYmIEdUS19JU19UT0dH
TEVfQUNUSU9OKGFjdGlvbikpCisgICAgICAgIHJldHVybiBndGtfdG9nZ2xlX2FjdGlvbl9nZXRf
YWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogYm9vbCBDb250ZXh0TWVudUl0ZW06OmVuYWJsZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgd2l0aCBXZWJLaXQyIENvbnRleHRNZW51IGNoYW5nZXMuCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBn
dGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19BQ1RJVkFUQUJMRShtX3BsYXRm
b3JtRGVzY3JpcHRpb24pKTsKKyAgICByZXR1cm4gYWN0aW9uID8gZ3RrX2FjdGlvbl9nZXRfc2Vu
c2l0aXZlKGFjdGlvbikgOiBmYWxzZTsKIH0KIAogdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldEVu
YWJsZWQoYm9vbCBzaG91bGRFbmFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGQxMzYwYzQu
LjQyODc4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0zODAsNiArMzgwLDggQEAgbGlid2Vi
a2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5P
Ul9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0NodW5rZWRV
cGRhdGVEcmF3aW5nQXJlYVByb3h5R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViQ29udGV4dEd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29u
dGV4dE1lbnVQcm94eUd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
Q29udGV4dE1lbnVQcm94eUd0ay5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYkluc3BlY3Rvckd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViUGFnZVByb3h5R3RrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggN2ZlZmI0NC4uMTE4ZDI1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBs
LmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKLSNp
bmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5LmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQ
cm94eUd0ay5oIgogI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIldlYktp
dFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgpAQCAtNDMy
LDEwICs0MzIsOSBAQCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1w
bDo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5KgogICAgIHJldHVybiAwOwogfQog
Ci1QYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVD
b250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopCitQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51
UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94
eSogcGFnZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIHJl
dHVybiBXZWJDb250ZXh0TWVudVByb3h5R3RrOjpjcmVhdGUobV92aWV3V2lkZ2V0LCBwYWdlKTsK
IH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZp
bmRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggYWVkYmNkNy4uNDc5
NzkwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcApAQCAtNTEsNiArNTEsNyBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZSB7CiAgICAgZ2Jvb2xlYW4gaXNQYWdlQWN0aXZlOwogICAgIEd0a0lNQ29u
dGV4dCogaW1Db250ZXh0OwogICAgIEd0a0NsaWNrQ291bnRlciBjbGlja0NvdW50ZXI7CisgICAg
SW50UG9pbnQgbGFzdFBvcHVwUG9zaXRpb247CiB9OwogCiBHX0RFRklORV9UWVBFKFdlYktpdFdl
YlZpZXdCYXNlLCB3ZWJraXRfd2ViX3ZpZXdfYmFzZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQpAQCAt
MzI1LDMgKzMyNiw0MiBAQCBXZWJQYWdlUHJveHkqIHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShX
ZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiB7CiAgICAgcmV0dXJuIHdlYmtp
dFdlYlZpZXdCYXNlLT5wcml2LT5wYWdlLmdldCgpOwogfQorCitzdGF0aWMgSW50UG9pbnQgZ2xv
YmFsUG9pbnRGb3JDbGllbnRQb2ludChHZGtXaW5kb3cqIHdpbmRvdywgY29uc3QgSW50UG9pbnQm
IGNsaWVudFBvaW50KQoreworICAgIGludCB4LCB5OworICAgIGdka193aW5kb3dfZ2V0X29yaWdp
bih3aW5kb3csICZ4LCAmeSk7CisgICAgcmV0dXJuIGNsaWVudFBvaW50ICsgSW50U2l6ZSh4LCB5
KTsKK30KKworc3RhdGljIHZvaWQgcG9wdXBNZW51UG9zaXRpb25GdW5jdGlvbihHdGtNZW51KiBt
ZW51LCBnaW50KiB4LCBnaW50KiB5LCBnYm9vbGVhbiogcHVzaEluLCBncG9pbnRlciB1c2VyRGF0
YSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogdmlldyA9IFdFQktJVF9XRUJfVklFV19CQVNF
KHVzZXJEYXRhKTsKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB2aWV3LT5w
cml2OworICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKEdUS19X
SURHRVQodmlldykpOworICAgIEd0a1JlcXVpc2l0aW9uIG1lbnVTaXplOworCisjaWZkZWYgR1RL
X0FQSV9WRVJTSU9OXzIKKyAgICBndGtfd2lkZ2V0X3NpemVfcmVxdWVzdChHVEtfV0lER0VUKG1l
bnUpLCAmbWVudVNpemUpOworI2Vsc2UKKyAgICBndGtfd2lkZ2V0X2dldF9wcmVmZXJyZWRfc2l6
ZShHVEtfV0lER0VUKG1lbnUpLCAmbWVudVNpemUsIE5VTEwpOworI2VuZGlmCisKKyAgICAqeCA9
IHByaXYtPmxhc3RQb3B1cFBvc2l0aW9uLngoKTsKKyAgICBpZiAoKCp4ICsgbWVudVNpemUud2lk
dGgpID49IGdka19zY3JlZW5fZ2V0X3dpZHRoKHNjcmVlbikpCisgICAgICAgICp4IC09IG1lbnVT
aXplLndpZHRoOworCisgICAgKnkgPSBwcml2LT5sYXN0UG9wdXBQb3NpdGlvbi55KCk7CisgICAg
aWYgKCgqeSArIG1lbnVTaXplLmhlaWdodCkgPj0gZ2RrX3NjcmVlbl9nZXRfaGVpZ2h0KHNjcmVl
bikpCisgICAgICAgICp5IC09IG1lbnVTaXplLmhlaWdodDsKKworICAgICpwdXNoSW4gPSBGQUxT
RTsKK30KKwordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNob3dDb250ZXh0TWVudShXZWJLaXRXZWJW
aWV3QmFzZSogd2ViVmlld0Jhc2UsIEd0a01lbnUqIG1lbnUsIGNvbnN0IEludFBvaW50JiBwb3Np
dGlvbikKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFz
ZS0+cHJpdjsKKyAgICBwcml2LT5sYXN0UG9wdXBQb3NpdGlvbiA9IGdsb2JhbFBvaW50Rm9yQ2xp
ZW50UG9pbnQoZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQod2ViVmlld0Jhc2UpKSwg
cG9zaXRpb24pOworCisgICAgZ3RrX21lbnVfcG9wdXAobWVudSwgMCwgMCwgJnBvcHVwTWVudVBv
c2l0aW9uRnVuY3Rpb24sIHdlYlZpZXdCYXNlLCAzLCBndGtfZ2V0X2N1cnJlbnRfZXZlbnRfdGlt
ZSgpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5kZXggM2QwZWQ3NC4uOThlZmFmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgKQEAgLTQxLDYgKzQxLDggQEAgR3RrSU1Db250ZXh0KiB3ZWJr
aXRXZWJWaWV3QmFzZUdldElNQ29udGV4dChXZWJLaXRXZWJWaWV3QmFzZSopOwogCiBXZWJQYWdl
UHJveHkqIHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXZWJLaXRXZWJWaWV3QmFzZSopOwogCit2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2hvd0NvbnRleHRNZW51KFdlYktpdFdlYlZpZXdCYXNlKiwg
R3RrTWVudSosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisKIEdfRU5EX0RFQ0xTCiAKICNl
bmRpZiAvLyBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRlZTUwMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKQEAg
LTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5
R3RrLmgiCisKKyNpbmNsdWRlICJHT3duUHRyLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNp
bmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnRleHRNZW51QWN0aW9uSWQgPSAid2Via2l0LWNvbnRleHQtbWVudSI7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgY2hhciogZ3RrU3RvY2tJREZyb21Db250ZXh0
TWVudUFjdGlvbihjb25zdCBXZWJDb3JlOjpDb250ZXh0TWVudUFjdGlvbiYgYWN0aW9uKQorewor
ICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1U
YWdDb3B5TGlua1RvQ2xpcGJvYXJkOgorICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVt
VGFnQ29weUltYWdlVG9DbGlwYm9hcmQ6CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0
ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQ6CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0
TWVudUl0ZW1UYWdDb3B5OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0NPUFk7CisgICAgY2Fz
ZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgorICAgIGNh
c2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAg
Y2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKKyAg
ICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93Ogor
ICAgICAgICByZXR1cm4gR1RLX1NUT0NLX09QRU47CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NL
X1NBVkU7CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2s6CisgICAg
ICAgIHJldHVybiBHVEtfU1RPQ0tfR09fQkFDSzsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRN
ZW51SXRlbVRhZ0dvRm9yd2FyZDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19HT19GT1JXQVJE
OworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnU3RvcDoKKyAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19TVE9QOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFn
UmVsb2FkOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1JFRlJFU0g7CisgICAgY2FzZSBXZWJD
b3JlOjpDb250ZXh0TWVudUl0ZW1UYWdDdXQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfQ1VU
OworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnUGFzdGU6CisgICAgICAgIHJl
dHVybiBHVEtfU1RPQ0tfUEFTVEU7CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1U
YWdEZWxldGU6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfREVMRVRFOworICAgIGNhc2UgV2Vi
Q29yZTo6Q29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsOgorICAgICAgICByZXR1cm4gR1RLX1NU
T0NLX1NFTEVDVF9BTEw7CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdTcGVs
bGluZ0d1ZXNzOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRN
ZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX05POwor
ICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZzoKKyAgICAg
ICAgcmV0dXJuIEdUS19TVE9DS19PSzsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRl
bVRhZ090aGVyOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX01JU1NJTkdfSU1BR0U7CisgICAg
Y2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoKKyAgICAg
ICAgcmV0dXJuIEdUS19TVE9DS19GSU5EOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJ
dGVtVGFnU2VhcmNoV2ViOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0ZJTkQ7CisgICAgY2Fz
ZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdPcGVuV2l0aERlZmF1bHRBcHBsaWNhdGlvbjoK
KyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PUEVOOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4
dE1lbnVJdGVtUERGWm9vbUluOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1pPT01fSU47Cisg
ICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1QREZab29tT3V0OgorICAgICAgICByZXR1
cm4gR1RLX1NUT0NLX1pPT01fT1VUOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVt
UERGQXV0b1NpemU6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfWk9PTV9GSVQ7CisgICAgY2Fz
ZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1QREZOZXh0UGFnZToKKyAgICAgICAgcmV0dXJuIEdU
S19TVE9DS19HT19GT1JXQVJEOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtUERG
UHJldmlvdXNQYWdlOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0JBQ0s7CisgICAgLy8g
TmV3IHRhZ3MsIG5vdCBwYXJ0IG9mIEFQSQorICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJ
dGVtVGFnT3Blbkxpbms6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT1BFTjsKKyAgICBjYXNl
IFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmc6CisgICAgICAgIHJldHVy
biBHVEtfU1RPQ0tfU1BFTExfQ0hFQ0s7CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0
ZW1UYWdGb250TWVudToKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfRk9OVDsKKyAg
ICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKKyAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19TRUxFQ1RfRk9OVDsKKyAgICBjYXNlIFdlYkNvcmU6OkNvbnRleHRNZW51
SXRlbVRhZ0JvbGQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfQk9MRDsKKyAgICBjYXNlIFdl
YkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYzoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19JVEFMSUM7CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6
CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfVU5ERVJMSU5FOworICAgIGNhc2UgV2ViQ29yZTo6
Q29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9yczoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19T
RUxFQ1RfQ09MT1I7CisgICAgY2FzZSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVN
ZWRpYUNvbnRyb2xzOgorICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnVG9nZ2xl
TWVkaWFMb29wOgorICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdl
VXJsVG9DbGlwYm9hcmQ6CisgICAgICAgIC8vIE5vIGljb24gZm9yIHRoaXMuCisgICAgICAgIHJl
dHVybiAwOworICAgIGNhc2UgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1
bGxzY3JlZW46CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfRlVMTFNDUkVFTjsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbnRleHRN
ZW51SXRlbUFjdGl2YXRlZENhbGxiYWNrKEd0a0FjdGlvbiogYWN0aW9uLCBXZWJQYWdlUHJveHkq
IHBhZ2UpCit7CisgICAgZ2Jvb2xlYW4gaXNUb2dnbGUgPSBHVEtfSVNfVE9HR0xFX0FDVElPTihh
Y3Rpb24pOworICAgIFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YSBpdGVtKGlzVG9nZ2xl
ID8gV2ViQ29yZTo6Q2hlY2thYmxlQWN0aW9uVHlwZSA6IFdlYkNvcmU6OkFjdGlvblR5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6Q29udGV4dE1lbnVBY3Rpb24+KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShH
X09CSkVDVChhY3Rpb24pLCBjb250ZXh0TWVudUFjdGlvbklkKSkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbiksIGd0
a19hY3Rpb25fZ2V0X3NlbnNpdGl2ZShhY3Rpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzVG9nZ2xlID8gZ3RrX3RvZ2dsZV9hY3Rpb25fZ2V0X2FjdGl2ZShH
VEtfVE9HR0xFX0FDVElPTihhY3Rpb24pKSA6IGZhbHNlKTsKKyAgICBwYWdlLT5jb250ZXh0TWVu
dUl0ZW1TZWxlY3RlZChpdGVtKTsKK30KKworc3RhdGljIEdSZWZQdHI8R3RrQWN0aW9uPiBnZXRB
Y3Rpb25Gb3JXZWJDb250ZXh0TWVudUl0ZW0oY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYg
aXRlbSkKK3sKKyAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IDA7CisgICAgR093blB0cjxjaGFyPiBh
Y3Rpb25OYW1lKGdfc3RyZHVwX3ByaW50ZigiY29udGV4dC1tZW51LWFjdGlvbi0lZCIsIGl0ZW0u
YWN0aW9uKCkpKTsKKworICAgIGlmIChpdGVtLnR5cGUoKSA9PSBXZWJDb3JlOjpDaGVja2FibGVB
Y3Rpb25UeXBlKSB7CisgICAgICAgIGFjdGlvbiA9IEdUS19BQ1RJT04oZ3RrX3RvZ2dsZV9hY3Rp
b25fbmV3KGFjdGlvbk5hbWUuZ2V0KCksIGl0ZW0udGl0bGUoKS51dGY4KCkuZGF0YSgpLCAwLCBn
dGtTdG9ja0lERnJvbUNvbnRleHRNZW51QWN0aW9uKGl0ZW0uYWN0aW9uKCkpKSk7CisgICAgICAg
IGd0a190b2dnbGVfYWN0aW9uX3NldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSwg
aXRlbS5jaGVja2VkKCkpOworICAgIH0gZWxzZQorICAgICAgICBhY3Rpb24gPSBndGtfYWN0aW9u
X25ldyhhY3Rpb25OYW1lLmdldCgpLCBpdGVtLnRpdGxlKCkudXRmOCgpLmRhdGEoKSwgMCwgZ3Rr
U3RvY2tJREZyb21Db250ZXh0TWVudUFjdGlvbihpdGVtLmFjdGlvbigpKSk7CisKKyAgICBndGtf
YWN0aW9uX3NldF9zZW5zaXRpdmUoYWN0aW9uLCBpdGVtLmVuYWJsZWQoKSk7CisgICAgZ19vYmpl
Y3Rfc2V0X2RhdGEoR19PQkpFQ1QoYWN0aW9uKSwgY29udGV4dE1lbnVBY3Rpb25JZCwgR0lOVF9U
T19QT0lOVEVSKGl0ZW0uYWN0aW9uKCkpKTsKKworICAgIHJldHVybiBhZG9wdEdSZWYoYWN0aW9u
KTsKK30KKworR3RrTWVudSogV2ViQ29udGV4dE1lbnVQcm94eUd0azo6Y3JlYXRlR3RrTWVudShj
b25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQoreworICAgIEd0a01l
bnUqIG1lbnUgPSBHVEtfTUVOVShndGtfbWVudV9uZXcoKSk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IFdlYkNvbnRleHRN
ZW51SXRlbURhdGEmIGl0ZW0gPSBpdGVtcy5hdChpKTsKKyAgICAgICAgR3RrV2lkZ2V0KiBtZW51
SXRlbTsKKworICAgICAgICBpZiAoaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6U2VwYXJhdG9yVHlw
ZSkKKyAgICAgICAgICAgIG1lbnVJdGVtID0gZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3KCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9
IGdldEFjdGlvbkZvcldlYkNvbnRleHRNZW51SXRlbShpdGVtKTsKKyAgICAgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QoYWN0aW9uLmdldCgpLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKGNvbnRleHRN
ZW51SXRlbUFjdGl2YXRlZENhbGxiYWNrKSwgbV9wYWdlKTsKKworICAgICAgICAgICAgbWVudUl0
ZW0gPSBndGtfYWN0aW9uX2NyZWF0ZV9tZW51X2l0ZW0oYWN0aW9uLmdldCgpKTsKKworICAgICAg
ICAgICAgaWYgKGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OlN1Ym1lbnVUeXBlKSB7CisgICAgICAg
ICAgICAgICAgR3RrTWVudSogc3ViTWVudSA9IGNyZWF0ZUd0a01lbnUoaXRlbS5zdWJtZW51KCkp
OworICAgICAgICAgICAgICAgIGd0a19tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoR1RLX01FTlVfSVRF
TShtZW51SXRlbSksIEdUS19XSURHRVQoc3ViTWVudSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1lbnUp
LCBtZW51SXRlbSk7CisgICAgfQorCisgICAgcmV0dXJuIG1lbnU7Cit9CisKK3ZvaWQgV2ViQ29u
dGV4dE1lbnVQcm94eUd0azo6c2hvd0NvbnRleHRNZW51KGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVtcykK
K3sKKyAgICBpZiAoaXRlbXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtN
ZW51KiBtZW51ID0gY3JlYXRlR3RrTWVudShpdGVtcyk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VT
aG93Q29udGV4dE1lbnUoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSwgbWVudSwgcG9z
aXRpb24pOworfQorCit2b2lkIFdlYkNvbnRleHRNZW51UHJveHlHdGs6OmhpZGVDb250ZXh0TWVu
dSgpCit7Cit9CisKK1dlYkNvbnRleHRNZW51UHJveHlHdGs6OldlYkNvbnRleHRNZW51UHJveHlH
dGsoR3RrV2lkZ2V0KiB3ZWJWaWV3LCBXZWJQYWdlUHJveHkqIHBhZ2UpCisgICAgOiBtX3dlYlZp
ZXcod2ViVmlldykKKyAgICAsIG1fcGFnZShwYWdlKQoreworfQorCitXZWJDb250ZXh0TWVudVBy
b3h5R3RrOjp+V2ViQ29udGV4dE1lbnVQcm94eUd0aygpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250
ZXh0TWVudVByb3h5R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRl
eHRNZW51UHJveHlHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Qw
ZGIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJD
b250ZXh0TWVudVByb3h5R3RrLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJDb250ZXh0TWVudVByb3h5
R3RrX2gKKyNkZWZpbmUgV2ViQ29udGV4dE1lbnVQcm94eUd0a19oCisKKyNpbmNsdWRlICJXZWJD
b250ZXh0TWVudVByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJDb250
ZXh0TWVudUl0ZW1EYXRhOworY2xhc3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBXZWJDb250ZXh0
TWVudVByb3h5R3RrIDogcHVibGljIFdlYkNvbnRleHRNZW51UHJveHkgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHlHdGs+IGNyZWF0ZShHdGtXaWRn
ZXQqIHdlYlZpZXcsIFdlYlBhZ2VQcm94eSogcGFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViQ29udGV4dE1lbnVQcm94eUd0ayh3ZWJWaWV3LCBwYWdlKSk7CisgICAg
fQorICAgIH5XZWJDb250ZXh0TWVudVByb3h5R3RrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hv
d0NvbnRleHRNZW51KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgVmVjdG9yPFdlYkNv
bnRleHRNZW51SXRlbURhdGE+Jik7CisgICAgdmlydHVhbCB2b2lkIGhpZGVDb250ZXh0TWVudSgp
OworCitwcml2YXRlOgorICAgIFdlYkNvbnRleHRNZW51UHJveHlHdGsoR3RrV2lkZ2V0KiwgV2Vi
UGFnZVByb3h5Kik7CisgICAgR3RrTWVudSogY3JlYXRlR3RrTWVudShjb25zdCBWZWN0b3I8V2Vi
Q29udGV4dE1lbnVJdGVtRGF0YT4mKTsKKworICAgIEd0a1dpZGdldCogbV93ZWJWaWV3OworICAg
IFdlYlBhZ2VQcm94eSogbV9wYWdlOworfTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFdlYkNvbnRleHRNZW51UHJveHlHdGtfaAo=
</data>
<flag name="review"
          id="84522"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92211</attachid>
            <date>2011-05-04 03:45:31 -0700</date>
            <delta_ts>2011-06-10 16:22:10 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-context-menu4.diff</filename>
            <type>text/plain</type>
            <size>23872</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiOTFiMmI4Li44NjA1Mzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTEtMDUtMDQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IEFkZCBjb250ZXh0IG1lbnUgc3VwcG9ydCBmb3IgV2Via2l0MgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ4MjcKKworICAgICAgICAqIHBsYXRmb3Jt
L0NvbnRleHRNZW51SXRlbS5oOiBBZGQgZ3RrQWN0aW9uKCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3RrL0NvbnRleHRNZW51R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpD
b250ZXh0TWVudSk6IEltcGxlbWVudCBjb25zdHJ1Y3RvciB0aGF0CisgICAgICAgIHJlY2VpdmVz
IGEgcGxhdGZvcm0gbWVudS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpzZXRQbGF0
Zm9ybURlc2NyaXB0aW9uKTogTWFrZSBzdXJlIHdlIGRvbid0CisgICAgICAgIGRlc3Ryb3kgdGhl
IG1lbnUgaWYgdGhlIG5ldyBjb250ZXh0IG1lbnUgaXMgdGhlIGN1cnJlbnQgb25lLgorICAgICAg
ICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVmVjdG9yKTogSW1wbGVtZW50IHRoaXMgbWV0aG9k
IHRvIHJldHVybgorICAgICAgICB0aGUgbGlzdCBvZiBtZW51IGl0ZW1zIGluIHRoZSBnaXZlbiBj
b250ZXh0IG1lbnUsIHJlcXVpcmVkIGJ5IFdlYktpdDIuCisgICAgICAgIChXZWJDb3JlOjpwbGF0
Zm9ybU1lbnVEZXNjcmlwdGlvbik6IEltcGxlbWVudCB0aGlzIG1ldGhvZCB0bworICAgICAgICBy
ZXR1cm4gYSBwbGF0Zm9ybSBtZW51IGZvciB0aGUgZ2l2ZW4gbWVudSBpdGVtcy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbik6IEhlbHBlciBmdW5jdGlvbiB0bwor
ICAgICAgICBjcmVhdGUgYSBwbGF0Zm9ybSBjb250ZXh0IG1lbnUgaXRlbS4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKTogVXNlCisgICAgICAgIGNy
ZWF0ZVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbigpLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dE1lbnVJdGVtOjp0aXRsZSk6IENvbnZlcnQgdGhlIHRpdGxlIGZyb20gVVRGLTguCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW06OnNldFRpdGxlKTogVXNlIGd0a0FjdGlvbigp
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtOjpzZXRTdWJNZW51KTogSW1wbGVt
ZW50IHNldFN1Yk1lbnUoKQorICAgICAgICB0aGF0IHJlY2VpdmVzIGEgbGlzdCBvZiBpdGVtcy4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbTo6c2V0Q2hlY2tlZCk6IFVzZSBndGtB
Y3Rpb24oKS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbTo6Y2hlY2tlZCk6IElt
cGxlbWVudCB0aGlzLCByZXF1aXJlZCBieSBXZWJLaXQyLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dE1lbnVJdGVtOjplbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
TWVudUl0ZW06OnNldEVuYWJsZWQpOiBVc2UgZ3RrQWN0aW9uKCkuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudUl0ZW06Omd0a0FjdGlvbik6IFJldHVybiB0aGUgR3RrQWN0aW9uCisgICAg
ICAgIGFzc29jaWF0ZWQgdG8gdGhlIGNvbnRleHQgbWVudSBpdGVtLgorCiAyMDExLTA1LTA0ICBZ
dXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQuIEJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRl
eHRNZW51SXRlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmgK
aW5kZXggNDZhNjk4Ny4uN2IzM2QwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ29udGV4dE1lbnVJdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4
dE1lbnVJdGVtLmgKQEAgLTQzLDYgKzQzLDcgQEAgY2xhc3MgTlNNZW51SXRlbTsKIHR5cGVkZWYg
c3RydWN0IHRhZ01FTlVJVEVNSU5GT1cgTUVOVUlURU1JTkZPOwogI2VsaWYgUExBVEZPUk0oR1RL
KQogdHlwZWRlZiBzdHJ1Y3QgX0d0a01lbnVJdGVtIEd0a01lbnVJdGVtOwordHlwZWRlZiBzdHJ1
Y3QgX0d0a0FjdGlvbiBHdGtBY3Rpb247CiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxR
QWN0aW9uPgogI2VsaWYgUExBVEZPUk0oV1gpCkBAIC0yNDgsNiArMjQ5LDEwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldFN1Yk1lbnUoQ29udGV4dE1lbnUqKTsKIAor
I2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgR3RrQWN0aW9uKiBndGtBY3Rpb24oKSBjb25zdDsK
KyNlbmRpZgorCiAjaWYgVVNFKENST1NTX1BMQVRGT1JNX0NPTlRFWFRfTUVOVVMpCiAjaWYgUExB
VEZPUk0oV0lOKQogICAgICAgICB0eXBlZGVmIE1FTlVJVEVNSU5GTyBOYXRpdmVJdGVtOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0ay5jcHAKaW5kZXggYjM0
NjMxZC4uNTkyODUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Nv
bnRleHRNZW51R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4
dE1lbnVHdGsuY3BwCkBAIC0zMCw2ICszMCwxMSBAQCBDb250ZXh0TWVudTo6Q29udGV4dE1lbnUo
KQogICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IEdUS19NRU5VKGd0a19tZW51X25ldygpKTsK
IH0KIAorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0
aW9uIG1lbnUpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKK3sKK30KKwogQ29u
dGV4dE1lbnU6On5Db250ZXh0TWVudSgpCiB7CiAgICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlv
bikKQEAgLTQ5LDYgKzU0LDggQEAgdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShDb250ZXh0
TWVudUl0ZW0mIGl0ZW0pCiB2b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURlc2NyaXB0aW9u
KFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCiB7CiAgICAgQVNTRVJUKG1lbnUpOworICAg
IGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24gPT0gbWVudSkKKyAgICAgICAgcmV0dXJuOwogICAg
IGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24pCiAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShH
VEtfV0lER0VUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOwogCkBAIC02OCwxMiArNzUsMzQgQEAg
UGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnJlbGVhc2VQbGF0Zm9ybURlc2Ny
aXB0aW9uKCkKICAgICByZXR1cm4gZGVzY3JpcHRpb247CiB9CiAKLVZlY3RvcjxDb250ZXh0TWVu
dUl0ZW0+IGNvbnRleHRNZW51SXRlbVZlY3Rvcihjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
bikKK1ZlY3RvcjxDb250ZXh0TWVudUl0ZW0+IGNvbnRleHRNZW51SXRlbVZlY3Rvcihjb25zdCBQ
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0K
ICAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiBtZW51SXRlbVZlY3RvcjsKKworICAgIEdMaXN0
KiBjaGlsZHJlbiA9IGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVu
dSkpOworICAgIGludCBpdGVtQ291bnQgPSBnX2xpc3RfbGVuZ3RoKGNoaWxkcmVuKTsKKyAgICBt
ZW51SXRlbVZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkoaXRlbUNvdW50KTsKKworICAgIGZvciAoR0xp
c3QqIGl0ZW0gPSBjaGlsZHJlbjsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0pKSB7Cisg
ICAgICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0Kj4oaXRlbS0+
ZGF0YSk7CisgICAgICAgIGlmICghR1RLX0lTX01FTlVfSVRFTSh3aWRnZXQpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIG1lbnVJdGVtVmVjdG9yLmFwcGVuZChDb250ZXh0TWVudUl0
ZW0oR1RLX01FTlVfSVRFTSh3aWRnZXQpKSk7CisgICAgfQorICAgIGdfbGlzdF9mcmVlKGNoaWxk
cmVuKTsKKwogICAgIHJldHVybiBtZW51SXRlbVZlY3RvcjsKIH0KIAorUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gcGxhdGZvcm1NZW51RGVzY3JpcHRpb24oVmVjdG9yPENvbnRleHRNZW51SXRlbT4m
IHN1Yk1lbnVJdGVtcykKK3sKKyAgICBHdGtNZW51KiBtZW51ID0gR1RLX01FTlUoZ3RrX21lbnVf
bmV3KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3ViTWVudUl0ZW1zLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIEd0a1dpZGdldCogcGxhdGZvcm1JdGVtID0gR1RLX1dJREdFVChzdWJN
ZW51SXRlbXNbaV0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7CisgICAgICAgIGd0a19t
ZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtZW51KSwgcGxhdGZvcm1JdGVtKTsKKyAg
ICAgICAgZ3RrX3dpZGdldF9zaG93KHBsYXRmb3JtSXRlbSk7CisgICAgfQorICAgIHJldHVybiBt
ZW51OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29u
dGV4dE1lbnVJdGVtR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0
TWVudUl0ZW1HdGsuY3BwCmluZGV4IGJkZDM5NjI3Li4wMDdlODYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcApAQCAtMTE3LDUx
ICsxMTcsNTggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVB
Y3Rpb24oY29uc3QgQ29udGV4dE1lbnVBY3Rpb24mIGFjdGkKICAgICB9CiB9CiAKLS8vIEV4dHJh
Y3QgdGhlIEFjdGlvblR5cGUgZnJvbSB0aGUgbWVudSBpdGVtCi1Db250ZXh0TWVudUl0ZW06OkNv
bnRleHRNZW51SXRlbShQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gaXRlbSkKLSAgICA6IG1f
cGxhdGZvcm1EZXNjcmlwdGlvbihpdGVtKQotewotfQotCi1Db250ZXh0TWVudUl0ZW06OkNvbnRl
eHRNZW51SXRlbShDb250ZXh0TWVudSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
Q29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBl
LCBDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIENvbnRleHRN
ZW51KiBzdWJNZW51KQorc3RhdGljIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBjcmVhdGVQ
bGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250
ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hYmxlZCwg
Ym9vbCBjaGVja2VkKQogewotICAgIGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUpIHsKLSAgICAg
ICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlVfSVRFTShndGtfc2VwYXJhdG9yX21l
bnVfaXRlbV9uZXcoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKHR5cGUgPT0g
U2VwYXJhdG9yVHlwZSkKKyAgICAgICAgcmV0dXJuIEdUS19NRU5VX0lURU0oZ3RrX3NlcGFyYXRv
cl9tZW51X2l0ZW1fbmV3KCkpOwogCiAgICAgR093blB0cjxjaGFyPiBhY3Rpb25OYW1lKGdfc3Ry
ZHVwX3ByaW50ZigiY29udGV4dC1tZW51LWFjdGlvbi0lZCIsIGFjdGlvbikpOwogICAgIEd0a0Fj
dGlvbiogcGxhdGZvcm1BY3Rpb24gPSAwOwogCi0gICAgaWYgKHR5cGUgPT0gQ2hlY2thYmxlQWN0
aW9uVHlwZSkKKyAgICBpZiAodHlwZSA9PSBDaGVja2FibGVBY3Rpb25UeXBlKSB7CiAgICAgICAg
IHBsYXRmb3JtQWN0aW9uID0gR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoYWN0aW9u
TmFtZS5nZXQoKSwgdGl0bGUudXRmOCgpLmRhdGEoKSwgMCwgZ3RrU3RvY2tJREZyb21Db250ZXh0
TWVudUFjdGlvbihhY3Rpb24pKSk7Ci0gICAgZWxzZQorICAgICAgICBndGtfdG9nZ2xlX2FjdGlv
bl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKHBsYXRmb3JtQWN0aW9uKSwgY2hlY2tlZCk7
CisgICAgfSBlbHNlCiAgICAgICAgIHBsYXRmb3JtQWN0aW9uID0gZ3RrX2FjdGlvbl9uZXcoYWN0
aW9uTmFtZS5nZXQoKSwgdGl0bGUudXRmOCgpLmRhdGEoKSwgMCwgZ3RrU3RvY2tJREZyb21Db250
ZXh0TWVudUFjdGlvbihhY3Rpb24pKTsKKyAgICBndGtfYWN0aW9uX3NldF9zZW5zaXRpdmUocGxh
dGZvcm1BY3Rpb24sIGVuYWJsZWQpOwogCi0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gR1RL
X01FTlVfSVRFTShndGtfYWN0aW9uX2NyZWF0ZV9tZW51X2l0ZW0ocGxhdGZvcm1BY3Rpb24pKTsK
KyAgICBHdGtNZW51SXRlbSogaXRlbSA9IEdUS19NRU5VX0lURU0oZ3RrX2FjdGlvbl9jcmVhdGVf
bWVudV9pdGVtKHBsYXRmb3JtQWN0aW9uKSk7CiAgICAgZ19vYmplY3RfdW5yZWYocGxhdGZvcm1B
Y3Rpb24pOwogCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QobV9wbGF0Zm9ybURlc2Ny
aXB0aW9uKSwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04sIEdJTlRfVE9fUE9JTlRFUihhY3Rp
b24pKTsKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChpdGVtKSwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT04sIEdJTlRfVE9fUE9JTlRFUihhY3Rpb24pKTsKIAorICAgIHJldHVybiBp
dGVtOworfQorCisvLyBFeHRyYWN0IHRoZSBBY3Rpb25UeXBlIGZyb20gdGhlIG1lbnUgaXRlbQor
Q29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0
aW9uIGl0ZW0pCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24oaXRlbSkKK3sKK30KKworQ29u
dGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnUqIHN1Yk1lbnUpCit7Cisg
ICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlVfSVRFTShndGtfbWVudV9pdGVtX25l
dygpKTsKKyAgICBpZiAoc3ViTWVudSkKKyAgICAgICAgc2V0U3ViTWVudShzdWJNZW51KTsKK30K
KworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSB0
eXBlLCBDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIENvbnRl
eHRNZW51KiBzdWJNZW51KQoreworICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGNyZWF0ZVBs
YXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbih0eXBlLCBhY3Rpb24sIHRpdGxlLCB0cnVlLCBmYWxz
ZSk7CiAgICAgaWYgKHN1Yk1lbnUpCiAgICAgICAgIHNldFN1Yk1lbnUoc3ViTWVudSk7CiB9CiAK
LUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51SXRlbVR5cGUsIENv
bnRleHRNZW51QWN0aW9uLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKQorQ29udGV4dE1lbnVJ
dGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250ZXh0TWVu
dUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hYmxlZCwgYm9vbCBj
aGVja2VkKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgd2l0aCBXZWJLaXQyIENvbnRleHRN
ZW51IGNoYW5nZXMuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3BsYXRmb3JtRGVzY3Jp
cHRpb24gPSBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24odHlwZSwgYWN0aW9uLCB0
aXRsZSwgZW5hYmxlZCwgY2hlY2tlZCk7CiB9CiAKLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1l
bnVJdGVtKENvbnRleHRNZW51QWN0aW9uLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sLCBWZWN0
b3I8Q29udGV4dE1lbnVJdGVtPiYpCitDb250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShD
b250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hYmxl
ZCwgYm9vbCBjaGVja2VkLCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgc3ViTWVudUl0ZW1zKQog
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgd2l0aCBXZWJLaXQyIENvbnRleHRNZW51IGNoYW5n
ZXMuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBj
cmVhdGVQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24oU3VibWVudVR5cGUsIGFjdGlvbiwgdGl0
bGUsIGVuYWJsZWQsIGNoZWNrZWQpOworICAgIHNldFN1Yk1lbnUoc3ViTWVudUl0ZW1zKTsKIH0K
IAogQ29udGV4dE1lbnVJdGVtOjp+Q29udGV4dE1lbnVJdGVtKCkKQEAgLTIwNCwxMyArMjExLDEz
IEBAIHZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRBY3Rpb24oQ29udGV4dE1lbnVBY3Rpb24gYWN0
aW9uKQogCiBTdHJpbmcgQ29udGV4dE1lbnVJdGVtOjp0aXRsZSgpIGNvbnN0CiB7Ci0gICAgR3Rr
QWN0aW9uKiBhY3Rpb24gPSBndGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19B
Q1RJVkFUQUJMRShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKLSAgICByZXR1cm4gYWN0aW9uID8g
U3RyaW5nKGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbikpIDogU3RyaW5nKCk7CisgICAgR3Rr
QWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICByZXR1cm4gYWN0aW9uID8gU3RyaW5n
Ojpmcm9tVVRGOChndGtfYWN0aW9uX2dldF9sYWJlbChhY3Rpb24pKSA6IFN0cmluZygpOwogfQog
CiB2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsK
LSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9hY3Rp
b24oR1RLX0FDVElWQVRBQkxFKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOworICAgIEd0a0FjdGlv
biogYWN0aW9uID0gZ3RrQWN0aW9uKCk7CiAgICAgaWYgKGFjdGlvbikKICAgICAgICAgZ3RrX2Fj
dGlvbl9zZXRfbGFiZWwoYWN0aW9uLCB0aXRsZS51dGY4KCkuZGF0YSgpKTsKIH0KQEAgLTIyMywz
NSArMjMwLDQ2IEBAIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51SXRlbTo6cGxh
dGZvcm1TdWJNZW51KCkgY29uc3QKIAogdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUo
Q29udGV4dE1lbnUqIG1lbnUpCiB7Ci0gICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudShtX3Bs
YXRmb3JtRGVzY3JpcHRpb24sIEdUS19XSURHRVQobWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigp
KSk7CisgICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudShtX3BsYXRmb3JtRGVzY3JpcHRpb24s
IEdUS19XSURHRVQobWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSkpOworfQorCit2
b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYg
c3ViTWVudUl0ZW1zKQoreworICAgIENvbnRleHRNZW51IG1lbnUocGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24oc3ViTWVudUl0ZW1zKSk7CisgICAgc2V0U3ViTWVudSgmbWVudSk7CiB9CiAKIHZvaWQg
Q29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wgc2hvdWxkQ2hlY2spCiB7Ci0gICAgR3Rr
QWN0aW9uKiBhY3Rpb24gPSBndGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19B
Q1RJVkFUQUJMRShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKKyAgICBHdGtBY3Rpb24qIGFjdGlv
biA9IGd0a0FjdGlvbigpOwogICAgIGlmIChhY3Rpb24gJiYgR1RLX0lTX1RPR0dMRV9BQ1RJT04o
YWN0aW9uKSkKICAgICAgICAgZ3RrX3RvZ2dsZV9hY3Rpb25fc2V0X2FjdGl2ZShHVEtfVE9HR0xF
X0FDVElPTihhY3Rpb24pLCBzaG91bGRDaGVjayk7CiB9CiAKIGJvb2wgQ29udGV4dE1lbnVJdGVt
OjpjaGVja2VkKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHdpdGggV2ViS2l0
MiBDb250ZXh0TWVudSBjaGFuZ2VzLgotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgR3RrQWN0
aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICBpZiAoYWN0aW9uICYmIEdUS19JU19UT0dH
TEVfQUNUSU9OKGFjdGlvbikpCisgICAgICAgIHJldHVybiBndGtfdG9nZ2xlX2FjdGlvbl9nZXRf
YWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogYm9vbCBDb250ZXh0TWVudUl0ZW06OmVuYWJsZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgd2l0aCBXZWJLaXQyIENvbnRleHRNZW51IGNoYW5nZXMuCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBn
dGtBY3Rpb24oKTsKKyAgICByZXR1cm4gYWN0aW9uID8gZ3RrX2FjdGlvbl9nZXRfc2Vuc2l0aXZl
KGFjdGlvbikgOiBmYWxzZTsKIH0KIAogdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldEVuYWJsZWQo
Ym9vbCBzaG91bGRFbmFibGUpCiB7Ci0gICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtfYWN0aXZh
dGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19BQ1RJVkFUQUJMRShtX3BsYXRmb3JtRGVzY3Jp
cHRpb24pKTsKKyAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOwogICAgIGlmIChh
Y3Rpb24pCiAgICAgICAgIGd0a19hY3Rpb25fc2V0X3NlbnNpdGl2ZShhY3Rpb24sIHNob3VsZEVu
YWJsZSk7CiB9CiAKK0d0a0FjdGlvbiogQ29udGV4dE1lbnVJdGVtOjpndGtBY3Rpb24oKSBjb25z
dAoreworICAgIHJldHVybiBndGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19B
Q1RJVkFUQUJMRShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IGFiM2Y0NzQuLmRmYTNlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0wNS0w
NCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gQWRkIGNvbnRleHQg
bWVudSBzdXBwb3J0IGZvciBXZWJraXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NDgyNworCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBu
ZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFn
ZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRl
Q29udGV4dE1lbnVQcm94eSk6IENyZWF0ZSBhIGNvbnRleHQKKyAgICAgICAgbWVudSBwcm94eS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAg
ICAgIChnbG9iYWxQb2ludEZvckNsaWVudFBvaW50KTogRnVuY3Rpb24gY29waWVkIGZyb20gd2Vi
a2l0MSB0bworICAgICAgICBjb252ZXJ0IGEgcG9pbnQgaW4gd2lkZ2V0IGNvb3JkaW5hdGVzIHRv
IGdsb2JhbCBjb29yZGluYXRlcy4KKyAgICAgICAgKHBvcHVwTWVudVBvc2l0aW9uRnVuY3Rpb24p
OgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTaG93Q29udGV4dE1lbnUpOiBTaG93IHRoZSBn
aXZlbiBjb250ZXh0IG1lbnUgYXQKKyAgICAgICAgdGhlIGdpdmVuIHBvc2l0aW9uLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0Ojpjb250ZXh0TWVudUl0ZW1BY3RpdmF0ZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlHdGs6OmNyZWF0ZUd0a01lbnUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpzaG93Q29udGV4dE1lbnUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpoaWRlQ29udGV4dE1lbnUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpXZWJDb250ZXh0TWVudVBy
b3h5R3RrKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eUd0azo6fldlYkNv
bnRleHRNZW51UHJveHlHdGspOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1l
bnVQcm94eUd0ay5oOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpj
cmVhdGUpOgorCiAyMDExLTA1LTAzICBQcmF0aWsgU29sYW5raSAgPHBzb2xhbmtpQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0KaW5kZXggM2Y2Y2ZjZC4uNTRlYTE0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTM4MCw2
ICszODAsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BX
RUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlHdGsuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcCBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcCBcCisJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmggXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUd0ay5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yR3RrLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCA3ZmVm
YjQ0Li4xMThkMjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvUGFnZUNsaWVudEltcGwuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiTmF0aXZl
V2ViTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
V2ViQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJDb250ZXh0TWVudVByb3h5R3RrLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5Lmgi
CiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCkBAIC00MzIsMTAgKzQzMiw5IEBAIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJv
eHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gUGFnZUNs
aWVudEltcGw6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5KikKK1Bhc3NSZWZQ
dHI8V2ViQ29udGV4dE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZUNvbnRleHRNZW51
UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIFdlYkNvbnRleHRNZW51UHJveHlHdGs6OmNyZWF0ZShtX3Zp
ZXdXaWRnZXQsIHBhZ2UpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRGaW5kSW5kaWNh
dG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApp
bmRleCA5M2EzMjA1Li40MGNkZDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBAIC01MSw2ICs1MSw3IEBAIHN0
cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBnYm9vbGVhbiBpc1BhZ2VBY3Rp
dmU7CiAgICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQ7CiAgICAgR3RrQ2xpY2tDb3VudGVyIGNs
aWNrQ291bnRlcjsKKyAgICBJbnRQb2ludCBsYXN0UG9wdXBQb3NpdGlvbjsKIH07CiAKIEdfREVG
SU5FX1RZUEUoV2ViS2l0V2ViVmlld0Jhc2UsIHdlYmtpdF93ZWJfdmlld19iYXNlLCBHVEtfVFlQ
RV9DT05UQUlORVIpCkBAIC0zMjUsMyArMzI2LDQyIEBAIFdlYlBhZ2VQcm94eSogd2Via2l0V2Vi
Vmlld0Jhc2VHZXRQYWdlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIHsK
ICAgICByZXR1cm4gd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS5nZXQoKTsKIH0K
Kworc3RhdGljIEludFBvaW50IGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQoR2RrV2luZG93KiB3
aW5kb3csIGNvbnN0IEludFBvaW50JiBjbGllbnRQb2ludCkKK3sKKyAgICBpbnQgeCwgeTsKKyAg
ICBnZGtfd2luZG93X2dldF9vcmlnaW4od2luZG93LCAmeCwgJnkpOworICAgIHJldHVybiBjbGll
bnRQb2ludCArIEludFNpemUoeCwgeSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvcHVwTWVudVBvc2l0
aW9uRnVuY3Rpb24oR3RrTWVudSogbWVudSwgZ2ludCogeCwgZ2ludCogeSwgZ2Jvb2xlYW4qIHB1
c2hJbiwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh1c2VyRGF0YSk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlKiBwcml2ID0gdmlldy0+cHJpdjsKKyAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGd0a193
aWRnZXRfZ2V0X3NjcmVlbihHVEtfV0lER0VUKHZpZXcpKTsKKyAgICBHdGtSZXF1aXNpdGlvbiBt
ZW51U2l6ZTsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgZ3RrX3dpZGdldF9zaXpl
X3JlcXVlc3QoR1RLX1dJREdFVChtZW51KSwgJm1lbnVTaXplKTsKKyNlbHNlCisgICAgZ3RrX3dp
ZGdldF9nZXRfcHJlZmVycmVkX3NpemUoR1RLX1dJREdFVChtZW51KSwgJm1lbnVTaXplLCAwKTsK
KyNlbmRpZgorCisgICAgKnggPSBwcml2LT5sYXN0UG9wdXBQb3NpdGlvbi54KCk7CisgICAgaWYg
KCgqeCArIG1lbnVTaXplLndpZHRoKSA+PSBnZGtfc2NyZWVuX2dldF93aWR0aChzY3JlZW4pKQor
ICAgICAgICAqeCAtPSBtZW51U2l6ZS53aWR0aDsKKworICAgICp5ID0gcHJpdi0+bGFzdFBvcHVw
UG9zaXRpb24ueSgpOworICAgIGlmICgoKnkgKyBtZW51U2l6ZS5oZWlnaHQpID49IGdka19zY3Jl
ZW5fZ2V0X2hlaWdodChzY3JlZW4pKQorICAgICAgICAqeSAtPSBtZW51U2l6ZS5oZWlnaHQ7CisK
KyAgICAqcHVzaEluID0gRkFMU0U7Cit9CisKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VTaG93Q29u
dGV4dE1lbnUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBHdGtNZW51KiBtZW51LCBj
b25zdCBJbnRQb2ludCYgcG9zaXRpb24pCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
KiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgcHJpdi0+bGFzdFBvcHVwUG9zaXRpb24g
PSBnbG9iYWxQb2ludEZvckNsaWVudFBvaW50KGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lE
R0VUKHdlYlZpZXdCYXNlKSksIHBvc2l0aW9uKTsKKworICAgIGd0a19tZW51X3BvcHVwKG1lbnUs
IDAsIDAsICZwb3B1cE1lbnVQb3NpdGlvbkZ1bmN0aW9uLCB3ZWJWaWV3QmFzZSwgMywgZ3RrX2dl
dF9jdXJyZW50X2V2ZW50X3RpbWUoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCmluZGV4IDNk
MGVkNzQuLjk4ZWZhZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCkBAIC00MSw2ICs0MSw4IEBA
IEd0a0lNQ29udGV4dCogd2Via2l0V2ViVmlld0Jhc2VHZXRJTUNvbnRleHQoV2ViS2l0V2ViVmll
d0Jhc2UqKTsKIAogV2ViUGFnZVByb3h5KiB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV2ViS2l0
V2ViVmlld0Jhc2UqKTsKIAordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNob3dDb250ZXh0TWVudShX
ZWJLaXRXZWJWaWV3QmFzZSosIEd0a01lbnUqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwor
CiBHX0VORF9ERUNMUwogCiAjZW5kaWYgLy8gV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94
eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJv
eHlHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZmFiY2MKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRN
ZW51UHJveHlHdGsuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJDb250ZXh0TWVudVByb3h5R3RrLmgiCisKKyNpbmNsdWRlICJHT3duUHRyLmgiCisjaW5jbHVk
ZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmgiCisjaW5j
bHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudS5oPgorI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnRleHRNZW51QWN0aW9uSWQgPSAid2Via2l0LWNvbnRleHQtbWVudS1hY3Rpb24iOworCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2
b2lkIGNvbnRleHRNZW51SXRlbUFjdGl2YXRlZENhbGxiYWNrKEd0a0FjdGlvbiogYWN0aW9uLCBX
ZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgZ2Jvb2xlYW4gaXNUb2dnbGUgPSBHVEtfSVNfVE9H
R0xFX0FDVElPTihhY3Rpb24pOworICAgIFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YSBp
dGVtKGlzVG9nZ2xlID8gV2ViQ29yZTo6Q2hlY2thYmxlQWN0aW9uVHlwZSA6IFdlYkNvcmU6OkFj
dGlvblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6Q29udGV4dE1lbnVBY3Rpb24+KEdQT0lOVEVSX1RPX0lOVChnX29iamVj
dF9nZXRfZGF0YShHX09CSkVDVChhY3Rpb24pLCBjb250ZXh0TWVudUFjdGlvbklkKSkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a19hY3Rpb25fZ2V0X2xhYmVs
KGFjdGlvbiksIGd0a19hY3Rpb25fZ2V0X3NlbnNpdGl2ZShhY3Rpb24pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVG9nZ2xlID8gZ3RrX3RvZ2dsZV9hY3Rpb25f
Z2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rpb24pKSA6IGZhbHNlKTsKKyAgICBwYWdl
LT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZChpdGVtKTsKK30KKworR3RrTWVudSogV2ViQ29udGV4
dE1lbnVQcm94eUd0azo6Y3JlYXRlR3RrTWVudShjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJ
dGVtRGF0YT4mIGl0ZW1zKQoreworICAgIENvbnRleHRNZW51IG1lbnU7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBXZWJDb250
ZXh0TWVudUl0ZW1EYXRhJiBpdGVtID0gaXRlbXMuYXQoaSk7CisgICAgICAgIENvbnRleHRNZW51
SXRlbSBtZW51SXRlbShpdGVtLnR5cGUoKSwgaXRlbS5hY3Rpb24oKSwgaXRlbS50aXRsZSgpLCBp
dGVtLmVuYWJsZWQoKSwgaXRlbS5jaGVja2VkKCkpOworICAgICAgICBHdGtBY3Rpb24qIGFjdGlv
biA9IG1lbnVJdGVtLmd0a0FjdGlvbigpOworCisgICAgICAgIGlmIChhY3Rpb24pIHsKKyAgICAg
ICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGFjdGlvbiksIGNvbnRleHRNZW51QWN0
aW9uSWQsIEdJTlRfVE9fUE9JTlRFUihpdGVtLmFjdGlvbigpKSk7CisgICAgICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KGFjdGlvbiwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUl0
ZW1BY3RpdmF0ZWRDYWxsYmFjayksIG1fcGFnZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6U3VibWVudVR5cGUpIHsKKyAgICAgICAgICAgIENvbnRl
eHRNZW51IHN1Yk1lbnUoY3JlYXRlR3RrTWVudShpdGVtLnN1Ym1lbnUoKSkpOworICAgICAgICAg
ICAgbWVudUl0ZW0uc2V0U3ViTWVudSgmc3ViTWVudSk7CisgICAgICAgIH0KKyAgICAgICAgbWVu
dS5hcHBlbmRJdGVtKG1lbnVJdGVtKTsKKyAgICB9CisgICAgcmV0dXJuIG1lbnUucmVsZWFzZVBs
YXRmb3JtRGVzY3JpcHRpb24oKTsKK30KKwordm9pZCBXZWJDb250ZXh0TWVudVByb3h5R3RrOjpz
aG93Q29udGV4dE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBW
ZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQoreworICAgIGlmIChpdGVtcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYmtpdFdlYlZpZXdCYXNlU2hvd0Nv
bnRleHRNZW51KFdFQktJVF9XRUJfVklFV19CQVNFKG1fd2ViVmlldyksIGNyZWF0ZUd0a01lbnUo
aXRlbXMpLCBwb3NpdGlvbik7Cit9CisKK3ZvaWQgV2ViQ29udGV4dE1lbnVQcm94eUd0azo6aGlk
ZUNvbnRleHRNZW51KCkKK3sKK30KKworV2ViQ29udGV4dE1lbnVQcm94eUd0azo6V2ViQ29udGV4
dE1lbnVQcm94eUd0ayhHdGtXaWRnZXQqIHdlYlZpZXcsIFdlYlBhZ2VQcm94eSogcGFnZSkKKyAg
ICA6IG1fd2ViVmlldyh3ZWJWaWV3KQorICAgICwgbV9wYWdlKHBhZ2UpCit7Cit9CisKK1dlYkNv
bnRleHRNZW51UHJveHlHdGs6On5XZWJDb250ZXh0TWVudVByb3h5R3RrKCkKK3sKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjYzZDBkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuaApAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbnRl
eHRNZW51UHJveHlHdGtfaAorI2RlZmluZSBXZWJDb250ZXh0TWVudVByb3h5R3RrX2gKKworI2lu
Y2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYkNvbnRleHRNZW51SXRlbURhdGE7CitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNz
IFdlYkNvbnRleHRNZW51UHJveHlHdGsgOiBwdWJsaWMgV2ViQ29udGV4dE1lbnVQcm94eSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eUd0az4gY3Jl
YXRlKEd0a1dpZGdldCogd2ViVmlldywgV2ViUGFnZVByb3h5KiBwYWdlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDb250ZXh0TWVudVByb3h5R3RrKHdlYlZpZXcsIHBh
Z2UpKTsKKyAgICB9CisgICAgfldlYkNvbnRleHRNZW51UHJveHlHdGsoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBW
ZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZUNv
bnRleHRNZW51KCk7CisKK3ByaXZhdGU6CisgICAgV2ViQ29udGV4dE1lbnVQcm94eUd0ayhHdGtX
aWRnZXQqLCBXZWJQYWdlUHJveHkqKTsKKyAgICBHdGtNZW51KiBjcmVhdGVHdGtNZW51KGNvbnN0
IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYpOworCisgICAgR3RrV2lkZ2V0KiBtX3dl
YlZpZXc7CisgICAgV2ViUGFnZVByb3h5KiBtX3BhZ2U7Cit9OworCisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gV2ViQ29udGV4dE1lbnVQcm94eUd0a19oCg==
</data>
<flag name="review"
          id="85157"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>