<?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>61854</bug_id>
          
          <creation_ts>2011-06-01 04:09:16 -0700</creation_ts>
          <short_desc>[GTK] Implement popup menus in Webkit2</short_desc>
          <delta_ts>2011-06-02 11:01:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>eric</cc>
    
    <cc>mrobinson</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>413275</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-01 04:09:16 -0700</bug_when>
    <thetext>It&apos;s currently unimplemented for the GTK port causing a crash when clicking on a menu list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413278</commentid>
    <comment_count>1</comment_count>
      <attachid>95583</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-01 04:13:52 -0700</bug_when>
    <thetext>Created attachment 95583
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414027</commentid>
    <comment_count>2</comment_count>
      <attachid>95749</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-02 03:54:50 -0700</bug_when>
    <thetext>Created attachment 95749
New patch

Martin suggested that we could try to reuse the code from WebCore instead of copying it, so I have moved the common parts into a new class in Webcore that is used by both WebKit1 and WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414142</commentid>
    <comment_count>3</comment_count>
      <attachid>95749</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-02 08:30:27 -0700</bug_when>
    <thetext>Comment on attachment 95749
New patch

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

Nice work! This is just blocked on my understanding of the inner main loop, but in general, very nice patch.

&gt; Source/WebCore/platform/gtk/GtkPopupMenu.cpp:78
&gt; +    // The size calls are directly copied from gtkcombobox.c which is LGPL.

These few lines do not necessitate a licensing issue, in my opinion, so it&apos;s probably best to change this comment to something like &quot;This approach follows the one in gtkcombobox.c.&quot; If you believe the code segment is the kind that requires relying on the original files license, we are legally obligated to include the original author&apos;s copyright in the header.

&gt; Source/WebCore/platform/gtk/GtkPopupMenu.cpp:108
&gt; +        // Center vertically the empty popup in the combo box area

This comment should have a period at the end.

&gt; Source/WebCore/platform/gtk/PopupMenuGtk.cpp:73
&gt; +            GOwnPtr&lt;char&gt; actionName(g_strdup_printf(&quot;popup-menu-action-%d&quot;, i));
&gt; +            GRefPtr&lt;GtkAction&gt; action = adoptGRef(gtk_action_new(actionName.get(), client()-&gt;itemText(i).utf8().data(), 0, 0));
&gt; +            g_object_set_data(G_OBJECT(action.get()), &quot;popup-menu-action-index&quot;, GINT_TO_POINTER(i));
&gt; +            g_signal_connect(action.get(), &quot;activate&quot;, G_CALLBACK(menuItemActivated), this);
&gt; +            // FIXME: Apply the PopupMenuStyle from client()-&gt;itemStyle(i)
&gt; +            gtk_action_set_sensitive(action.get(), client()-&gt;itemIsEnabled(i));

I think that this should be spun off into a helper function. createGtkActionFromMenuItem or something like that.

&gt; Source/WebKit2/UIProcess/gtk/WebPopupMenuProxyGtk.cpp:71
&gt; +            GOwnPtr&lt;char&gt; actionName(g_strdup_printf(&quot;popup-menu-action-%d&quot;, i));
&gt; +            GRefPtr&lt;GtkAction&gt; action = adoptGRef(gtk_action_new(actionName.get(), items[i].m_text.utf8().data(), items[i].m_toolTip.utf8().data(), 0));
&gt; +            g_object_set_data(G_OBJECT(action.get()), &quot;popup-menu-action-index&quot;, GINT_TO_POINTER(i));
&gt; +            g_signal_connect(action.get(), &quot;activate&quot;, G_CALLBACK(menuItemActivated), this);
&gt; +            gtk_action_set_sensitive(action.get(), items[i].m_isEnabled);

I think I&apos;d like to see this split off into a helper function.

&gt; Source/WebKit2/UIProcess/gtk/WebPopupMenuProxyGtk.cpp:95
&gt; +    GDK_THREADS_LEAVE();
&gt; +    g_main_loop_run(m_runLoop);
&gt; +    GDK_THREADS_ENTER();
&gt; +
&gt; +    g_main_loop_unref(m_runLoop);
&gt; +    m_runLoop = 0;
&gt; +
&gt; +    g_signal_handler_disconnect(m_popup-&gt;platformMenu(), unmapHandler);
&gt; +

I&apos;m not sure I totally understand why the main loop must run here. Perhaps it could have a comment explaining the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414196</commentid>
    <comment_count>4</comment_count>
      <attachid>95749</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-02 09:39:22 -0700</bug_when>
    <thetext>Comment on attachment 95749
New patch

Carlos explained to me via jabber why there must be an inner main loop. r=me with the previously mentioned changes and a comment explaining the inner main loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414213</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-02 09:58:31 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 95749 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=95749&amp;action=review
&gt; 
&gt; Nice work! This is just blocked on my understanding of the inner main loop, but in general, very nice patch.
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/GtkPopupMenu.cpp:78
&gt; &gt; +    // The size calls are directly copied from gtkcombobox.c which is LGPL.
&gt; 
&gt; These few lines do not necessitate a licensing issue, in my opinion, so it&apos;s probably best to change this comment to something like &quot;This approach follows the one in gtkcombobox.c.&quot; If you believe the code segment is the kind that requires relying on the original files license, we are legally obligated to include the original author&apos;s copyright in the header.

that&apos;s copy-pasted from existing PopupMenuGtk.cpp, I&apos;ll change the comment anyway.

&gt; &gt; Source/WebCore/platform/gtk/GtkPopupMenu.cpp:108
&gt; &gt; +        // Center vertically the empty popup in the combo box area
&gt; 
&gt; This comment should have a period at the end.

Ditto.

&gt; &gt; Source/WebCore/platform/gtk/PopupMenuGtk.cpp:73
&gt; &gt; +            GOwnPtr&lt;char&gt; actionName(g_strdup_printf(&quot;popup-menu-action-%d&quot;, i));
&gt; &gt; +            GRefPtr&lt;GtkAction&gt; action = adoptGRef(gtk_action_new(actionName.get(), client()-&gt;itemText(i).utf8().data(), 0, 0));
&gt; &gt; +            g_object_set_data(G_OBJECT(action.get()), &quot;popup-menu-action-index&quot;, GINT_TO_POINTER(i));
&gt; &gt; +            g_signal_connect(action.get(), &quot;activate&quot;, G_CALLBACK(menuItemActivated), this);
&gt; &gt; +            // FIXME: Apply the PopupMenuStyle from client()-&gt;itemStyle(i)
&gt; &gt; +            gtk_action_set_sensitive(action.get(), client()-&gt;itemIsEnabled(i));
&gt; 
&gt; I think that this should be spun off into a helper function. createGtkActionFromMenuItem or something like that.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebPopupMenuProxyGtk.cpp:71
&gt; &gt; +            GOwnPtr&lt;char&gt; actionName(g_strdup_printf(&quot;popup-menu-action-%d&quot;, i));
&gt; &gt; +            GRefPtr&lt;GtkAction&gt; action = adoptGRef(gtk_action_new(actionName.get(), items[i].m_text.utf8().data(), items[i].m_toolTip.utf8().data(), 0));
&gt; &gt; +            g_object_set_data(G_OBJECT(action.get()), &quot;popup-menu-action-index&quot;, GINT_TO_POINTER(i));
&gt; &gt; +            g_signal_connect(action.get(), &quot;activate&quot;, G_CALLBACK(menuItemActivated), this);
&gt; &gt; +            gtk_action_set_sensitive(action.get(), items[i].m_isEnabled);
&gt; 
&gt; I think I&apos;d like to see this split off into a helper function.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebPopupMenuProxyGtk.cpp:95
&gt; &gt; +    GDK_THREADS_LEAVE();
&gt; &gt; +    g_main_loop_run(m_runLoop);
&gt; &gt; +    GDK_THREADS_ENTER();
&gt; &gt; +
&gt; &gt; +    g_main_loop_unref(m_runLoop);
&gt; &gt; +    m_runLoop = 0;
&gt; &gt; +
&gt; &gt; +    g_signal_handler_disconnect(m_popup-&gt;platformMenu(), unmapHandler);
&gt; &gt; +
&gt; 
&gt; I&apos;m not sure I totally understand why the main loop must run here. Perhaps it could have a comment explaining the issue.

Sure. Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414266</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-02 11:01:41 -0700</bug_when>
    <thetext>Committed r87930: &lt;http://trac.webkit.org/changeset/87930&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95583</attachid>
            <date>2011-06-01 04:13:52 -0700</date>
            <delta_ts>2011-06-02 03:54:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-popup-menu.diff</filename>
            <type>text/plain</type>
            <size>13392</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlY2ZmN2U2Li45ZDMxNTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTEtMDYtMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IEltcGxlbWVudCBwb3B1cCBtZW51cyBpbiBXZWJraXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTg1NAorCisgICAgICAgICogR05VbWFrZWZpbGUu
