<?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>76448</bug_id>
          
          <creation_ts>2012-01-17 06:24:29 -0800</creation_ts>
          <short_desc>[GTK] Add WebKitPrintOperation to WebKit2 GTK+ API</short_desc>
          <delta_ts>2012-02-16 09:11:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          <dependson>76172</dependson>
          <blocked>75544</blocked>
    
    <blocked>76536</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>537050</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-17 06:24:29 -0800</bug_when>
    <thetext>Initial printing API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537067</commentid>
    <comment_count>1</comment_count>
      <attachid>122759</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-17 06:41:49 -0800</bug_when>
    <thetext>Created attachment 122759
Patch

For now it just adds API to show the print dialog, used by the UI client to implement printFrame callback too, so that it can be tested with the MiniBrowser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537071</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-17 06:45:25 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537202</commentid>
    <comment_count>3</comment_count>
      <attachid>122759</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-17 10:59:09 -0800</bug_when>
    <thetext>Comment on attachment 122759
Patch

Attachment 122759 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11268265</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537663</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-17 23:40:53 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 122759 [details])
&gt; Attachment 122759 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/11268265

This is because this patch depends on patch attached to bug #76172.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555174</commentid>
    <comment_count>5</comment_count>
      <attachid>122759</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-02-13 04:31:08 -0800</bug_when>
    <thetext>Comment on attachment 122759
Patch

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp:251
&gt; +    bool doPrint = webkitPrintOperationRunDialogUnix(printOperation, parent);

How about shouldPrint?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp:371
&gt; +void webkit_print_operation_run_dialog(WebKitPrintOperation* printOperation, GtkWindow* parent)

Not sure about this. Blocking on this function is not very elegant I think (although it is indeed what GtkPrintOperation would do). Two options I&apos;d like us to consider: a non-blocking _present_dialog() with the same parameters that shows the dialog but instead of running the main loop connects to signals and handles everything automatically, or a way to obtain the dialog and show it ourselves, with a _print() call that does the actual printing. Do you see a problem with any of those? Or do you think this use case is already handled by the API user showing a dialog themselves and then using webkit_print_operation_print() from bug 76536?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:573
&gt; +     * Emitted when printing is requested on @web_view, usually by a javascript call,
&gt; +     * before the print dialog is shown. This signal can be used to set the initial
&gt; +     * print settings and page setup of @print_operation, by calling
&gt; +     * webkit_print_operation_set_print_settings() and webkit_print_operation_set_page_setup().
&gt; +     *
&gt; +     * You can connect to this signal and return %TRUE to cancel the print operation.

So, when I set the default settings, do I return FALSE to not cancel the operation? I guess so from the code, but the doc is a bit confusing.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:106
&gt; +    gboolean   (* script_prompt)  (WebKitWebView         *web_view,
&gt; +                                   const gchar           *message,
&gt; +                                   const gchar           *default_text,
&gt; +                                   gchar                **text);
&gt; +
&gt; +    gboolean   (* print_requested) (WebKitWebView        *web_view,
&gt; +                                    WebKitPrintOperation *print_operation);

They seem to be misaligned by one.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:213
&gt; +

Extra line intended?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555203</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-13 05:32:56 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 122759 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122759&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp:251
&gt; &gt; +    bool doPrint = webkitPrintOperationRunDialogUnix(printOperation, parent);
&gt; 
&gt; How about shouldPrint?

Sounds good too.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp:371
&gt; &gt; +void webkit_print_operation_run_dialog(WebKitPrintOperation* printOperation, GtkWindow* parent)
&gt; 
&gt; Not sure about this. Blocking on this function is not very elegant I think (although it is indeed what GtkPrintOperation would do).

I read somewhere that print is supposed to be a sync operation. All browsers I&apos;ve tested show a modal print dialog (chromium, ephy, firefox, arora, ...). GtkPrintOperation can run the dialog asynchronouslym in unix. 

&gt; Two options I&apos;d like us to consider: a non-blocking _present_dialog() with the same parameters that shows the dialog but instead of running the main loop connects to signals and handles everything automatically,

This is possible in unix, but not in win32.

&gt; or a way to obtain the dialog and show it ourselves, with a _print() call that does the actual printing.

Again, this can&apos;t be done in win32.

&gt; Do you see a problem with any of those? Or do you think this use case is already handled by the API user showing a dialog themselves and then using webkit_print_operation_print() from bug 76536?

That&apos;s a possibility, although that api is thought to print without showing any print dialog at all, nothing prevents the uiser to implement their own printing dialog and call webkit_print_operation_print(). 

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:573
&gt; &gt; +     * Emitted when printing is requested on @web_view, usually by a javascript call,
&gt; &gt; +     * before the print dialog is shown. This signal can be used to set the initial
&gt; &gt; +     * print settings and page setup of @print_operation, by calling
&gt; &gt; +     * webkit_print_operation_set_print_settings() and webkit_print_operation_set_page_setup().
&gt; &gt; +     *
&gt; &gt; +     * You can connect to this signal and return %TRUE to cancel the print operation.
&gt; 
&gt; So, when I set the default settings, do I return FALSE to not cancel the operation? I guess so from the code, but the doc is a bit confusing.

Yes, the next line in the docs says:

Returns: %TRUE to stop other handlers from being invoked for the event. %FALSE to propagate the event further.

So, you always have to return FALSE if you want the even to be propagated. I&apos;ll try to explain it better anyway. 

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:106
&gt; &gt; +    gboolean   (* script_prompt)  (WebKitWebView         *web_view,
&gt; &gt; +                                   const gchar           *message,
&gt; &gt; +                                   const gchar           *default_text,
&gt; &gt; +                                   gchar                **text);
&gt; &gt; +
&gt; &gt; +    gboolean   (* print_requested) (WebKitWebView        *web_view,
&gt; &gt; +                                    WebKitPrintOperation *print_operation);
&gt; 
&gt; They seem to be misaligned by one.

Right.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:213
&gt; &gt; +
&gt; 
&gt; Extra line intended?

Nope :-P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556134</commentid>
    <comment_count>7</comment_count>
      <attachid>126940</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-14 02:13:50 -0800</bug_when>
    <thetext>Created attachment 126940
Patch updated to apply on current git master

Rebased and fixed review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556136</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 02:16:57 -0800</bug_when>
    <thetext>Attachment 126940 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets
Using index info to reconstruct a base tree...
&lt;stdin&gt;:1578: trailing whitespace.
        
&lt;stdin&gt;:1647: trailing whitespace.
    
&lt;stdin&gt;:1657: trailing whitespace.
    
&lt;stdin&gt;:1672: trailing whitespace.
        return 0;        
&lt;stdin&gt;:1674: trailing whitespace.
    
warning: squelched 7 whitespace errors
warning: 12 lines add whitespace errors.
Falling back to patching base and 3-way merge...
warning: too many files (created: 168765 deleted: 3), skipping inexact rename detection
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556141</commentid>
    <comment_count>9</comment_count>
      <attachid>126940</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-14 02:28:14 -0800</bug_when>
    <thetext>Comment on attachment 126940
Patch updated to apply on current git master

Attachment 126940 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11516185</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556157</commentid>
    <comment_count>10</comment_count>
      <attachid>126944</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-14 02:43:10 -0800</bug_when>
    <thetext>Created attachment 126944
Fix gtk-doc warnings

Sorry, I got a content conflict on every single file of the patch while rebasing and made a mistake resolving the file webkit2gtk-sections.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556160</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 02:45:20 -0800</bug_when>
    <thetext>Attachment 126944 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets
Using index info to reconstruct a base tree...
&lt;stdin&gt;:1578: trailing whitespace.
        
&lt;stdin&gt;:1647: trailing whitespace.
    
&lt;stdin&gt;:1657: trailing whitespace.
    
&lt;stdin&gt;:1672: trailing whitespace.
        return 0;        
&lt;stdin&gt;:1674: trailing whitespace.
    
warning: squelched 7 whitespace errors
warning: 12 lines add whitespace errors.
Falling back to patching base and 3-way merge...
warning: too many files (created: 168766 deleted: 3), skipping inexact rename detection
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Auto-merging Tools/ChangeLog
CONFLICT (content): Merge conflict in Tools/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558174</commentid>
    <comment_count>12</comment_count>
      <attachid>126944</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-16 07:29:10 -0800</bug_when>
    <thetext>Comment on attachment 126944
Fix gtk-doc warnings

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp:86
&gt; +    priv-&gt;webViewDestroyedId = g_signal_connect(priv-&gt;webView, &quot;destroy&quot;, G_CALLBACK(webViewDestroyed), printOperation);

Do you think it would be slightly cleaner to use a weak reference here? Not a big deal either way.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp:248
&gt; +        if (gtk_widget_is_toplevel(toplevel) &amp;&amp; GTK_IS_WINDOW(toplevel))
&gt; +            parent = GTK_WINDOW(toplevel);

Would it make sense to use the new helper here?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:665
&gt; +     * You can connect to this signal and return %TRUE to cancel the print operation.

Might want to add &quot;or implement your own print dialog&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558226</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-16 08:37:37 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 126944 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126944&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp:86
&gt; &gt; +    priv-&gt;webViewDestroyedId = g_signal_connect(priv-&gt;webView, &quot;destroy&quot;, G_CALLBACK(webViewDestroyed), printOperation);
&gt; 
&gt; Do you think it would be slightly cleaner to use a weak reference here? Not a big deal either way.

Transient-for is implemented this way in GtkWindow.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp:248
&gt; &gt; +        if (gtk_widget_is_toplevel(toplevel) &amp;&amp; GTK_IS_WINDOW(toplevel))
&gt; &gt; +            parent = GTK_WINDOW(toplevel);
&gt; 
&gt; Would it make sense to use the new helper here?

Indeed

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:665
&gt; &gt; +     * You can connect to this signal and return %TRUE to cancel the print operation.
&gt; 
&gt; Might want to add &quot;or implement your own print dialog&quot;

Sure!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558257</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-16 09:11:26 -0800</bug_when>
    <thetext>Committed r107947: &lt;http://trac.webkit.org/changeset/107947&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122759</attachid>
            <date>2012-01-17 06:41:49 -0800</date>
            <delta_ts>2012-02-14 02:13:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-print-operation.diff</filename>
            <type>text/plain</type>
            <size>40028</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3NDNiOTNhLi41YmM2OTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIg
QEAKKzIwMTItMDEtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBXZWJLaXRQcmludE9wZXJhdGlvbiB0byBXZWJLaXQyIEdU
SysgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRQ
cmludE9wZXJhdGlvbkZpbmFsaXplKToKKyAgICAgICAgKHdlYlZpZXdEZXN0cm95ZWQpOiBEZWxl
dGUgdGhlIHByaW50IG9wZXJhdGlvbiB3aGVuIHRoZSB2aWV3CisgICAgICAgIHdpZGdldCBhc3Nv
Y2lhdGVkIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgKHdlYmtpdFByaW50T3BlcmF0aW9uQ29uc3Ry
dWN0ZWQpOiBDb25uZWN0IHRvIGRlc3Ryb3kgc2lnbmFsIG9mCisgICAgICAgIGFzc29jaWF0ZWQg
d2ViIHZpZXcuCisgICAgICAgICh3ZWJraXRQcmludE9wZXJhdGlvbkdldFByb3BlcnR5KToKKyAg
ICAgICAgKHdlYmtpdFByaW50T3BlcmF0aW9uU2V0UHJvcGVydHkpOgorICAgICAgICAod2Via2l0
X3ByaW50X29wZXJhdGlvbl9pbml0KToKKyAgICAgICAgKHdlYmtpdF9wcmludF9vcGVyYXRpb25f
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRQcmludE9wZXJhdGlvblJ1bkRpYWxvZ1VuaXgp
OiBVc2UgR3RrUHJpbnRVbml4RGlhbG9nIHRvCisgICAgICAgIHNob3cgdGhlIHByaW50aW5nIGRp
YWxvZyBpbiBVTklYIHBsYXRmb3Jtcy4KKyAgICAgICAgKHdlYmtpdFByaW50T3BlcmF0aW9uUnVu
RGlhbG9nV2luMzIpOiBFbXB0eS4KKyAgICAgICAgKGRyYXdQYWdlc0ZvclByaW50aW5nQ29tcGxl
dGVkKTogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gcHJpbnRpbmcKKyAgICAgICAgb3BlcmF0aW9uIGhh
cyBmaW5pc2hlZCBpbiB0aGUgd2ViIHByb2Nlc3MuCisgICAgICAgICh3ZWJraXRQcmludE9wZXJh
dGlvblJ1bkRpYWxvZ0ZvckZyYW1lKTogUnVuIHRoZSBwcmludGluZyBkaWFsb2cKKyAgICAgICAg
YW5kIHN0YXJ0IHByaW50aW5nIHRoZSBnaXZlbiBmcmFtZS4KKyAgICAgICAgKHdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fbmV3KTogQ3JlYXRlIGEgbmV3IHByaW50IG9wZXJhdGlvbiBmb3IgdGhlCisg
ICAgICAgIGdpdmVuIHdlYiB2aWV3LgorICAgICAgICAod2Via2l0X3ByaW50X29wZXJhdGlvbl9n
ZXRfcHJpbnRfc2V0dGluZ3MpOgorICAgICAgICAod2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRf
cHJpbnRfc2V0dGluZ3MpOgorICAgICAgICAod2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFn
ZV9zZXR1cCk6CisgICAgICAgICh3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wYWdlX3NldHVw
KToKKyAgICAgICAgKHdlYmtpdF9wcmludF9vcGVyYXRpb25fcnVuX2RpYWxvZyk6IFJ1biB0aGUg
cHJpbnQgZGlhbG9nIHRvIHByaW50CisgICAgICAgIHRoZSB3ZWIgdmlldyBtYWluIGZyYW1lLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
LmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwOgorICAg
ICAgICAocHJpbnRGcmFtZSk6IENhbGwgd2Via2l0V2ViVmlld1ByaW50RnJhbWUuCisgICAgICAg
ICh3ZWJraXRVSUNsaWVudEF0dGFjaFVJQ2xpZW50VG9QYWdlKTogQWRkIGltcGxlbWVudGF0aW9u
IGZvcgorICAgICAgICBwcmludEZyYW1lIGNhbGxiYWNrLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNz
X2luaXQpOiBBZGQgcHJpbnQtcmVxdWVzdGVkIHNpZ25hbC4KKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdQcmludEZyYW1lKTogRW1pdCBwcmludC1yZXF1ZXN0ZWQgYW5kIHNob3cgdGhlIHByaW50Cisg
ICAgICAgIGRpYWxvZyB0byBwcmludCB0aGUgZnJhbWUgd2hlbiBub3Qgc2lnbmFsIGlzIG5vdCBo
YW5kbGVkIGJ5IHVzZXIuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDog
QWRkIG5ldyBzZWN0aW9uIGZvcgorICAgICAgICBXZWJLaXRQcmludE9wZXJhdGlvbi4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0OiBBZGQg
bmV3IHN5bWJvbHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFByaW50aW5nLmNw
cDogQWRkZWQuCisgICAgICAgICh0ZXN0UHJpbnRPcGVyYXRpb25QcmludFNldHRpbmdzKToKKyAg
ICAgICAgKHdlYlZpZXdQcmludFJlcXVlc3RlZENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RXZWJW
aWV3UHJpbnRSZXF1ZXN0ZWQpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVy
QWxsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6IEluY2x1ZGUgV2Vi
S2l0UHJpbnRPcGVyYXRpb24uaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
bWFyc2hhbC5saXN0OgorCiAyMDEyLTAxLTE2ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5j
b20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNzAyNzU4PiBSRUdSRVNTSU9OOiBFdmVy
eSBTYWZhcmkgUmVhZGVyIFdLVmlldyBsZWFrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA5YTky
YzJjLi41ZmIzMDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODQsNiArODQsNyBAQCB3ZWJr
aXQyZ3RrX2hlYWRlcnMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
ZWZpbmVzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBc
CiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAorCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uaCBcCiAJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKIAkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlcXVlc3QuaCBcCiAJJChXZWJLaXQyKS9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklSZXNwb25zZS5oIFwKQEAgLTUyNiw2ICs1MjcsOSBAQCBs
aWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJ
X01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdERlZmluZXMuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RXJyb3IuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJy
b3IuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9w
ZXJhdGlvbi5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBy
aW50T3BlcmF0aW9uLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFByaW50T3BlcmF0aW9uUHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFNldHRpbmdzLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0U2V0dGluZ3MuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXREZWZpbmVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXREZWZpbmVzLmgKaW5kZXggNzliMzM4My4uOGMzZWVjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaApAQCAtMzIsNiArMzIs
OCBAQAogCiAjaW5jbHVkZSA8Z2xpYi5oPgogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0UHJpbnRP
cGVyYXRpb24gV2ViS2l0UHJpbnRPcGVyYXRpb247CisKICNpZmRlZiBHX09TX1dJTjMyCiAjICAg
IGlmZGVmIEJVSUxESU5HX1dFQktJVAogIyAgICAgICAgZGVmaW5lIFdFQktJVF9BUEkgX19kZWNs
c3BlYyhkbGxleHBvcnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOGY3ZWMwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcApAQCAtMCwwICsxLDM3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpbnRPcGVyYXRpb24uaCIKKworI2luY2x1ZGUgIlByaW50
SW5mby5oIgorI2luY2x1ZGUgIldlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxl
bWVudGVkLmg+CisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+CisKKyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCisjaW5jbHVk
ZSA8Z3RrL2d0a3VuaXhwcmludC5oPgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBST1BfV0VCX1ZJRVcsCisgICAgUFJPUF9Q
UklOVF9TRVRUSU5HUywKKyAgICBQUk9QX1BBR0VfU0VUVVAKK307CisKK2VudW0geworICAgIERP
TkUsCisKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3RydWN0IF9XZWJLaXRQcmludE9wZXJhdGlv
blByaXZhdGUgeworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgZ3Vsb25nIHdlYlZp
ZXdEZXN0cm95ZWRJZDsKKworICAgIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0
aW5nczsKKyAgICBHUmVmUHRyPEd0a1BhZ2VTZXR1cD4gcGFnZVNldHVwOworfTsKKworc3RhdGlj
IGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitHX0RFRklORV9UWVBFKFdl
YktpdFByaW50T3BlcmF0aW9uLCB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uLCBHX1RZUEVfT0JKRUNU
KQorCitzdGF0aWMgdm9pZCB3ZWJraXRQcmludE9wZXJhdGlvbkZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBXZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRf
UFJJTlRfT1BFUkFUSU9OKG9iamVjdCktPnByaXY7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNj
b25uZWN0KHByaXYtPndlYlZpZXcsIHByaXYtPndlYlZpZXdEZXN0cm95ZWRJZCk7CisKKyAgICBw
cml2LT5+V2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X3ByaW50X29wZXJhdGlvbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJWaWV3RGVzdHJveWVkKEd0a1dpZGdldCogd2ViVmlldywgR09i
amVjdCogcHJpbnRPcGVyYXRpb24pCit7CisgICAgZ19vYmplY3RfdW5yZWYocHJpbnRPcGVyYXRp
b24pOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRQcmludE9wZXJhdGlvbkNvbnN0cnVjdGVkKEdP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRp
b24gPSBXRUJLSVRfUFJJTlRfT1BFUkFUSU9OKG9iamVjdCk7CisgICAgV2ViS2l0UHJpbnRPcGVy
YXRpb25Qcml2YXRlKiBwcml2ID0gcHJpbnRPcGVyYXRpb24tPnByaXY7CisKKyAgICBpZiAoR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X3ByaW50X29wZXJhdGlvbl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1
Y3RlZCkKKyAgICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3ByaW50X29wZXJhdGlvbl9wYXJl
bnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOworCisgICAgcHJpdi0+d2ViVmlld0Rlc3Ry
b3llZElkID0gZ19zaWduYWxfY29ubmVjdChwcml2LT53ZWJWaWV3LCAiZGVzdHJveSIsIEdfQ0FM
TEJBQ0sod2ViVmlld0Rlc3Ryb3llZCksIHByaW50T3BlcmF0aW9uKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0UHJpbnRPcGVyYXRpb25HZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdl
YktpdFByaW50T3BlcmF0aW9uKiBwcmludE9wZXJhdGlvbiA9IFdFQktJVF9QUklOVF9PUEVSQVRJ
T04ob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX1dFQl9W
SUVXOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfb2JqZWN0KHZhbHVlLCBwcmludE9wZXJhdGlvbi0+
cHJpdi0+d2ViVmlldyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUklOVF9TRVRU
SU5HUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBwcmludE9wZXJhdGlvbi0+
cHJpdi0+cHJpbnRTZXR0aW5ncy5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9QQUdFX1NFVFVQOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHByaW50T3Bl
cmF0aW9uLT5wcml2LT5wYWdlU2V0dXAuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wSWQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRQcmludE9w
ZXJhdGlvblNldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0UHJpbnRP
cGVyYXRpb24qIHByaW50T3BlcmF0aW9uID0gV0VCS0lUX1BSSU5UX09QRVJBVElPTihvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfV0VCX1ZJRVc6CisgICAg
ICAgIHByaW50T3BlcmF0aW9uLT5wcml2LT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfdmFs
dWVfZ2V0X29iamVjdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJJ
TlRfU0VUVElOR1M6CisgICAgICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3Nl
dHRpbmdzKHByaW50T3BlcmF0aW9uLCBHVEtfUFJJTlRfU0VUVElOR1MoZ192YWx1ZV9nZXRfb2Jq
ZWN0KHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFHRV9TRVRVUDoK
KyAgICAgICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcGFnZV9zZXR1cChwcmludE9wZXJh
dGlvbiwgR1RLX1BBR0VfU0VUVVAoZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKSkpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2luaXQoV2ViS2l0UHJpbnRPcGVyYXRpb24qIHBy
aW50T3BlcmF0aW9uKQoreworICAgIFdlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZSogcHJpdiA9
IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShwcmludE9wZXJhdGlvbiwgV0VCS0lUX1RZUEVf
UFJJTlRfT1BFUkFUSU9OLCBXZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUpOworICAgIHByaW50
T3BlcmF0aW9uLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdFByaW50T3BlcmF0
aW9uUHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2Ns
YXNzX2luaXQoV2ViS2l0UHJpbnRPcGVyYXRpb25DbGFzcyogcHJpbnRPcGVyYXRpb25DbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHByaW50
T3BlcmF0aW9uQ2xhc3MpOworICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRQcmlu
dE9wZXJhdGlvbkZpbmFsaXplOworICAgIGdPYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJr
aXRQcmludE9wZXJhdGlvbkNvbnN0cnVjdGVkOworICAgIGdPYmplY3RDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0gd2Via2l0UHJpbnRPcGVyYXRpb25HZXRQcm9wZXJ0eTsKKyAgICBnT2JqZWN0Q2xhc3Mt
PnNldF9wcm9wZXJ0eSA9IHdlYmtpdFByaW50T3BlcmF0aW9uU2V0UHJvcGVydHk7CisKKyAgICAv
KioKKyAgICAgKiBXZWJLaXRQcmludE9wZXJhdGlvbjp3ZWItdmlldzoKKyAgICAgKgorICAgICAq
IFRoZSAjV2ViS2l0V2ViVmlldyB0aGF0IHdpbGwgYmUgcHJpbnRlZC4KKyAgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfV0VCX1ZJRVcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJ3ZWItdmlldyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIldl
YiBWaWV3IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8oIlRoZSB3ZWIgdmlldyB0aGF0IHdpbGwgYmUgcHJpbnRlZCIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
VFlQRV9XRUJfVklFVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgLyoqCisgICAgICogV2Vi
S2l0UHJpbnRPcGVyYXRpb246cHJpbnQtc2V0dGluZ3M6CisgICAgICoKKyAgICAgKiBUaGUgaW5p
dGlhbCAjR3RrUHJpbnRTZXR0aW5ncyBmb3IgdGhlIHByaW50IG9wZXJhdGlvbi4KKyAgICAgKi8K
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfUFJJTlRfU0VUVElOR1MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJwcmlu
dC1zZXR0aW5ncyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIlByaW50IFNldHRpbmdzIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBpbml0aWFsIHByaW50IHNl
dHRpbmdzIGZvciB0aGUgcHJpbnQgb3BlcmF0aW9uIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1BSSU5UX1NFVFRJTkdT
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisgICAgLyoqCisgICAgICogV2ViS2l0UHJpbnRP
cGVyYXRpb246cGFnZS1zZXR1cDoKKyAgICAgKgorICAgICAqIFRoZSBpbml0aWFsICNHdGtQYWdl
U2V0dXAgZm9yIHRoZSBwcmludCBvcGVyYXRpb24uCisgICAgICovCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShnT2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJPUF9QQUdFX1NFVFVQLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInBhZ2Utc2V0dXAiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiUGFnZSBT
ZXR1cCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiVGhlIGluaXRpYWwgcGFnZSBzZXR1cCBmb3IgdGhlIHByaW50IG9wZXJhdGlv
biIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR1RLX1RZUEVfUEFHRV9TRVRVUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIC8qKgorICAgICAqIFdlYktpdFByaW50T3BlcmF0aW9uOjpkb25lOgorICAgICAqIEBwcmlu
dF9vcGVyYXRpb246IHRoZSAjV2ViS2l0UHJpbnRPcGVyYXRpb24gb24gd2hpY2ggdGhlIHNpZ25h
bCB3YXMgZW1pdHRlZAorICAgICAqCisgICAgICogRW1pdHRlZCB3aGVuIHRoZSBwcmludCBvcGVy
YXRpb24gaGFzIGZpbmlzaGVkIGRvaW5nIGV2ZXJ5dGhpbmcKKyAgICAgKiByZXF1aXJlZCBmb3Ig
cHJpbnRpbmcuCisgICAgICovCisgICAgc2lnbmFsc1tET05FXSA9CisgICAgICAgIGdfc2lnbmFs
X25ldygiZG9uZSIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhnT2Jq
ZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAg
ICAgICAgICAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3Vy
ZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwg
MCk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUocHJpbnRPcGVyYXRpb25DbGFzcywg
c2l6ZW9mKFdlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZSkpOworfQorCisjaWZkZWYgSEFWRV9H
VEtfVU5JWF9QUklOVElORworc3RhdGljIGJvb2wgd2Via2l0UHJpbnRPcGVyYXRpb25SdW5EaWFs
b2dVbml4KFdlYktpdFByaW50T3BlcmF0aW9uKiBwcmludE9wZXJhdGlvbiwgR3RrV2luZG93KiBw
YXJlbnQpCit7CisgICAgR3RrUHJpbnRVbml4RGlhbG9nKiBwcmludERpYWxvZyA9IEdUS19QUklO
VF9VTklYX0RJQUxPRyhndGtfcHJpbnRfdW5peF9kaWFsb2dfbmV3KDAsIHBhcmVudCkpOworICAg
IGd0a19wcmludF91bml4X2RpYWxvZ19zZXRfbWFudWFsX2NhcGFiaWxpdGllcyhwcmludERpYWxv
Zywgc3RhdGljX2Nhc3Q8R3RrUHJpbnRDYXBhYmlsaXRpZXM+KDApKTsKKworICAgIFdlYktpdFBy
aW50T3BlcmF0aW9uUHJpdmF0ZSogcHJpdiA9IHByaW50T3BlcmF0aW9uLT5wcml2OworICAgIGlm
IChwcml2LT5wcmludFNldHRpbmdzKQorICAgICAgICBndGtfcHJpbnRfdW5peF9kaWFsb2dfc2V0
X3NldHRpbmdzKHByaW50RGlhbG9nLCBwcml2LT5wcmludFNldHRpbmdzLmdldCgpKTsKKworICAg
IGlmIChwcml2LT5wYWdlU2V0dXApCisgICAgICAgIGd0a19wcmludF91bml4X2RpYWxvZ19zZXRf
cGFnZV9zZXR1cChwcmludERpYWxvZywgcHJpdi0+cGFnZVNldHVwLmdldCgpKTsKKworICAgIGd0
a19wcmludF91bml4X2RpYWxvZ19zZXRfZW1iZWRfcGFnZV9zZXR1cChwcmludERpYWxvZywgVFJV
RSk7CisKKyAgICBib29sIHJldHVyblZhbHVlID0gZmFsc2U7CisgICAgaWYgKGd0a19kaWFsb2df
cnVuKEdUS19ESUFMT0cocHJpbnREaWFsb2cpKSA9PSBHVEtfUkVTUE9OU0VfT0spIHsKKyAgICAg
ICAgcHJpdi0+cHJpbnRTZXR0aW5ncyA9IGFkb3B0R1JlZihndGtfcHJpbnRfdW5peF9kaWFsb2df
Z2V0X3NldHRpbmdzKHByaW50RGlhbG9nKSk7CisgICAgICAgIHByaXYtPnBhZ2VTZXR1cCA9IGd0
a19wcmludF91bml4X2RpYWxvZ19nZXRfcGFnZV9zZXR1cChwcmludERpYWxvZyk7CisgICAgICAg
IHJldHVyblZhbHVlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RL
X1dJREdFVChwcmludERpYWxvZykpOworCisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorI2Vu
ZGlmIC8vIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKKworI2lmZGVmIEdfT1NfV0lOMzIKK3N0YXRp
YyBib29sIHdlYmtpdFByaW50T3BlcmF0aW9uUnVuRGlhbG9nV2luMzIoV2ViS2l0UHJpbnRPcGVy
YXRpb24qLCBHdGtXaW5kb3cqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGRyYXdQYWdlc0ZvclByaW50aW5nQ29t
cGxldGVkKFdLRXJyb3JSZWYsIHZvaWQqIGNvbnRleHQpCit7CisgICAgV2ViS2l0UHJpbnRPcGVy
YXRpb24qIHByaW50T3BlcmF0aW9uID0gV0VCS0lUX1BSSU5UX09QRVJBVElPTihjb250ZXh0KTsK
KyAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lU
X1dFQl9WSUVXX0JBU0UocHJpbnRPcGVyYXRpb24tPnByaXYtPndlYlZpZXcpKTsKKyAgICBwYWdl
LT5lbmRQcmludGluZygpOworICAgIGdfc2lnbmFsX2VtaXQocHJpbnRPcGVyYXRpb24sIHNpZ25h
bHNbRE9ORV0sIDAsIE5VTEwpOworfQorCit2b2lkIHdlYmtpdFByaW50T3BlcmF0aW9uUnVuRGlh
bG9nRm9yRnJhbWUoV2ViS2l0UHJpbnRPcGVyYXRpb24qIHByaW50T3BlcmF0aW9uLCBHdGtXaW5k
b3cqIHBhcmVudCwgV2ViRnJhbWVQcm94eSogd2ViRnJhbWUpCit7CisgICAgV2ViS2l0UHJpbnRP
cGVyYXRpb25Qcml2YXRlKiBwcml2ID0gcHJpbnRPcGVyYXRpb24tPnByaXY7CisgICAgaWYgKCFw
YXJlbnQpIHsKKyAgICAgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3Rv
cGxldmVsKEdUS19XSURHRVQocHJpdi0+d2ViVmlldykpOworICAgICAgICBpZiAoZ3RrX3dpZGdl
dF9pc190b3BsZXZlbCh0b3BsZXZlbCkgJiYgR1RLX0lTX1dJTkRPVyh0b3BsZXZlbCkpCisgICAg
ICAgICAgICBwYXJlbnQgPSBHVEtfV0lORE9XKHRvcGxldmVsKTsKKyAgICB9CisjaWZkZWYgSEFW
RV9HVEtfVU5JWF9QUklOVElORworICAgIGJvb2wgZG9QcmludCA9IHdlYmtpdFByaW50T3BlcmF0
aW9uUnVuRGlhbG9nVW5peChwcmludE9wZXJhdGlvbiwgcGFyZW50KTsKKyNlbmRpZgorI2lmZGVm
IEdfT1NfV0lOMzIKKyAgICBib29sIGRvUHJpbnQgPSB3ZWJraXRQcmludE9wZXJhdGlvblJ1bkRp
YWxvZ1dpbjMyKHByaW50T3BlcmF0aW9uLCBwYXJlbnQpOworI2VuZGlmCisKKyAgICBpZiAoIWRv
UHJpbnQpIHsKKyAgICAgICAgZ19zaWduYWxfZW1pdChwcmludE9wZXJhdGlvbiwgc2lnbmFsc1tE
T05FXSwgMCwgTlVMTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBQcmludEluZm8g
cHJpbnRJbmZvKHByaXYtPnByaW50U2V0dGluZ3MuZ2V0KCksIHByaXYtPnBhZ2VTZXR1cC5nZXQo
KSk7CisgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdF
QktJVF9XRUJfVklFV19CQVNFKHByaXYtPndlYlZpZXcpKTsKKyAgICBwYWdlLT5kcmF3UGFnZXNG
b3JQcmludGluZyh3ZWJGcmFtZSwgcHJpbnRJbmZvLCBWb2lkQ2FsbGJhY2s6OmNyZWF0ZShwcmlu
dE9wZXJhdGlvbiwgJmRyYXdQYWdlc0ZvclByaW50aW5nQ29tcGxldGVkKSk7Cit9CisKKy8qKgor
ICogd2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXc6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdl
YlZpZXcKKyAqCisgKiBDcmVhdGUgYSBuZXcgI1dlYktpdFByaW50T3BlcmF0aW9uIHRvIHByaW50
IEB3ZWJfdmlldyBjb250ZW50cy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEg
bmV3ICNXZWJLaXRQcmludE9wZXJhdGlvbi4KKyAqLworV2ViS2l0UHJpbnRPcGVyYXRpb24qIHdl
YmtpdF9wcmludF9vcGVyYXRpb25fbmV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKKwor
ICAgIHJldHVybiBXRUJLSVRfUFJJTlRfT1BFUkFUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9QUklOVF9PUEVSQVRJT04sICJ3ZWItdmlldyIsIHdlYlZpZXcsIE5VTEwpKTsKK30KKworLyoq
CisgKiB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9zZXR0aW5nczoKKyAqIEBwcmlu
dF9vcGVyYXRpb246IGEgI1dlYktpdFByaW50T3BlcmF0aW9uCisgKgorICogUmV0dXJuIHRoZSBj
dXJyZW50IHByaW50IHNldHRpbmdzIG9mIEBwcmludF9vcGVyYXRpb24uIEl0IHJldHVybnMgJU5V
TEwgdW50aWwKKyAqIGVpdGhlciB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wcmludF9zZXR0
aW5ncygpIG9yIHdlYmtpdF9wcmludF9vcGVyYXRpb25fcnVuX2RpYWxvZygpCisgKiBoYXZlIGJl
ZW4gY2FsbGVkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlIGN1cnJlbnQg
I0d0a1ByaW50U2V0dGluZ3Mgb2YgQHByaW50X29wZXJhdGlvbi4KKyAqLworR3RrUHJpbnRTZXR0
aW5ncyogd2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MoV2ViS2l0UHJp
bnRPcGVyYXRpb24qIHByaW50T3BlcmF0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19QUklOVF9PUEVSQVRJT04ocHJpbnRPcGVyYXRpb24pLCAwKTsKKworICAgIHJl
dHVybiBwcmludE9wZXJhdGlvbi0+cHJpdi0+cHJpbnRTZXR0aW5ncy5nZXQoKTsKK30KKworLyoq
CisgKiB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wcmludF9zZXR0aW5nczoKKyAqIEBwcmlu
dF9vcGVyYXRpb246IGEgI1dlYktpdFByaW50T3BlcmF0aW9uCisgKiBAcHJpbnRfc2V0dGluZ3M6
IGEgI0d0a1ByaW50U2V0dGluZ3MgdG8gc2V0CisgKgorICogU2V0IHRoZSBjdXJyZW50IHByaW50
IHNldHRpbmdzIG9mIEBwcmludF9vcGVyYXRpb24uIEN1cnJlbnQgcHJpbnQgc2V0dGluZ3MgYXJl
IHVzZWQgZm9yCisgKiB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIHByaW50IGRpYWxvZyB3aGVu
IHdlYmtpdF9wcmludF9vcGVyYXRpb25fcnVuX2RpYWxvZygpIGlzIGNhbGxlZC4KKyAqLwordm9p
ZCB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wcmludF9zZXR0aW5ncyhXZWJLaXRQcmludE9w
ZXJhdGlvbiogcHJpbnRPcGVyYXRpb24sIEd0a1ByaW50U2V0dGluZ3MqIHByaW50U2V0dGluZ3Mp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfUFJJTlRfT1BFUkFUSU9OKHByaW50
T3BlcmF0aW9uKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChHVEtfSVNfUFJJTlRfU0VUVElOR1Mo
cHJpbnRTZXR0aW5ncykpOworCisgICAgaWYgKHByaW50T3BlcmF0aW9uLT5wcml2LT5wcmludFNl
dHRpbmdzLmdldCgpID09IHByaW50U2V0dGluZ3MpCisgICAgICAgIHJldHVybjsKKworICAgIHBy
aW50T3BlcmF0aW9uLT5wcml2LT5wcmludFNldHRpbmdzID0gcHJpbnRTZXR0aW5nczsKKyAgICBn
X29iamVjdF9ub3RpZnkoR19PQkpFQ1QocHJpbnRPcGVyYXRpb24pLCAicHJpbnQtc2V0dGluZ3Mi
KTsKK30KKworLyoqCisgKiB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wYWdlX3NldHVwOgor
ICogQHByaW50X29wZXJhdGlvbjogYSAjV2ViS2l0UHJpbnRPcGVyYXRpb24KKyAqCisgKiBSZXR1
cm4gdGhlIGN1cnJlbnQgcGFnZSBzZXR1cCBvZiBAcHJpbnRfb3BlcmF0aW9uLiBJdCByZXR1cm5z
ICVOVUxMIHVudGlsCisgKiBlaXRoZXIgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRf
c2V0dGluZ3MoKSBvciB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3J1bl9kaWFsb2coKQorICogaGF2
ZSBiZWVuIGNhbGxlZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBjdXJy
ZW50ICNHdGtQYWdlU2V0dXAgb2YgQHByaW50X29wZXJhdGlvbi4KKyAqLworR3RrUGFnZVNldHVw
KiB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wYWdlX3NldHVwKFdlYktpdFByaW50T3BlcmF0
aW9uKiBwcmludE9wZXJhdGlvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfUFJJTlRfT1BFUkFUSU9OKHByaW50T3BlcmF0aW9uKSwgMCk7CisKKyAgICByZXR1cm4gcHJp
bnRPcGVyYXRpb24tPnByaXYtPnBhZ2VTZXR1cC5nZXQoKTsKK30KKworLyoqCisgKiB3ZWJraXRf
cHJpbnRfb3BlcmF0aW9uX3NldF9wYWdlX3NldHVwOgorICogQHByaW50X29wZXJhdGlvbjogYSAj
V2ViS2l0UHJpbnRPcGVyYXRpb24KKyAqIEBwYWdlX3NldHVwOiBhICNHdGtQYWdlU2V0dXAgdG8g
c2V0CisgKgorICogU2V0IHRoZSBjdXJyZW50IHBhZ2Ugc2V0dXAgb2YgQHByaW50X29wZXJhdGlv
bi4gQ3VycmVudCBwYWdlIHNldHVwIGlzIHVzZWQgZm9yIHRoZQorICogaW5pdGlhbCB2YWx1ZXMg
b2YgdGhlIHByaW50IGRpYWxvZyB3aGVuIHdlYmtpdF9wcmludF9vcGVyYXRpb25fcnVuX2RpYWxv
ZygpIGlzIGNhbGxlZC4KKyAqLwordm9pZCB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wYWdl
X3NldHVwKFdlYktpdFByaW50T3BlcmF0aW9uKiBwcmludE9wZXJhdGlvbiwgR3RrUGFnZVNldHVw
KiBwYWdlU2V0dXApCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfUFJJTlRfT1BF
UkFUSU9OKHByaW50T3BlcmF0aW9uKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChHVEtfSVNfUEFH
RV9TRVRVUChwYWdlU2V0dXApKTsKKworICAgIGlmIChwcmludE9wZXJhdGlvbi0+cHJpdi0+cGFn
ZVNldHVwLmdldCgpID09IHBhZ2VTZXR1cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpbnRP
cGVyYXRpb24tPnByaXYtPnBhZ2VTZXR1cCA9IHBhZ2VTZXR1cDsKKyAgICBnX29iamVjdF9ub3Rp
ZnkoR19PQkpFQ1QocHJpbnRPcGVyYXRpb24pLCAicGFnZS1zZXR1cCIpOworfQorCisvKioKKyAq
IHdlYmtpdF9wcmludF9vcGVyYXRpb25fcnVuX2RpYWxvZzoKKyAqIEBwcmludF9vcGVyYXRpb246
IGEgI1dlYktpdFByaW50T3BlcmF0aW9uCisgKiBAcGFyZW50OiAoYWxsb3ctbm9uZSk6IHRyYW5z
aWVudCBwYXJlbnQgb2YgdGhlIHByaW50IGRpYWxvZworICoKKyAqIFJ1biB0aGUgcHJpbnQgZGlh
bG9nIHVzaW5nIGFuZCBzdGFydCBwcmludGluZyB1c2luZyB0aGUgb3B0aW9ucyBzZWxlY3RlZCBi
eQorICogdGhlIHVzZXIuIFRoaXMgbWV0aG9kIHJldHVybnMgd2hlbiB0aGUgcHJpbnQgb3BlcmF0
aW9uIGlzIGNsb3NlZC4KKyAqIFRoZSBXZWJLaXRQcmludE9wZXJhdGlvbjo6ZG9uZSBzaWduYWwg
aXMgZW1pdHRlZCB3aGVuIHRoZSBwcmludGluZworICogb3BlcmF0aW9uIGZpbmlzaGVzLgorICog
Q3VycmVudCBwcmludCBzZXR0aW5ncyBhbmQgcGFnZSBzZXR1cCBvZiBAcHJpbnRfb3BlcmF0aW9u
IGFyZSB1cGRhdGVkIHdpdGgKKyAqIG9wdGlvbnMgc2VsZWN0ZWQgYnkgdGhlIHVzZXIgd2hlbiBQ
cmludCBidXR0b24gaXMgcHJlc3NlZCBpbiBwcmludCBkaWFsb2cuCisgKiBZb3UgY2FuIGdldCB0
aGUgdXBkYXRlZCBwcmludCBzZXR0aW5ncyBhbmQgcGFnZSBzZXR1cCBieSBjYWxsaW5nCisgKiB3
ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9zZXR0aW5ncygpIGFuZCB3ZWJraXRfcHJp
bnRfb3BlcmF0aW9uX2dldF9wYWdlX3NldHVwKCkKKyAqIGFmdGVyIHRoaXMgbWV0aG9kLgorICov
Cit2b2lkIHdlYmtpdF9wcmludF9vcGVyYXRpb25fcnVuX2RpYWxvZyhXZWJLaXRQcmludE9wZXJh
dGlvbiogcHJpbnRPcGVyYXRpb24sIEd0a1dpbmRvdyogcGFyZW50KQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0lTX1BSSU5UX09QRVJBVElPTihwcmludE9wZXJhdGlvbikpOworCisg
ICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9X
RUJfVklFV19CQVNFKHByaW50T3BlcmF0aW9uLT5wcml2LT53ZWJWaWV3KSk7CisgICAgd2Via2l0
UHJpbnRPcGVyYXRpb25SdW5EaWFsb2dGb3JGcmFtZShwcmludE9wZXJhdGlvbiwgcGFyZW50LCBw
YWdlLT5tYWluRnJhbWUoKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmMxN2E2ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5oCkBAIC0wLDAgKzEsNzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9f
V0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vy
cm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIK
KyNlbmRpZgorCisjaWZuZGVmIFdlYktpdFByaW50T3BlcmF0aW9uX2gKKyNkZWZpbmUgV2ViS2l0
UHJpbnRPcGVyYXRpb25faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXcu
aD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1BSSU5UX09QRVJBVElP
TiAgICAgICAgICAgICh3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9QUklOVF9PUEVSQVRJT04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfUFJJTlRfT1BFUkFUSU9OLCBXZWJLaXRQcmlu
dE9wZXJhdGlvbikpCisjZGVmaW5lIFdFQktJVF9JU19QUklOVF9PUEVSQVRJT04ob2JqKSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfUFJJTlRf
T1BFUkFUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX1BSSU5UX09QRVJBVElPTl9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9QUklOVF9P
UEVSQVRJT04sIFdlYktpdFByaW50T3BlcmF0aW9uQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNf
UFJJTlRfT1BFUkFUSU9OX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9UWVBFX1BSSU5UX09QRVJBVElPTikpCisjZGVmaW5lIFdFQktJVF9QUklO
VF9PUEVSQVRJT05fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX1RZUEVfUFJJTlRfT1BFUkFUSU9OLCBXZWJLaXRQcmludE9wZXJhdGlvbkNs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFByaW50T3BlcmF0aW9uQ2xhc3MgICBXZWJL
aXRQcmludE9wZXJhdGlvbkNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFByaW50T3BlcmF0
aW9uUHJpdmF0ZSBXZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0
UHJpbnRPcGVyYXRpb24geworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgV2ViS2l0UHJpbnRP
cGVyYXRpb25Qcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRQcmludE9wZXJhdGlv
bkNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQ
SSBHVHlwZQord2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfdHlwZSAgICAgICAgICAgKHZvaWQp
OworCitXRUJLSVRfQVBJIFdlYktpdFByaW50T3BlcmF0aW9uICoKK3dlYmtpdF9wcmludF9vcGVy
YXRpb25fbmV3ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcp
OworCitXRUJLSVRfQVBJIEd0a1ByaW50U2V0dGluZ3MgKgord2Via2l0X3ByaW50X29wZXJhdGlv
bl9nZXRfcHJpbnRfc2V0dGluZ3MgKFdlYktpdFByaW50T3BlcmF0aW9uICpwcmludF9vcGVyYXRp
b24pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50
X3NldHRpbmdzIChXZWJLaXRQcmludE9wZXJhdGlvbiAqcHJpbnRfb3BlcmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1ByaW50U2V0dGluZ3MgICAg
ICpwcmludF9zZXR0aW5ncyk7CisKK1dFQktJVF9BUEkgR3RrUGFnZVNldHVwICoKK3dlYmtpdF9w
cmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAgICAgIChXZWJLaXRQcmludE9wZXJhdGlvbiAq
cHJpbnRfb3BlcmF0aW9uKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfcHJpbnRfb3BlcmF0
aW9uX3NldF9wYWdlX3NldHVwICAgICAoV2ViS2l0UHJpbnRPcGVyYXRpb24gKnByaW50X29wZXJh
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtQYWdl
U2V0dXAgICAgICAgICAqcGFnZV9zZXR1cCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3By
aW50X29wZXJhdGlvbl9ydW5fZGlhbG9nICAgICAgICAgKFdlYktpdFByaW50T3BlcmF0aW9uICpw
cmludF9vcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR3RrV2luZG93ICAgICAgICAgICAgKnBhcmVudCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJp
bnRPcGVyYXRpb25Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi41OGRjODA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlLmgKQEAgLTAsMCArMSwyOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFBy
aW50T3BlcmF0aW9uUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0
ZV9oCisKKyNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpbnRP
cGVyYXRpb24uaCIKKwordm9pZCB3ZWJraXRQcmludE9wZXJhdGlvblJ1bkRpYWxvZ0ZvckZyYW1l
KFdlYktpdFByaW50T3BlcmF0aW9uKiwgR3RrV2luZG93KiBwYXJlbnQsIFdlYktpdDo6V2ViRnJh
bWVQcm94eSopOworCisjZW5kaWYgLy8gV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNw
cAppbmRleCBmY2ZkZGRiLi43NWQ4NWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCkBAIC0xMjYsNiArMTI2LDExIEBAIHN0
YXRpYyB2b2lkIHNldFdpbmRvd0ZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS1JlY3QgZnJhbWUsIGNv
bnN0IHZvaWQqKQogICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRHZW9tZXRyeSh3aW5kb3dQ
cm9wZXJ0aWVzLCAmZ2VvbWV0cnkpOwogfQogCitzdGF0aWMgdm9pZCBwcmludEZyYW1lKFdLUGFn
ZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkKikKK3sKKyAgICB3ZWJraXRX
ZWJWaWV3UHJpbnRGcmFtZShXRUJLSVRfV0VCX1ZJRVcodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0
KCkpLCBmcmFtZSk7Cit9CisKIHZvaWQgd2Via2l0VUlDbGllbnRBdHRhY2hVSUNsaWVudFRvUGFn
ZShXZWJLaXRVSUNsaWVudCogdWlDbGllbnQsIFdLUGFnZVJlZiB3a1BhZ2UpCiB7CiAgICAgV0tQ
YWdlVUlDbGllbnQgd2tVSUNsaWVudCA9IHsKQEAgLTE2NSw3ICsxNzAsNyBAQCB2b2lkIHdlYmtp
dFVJQ2xpZW50QXR0YWNoVUlDbGllbnRUb1BhZ2UoV2ViS2l0VUlDbGllbnQqIHVpQ2xpZW50LCBX
S1BhZ2VSZWYgd2tQYQogICAgICAgICAwLCAvLyBmb290ZXJIZWlnaHQKICAgICAgICAgMCwgLy8g
ZHJhd0hlYWRlcgogICAgICAgICAwLCAvLyBkcmF3Rm9vdGVyCi0gICAgICAgIDAsIC8vIHByaW50
RnJhbWUKKyAgICAgICAgcHJpbnRGcmFtZSwKICAgICAgICAgMCwgLy8gcnVuTW9kYWwKICAgICAg
ICAgMCwgLy8gZGlkQ29tcGxldGVSdWJiZXJCYW5kRm9yTWFpbkZyYW1lCiAgICAgICAgIDAsIC8v
IHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggZmQyYmI1MS4uNDc4ZDRl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJXZWJLaXRFbnVtVHlwZXMuaCIK
ICNpbmNsdWRlICJXZWJLaXRFcnJvci5oIgogI2luY2x1ZGUgIldlYktpdE1hcnNoYWwuaCIKKyNp
bmNsdWRlICJXZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRT
ZXR0aW5nc1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRVSUNsaWVudC5oIgogI2luY2x1ZGUg
IldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCkBAIC01OCw2ICs1OSw4IEBAIGVudW0gewogICAg
IFNDUklQVF9DT05GSVJNLAogICAgIFNDUklQVF9QUk9NUFQsCiAKKyAgICBQUklOVF9SRVFVRVNU
RUQsCisKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtNTU3LDYgKzU2MCwzMSBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZp
ZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMywKICAg
ICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLCBHX1RZ
UEVfUE9JTlRFUik7CiAKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpwcmludC1yZXF1
ZXN0ZWQ6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhl
IHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQHByaW50X29wZXJhdGlvbjogdGhlICNXZWJLaXRQ
cmludE9wZXJhdGlvbiB0aGF0IHdpbGwgaGFuZGxlIHRoZSBwcmludCByZXF1ZXN0CisgICAgICoK
KyAgICAgKiBFbWl0dGVkIHdoZW4gcHJpbnRpbmcgaXMgcmVxdWVzdGVkIG9uIEB3ZWJfdmlldywg
dXN1YWxseSBieSBhIGphdmFzY3JpcHQgY2FsbCwKKyAgICAgKiBiZWZvcmUgdGhlIHByaW50IGRp
YWxvZyBpcyBzaG93bi4gVGhpcyBzaWduYWwgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBpbml0aWFs
CisgICAgICogcHJpbnQgc2V0dGluZ3MgYW5kIHBhZ2Ugc2V0dXAgb2YgQHByaW50X29wZXJhdGlv
biwgYnkgY2FsbGluZworICAgICAqIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3Nl
dHRpbmdzKCkgYW5kIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3BhZ2Vfc2V0dXAoKS4KKyAg
ICAgKgorICAgICAqIFlvdSBjYW4gY29ubmVjdCB0byB0aGlzIHNpZ25hbCBhbmQgcmV0dXJuICVU
UlVFIHRvIGNhbmNlbCB0aGUgcHJpbnQgb3BlcmF0aW9uLgorICAgICAqCisgICAgICogUmV0dXJu
czogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRo
ZSBldmVudC4KKyAgICAgKiAgICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVy
LgorICAgICAqLworICAgIHNpZ25hbHNbUFJJTlRfUkVRVUVTVEVEXSA9CisgICAgICAgIGdfc2ln
bmFsX25ldygicHJpbnQtcmVxdWVzdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9S
VU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJW
aWV3Q2xhc3MsIHByaW50X3JlcXVlc3RlZCksCisgICAgICAgICAgICAgICAgICAgICBnX3NpZ25h
bF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAsCisgICAgICAgICAgICAgICAgICAgICB3ZWJr
aXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVf
Qk9PTEVBTiwgMSwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1BSSU5UX09QRVJB
VElPTik7CisKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3TG9hZENoYW5nZWQoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCkKQEAgLTY2Miw2ICs2OTAsMTgg
QEAgV0tTdHJpbmdSZWYgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgY29uc3QgQ1N0cmkKICAgICByZXR1cm4gdGV4dCA/IFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKHRleHQuZ2V0KCkpIDogMDsKIH0KIAordm9pZCB3ZWJraXRXZWJW
aWV3UHJpbnRGcmFtZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXS0ZyYW1lUmVmIHdrRnJhbWUp
Cit7CisgICAgR1JlZlB0cjxXZWJLaXRQcmludE9wZXJhdGlvbj4gcHJpbnRPcGVyYXRpb24gPSBh
ZG9wdEdSZWYod2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXcod2ViVmlldykpOworICAgIGdib29s
ZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tQUklO
VF9SRVFVRVNURURdLCAwLCBwcmludE9wZXJhdGlvbi5nZXQoKSwgJnJldHVyblZhbHVlKTsKKyAg
ICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QocHJpbnRPcGVyYXRpb24uZ2V0KCksICJkb25lIiwgR19DQUxMQkFDSyhnX29iamVjdF91bnJl
ZiksIDApOworICAgIHdlYmtpdFByaW50T3BlcmF0aW9uUnVuRGlhbG9nRm9yRnJhbWUocHJpbnRP
cGVyYXRpb24ubGVha1JlZigpLCAwLCB0b0ltcGwod2tGcmFtZSkpOworfQorCiAvKioKICAqIHdl
YmtpdF93ZWJfdmlld19uZXc6CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IGEyNWM0MzguLmJmYmEyY2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTMwLDkg
KzMwLDkgQEAKIAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXRXZWJDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVxdWVzdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0V2ViQ29udGV4dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaD4KIApAQCAtODEsMjYg
KzgxLDI5IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlldyB7CiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdD
bGFzcyB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyBwYXJlbnQ7CiAKLSAgICB2b2lkICAg
ICAgICgqIGxvYWRfY2hhbmdlZCkgICAoV2ViS2l0V2ViVmlldyAgKndlYl92aWV3LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRMb2FkRXZlbnQgbG9hZF9ldmVudCk7
Ci0gICAgZ2Jvb2xlYW4gICAoKiBsb2FkX2ZhaWxlZCkgICAgKFdlYktpdFdlYlZpZXcgICp3ZWJf
dmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TG9hZEV2ZW50
IGxvYWRfZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdj
aGFyICAgICpmYWlsaW5nX3VyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0Vycm9yICAgICAgICAgKmVycm9yKTsKLQotICAgIEd0a1dpZGdldCAqKCogY3JlYXRlKSAgICAg
ICAgIChXZWJLaXRXZWJWaWV3ICAqd2ViX3ZpZXcpOwotICAgIHZvaWQgICAgICAgKCogcmVhZHlf
dG9fc2hvdykgIChXZWJLaXRXZWJWaWV3ICAqd2ViX3ZpZXcpOwotICAgIHZvaWQgICAgICAgKCog
Y2xvc2UpICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAqd2ViX3ZpZXcpOwotCi0gICAgZ2Jvb2xl
YW4gICAoKiBzY3JpcHRfYWxlcnQpICAgKFdlYktpdFdlYlZpZXcgICp3ZWJfdmlldywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgKm1lc3NhZ2UpOwot
ICAgIGdib29sZWFuICAgKCogc2NyaXB0X2NvbmZpcm0pIChXZWJLaXRXZWJWaWV3ICAqd2ViX3Zp
ZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICpt
ZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAg
ICAqY29uZmlybWVkKTsKLSAgICBnYm9vbGVhbiAgICgqIHNjcmlwdF9wcm9tcHQpICAoV2ViS2l0
V2ViVmlldyAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciAgICAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2NoYXIgICAgKmRlZmF1bHRfdGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2NoYXIgICAgICAgICAqKnRleHQpOworICAgIHZvaWQgICAgICAgKCogbG9h
ZF9jaGFuZ2VkKSAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRMb2FkRXZlbnQgICAgICAgIGxvYWRfZXZl
bnQpOworICAgIGdib29sZWFuICAgKCogbG9hZF9mYWlsZWQpICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRMb2FkRXZlbnQgICAgICAgIGxvYWRfZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqZmFpbGluZ191cmksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAqZXJyb3IpOwor
CisgICAgR3RrV2lkZ2V0ICooKiBjcmVhdGUpICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAg
ICAqd2ViX3ZpZXcpOworICAgIHZvaWQgICAgICAgKCogcmVhZHlfdG9fc2hvdykgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgKndlYl92aWV3KTsKKyAgICB2b2lkICAgICAgICgqIGNsb3NlKSAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7CisKKyAgICBnYm9vbGVhbiAg
ICgqIHNjcmlwdF9hbGVydCkgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICpt
ZXNzYWdlKTsKKyAgICBnYm9vbGVhbiAgICgqIHNjcmlwdF9jb25maXJtKSAoV2ViS2l0V2ViVmll
dyAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgICAgICAgICAgICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgKmNvbmZpcm1lZCk7CisgICAgZ2Jvb2xl
YW4gICAoKiBzY3JpcHRfcHJvbXB0KSAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAg
ICAqbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgICAgICAgICAgICpkZWZhdWx0X3RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdjaGFyICAgICAgICAgICAgICAgICoqdGV4dCk7CisKKyAgICBnYm9vbGVhbiAgICgq
IHByaW50X3JlcXVlc3RlZCkgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFByaW50T3BlcmF0aW9uICpwcmlu
dF9vcGVyYXRpb24pOwogCiAgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwog
ICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwpAQCAtMjA3LDYgKzIxMCw3IEBA
IHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCAgICAgICAgICAgICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAgICAgICp3ZWJfdmllCiBXRUJLSVRfQVBJIGdkb3VibGUKIHdlYmtpdF93ZWJf
dmlld19nZXRfem9vbV9sZXZlbCAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgICp3ZWJfdmlldyk7CiAKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaApp
bmRleCA1YzgxNjFhLi5mYzE0Y2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTQyLDUgKzQyLDYgQEAg
dm9pZCB3ZWJraXRXZWJWaWV3Q2xvc2VQYWdlKFdlYktpdFdlYlZpZXcqKTsKIHZvaWQgd2Via2l0
V2ViVmlld1J1bkphdmFTY3JpcHRBbGVydChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYg
bWVzc2FnZSk7CiBib29sIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybShXZWJLaXRX
ZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7CiBXS1N0cmluZ1JlZiB3ZWJraXRXZWJW
aWV3UnVuSmF2YVNjcmlwdFByb21wdChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVz
c2FnZSwgY29uc3QgQ1N0cmluZyYgZGVmYXVsdFRleHQpOwordm9pZCB3ZWJraXRXZWJWaWV3UHJp
bnRGcmFtZShXZWJLaXRXZWJWaWV3KiwgV0tGcmFtZVJlZik7CiAKICNlbmRpZiAvLyBXZWJLaXRX
ZWJWaWV3UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCBjNTEzOTU5Li44OTRjZmRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTIwLDYgKzIwLDcgQEAKICAgICA8eGk6aW5jbHVk
ZSBocmVmPSJ4bWwvV2ViS2l0VVJJUmVxdWVzdC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVm
PSJ4bWwvV2ViS2l0VVJJUmVzcG9uc2UueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s
L1dlYktpdFdpbmRvd1Byb3BlcnRpZXMueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s
L1dlYktpdFByaW50T3BlcmF0aW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRFcnJvci54bWwiLz4KICAgPC9jaGFwdGVyPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4
dAppbmRleCA4NDQ2ODk0Li41YjE3YTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAg
LTI4NSw2ICsyODUsMzAgQEAgd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF90eXBlCiA8L1NF
Q1RJT04+CiAKIDxTRUNUSU9OPgorPEZJTEU+V2ViS2l0UHJpbnRPcGVyYXRpb248L0ZJTEU+CitX
ZWJLaXRQcmludE9wZXJhdGlvbgord2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXcKK3dlYmtpdF9w
cmludF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzCit3ZWJraXRfcHJpbnRfb3BlcmF0aW9u
X3NldF9wcmludF9zZXR0aW5ncword2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFnZV9zZXR1
cAord2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcGFnZV9zZXR1cAord2Via2l0X3ByaW50X29w
ZXJhdGlvbl9ydW5fZGlhbG9nCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0UHJpbnRP
cGVyYXRpb25DbGFzcworV0VCS0lUX1RZUEVfUFJJTlRfT1BFUkFUSU9OCitXRUJLSVRfUFJJTlRf
T1BFUkFUSU9OCitXRUJLSVRfSVNfUFJJTlRfT1BFUkFUSU9OCitXRUJLSVRfUFJJTlRfT1BFUkFU
SU9OX0NMQVNTCitXRUJLSVRfSVNfUFJJTlRfT1BFUkFUSU9OX0NMQVNTCitXRUJLSVRfUFJJTlRf
T1BFUkFUSU9OX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0UHJpbnRP
cGVyYXRpb25Qcml2YXRlCit3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF90eXBlCis8L1NFQ1RJ
T04+CisKKzxTRUNUSU9OPgogPEZJTEU+V2ViS2l0RXJyb3I8L0ZJTEU+CiBXRUJLSVRfTkVUV09S
S19FUlJPUgogV0VCS0lUX1BMVUdJTl9FUlJPUgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQppbmRleCBkOTEyYjY1Li4zNTRl
MjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9H
TlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbQpAQCAtMyw3ICszLDggQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3Jh
bXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3IFwKIAlQcm9ncmFtcy9XZWJLaXQy
QVBJVGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQ
SVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rl
c3RCYWNrRm9yd2FyZExpc3QKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEJhY2tGb3J3
YXJkTGlzdCBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RQcmludGluZwogCiBub2lu
c3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQogd2Via2l0Ml90ZXN0c19jcHBmbGFncyA9IFwK
QEAgLTc2LDMgKzc3LDkgQEAgUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2Fy
ZExpc3RfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MKIFByb2dyYW1zX1dlYktp
dDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xk
YWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfTERGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQogCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNf
VGVzdFByaW50aW5nX1NPVVJDRVMgPSBcCisgICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0UHJpbnRpbmdfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCitQcm9n
cmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFByaW50aW5nX0xEQUREID0gJCh3ZWJraXQyX3Rlc3Rz
X2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RQcmludGluZ19MREZMQUdTID0g
JCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UHJpbnRpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI4YmJjMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UHJpbnRpbmcuY3BwCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKworc3RhdGljIHZvaWQgdGVzdFByaW50T3BlcmF0aW9uUHJpbnRTZXR0aW5n
cyhXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktp
dFByaW50T3BlcmF0aW9uPiBwcmludE9wZXJhdGlvbiA9IGFkb3B0R1JlZih3ZWJraXRfcHJpbnRf
b3BlcmF0aW9uX25ldyh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHByaW50T3BlcmF0aW9uLmdldCgpKSk7
CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGlu
Z3MocHJpbnRPcGVyYXRpb24uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29w
ZXJhdGlvbl9nZXRfcGFnZV9zZXR1cChwcmludE9wZXJhdGlvbi5nZXQoKSkpOworCisgICAgR1Jl
ZlB0cjxHdGtQcmludFNldHRpbmdzPiBwcmludFNldHRpbmdzID0gYWRvcHRHUmVmKGd0a19wcmlu
dF9zZXR0aW5nc19uZXcoKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyhHX09CSkVDVChwcmludFNldHRpbmdzLmdldCgpKSk7CisKKyAgICBHUmVmUHRy
PEd0a1BhZ2VTZXR1cD4gcGFnZVNldHVwID0gYWRvcHRHUmVmKGd0a19wYWdlX3NldHVwX25ldygp
KTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKHBhZ2VTZXR1cC5nZXQoKSkpOworCisgICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRf
cHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24uZ2V0KCksIHByaW50U2V0dGluZ3MuZ2V0KCkp
OworICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRp
b24uZ2V0KCksIHBhZ2VTZXR1cC5nZXQoKSk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfcHJpbnRf
b3BlcmF0aW9uX2dldF9wcmludF9zZXR0aW5ncyhwcmludE9wZXJhdGlvbi5nZXQoKSkgPT0gcHJp
bnRTZXR0aW5ncy5nZXQoKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3ByaW50X29wZXJhdGlvbl9n
ZXRfcGFnZV9zZXR1cChwcmludE9wZXJhdGlvbi5nZXQoKSkgPT0gcGFnZVNldHVwLmdldCgpKTsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYlZpZXdQcmludFJlcXVlc3RlZENhbGxiYWNrKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFByaW50T3BlcmF0aW9uKiBwcmludE9wZXJhdGlvbiwg
V2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgZ19hc3NlcnQod2ViVmlldyA9PSB0ZXN0LT5tX3dl
YlZpZXcpOworCisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1BSSU5UX09QRVJBVElPTihwcmludE9w
ZXJhdGlvbikpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNo
ZXMoR19PQkpFQ1QocHJpbnRPcGVyYXRpb24pKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfcHJp
bnRfb3BlcmF0aW9uX2dldF9wcmludF9zZXR0aW5ncyhwcmludE9wZXJhdGlvbikpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wYWdlX3NldHVwKHByaW50T3BlcmF0
aW9uKSk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworCisgICAg
cmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UHJpbnRSZXF1ZXN0ZWQo
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgZ19zaWduYWxfY29ubmVj
dCh0ZXN0LT5tX3dlYlZpZXcsICJwcmludC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLKHdlYlZpZXdQ
cmludFJlcXVlc3RlZENhbGxiYWNrKSwgdGVzdCk7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1s
Pjxib2R5IG9uTG9hZD1cInByaW50KCk7XCI+V2ViS2l0R1RLKyBwcmludGluZyB0ZXN0PC9ib2R5
PjwvaHRtbD4iLCAwKTsKKyAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9vcCk7Cit9
CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRQcmlu
dE9wZXJhdGlvbiIsICJwcmludGluZy1zZXR0aW5ncyIsIHRlc3RQcmludE9wZXJhdGlvblByaW50
U2V0dGluZ3MpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicHJpbnQt
cmVxdWVzdGVkIiwgdGVzdFdlYlZpZXdQcmludFJlcXVlc3RlZCk7Cit9CisKK3ZvaWQgYWZ0ZXJB
bGwoKQoreworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmlu
ZGV4IGFiMGUwYTguLjI1Y2EyZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERl
ZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0RXJyb3IuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFByaW50T3Bl
cmF0aW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0VVJJUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJ
UmVzcG9uc2UuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3dlYmtpdDJtYXJzaGFsLmxpc3QgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQybWFyc2hhbC5saXN0CmluZGV4IDg5YzI1MGUuLjgxM2Q1OWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdApAQCAt
MSw0ICsxLDUgQEAKIEJPT0xFQU46RU5VTSxTVFJJTkcsUE9JTlRFUgorQk9PTEVBTjpPQkpFQ1QK
IEJPT0xFQU46U1RSSU5HCiBCT09MRUFOOlNUUklORyxQT0lOVEVSCiBCT09MRUFOOlNUUklORyxT
VFJJTkcsUE9JTlRFUgo=
</data>
<flag name="commit-queue"
          id="123666"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126940</attachid>
            <date>2012-02-14 02:13:50 -0800</date>
            <delta_ts>2012-02-14 02:43:10 -0800</delta_ts>
            <desc>Patch updated to apply on current git master</desc>
            <filename>wk2-print-operation2.diff</filename>
            <type>text/plain</type>
            <size>38206</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1OGYyODZlLi4xMDQ0NGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTItMDItMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBXZWJLaXRQcmludE9wZXJhdGlvbiB0byBXZWJLaXQyIEdU
SysgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJWaWV3
RGVzdHJveWVkKTogRGVsZXRlIHRoZSBwcmludCBvcGVyYXRpb24gd2hlbiB0aGUgdmlldworICAg
ICAgICB3aWRnZXQgYXNzb2NpYXRlZCBpcyBkZXN0cm95ZWQuCisgICAgICAgICh3ZWJraXRQcmlu
dE9wZXJhdGlvbkNvbnN0cnVjdGVkKTogQ29ubmVjdCB0byBkZXN0cm95IHNpZ25hbCBvZgorICAg
ICAgICBhc3NvY2lhdGVkIHdlYiB2aWV3LgorICAgICAgICAod2Via2l0UHJpbnRPcGVyYXRpb25H
ZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRQcmludE9wZXJhdGlvblNldFByb3BlcnR5KToK
KyAgICAgICAgKHdlYmtpdF9wcmludF9vcGVyYXRpb25faW5pdCk6CisgICAgICAgICh3ZWJraXRf
cHJpbnRfb3BlcmF0aW9uX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0UHJpbnRPcGVyYXRp
b25SdW5EaWFsb2dVbml4KTogVXNlIEd0a1ByaW50VW5peERpYWxvZyB0bworICAgICAgICBzaG93
IHRoZSBwcmludGluZyBkaWFsb2cgaW4gVU5JWCBwbGF0Zm9ybXMuCisgICAgICAgICh3ZWJraXRQ
cmludE9wZXJhdGlvblJ1bkRpYWxvZ1dpbjMyKTogRW1wdHksIG5vdCBpbXBsZW1lbnRlZCB5ZXQu
CisgICAgICAgIChkcmF3UGFnZXNGb3JQcmludGluZ0NvbXBsZXRlZCk6IENhbGxiYWNrIGNhbGxl
ZCB3aGVuIHByaW50aW5nCisgICAgICAgIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQgaW4gdGhlIHdl
YiBwcm9jZXNzLgorICAgICAgICAod2Via2l0UHJpbnRPcGVyYXRpb25SdW5EaWFsb2dGb3JGcmFt
ZSk6IFJ1biB0aGUgcHJpbnRpbmcgZGlhbG9nCisgICAgICAgIGFuZCBzdGFydCBwcmludGluZyB0
aGUgZ2l2ZW4gZnJhbWUuCisgICAgICAgICh3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX25ldyk6IENy
ZWF0ZSBhIG5ldyBwcmludCBvcGVyYXRpb24gZm9yIHRoZQorICAgICAgICBnaXZlbiB3ZWIgdmll
dy4KKyAgICAgICAgKHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzKToK
KyAgICAgICAgKHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKToKKyAg
ICAgICAgKHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXApOgorICAgICAgICAo
d2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcGFnZV9zZXR1cCk6CisgICAgICAgICh3ZWJraXRf
cHJpbnRfb3BlcmF0aW9uX3J1bl9kaWFsb2cpOiBSdW4gdGhlIHByaW50IGRpYWxvZyB0byBwcmlu
dAorICAgICAgICB0aGUgd2ViIHZpZXcgbWFpbiBmcmFtZS4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUuaDogQWRkZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwOgorICAgICAgICAocHJpbnRG
cmFtZSk6IENhbGwgd2Via2l0V2ViVmlld1ByaW50RnJhbWUuCisgICAgICAgIChhdHRhY2hVSUNs
aWVudFRvVmlldyk6IEFkZCBpbXBsZW1lbnRhdGlvbiBmb3IKKyAgICAgICAgcHJpbnRGcmFtZSBj
YWxsYmFjay4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoK
KyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KTogQWRkIFdlYktpdFdlYlZpZXc6
OnByaW50LXJlcXVlc3RlZAorICAgICAgICBzaWduYWwuCisgICAgICAgICh3ZWJraXRXZWJWaWV3
UHJpbnRGcmFtZSk6IEVtaXQgcHJpbnQtcmVxdWVzdGVkIGFuZCBzaG93IHRoZSBwcmludAorICAg
ICAgICBkaWFsb2cgdG8gcHJpbnQgdGhlIGZyYW1lIHdoZW4gbm90IHNpZ25hbCBpcyBub3QgaGFu
ZGxlZCBieSB1c2VyLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6IEFk
ZCBuZXcgc2VjdGlvbiBmb3IKKyAgICAgICAgV2ViS2l0UHJpbnRPcGVyYXRpb24uCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkIG5l
dyBzeW1ib2xzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHA6
IEFkZGVkLgorICAgICAgICAodGVzdFByaW50T3BlcmF0aW9uUHJpbnRTZXR0aW5ncyk6CisgICAg
ICAgICh3ZWJWaWV3UHJpbnRSZXF1ZXN0ZWRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0V2ViVmll
d1ByaW50UmVxdWVzdGVkKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFs
bCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOiBJbmNsdWRlIFdlYktp
dFByaW50T3BlcmF0aW9uLmguCisKIDIwMTItMDItMTMgIFcuIEphbWVzIE1hY0xlYW4gIDx3am1h
Y2xlYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIG9ic29sZXRl
IHpvb20gYW5pbWF0aW9uIHBhdGh3YXkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDNiOGU3YmQu
LmNmNzA1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC05MSw2ICs5MSw3IEBAIGxpYndlYmtp
dDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRIaXRUZXN0UmVzdWx0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24uaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFVSSVJlcXVlc3QuaCBcCkBAIC01NTMsNiArNTU0LDkgQEAgbGlid2Via2l0Mmd0
a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJT
SU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xp
Y3lEZWNpc2lvblByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UG9saWN5Q2xpZW50LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UG9saWN5Q2xpZW50LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlLmggXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uY3BwIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaAppbmRleCA3
OWIzMzgzLi44YzNlZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXREZWZpbmVzLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RGVmaW5lcy5oCkBAIC0zMiw2ICszMiw4IEBACiAKICNpbmNsdWRlIDxnbGliLmg+
CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRQcmludE9wZXJhdGlvbiBXZWJLaXRQcmludE9wZXJh
dGlvbjsKKwogI2lmZGVmIEdfT1NfV0lOMzIKICMgICAgaWZkZWYgQlVJTERJTkdfV0VCS0lUCiAj
ICAgICAgICBkZWZpbmUgV0VCS0lUX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzdhY2YzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJp
bnRPcGVyYXRpb24uY3BwCkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRQcmlu
dE9wZXJhdGlvbi5oIgorCisjaW5jbHVkZSAiUHJpbnRJbmZvLmgiCisjaW5jbHVkZSAiV2ViS2l0
UHJpbnRPcGVyYXRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxnbGli
L2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworI2lmZGVm
IEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKKyNpbmNsdWRlIDxndGsvZ3RrdW5peHByaW50Lmg+Cisj
ZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworZW51bSB7CisgICAgUFJPUF8wLAor
CisgICAgUFJPUF9XRUJfVklFVywKKyAgICBQUk9QX1BSSU5UX1NFVFRJTkdTLAorICAgIFBST1Bf
UEFHRV9TRVRVUAorfTsKKworZW51bSB7CisgICAgRE9ORSwKKworICAgIExBU1RfU0lHTkFMCit9
OworCitzdHJ1Y3QgX1dlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZSB7CisgICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldzsKKyAgICBndWxvbmcgd2ViVmlld0Rlc3Ryb3llZElkOworCisgICAgR1Jl
ZlB0cjxHdGtQcmludFNldHRpbmdzPiBwcmludFNldHRpbmdzOworICAgIEdSZWZQdHI8R3RrUGFn
ZVNldHVwPiBwYWdlU2V0dXA7Cit9OworCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05B
TF0gPSB7IDAsIH07CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0UHJpbnRPcGVyYXRpb24sIHdlYmtp
dF9wcmludF9vcGVyYXRpb24sIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdFBy
aW50T3BlcmF0aW9uRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFByaW50
T3BlcmF0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9QUklOVF9PUEVSQVRJT04ob2JqZWN0KS0+
cHJpdjsKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QocHJpdi0+d2ViVmlldywgcHJp
di0+d2ViVmlld0Rlc3Ryb3llZElkKTsKKworICAgIHByaXYtPn5XZWJLaXRQcmludE9wZXJhdGlv
blByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlZpZXdE
ZXN0cm95ZWQoR3RrV2lkZ2V0KiB3ZWJWaWV3LCBHT2JqZWN0KiBwcmludE9wZXJhdGlvbikKK3sK
KyAgICBnX29iamVjdF91bnJlZihwcmludE9wZXJhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdFByaW50T3BlcmF0aW9uQ29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQoreworICAgIFdl
YktpdFByaW50T3BlcmF0aW9uKiBwcmludE9wZXJhdGlvbiA9IFdFQktJVF9QUklOVF9PUEVSQVRJ
T04ob2JqZWN0KTsKKyAgICBXZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUqIHByaXYgPSBwcmlu
dE9wZXJhdGlvbi0+cHJpdjsKKworICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfcHJpbnRf
b3BlcmF0aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQorICAgICAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9i
amVjdCk7CisKKyAgICBwcml2LT53ZWJWaWV3RGVzdHJveWVkSWQgPSBnX3NpZ25hbF9jb25uZWN0
KHByaXYtPndlYlZpZXcsICJkZXN0cm95IiwgR19DQUxMQkFDSyh3ZWJWaWV3RGVzdHJveWVkKSwg
cHJpbnRPcGVyYXRpb24pOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRQcmludE9wZXJhdGlvbkdl
dFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0UHJpbnRPcGVyYXRpb24qIHByaW50
T3BlcmF0aW9uID0gV0VCS0lUX1BSSU5UX09QRVJBVElPTihvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfV0VCX1ZJRVc6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9vYmplY3QodmFsdWUsIHByaW50T3BlcmF0aW9uLT5wcml2LT53ZWJWaWV3KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1BSSU5UX1NFVFRJTkdTOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHByaW50T3BlcmF0aW9uLT5wcml2LT5wcmludFNldHRpbmdzLmdldCgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBR0VfU0VUVVA6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgcHJpbnRPcGVyYXRpb24tPnByaXYtPnBhZ2VTZXR1cC5n
ZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFByaW50T3BlcmF0aW9uU2V0UHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRpb24g
PSBXRUJLSVRfUFJJTlRfT1BFUkFUSU9OKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkg
eworICAgIGNhc2UgUFJPUF9XRUJfVklFVzoKKyAgICAgICAgcHJpbnRPcGVyYXRpb24tPnByaXYt
PndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUklOVF9TRVRUSU5HUzoKKyAgICAgICAgd2Vi
a2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24sIEdU
S19QUklOVF9TRVRUSU5HUyhnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9QQUdFX1NFVFVQOgorICAgICAgICB3ZWJraXRfcHJpbnRfb3Bl
cmF0aW9uX3NldF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9uLCBHVEtfUEFHRV9TRVRVUChnX3Zh
bHVlX2dldF9vYmplY3QodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwg
cGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9wcmludF9vcGVyYXRp
b25faW5pdChXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRpb24pCit7CisgICAgV2Vi
S2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKHByaW50T3BlcmF0aW9uLCBXRUJLSVRfVFlQRV9QUklOVF9PUEVSQVRJT04sIFdlYktpdFBy
aW50T3BlcmF0aW9uUHJpdmF0ZSk7CisgICAgcHJpbnRPcGVyYXRpb24tPnByaXYgPSBwcml2Owor
ICAgIG5ldyAocHJpdikgV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlKCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9wcmludF9vcGVyYXRpb25fY2xhc3NfaW5pdChXZWJLaXRQcmludE9wZXJh
dGlvbkNsYXNzKiBwcmludE9wZXJhdGlvbkNsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ09i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocHJpbnRPcGVyYXRpb25DbGFzcyk7CisgICAgZ09i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFByaW50T3BlcmF0aW9uRmluYWxpemU7CisgICAg
Z09iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdFByaW50T3BlcmF0aW9uQ29uc3RydWN0
ZWQ7CisgICAgZ09iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRQcmludE9wZXJhdGlv
bkdldFByb3BlcnR5OworICAgIGdPYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0UHJp
bnRPcGVyYXRpb25TZXRQcm9wZXJ0eTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFByaW50T3Bl
cmF0aW9uOndlYi12aWV3OgorICAgICAqCisgICAgICogVGhlICNXZWJLaXRXZWJWaWV3IHRoYXQg
d2lsbCBiZSBwcmludGVkLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9XRUJfVklFVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoIndlYi12aWV3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiV2ViIFZpZXciKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHdlYiB2aWV3
IHRoYXQgd2lsbCBiZSBwcmludGVkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9WSUVXLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNU
X09OTFkpKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRQcmludE9wZXJhdGlvbjpwcmludC1z
ZXR0aW5nczoKKyAgICAgKgorICAgICAqIFRoZSBpbml0aWFsICNHdGtQcmludFNldHRpbmdzIGZv
ciB0aGUgcHJpbnQgb3BlcmF0aW9uLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJPUF9QUklOVF9TRVRUSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInByaW50LXNldHRpbmdzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiUHJpbnQgU2V0
dGluZ3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiVGhlIGluaXRpYWwgcHJpbnQgc2V0dGluZ3MgZm9yIHRoZSBwcmludCBvcGVy
YXRpb24iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1RLX1RZUEVfUFJJTlRfU0VUVElOR1MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRQcmludE9wZXJhdGlvbjpwYWdlLXNldHVwOgorICAg
ICAqCisgICAgICogVGhlIGluaXRpYWwgI0d0a1BhZ2VTZXR1cCBmb3IgdGhlIHByaW50IG9wZXJh
dGlvbi4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmpl
Y3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1BBR0Vf
U0VUVVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgicGFnZS1zZXR1cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJQYWdlIFNldHVwIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgaW5pdGlhbCBw
YWdlIHNldHVwIGZvciB0aGUgcHJpbnQgb3BlcmF0aW9uIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9QQUdFX1NFVFVQ
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0UHJp
bnRPcGVyYXRpb246OmRvbmU6CisgICAgICogQHByaW50X29wZXJhdGlvbjogdGhlICNXZWJLaXRQ
cmludE9wZXJhdGlvbiBvbiB3aGljaCB0aGUgc2lnbmFsIHdhcyBlbWl0dGVkCisgICAgICoKKyAg
ICAgKiBFbWl0dGVkIHdoZW4gdGhlIHByaW50IG9wZXJhdGlvbiBoYXMgZmluaXNoZWQgZG9pbmcg
ZXZlcnl0aGluZworICAgICAqIHJlcXVpcmVkIGZvciBwcmludGluZy4KKyAgICAgKi8KKyAgICBz
aWduYWxzW0RPTkVdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJkb25lIiwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RDbGFzcyksCisgICAgICAgICAgICAg
ICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAs
CisgICAgICAgICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAg
ICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKworICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShwcmludE9wZXJhdGlvbkNsYXNzLCBzaXplb2YoV2ViS2l0UHJpbnRPcGVyYXRp
b25Qcml2YXRlKSk7Cit9CisKKyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCitzdGF0aWMg
Ym9vbCB3ZWJraXRQcmludE9wZXJhdGlvblJ1bkRpYWxvZ1VuaXgoV2ViS2l0UHJpbnRPcGVyYXRp
b24qIHByaW50T3BlcmF0aW9uLCBHdGtXaW5kb3cqIHBhcmVudCkKK3sKKyAgICBHdGtQcmludFVu
aXhEaWFsb2cqIHByaW50RGlhbG9nID0gR1RLX1BSSU5UX1VOSVhfRElBTE9HKGd0a19wcmludF91
bml4X2RpYWxvZ19uZXcoMCwgcGFyZW50KSk7CisgICAgZ3RrX3ByaW50X3VuaXhfZGlhbG9nX3Nl
dF9tYW51YWxfY2FwYWJpbGl0aWVzKHByaW50RGlhbG9nLCBzdGF0aWNfY2FzdDxHdGtQcmludENh
cGFiaWxpdGllcz4oMCkpOworCisgICAgV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlKiBwcml2
ID0gcHJpbnRPcGVyYXRpb24tPnByaXY7CisgICAgaWYgKHByaXYtPnByaW50U2V0dGluZ3MpCisg
ICAgICAgIGd0a19wcmludF91bml4X2RpYWxvZ19zZXRfc2V0dGluZ3MocHJpbnREaWFsb2csIHBy
aXYtPnByaW50U2V0dGluZ3MuZ2V0KCkpOworCisgICAgaWYgKHByaXYtPnBhZ2VTZXR1cCkKKyAg
ICAgICAgZ3RrX3ByaW50X3VuaXhfZGlhbG9nX3NldF9wYWdlX3NldHVwKHByaW50RGlhbG9nLCBw
cml2LT5wYWdlU2V0dXAuZ2V0KCkpOworCisgICAgZ3RrX3ByaW50X3VuaXhfZGlhbG9nX3NldF9l
bWJlZF9wYWdlX3NldHVwKHByaW50RGlhbG9nLCBUUlVFKTsKKworICAgIGJvb2wgcmV0dXJuVmFs
dWUgPSBmYWxzZTsKKyAgICBpZiAoZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhwcmludERpYWxv
ZykpID09IEdUS19SRVNQT05TRV9PSykgeworICAgICAgICBwcml2LT5wcmludFNldHRpbmdzID0g
YWRvcHRHUmVmKGd0a19wcmludF91bml4X2RpYWxvZ19nZXRfc2V0dGluZ3MocHJpbnREaWFsb2cp
KTsKKyAgICAgICAgcHJpdi0+cGFnZVNldHVwID0gZ3RrX3ByaW50X3VuaXhfZGlhbG9nX2dldF9w
YWdlX3NldHVwKHByaW50RGlhbG9nKTsKKyAgICAgICAgcmV0dXJuVmFsdWUgPSB0cnVlOworICAg
IH0KKworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKHByaW50RGlhbG9nKSk7CisK
KyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisjZW5kaWYgLy8gSEFWRV9HVEtfVU5JWF9QUklO
VElORworCisjaWZkZWYgR19PU19XSU4zMgorc3RhdGljIGJvb2wgd2Via2l0UHJpbnRPcGVyYXRp
b25SdW5EaWFsb2dXaW4zMihXZWJLaXRQcmludE9wZXJhdGlvbiosIEd0a1dpbmRvdyopCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworc3Rh
dGljIHZvaWQgZHJhd1BhZ2VzRm9yUHJpbnRpbmdDb21wbGV0ZWQoV0tFcnJvclJlZiwgdm9pZCog
Y29udGV4dCkKK3sKKyAgICBXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRpb24gPSBX
RUJLSVRfUFJJTlRfT1BFUkFUSU9OKGNvbnRleHQpOworICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9
IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShwcmludE9wZXJh
dGlvbi0+cHJpdi0+d2ViVmlldykpOworICAgIHBhZ2UtPmVuZFByaW50aW5nKCk7CisgICAgZ19z
aWduYWxfZW1pdChwcmludE9wZXJhdGlvbiwgc2lnbmFsc1tET05FXSwgMCwgTlVMTCk7Cit9CisK
K3ZvaWQgd2Via2l0UHJpbnRPcGVyYXRpb25SdW5EaWFsb2dGb3JGcmFtZShXZWJLaXRQcmludE9w
ZXJhdGlvbiogcHJpbnRPcGVyYXRpb24sIEd0a1dpbmRvdyogcGFyZW50LCBXZWJGcmFtZVByb3h5
KiB3ZWJGcmFtZSkKK3sKKyAgICBXZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUqIHByaXYgPSBw
cmludE9wZXJhdGlvbi0+cHJpdjsKKyAgICBpZiAoIXBhcmVudCkgeworICAgICAgICBHdGtXaWRn
ZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVChwcml2LT53
ZWJWaWV3KSk7CisgICAgICAgIGlmIChndGtfd2lkZ2V0X2lzX3RvcGxldmVsKHRvcGxldmVsKSAm
JiBHVEtfSVNfV0lORE9XKHRvcGxldmVsKSkKKyAgICAgICAgICAgIHBhcmVudCA9IEdUS19XSU5E
T1codG9wbGV2ZWwpOworICAgIH0KKyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCisgICAg
Ym9vbCBzaG91bGRQcmludCA9IHdlYmtpdFByaW50T3BlcmF0aW9uUnVuRGlhbG9nVW5peChwcmlu
dE9wZXJhdGlvbiwgcGFyZW50KTsKKyNlbmRpZgorI2lmZGVmIEdfT1NfV0lOMzIKKyAgICBib29s
IHNob3VsZFByaW50ID0gd2Via2l0UHJpbnRPcGVyYXRpb25SdW5EaWFsb2dXaW4zMihwcmludE9w
ZXJhdGlvbiwgcGFyZW50KTsKKyNlbmRpZgorCisgICAgaWYgKCFzaG91bGRQcmludCkgeworICAg
ICAgICBnX3NpZ25hbF9lbWl0KHByaW50T3BlcmF0aW9uLCBzaWduYWxzW0RPTkVdLCAwLCBOVUxM
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFByaW50SW5mbyBwcmludEluZm8ocHJp
di0+cHJpbnRTZXR0aW5ncy5nZXQoKSwgcHJpdi0+cGFnZVNldHVwLmdldCgpKTsKKyAgICBXZWJQ
YWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVX
X0JBU0UocHJpdi0+d2ViVmlldykpOworICAgIHBhZ2UtPmRyYXdQYWdlc0ZvclByaW50aW5nKHdl
YkZyYW1lLCBwcmludEluZm8sIFZvaWRDYWxsYmFjazo6Y3JlYXRlKHByaW50T3BlcmF0aW9uLCAm
ZHJhd1BhZ2VzRm9yUHJpbnRpbmdDb21wbGV0ZWQpKTsKK30KKworLyoqCisgKiB3ZWJraXRfcHJp
bnRfb3BlcmF0aW9uX25ldzoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAq
IENyZWF0ZSBhIG5ldyAjV2ViS2l0UHJpbnRPcGVyYXRpb24gdG8gcHJpbnQgQHdlYl92aWV3IGNv
bnRlbnRzLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI1dlYktpdFBy
aW50T3BlcmF0aW9uLgorICovCitXZWJLaXRQcmludE9wZXJhdGlvbiogd2Via2l0X3ByaW50X29w
ZXJhdGlvbl9uZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOworCisgICAgcmV0dXJuIFdF
QktJVF9QUklOVF9PUEVSQVRJT04oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1BSSU5UX09QRVJB
VElPTiwgIndlYi12aWV3Iiwgd2ViVmlldywgTlVMTCkpOworfQorCisvKioKKyAqIHdlYmtpdF9w
cmludF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzOgorICogQHByaW50X29wZXJhdGlvbjog
YSAjV2ViS2l0UHJpbnRPcGVyYXRpb24KKyAqCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgcHJpbnQg
c2V0dGluZ3Mgb2YgQHByaW50X29wZXJhdGlvbi4gSXQgcmV0dXJucyAlTlVMTCB1bnRpbAorICog
ZWl0aGVyIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKCkgb3Igd2Vi
a2l0X3ByaW50X29wZXJhdGlvbl9ydW5fZGlhbG9nKCkKKyAqIGhhdmUgYmVlbiBjYWxsZWQuCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY3VycmVudCAjR3RrUHJpbnRTZXR0
aW5ncyBvZiBAcHJpbnRfb3BlcmF0aW9uLgorICovCitHdGtQcmludFNldHRpbmdzKiB3ZWJraXRf
cHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9zZXR0aW5ncyhXZWJLaXRQcmludE9wZXJhdGlvbiog
cHJpbnRPcGVyYXRpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1BS
SU5UX09QRVJBVElPTihwcmludE9wZXJhdGlvbiksIDApOworCisgICAgcmV0dXJuIHByaW50T3Bl
cmF0aW9uLT5wcml2LT5wcmludFNldHRpbmdzLmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9w
cmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzOgorICogQHByaW50X29wZXJhdGlvbjog
YSAjV2ViS2l0UHJpbnRPcGVyYXRpb24KKyAqIEBwcmludF9zZXR0aW5nczogYSAjR3RrUHJpbnRT
ZXR0aW5ncyB0byBzZXQKKyAqCisgKiBTZXQgdGhlIGN1cnJlbnQgcHJpbnQgc2V0dGluZ3Mgb2Yg
QHByaW50X29wZXJhdGlvbi4gQ3VycmVudCBwcmludCBzZXR0aW5ncyBhcmUgdXNlZCBmb3IKKyAq
IHRoZSBpbml0aWFsIHZhbHVlcyBvZiB0aGUgcHJpbnQgZGlhbG9nIHdoZW4gd2Via2l0X3ByaW50
X29wZXJhdGlvbl9ydW5fZGlhbG9nKCkgaXMgY2FsbGVkLgorICovCit2b2lkIHdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKFdlYktpdFByaW50T3BlcmF0aW9uKiBwcmlu
dE9wZXJhdGlvbiwgR3RrUHJpbnRTZXR0aW5ncyogcHJpbnRTZXR0aW5ncykKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9JU19QUklOVF9PUEVSQVRJT04ocHJpbnRPcGVyYXRpb24pKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKEdUS19JU19QUklOVF9TRVRUSU5HUyhwcmludFNldHRpbmdz
KSk7CisKKyAgICBpZiAocHJpbnRPcGVyYXRpb24tPnByaXYtPnByaW50U2V0dGluZ3MuZ2V0KCkg
PT0gcHJpbnRTZXR0aW5ncykKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpbnRPcGVyYXRpb24t
PnByaXYtPnByaW50U2V0dGluZ3MgPSBwcmludFNldHRpbmdzOworICAgIGdfb2JqZWN0X25vdGlm
eShHX09CSkVDVChwcmludE9wZXJhdGlvbiksICJwcmludC1zZXR0aW5ncyIpOworfQorCisvKioK
KyAqIHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXA6CisgKiBAcHJpbnRfb3Bl
cmF0aW9uOiBhICNXZWJLaXRQcmludE9wZXJhdGlvbgorICoKKyAqIFJldHVybiB0aGUgY3VycmVu
dCBwYWdlIHNldHVwIG9mIEBwcmludF9vcGVyYXRpb24uIEl0IHJldHVybnMgJU5VTEwgdW50aWwK
KyAqIGVpdGhlciB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wcmludF9zZXR0aW5ncygpIG9y
IHdlYmtpdF9wcmludF9vcGVyYXRpb25fcnVuX2RpYWxvZygpCisgKiBoYXZlIGJlZW4gY2FsbGVk
LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlIGN1cnJlbnQgI0d0a1BhZ2VT
ZXR1cCBvZiBAcHJpbnRfb3BlcmF0aW9uLgorICovCitHdGtQYWdlU2V0dXAqIHdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAoV2ViS2l0UHJpbnRPcGVyYXRpb24qIHByaW50T3Bl
cmF0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19QUklOVF9PUEVS
QVRJT04ocHJpbnRPcGVyYXRpb24pLCAwKTsKKworICAgIHJldHVybiBwcmludE9wZXJhdGlvbi0+
cHJpdi0+cGFnZVNldHVwLmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9wcmludF9vcGVyYXRp
b25fc2V0X3BhZ2Vfc2V0dXA6CisgKiBAcHJpbnRfb3BlcmF0aW9uOiBhICNXZWJLaXRQcmludE9w
ZXJhdGlvbgorICogQHBhZ2Vfc2V0dXA6IGEgI0d0a1BhZ2VTZXR1cCB0byBzZXQKKyAqCisgKiBT
ZXQgdGhlIGN1cnJlbnQgcGFnZSBzZXR1cCBvZiBAcHJpbnRfb3BlcmF0aW9uLiBDdXJyZW50IHBh
Z2Ugc2V0dXAgaXMgdXNlZCBmb3IgdGhlCisgKiBpbml0aWFsIHZhbHVlcyBvZiB0aGUgcHJpbnQg
ZGlhbG9nIHdoZW4gd2Via2l0X3ByaW50X29wZXJhdGlvbl9ydW5fZGlhbG9nKCkgaXMgY2FsbGVk
LgorICovCit2b2lkIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3BhZ2Vfc2V0dXAoV2ViS2l0
UHJpbnRPcGVyYXRpb24qIHByaW50T3BlcmF0aW9uLCBHdGtQYWdlU2V0dXAqIHBhZ2VTZXR1cCkK
K3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QUklOVF9PUEVSQVRJT04ocHJpbnRP
cGVyYXRpb24pKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKEdUS19JU19QQUdFX1NFVFVQKHBhZ2VT
ZXR1cCkpOworCisgICAgaWYgKHByaW50T3BlcmF0aW9uLT5wcml2LT5wYWdlU2V0dXAuZ2V0KCkg
PT0gcGFnZVNldHVwKQorICAgICAgICByZXR1cm47CisKKyAgICBwcmludE9wZXJhdGlvbi0+cHJp
di0+cGFnZVNldHVwID0gcGFnZVNldHVwOworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChw
cmludE9wZXJhdGlvbiksICJwYWdlLXNldHVwIik7Cit9CisKKy8qKgorICogd2Via2l0X3ByaW50
X29wZXJhdGlvbl9ydW5fZGlhbG9nOgorICogQHByaW50X29wZXJhdGlvbjogYSAjV2ViS2l0UHJp
bnRPcGVyYXRpb24KKyAqIEBwYXJlbnQ6IChhbGxvdy1ub25lKTogdHJhbnNpZW50IHBhcmVudCBv
ZiB0aGUgcHJpbnQgZGlhbG9nCisgKgorICogUnVuIHRoZSBwcmludCBkaWFsb2cgdXNpbmcgYW5k
IHN0YXJ0IHByaW50aW5nIHVzaW5nIHRoZSBvcHRpb25zIHNlbGVjdGVkIGJ5CisgKiB0aGUgdXNl
ci4gVGhpcyBtZXRob2QgcmV0dXJucyB3aGVuIHRoZSBwcmludCBvcGVyYXRpb24gaXMgY2xvc2Vk
LgorICogVGhlIFdlYktpdFByaW50T3BlcmF0aW9uOjpkb25lIHNpZ25hbCBpcyBlbWl0dGVkIHdo
ZW4gdGhlIHByaW50aW5nCisgKiBvcGVyYXRpb24gZmluaXNoZXMuCisgKiBDdXJyZW50IHByaW50
IHNldHRpbmdzIGFuZCBwYWdlIHNldHVwIG9mIEBwcmludF9vcGVyYXRpb24gYXJlIHVwZGF0ZWQg
d2l0aAorICogb3B0aW9ucyBzZWxlY3RlZCBieSB0aGUgdXNlciB3aGVuIFByaW50IGJ1dHRvbiBp
cyBwcmVzc2VkIGluIHByaW50IGRpYWxvZy4KKyAqIFlvdSBjYW4gZ2V0IHRoZSB1cGRhdGVkIHBy
aW50IHNldHRpbmdzIGFuZCBwYWdlIHNldHVwIGJ5IGNhbGxpbmcKKyAqIHdlYmtpdF9wcmludF9v
cGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzKCkgYW5kIHdlYmtpdF9wcmludF9vcGVyYXRpb25f
Z2V0X3BhZ2Vfc2V0dXAoKQorICogYWZ0ZXIgdGhpcyBtZXRob2QuCisgKi8KK3ZvaWQgd2Via2l0
X3ByaW50X29wZXJhdGlvbl9ydW5fZGlhbG9nKFdlYktpdFByaW50T3BlcmF0aW9uKiBwcmludE9w
ZXJhdGlvbiwgR3RrV2luZG93KiBwYXJlbnQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfUFJJTlRfT1BFUkFUSU9OKHByaW50T3BlcmF0aW9uKSk7CisKKyAgICBXZWJQYWdlUHJv
eHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uo
cHJpbnRPcGVyYXRpb24tPnByaXYtPndlYlZpZXcpKTsKKyAgICB3ZWJraXRQcmludE9wZXJhdGlv
blJ1bkRpYWxvZ0ZvckZyYW1lKHByaW50T3BlcmF0aW9uLCBwYXJlbnQsIHBhZ2UtPm1haW5GcmFt
ZSgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UHJpbnRPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFByaW50T3BlcmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzE3YTZlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5T
SURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdl
YmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNp
Zm5kZWYgV2ViS2l0UHJpbnRPcGVyYXRpb25faAorI2RlZmluZSBXZWJLaXRQcmludE9wZXJhdGlv
bl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlldy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfUFJJTlRfT1BFUkFUSU9OICAgICAgICAgICAg
KHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1BSSU5U
X09QRVJBVElPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfVFlQRV9QUklOVF9PUEVSQVRJT04sIFdlYktpdFByaW50T3BlcmF0aW9uKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX1BSSU5UX09QRVJBVElPTihvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9QUklOVF9PUEVSQVRJT04pKQor
I2RlZmluZSBXRUJLSVRfUFJJTlRfT1BFUkFUSU9OX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1BSSU5UX09QRVJBVElPTiwgV2Vi
S2l0UHJpbnRPcGVyYXRpb25DbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19QUklOVF9PUEVSQVRJ
T05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfUFJJTlRfT1BFUkFUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX1BSSU5UX09QRVJBVElPTl9H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRf
VFlQRV9QUklOVF9PUEVSQVRJT04sIFdlYktpdFByaW50T3BlcmF0aW9uQ2xhc3MpKQorCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0UHJpbnRPcGVyYXRpb25DbGFzcyAgIFdlYktpdFByaW50T3BlcmF0
aW9uQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlIFdl
YktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRQcmludE9wZXJhdGlv
biB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRQcmludE9wZXJhdGlvblByaXZh
dGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFByaW50T3BlcmF0aW9uQ2xhc3MgeworICAg
IEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfcHJpbnRfb3BlcmF0aW9uX2dldF90eXBlICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9B
UEkgV2ViS2l0UHJpbnRPcGVyYXRpb24gKgord2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXcgICAg
ICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldyk7CisKK1dFQktJVF9B
UEkgR3RrUHJpbnRTZXR0aW5ncyAqCit3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9z
ZXR0aW5ncyAoV2ViS2l0UHJpbnRPcGVyYXRpb24gKnByaW50X29wZXJhdGlvbik7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGluZ3MgKFdl
YktpdFByaW50T3BlcmF0aW9uICpwcmludF9vcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR3RrUHJpbnRTZXR0aW5ncyAgICAgKnByaW50X3NldHRp
bmdzKTsKKworV0VCS0lUX0FQSSBHdGtQYWdlU2V0dXAgKgord2Via2l0X3ByaW50X29wZXJhdGlv
bl9nZXRfcGFnZV9zZXR1cCAgICAgKFdlYktpdFByaW50T3BlcmF0aW9uICpwcmludF9vcGVyYXRp
b24pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3BhZ2Vf
c2V0dXAgICAgIChXZWJLaXRQcmludE9wZXJhdGlvbiAqcHJpbnRfb3BlcmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1BhZ2VTZXR1cCAgICAgICAg
ICpwYWdlX3NldHVwKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfcHJpbnRfb3BlcmF0aW9u
X3J1bl9kaWFsb2cgICAgICAgICAoV2ViS2l0UHJpbnRPcGVyYXRpb24gKnByaW50X29wZXJhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtXaW5kb3cg
ICAgICAgICAgICAqcGFyZW50KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvblBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3Bl
cmF0aW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZGM4
MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0UHJpbnRPcGVyYXRpb25Q
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlX2gKKworI2luY2x1
ZGUgIldlYkZyYW1lUHJveHkuaCIKKyNpbmNsdWRlICJXZWJLaXRQcmludE9wZXJhdGlvbi5oIgor
Cit2b2lkIHdlYmtpdFByaW50T3BlcmF0aW9uUnVuRGlhbG9nRm9yRnJhbWUoV2ViS2l0UHJpbnRP
cGVyYXRpb24qLCBHdGtXaW5kb3cqIHBhcmVudCwgV2ViS2l0OjpXZWJGcmFtZVByb3h5Kik7CisK
KyNlbmRpZiAvLyBXZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCmluZGV4IGU3NjIx
MmQuLjZmMGUxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTEzMSw2ICsxMzEsMTEgQEAgc3RhdGljIHZvaWQgbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV0tQYWdlUmVmIHBhZ2UsIFdLSGl0VGVzdFJlc3VsdFJlZiBo
aXRUZXN0UmUKICAgICB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdFQktJVF9XRUJf
VklFVyhjbGllbnRJbmZvKSwgaGl0VGVzdFJlc3VsdCwgd2tFdmVudE1vZGlmaWVyc1RvR2RrTW9k
aWZpZXJzKG1vZGlmaWVycykpOwogfQogCitzdGF0aWMgdm9pZCBwcmludEZyYW1lKFdLUGFnZVJl
ZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkKikKK3sKKyAgICB3ZWJraXRXZWJW
aWV3UHJpbnRGcmFtZShXRUJLSVRfV0VCX1ZJRVcodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkp
LCBmcmFtZSk7Cit9CisKIHZvaWQgYXR0YWNoVUlDbGllbnRUb1ZpZXcoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKIHsKICAgICBXS1BhZ2VVSUNsaWVudCB3a1VJQ2xpZW50ID0gewpAQCAtMTcwLDcg
KzE3NSw3IEBAIHZvaWQgYXR0YWNoVUlDbGllbnRUb1ZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmll
dykKICAgICAgICAgMCwgLy8gZm9vdGVySGVpZ2h0CiAgICAgICAgIDAsIC8vIGRyYXdIZWFkZXIK
ICAgICAgICAgMCwgLy8gZHJhd0Zvb3RlcgotICAgICAgICAwLCAvLyBwcmludEZyYW1lCisgICAg
ICAgIHByaW50RnJhbWUsCiAgICAgICAgIDAsIC8vIHJ1bk1vZGFsCiAgICAgICAgIDAsIC8vIGRp
ZENvbXBsZXRlUnViYmVyQmFuZEZvck1haW5GcmFtZQogICAgICAgICAwLCAvLyBzYXZlRGF0YVRv
RmlsZUluRG93bmxvYWRzRm9sZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGFmNzk5MzUuLjg4NjQ5OWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiV2ViS2l0TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViS2l0TWFyc2hhbC5oIgogI2luY2x1ZGUgIldlYktpdFBvbGljeUNsaWVudC5oIgorI2lu
Y2x1ZGUgIldlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFBy
aXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRTZXR0aW5nc1ByaXZhdGUuaCIKICNpbmNsdWRlICJX
ZWJLaXRVSUNsaWVudC5oIgpAQCAtNjIsNiArNjMsOCBAQCBlbnVtIHsKIAogICAgIE1PVVNFX1RB
UkdFVF9DSEFOR0VELAogCisgICAgUFJJTlRfUkVRVUVTVEVELAorCiAgICAgTEFTVF9TSUdOQUwK
IH07CiAKQEAgLTY0Nyw2ICs2NTAsMzIgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Ns
YXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICAg
ICAgICAgICAgR19UWVBFX05PTkUsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZ
UEVfSElUX1RFU1RfUkVTVUxULAogICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9VSU5UKTsK
KyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpwcmludC1yZXF1ZXN0ZWQ6CisgICAgICog
QHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0
dGVkCisgICAgICogQHByaW50X29wZXJhdGlvbjogdGhlICNXZWJLaXRQcmludE9wZXJhdGlvbiB0
aGF0IHdpbGwgaGFuZGxlIHRoZSBwcmludCByZXF1ZXN0CisgICAgICoKKyAgICAgKiBFbWl0dGVk
IHdoZW4gcHJpbnRpbmcgaXMgcmVxdWVzdGVkIG9uIEB3ZWJfdmlldywgdXN1YWxseSBieSBhIGph
dmFzY3JpcHQgY2FsbCwKKyAgICAgKiBiZWZvcmUgdGhlIHByaW50IGRpYWxvZyBpcyBzaG93bi4g
VGhpcyBzaWduYWwgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBpbml0aWFsCisgICAgICogcHJpbnQg
c2V0dGluZ3MgYW5kIHBhZ2Ugc2V0dXAgb2YgQHByaW50X29wZXJhdGlvbiB0byBiZSB1c2VkIGFz
IGRlZmF1bHQgdmFsdWVzIGluCisgICAgICogdGhlIHByaW50IGRpYWxvZy4gWW91IGNhbiBjYWxs
IHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKCkgYW5kCisgICAgICog
d2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcGFnZV9zZXR1cCgpIGFuZCB0aGVuIHJldHVybiAl
RkFMU0UgdG8gcHJvcGFnYXRlIHRoZQorICAgICAqIGV2ZW50IHNvIHRoYXQgdGhlIHByaW50IGRp
YWxvZyBpcyBzaG93bi4KKyAgICAgKgorICAgICAqIFlvdSBjYW4gY29ubmVjdCB0byB0aGlzIHNp
Z25hbCBhbmQgcmV0dXJuICVUUlVFIHRvIGNhbmNlbCB0aGUgcHJpbnQgb3BlcmF0aW9uLgorICAg
ICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJl
aW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICAlRkFMU0UgdG8gcHJvcGFnYXRl
IHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqLworICAgIHNpZ25hbHNbUFJJTlRfUkVRVUVTVEVE
XSA9CisgICAgICAgIGdfc2lnbmFsX25ldygicHJpbnQtcmVxdWVzdGVkIiwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAg
ICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNU
X09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHByaW50X3JlcXVlc3RlZCksCisgICAgICAgICAg
ICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAsCisgICAgICAg
ICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1QsCisgICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9UWVBFX1BSSU5UX09QRVJBVElPTik7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0xvYWRDaGFu
Z2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQpCkBA
IC03NzEsNiArODAwLDE4IEBAIHZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdlZChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXS0hpdFRlc3RSZXN1bHRSZWYKICAgICBnX3NpZ25hbF9l
bWl0KHdlYlZpZXcsIHNpZ25hbHNbTU9VU0VfVEFSR0VUX0NIQU5HRURdLCAwLCBwcml2LT5tb3Vz
ZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCksIG1vZGlmaWVycyk7CiB9CiAKK3ZvaWQgd2Via2l0
V2ViVmlld1ByaW50RnJhbWUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV0tGcmFtZVJlZiB3a0Zy
YW1lKQoreworICAgIEdSZWZQdHI8V2ViS2l0UHJpbnRPcGVyYXRpb24+IHByaW50T3BlcmF0aW9u
ID0gYWRvcHRHUmVmKHdlYmtpdF9wcmludF9vcGVyYXRpb25fbmV3KHdlYlZpZXcpKTsKKyAgICBn
Ym9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNb
UFJJTlRfUkVRVUVTVEVEXSwgMCwgcHJpbnRPcGVyYXRpb24uZ2V0KCksICZyZXR1cm5WYWx1ZSk7
CisgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBnX3NpZ25hbF9j
b25uZWN0KHByaW50T3BlcmF0aW9uLmdldCgpLCAiZG9uZSIsIEdfQ0FMTEJBQ0soZ19vYmplY3Rf
dW5yZWYpLCAwKTsKKyAgICB3ZWJraXRQcmludE9wZXJhdGlvblJ1bkRpYWxvZ0ZvckZyYW1lKHBy
aW50T3BlcmF0aW9uLmxlYWtSZWYoKSwgMCwgdG9JbXBsKHdrRnJhbWUpKTsKK30KKwogLyoqCiAg
KiB3ZWJraXRfd2ViX3ZpZXdfbmV3OgogICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCAwMDgxYmUzLi5hMWIyMTQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0z
MSw5ICszMSw5IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdEhpdFRlc3RSZXN1bHQuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
UG9saWN5RGVjaXNpb24uaD4KQEAgLTEzOSwxMCArMTM5LDEyIEBAIHN0cnVjdCBfV2ViS2l0V2Vi
Vmlld0NsYXNzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2No
YXIgICAgICAgICAgICAgICAgICAgICoqdGV4dCk7CiAgICAgZ2Jvb2xlYW4gICAoKiBkZWNpZGVf
cG9saWN5KSAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lv
biAgICAgICpkZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlICB0eXBlKTsKLSAgICB2b2lkICAgICAgICgqIG1v
dXNlX3RhcmdldF9jaGFuZ2VkKSAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICp3ZWJfdmlldywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0SGl0VGVzdFJl
c3VsdCAgICAgICpoaXRfdGVzdF9yZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb25U
eXBlICAgdHlwZSk7CisgICAgdm9pZCAgICAgICAoKiBtb3VzZV90YXJnZXRfY2hhbmdlZCkgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0ICAgICAgICpoaXRfdGVzdF9y
ZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAg
ICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycyk7CisgICAgZ2Jvb2xlYW4gICAoKiBwcmludF9y
ZXF1ZXN0ZWQpICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQcmludE9wZXJhdGlv
biAgICAgICpwcmludF9vcGVyYXRpb24pOwogCiAgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4
cGFuc2lvbiAqLwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2
YXRlLmgKaW5kZXggNzY4YTYyMC4uYWQ4YWIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC00NCw1ICs0
NCw2IEBAIGJvb2wgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRDb25maXJtKFdlYktpdFdlYlZp
ZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKTsKIFdLU3RyaW5nUmVmIHdlYmtpdFdlYlZpZXdS
dW5KYXZhU2NyaXB0UHJvbXB0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdl
LCBjb25zdCBDU3RyaW5nJiBkZWZhdWx0VGV4dCk7CiB2b2lkIHdlYmtpdFdlYlZpZXdNYWtlUG9s
aWN5RGVjaXNpb24oV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSwgV2Vi
S2l0UG9saWN5RGVjaXNpb24qKTsKIHZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdl
ZChXZWJLaXRXZWJWaWV3KiwgV0tIaXRUZXN0UmVzdWx0UmVmLCB1bnNpZ25lZCBtb2RpZmllcnMp
Owordm9pZCB3ZWJraXRXZWJWaWV3UHJpbnRGcmFtZShXZWJLaXRXZWJWaWV3KiwgV0tGcmFtZVJl
Zik7CiAKICNlbmRpZiAvLyBXZWJLaXRXZWJWaWV3UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dt
bAppbmRleCBjY2NlMDRmLi41Y2Q4NTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTI1LDYg
KzI1LDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRSZXNwb25z
ZVBvbGljeURlY2lzaW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRI
aXRUZXN0UmVzdWx0LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRQcmlu
dE9wZXJhdGlvbi54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJyb3Iu
eG1sIi8+CiAgIDwvY2hhcHRlcj4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggNTBj
NDJkYi4uMzAwZTkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC00MTcsNiArNDE3
LDI5IEBAIFdlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlCiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2dldF90eXBlCiA8L1NFQ1RJT04+CiAKKzxGSUxFPldlYktpdFByaW50T3BlcmF0aW9uPC9GSUxF
PgorV2ViS2l0UHJpbnRPcGVyYXRpb24KK3dlYmtpdF9wcmludF9vcGVyYXRpb25fbmV3Cit3ZWJr
aXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9zZXR0aW5ncword2Via2l0X3ByaW50X29wZXJh
dGlvbl9zZXRfcHJpbnRfc2V0dGluZ3MKK3dlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vf
c2V0dXAKK3dlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3BhZ2Vfc2V0dXAKK3dlYmtpdF9wcmlu
dF9vcGVyYXRpb25fcnVuX2RpYWxvZworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdFBy
aW50T3BlcmF0aW9uQ2xhc3MKK1dFQktJVF9UWVBFX1BSSU5UX09QRVJBVElPTgorV0VCS0lUX1BS
SU5UX09QRVJBVElPTgorV0VCS0lUX0lTX1BSSU5UX09QRVJBVElPTgorV0VCS0lUX1BSSU5UX09Q
RVJBVElPTl9DTEFTUworV0VCS0lUX0lTX1BSSU5UX09QRVJBVElPTl9DTEFTUworV0VCS0lUX1BS
SU5UX09QRVJBVElPTl9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdFBy
aW50T3BlcmF0aW9uUHJpdmF0ZQord2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfdHlwZQorPC9T
RUNUSU9OPgorCiA8U0VDVElPTj4KIDxGSUxFPldlYktpdEVycm9yPC9GSUxFPgogV0VCS0lUX05F
VFdPUktfRVJST1IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvR05VbWFrZWZpbGUuYW0KaW5kZXggNzI0MWI5OS4uNWQxOWQ4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0K
QEAgLTYsNyArNiw4IEBAIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0
cy9UZXN0QmFja0ZvcndhcmRMaXN0IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdERv
d25sb2FkcyBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGll
bnQgXAotCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViVmlld0VkaXRvcgorCVByb2dy
YW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViVmlld0VkaXRvciBcCisJUHJvZ3JhbXMvV2ViS2l0
MkFQSVRlc3RzL1Rlc3RQcmludGluZwogCiBub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dT
KQogCkBAIC0xMTgsMyArMTE5LDkgQEAgUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJW
aWV3RWRpdG9yX1NPVVJDRVMgPSBcCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYlZp
ZXdFZGl0b3JfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCiBQcm9ncmFtc19X
ZWJLaXQyQVBJVGVzdHNfVGVzdFdlYlZpZXdFZGl0b3JfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNf
bGRhZGQpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYlZpZXdFZGl0b3JfTERGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNf
VGVzdFByaW50aW5nX1NPVVJDRVMgPSBcCisgICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0UHJpbnRpbmdfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCitQcm9n
cmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFByaW50aW5nX0xEQUREID0gJCh3ZWJraXQyX3Rlc3Rz
X2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RQcmludGluZ19MREZMQUdTID0g
JCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UHJpbnRpbmcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFByaW50aW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iOGJiYzM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFByaW50aW5nLmNwcApAQCAtMCwwICsxLDc1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+CisKK3N0YXRpYyB2b2lkIHRlc3RQcmludE9wZXJhdGlvblByaW50U2V0dGluZ3Mo
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRQ
cmludE9wZXJhdGlvbj4gcHJpbnRPcGVyYXRpb24gPSBhZG9wdEdSZWYod2Via2l0X3ByaW50X29w
ZXJhdGlvbl9uZXcodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChwcmludE9wZXJhdGlvbi5nZXQoKSkpOwor
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdz
KHByaW50T3BlcmF0aW9uLmdldCgpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9wcmludF9vcGVy
YXRpb25fZ2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0KCkpKTsKKworICAgIEdSZWZQ
dHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5ncyA9IGFkb3B0R1JlZihndGtfcHJpbnRf
c2V0dGluZ3NfbmV3KCkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0
RmluaXNoZXMoR19PQkpFQ1QocHJpbnRTZXR0aW5ncy5nZXQoKSkpOworCisgICAgR1JlZlB0cjxH
dGtQYWdlU2V0dXA+IHBhZ2VTZXR1cCA9IGFkb3B0R1JlZihndGtfcGFnZV9zZXR1cF9uZXcoKSk7
CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChwYWdlU2V0dXAuZ2V0KCkpKTsKKworICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3By
aW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uLmdldCgpLCBwcmludFNldHRpbmdzLmdldCgpKTsK
KyAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9u
LmdldCgpLCBwYWdlU2V0dXAuZ2V0KCkpOworCisgICAgZ19hc3NlcnQod2Via2l0X3ByaW50X29w
ZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24uZ2V0KCkpID09IHByaW50
U2V0dGluZ3MuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0
X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0KCkpID09IHBhZ2VTZXR1cC5nZXQoKSk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3UHJpbnRSZXF1ZXN0ZWRDYWxsYmFjayhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRpb24sIFdl
YlZpZXdUZXN0KiB0ZXN0KQoreworICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gdGVzdC0+bV93ZWJW
aWV3KTsKKworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19QUklOVF9PUEVSQVRJT04ocHJpbnRPcGVy
YXRpb24pKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHByaW50T3BlcmF0aW9uKSk7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3ByaW50
X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24pKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFnZV9zZXR1cChwcmludE9wZXJhdGlv
bikpOworCisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKworICAgIHJl
dHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1ByaW50UmVxdWVzdGVkKFdl
YlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
dGVzdC0+bV93ZWJWaWV3LCAicHJpbnQtcmVxdWVzdGVkIiwgR19DQUxMQkFDSyh3ZWJWaWV3UHJp
bnRSZXF1ZXN0ZWRDYWxsYmFjayksIHRlc3QpOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48
Ym9keSBvbkxvYWQ9XCJwcmludCgpO1wiPldlYktpdEdUSysgcHJpbnRpbmcgdGVzdDwvYm9keT48
L2h0bWw+IiwgMCk7CisgICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOworfQor
Cit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0UHJpbnRP
cGVyYXRpb24iLCAicHJpbnRpbmctc2V0dGluZ3MiLCB0ZXN0UHJpbnRPcGVyYXRpb25QcmludFNl
dHRpbmdzKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInByaW50LXJl
cXVlc3RlZCIsIHRlc3RXZWJWaWV3UHJpbnRSZXF1ZXN0ZWQpOworfQorCit2b2lkIGFmdGVyQWxs
KCkKK3sKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dl
YmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRl
eCAzYWY5OTA0Li5mNzhiODczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mi5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVt
VHlwZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVycm9yLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQcmlu
dE9wZXJhdGlvbi5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dFVSSVJlc3BvbnNlLmg+Cg==
</data>
<flag name="commit-queue"
          id="128912"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126944</attachid>
            <date>2012-02-14 02:43:10 -0800</date>
            <delta_ts>2012-02-16 07:29:10 -0800</delta_ts>
            <desc>Fix gtk-doc warnings</desc>
            <filename>wk2-print-operation3.diff</filename>
            <type>text/plain</type>
            <size>38210</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1OGYyODZlLi4xMDQ0NGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTItMDItMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBXZWJLaXRQcmludE9wZXJhdGlvbiB0byBXZWJLaXQyIEdU
SysgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJWaWV3
RGVzdHJveWVkKTogRGVsZXRlIHRoZSBwcmludCBvcGVyYXRpb24gd2hlbiB0aGUgdmlldworICAg
ICAgICB3aWRnZXQgYXNzb2NpYXRlZCBpcyBkZXN0cm95ZWQuCisgICAgICAgICh3ZWJraXRQcmlu
dE9wZXJhdGlvbkNvbnN0cnVjdGVkKTogQ29ubmVjdCB0byBkZXN0cm95IHNpZ25hbCBvZgorICAg
ICAgICBhc3NvY2lhdGVkIHdlYiB2aWV3LgorICAgICAgICAod2Via2l0UHJpbnRPcGVyYXRpb25H
ZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRQcmludE9wZXJhdGlvblNldFByb3BlcnR5KToK
KyAgICAgICAgKHdlYmtpdF9wcmludF9vcGVyYXRpb25faW5pdCk6CisgICAgICAgICh3ZWJraXRf
cHJpbnRfb3BlcmF0aW9uX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0UHJpbnRPcGVyYXRp
b25SdW5EaWFsb2dVbml4KTogVXNlIEd0a1ByaW50VW5peERpYWxvZyB0bworICAgICAgICBzaG93
IHRoZSBwcmludGluZyBkaWFsb2cgaW4gVU5JWCBwbGF0Zm9ybXMuCisgICAgICAgICh3ZWJraXRQ
cmludE9wZXJhdGlvblJ1bkRpYWxvZ1dpbjMyKTogRW1wdHksIG5vdCBpbXBsZW1lbnRlZCB5ZXQu
CisgICAgICAgIChkcmF3UGFnZXNGb3JQcmludGluZ0NvbXBsZXRlZCk6IENhbGxiYWNrIGNhbGxl
ZCB3aGVuIHByaW50aW5nCisgICAgICAgIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQgaW4gdGhlIHdl
YiBwcm9jZXNzLgorICAgICAgICAod2Via2l0UHJpbnRPcGVyYXRpb25SdW5EaWFsb2dGb3JGcmFt
ZSk6IFJ1biB0aGUgcHJpbnRpbmcgZGlhbG9nCisgICAgICAgIGFuZCBzdGFydCBwcmludGluZyB0
aGUgZ2l2ZW4gZnJhbWUuCisgICAgICAgICh3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX25ldyk6IENy
ZWF0ZSBhIG5ldyBwcmludCBvcGVyYXRpb24gZm9yIHRoZQorICAgICAgICBnaXZlbiB3ZWIgdmll
dy4KKyAgICAgICAgKHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzKToK
KyAgICAgICAgKHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKToKKyAg
ICAgICAgKHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXApOgorICAgICAgICAo
d2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcGFnZV9zZXR1cCk6CisgICAgICAgICh3ZWJraXRf
cHJpbnRfb3BlcmF0aW9uX3J1bl9kaWFsb2cpOiBSdW4gdGhlIHByaW50IGRpYWxvZyB0byBwcmlu
dAorICAgICAgICB0aGUgd2ViIHZpZXcgbWFpbiBmcmFtZS4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUuaDogQWRkZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwOgorICAgICAgICAocHJpbnRG
cmFtZSk6IENhbGwgd2Via2l0V2ViVmlld1ByaW50RnJhbWUuCisgICAgICAgIChhdHRhY2hVSUNs
aWVudFRvVmlldyk6IEFkZCBpbXBsZW1lbnRhdGlvbiBmb3IKKyAgICAgICAgcHJpbnRGcmFtZSBj
YWxsYmFjay4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoK
KyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KTogQWRkIFdlYktpdFdlYlZpZXc6
OnByaW50LXJlcXVlc3RlZAorICAgICAgICBzaWduYWwuCisgICAgICAgICh3ZWJraXRXZWJWaWV3
UHJpbnRGcmFtZSk6IEVtaXQgcHJpbnQtcmVxdWVzdGVkIGFuZCBzaG93IHRoZSBwcmludAorICAg
ICAgICBkaWFsb2cgdG8gcHJpbnQgdGhlIGZyYW1lIHdoZW4gbm90IHNpZ25hbCBpcyBub3QgaGFu
ZGxlZCBieSB1c2VyLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6IEFk
ZCBuZXcgc2VjdGlvbiBmb3IKKyAgICAgICAgV2ViS2l0UHJpbnRPcGVyYXRpb24uCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkIG5l
dyBzeW1ib2xzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHA6
IEFkZGVkLgorICAgICAgICAodGVzdFByaW50T3BlcmF0aW9uUHJpbnRTZXR0aW5ncyk6CisgICAg
ICAgICh3ZWJWaWV3UHJpbnRSZXF1ZXN0ZWRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0V2ViVmll
d1ByaW50UmVxdWVzdGVkKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFs
bCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOiBJbmNsdWRlIFdlYktp
dFByaW50T3BlcmF0aW9uLmguCisKIDIwMTItMDItMTMgIFcuIEphbWVzIE1hY0xlYW4gIDx3am1h
Y2xlYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIG9ic29sZXRl
IHpvb20gYW5pbWF0aW9uIHBhdGh3YXkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDNiOGU3YmQu
LmNmNzA1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC05MSw2ICs5MSw3IEBAIGxpYndlYmtp
dDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRIaXRUZXN0UmVzdWx0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24uaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFVSSVJlcXVlc3QuaCBcCkBAIC01NTMsNiArNTU0LDkgQEAgbGlid2Via2l0Mmd0
a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJT
SU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xp
Y3lEZWNpc2lvblByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UG9saWN5Q2xpZW50LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UG9saWN5Q2xpZW50LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlLmggXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uY3BwIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaAppbmRleCA3
OWIzMzgzLi44YzNlZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXREZWZpbmVzLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RGVmaW5lcy5oCkBAIC0zMiw2ICszMiw4IEBACiAKICNpbmNsdWRlIDxnbGliLmg+
CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRQcmludE9wZXJhdGlvbiBXZWJLaXRQcmludE9wZXJh
dGlvbjsKKwogI2lmZGVmIEdfT1NfV0lOMzIKICMgICAgaWZkZWYgQlVJTERJTkdfV0VCS0lUCiAj
ICAgICAgICBkZWZpbmUgV0VCS0lUX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzdhY2YzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJp
bnRPcGVyYXRpb24uY3BwCkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRQcmlu
dE9wZXJhdGlvbi5oIgorCisjaW5jbHVkZSAiUHJpbnRJbmZvLmgiCisjaW5jbHVkZSAiV2ViS2l0
UHJpbnRPcGVyYXRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxnbGli
L2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworI2lmZGVm
IEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKKyNpbmNsdWRlIDxndGsvZ3RrdW5peHByaW50Lmg+Cisj
ZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworZW51bSB7CisgICAgUFJPUF8wLAor
CisgICAgUFJPUF9XRUJfVklFVywKKyAgICBQUk9QX1BSSU5UX1NFVFRJTkdTLAorICAgIFBST1Bf
UEFHRV9TRVRVUAorfTsKKworZW51bSB7CisgICAgRE9ORSwKKworICAgIExBU1RfU0lHTkFMCit9
OworCitzdHJ1Y3QgX1dlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZSB7CisgICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldzsKKyAgICBndWxvbmcgd2ViVmlld0Rlc3Ryb3llZElkOworCisgICAgR1Jl
ZlB0cjxHdGtQcmludFNldHRpbmdzPiBwcmludFNldHRpbmdzOworICAgIEdSZWZQdHI8R3RrUGFn
ZVNldHVwPiBwYWdlU2V0dXA7Cit9OworCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05B
TF0gPSB7IDAsIH07CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0UHJpbnRPcGVyYXRpb24sIHdlYmtp
dF9wcmludF9vcGVyYXRpb24sIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdFBy
aW50T3BlcmF0aW9uRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFByaW50
T3BlcmF0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9QUklOVF9PUEVSQVRJT04ob2JqZWN0KS0+
cHJpdjsKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QocHJpdi0+d2ViVmlldywgcHJp
di0+d2ViVmlld0Rlc3Ryb3llZElkKTsKKworICAgIHByaXYtPn5XZWJLaXRQcmludE9wZXJhdGlv
blByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlZpZXdE
ZXN0cm95ZWQoR3RrV2lkZ2V0KiB3ZWJWaWV3LCBHT2JqZWN0KiBwcmludE9wZXJhdGlvbikKK3sK
KyAgICBnX29iamVjdF91bnJlZihwcmludE9wZXJhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdFByaW50T3BlcmF0aW9uQ29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQoreworICAgIFdl
YktpdFByaW50T3BlcmF0aW9uKiBwcmludE9wZXJhdGlvbiA9IFdFQktJVF9QUklOVF9PUEVSQVRJ
T04ob2JqZWN0KTsKKyAgICBXZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUqIHByaXYgPSBwcmlu
dE9wZXJhdGlvbi0+cHJpdjsKKworICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfcHJpbnRf
b3BlcmF0aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQorICAgICAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9i
amVjdCk7CisKKyAgICBwcml2LT53ZWJWaWV3RGVzdHJveWVkSWQgPSBnX3NpZ25hbF9jb25uZWN0
KHByaXYtPndlYlZpZXcsICJkZXN0cm95IiwgR19DQUxMQkFDSyh3ZWJWaWV3RGVzdHJveWVkKSwg
cHJpbnRPcGVyYXRpb24pOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRQcmludE9wZXJhdGlvbkdl
dFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0UHJpbnRPcGVyYXRpb24qIHByaW50
T3BlcmF0aW9uID0gV0VCS0lUX1BSSU5UX09QRVJBVElPTihvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfV0VCX1ZJRVc6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9vYmplY3QodmFsdWUsIHByaW50T3BlcmF0aW9uLT5wcml2LT53ZWJWaWV3KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1BSSU5UX1NFVFRJTkdTOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHByaW50T3BlcmF0aW9uLT5wcml2LT5wcmludFNldHRpbmdzLmdldCgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBR0VfU0VUVVA6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgcHJpbnRPcGVyYXRpb24tPnByaXYtPnBhZ2VTZXR1cC5n
ZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFByaW50T3BlcmF0aW9uU2V0UHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRpb24g
PSBXRUJLSVRfUFJJTlRfT1BFUkFUSU9OKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkg
eworICAgIGNhc2UgUFJPUF9XRUJfVklFVzoKKyAgICAgICAgcHJpbnRPcGVyYXRpb24tPnByaXYt
PndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUklOVF9TRVRUSU5HUzoKKyAgICAgICAgd2Vi
a2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24sIEdU
S19QUklOVF9TRVRUSU5HUyhnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9QQUdFX1NFVFVQOgorICAgICAgICB3ZWJraXRfcHJpbnRfb3Bl
cmF0aW9uX3NldF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9uLCBHVEtfUEFHRV9TRVRVUChnX3Zh
bHVlX2dldF9vYmplY3QodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwg
cGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9wcmludF9vcGVyYXRp
b25faW5pdChXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRpb24pCit7CisgICAgV2Vi
S2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKHByaW50T3BlcmF0aW9uLCBXRUJLSVRfVFlQRV9QUklOVF9PUEVSQVRJT04sIFdlYktpdFBy
aW50T3BlcmF0aW9uUHJpdmF0ZSk7CisgICAgcHJpbnRPcGVyYXRpb24tPnByaXYgPSBwcml2Owor
ICAgIG5ldyAocHJpdikgV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlKCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9wcmludF9vcGVyYXRpb25fY2xhc3NfaW5pdChXZWJLaXRQcmludE9wZXJh
dGlvbkNsYXNzKiBwcmludE9wZXJhdGlvbkNsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ09i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocHJpbnRPcGVyYXRpb25DbGFzcyk7CisgICAgZ09i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFByaW50T3BlcmF0aW9uRmluYWxpemU7CisgICAg
Z09iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdFByaW50T3BlcmF0aW9uQ29uc3RydWN0
ZWQ7CisgICAgZ09iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRQcmludE9wZXJhdGlv
bkdldFByb3BlcnR5OworICAgIGdPYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0UHJp
bnRPcGVyYXRpb25TZXRQcm9wZXJ0eTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFByaW50T3Bl
cmF0aW9uOndlYi12aWV3OgorICAgICAqCisgICAgICogVGhlICNXZWJLaXRXZWJWaWV3IHRoYXQg
d2lsbCBiZSBwcmludGVkLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9XRUJfVklFVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoIndlYi12aWV3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiV2ViIFZpZXciKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHdlYiB2aWV3
IHRoYXQgd2lsbCBiZSBwcmludGVkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9WSUVXLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNU
X09OTFkpKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRQcmludE9wZXJhdGlvbjpwcmludC1z
ZXR0aW5nczoKKyAgICAgKgorICAgICAqIFRoZSBpbml0aWFsICNHdGtQcmludFNldHRpbmdzIGZv
ciB0aGUgcHJpbnQgb3BlcmF0aW9uLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJPUF9QUklOVF9TRVRUSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInByaW50LXNldHRpbmdzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiUHJpbnQgU2V0
dGluZ3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiVGhlIGluaXRpYWwgcHJpbnQgc2V0dGluZ3MgZm9yIHRoZSBwcmludCBvcGVy
YXRpb24iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1RLX1RZUEVfUFJJTlRfU0VUVElOR1MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRQcmludE9wZXJhdGlvbjpwYWdlLXNldHVwOgorICAg
ICAqCisgICAgICogVGhlIGluaXRpYWwgI0d0a1BhZ2VTZXR1cCBmb3IgdGhlIHByaW50IG9wZXJh
dGlvbi4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmpl
Y3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1BBR0Vf
U0VUVVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgicGFnZS1zZXR1cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJQYWdlIFNldHVwIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgaW5pdGlhbCBw
YWdlIHNldHVwIGZvciB0aGUgcHJpbnQgb3BlcmF0aW9uIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9QQUdFX1NFVFVQ
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0UHJp
bnRPcGVyYXRpb246OmRvbmU6CisgICAgICogQHByaW50X29wZXJhdGlvbjogdGhlICNXZWJLaXRQ
cmludE9wZXJhdGlvbiBvbiB3aGljaCB0aGUgc2lnbmFsIHdhcyBlbWl0dGVkCisgICAgICoKKyAg
ICAgKiBFbWl0dGVkIHdoZW4gdGhlIHByaW50IG9wZXJhdGlvbiBoYXMgZmluaXNoZWQgZG9pbmcg
ZXZlcnl0aGluZworICAgICAqIHJlcXVpcmVkIGZvciBwcmludGluZy4KKyAgICAgKi8KKyAgICBz
aWduYWxzW0RPTkVdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJkb25lIiwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RDbGFzcyksCisgICAgICAgICAgICAg
ICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAs
CisgICAgICAgICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAg
ICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKworICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShwcmludE9wZXJhdGlvbkNsYXNzLCBzaXplb2YoV2ViS2l0UHJpbnRPcGVyYXRp
b25Qcml2YXRlKSk7Cit9CisKKyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCitzdGF0aWMg
Ym9vbCB3ZWJraXRQcmludE9wZXJhdGlvblJ1bkRpYWxvZ1VuaXgoV2ViS2l0UHJpbnRPcGVyYXRp
b24qIHByaW50T3BlcmF0aW9uLCBHdGtXaW5kb3cqIHBhcmVudCkKK3sKKyAgICBHdGtQcmludFVu
aXhEaWFsb2cqIHByaW50RGlhbG9nID0gR1RLX1BSSU5UX1VOSVhfRElBTE9HKGd0a19wcmludF91
bml4X2RpYWxvZ19uZXcoMCwgcGFyZW50KSk7CisgICAgZ3RrX3ByaW50X3VuaXhfZGlhbG9nX3Nl
dF9tYW51YWxfY2FwYWJpbGl0aWVzKHByaW50RGlhbG9nLCBzdGF0aWNfY2FzdDxHdGtQcmludENh
cGFiaWxpdGllcz4oMCkpOworCisgICAgV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlKiBwcml2
ID0gcHJpbnRPcGVyYXRpb24tPnByaXY7CisgICAgaWYgKHByaXYtPnByaW50U2V0dGluZ3MpCisg
ICAgICAgIGd0a19wcmludF91bml4X2RpYWxvZ19zZXRfc2V0dGluZ3MocHJpbnREaWFsb2csIHBy
aXYtPnByaW50U2V0dGluZ3MuZ2V0KCkpOworCisgICAgaWYgKHByaXYtPnBhZ2VTZXR1cCkKKyAg
ICAgICAgZ3RrX3ByaW50X3VuaXhfZGlhbG9nX3NldF9wYWdlX3NldHVwKHByaW50RGlhbG9nLCBw
cml2LT5wYWdlU2V0dXAuZ2V0KCkpOworCisgICAgZ3RrX3ByaW50X3VuaXhfZGlhbG9nX3NldF9l
bWJlZF9wYWdlX3NldHVwKHByaW50RGlhbG9nLCBUUlVFKTsKKworICAgIGJvb2wgcmV0dXJuVmFs
dWUgPSBmYWxzZTsKKyAgICBpZiAoZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhwcmludERpYWxv
ZykpID09IEdUS19SRVNQT05TRV9PSykgeworICAgICAgICBwcml2LT5wcmludFNldHRpbmdzID0g
YWRvcHRHUmVmKGd0a19wcmludF91bml4X2RpYWxvZ19nZXRfc2V0dGluZ3MocHJpbnREaWFsb2cp
KTsKKyAgICAgICAgcHJpdi0+cGFnZVNldHVwID0gZ3RrX3ByaW50X3VuaXhfZGlhbG9nX2dldF9w
YWdlX3NldHVwKHByaW50RGlhbG9nKTsKKyAgICAgICAgcmV0dXJuVmFsdWUgPSB0cnVlOworICAg
IH0KKworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKHByaW50RGlhbG9nKSk7CisK
KyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisjZW5kaWYgLy8gSEFWRV9HVEtfVU5JWF9QUklO
VElORworCisjaWZkZWYgR19PU19XSU4zMgorc3RhdGljIGJvb2wgd2Via2l0UHJpbnRPcGVyYXRp
b25SdW5EaWFsb2dXaW4zMihXZWJLaXRQcmludE9wZXJhdGlvbiosIEd0a1dpbmRvdyopCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworc3Rh
dGljIHZvaWQgZHJhd1BhZ2VzRm9yUHJpbnRpbmdDb21wbGV0ZWQoV0tFcnJvclJlZiwgdm9pZCog
Y29udGV4dCkKK3sKKyAgICBXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRpb24gPSBX
RUJLSVRfUFJJTlRfT1BFUkFUSU9OKGNvbnRleHQpOworICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9
IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShwcmludE9wZXJh
dGlvbi0+cHJpdi0+d2ViVmlldykpOworICAgIHBhZ2UtPmVuZFByaW50aW5nKCk7CisgICAgZ19z
aWduYWxfZW1pdChwcmludE9wZXJhdGlvbiwgc2lnbmFsc1tET05FXSwgMCwgTlVMTCk7Cit9CisK
K3ZvaWQgd2Via2l0UHJpbnRPcGVyYXRpb25SdW5EaWFsb2dGb3JGcmFtZShXZWJLaXRQcmludE9w
ZXJhdGlvbiogcHJpbnRPcGVyYXRpb24sIEd0a1dpbmRvdyogcGFyZW50LCBXZWJGcmFtZVByb3h5
KiB3ZWJGcmFtZSkKK3sKKyAgICBXZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUqIHByaXYgPSBw
cmludE9wZXJhdGlvbi0+cHJpdjsKKyAgICBpZiAoIXBhcmVudCkgeworICAgICAgICBHdGtXaWRn
ZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVChwcml2LT53
ZWJWaWV3KSk7CisgICAgICAgIGlmIChndGtfd2lkZ2V0X2lzX3RvcGxldmVsKHRvcGxldmVsKSAm
JiBHVEtfSVNfV0lORE9XKHRvcGxldmVsKSkKKyAgICAgICAgICAgIHBhcmVudCA9IEdUS19XSU5E
T1codG9wbGV2ZWwpOworICAgIH0KKyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCisgICAg
Ym9vbCBzaG91bGRQcmludCA9IHdlYmtpdFByaW50T3BlcmF0aW9uUnVuRGlhbG9nVW5peChwcmlu
dE9wZXJhdGlvbiwgcGFyZW50KTsKKyNlbmRpZgorI2lmZGVmIEdfT1NfV0lOMzIKKyAgICBib29s
IHNob3VsZFByaW50ID0gd2Via2l0UHJpbnRPcGVyYXRpb25SdW5EaWFsb2dXaW4zMihwcmludE9w
ZXJhdGlvbiwgcGFyZW50KTsKKyNlbmRpZgorCisgICAgaWYgKCFzaG91bGRQcmludCkgeworICAg
ICAgICBnX3NpZ25hbF9lbWl0KHByaW50T3BlcmF0aW9uLCBzaWduYWxzW0RPTkVdLCAwLCBOVUxM
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFByaW50SW5mbyBwcmludEluZm8ocHJp
di0+cHJpbnRTZXR0aW5ncy5nZXQoKSwgcHJpdi0+cGFnZVNldHVwLmdldCgpKTsKKyAgICBXZWJQ
YWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVX
X0JBU0UocHJpdi0+d2ViVmlldykpOworICAgIHBhZ2UtPmRyYXdQYWdlc0ZvclByaW50aW5nKHdl
YkZyYW1lLCBwcmludEluZm8sIFZvaWRDYWxsYmFjazo6Y3JlYXRlKHByaW50T3BlcmF0aW9uLCAm
ZHJhd1BhZ2VzRm9yUHJpbnRpbmdDb21wbGV0ZWQpKTsKK30KKworLyoqCisgKiB3ZWJraXRfcHJp
bnRfb3BlcmF0aW9uX25ldzoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAq
IENyZWF0ZSBhIG5ldyAjV2ViS2l0UHJpbnRPcGVyYXRpb24gdG8gcHJpbnQgQHdlYl92aWV3IGNv
bnRlbnRzLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI1dlYktpdFBy
aW50T3BlcmF0aW9uLgorICovCitXZWJLaXRQcmludE9wZXJhdGlvbiogd2Via2l0X3ByaW50X29w
ZXJhdGlvbl9uZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOworCisgICAgcmV0dXJuIFdF
QktJVF9QUklOVF9PUEVSQVRJT04oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1BSSU5UX09QRVJB
VElPTiwgIndlYi12aWV3Iiwgd2ViVmlldywgTlVMTCkpOworfQorCisvKioKKyAqIHdlYmtpdF9w
cmludF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzOgorICogQHByaW50X29wZXJhdGlvbjog
YSAjV2ViS2l0UHJpbnRPcGVyYXRpb24KKyAqCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgcHJpbnQg
c2V0dGluZ3Mgb2YgQHByaW50X29wZXJhdGlvbi4gSXQgcmV0dXJucyAlTlVMTCB1bnRpbAorICog
ZWl0aGVyIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKCkgb3Igd2Vi
a2l0X3ByaW50X29wZXJhdGlvbl9ydW5fZGlhbG9nKCkKKyAqIGhhdmUgYmVlbiBjYWxsZWQuCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY3VycmVudCAjR3RrUHJpbnRTZXR0
aW5ncyBvZiBAcHJpbnRfb3BlcmF0aW9uLgorICovCitHdGtQcmludFNldHRpbmdzKiB3ZWJraXRf
cHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9zZXR0aW5ncyhXZWJLaXRQcmludE9wZXJhdGlvbiog
cHJpbnRPcGVyYXRpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1BS
SU5UX09QRVJBVElPTihwcmludE9wZXJhdGlvbiksIDApOworCisgICAgcmV0dXJuIHByaW50T3Bl
cmF0aW9uLT5wcml2LT5wcmludFNldHRpbmdzLmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9w
cmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzOgorICogQHByaW50X29wZXJhdGlvbjog
YSAjV2ViS2l0UHJpbnRPcGVyYXRpb24KKyAqIEBwcmludF9zZXR0aW5nczogYSAjR3RrUHJpbnRT
ZXR0aW5ncyB0byBzZXQKKyAqCisgKiBTZXQgdGhlIGN1cnJlbnQgcHJpbnQgc2V0dGluZ3Mgb2Yg
QHByaW50X29wZXJhdGlvbi4gQ3VycmVudCBwcmludCBzZXR0aW5ncyBhcmUgdXNlZCBmb3IKKyAq
IHRoZSBpbml0aWFsIHZhbHVlcyBvZiB0aGUgcHJpbnQgZGlhbG9nIHdoZW4gd2Via2l0X3ByaW50
X29wZXJhdGlvbl9ydW5fZGlhbG9nKCkgaXMgY2FsbGVkLgorICovCit2b2lkIHdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKFdlYktpdFByaW50T3BlcmF0aW9uKiBwcmlu
dE9wZXJhdGlvbiwgR3RrUHJpbnRTZXR0aW5ncyogcHJpbnRTZXR0aW5ncykKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9JU19QUklOVF9PUEVSQVRJT04ocHJpbnRPcGVyYXRpb24pKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKEdUS19JU19QUklOVF9TRVRUSU5HUyhwcmludFNldHRpbmdz
KSk7CisKKyAgICBpZiAocHJpbnRPcGVyYXRpb24tPnByaXYtPnByaW50U2V0dGluZ3MuZ2V0KCkg
PT0gcHJpbnRTZXR0aW5ncykKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpbnRPcGVyYXRpb24t
PnByaXYtPnByaW50U2V0dGluZ3MgPSBwcmludFNldHRpbmdzOworICAgIGdfb2JqZWN0X25vdGlm
eShHX09CSkVDVChwcmludE9wZXJhdGlvbiksICJwcmludC1zZXR0aW5ncyIpOworfQorCisvKioK
KyAqIHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXA6CisgKiBAcHJpbnRfb3Bl
cmF0aW9uOiBhICNXZWJLaXRQcmludE9wZXJhdGlvbgorICoKKyAqIFJldHVybiB0aGUgY3VycmVu
dCBwYWdlIHNldHVwIG9mIEBwcmludF9vcGVyYXRpb24uIEl0IHJldHVybnMgJU5VTEwgdW50aWwK
KyAqIGVpdGhlciB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wcmludF9zZXR0aW5ncygpIG9y
IHdlYmtpdF9wcmludF9vcGVyYXRpb25fcnVuX2RpYWxvZygpCisgKiBoYXZlIGJlZW4gY2FsbGVk
LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlIGN1cnJlbnQgI0d0a1BhZ2VT
ZXR1cCBvZiBAcHJpbnRfb3BlcmF0aW9uLgorICovCitHdGtQYWdlU2V0dXAqIHdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAoV2ViS2l0UHJpbnRPcGVyYXRpb24qIHByaW50T3Bl
cmF0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19QUklOVF9PUEVS
QVRJT04ocHJpbnRPcGVyYXRpb24pLCAwKTsKKworICAgIHJldHVybiBwcmludE9wZXJhdGlvbi0+
cHJpdi0+cGFnZVNldHVwLmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9wcmludF9vcGVyYXRp
b25fc2V0X3BhZ2Vfc2V0dXA6CisgKiBAcHJpbnRfb3BlcmF0aW9uOiBhICNXZWJLaXRQcmludE9w
ZXJhdGlvbgorICogQHBhZ2Vfc2V0dXA6IGEgI0d0a1BhZ2VTZXR1cCB0byBzZXQKKyAqCisgKiBT
ZXQgdGhlIGN1cnJlbnQgcGFnZSBzZXR1cCBvZiBAcHJpbnRfb3BlcmF0aW9uLiBDdXJyZW50IHBh
Z2Ugc2V0dXAgaXMgdXNlZCBmb3IgdGhlCisgKiBpbml0aWFsIHZhbHVlcyBvZiB0aGUgcHJpbnQg
ZGlhbG9nIHdoZW4gd2Via2l0X3ByaW50X29wZXJhdGlvbl9ydW5fZGlhbG9nKCkgaXMgY2FsbGVk
LgorICovCit2b2lkIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3BhZ2Vfc2V0dXAoV2ViS2l0
UHJpbnRPcGVyYXRpb24qIHByaW50T3BlcmF0aW9uLCBHdGtQYWdlU2V0dXAqIHBhZ2VTZXR1cCkK
K3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QUklOVF9PUEVSQVRJT04ocHJpbnRP
cGVyYXRpb24pKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKEdUS19JU19QQUdFX1NFVFVQKHBhZ2VT
ZXR1cCkpOworCisgICAgaWYgKHByaW50T3BlcmF0aW9uLT5wcml2LT5wYWdlU2V0dXAuZ2V0KCkg
PT0gcGFnZVNldHVwKQorICAgICAgICByZXR1cm47CisKKyAgICBwcmludE9wZXJhdGlvbi0+cHJp
di0+cGFnZVNldHVwID0gcGFnZVNldHVwOworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChw
cmludE9wZXJhdGlvbiksICJwYWdlLXNldHVwIik7Cit9CisKKy8qKgorICogd2Via2l0X3ByaW50
X29wZXJhdGlvbl9ydW5fZGlhbG9nOgorICogQHByaW50X29wZXJhdGlvbjogYSAjV2ViS2l0UHJp
bnRPcGVyYXRpb24KKyAqIEBwYXJlbnQ6IChhbGxvdy1ub25lKTogdHJhbnNpZW50IHBhcmVudCBv
ZiB0aGUgcHJpbnQgZGlhbG9nCisgKgorICogUnVuIHRoZSBwcmludCBkaWFsb2cgdXNpbmcgYW5k
IHN0YXJ0IHByaW50aW5nIHVzaW5nIHRoZSBvcHRpb25zIHNlbGVjdGVkIGJ5CisgKiB0aGUgdXNl
ci4gVGhpcyBtZXRob2QgcmV0dXJucyB3aGVuIHRoZSBwcmludCBvcGVyYXRpb24gaXMgY2xvc2Vk
LgorICogVGhlIFdlYktpdFByaW50T3BlcmF0aW9uOjpkb25lIHNpZ25hbCBpcyBlbWl0dGVkIHdo
ZW4gdGhlIHByaW50aW5nCisgKiBvcGVyYXRpb24gZmluaXNoZXMuCisgKiBDdXJyZW50IHByaW50
IHNldHRpbmdzIGFuZCBwYWdlIHNldHVwIG9mIEBwcmludF9vcGVyYXRpb24gYXJlIHVwZGF0ZWQg
d2l0aAorICogb3B0aW9ucyBzZWxlY3RlZCBieSB0aGUgdXNlciB3aGVuIFByaW50IGJ1dHRvbiBp
cyBwcmVzc2VkIGluIHByaW50IGRpYWxvZy4KKyAqIFlvdSBjYW4gZ2V0IHRoZSB1cGRhdGVkIHBy
aW50IHNldHRpbmdzIGFuZCBwYWdlIHNldHVwIGJ5IGNhbGxpbmcKKyAqIHdlYmtpdF9wcmludF9v
cGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzKCkgYW5kIHdlYmtpdF9wcmludF9vcGVyYXRpb25f
Z2V0X3BhZ2Vfc2V0dXAoKQorICogYWZ0ZXIgdGhpcyBtZXRob2QuCisgKi8KK3ZvaWQgd2Via2l0
X3ByaW50X29wZXJhdGlvbl9ydW5fZGlhbG9nKFdlYktpdFByaW50T3BlcmF0aW9uKiBwcmludE9w
ZXJhdGlvbiwgR3RrV2luZG93KiBwYXJlbnQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfUFJJTlRfT1BFUkFUSU9OKHByaW50T3BlcmF0aW9uKSk7CisKKyAgICBXZWJQYWdlUHJv
eHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uo
cHJpbnRPcGVyYXRpb24tPnByaXYtPndlYlZpZXcpKTsKKyAgICB3ZWJraXRQcmludE9wZXJhdGlv
blJ1bkRpYWxvZ0ZvckZyYW1lKHByaW50T3BlcmF0aW9uLCBwYXJlbnQsIHBhZ2UtPm1haW5GcmFt
ZSgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UHJpbnRPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFByaW50T3BlcmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzE3YTZlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5T
SURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdl
YmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNp
Zm5kZWYgV2ViS2l0UHJpbnRPcGVyYXRpb25faAorI2RlZmluZSBXZWJLaXRQcmludE9wZXJhdGlv
bl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlldy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfUFJJTlRfT1BFUkFUSU9OICAgICAgICAgICAg
KHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1BSSU5U
X09QRVJBVElPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfVFlQRV9QUklOVF9PUEVSQVRJT04sIFdlYktpdFByaW50T3BlcmF0aW9uKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX1BSSU5UX09QRVJBVElPTihvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9QUklOVF9PUEVSQVRJT04pKQor
I2RlZmluZSBXRUJLSVRfUFJJTlRfT1BFUkFUSU9OX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1BSSU5UX09QRVJBVElPTiwgV2Vi
S2l0UHJpbnRPcGVyYXRpb25DbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19QUklOVF9PUEVSQVRJ
T05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfUFJJTlRfT1BFUkFUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX1BSSU5UX09QRVJBVElPTl9H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRf
VFlQRV9QUklOVF9PUEVSQVRJT04sIFdlYktpdFByaW50T3BlcmF0aW9uQ2xhc3MpKQorCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0UHJpbnRPcGVyYXRpb25DbGFzcyAgIFdlYktpdFByaW50T3BlcmF0
aW9uQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlIFdl
YktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRQcmludE9wZXJhdGlv
biB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRQcmludE9wZXJhdGlvblByaXZh
dGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFByaW50T3BlcmF0aW9uQ2xhc3MgeworICAg
IEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfcHJpbnRfb3BlcmF0aW9uX2dldF90eXBlICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9B
UEkgV2ViS2l0UHJpbnRPcGVyYXRpb24gKgord2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXcgICAg
ICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldyk7CisKK1dFQktJVF9B
UEkgR3RrUHJpbnRTZXR0aW5ncyAqCit3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9z
ZXR0aW5ncyAoV2ViS2l0UHJpbnRPcGVyYXRpb24gKnByaW50X29wZXJhdGlvbik7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGluZ3MgKFdl
YktpdFByaW50T3BlcmF0aW9uICpwcmludF9vcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR3RrUHJpbnRTZXR0aW5ncyAgICAgKnByaW50X3NldHRp
bmdzKTsKKworV0VCS0lUX0FQSSBHdGtQYWdlU2V0dXAgKgord2Via2l0X3ByaW50X29wZXJhdGlv
bl9nZXRfcGFnZV9zZXR1cCAgICAgKFdlYktpdFByaW50T3BlcmF0aW9uICpwcmludF9vcGVyYXRp
b24pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3BhZ2Vf
c2V0dXAgICAgIChXZWJLaXRQcmludE9wZXJhdGlvbiAqcHJpbnRfb3BlcmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1BhZ2VTZXR1cCAgICAgICAg
ICpwYWdlX3NldHVwKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfcHJpbnRfb3BlcmF0aW9u
X3J1bl9kaWFsb2cgICAgICAgICAoV2ViS2l0UHJpbnRPcGVyYXRpb24gKnByaW50X29wZXJhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtXaW5kb3cg
ICAgICAgICAgICAqcGFyZW50KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvblBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3Bl
cmF0aW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZGM4
MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0UHJpbnRPcGVyYXRpb25Q
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlX2gKKworI2luY2x1
ZGUgIldlYkZyYW1lUHJveHkuaCIKKyNpbmNsdWRlICJXZWJLaXRQcmludE9wZXJhdGlvbi5oIgor
Cit2b2lkIHdlYmtpdFByaW50T3BlcmF0aW9uUnVuRGlhbG9nRm9yRnJhbWUoV2ViS2l0UHJpbnRP
cGVyYXRpb24qLCBHdGtXaW5kb3cqIHBhcmVudCwgV2ViS2l0OjpXZWJGcmFtZVByb3h5Kik7CisK
KyNlbmRpZiAvLyBXZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCmluZGV4IGU3NjIx
MmQuLjZmMGUxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTEzMSw2ICsxMzEsMTEgQEAgc3RhdGljIHZvaWQgbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV0tQYWdlUmVmIHBhZ2UsIFdLSGl0VGVzdFJlc3VsdFJlZiBo
aXRUZXN0UmUKICAgICB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdFQktJVF9XRUJf
VklFVyhjbGllbnRJbmZvKSwgaGl0VGVzdFJlc3VsdCwgd2tFdmVudE1vZGlmaWVyc1RvR2RrTW9k
aWZpZXJzKG1vZGlmaWVycykpOwogfQogCitzdGF0aWMgdm9pZCBwcmludEZyYW1lKFdLUGFnZVJl
ZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkKikKK3sKKyAgICB3ZWJraXRXZWJW
aWV3UHJpbnRGcmFtZShXRUJLSVRfV0VCX1ZJRVcodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkp
LCBmcmFtZSk7Cit9CisKIHZvaWQgYXR0YWNoVUlDbGllbnRUb1ZpZXcoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKIHsKICAgICBXS1BhZ2VVSUNsaWVudCB3a1VJQ2xpZW50ID0gewpAQCAtMTcwLDcg
KzE3NSw3IEBAIHZvaWQgYXR0YWNoVUlDbGllbnRUb1ZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmll
dykKICAgICAgICAgMCwgLy8gZm9vdGVySGVpZ2h0CiAgICAgICAgIDAsIC8vIGRyYXdIZWFkZXIK
ICAgICAgICAgMCwgLy8gZHJhd0Zvb3RlcgotICAgICAgICAwLCAvLyBwcmludEZyYW1lCisgICAg
ICAgIHByaW50RnJhbWUsCiAgICAgICAgIDAsIC8vIHJ1bk1vZGFsCiAgICAgICAgIDAsIC8vIGRp
ZENvbXBsZXRlUnViYmVyQmFuZEZvck1haW5GcmFtZQogICAgICAgICAwLCAvLyBzYXZlRGF0YVRv
RmlsZUluRG93bmxvYWRzRm9sZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGFmNzk5MzUuLjg4NjQ5OWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiV2ViS2l0TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViS2l0TWFyc2hhbC5oIgogI2luY2x1ZGUgIldlYktpdFBvbGljeUNsaWVudC5oIgorI2lu
Y2x1ZGUgIldlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFBy
aXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRTZXR0aW5nc1ByaXZhdGUuaCIKICNpbmNsdWRlICJX
ZWJLaXRVSUNsaWVudC5oIgpAQCAtNjIsNiArNjMsOCBAQCBlbnVtIHsKIAogICAgIE1PVVNFX1RB
UkdFVF9DSEFOR0VELAogCisgICAgUFJJTlRfUkVRVUVTVEVELAorCiAgICAgTEFTVF9TSUdOQUwK
IH07CiAKQEAgLTY0Nyw2ICs2NTAsMzIgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Ns
YXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICAg
ICAgICAgICAgR19UWVBFX05PTkUsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZ
UEVfSElUX1RFU1RfUkVTVUxULAogICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9VSU5UKTsK
KyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpwcmludC1yZXF1ZXN0ZWQ6CisgICAgICog
QHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0
dGVkCisgICAgICogQHByaW50X29wZXJhdGlvbjogdGhlICNXZWJLaXRQcmludE9wZXJhdGlvbiB0
aGF0IHdpbGwgaGFuZGxlIHRoZSBwcmludCByZXF1ZXN0CisgICAgICoKKyAgICAgKiBFbWl0dGVk
IHdoZW4gcHJpbnRpbmcgaXMgcmVxdWVzdGVkIG9uIEB3ZWJfdmlldywgdXN1YWxseSBieSBhIGph
dmFzY3JpcHQgY2FsbCwKKyAgICAgKiBiZWZvcmUgdGhlIHByaW50IGRpYWxvZyBpcyBzaG93bi4g
VGhpcyBzaWduYWwgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBpbml0aWFsCisgICAgICogcHJpbnQg
c2V0dGluZ3MgYW5kIHBhZ2Ugc2V0dXAgb2YgQHByaW50X29wZXJhdGlvbiB0byBiZSB1c2VkIGFz
IGRlZmF1bHQgdmFsdWVzIGluCisgICAgICogdGhlIHByaW50IGRpYWxvZy4gWW91IGNhbiBjYWxs
IHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKCkgYW5kCisgICAgICog
d2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcGFnZV9zZXR1cCgpIGFuZCB0aGVuIHJldHVybiAl
RkFMU0UgdG8gcHJvcGFnYXRlIHRoZQorICAgICAqIGV2ZW50IHNvIHRoYXQgdGhlIHByaW50IGRp
YWxvZyBpcyBzaG93bi4KKyAgICAgKgorICAgICAqIFlvdSBjYW4gY29ubmVjdCB0byB0aGlzIHNp
Z25hbCBhbmQgcmV0dXJuICVUUlVFIHRvIGNhbmNlbCB0aGUgcHJpbnQgb3BlcmF0aW9uLgorICAg
ICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJl
aW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICAlRkFMU0UgdG8gcHJvcGFnYXRl
IHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqLworICAgIHNpZ25hbHNbUFJJTlRfUkVRVUVTVEVE
XSA9CisgICAgICAgIGdfc2lnbmFsX25ldygicHJpbnQtcmVxdWVzdGVkIiwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAg
ICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNU
X09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHByaW50X3JlcXVlc3RlZCksCisgICAgICAgICAg
ICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAsCisgICAgICAg
ICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1QsCisgICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9UWVBFX1BSSU5UX09QRVJBVElPTik7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0xvYWRDaGFu
Z2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQpCkBA
IC03NzEsNiArODAwLDE4IEBAIHZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdlZChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXS0hpdFRlc3RSZXN1bHRSZWYKICAgICBnX3NpZ25hbF9l
bWl0KHdlYlZpZXcsIHNpZ25hbHNbTU9VU0VfVEFSR0VUX0NIQU5HRURdLCAwLCBwcml2LT5tb3Vz
ZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCksIG1vZGlmaWVycyk7CiB9CiAKK3ZvaWQgd2Via2l0
V2ViVmlld1ByaW50RnJhbWUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV0tGcmFtZVJlZiB3a0Zy
YW1lKQoreworICAgIEdSZWZQdHI8V2ViS2l0UHJpbnRPcGVyYXRpb24+IHByaW50T3BlcmF0aW9u
ID0gYWRvcHRHUmVmKHdlYmtpdF9wcmludF9vcGVyYXRpb25fbmV3KHdlYlZpZXcpKTsKKyAgICBn
Ym9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNb
UFJJTlRfUkVRVUVTVEVEXSwgMCwgcHJpbnRPcGVyYXRpb24uZ2V0KCksICZyZXR1cm5WYWx1ZSk7
CisgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBnX3NpZ25hbF9j
b25uZWN0KHByaW50T3BlcmF0aW9uLmdldCgpLCAiZG9uZSIsIEdfQ0FMTEJBQ0soZ19vYmplY3Rf
dW5yZWYpLCAwKTsKKyAgICB3ZWJraXRQcmludE9wZXJhdGlvblJ1bkRpYWxvZ0ZvckZyYW1lKHBy
aW50T3BlcmF0aW9uLmxlYWtSZWYoKSwgMCwgdG9JbXBsKHdrRnJhbWUpKTsKK30KKwogLyoqCiAg
KiB3ZWJraXRfd2ViX3ZpZXdfbmV3OgogICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCAwMDgxYmUzLi5hMWIyMTQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0z
MSw5ICszMSw5IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdEhpdFRlc3RSZXN1bHQuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
UG9saWN5RGVjaXNpb24uaD4KQEAgLTEzOSwxMCArMTM5LDEyIEBAIHN0cnVjdCBfV2ViS2l0V2Vi
Vmlld0NsYXNzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2No
YXIgICAgICAgICAgICAgICAgICAgICoqdGV4dCk7CiAgICAgZ2Jvb2xlYW4gICAoKiBkZWNpZGVf
cG9saWN5KSAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lv
biAgICAgICpkZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlICB0eXBlKTsKLSAgICB2b2lkICAgICAgICgqIG1v
dXNlX3RhcmdldF9jaGFuZ2VkKSAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICp3ZWJfdmlldywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0SGl0VGVzdFJl
c3VsdCAgICAgICpoaXRfdGVzdF9yZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb25U
eXBlICAgdHlwZSk7CisgICAgdm9pZCAgICAgICAoKiBtb3VzZV90YXJnZXRfY2hhbmdlZCkgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0ICAgICAgICpoaXRfdGVzdF9y
ZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAg
ICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycyk7CisgICAgZ2Jvb2xlYW4gICAoKiBwcmludF9y
ZXF1ZXN0ZWQpICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQcmludE9wZXJhdGlv
biAgICAgICpwcmludF9vcGVyYXRpb24pOwogCiAgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4
cGFuc2lvbiAqLwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2
YXRlLmgKaW5kZXggNzY4YTYyMC4uYWQ4YWIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC00NCw1ICs0
NCw2IEBAIGJvb2wgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRDb25maXJtKFdlYktpdFdlYlZp
ZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKTsKIFdLU3RyaW5nUmVmIHdlYmtpdFdlYlZpZXdS
dW5KYXZhU2NyaXB0UHJvbXB0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdl
LCBjb25zdCBDU3RyaW5nJiBkZWZhdWx0VGV4dCk7CiB2b2lkIHdlYmtpdFdlYlZpZXdNYWtlUG9s
aWN5RGVjaXNpb24oV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSwgV2Vi
S2l0UG9saWN5RGVjaXNpb24qKTsKIHZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdl
ZChXZWJLaXRXZWJWaWV3KiwgV0tIaXRUZXN0UmVzdWx0UmVmLCB1bnNpZ25lZCBtb2RpZmllcnMp
Owordm9pZCB3ZWJraXRXZWJWaWV3UHJpbnRGcmFtZShXZWJLaXRXZWJWaWV3KiwgV0tGcmFtZVJl
Zik7CiAKICNlbmRpZiAvLyBXZWJLaXRXZWJWaWV3UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dt
bAppbmRleCBjY2NlMDRmLi41Y2Q4NTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTI1LDYg
KzI1LDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRSZXNwb25z
ZVBvbGljeURlY2lzaW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRI
aXRUZXN0UmVzdWx0LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRQcmlu
dE9wZXJhdGlvbi54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJyb3Iu
eG1sIi8+CiAgIDwvY2hhcHRlcj4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggNTBj
NDJkYi4uMDQyNjQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC00MTgsNiArNDE4
LDMwIEBAIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X3R5cGUKIDwvU0VDVElPTj4KIAogPFNF
Q1RJT04+Cis8RklMRT5XZWJLaXRQcmludE9wZXJhdGlvbjwvRklMRT4KK1dlYktpdFByaW50T3Bl
cmF0aW9uCit3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX25ldword2Via2l0X3ByaW50X29wZXJhdGlv
bl9nZXRfcHJpbnRfc2V0dGluZ3MKK3dlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3Nl
dHRpbmdzCit3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wYWdlX3NldHVwCit3ZWJraXRfcHJp
bnRfb3BlcmF0aW9uX3NldF9wYWdlX3NldHVwCit3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3J1bl9k
aWFsb2cKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRQcmludE9wZXJhdGlvbkNsYXNz
CitXRUJLSVRfVFlQRV9QUklOVF9PUEVSQVRJT04KK1dFQktJVF9QUklOVF9PUEVSQVRJT04KK1dF
QktJVF9JU19QUklOVF9PUEVSQVRJT04KK1dFQktJVF9QUklOVF9PUEVSQVRJT05fQ0xBU1MKK1dF
QktJVF9JU19QUklOVF9PUEVSQVRJT05fQ0xBU1MKK1dFQktJVF9QUklOVF9PUEVSQVRJT05fR0VU
X0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRQcmludE9wZXJhdGlvblByaXZh
dGUKK3dlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJ
T04+CiA8RklMRT5XZWJLaXRFcnJvcjwvRklMRT4KIFdFQktJVF9ORVRXT1JLX0VSUk9SCiBXRUJL
SVRfUExVR0lOX0VSUk9SCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDcyNDFiOTkuLjVkMTlkODMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFt
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxl
LmFtCkBAIC02LDcgKzYsOCBAQCBURVNUX1BST0dTICs9IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJ
VGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rl
c3REb3dubG9hZHMgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0UG9saWN5
Q2xpZW50IFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IKKwlQ
cm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IgXAorCVByb2dyYW1zL1dl
YktpdDJBUElUZXN0cy9UZXN0UHJpbnRpbmcKIAogbm9pbnN0X1BST0dSQU1TICs9ICQoVEVTVF9Q
Uk9HUykKIApAQCAtMTE4LDMgKzExOSw5IEBAIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0
V2ViVmlld0VkaXRvcl9TT1VSQ0VTID0gXAogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RX
ZWJWaWV3RWRpdG9yX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQogUHJvZ3Jh
bXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJWaWV3RWRpdG9yX0xEQUREID0gJCh3ZWJraXQyX3Rl
c3RzX2xkYWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJWaWV3RWRpdG9yX0xE
RkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfV2ViS2l0MkFQSVRl
c3RzX1Rlc3RQcmludGluZ19TT1VSQ0VTID0gXAorICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UHJpbnRpbmcuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJ
VGVzdHNfVGVzdFByaW50aW5nX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQor
UHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RQcmludGluZ19MREFERCA9ICQod2Via2l0Ml90
ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0UHJpbnRpbmdfTERGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFByaW50aW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiYmMzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHAKQEAgLTAsMCAr
MSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgorCitzdGF0aWMgdm9pZCB0ZXN0UHJpbnRPcGVyYXRpb25QcmludFNldHRp
bmdzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdSZWZQdHI8V2Vi
S2l0UHJpbnRPcGVyYXRpb24+IHByaW50T3BlcmF0aW9uID0gYWRvcHRHUmVmKHdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fbmV3KHRlc3QtPm1fd2ViVmlldykpOworICAgIHRlc3QtPmFzc2VydE9iamVj
dElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocHJpbnRPcGVyYXRpb24uZ2V0KCkp
KTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9zZXR0
aW5ncyhwcmludE9wZXJhdGlvbi5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfcHJpbnRf
b3BlcmF0aW9uX2dldF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9uLmdldCgpKSk7CisKKyAgICBH
UmVmUHRyPEd0a1ByaW50U2V0dGluZ3M+IHByaW50U2V0dGluZ3MgPSBhZG9wdEdSZWYoZ3RrX3By
aW50X3NldHRpbmdzX25ldygpKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVu
VGVzdEZpbmlzaGVzKEdfT0JKRUNUKHByaW50U2V0dGluZ3MuZ2V0KCkpKTsKKworICAgIEdSZWZQ
dHI8R3RrUGFnZVNldHVwPiBwYWdlU2V0dXAgPSBhZG9wdEdSZWYoZ3RrX3BhZ2Vfc2V0dXBfbmV3
KCkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19P
QkpFQ1QocGFnZVNldHVwLmdldCgpKSk7CisKKyAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3Nl
dF9wcmludF9zZXR0aW5ncyhwcmludE9wZXJhdGlvbi5nZXQoKSwgcHJpbnRTZXR0aW5ncy5nZXQo
KSk7CisgICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcGFnZV9zZXR1cChwcmludE9wZXJh
dGlvbi5nZXQoKSwgcGFnZVNldHVwLmdldCgpKTsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uLmdldCgpKSA9PSBw
cmludFNldHRpbmdzLmdldCgpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfcHJpbnRfb3BlcmF0aW9u
X2dldF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9uLmdldCgpKSA9PSBwYWdlU2V0dXAuZ2V0KCkp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld1ByaW50UmVxdWVzdGVkQ2FsbGJhY2soV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0UHJpbnRPcGVyYXRpb24qIHByaW50T3BlcmF0aW9u
LCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBnX2Fzc2VydCh3ZWJWaWV3ID09IHRlc3QtPm1f
d2ViVmlldyk7CisKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfUFJJTlRfT1BFUkFUSU9OKHByaW50
T3BlcmF0aW9uKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVChwcmludE9wZXJhdGlvbikpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF9w
cmludF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uKSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVy
YXRpb24pKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisKKyAg
ICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdQcmludFJlcXVlc3Rl
ZChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KHRlc3QtPm1fd2ViVmlldywgInByaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0sod2ViVmll
d1ByaW50UmVxdWVzdGVkQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0
bWw+PGJvZHkgb25Mb2FkPVwicHJpbnQoKTtcIj5XZWJLaXRHVEsrIHByaW50aW5nIHRlc3Q8L2Jv
ZHk+PC9odG1sPiIsIDApOworICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsK
K30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFBy
aW50T3BlcmF0aW9uIiwgInByaW50aW5nLXNldHRpbmdzIiwgdGVzdFByaW50T3BlcmF0aW9uUHJp
bnRTZXR0aW5ncyk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwcmlu
dC1yZXF1ZXN0ZWQiLCB0ZXN0V2ViVmlld1ByaW50UmVxdWVzdGVkKTsKK30KKwordm9pZCBhZnRl
ckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgK
aW5kZXggM2FmOTkwNC4uZjc4Yjg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
RW51bVR5cGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFcnJvci5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0SGl0VGVzdFJlc3VsdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
UHJpbnRPcGVyYXRpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNldHRpbmdzLmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRVUklSZXNwb25zZS5oPgo=
</data>
<flag name="review"
          id="128916"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>