YW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6Y3JlYXRlUG9wdXBNZW51UHJveHkpOiBDcmVhdGUgYSBuZXcKKyAgICAgICAgV2ViUG9wdXBN
ZW51UHJveHkuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6V2ViUG9w
dXBNZW51UHJveHlHdGspOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6
fldlYlBvcHVwTWVudVByb3h5R3RrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJv
eHlHdGs6OnNob3dQb3B1cE1lbnUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94
eUd0azo6aGlkZVBvcHVwTWVudSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5
R3RrOjpzaHV0ZG93blJ1bkxvb3ApOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94
eUd0azo6bWVudVJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94
eUd0azo6bWVudVBvc2l0aW9uRnVuY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1l
bnVQcm94eUd0azo6bWVudUl0ZW1BY3RpdmF0ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1
cE1lbnVQcm94eUd0azo6bWVudVVubWFwcGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dl
YlBvcHVwTWVudVByb3h5R3RrLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1l
bnVQcm94eUd0azo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlH
dGs6OnNldEFjdGl2ZUl0ZW0pOgorCiAyMDExLTA1LTMxICBKZXIgTm9ibGUgIDxqZXIubm9ibGVA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5hbQppbmRleCBlNTI3MDlkLi4zOTg1ODJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAt
Mzk0LDYgKzM5NCw4IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lP
TkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5R3RrLmNwcCBcCiAJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmggXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViUHJlZmVyZW5jZXNHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNoZXJHdGsuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNw
cAppbmRleCAyYTFmMDNmLi5hZjU1NGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5j
bHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51
UHJveHlHdGsuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0yMDQsMTAgKzIwNSw5IEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6OmRpZE5vdEhhbmRsZVdoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVu
dCYpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQ
cm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSop
CitQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9w
dXBNZW51UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIFdlYlBvcHVwTWVudVByb3h5R3RrOjpjcmVhdGUo
bV92aWV3V2lkZ2V0LCBwYWdlKTsKIH0KIAogUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5
PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94
eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjI2N2RjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQ
cm94eUd0ay5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YlBvcHVwTWVudVByb3h5R3RrLmgiCisKKyNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50Lmgi
CisjaW5jbHVkZSAiV2ViUG9wdXBJdGVtLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9u
aW5nLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViUG9wdXBNZW51UHJveHlHdGs6Oldl
YlBvcHVwTWVudVByb3h5R3RrKEd0a1dpZGdldCogd2ViVmlldywgV2ViUG9wdXBNZW51UHJveHk6
OkNsaWVudCogY2xpZW50KQorICAgIDogV2ViUG9wdXBNZW51UHJveHkoY2xpZW50KQorICAgICwg
bV93ZWJWaWV3KHdlYlZpZXcpCisgICAgLCBtX2FjdGl2ZUl0ZW0oLTEpCisgICAgLCBtX3J1bkxv
b3AoMCkKK3sKK30KKworV2ViUG9wdXBNZW51UHJveHlHdGs6On5XZWJQb3B1cE1lbnVQcm94eUd0
aygpCit7CisgICAgaWYgKG1fcG9wdXApIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9tYXRjaGVkKG1fcG9wdXAuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAs
IDAsIDAsIHRoaXMpOworICAgICAgICBoaWRlUG9wdXBNZW51KCk7CisgICAgfQorfQorCit2b2lk
IFdlYlBvcHVwTWVudVByb3h5R3RrOjpzaG93UG9wdXBNZW51KGNvbnN0IEludFJlY3QmIHJlY3Qs
IFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiwgZG91YmxlIHNjYWxlRmFjdG9yLCBjb25zdCBW
ZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYg
ZGF0YSwgaW50MzJfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX3BvcHVwKQorICAgICAg
ICBndGtfY29udGFpbmVyX2ZvcmVhY2goR1RLX0NPTlRBSU5FUihtX3BvcHVwLmdldCgpKSwgcmVp
bnRlcnByZXRfY2FzdDxHdGtDYWxsYmFjaz4obWVudVJlbW92ZUl0ZW0pLCB0aGlzKTsKKyAgICBl
bHNlCisgICAgICAgIG1fcG9wdXAgPSBndGtfbWVudV9uZXcoKTsKKworICAgIC8vIFBvcHVsYXRl
IG1lbnUuCisgICAgaW50IHNpemUgPSBpdGVtcy5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgR3RrV2lkZ2V0KiBtZW51SXRlbTsKKworICAgICAg
ICBpZiAoaXRlbXNbaV0ubV90eXBlID09IFdlYlBvcHVwSXRlbTo6U2VwYXJhdG9yKQorICAgICAg
ICAgICAgbWVudUl0ZW0gPSBndGtfc2VwYXJhdG9yX21lbnVfaXRlbV9uZXcoKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IGFjdGlvbk5hbWUoZ19zdHJkdXBfcHJp
bnRmKCJwb3B1cC1tZW51LWFjdGlvbi0lZCIsIGkpKTsKKyAgICAgICAgICAgIEdSZWZQdHI8R3Rr
QWN0aW9uPiBhY3Rpb24gPSBhZG9wdEdSZWYoZ3RrX2FjdGlvbl9uZXcoYWN0aW9uTmFtZS5nZXQo
KSwgaXRlbXNbaV0ubV90ZXh0LnV0ZjgoKS5kYXRhKCksIGl0ZW1zW2ldLm1fdG9vbFRpcC51dGY4
KCkuZGF0YSgpLCAwKSk7CisgICAgICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChh
Y3Rpb24uZ2V0KCkpLCAicG9wdXAtbWVudS1hY3Rpb24taW5kZXgiLCBHSU5UX1RPX1BPSU5URVIo
aSkpOworICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24uZ2V0KCksICJhY3RpdmF0
ZSIsIEdfQ0FMTEJBQ0sobWVudUl0ZW1BY3RpdmF0ZWQpLCB0aGlzKTsKKyAgICAgICAgICAgIG1l
bnVJdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVtKGFjdGlvbi5nZXQoKSk7CisgICAg
ICAgICAgICBndGtfYWN0aW9uX3NldF9zZW5zaXRpdmUoYWN0aW9uLmdldCgpLCBpdGVtc1tpXS5t
X2lzRW5hYmxlZCk7CisgICAgICAgIH0KKworICAgICAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQo
R1RLX01FTlVfU0hFTEwobV9wb3B1cC5nZXQoKSksIG1lbnVJdGVtKTsKKyAgICAgICAgZ3RrX3dp
ZGdldF9zaG93KG1lbnVJdGVtKTsKKyAgICB9CisKKyAgICBndGtfbWVudV9zZXRfYWN0aXZlKEdU
S19NRU5VKG1fcG9wdXAuZ2V0KCkpLCBzZWxlY3RlZEluZGV4KTsKKworICAgIC8vIFBvcHVwIG1l
bnUgcG9zaXRpb24uCisgICAgaW50IHggPSAwOworICAgIGludCB5ID0gMDsKKyAgICBpZiAoR2Rr
V2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV93ZWJWaWV3KSkKKyAgICAg
ICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKHdpbmRvdywgJngsICZ5KTsKKyAgICBtX21lbnVQb3Np
dGlvbiA9IEludFBvaW50KHJlY3QueCgpICsgeCwgcmVjdC55KCkgKyB5ICsgcmVjdC5oZWlnaHQo
KSk7CisKKyAgICAvLyBUaGUgc2l6ZSBjYWxscyBhcmUgZGlyZWN0bHkgY29waWVkIGZyb20gZ3Rr
Y29tYm9ib3guYyB3aGljaCBpcyBMR1BMLgorICAgIEd0a1JlcXVpc2l0aW9uIHJlcXVpc2l0aW9u
OworICAgIGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdChtX3BvcHVwLmdldCgpLCAtMSwgLTEp
OworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgZ3RrX3dpZGdldF9zaXplX3JlcXVlc3Qo
bV9wb3B1cC5nZXQoKSwgJnJlcXVpc2l0aW9uKTsKKyNlbHNlCisgICAgZ3RrX3dpZGdldF9nZXRf
cHJlZmVycmVkX3NpemUobV9wb3B1cC5nZXQoKSwgJnJlcXVpc2l0aW9uLCAwKTsKKyNlbmRpZgor
CisgICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KG1fcG9wdXAuZ2V0KCksIHN0ZDo6bWF4
KHJlY3Qud2lkdGgoKSwgcmVxdWlzaXRpb24ud2lkdGgpLCAtMSk7CisKKyAgICBHTGlzdCogY2hp
bGRyZW4gPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1fcG9wdXAu
Z2V0KCkpKTsKKyAgICBHTGlzdCogcCA9IGNoaWxkcmVuOworICAgIGlmIChzaXplKSB7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSA+
IHNlbGVjdGVkSW5kZXgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIEd0
a1dpZGdldCogaXRlbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3RrV2lkZ2V0Kj4ocC0+ZGF0YSk7Cisg
ICAgICAgICAgICBHdGtSZXF1aXNpdGlvbiBpdGVtUmVxdWlzaXRpb247CisjaWZkZWYgR1RLX0FQ
SV9WRVJTSU9OXzIKKyAgICAgICAgICAgIGd0a193aWRnZXRfZ2V0X2NoaWxkX3JlcXVpc2l0aW9u
KGl0ZW0sICZpdGVtUmVxdWlzaXRpb24pOworI2Vsc2UKKyAgICAgICAgICAgIGd0a193aWRnZXRf
Z2V0X3ByZWZlcnJlZF9zaXplKGl0ZW0sICZpdGVtUmVxdWlzaXRpb24sIDApOworI2VuZGlmCisg
ICAgICAgICAgICBtX21lbnVQb3NpdGlvbi5zZXRZKG1fbWVudVBvc2l0aW9uLnkoKSAtIGl0ZW1S
ZXF1aXNpdGlvbi5oZWlnaHQpOworCisgICAgICAgICAgICBwID0gZ19saXN0X25leHQocCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDZW50ZXIgdmVydGljYWxseSB0aGUg
ZW1wdHkgcG9wdXAgaW4gdGhlIGNvbWJvIGJveCBhcmVhCisgICAgICAgIG1fbWVudVBvc2l0aW9u
LnNldFkobV9tZW51UG9zaXRpb24ueSgpIC0gcmVjdC5oZWlnaHQoKSAvIDIpOworICAgIH0KKyAg
ICBnX2xpc3RfZnJlZShjaGlsZHJlbik7CisKKyAgICBndWxvbmcgdW5tYXBIYW5kbGVyID0gZ19z
aWduYWxfY29ubmVjdChtX3BvcHVwLmdldCgpLCAidW5tYXAiLCBHX0NBTExCQUNLKG1lbnVVbm1h
cHBlZCksIHRoaXMpOworCisgICAgY29uc3QgR2RrRXZlbnQqIGV2ZW50OworICAgIGd1aW50IGJ1
dHRvbjsKKyAgICBndWludDMyIGFjdGl2YXRlVGltZTsKKyAgICBpZiAobV9jbGllbnQtPmN1cnJl
bnRseVByb2Nlc3NlZE1vdXNlRG93bkV2ZW50KCkpIHsKKyAgICAgICAgZXZlbnQgPSBtX2NsaWVu
dC0+Y3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQoKS0+bmF0aXZlRXZlbnQoKTsKKyAg
ICAgICAgYnV0dG9uID0gZXZlbnQtPmJ1dHRvbi5idXR0b247CisgICAgICAgIGFjdGl2YXRlVGlt
ZSA9IGdka19ldmVudF9nZXRfdGltZShldmVudCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXZl
bnQgPSAwOworICAgICAgICBidXR0b24gPSAxOworICAgICAgICBhY3RpdmF0ZVRpbWUgPSBHREtf
Q1VSUkVOVF9USU1FOworICAgIH0KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgZ3Rr
X21lbnVfcG9wdXAoR1RLX01FTlUobV9wb3B1cC5nZXQoKSksIDAsIDAsIHJlaW50ZXJwcmV0X2Nh
c3Q8R3RrTWVudVBvc2l0aW9uRnVuYz4obWVudVBvc2l0aW9uRnVuY3Rpb24pLCB0aGlzLCBidXR0
b24sIGFjdGl2YXRlVGltZSk7CisjZWxzZQorICAgIGd0a19tZW51X3BvcHVwX2Zvcl9kZXZpY2Uo
R1RLX01FTlUobV9wb3B1cC5nZXQoKSksIGV2ZW50ID8gZ2RrX2V2ZW50X2dldF9kZXZpY2UoZXZl
bnQpIDogMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8R3RrTWVudVBvc2l0aW9uRnVuYz4obWVudVBvc2l0aW9uRnVuY3Rpb24pLCB0aGlzLCAw
LCBidXR0b24sIGFjdGl2YXRlVGltZSk7CisjZW5kaWYKKworICAgIG1fcnVuTG9vcCA9IGdfbWFp
bl9sb29wX25ldygwLCBGQUxTRSk7CisKKyAgICBHREtfVEhSRUFEU19MRUFWRSgpOworICAgIGdf
bWFpbl9sb29wX3J1bihtX3J1bkxvb3ApOworICAgIEdES19USFJFQURTX0VOVEVSKCk7CisKKyAg
ICBnX21haW5fbG9vcF91bnJlZihtX3J1bkxvb3ApOworICAgIG1fcnVuTG9vcCA9IDA7CisKKyAg
ICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV9wb3B1cC5nZXQoKSwgdW5tYXBIYW5kbGVy
KTsKKworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50
LT52YWx1ZUNoYW5nZWRGb3JQb3B1cE1lbnUodGhpcywgbV9hY3RpdmVJdGVtKTsKK30KKwordm9p
ZCBXZWJQb3B1cE1lbnVQcm94eUd0azo6aGlkZVBvcHVwTWVudSgpCit7CisgICAgZ3RrX21lbnVf
cG9wZG93bihHVEtfTUVOVShtX3BvcHVwLmdldCgpKSk7Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51
UHJveHlHdGs6OnNodXRkb3duUnVuTG9vcCgpCit7CisgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1
bm5pbmcobV9ydW5Mb29wKSkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX3J1bkxvb3ApOwor
fQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5R3RrOjptZW51UmVtb3ZlSXRlbShHdGtXaWRnZXQq
IHdpZGdldCwgV2ViUG9wdXBNZW51UHJveHlHdGsqIHBvcHVwTWVudSkKK3sKKyAgICBBU1NFUlQo
cG9wdXBNZW51LT5tX3BvcHVwKTsKKyAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJ
TkVSKHBvcHVwTWVudS0+bV9wb3B1cC5nZXQoKSksIHdpZGdldCk7Cit9CisKK3ZvaWQgV2ViUG9w
dXBNZW51UHJveHlHdGs6Om1lbnVQb3NpdGlvbkZ1bmN0aW9uKEd0a01lbnUqLCBnaW50KiB4LCBn
aW50KiB5LCBnYm9vbGVhbiogcHVzaEluLCBXZWJQb3B1cE1lbnVQcm94eUd0ayogcG9wdXBNZW51
KQoreworICAgICp4ID0gcG9wdXBNZW51LT5tX21lbnVQb3NpdGlvbi54KCk7CisgICAgKnkgPSBw
b3B1cE1lbnUtPm1fbWVudVBvc2l0aW9uLnkoKTsKKyAgICAqcHVzaEluID0gdHJ1ZTsKK30KKwor
dm9pZCBXZWJQb3B1cE1lbnVQcm94eUd0azo6bWVudUl0ZW1BY3RpdmF0ZWQoR3RrQWN0aW9uKiBh
Y3Rpb24sIFdlYlBvcHVwTWVudVByb3h5R3RrKiBwb3B1cE1lbnUpCit7CisgICAgcG9wdXBNZW51
LT5zZXRBY3RpdmVJdGVtKEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVD
VChhY3Rpb24pLCAicG9wdXAtbWVudS1hY3Rpb24taW5kZXgiKSkpOworICAgIHBvcHVwTWVudS0+
c2h1dGRvd25SdW5Mb29wKCk7Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlHdGs6Om1lbnVV
bm1hcHBlZChHdGtXaWRnZXQqLCBXZWJQb3B1cE1lbnVQcm94eUd0ayogcG9wdXBNZW51KQorewor
ICAgIHBvcHVwTWVudS0+c2h1dGRvd25SdW5Mb29wKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1l
bnVQcm94eUd0ay5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQ
cm94eUd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NGYyODgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVu
dVByb3h5R3RrLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJQb3B1cE1lbnVQcm94eUd0a19oCisj
ZGVmaW5lIFdlYlBvcHVwTWVudVByb3h5R3RrX2gKKworI2luY2x1ZGUgIldlYlBvcHVwTWVudVBy
b3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HUmVmUHRyR3RrLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRSZWN0Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9HTWFpbkxvb3AgR01haW5Mb29wOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBXZWJQb3B1
cE1lbnVQcm94eUd0ayA6IHB1YmxpYyBXZWJQb3B1cE1lbnVQcm94eSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHlHdGs+IGNyZWF0ZShHdGtXaWRnZXQq
IHdlYlZpZXcsIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViUG9wdXBNZW51UHJveHlHdGsod2ViVmlldywgY2xp
ZW50KSk7CisgICAgfQorICAgIH5XZWJQb3B1cE1lbnVQcm94eUd0aygpOworCisgICAgdmlydHVh
bCB2b2lkIHNob3dQb3B1cE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6OlRl
eHREaXJlY3Rpb24sIGRvdWJsZSBzY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRl
bT4mLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgp
OworICAgIHZpcnR1YWwgdm9pZCBoaWRlUG9wdXBNZW51KCk7CisKK3ByaXZhdGU6CisgICAgV2Vi
UG9wdXBNZW51UHJveHlHdGsoR3RrV2lkZ2V0KiwgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudCop
OworICAgIHZvaWQgc2h1dGRvd25SdW5Mb29wKCk7CisgICAgdm9pZCBzZXRBY3RpdmVJdGVtKGlu
dCBhY3RpdmVJdGVtKSB7IG1fYWN0aXZlSXRlbSA9IGFjdGl2ZUl0ZW07IH0KKworICAgIHN0YXRp
YyB2b2lkIG1lbnVSZW1vdmVJdGVtKEd0a1dpZGdldCosIFdlYlBvcHVwTWVudVByb3h5R3RrKik7
CisgICAgc3RhdGljIHZvaWQgbWVudVBvc2l0aW9uRnVuY3Rpb24oR3RrTWVudSosIGdpbnQqLCBn
aW50KiwgZ2Jvb2xlYW4qLCBXZWJQb3B1cE1lbnVQcm94eUd0ayopOworICAgIHN0YXRpYyB2b2lk
IG1lbnVJdGVtQWN0aXZhdGVkKEd0a0FjdGlvbiosIFdlYlBvcHVwTWVudVByb3h5R3RrKik7Cisg
ICAgc3RhdGljIHZvaWQgbWVudVVubWFwcGVkKEd0a1dpZGdldCosIFdlYlBvcHVwTWVudVByb3h5
R3RrKik7CisKKyAgICBHdGtXaWRnZXQqIG1fd2ViVmlldzsKKyAgICBHUmVmUHRyPEd0a1dpZGdl
dD4gbV9wb3B1cDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX21lbnVQb3NpdGlvbjsKKyAgICBp
bnQgbV9hY3RpdmVJdGVtOworICAgIEdNYWluTG9vcCogbV9ydW5Mb29wOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKworI2VuZGlmIC8vIFdlYlBvcHVwTWVudVByb3h5R3RrX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95749</attachid>
            <date>2011-06-02 03:54:50 -0700</date>
            <delta_ts>2011-06-02 09:39:22 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-popup-menu2.diff</filename>
            <type>text/plain</type>
            <size>36455</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZTg2YWM5Li40NjFlOGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIg
QEAKKzIwMTEtMDYtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IEltcGxlbWVudCBwb3B1cCBtZW51cyBpbiBXZWJraXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTg1NAorCisgICAgICAgIE1vdmUgY29tbW9uIGNv
ZGUgaW50byBhIG5ldyBjbGFzcyB0byBiZSB1c2VkIGJ5IGJvdGggV2ViS2l0MSBhbmQKKyAgICAg
ICAgV2ViS2l0Mi4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZCBuZXcgZmls
ZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsu
Y3BwLgorICAgICAgICAoV2ViQ29yZTo6R3RrUG9wdXBNZW51OjpHdGtQb3B1cE1lbnUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3RrUG9wdXBNZW51Ojp+R3RrUG9wdXBNZW51KToKKyAgICAgICAgKFdl
YkNvcmU6Okd0a1BvcHVwTWVudTo6Y2xlYXIpOiBSZW1vdmUgYWxsIG1lbnUgaXRlbXMuCisgICAg
ICAgIChXZWJDb3JlOjpHdGtQb3B1cE1lbnU6OmFwcGVuZFNlcGFyYXRvcik6IEFkZCBhIG5ldyBz
ZXBhcmF0b3IKKyAgICAgICAgaXRlbSB0byB0aGUgbWVudS4KKyAgICAgICAgKFdlYkNvcmU6Okd0
a1BvcHVwTWVudTo6YXBwZW5kSXRlbSk6IEFkZCBhIG5ldyBpdGVtIHRvIHRoZSBtZW51IGZvcgor
ICAgICAgICB0aGUgZ2l2ZW4gYWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6R3RrUG9wdXBNZW51
Ojpwb3BVcCk6IFNob3cgdGhlIG1lbnUuCisgICAgICAgIChXZWJDb3JlOjpHdGtQb3B1cE1lbnU6
OnBvcERvd24pOiBIaWRlIHRoZSBtZW51LgorICAgICAgICAoV2ViQ29yZTo6R3RrUG9wdXBNZW51
OjptZW51UmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpHdGtQb3B1cE1lbnU6Om1lbnVQ
b3NpdGlvbkZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a1BvcHVwTWVudTo6cmVzZXRU
eXBlQWhlYWRGaW5kU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3RrUG9wdXBNZW51Ojp0eXBl
QWhlYWRGaW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a1BvcHVwTWVudTo6c2VsZWN0SXRlbUNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a1BvcHVwTWVudTo6a2V5UHJlc3NFdmVudENh
bGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51Lmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuaC4KKyAgICAgICAg
KFdlYkNvcmU6Okd0a1BvcHVwTWVudTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a1Bv
cHVwTWVudTo6cGxhdGZvcm1NZW51KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUG9wdXBNZW51
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudUd0azo6UG9wdXBNZW51R3RrKToK
KyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudUd0azo6flBvcHVwTWVudUd0ayk6CisgICAgICAg
IChXZWJDb3JlOjpQb3B1cE1lbnVHdGs6OnNob3cpOiBVc2UgR3RrUG9wdXBNZW51LgorICAgICAg
ICAoV2ViQ29yZTo6UG9wdXBNZW51R3RrOjpoaWRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cE1lbnVHdGs6Om1lbnVJdGVtQWN0aXZhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudUd0azo6bWVudVVubWFwcGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUG9wdXBN
ZW51R3RrLmg6CisKIDIwMTEtMDYtMDEgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAz
Yzg1MzNhLi41ZDljZTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDYtMDIg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBwb3B1
cCBtZW51cyBpbiBXZWJraXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MTg1NAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmls
ZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVu
dEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBN
ZW51UHJveHkpOiBDcmVhdGUgYSBuZXcKKyAgICAgICAgV2ViUG9wdXBNZW51UHJveHkuCisgICAg
ICAgICogVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6V2ViUG9wdXBNZW51UHJveHlHdGsp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6fldlYlBvcHVwTWVudVBy
b3h5R3RrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OnNob3dQb3B1
cE1lbnUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6aGlkZVBvcHVw
TWVudSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5R3RrOjpzaHV0ZG93blJ1
bkxvb3ApOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6bWVudUl0ZW1B
Y3RpdmF0ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6bWVudVVu
bWFwcGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmg6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUd0azo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OnNldEFjdGl2ZUl0ZW0pOgor
CiAyMDExLTA2LTAxICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5k
ZXggMjI4ZTg5NC4uMDQxODkyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0z
Nzk2LDYgKzM3OTYsOCBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9HdGtQbHVnaW5XaWRnZXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
UGx1Z2luV2lkZ2V0LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1l
bnUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMgXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kYTk5Mzk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAKQEAgLTAsMCArMSwyMzkgQEAKKy8qCisgKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBpbXBsZW1lbnRhdGlvbiBmb3IgPHNlbGVjdD4g
ZWxlbWVudHMgaW4gV2ViQ29yZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDEx
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3RrUG9wdXBN
ZW51LmgiCisKKyNpbmNsdWRlICJHT3duUHRyLmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5o
IgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IGdTZWFyY2hUaW1l
b3V0TXMgPSAxMDAwOworCitHdGtQb3B1cE1lbnU6Okd0a1BvcHVwTWVudSgpCisgICAgOiBtX3Bv
cHVwKGd0a19tZW51X25ldygpKQorICAgICwgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyKDAp
CisgICAgLCBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0oMCkKK3sKKyAgICBtX2tleVByZXNz
SGFuZGxlcklEID0gZ19zaWduYWxfY29ubmVjdChtX3BvcHVwLmdldCgpLCAia2V5LXByZXNzLWV2
ZW50IiwgR19DQUxMQkFDSyhHdGtQb3B1cE1lbnU6OmtleVByZXNzRXZlbnRDYWxsYmFjayksIHRo
aXMpOworfQorCitHdGtQb3B1cE1lbnU6On5HdGtQb3B1cE1lbnUoKQoreworICAgIGdfc2lnbmFs
X2hhbmRsZXJfZGlzY29ubmVjdChtX3BvcHVwLmdldCgpLCBtX2tleVByZXNzSGFuZGxlcklEKTsK
K30KKwordm9pZCBHdGtQb3B1cE1lbnU6OmNsZWFyKCkKK3sKKyAgICBndGtfY29udGFpbmVyX2Zv
cmVhY2goR1RLX0NPTlRBSU5FUihtX3BvcHVwLmdldCgpKSwgcmVpbnRlcnByZXRfY2FzdDxHdGtD
YWxsYmFjaz4obWVudVJlbW92ZUl0ZW0pLCB0aGlzKTsKK30KKwordm9pZCBHdGtQb3B1cE1lbnU6
OmFwcGVuZFNlcGFyYXRvcigpCit7CisgICAgR3RrV2lkZ2V0KiBtZW51SXRlbSA9IGd0a19zZXBh
cmF0b3JfbWVudV9pdGVtX25ldygpOworICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVO
VV9TSEVMTChtX3BvcHVwLmdldCgpKSwgbWVudUl0ZW0pOworICAgIGd0a193aWRnZXRfc2hvdyht
ZW51SXRlbSk7Cit9CisKK3ZvaWQgR3RrUG9wdXBNZW51OjphcHBlbmRJdGVtKEd0a0FjdGlvbiog
YWN0aW9uKQoreworICAgIEd0a1dpZGdldCogbWVudUl0ZW0gPSBndGtfYWN0aW9uX2NyZWF0ZV9t
ZW51X2l0ZW0oYWN0aW9uKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1lbnVJdGVtLCAic2VsZWN0
IiwgR19DQUxMQkFDSyhHdGtQb3B1cE1lbnU6OnNlbGVjdEl0ZW1DYWxsYmFjayksIHRoaXMpOwor
ICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdldCgpKSwg
bWVudUl0ZW0pOworICAgIGd0a193aWRnZXRfc2hvdyhtZW51SXRlbSk7Cit9CisKK3ZvaWQgR3Rr
UG9wdXBNZW51Ojpwb3BVcChjb25zdCBJbnRTaXplJiBtZW51U2l6ZSwgY29uc3QgSW50UG9pbnQm
IG1lbnVQb3NpdGlvbiwgaW50IGl0ZW1Db3VudCwgaW50IHNlbGVjdGVkSXRlbSwgY29uc3QgR2Rr
RXZlbnQqIGV2ZW50KQoreworICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7CisgICAgbV9t
ZW51UG9zaXRpb24gPSBtZW51UG9zaXRpb247CisgICAgZ3RrX21lbnVfc2V0X2FjdGl2ZShHVEtf
TUVOVShtX3BvcHVwLmdldCgpKSwgc2VsZWN0ZWRJdGVtKTsKKworICAgIC8vIFRoZSBzaXplIGNh
bGxzIGFyZSBkaXJlY3RseSBjb3BpZWQgZnJvbSBndGtjb21ib2JveC5jIHdoaWNoIGlzIExHUEwu
CisgICAgR3RrUmVxdWlzaXRpb24gcmVxdWlzaXRpb247CisgICAgZ3RrX3dpZGdldF9zZXRfc2l6
ZV9yZXF1ZXN0KG1fcG9wdXAuZ2V0KCksIC0xLCAtMSk7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKKyAgICBndGtfd2lkZ2V0X3NpemVfcmVxdWVzdChtX3BvcHVwLmdldCgpLCAmcmVxdWlzaXRp
b24pOworI2Vsc2UKKyAgICBndGtfd2lkZ2V0X2dldF9wcmVmZXJyZWRfc2l6ZShtX3BvcHVwLmdl
dCgpLCAmcmVxdWlzaXRpb24sIDApOworI2VuZGlmCisKKyAgICBndGtfd2lkZ2V0X3NldF9zaXpl
X3JlcXVlc3QobV9wb3B1cC5nZXQoKSwgc3RkOjptYXgobWVudVNpemUud2lkdGgoKSwgcmVxdWlz
aXRpb24ud2lkdGgpLCAtMSk7CisKKyAgICBHTGlzdCogY2hpbGRyZW4gPSBndGtfY29udGFpbmVy
X2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpKTsKKyAgICBHTGlzdCog
cCA9IGNoaWxkcmVuOworICAgIGlmIChpdGVtQ291bnQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBpdGVtQ291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPiBzZWxlY3RlZEl0
ZW0pCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIEd0a1dpZGdldCogaXRl
bSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3RrV2lkZ2V0Kj4ocC0+ZGF0YSk7CisgICAgICAgICAgICBH
dGtSZXF1aXNpdGlvbiBpdGVtUmVxdWlzaXRpb247CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
KyAgICAgICAgICAgIGd0a193aWRnZXRfZ2V0X2NoaWxkX3JlcXVpc2l0aW9uKGl0ZW0sICZpdGVt
UmVxdWlzaXRpb24pOworI2Vsc2UKKyAgICAgICAgICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJl
ZF9zaXplKGl0ZW0sICZpdGVtUmVxdWlzaXRpb24sIDApOworI2VuZGlmCisgICAgICAgICAgICBt
X21lbnVQb3NpdGlvbi5zZXRZKG1fbWVudVBvc2l0aW9uLnkoKSAtIGl0ZW1SZXF1aXNpdGlvbi5o
ZWlnaHQpOworCisgICAgICAgICAgICBwID0gZ19saXN0X25leHQocCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBDZW50ZXIgdmVydGljYWxseSB0aGUgZW1wdHkgcG9wdXAg
aW4gdGhlIGNvbWJvIGJveCBhcmVhCisgICAgICAgIG1fbWVudVBvc2l0aW9uLnNldFkobV9tZW51
UG9zaXRpb24ueSgpIC0gbWVudVNpemUuaGVpZ2h0KCkgLyAyKTsKKyAgICB9CisgICAgZ19saXN0
X2ZyZWUoY2hpbGRyZW4pOworCisgICAgZ3VpbnQgYnV0dG9uOworICAgIGd1aW50MzIgYWN0aXZh
dGVUaW1lOworICAgIGlmIChldmVudCkgeworICAgICAgICBidXR0b24gPSBldmVudC0+dHlwZSA9
PSBHREtfQlVUVE9OX1BSRVNTID8gZXZlbnQtPmJ1dHRvbi5idXR0b24gOiAxOworICAgICAgICBh
Y3RpdmF0ZVRpbWUgPSBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJ1dHRvbiA9IDE7CisgICAgICAgIGFjdGl2YXRlVGltZSA9IEdES19DVVJSRU5UX1RJ
TUU7CisgICAgfQorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBndGtfbWVudV9wb3B1
cChHVEtfTUVOVShtX3BvcHVwLmdldCgpKSwgMCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51
UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsIGJ1dHRvbiwgYWN0aXZh
dGVUaW1lKTsKKyNlbHNlCisgICAgZ3RrX21lbnVfcG9wdXBfZm9yX2RldmljZShHVEtfTUVOVSht
X3BvcHVwLmdldCgpKSwgZXZlbnQgPyBnZGtfZXZlbnRfZ2V0X2RldmljZShldmVudCkgOiAwLCAw
LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHdGtN
ZW51UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsIDAsIGJ1dHRvbiwg
YWN0aXZhdGVUaW1lKTsKKyNlbmRpZgorfQorCit2b2lkIEd0a1BvcHVwTWVudTo6cG9wRG93bigp
Cit7CisgICAgZ3RrX21lbnVfcG9wZG93bihHVEtfTUVOVShtX3BvcHVwLmdldCgpKSk7CisgICAg
cmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKK30KKwordm9pZCBHdGtQb3B1cE1lbnU6Om1lbnVS
ZW1vdmVJdGVtKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKK3sK
KyAgICBBU1NFUlQocG9wdXBNZW51LT5tX3BvcHVwKTsKKyAgICBndGtfY29udGFpbmVyX3JlbW92
ZShHVEtfQ09OVEFJTkVSKHBvcHVwTWVudS0+bV9wb3B1cC5nZXQoKSksIHdpZGdldCk7Cit9CisK
K3ZvaWQgR3RrUG9wdXBNZW51OjptZW51UG9zaXRpb25GdW5jdGlvbihHdGtNZW51KiwgZ2ludCog
eCwgZ2ludCogeSwgZ2Jvb2xlYW4qIHB1c2hJbiwgR3RrUG9wdXBNZW51KiBwb3B1cE1lbnUpCit7
CisgICAgKnggPSBwb3B1cE1lbnUtPm1fbWVudVBvc2l0aW9uLngoKTsKKyAgICAqeSA9IHBvcHVw
TWVudS0+bV9tZW51UG9zaXRpb24ueSgpOworICAgICpwdXNoSW4gPSB0cnVlOworfQorCit2b2lk
IEd0a1BvcHVwTWVudTo6cmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKQoreworICAgIG1fY3VycmVu
dGx5U2VsZWN0ZWRNZW51SXRlbSA9IDA7CisgICAgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVy
ID0gMDsKKyAgICBtX2N1cnJlbnRTZWFyY2hTdHJpbmcgPSAiIjsKK30KKworYm9vbCBHdGtQb3B1
cE1lbnU6OnR5cGVBaGVhZEZpbmQoR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIC8vIElmIHdl
IHdlcmUgZ2l2ZW4gYSBub24tcHJpbnRhYmxlIGNoYXJhY3RlciBqdXN0IHNraXAgaXQuCisgICAg
Z3VuaWNoYXIgdW5pY29kZUNoYXJhY3RlciA9IGdka19rZXl2YWxfdG9fdW5pY29kZShldmVudC0+
a2V5dmFsKTsKKyAgICBpZiAoIWdfdW5pY2hhcl9pc3ByaW50KHVuaWNvZGVDaGFyYWN0ZXIpKSB7
CisgICAgICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBnbG9uZyBjaGFyYWN0ZXJzV3JpdHRlbjsKKyAgICBHT3duUHRyPGd1
bmljaGFyMj4gdXRmMTZTdHJpbmcoZ191Y3M0X3RvX3V0ZjE2KCZ1bmljb2RlQ2hhcmFjdGVyLCAx
LCAwLCAmY2hhcmFjdGVyc1dyaXR0ZW4sIDApKTsKKyAgICBpZiAoIXV0ZjE2U3RyaW5nKSB7Cisg
ICAgICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSBzYW1lIGFzIHRoZSBsYXN0
IGNoYXJhY3RlciwgdGhlIHVzZXIgaXMgcHJvYmFibHkgdHJ5aW5nIHRvCisgICAgLy8gY3ljbGUg
dGhyb3VnaCB0aGUgbWVudWxpc3QgZW50cmllcy4gVGhpcyBtYXRjaGVzIHRoZSBXZWJDb3JlIGJl
aGF2aW9yIGZvciBjb2xsYXBzZWQKKyAgICAvLyBtZW51bGlzdHMuCisgICAgYm9vbCByZXBlYXRp
bmdDaGFyYWN0ZXIgPSB1bmljb2RlQ2hhcmFjdGVyICE9IG1fcHJldmlvdXNLZXlFdmVudENoYXJh
Y3RlcjsKKyAgICBpZiAoZXZlbnQtPnRpbWUgLSBtX3ByZXZpb3VzS2V5RXZlbnRUaW1lc3RhbXAg
PiBnU2VhcmNoVGltZW91dE1zKQorICAgICAgICBtX2N1cnJlbnRTZWFyY2hTdHJpbmcgPSBTdHJp
bmcoc3RhdGljX2Nhc3Q8VUNoYXIqPih1dGYxNlN0cmluZy5nZXQoKSksIGNoYXJhY3RlcnNXcml0
dGVuKTsKKyAgICBlbHNlIGlmIChyZXBlYXRpbmdDaGFyYWN0ZXIpCisgICAgICAgIG1fY3VycmVu
dFNlYXJjaFN0cmluZy5hcHBlbmQoU3RyaW5nKHN0YXRpY19jYXN0PFVDaGFyKj4odXRmMTZTdHJp
bmcuZ2V0KCkpLCBjaGFyYWN0ZXJzV3JpdHRlbikpOworCisgICAgbV9wcmV2aW91c0tleUV2ZW50
VGltZXN0YW1wID0gZXZlbnQtPnRpbWU7CisgICAgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVy
ID0gdW5pY29kZUNoYXJhY3RlcjsKKworICAgIC8vIExpa2UgdGhlIENocm9taXVtIHBvcnQsIHdl
IGNhc2UgZm9sZCBiZWZvcmUgc2VhcmNoaW5nLCBiZWNhdXNlIAorICAgIC8vIHN0cm5jbXAgZG9l
cyBub3QgaGFuZGxlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorICAgIEdPd25QdHI8Z2NoYXI+IHNl
YXJjaFN0cmluZ1dpdGhDYXNlRm9sZGVkKGdfdXRmOF9jYXNlZm9sZChtX2N1cnJlbnRTZWFyY2hT
dHJpbmcudXRmOCgpLmRhdGEoKSwgLTEpKTsKKyAgICBzaXplX3QgcHJlZml4TGVuZ3RoID0gc3Ry
bGVuKHNlYXJjaFN0cmluZ1dpdGhDYXNlRm9sZGVkLmdldCgpKTsKKworICAgIEdMaXN0KiBjaGls
ZHJlbiA9IGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobV9wb3B1cC5n
ZXQoKSkpOworICAgIGlmICghY2hpbGRyZW4pCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gSWYgYSBtZW51IGl0ZW0gaGFzIGFscmVhZHkgYmVlbiBzZWxlY3RlZCwgc3RhcnQgc2VhcmNo
aW5nIGZyb20gdGhlIGN1cnJlbnQKKyAgICAvLyBpdGVtIGRvd24gdGhlIGxpc3QuIFRoaXMgd2ls
bCBtYWtlIG11bHRpcGxlIGtleSBwcmVzc2VzIG9mIHRoZSBzYW1lIGNoYXJhY3RlcgorICAgIC8v
IGFkdmFuY2UgdGhlIHNlbGVjdGlvbi4KKyAgICBHTGlzdCogY3VycmVudENoaWxkID0gY2hpbGRy
ZW47CisgICAgaWYgKG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSkgeworICAgICAgICBjdXJy
ZW50Q2hpbGQgPSBnX2xpc3RfZmluZChjaGlsZHJlbiwgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJ
dGVtKTsKKyAgICAgICAgaWYgKCFjdXJyZW50Q2hpbGQpIHsKKyAgICAgICAgICAgIG1fY3VycmVu
dGx5U2VsZWN0ZWRNZW51SXRlbSA9IDA7CisgICAgICAgICAgICBjdXJyZW50Q2hpbGQgPSBjaGls
ZHJlbjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlcGVhdGluZyBjaGFyYWN0ZXJzIHNob3Vs
ZCBpdGVyYXRlLgorICAgICAgICBpZiAocmVwZWF0aW5nQ2hhcmFjdGVyKSB7CisgICAgICAgICAg
ICBpZiAoR0xpc3QqIG5leHRDaGlsZCA9IGdfbGlzdF9uZXh0KGN1cnJlbnRDaGlsZCkpCisgICAg
ICAgICAgICAgICAgY3VycmVudENoaWxkID0gbmV4dENoaWxkOworICAgICAgICB9CisgICAgfQor
CisgICAgR0xpc3QqIGZpcnN0Q2hpbGQgPSBjdXJyZW50Q2hpbGQ7CisgICAgZG8geworICAgICAg
ICBjdXJyZW50Q2hpbGQgPSBnX2xpc3RfbmV4dChjdXJyZW50Q2hpbGQpOworICAgICAgICBpZiAo
IWN1cnJlbnRDaGlsZCkKKyAgICAgICAgICAgIGN1cnJlbnRDaGlsZCA9IGNoaWxkcmVuOworCisg
ICAgICAgIEdPd25QdHI8Z2NoYXI+IGl0ZW1UZXh0KGdfdXRmOF9jYXNlZm9sZChndGtfbWVudV9p
dGVtX2dldF9sYWJlbChHVEtfTUVOVV9JVEVNKGN1cnJlbnRDaGlsZC0+ZGF0YSkpLCAtMSkpOwor
ICAgICAgICBpZiAoIXN0cm5jbXAoc2VhcmNoU3RyaW5nV2l0aENhc2VGb2xkZWQuZ2V0KCksIGl0
ZW1UZXh0LmdldCgpLCBwcmVmaXhMZW5ndGgpKSB7CisgICAgICAgICAgICBndGtfbWVudV9zaGVs
bF9zZWxlY3RfaXRlbShHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdldCgpKSwgR1RLX1dJREdFVChj
dXJyZW50Q2hpbGQtPmRhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fSB3aGlsZSAoY3VycmVudENoaWxkICE9IGZpcnN0Q2hpbGQpOworCisgICAgZ19saXN0X2ZyZWUo
Y2hpbGRyZW4pOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6c2Vs
ZWN0SXRlbUNhbGxiYWNrKEd0a01lbnVJdGVtKiBpdGVtLCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVu
dSkKK3sKKyAgICBwb3B1cE1lbnUtPm1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSA9IEdUS19X
SURHRVQoaXRlbSk7Cit9CisKK2dib29sZWFuIEd0a1BvcHVwTWVudTo6a2V5UHJlc3NFdmVudENh
bGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQsIEd0a1BvcHVwTWVu
dSogcG9wdXBNZW51KQoreworICAgIHJldHVybiBwb3B1cE1lbnUtPnR5cGVBaGVhZEZpbmQoZXZl
bnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrUG9wdXBNZW51LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Mzk3N2Q3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtQb3B1cE1lbnUuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEd0a1BvcHVwTWVudV9oCisjZGVmaW5l
IEd0a1BvcHVwTWVudV9oCisKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiSW50
UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9H
ZGtFdmVudEtleSBHZGtFdmVudEtleTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBH
dGtQb3B1cE1lbnUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEd0a1BvcHVwTWVudSk7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxHdGtQb3B1cE1lbnU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IEd0a1BvcHVwTWVudSgpKTsKKyAgICB9CisKKyAgICB+R3RrUG9wdXBNZW51KCk7CisK
KyAgICBHdGtXaWRnZXQqIHBsYXRmb3JtTWVudSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9wdXAuZ2V0
KCk7IH0KKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCBhcHBlbmRTZXBhcmF0b3IoKTsKKyAg
ICB2b2lkIGFwcGVuZEl0ZW0oR3RrQWN0aW9uKik7CisgICAgdm9pZCBwb3BVcChjb25zdCBJbnRT
aXplJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgaXRlbXNDb3VudCwgaW50IHNlbGVjdGVkSXRlbSwg
Y29uc3QgR2RrRXZlbnQqKTsKKyAgICB2b2lkIHBvcERvd24oKTsKKworcHJpdmF0ZToKKyAgICBH
dGtQb3B1cE1lbnUoKTsKKworICAgIHZvaWQgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKKyAg
ICBib29sIHR5cGVBaGVhZEZpbmQoR2RrRXZlbnRLZXkqKTsKKworICAgIHN0YXRpYyB2b2lkIG1l
bnVJdGVtQWN0aXZhdGVkKEd0a01lbnVJdGVtKiwgR3RrUG9wdXBNZW51Kik7CisgICAgc3RhdGlj
IHZvaWQgbWVudVBvc2l0aW9uRnVuY3Rpb24oR3RrTWVudSosIGdpbnQqLCBnaW50KiwgZ2Jvb2xl
YW4qLCBHdGtQb3B1cE1lbnUqKTsKKyAgICBzdGF0aWMgdm9pZCBtZW51UmVtb3ZlSXRlbShHdGtX
aWRnZXQqLCBHdGtQb3B1cE1lbnUqKTsKKyAgICBzdGF0aWMgdm9pZCBzZWxlY3RJdGVtQ2FsbGJh
Y2soR3RrTWVudUl0ZW0qLCBHdGtQb3B1cE1lbnUqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4ga2V5
UHJlc3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdka0V2ZW50S2V5KiwgR3RrUG9wdXBNZW51
Kik7CisKKyAgICBHUmVmUHRyPEd0a1dpZGdldD4gbV9wb3B1cDsKKyAgICBJbnRQb2ludCBtX21l
bnVQb3NpdGlvbjsKKyAgICBTdHJpbmcgbV9jdXJyZW50U2VhcmNoU3RyaW5nOworICAgIHVpbnQz
Ml90IG1fcHJldmlvdXNLZXlFdmVudFRpbWVzdGFtcDsKKyAgICB1bnNpZ25lZCBpbnQgbV9wcmV2
aW91c0tleUV2ZW50Q2hhcmFjdGVyOworICAgIEd0a1dpZGdldCogbV9jdXJyZW50bHlTZWxlY3Rl
ZE1lbnVJdGVtOworICAgIHVuc2lnbmVkIGludCBtX2tleVByZXNzSGFuZGxlcklEOworfTsKKwor
fQorCisjZW5kaWYgLy8gR3RrUG9wdXBNZW51X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1BvcHVwTWVudUd0ay5jcHAKaW5kZXggYjI0NjZjNS4uNDk3Mzc1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKQEAgLTI5LDEwICsyOSw3IEBA
CiAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHT3duUHRyLmgiCi0jaW5jbHVk
ZSAiR3RrVmVyc2lvbmluZy5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00MiwxNSArMzksMTMgQEAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IGdTZWFyY2hUaW1lb3V0TXMgPSAxMDAwOwogCiBQb3B1cE1l
bnVHdGs6OlBvcHVwTWVudUd0ayhQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkKICAgICA6IG1fcG9w
dXBDbGllbnQoY2xpZW50KQotICAgICwgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyKDApCi0g
ICAgLCBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0oMCkKIHsKIH0KIAogUG9wdXBNZW51R3Rr
Ojp+UG9wdXBNZW51R3RrKCkKIHsKICAgICBpZiAobV9wb3B1cCkgewotICAgICAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9wb3B1cC5nZXQoKSwgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfbWF0Y2hlZChtX3BvcHVwLT5wbGF0Zm9ybU1lbnUoKSwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CiAgICAgICAgIGhpZGUoKTsKICAgICB9CiB9CkBAIC02
MCw4NCArNTUsNDEgQEAgdm9pZCBQb3B1cE1lbnVHdGs6OnNob3coY29uc3QgSW50UmVjdCYgcmVj
dCwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAgICAgQVNTRVJUKGNsaWVudCgpKTsKIAog
ICAgIGlmICghbV9wb3B1cCkgewotICAgICAgICBtX3BvcHVwID0gR1RLX01FTlUoZ3RrX21lbnVf
bmV3KCkpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcG9wdXAuZ2V0KCksICJ1bm1hcCIs
IEdfQ0FMTEJBQ0soUG9wdXBNZW51R3RrOjptZW51VW5tYXBwZWQpLCB0aGlzKTsKLSAgICAgICAg
Z19zaWduYWxfY29ubmVjdChtX3BvcHVwLmdldCgpLCAia2V5LXByZXNzLWV2ZW50IiwgR19DQUxM
QkFDSyhQb3B1cE1lbnVHdGs6OmtleVByZXNzRXZlbnRDYWxsYmFjayksIHRoaXMpOworICAgICAg
ICBtX3BvcHVwID0gR3RrUG9wdXBNZW51OjpjcmVhdGUoKTsKKyAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX3BvcHVwLT5wbGF0Zm9ybU1lbnUoKSwgInVubWFwIiwgR19DQUxMQkFDSyhQb3B1cE1l
bnVHdGs6Om1lbnVVbm1hcHBlZCksIHRoaXMpOwogICAgIH0gZWxzZQotICAgICAgICBndGtfY29u
dGFpbmVyX2ZvcmVhY2goR1RLX0NPTlRBSU5FUihtX3BvcHVwLmdldCgpKSwgcmVpbnRlcnByZXRf
Y2FzdDxHdGtDYWxsYmFjaz4obWVudVJlbW92ZUl0ZW0pLCB0aGlzKTsKLQotICAgIGludCB4ID0g
MDsKLSAgICBpbnQgeSA9IDA7Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dl
dF93aW5kb3coR1RLX1dJREdFVCh2aWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpKSk7Ci0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKHdp
bmRvdywgJngsICZ5KTsKLSAgICBtX21lbnVQb3NpdGlvbiA9IHZpZXctPmNvbnRlbnRzVG9XaW5k
b3cocmVjdC5sb2NhdGlvbigpKTsKLSAgICBtX21lbnVQb3NpdGlvbiA9IEludFBvaW50KG1fbWVu
dVBvc2l0aW9uLngoKSArIHgsIG1fbWVudVBvc2l0aW9uLnkoKSArIHkgKyByZWN0LmhlaWdodCgp
KTsKLSAgICBtX2luZGV4TWFwLmNsZWFyKCk7CisgICAgICAgIG1fcG9wdXAtPmNsZWFyKCk7CiAK
ICAgICBjb25zdCBpbnQgc2l6ZSA9IGNsaWVudCgpLT5saXN0U2l6ZSgpOwogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEd0a1dpZGdldCogaXRlbTsKICAgICAg
ICAgaWYgKGNsaWVudCgpLT5pdGVtSXNTZXBhcmF0b3IoaSkpCi0gICAgICAgICAgICBpdGVtID0g
Z3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGl0ZW0gPSBndGtfbWVudV9pdGVtX25ld193aXRoX2xhYmVsKGNsaWVudCgpLT5pdGVtVGV4dChp
KS51dGY4KCkuZGF0YSgpKTsKLQotICAgICAgICBtX2luZGV4TWFwLmFkZChpdGVtLCBpKTsKLSAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChpdGVtLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKFBvcHVw
TWVudUd0azo6bWVudUl0ZW1BY3RpdmF0ZWQpLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdChpdGVtLCAic2VsZWN0IiwgR19DQUxMQkFDSyhQb3B1cE1lbnVHdGs6OnNlbGVjdEl0ZW1D
YWxsYmFjayksIHRoaXMpOwotCi0gICAgICAgIC8vIEZJWE1FOiBBcHBseSB0aGUgUG9wdXBNZW51
U3R5bGUgZnJvbSBjbGllbnQoKS0+aXRlbVN0eWxlKGkpCi0gICAgICAgIGd0a193aWRnZXRfc2V0
X3NlbnNpdGl2ZShpdGVtLCBjbGllbnQoKS0+aXRlbUlzRW5hYmxlZChpKSk7Ci0gICAgICAgIGd0
a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdldCgpKSwgaXRlbSk7
Ci0gICAgICAgIGd0a193aWRnZXRfc2hvdyhpdGVtKTsKLSAgICB9Ci0KLSAgICBndGtfbWVudV9z
ZXRfYWN0aXZlKG1fcG9wdXAuZ2V0KCksIGluZGV4KTsKLQotCi0gICAgLy8gVGhlIHNpemUgY2Fs
bHMgYXJlIGRpcmVjdGx5IGNvcGllZCBmcm9tIGd0a2NvbWJvYm94LmMgd2hpY2ggaXMgTEdQTAot
ICAgIEd0a1JlcXVpc2l0aW9uIHJlcXVpc2l0aW9uOwotICAgIGd0a193aWRnZXRfc2V0X3NpemVf
cmVxdWVzdChHVEtfV0lER0VUKG1fcG9wdXAuZ2V0KCkpLCAtMSwgLTEpOwotI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCi0gICAgZ3RrX3dpZGdldF9zaXplX3JlcXVlc3QoR1RLX1dJREdFVChtX3Bv
cHVwLmdldCgpKSwgJnJlcXVpc2l0aW9uKTsKLSNlbHNlCi0gICAgZ3RrX3dpZGdldF9nZXRfcHJl
ZmVycmVkX3NpemUoR1RLX1dJREdFVChtX3BvcHVwLmdldCgpKSwgJnJlcXVpc2l0aW9uLCAwKTsK
LSNlbmRpZgotCi0gICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KEdUS19XSURHRVQobV9w
b3B1cC5nZXQoKSksIHN0ZDo6bWF4KHJlY3Qud2lkdGgoKSwgcmVxdWlzaXRpb24ud2lkdGgpLCAt
MSk7Ci0KLSAgICBHTGlzdCogY2hpbGRyZW4gPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihH
VEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpKTsKLSAgICBHTGlzdCogcCA9IGNoaWxkcmVuOwot
ICAgIGlmIChzaXplKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7
Ci0gICAgICAgICAgICBpZiAoaSA+IGluZGV4KQotICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgR3RrV2lkZ2V0KiBpdGVtID0gcmVpbnRlcnByZXRfY2FzdDxHdGtXaWRnZXQqPihw
LT5kYXRhKTsKLSAgICAgICAgICAgIEd0a1JlcXVpc2l0aW9uIGl0ZW1SZXF1aXNpdGlvbjsKLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgICAgICAgICAgZ3RrX3dpZGdldF9nZXRfY2hpbGRf
cmVxdWlzaXRpb24oaXRlbSwgJml0ZW1SZXF1aXNpdGlvbik7Ci0jZWxzZQotICAgICAgICAgICAg
Z3RrX3dpZGdldF9nZXRfcHJlZmVycmVkX3NpemUoaXRlbSwgJml0ZW1SZXF1aXNpdGlvbiwgMCk7
Ci0jZW5kaWYKLSAgICAgICAgICAgIG1fbWVudVBvc2l0aW9uLnNldFkobV9tZW51UG9zaXRpb24u
eSgpIC0gaXRlbVJlcXVpc2l0aW9uLmhlaWdodCk7Ci0KLSAgICAgICAgICAgIHAgPSBnX2xpc3Rf
bmV4dChwKTsKKyAgICAgICAgICAgIG1fcG9wdXAtPmFwcGVuZFNlcGFyYXRvcigpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gYWN0aW9uTmFtZShnX3N0cmR1cF9w
cmludGYoInBvcHVwLW1lbnUtYWN0aW9uLSVkIiwgaSkpOworICAgICAgICAgICAgR1JlZlB0cjxH
dGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0aW9uX25ldyhhY3Rpb25OYW1lLmdl
dCgpLCBjbGllbnQoKS0+aXRlbVRleHQoaSkudXRmOCgpLmRhdGEoKSwgMCwgMCkpOworICAgICAg
ICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoYWN0aW9uLmdldCgpKSwgInBvcHVwLW1l
bnUtYWN0aW9uLWluZGV4IiwgR0lOVF9UT19QT0lOVEVSKGkpKTsKKyAgICAgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QoYWN0aW9uLmdldCgpLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKG1lbnVJdGVt
QWN0aXZhdGVkKSwgdGhpcyk7CisgICAgICAgICAgICAvLyBGSVhNRTogQXBwbHkgdGhlIFBvcHVw
TWVudVN0eWxlIGZyb20gY2xpZW50KCktPml0ZW1TdHlsZShpKQorICAgICAgICAgICAgZ3RrX2Fj
dGlvbl9zZXRfc2Vuc2l0aXZlKGFjdGlvbi5nZXQoKSwgY2xpZW50KCktPml0ZW1Jc0VuYWJsZWQo
aSkpOworICAgICAgICAgICAgbV9wb3B1cC0+YXBwZW5kSXRlbShhY3Rpb24uZ2V0KCkpOwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQ2VudGVyIHZlcnRpY2FsbHkgdGhlIGVt
cHR5IHBvcHVwIGluIHRoZSBjb21ibyBib3ggYXJlYQotICAgICAgICBtX21lbnVQb3NpdGlvbi5z
ZXRZKG1fbWVudVBvc2l0aW9uLnkoKSAtIHJlY3QuaGVpZ2h0KCkgLyAyKTsKICAgICB9CiAKLSAg
ICBnX2xpc3RfZnJlZShjaGlsZHJlbik7Ci0gICAgZ3RrX21lbnVfcG9wdXAobV9wb3B1cC5nZXQo
KSwgMCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51UG9zaXRpb25GdW5jPihtZW51UG9zaXRp
b25GdW5jdGlvbiksIHRoaXMsIDAsIGd0a19nZXRfY3VycmVudF9ldmVudF90aW1lKCkpOworICAg
IGludCB4ID0gMDsKKyAgICBpbnQgeSA9IDA7CisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtf
d2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCh2aWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpKSk7CisgICAgaWYgKHdpbmRvdykKKyAgICAgICAgZ2RrX3dpbmRvd19nZXRf
b3JpZ2luKHdpbmRvdywgJngsICZ5KTsKKyAgICBJbnRQb2ludCBtZW51UG9zaXRpb24odmlldy0+
Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKTsKKyAgICBtZW51UG9zaXRpb24ubW92
ZSh4LCB5ICsgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBtX3BvcHVwLT5wb3BVcChyZWN0LnNpemUo
KSwgbWVudVBvc2l0aW9uLCBzaXplLCBpbmRleCwgZ3RrX2dldF9jdXJyZW50X2V2ZW50KCkpOwog
fQogCiB2b2lkIFBvcHVwTWVudUd0azo6aGlkZSgpCiB7CiAgICAgQVNTRVJUKG1fcG9wdXApOwot
ICAgIGd0a19tZW51X3BvcGRvd24obV9wb3B1cC5nZXQoKSk7CisgICAgbV9wb3B1cC0+cG9wRG93
bigpOwogfQogCiB2b2lkIFBvcHVwTWVudUd0azo6dXBkYXRlRnJvbUVsZW1lbnQoKQpAQCAtMTUw
LDEyMSArMTAyLDE3IEBAIHZvaWQgUG9wdXBNZW51R3RrOjpkaXNjb25uZWN0Q2xpZW50KCkKICAg
ICBtX3BvcHVwQ2xpZW50ID0gMDsKIH0KIAotYm9vbCBQb3B1cE1lbnVHdGs6OnR5cGVBaGVhZEZp
bmQoR2RrRXZlbnRLZXkqIGV2ZW50KQotewotICAgIC8vIElmIHdlIHdlcmUgZ2l2ZW4gYSBub24t
cHJpbnRhYmxlIGNoYXJhY3RlciBqdXN0IHNraXAgaXQuCi0gICAgZ3VuaWNoYXIgdW5pY29kZUNo
YXJhY3RlciA9IGdka19rZXl2YWxfdG9fdW5pY29kZShldmVudC0+a2V5dmFsKTsKLSAgICBpZiAo
IXVuaWNvZGVDaGFyYWN0ZXIpIHsKLSAgICAgICAgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGdsb25nIGNoYXJhY3RlcnNXcml0
dGVuOwotICAgIEdPd25QdHI8Z3VuaWNoYXIyPiB1dGYxNlN0cmluZyhnX3VjczRfdG9fdXRmMTYo
JnVuaWNvZGVDaGFyYWN0ZXIsIDEsIDAsICZjaGFyYWN0ZXJzV3JpdHRlbiwgMCkpOwotICAgIGlm
ICghdXRmMTZTdHJpbmcpIHsKLSAgICAgICAgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgaXMg
dGhlIHNhbWUgYXMgdGhlIGxhc3QgY2hhcmFjdGVyLCB0aGUgdXNlciBpcyBwcm9iYWJseSB0cnlp
bmcgdG8KLSAgICAvLyBjeWNsZSB0aHJvdWdoIHRoZSBtZW51bGlzdCBlbnRyaWVzLiBUaGlzIG1h
dGNoZXMgdGhlIFdlYkNvcmUgYmVoYXZpb3IgZm9yIGNvbGxhcHNlZAotICAgIC8vIG1lbnVsaXN0
cy4KLSAgICBib29sIHJlcGVhdGluZ0NoYXJhY3RlciA9IHVuaWNvZGVDaGFyYWN0ZXIgIT0gbV9w
cmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyOwotICAgIGlmIChldmVudC0+dGltZSAtIG1fcHJldmlv
dXNLZXlFdmVudFRpbWVzdGFtcCA+IGdTZWFyY2hUaW1lb3V0TXMpCi0gICAgICAgIG1fY3VycmVu
dFNlYXJjaFN0cmluZyA9IFN0cmluZyhzdGF0aWNfY2FzdDxVQ2hhcio+KHV0ZjE2U3RyaW5nLmdl
dCgpKSwgY2hhcmFjdGVyc1dyaXR0ZW4pOwotICAgIGVsc2UgaWYgKHJlcGVhdGluZ0NoYXJhY3Rl
cikKLSAgICAgICAgbV9jdXJyZW50U2VhcmNoU3RyaW5nLmFwcGVuZChTdHJpbmcoc3RhdGljX2Nh
c3Q8VUNoYXIqPih1dGYxNlN0cmluZy5nZXQoKSksIGNoYXJhY3RlcnNXcml0dGVuKSk7Ci0KLSAg
ICBtX3ByZXZpb3VzS2V5RXZlbnRUaW1lc3RhbXAgPSBldmVudC0+dGltZTsKLSAgICBtX3ByZXZp
b3VzS2V5RXZlbnRDaGFyYWN0ZXIgPSB1bmljb2RlQ2hhcmFjdGVyOwotCi0gICAgLy8gTGlrZSB0
aGUgQ2hyb21pdW0gcG9ydCwgd2UgY2FzZSBmb2xkIGJlZm9yZSBzZWFyY2hpbmcsIGJlY2F1c2Ug
Ci0gICAgLy8gc3RybmNtcCBkb2VzIG5vdCBoYW5kbGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCi0g
ICAgR093blB0cjxnY2hhcj4gc2VhcmNoU3RyaW5nV2l0aENhc2VGb2xkZWQoZ191dGY4X2Nhc2Vm
b2xkKG1fY3VycmVudFNlYXJjaFN0cmluZy51dGY4KCkuZGF0YSgpLCAtMSkpOwotICAgIHNpemVf
dCBwcmVmaXhMZW5ndGggPSBzdHJsZW4oc2VhcmNoU3RyaW5nV2l0aENhc2VGb2xkZWQuZ2V0KCkp
OwotCi0gICAgR0xpc3QqIGNoaWxkcmVuID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RL
X0NPTlRBSU5FUihtX3BvcHVwLmdldCgpKSk7Ci0gICAgaWYgKCFjaGlsZHJlbikKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAvLyBJZiBhIG1lbnUgaXRlbSBoYXMgYWxyZWFkeSBiZWVuIHNl
bGVjdGVkLCBzdGFydCBzZWFyY2hpbmcgZnJvbSB0aGUgY3VycmVudAotICAgIC8vIGl0ZW0gZG93
biB0aGUgbGlzdC4gVGhpcyB3aWxsIG1ha2UgbXVsdGlwbGUga2V5IHByZXNzZXMgb2YgdGhlIHNh
bWUgY2hhcmFjdGVyCi0gICAgLy8gYWR2YW5jZSB0aGUgc2VsZWN0aW9uLgotICAgIEdMaXN0KiBj
dXJyZW50Q2hpbGQgPSBjaGlsZHJlbjsKLSAgICBpZiAobV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJ
dGVtKSB7Ci0gICAgICAgIGN1cnJlbnRDaGlsZCA9IGdfbGlzdF9maW5kKGNoaWxkcmVuLCBtX2N1
cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0pOwotICAgICAgICBpZiAoIWN1cnJlbnRDaGlsZCkgewot
ICAgICAgICAgICAgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtID0gMDsKLSAgICAgICAgICAg
IGN1cnJlbnRDaGlsZCA9IGNoaWxkcmVuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVwZWF0
aW5nIGNoYXJhY3RlcnMgc2hvdWxkIGl0ZXJhdGUuCi0gICAgICAgIGlmIChyZXBlYXRpbmdDaGFy
YWN0ZXIpIHsKLSAgICAgICAgICAgIGlmIChHTGlzdCogbmV4dENoaWxkID0gZ19saXN0X25leHQo
Y3VycmVudENoaWxkKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2hpbGQgPSBuZXh0Q2hpbGQ7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTGlzdCogZmlyc3RDaGlsZCA9IGN1cnJlbnRDaGls
ZDsKLSAgICBkbyB7Ci0gICAgICAgIGN1cnJlbnRDaGlsZCA9IGdfbGlzdF9uZXh0KGN1cnJlbnRD
aGlsZCk7Ci0gICAgICAgIGlmICghY3VycmVudENoaWxkKQotICAgICAgICAgICAgY3VycmVudENo
aWxkID0gY2hpbGRyZW47Ci0KLSAgICAgICAgR093blB0cjxnY2hhcj4gaXRlbVRleHQoZ191dGY4
X2Nhc2Vmb2xkKGd0a19tZW51X2l0ZW1fZ2V0X2xhYmVsKEdUS19NRU5VX0lURU0oY3VycmVudENo
aWxkLT5kYXRhKSksIC0xKSk7Ci0gICAgICAgIGlmICghc3RybmNtcChzZWFyY2hTdHJpbmdXaXRo
Q2FzZUZvbGRlZC5nZXQoKSwgaXRlbVRleHQuZ2V0KCksIHByZWZpeExlbmd0aCkpIHsKLSAgICAg
ICAgICAgIGd0a19tZW51X3NoZWxsX3NlbGVjdF9pdGVtKEdUS19NRU5VX1NIRUxMKG1fcG9wdXAu
Z2V0KCkpLCBHVEtfV0lER0VUKGN1cnJlbnRDaGlsZC0+ZGF0YSkpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChjdXJyZW50Q2hpbGQgIT0gZmlyc3RD
aGlsZCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQb3B1cE1lbnVHdGs6Om1lbnVJ
dGVtQWN0aXZhdGVkKEd0a01lbnVJdGVtKiBpdGVtLCBQb3B1cE1lbnVHdGsqIHRoYXQpCit2b2lk
IFBvcHVwTWVudUd0azo6bWVudUl0ZW1BY3RpdmF0ZWQoR3RrQWN0aW9uKiBhY3Rpb24sIFBvcHVw
TWVudUd0ayogdGhhdCkKIHsKICAgICBBU1NFUlQodGhhdC0+Y2xpZW50KCkpOwotICAgIEFTU0VS
VCh0aGF0LT5tX2luZGV4TWFwLmNvbnRhaW5zKEdUS19XSURHRVQoaXRlbSkpKTsKLSAgICB0aGF0
LT5jbGllbnQoKS0+dmFsdWVDaGFuZ2VkKHRoYXQtPm1faW5kZXhNYXAuZ2V0KEdUS19XSURHRVQo
aXRlbSkpKTsKKyAgICB0aGF0LT5jbGllbnQoKS0+dmFsdWVDaGFuZ2VkKEdQT0lOVEVSX1RPX0lO
VChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChhY3Rpb24pLCAicG9wdXAtbWVudS1hY3Rpb24t
aW5kZXgiKSkpOwogfQogCiB2b2lkIFBvcHVwTWVudUd0azo6bWVudVVubWFwcGVkKEd0a1dpZGdl
dCosIFBvcHVwTWVudUd0ayogdGhhdCkKIHsKICAgICBBU1NFUlQodGhhdC0+Y2xpZW50KCkpOwot
ICAgIHRoYXQtPnJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7CiAgICAgdGhhdC0+Y2xpZW50KCkt
PnBvcHVwRGlkSGlkZSgpOwogfQogCi12b2lkIFBvcHVwTWVudUd0azo6bWVudVBvc2l0aW9uRnVu
Y3Rpb24oR3RrTWVudSosIGdpbnQqIHgsIGdpbnQqIHksIGdib29sZWFuKiBwdXNoSW4sIFBvcHVw
TWVudUd0ayogdGhhdCkKLXsKLSAgICAqeCA9IHRoYXQtPm1fbWVudVBvc2l0aW9uLngoKTsKLSAg
ICAqeSA9IHRoYXQtPm1fbWVudVBvc2l0aW9uLnkoKTsKLSAgICAqcHVzaEluID0gdHJ1ZTsKLX0K
LQotdm9pZCBQb3B1cE1lbnVHdGs6OnJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCkKLXsKLSAgICBt
X2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0gPSAwOwotICAgIG1fcHJldmlvdXNLZXlFdmVudENo
YXJhY3RlciA9IDA7Ci0gICAgbV9jdXJyZW50U2VhcmNoU3RyaW5nID0gIiI7Ci19Ci0KLXZvaWQg
UG9wdXBNZW51R3RrOjptZW51UmVtb3ZlSXRlbShHdGtXaWRnZXQqIHdpZGdldCwgUG9wdXBNZW51
R3RrKiB0aGF0KQotewotICAgIEFTU0VSVCh0aGF0LT5tX3BvcHVwKTsKLSAgICBndGtfY29udGFp
bmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHRoYXQtPm1fcG9wdXAuZ2V0KCkpLCB3aWRnZXQpOwot
fQotCi1pbnQgUG9wdXBNZW51R3RrOjpzZWxlY3RJdGVtQ2FsbGJhY2soR3RrTWVudUl0ZW0qIGl0
ZW0sIFBvcHVwTWVudUd0ayogdGhhdCkKLXsKLSAgICB0aGF0LT5tX2N1cnJlbnRseVNlbGVjdGVk
TWVudUl0ZW0gPSBHVEtfV0lER0VUKGl0ZW0pOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotaW50
IFBvcHVwTWVudUd0azo6a2V5UHJlc3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBH
ZGtFdmVudEtleSogZXZlbnQsIFBvcHVwTWVudUd0ayogdGhhdCkKLXsKLSAgICByZXR1cm4gdGhh
dC0+dHlwZUFoZWFkRmluZChldmVudCk7Ci19Ci0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1BvcHVwTWVudUd0ay5oCmluZGV4IDdmMmZjMzYuLjYxNGQxNmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmgKQEAgLTIwLDE1ICsyMCwxMCBAQAog
I2lmbmRlZiBQb3B1cE1lbnVHdGtfaAogI2RlZmluZSBQb3B1cE1lbnVHdGtfaAogCi0jaW5jbHVk
ZSAiR1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgIkd0a1BvcHVwTWVudS5oIgogI2luY2x1ZGUgIklu
dFJlY3QuaCIKICNpbmNsdWRlICJQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVDbGll
bnQuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX0dka0V2
ZW50S2V5IEdka0V2ZW50S2V5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDI3ICsz
OSwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdENsaWVu
dCgpOwotICAgIGJvb2wgdHlwZUFoZWFkRmluZChHZGtFdmVudEtleSopOwogCiBwcml2YXRlOgog
ICAgIFBvcHVwTWVudUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9wb3B1cENsaWVu
dDsgfQotICAgIHZvaWQgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKIAotICAgIHN0YXRpYyB2
b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0a01lbnVJdGVtKiBpdGVtLCBQb3B1cE1lbnVHdGsqKTsK
ICAgICBzdGF0aWMgdm9pZCBtZW51VW5tYXBwZWQoR3RrV2lkZ2V0KiwgUG9wdXBNZW51R3RrKik7
Ci0gICAgc3RhdGljIHZvaWQgbWVudVBvc2l0aW9uRnVuY3Rpb24oR3RrTWVudSosIGdpbnQqLCBn
aW50KiwgZ2Jvb2xlYW4qLCBQb3B1cE1lbnVHdGsqKTsKLSAgICBzdGF0aWMgdm9pZCBtZW51UmVt
b3ZlSXRlbShHdGtXaWRnZXQqLCBQb3B1cE1lbnVHdGsqKTsKLSAgICBzdGF0aWMgaW50IHNlbGVj
dEl0ZW1DYWxsYmFjayhHdGtNZW51SXRlbSosIFBvcHVwTWVudUd0ayopOwotICAgIHN0YXRpYyBp
bnQga2V5UHJlc3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdka0V2ZW50S2V5KiwgUG9wdXBN
ZW51R3RrKik7CisgICAgc3RhdGljIHZvaWQgbWVudUl0ZW1BY3RpdmF0ZWQoR3RrQWN0aW9uKiwg
UG9wdXBNZW51R3RrKik7CiAKICAgICBQb3B1cE1lbnVDbGllbnQqIG1fcG9wdXBDbGllbnQ7Ci0g
ICAgSW50UG9pbnQgbV9tZW51UG9zaXRpb247Ci0gICAgR1JlZlB0cjxHdGtNZW51PiBtX3BvcHVw
OwotICAgIEhhc2hNYXA8R3RrV2lkZ2V0KiwgaW50PiBtX2luZGV4TWFwOwotICAgIFN0cmluZyBt
X2N1cnJlbnRTZWFyY2hTdHJpbmc7Ci0gICAgdWludDMyX3QgbV9wcmV2aW91c0tleUV2ZW50VGlt
ZXN0YW1wOwotICAgIHVuc2lnbmVkIGludCBtX3ByZXZpb3VzS2V5RXZlbnRDaGFyYWN0ZXI7Ci0g
ICAgR3RrV2lkZ2V0KiBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW07CisgICAgT3duUHRyPEd0
a1BvcHVwTWVudT4gbV9wb3B1cDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggZTUy
NzA5ZC4uMzk4NTgyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0K
KysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTM5NCw2ICszOTQsOCBAQCBs
aWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJ
X01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvV2ViSW5zcGVjdG9yR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9XZWJQYWdlUHJveHlHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YlBvcHVwTWVudVByb3h5R3RrLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJQb3B1cE1lbnVQcm94eUd0ay5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YlByZWZlcmVuY2VzR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVy
L2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF1bmNoZXIvZ3RrL1RocmVhZExhdW5jaGVyR3RrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggMmExZjAzZi4u
YWY1NTRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFn
ZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1Bh
Z2VDbGllbnRJbXBsLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIldlYkV2ZW50RmFj
dG9yeS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5R3RrLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApAQCAtMjA0LDEwICsyMDUsOSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWROb3RI
YW5kbGVXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKQogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFBhZ2VDbGllbnRJ
bXBsOjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQorUGFzc1JlZlB0cjxXZWJQ
b3B1cE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBh
Z2VQcm94eSogcGFnZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBXZWJQb3B1cE1lbnVQcm94eUd0azo6Y3JlYXRlKG1fdmlld1dpZGdldCwgcGFn
ZSk7CiB9CiAKIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6
OmNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5KikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmOTQxNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCkBAIC0w
LDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eUd0
ay5oIgorCisjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIldlYlBv
cHVwSXRlbS5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlBvcHVwTWVudVByb3h5R3Rr
OjpXZWJQb3B1cE1lbnVQcm94eUd0ayhHdGtXaWRnZXQqIHdlYlZpZXcsIFdlYlBvcHVwTWVudVBy
b3h5OjpDbGllbnQqIGNsaWVudCkKKyAgICA6IFdlYlBvcHVwTWVudVByb3h5KGNsaWVudCkKKyAg
ICAsIG1fd2ViVmlldyh3ZWJWaWV3KQorICAgICwgbV9hY3RpdmVJdGVtKC0xKQorICAgICwgbV9y
dW5Mb29wKDApCit7Cit9CisKK1dlYlBvcHVwTWVudVByb3h5R3RrOjp+V2ViUG9wdXBNZW51UHJv
eHlHdGsoKQoreworICAgIGlmIChtX3BvcHVwKSB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJz
X2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3BvcHVwLT5wbGF0Zm9ybU1lbnUoKSwgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAgIGhpZGVQb3B1cE1lbnUoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlHdGs6OnNob3dQb3B1cE1lbnUoY29uc3Qg
SW50UmVjdCYgcmVjdCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBkb3VibGUgc2NhbGVG
YWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgY29uc3QgUGxhdGZvcm1Q
b3B1cE1lbnVEYXRhJiBkYXRhLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgaWYgKG1f
cG9wdXApCisgICAgICAgIG1fcG9wdXAtPmNsZWFyKCk7CisgICAgZWxzZQorICAgICAgICBtX3Bv
cHVwID0gR3RrUG9wdXBNZW51OjpjcmVhdGUoKTsKKworICAgIGNvbnN0IGludCBzaXplID0gaXRl
bXMuc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
IGlmIChpdGVtc1tpXS5tX3R5cGUgPT0gV2ViUG9wdXBJdGVtOjpTZXBhcmF0b3IpCisgICAgICAg
ICAgICBtX3BvcHVwLT5hcHBlbmRTZXBhcmF0b3IoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBHT3duUHRyPGNoYXI+IGFjdGlvbk5hbWUoZ19zdHJkdXBfcHJpbnRmKCJwb3B1cC1tZW51
LWFjdGlvbi0lZCIsIGkpKTsKKyAgICAgICAgICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBhY3Rpb24g
PSBhZG9wdEdSZWYoZ3RrX2FjdGlvbl9uZXcoYWN0aW9uTmFtZS5nZXQoKSwgaXRlbXNbaV0ubV90
ZXh0LnV0ZjgoKS5kYXRhKCksIGl0ZW1zW2ldLm1fdG9vbFRpcC51dGY4KCkuZGF0YSgpLCAwKSk7
CisgICAgICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChhY3Rpb24uZ2V0KCkpLCAi
cG9wdXAtbWVudS1hY3Rpb24taW5kZXgiLCBHSU5UX1RPX1BPSU5URVIoaSkpOworICAgICAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24uZ2V0KCksICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0so
bWVudUl0ZW1BY3RpdmF0ZWQpLCB0aGlzKTsKKyAgICAgICAgICAgIGd0a19hY3Rpb25fc2V0X3Nl
bnNpdGl2ZShhY3Rpb24uZ2V0KCksIGl0ZW1zW2ldLm1faXNFbmFibGVkKTsKKyAgICAgICAgICAg
IG1fcG9wdXAtPmFwcGVuZEl0ZW0oYWN0aW9uLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGludCB4ID0gMDsKKyAgICBpbnQgeSA9IDA7CisgICAgaWYgKEdka1dpbmRvdyogd2luZG93
ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fd2ViVmlldykpCisgICAgICAgIGdka193aW5kb3df
Z2V0X29yaWdpbih3aW5kb3csICZ4LCAmeSk7CisgICAgSW50UG9pbnQgbWVudVBvc2l0aW9uKHJl
Y3QueCgpICsgeCwgcmVjdC55KCkgKyB5ICsgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBndWxvbmcg
dW5tYXBIYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChtX3BvcHVwLT5wbGF0Zm9ybU1lbnUoKSwg
InVubWFwIiwgR19DQUxMQkFDSyhtZW51VW5tYXBwZWQpLCB0aGlzKTsKKyAgICBtX3BvcHVwLT5w
b3BVcChyZWN0LnNpemUoKSwgbWVudVBvc2l0aW9uLCBzaXplLCBzZWxlY3RlZEluZGV4LCBtX2Ns
aWVudC0+Y3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQoKSA/IG1fY2xpZW50LT5jdXJy
ZW50bHlQcm9jZXNzZWRNb3VzZURvd25FdmVudCgpLT5uYXRpdmVFdmVudCgpIDogMCk7CisKKyAg
ICBtX3J1bkxvb3AgPSBnX21haW5fbG9vcF9uZXcoMCwgRkFMU0UpOworCisgICAgR0RLX1RIUkVB
RFNfTEVBVkUoKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9ydW5Mb29wKTsKKyAgICBHREtfVEhS
RUFEU19FTlRFUigpOworCisgICAgZ19tYWluX2xvb3BfdW5yZWYobV9ydW5Mb29wKTsKKyAgICBt
X3J1bkxvb3AgPSAwOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fcG9wdXAt
PnBsYXRmb3JtTWVudSgpLCB1bm1hcEhhbmRsZXIpOworCisgICAgaWYgKCFtX2NsaWVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQtPnZhbHVlQ2hhbmdlZEZvclBvcHVwTWVudSh0
aGlzLCBtX2FjdGl2ZUl0ZW0pOworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5R3RrOjpoaWRl
UG9wdXBNZW51KCkKK3sKKyAgICBtX3BvcHVwLT5wb3BEb3duKCk7Cit9CisKK3ZvaWQgV2ViUG9w
dXBNZW51UHJveHlHdGs6OnNodXRkb3duUnVuTG9vcCgpCit7CisgICAgaWYgKGdfbWFpbl9sb29w
X2lzX3J1bm5pbmcobV9ydW5Mb29wKSkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX3J1bkxv
b3ApOworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5R3RrOjptZW51SXRlbUFjdGl2YXRlZChH
dGtBY3Rpb24qIGFjdGlvbiwgV2ViUG9wdXBNZW51UHJveHlHdGsqIHBvcHVwTWVudSkKK3sKKyAg
ICBwb3B1cE1lbnUtPnNldEFjdGl2ZUl0ZW0oR1BPSU5URVJfVE9fSU5UKGdfb2JqZWN0X2dldF9k
YXRhKEdfT0JKRUNUKGFjdGlvbiksICJwb3B1cC1tZW51LWFjdGlvbi1pbmRleCIpKSk7CisgICAg
cG9wdXBNZW51LT5zaHV0ZG93blJ1bkxvb3AoKTsKK30KKwordm9pZCBXZWJQb3B1cE1lbnVQcm94
eUd0azo6bWVudVVubWFwcGVkKEd0a1dpZGdldCosIFdlYlBvcHVwTWVudVByb3h5R3RrKiBwb3B1
cE1lbnUpCit7CisgICAgcG9wdXBNZW51LT5zaHV0ZG93blJ1bkxvb3AoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1dlYlBvcHVwTWVudVByb3h5R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YlBvcHVwTWVudVByb3h5R3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Y2YzZmJhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViUG9wdXBNZW51UHJveHlHdGsuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViUG9wdXBNZW51UHJveHlHdGtfaAorI2Rl
ZmluZSBXZWJQb3B1cE1lbnVQcm94eUd0a19oCisKKyNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94
eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3RrUG9wdXBNZW51Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRSZWN0Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9HTWFpbkxvb3AgR01haW5Mb29wOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBXZWJQb3B1
cE1lbnVQcm94eUd0ayA6IHB1YmxpYyBXZWJQb3B1cE1lbnVQcm94eSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHlHdGs+IGNyZWF0ZShHdGtXaWRnZXQq
IHdlYlZpZXcsIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViUG9wdXBNZW51UHJveHlHdGsod2ViVmlldywgY2xp
ZW50KSk7CisgICAgfQorICAgIH5XZWJQb3B1cE1lbnVQcm94eUd0aygpOworCisgICAgdmlydHVh
bCB2b2lkIHNob3dQb3B1cE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6OlRl
eHREaXJlY3Rpb24sIGRvdWJsZSBzY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRl
bT4mLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgp
OworICAgIHZpcnR1YWwgdm9pZCBoaWRlUG9wdXBNZW51KCk7CisKK3ByaXZhdGU6CisgICAgV2Vi
UG9wdXBNZW51UHJveHlHdGsoR3RrV2lkZ2V0KiwgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudCop
OworICAgIHZvaWQgc2h1dGRvd25SdW5Mb29wKCk7CisgICAgdm9pZCBzZXRBY3RpdmVJdGVtKGlu
dCBhY3RpdmVJdGVtKSB7IG1fYWN0aXZlSXRlbSA9IGFjdGl2ZUl0ZW07IH0KKworICAgIHN0YXRp
YyB2b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0a0FjdGlvbiosIFdlYlBvcHVwTWVudVByb3h5R3Rr
Kik7CisgICAgc3RhdGljIHZvaWQgbWVudVVubWFwcGVkKEd0a1dpZGdldCosIFdlYlBvcHVwTWVu
dVByb3h5R3RrKik7CisKKyAgICBHdGtXaWRnZXQqIG1fd2ViVmlldzsKKyAgICBPd25QdHI8V2Vi
Q29yZTo6R3RrUG9wdXBNZW51PiBtX3BvcHVwOworICAgIGludCBtX2FjdGl2ZUl0ZW07CisgICAg
R01haW5Mb29wKiBtX3J1bkxvb3A7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworCisj
ZW5kaWYgLy8gV2ViUG9wdXBNZW51UHJveHlHdGtfaAo=
</data>
<flag name="review"
          id="89308"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>