<?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>57944</bug_id>
          
          <creation_ts>2011-04-06 06:06:56 -0700</creation_ts>
          <short_desc>[GTK] Implement WKView with a common widget that can be used by both C and gtk APIs</short_desc>
          <delta_ts>2011-04-28 10:01:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>59594</dependson>
    
    <dependson>59602</dependson>
    
    <dependson>59603</dependson>
    
    <dependson>59686</dependson>
    
    <dependson>59689</dependson>
          <blocked>54827</blocked>
    
    <blocked>57820</blocked>
    
    <blocked>58024</blocked>
    
    <blocked>59318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>380298</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-06 06:06:56 -0700</bug_when>
    <thetext>In the patch attached to bug #57820 I removed WKView because I thought we wanted to wrap the C API to provide a high level API similar to the webkit1 one. As Martin pointed out we actually want to support both APIs, so we need a common widget to support both WKView (C API) and WebKitWebView (gtk high level API).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380304</commentid>
    <comment_count>1</comment_count>
      <attachid>88405</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-06 06:15:07 -0700</bug_when>
    <thetext>Created attachment 88405
Patch

Move gtk API from UIProcess/gtk to UIProcess/API/gtk. WebView and WebViewWidget have been merged into WebKitWebViewBase, the common abstract class that will be used to create view widgets. PageClient implementation has been moved to PageClientImpl and it&apos;s used by WebKitWebViewBase. WKView provides a gtk widget for the C API inheriting from WebKitWebViewBase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380305</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-06 06:17:30 -0700</bug_when>
    <thetext>Attachment 88405 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1

Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h:6:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h:9:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h:15:  The parameter name &quot;webViewBase&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h:15:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h:16:  The parameter name &quot;webViewBase&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h:16:  The parameter name &quot;contextRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h:16:  The parameter name &quot;pageGroupRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h:17:  The parameter name &quot;webViewBase&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:29:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:46:  The parameter name &quot;webView&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:141:  webkit_web_view_base_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:291:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:351:  webkit_web_view_base_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp:52:  Declaration has space between type name and * in WebKitWebViewBase *webViewBase  [whitespace/declaration] [3]
Source/WebKit2/UIProcess/API/C/gtk/WKView.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/C/gtk/WKViewPrivate.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 19 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380364</commentid>
    <comment_count>3</comment_count>
      <attachid>88416</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-06 07:59:16 -0700</bug_when>
    <thetext>Created attachment 88416
Patch fixing coding style issues

Same patch simply fixing coding style, except GObject generated methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380371</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-06 08:03:42 -0700</bug_when>
    <thetext>Attachment 88416 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1

Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:142:  webkit_web_view_base_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:292:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:352:  webkit_web_view_base_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381646</commentid>
    <comment_count>5</comment_count>
      <attachid>88416</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-04-07 13:37:45 -0700</bug_when>
    <thetext>Comment on attachment 88416
Patch fixing coding style issues

Looks good, I&apos;m can not see any issue in the C API handling the widget directly instead of just getting it from a function, so it is a good option.

Still not sure if we should have the widget in the C API directory, because in theory the C API should be the base API so I guess it should not depend at all in the gtk API files. Also what about using WKWebViewWidget instead of WebKitWebViewBase, to make it more like the other C API files.

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

&gt; Source/WebKit2/UIProcess/API/C/gtk/WKView.cpp:38
&gt; +G_DEFINE_TYPE(WKView, wk_view, WEBKIT_TYPE_WEB_VIEW_BASE)

Currently we are implementing directly the get type functions to make the code more WebKit style, that would avoid some of the style warnings.

&gt; Source/WebKit2/UIProcess/API/C/gtk/WKView.cpp:48
&gt; +// Public API

Add a period to the end of the comment.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:49
&gt; +G_DEFINE_ABSTRACT_TYPE(WebKitWebViewBase, webkit_web_view_base, GTK_TYPE_CONTAINER)

Ditto, this will fix the style warning.

&gt; Source/WebKit2/UIProcess/API/gtk/webkitdefines.h:42
&gt; +/*
&gt; + * Copyright (C) 2007 Holger Hans Peter Freyther
&gt; + * Copyright (C) 2008 Collabora Ltd.
&gt; + *
&gt; + * This library is free software; you can redistribute it and/or
&gt; + * modify it under the terms of the GNU Library General Public
&gt; + * License as published by the Free Software Foundation; either
&gt; + * version 2 of the License, or (at your option) any later version.
&gt; + *
&gt; + * This library is distributed in the hope that it will be useful,
&gt; + * but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; + * Library General Public License for more details.
&gt; + *
&gt; + * You should have received a copy of the GNU Library General Public License
&gt; + * along with this library; see the file COPYING.LIB.  If not, write to
&gt; + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; + * Boston, MA 02110-1301, USA.
&gt; + */
&gt; +
&gt; +#ifndef webkitdefines_h
&gt; +#define webkitdefines_h
&gt; +
&gt; +#include &lt;glib.h&gt;
&gt; +
&gt; +#ifdef G_OS_WIN32
&gt; +    #ifdef BUILDING_WEBKIT
&gt; +        #define WEBKIT_API __declspec(dllexport)
&gt; +    #else
&gt; +        #define WEBKIT_API __declspec(dllimport)
&gt; +    #endif
&gt; +    #define WEBKIT_OBSOLETE_API WEBKIT_API
&gt; +#else
&gt; +    #define WEBKIT_API __attribute__((visibility(&quot;default&quot;)))
&gt; +    #define WEBKIT_OBSOLETE_API WEBKIT_API __attribute__((deprecated))
&gt; +#endif
&gt; +
&gt; +#ifndef WEBKIT_API
&gt; +    #define WEBKIT_API
&gt; +#endif
&gt; +
&gt; +#endif

Honestly I&apos;m not sure if we should just forget about reusing code between this API and the webkit1 or try to share some code. At this point I think trying to share code could be overkill at some point so I&apos;m ok with copying the files but open to proposals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381773</commentid>
    <comment_count>6</comment_count>
      <attachid>88416</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-07 15:19:09 -0700</bug_when>
    <thetext>Comment on attachment 88416
Patch fixing coding style issues

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

&gt; Source/WebKit2/ChangeLog:24
&gt; +        * UIProcess/API/gtk/PageClientImpl.cpp: Added.

Minor bikeshed: I think it would make more sense for the directory to be UIProcess/API/gobject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382059</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-08 00:37:25 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 88416 [details])
&gt; Looks good, I&apos;m can not see any issue in the C API handling the widget directly instead of just getting it from a function, so it is a good option.
&gt; 
&gt; Still not sure if we should have the widget in the C API directory, because in theory the C API should be the base API so I guess it should not depend at all in the gtk API files. Also what about using WKWebViewWidget instead of WebKitWebViewBase, to make it more like the other C API files.

WebKitWebViewBase is something in the middle of both the C and the gtk API. Martin was worried that this widget will appear in the object hierarchy in the docs of the gtk API, so I decided to use the prefix of the gtk API for consistency. Both Mac and Qt have their view widgets in UIProcess/API/mac|qt so I tried to be consistent with other ports too. And regarding the name, using the word Widget in the name of class inheriting from GtkWidget sounded a bit redundant to me, but I don&apos;t mind to rename it if you think it&apos;s better. 

&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88416&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/gtk/WKView.cpp:38
&gt; &gt; +G_DEFINE_TYPE(WKView, wk_view, WEBKIT_TYPE_WEB_VIEW_BASE)
&gt; 
&gt; Currently we are implementing directly the get type functions to make the code more WebKit style, that would avoid some of the style warnings.

I think some exceptions to the coding style make sense, like this one, G_DEFINE_TYPE implementation has changed several times, using the macro improves the maintainability, and it introduces only a couple of funtions that don&apos;t follow the coding style. But again, if you think it&apos;s not worth it, I&apos;ll change it. 

&gt; &gt; Source/WebKit2/UIProcess/API/C/gtk/WKView.cpp:48
&gt; &gt; +// Public API
&gt; 
&gt; Add a period to the end of the comment.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:49
&gt; &gt; +G_DEFINE_ABSTRACT_TYPE(WebKitWebViewBase, webkit_web_view_base, GTK_TYPE_CONTAINER)
&gt; 
&gt; Ditto, this will fix the style warning.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/webkitdefines.h:42
&gt; &gt; +/*
&gt; &gt; + * Copyright (C) 2007 Holger Hans Peter Freyther
&gt; &gt; + * Copyright (C) 2008 Collabora Ltd.
&gt; &gt; + *
&gt; &gt; + * This library is free software; you can redistribute it and/or
&gt; &gt; + * modify it under the terms of the GNU Library General Public
&gt; &gt; + * License as published by the Free Software Foundation; either
&gt; &gt; + * version 2 of the License, or (at your option) any later version.
&gt; &gt; + *
&gt; &gt; + * This library is distributed in the hope that it will be useful,
&gt; &gt; + * but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; &gt; + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; &gt; + * Library General Public License for more details.
&gt; &gt; + *
&gt; &gt; + * You should have received a copy of the GNU Library General Public License
&gt; &gt; + * along with this library; see the file COPYING.LIB.  If not, write to
&gt; &gt; + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; &gt; + * Boston, MA 02110-1301, USA.
&gt; &gt; + */
&gt; &gt; +
&gt; &gt; +#ifndef webkitdefines_h
&gt; &gt; +#define webkitdefines_h
&gt; &gt; +
&gt; &gt; +#include &lt;glib.h&gt;
&gt; &gt; +
&gt; &gt; +#ifdef G_OS_WIN32
&gt; &gt; +    #ifdef BUILDING_WEBKIT
&gt; &gt; +        #define WEBKIT_API __declspec(dllexport)
&gt; &gt; +    #else
&gt; &gt; +        #define WEBKIT_API __declspec(dllimport)
&gt; &gt; +    #endif
&gt; &gt; +    #define WEBKIT_OBSOLETE_API WEBKIT_API
&gt; &gt; +#else
&gt; &gt; +    #define WEBKIT_API __attribute__((visibility(&quot;default&quot;)))
&gt; &gt; +    #define WEBKIT_OBSOLETE_API WEBKIT_API __attribute__((deprecated))
&gt; &gt; +#endif
&gt; &gt; +
&gt; &gt; +#ifndef WEBKIT_API
&gt; &gt; +    #define WEBKIT_API
&gt; &gt; +#endif
&gt; &gt; +
&gt; &gt; +#endif
&gt; 
&gt; Honestly I&apos;m not sure if we should just forget about reusing code between this API and the webkit1 or try to share some code. At this point I think trying to share code could be overkill at some point so I&apos;m ok with copying the files but open to proposals.

Yes, I wan&apos;t sure either. 

Thank you very much for the coments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382060</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-08 00:38:59 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 88416 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88416&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:24
&gt; &gt; +        * UIProcess/API/gtk/PageClientImpl.cpp: Added.
&gt; 
&gt; Minor bikeshed: I think it would make more sense for the directory to be UIProcess/API/gobject.

WebKitWebViewBase inherits from GtkContainer, and we are using gtk there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386488</commentid>
    <comment_count>9</comment_count>
      <attachid>89758</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-15 02:35:35 -0700</bug_when>
    <thetext>Created attachment 89758
Updated patch

Patch updated to current git master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386489</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-15 02:37:32 -0700</bug_when>
    <thetext>Attachment 89758 did not pass style-queue:

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

Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:144:  webkit_web_view_base_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:294:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:354:  webkit_web_view_base_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392925</commentid>
    <comment_count>11</comment_count>
      <attachid>89758</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-26 16:05:57 -0700</bug_when>
    <thetext>Comment on attachment 89758
Updated patch

I&apos;m going to r- this patch. On discussing this with Alex, it seems that we should be able to leave our current WebKit2 C-API design mostly unchanged. Why remove the WebView class?  It seems there&apos;d be much less code churn if we simply turn the existing WebViewWidget into the base widget. If that&apos;s not possible, let&apos;s discuss alternatives from there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393393</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-26 23:51:42 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 89758 [details])
&gt; I&apos;m going to r- this patch. On discussing this with Alex, it seems that we should be able to leave our current WebKit2 C-API design mostly unchanged.

what design?

&gt; Why remove the WebView class? 

First, I think everything related to the API should be under API dir, for consistency. WebView seems confusing to me, the name WebView makes me think it&apos;s a widget, but it&apos;s not although it includes some methods that we wouldn&apos;t need if it were a widget: getWebViewWindow(), paint(), setSise(). Other methods, however, use the view word like if the view were another thing displayView(), scrollView(), isViewFocused(), etc. This is because this class is mixing PageClient (it inherits from it) and WebView. That&apos;s why I moved the bits that belong to the view to the widget implementation and added PageClientImpl.cpp for the PageClient implementation, which is what mac and qt ports do. 

Then I renamed WebViewWidget to WebKitViewBase, for consistency with the gtk1 api, because you were worried about such class appearing in the docs. I made it an abstract class without public methods, so that WKView and WebKitWebView could inherit from it and share the implementation.

&gt; It seems there&apos;d be much less code churn if we simply turn the existing WebViewWidget into the base widget.

That&apos;s exactly what I did. I don&apos;t see why it&apos;s less code, I simply moved code to PageclientImpl and WebKitWebViewBase. It&apos;s even less code since I removed unneeded methods like getWebViewWindow(), paint(), setSise().

&gt; If that&apos;s not possible, let&apos;s discuss alternatives from there.

what&apos;s wrong with my alternative?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393407</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-27 00:14:39 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (From update of attachment 89758 [details] [details])
&gt; &gt; I&apos;m going to r- this patch. On discussing this with Alex, it seems that we should be able to leave our current WebKit2 C-API design mostly unchanged.
&gt; 
&gt; what design?

This patch does a lot of different things at once:

1. It moves the WebKitViewWidget class to a different directory and gives it a different name.
2. It moves a lot of the logic from the PageClient / WebKit into the WebKitViewWidget. 
3. It changes the interface that&apos;s exposed in the existing API. Instead of a WKViewRef being an opaque C++ class pointer, it&apos;s now a GtkWidget.

I think that some of these things are a good idea and I&apos;m not yet convinced about others. Can you split this patch up a bit so we can discuss each bit separately? First let&apos;s move the WebKitViewWidget GObject. Then we can approach each of the other tasks separately.

In particular, I want to move the logic for handling key bindings to a separate class so WebKit1 and WebKit2 can share it. Once I finish that, the second part of this patch will be much smaller.

As for the third point, I feel we should discuss it and reach consensus before making the change.

&gt; what&apos;s wrong with my alternative?

It&apos;s hard to answer this question, because there are multiple things happening in your patch. It took me quite a while to review it because it was so large. Would you be willing to follow the approach to splitting this patch I suggested above? It will be easier for me and perhaps others to make decisions about your suggested changes if orthogonal parts are in separate patches and bugs. First you could just move and rename the WebKitViewWidget and we could go from there on different bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393411</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-27 00:29:10 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (From update of attachment 89758 [details] [details] [details])
&gt; &gt; &gt; I&apos;m going to r- this patch. On discussing this with Alex, it seems that we should be able to leave our current WebKit2 C-API design mostly unchanged.
&gt; &gt; 
&gt; &gt; what design?
&gt; 
&gt; This patch does a lot of different things at once:

yes, I didn&apos;t split it into different patches because it doesn&apos;t introduce new code, it simply moves existing one, so you don&apos;t need to review the code. 

&gt; 1. It moves the WebKitViewWidget class to a different directory and gives it a different name.
&gt; 2. It moves a lot of the logic from the PageClient / WebKit into the WebKitViewWidget. 
&gt; 3. It changes the interface that&apos;s exposed in the existing API. Instead of a WKViewRef being an opaque C++ class pointer, it&apos;s now a GtkWidget.

Yes, that&apos;s what the webkit2 design docs says: &quot;WKView[Ref]: Native view that hooks into the platform&apos;s toolkit. On Windows, this wraps a HWND. On the Mac, it inherits from NSView.&quot; So for GTK+ looks natural to me that WKView inherits from a GtkWidget. We discussed it already and we agreed on that.

&gt; 
&gt; I think that some of these things are a good idea and I&apos;m not yet convinced about others.

which ones? it&apos;s also difficult to rewrite a patch without knowing what&apos;s wrong.

&gt; Can you split this patch up a bit so we can discuss each bit separately? First let&apos;s move the WebKitViewWidget GObject. Then we can approach each of the other tasks separately.

Sure, I&apos;ll do it.

&gt; In particular, I want to move the logic for handling key bindings to a separate class so WebKit1 and WebKit2 can share it. Once I finish that, the second part of this patch will be much smaller.

Makes a lot of sense.

&gt; As for the third point, I feel we should discuss it and reach consensus before making the change.

Ok, let&apos;s do it again in different bugs.

&gt; &gt; what&apos;s wrong with my alternative?
&gt; 
&gt; It&apos;s hard to answer this question, because there are multiple things happening in your patch. It took me quite a while to review it because it was so large. Would you be willing to follow the approach to splitting this patch I suggested above? It will be easier for me and perhaps others to make decisions about your suggested changes if orthogonal parts are in separate patches and bugs. First you could just move and rename the WebKitViewWidget and we could go from there on different bugs.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393512</commentid>
    <comment_count>15</comment_count>
      <attachid>89758</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-27 05:32:59 -0700</bug_when>
    <thetext>Comment on attachment 89758
Updated patch

This bug is now a metabug, new patches are attached to bugs blocking this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394503</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-28 10:01:21 -0700</bug_when>
    <thetext>All bugs blocking this one are fixed now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88405</attachid>
            <date>2011-04-06 06:15:07 -0700</date>
            <delta_ts>2011-04-06 07:59:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-c-api.diff</filename>
            <type>text/plain</type>
            <size>106087</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmNzBiMjE1Li4zNDc2ZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEy
IEBACisyMDExLTA0LTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RL
XSBJbXBsZW1lbnQgV0tWaWV3IHdpdGggYSBjb21tb24gd2lkZ2V0IHRoYXQgY2FuIGJlIHVzZWQg
YnkgYm90aCBDIGFuZCBndGsgQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTc5NDQKKworICAgICAgICBNb3ZlIGd0ayBBUEkgZnJvbSBVSVByb2Nl
c3MvZ3RrIHRvIFVJUHJvY2Vzcy9BUEkvZ3RrLiBXZWJWaWV3IGFuZAorICAgICAgICBXZWJWaWV3
V2lkZ2V0IGhhdmUgYmVlbiBtZXJnZWQgaW50byBXZWJLaXRXZWJWaWV3QmFzZSwgdGhlIGNvbW1v
bgorICAgICAgICBhYnN0cmFjdCBjbGFzcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdmll
dworICAgICAgICB3aWRnZXRzLiBQYWdlQ2xpZW50IGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIG1v
dmVkIHRvCisgICAgICAgIFBhZ2VDbGllbnRJbXBsIGFuZCBpdCdzIHVzZWQgYnkgV2ViS2l0V2Vi
Vmlld0Jhc2UuIFdLVmlldyBwcm92aWRlcworICAgICAgICBhIGd0ayB3aWRnZXQgZm9yIHRoZSBD
IEFQSSBpbmhlcml0aW5nIGZyb20gV2ViS2l0V2ViVmlld0Jhc2UuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvZ3RrL1dLQVBJQ2FzdEd0ay5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNwcDoKKyAgICAgICAgKHdr
X3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICh3a192aWV3X2luaXQpOgorICAgICAgICAoV0tW
aWV3R2V0UGFnZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9ndGsvV0tWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1Zp
ZXdQcml2YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9n
dGsvV0tWaWV3LmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJ
bXBsKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6On5QYWdlQ2xpZW50SW1wbCk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNldFZpZXdOZWVkc0Rpc3BsYXkp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlzcGxheVZpZXcpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRJbXBsOjp2aWV3U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1Zp
ZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmlzVmlld0luV2lu
ZG93KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRDcmFzaCk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkaWRSZWxhdW5jaFByb2Nlc3MpOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0Rm9jdXMpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6dGFrZUZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OnRvb2xUaXBDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OnNldEN1cnNvcik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRWaWV3
cG9ydEFyZ3VtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZWdpc3Rl
ckVkaXRDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNsZWFyQWxs
RWRpdENvbW1hbmRzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNvbnZlcnRU
b0RldmljZVNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNvbnZlcnRU
b1VzZXJTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aW5kb3dUb1Nj
cmVlbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aEtleUV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZE5vdEhhbmRsZUtleUV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZUNvbnRleHRNZW51UHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0RmluZEluZGljYXRvcik6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpwYWdlRGlkRW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnBhZ2VEaWRM
ZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZUNsaWVudEltcGw6OmRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3VzdG9tUmVwcmVzZW50
YXRpb25ab29tRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNldEN1
c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpwYWdlQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRp
ZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50SW1wbDo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJWaWV3LmguCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dXNlclNwYWNlU2NhbGVG
YWN0b3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cDogQWRkZWQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemUpOgorICAgICAgICAo
d2Via2l0V2ViVmlld0Jhc2VDb250YWluZXJBZGQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KToKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdCYXNlRXhwb3NlKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
RHJhdyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVNpemVBbGxvY2F0ZSk6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3QmFzZUZvY3VzSW5FdmVudCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZUZvY3VzT3V0RXZlbnQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VLZXlQcmVzc0V2
ZW50KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlS2V5UmVsZWFzZUV2ZW50KToKKyAgICAg
ICAgKGdldEV2ZW50VGltZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblByZXNz
RXZlbnQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VCdXR0b25SZWxlYXNlRXZlbnQpOgor
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTY3JvbGxFdmVudCk6CisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZU1vdGlvbk5vdGlmeUV2ZW50KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19i
YXNlX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRp
dG9yQ29tbWFuZCk6CisgICAgICAgIChiYWNrc3BhY2VDYWxsYmFjayk6CisgICAgICAgIChzZWxl
Y3RBbGxDYWxsYmFjayk6CisgICAgICAgIChjdXRDbGlwYm9hcmRDYWxsYmFjayk6CisgICAgICAg
IChjb3B5Q2xpcGJvYXJkQ2FsbGJhY2spOgorICAgICAgICAocGFzdGVDbGlwYm9hcmRDYWxsYmFj
ayk6CisgICAgICAgICh0b2dnbGVPdmVyd3JpdGVDYWxsYmFjayk6CisgICAgICAgIChwb3B1cE1l
bnVDYWxsYmFjayk6CisgICAgICAgIChzaG93SGVscENhbGxiYWNrKToKKyAgICAgICAgKGRlbGV0
ZUZyb21DdXJzb3JDYWxsYmFjayk6CisgICAgICAgIChtb3ZlQ3Vyc29yQ2FsbGJhY2spOgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VFZGl0b3JJbml0KToKKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdCYXNlR2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudCk6CisgICAgICAgICh3ZWJraXRXZWJW
aWV3QmFzZUNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VHZXRQYWdl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmguCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdGRlZmluZXMuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpwYWdl
KToKKyAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmVuc3Vy
ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJl
YVByb3h5OjpkcmF3VXBkYXRlQ2h1bmtJbnRvQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZ3RrL1dlYlZpZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsv
V2ViVmlld1dpZGdldC5jcHA6IFJlbW92ZWQuCisKIDIwMTEtMDQtMDUgIENoYW5nIFNodSAgPGNz
aHVAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlZGFmMGE1Li43
MTM3NmJkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDQtMDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBXS1ZpZXcgd2l0aCBhIGNvbW1vbiB3aWRnZXQgdGhh
dCBjYW4gYmUgdXNlZCBieSBib3RoIEMgYW5kIGd0ayBBUElzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Nzk0NAorCisgICAgICAgIFdLVmlldyBpcyBu
b3cgYSBHdGtXaWRnZXQgc28gaXQgY2FuIGJlIHVzZWQgaXQgYXMgYSB3aWRnZXQuCisKKyAgICAg
ICAgKiBNaW5pQnJvd3Nlci9ndGsvbWFpbi5jOgorICAgICAgICAoYWN0aXZhdGVVcmlFbnRyeUNh
bGxiYWNrKToKKyAgICAgICAgKGNyZWF0ZVdpbmRvdyk6CisgICAgICAgIChtYWluKToKKwogMjAx
MS0wNC0wNSAgS2V2aW4gT2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAg
ICAgICBbd3hdIE1hYyBidWlsZCBmaXguIEhhbmRsZSBjYXNlcyB3aGVyZSAxMC40IFNESyBpcyBu
b3QgaW5zdGFsbGVkLCBhbmQgYWxzbyBhZGQgeDg2XzY0IGFyY2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0K
aW5kZXggYTkzY2NiMC4uMTFiNTkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTI5Myw2ICsy
OTMsNyBAQCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL2d0ay9XS0FQSUNhc3RHdGsuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2d0ay9XS1ZpZXcuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
Z3RrL1dLVmlldy5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmll
d1ByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dlYktpdDIuaCBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oIFwKQEAg
LTM1NCw2ICszNTUsMTEgQEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9jcHAvV0tSZXRhaW5QdHIuaCBcCisJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIFwKKwlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmggXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VQcm94eS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9B
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuY3BwIFwKQEAg
LTM4MCwxMiArMzg2LDggQEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUd0ay5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yR3RrLmNwcCBcCi0JU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViUGFnZVByb3h5R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJQcmVmZXJlbmNlc0d0ay5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
Vmlldy5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5j
cHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNo
ZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xh
dW5jaGVyLmNwcCBcCkBAIC03MDcsNiArNzA5LDcgQEAgbGliV2ViS2l0Ml9sYV9DUFBGTEFHUyA9
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MgXAogCS1JJChz
cmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsgXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRG93bmxvYWRzIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsv
V0tBUElDYXN0R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLQVBJ
Q2FzdEd0ay5oCmluZGV4IDc5YzExMzMuLmY3OTVhZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tBUElDYXN0R3RrLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS0FQSUNhc3RHdGsuaApAQCAtMzEsMTEgKzMxLDExIEBA
CiAjZXJyb3IgIlBsZWFzZSAjaW5jbHVkZSBcIldLQVBJQ2FzdC5oXCIgaW5zdGVhZCBvZiB0aGlz
IGZpbGUgZGlyZWN0bHkuIgogI2VuZGlmCiAKLW5hbWVzcGFjZSBXZWJLaXQgewordHlwZWRlZiBz
dHJ1Y3QgX1dLVmlldyBXS1ZpZXc7CiAKLWNsYXNzIFdlYlZpZXc7CituYW1lc3BhY2UgV2ViS2l0
IHsKIAotV0tfQUREX0FQSV9NQVBQSU5HKFdLVmlld1JlZiwgV2ViVmlldykKK1dLX0FERF9BUElf
TUFQUElORyhXS1ZpZXdSZWYsIFdLVmlldykKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5jcHAKaW5kZXggZTNkNmM2OS4uYmM3YmJjNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNwcApAQCAtMjcsMzMg
KzI3LDMzIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXS1ZpZXcuaCIKKyNp
bmNsdWRlICJXS1ZpZXdQcml2YXRlLmgiCiAKLSNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNs
dWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAot
V0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwUmVmKQorR19ERUZJTkVfVFlQRShXS1ZpZXcsIHdrX3ZpZXcsIFdFQktJ
VF9UWVBFX1dFQl9WSUVXX0JBU0UpCisKK3N0YXRpYyB2b2lkIHdrX3ZpZXdfY2xhc3NfaW5pdChX
S1ZpZXdDbGFzcyogdmlld0NsYXNzKQogewotICAgIFJlZlB0cjxXZWJWaWV3PiB2aWV3ID0gV2Vi
Vmlldzo6Y3JlYXRlKHRvSW1wbChjb250ZXh0UmVmKSwgdG9JbXBsKHBhZ2VHcm91cFJlZikpOwot
ICAgIHJldHVybiB0b0FQSSh2aWV3LnJlbGVhc2UoKS5sZWFrUmVmKCkpOwogfQogCi1HdGtXaWRn
ZXQqIFdLVmlld0dldFdpbmRvdyhXS1ZpZXdSZWYgdmlld1JlZikKK3N0YXRpYyB2b2lkIHdrX3Zp
ZXdfaW5pdChXS1ZpZXcqIHZpZXcpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+d2lu
ZG93KCk7CiB9CiAKLVdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3UmVmKQor
Ly8gUHVibGljIEFQSQorV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpCiB7
Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbCh2aWV3UmVmKS0+cGFnZSgpKTsKKyAgICByZXR1cm4g
dG9BUEkod2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHRvSW1w
bCh2aWV3KSkpKTsKIH0KIAotV0tVUkxSZWYgV0tVUkxDcmVhdGVXaXRoVVJMKGNvbnN0IGNoYXIq
IHVybCkKK1dLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdL
UGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRVUkxBUEko
U3RyaW5nSW1wbDo6Y3JlYXRlKHVybCkubGVha1JlZigpKTsKKyAgICBXS1ZpZXcqIHZpZXcgPSBX
S19WSUVXKGdfb2JqZWN0X25ldyhXS19UWVBFX1ZJRVcsIDApKTsKKyAgICB3ZWJraXRXZWJWaWV3
QmFzZUNyZWF0ZVdlYlBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UodmlldyksIGNvbnRleHRSZWYs
IHBhZ2VHcm91cFJlZik7CisgICAgcmV0dXJuIHRvQVBJKHZpZXcpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmgKaW5kZXggODJlNTVhYi4uZGQ2MGI3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5oCkBAIC0yOSwy
MCArMjksMTYgQEAKICNkZWZpbmUgV0tWaWV3X2gKIAogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNl
Lmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAi
QyIgewogI2VuZGlmCiAKLVdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLQ29udGV4
dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwotCi1XS19FWFBPUlQgR3Rr
V2lkZ2V0KiBXS1ZpZXdHZXRXaW5kb3coV0tWaWV3UmVmIHZpZXcpOwordHlwZWRlZiBzdHJ1Y3Qg
X1dLVmlldyBXS1ZpZXc7CiAKK1dLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwogV0tfRVhQT1JUIFdL
UGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3KTsKIAotV0tfRVhQT1JUIFdLVVJM
UmVmIFdLVVJMQ3JlYXRlV2l0aFVSTChjb25zdCBjaGFyKik7Ci0KICNpZmRlZiBfX2NwbHVzcGx1
cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
Z3RrL1dLVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsv
V0tWaWV3UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODY2
ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3Rr
L1dLVmlld1ByaXZhdGUuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdL
Vmlld1ByaXZhdGVfaAorI2RlZmluZSBXS1ZpZXdQcml2YXRlX2gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2UuaCIKKyNpbmNsdWRlICJ3ZWJr
aXRkZWZpbmVzLmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXS19UWVBFX1ZJRVcgICAg
ICAgICAgICAod2tfdmlld19nZXRfdHlwZSgpKQorI2RlZmluZSBXS19WSUVXKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdLX1RZUEVfVklFVywgV0tW
aWV3KSkKKyNkZWZpbmUgV0tfVklFV19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXS19UWVBFX1ZJRVcsIFdLVmlld0NsYXNzKSkKKyNkZWZpbmUgV0tf
SVNfVklFVyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
S19UWVBFX1ZJRVcpKQorI2RlZmluZSBXS19JU19WSUVXX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdLX1RZUEVfVklFVykpCisjZGVmaW5lIFdLX1ZJRVdf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0tfVFlQ
RV9WSUVXLCBXS1ZpZXdDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XS1ZpZXdDbGFzcyAgIFdL
Vmlld0NsYXNzOworCitzdHJ1Y3QgX1dLVmlldyB7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UgcGFy
ZW50OworfTsKKworc3RydWN0IF9XS1ZpZXdDbGFzcyB7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VD
bGFzcyBwYXJlbnQ7Cit9OworCitHVHlwZSB3a192aWV3X2dldF90eXBlKHZvaWQpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLy8gV0tWaWV3X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44MzhiNTBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCkBAIC0wLDAgKzEsMjUxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwu
aCIKKworI2luY2x1ZGUgIkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5LmgiCisj
aW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworUGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsKEd0a1dpZGdldCogd2ViVmll
dykKKyAgICA6IG1fdmlldyh3ZWJWaWV3KQoreworfQorCitQYWdlQ2xpZW50SW1wbDo6flBhZ2VD
bGllbnRJbXBsKCkKK3sKK30KKworUGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBQYWdlQ2xp
ZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpCit7CisgICAgV2ViS2l0V2ViVmlld0Jh
c2UgKndlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92aWV3KTsKKyAgICByZXR1
cm4gQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZSh3ZWJWaWV3QmFzZSwgd2Vi
a2l0V2ViVmlld0Jhc2VHZXRQYWdlKHdlYlZpZXdCYXNlKSk7Cit9CisKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzcGxheVZp
ZXcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OnNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK1dlYkNvcmU6OkludFNpemUgUGFnZUNsaWVudEltcGw6OnZpZXdTaXplKCkKK3sKKyAgICBH
dGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbiht
X3ZpZXcsICZhbGxvY2F0aW9uKTsKKyAgICByZXR1cm4gSW50U2l6ZShhbGxvY2F0aW9uLndpZHRo
LCBhbGxvY2F0aW9uLmhlaWdodCk7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1dp
bmRvd0FjdGl2ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6
aXNWaWV3VmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3coKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OnByb2Nlc3NEaWRDcmFzaCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRGb2N1cyhib29sKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnRha2VGb2N1cyhi
b29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29yKGNvbnN0
IEN1cnNvciYgY3Vyc29yKQoreworICAgIC8vIFtHVEtdIFdpZGdldDo6c2V0Q3Vyc29yKCkgZ2V0
cyBjYWxsZWQgZnJlcXVlbnRseQorICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mzg4CisgICAgLy8gU2V0dGluZyB0aGUgY3Vyc29yIG1heSBiZSBhbiBleHBl
bnNpdmUgb3BlcmF0aW9uIGluIHNvbWUgYmFja2VuZHMsCisgICAgLy8gc28gZG9uJ3QgcmUtc2V0
IHRoZSBjdXJzb3IgaWYgaXQncyBhbHJlYWR5IHNldCB0byB0aGUgdGFyZ2V0IHZhbHVlLgorICAg
IEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fdmlldyk7CisgICAg
R2RrQ3Vyc29yKiBjdXJyZW50Q3Vyc29yID0gZ2RrX3dpbmRvd19nZXRfY3Vyc29yKHdpbmRvdyk7
CisgICAgR2RrQ3Vyc29yKiBuZXdDdXJzb3IgPSBjdXJzb3IucGxhdGZvcm1DdXJzb3IoKS5nZXQo
KTsKKyAgICBpZiAoY3VycmVudEN1cnNvciAhPSBuZXdDdXJzb3IpCisgICAgICAgIGdka193aW5k
b3dfc2V0X2N1cnNvcih3aW5kb3csIG5ld0N1cnNvcik7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OnNldFZpZXdwb3J0QXJndW1lbnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRz
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpy
ZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBh
Z2VQcm94eTo6VW5kb09yUmVkbykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBhZ2VDbGllbnRJbXBsOjpjbGVhckFsbEVkaXRDb21tYW5kcygpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9EZXZpY2VT
cGFjZShjb25zdCBGbG9hdFJlY3QmIHZpZXdSZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIHZpZXdSZWN0OworfQorCitGbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNv
bnZlcnRUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHZpZXdSZWN0KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZpZXdSZWN0OworfQorCitJbnRSZWN0IFBhZ2VDbGll
bnRJbXBsOjp3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50
SW1wbDo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9v
bCB3YXNFdmVudEhhbmRsZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQ
YWdlQ2xpZW50SW1wbDo6ZGlkTm90SGFuZGxlS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCYgZXZlbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGFzc1JlZlB0
cjxXZWJQb3B1cE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5
KFdlYlBhZ2VQcm94eSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3Jl
YXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEZpbmRJbmRp
Y2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCit2
b2lkIFBhZ2VDbGllbnRJbXBsOjpwYWdlRGlkRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpwYWdl
RGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50JiBldmVudCwgVmVjdG9yPFdURjo6U3RyaW5nPiYgY29tbWFuZExpc3QpCit7
CisgICAgd2Via2l0V2ViVmlld0Jhc2VHZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KFdFQktJ
VF9XRUJfVklFV19CQVNFKG1fdmlldyksIGV2ZW50LCBjb21tYW5kTGlzdCk7Cit9CisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21S
ZXByZXNlbnRhdGlvbikKK3sKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRmluaXNoTG9h
ZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZp
bGVuYW1lLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikKK3sKK30KKworZG91YmxlIFBh
Z2VDbGllbnRJbXBsOjpjdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OnNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcihkb3VibGUpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZUNsb3NlZCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdl
U2Nyb2xsYmFyc0Zvck1haW5GcmFtZSgpIGNvbnN0Cit7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OmZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8SW50UmVjdD4mKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWZkM2NhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaApAQCAt
MCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEg
TW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlQ2xpZW50SW1wbF9oCisjZGVm
aW5lIFBhZ2VDbGllbnRJbXBsX2gKKworI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBEcmF3aW5nQXJlYVByb3h5OworY2xhc3MgV2ViUGFnZU5hbWVzcGFjZTsK
KworY2xhc3MgUGFnZUNsaWVudEltcGwgOiBwdWJsaWMgUGFnZUNsaWVudCB7CitwdWJsaWM6Cisg
ICAgflBhZ2VDbGllbnRJbXBsKCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZUNsaWVudElt
cGw+IGNyZWF0ZShHdGtXaWRnZXQqIHdlYlZpZXcpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFBhZ2VDbGllbnRJbXBsKHdlYlZpZXcpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgUGFnZUNsaWVudEltcGwoR3RrV2lkZ2V0KiB3ZWJWaWV3KTsKKworICAgIHZpcnR1YWwgUGFz
c093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7CisgICAg
dmlydHVhbCB2b2lkIHNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5VmlldygpOworICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNjcm9sbE9mZnNldCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRTaXplIHZp
ZXdTaXplKCk7CisgICAgdmlydHVhbCBib29sIGlzVmlld1dpbmRvd0FjdGl2ZSgpOworICAgIHZp
cnR1YWwgYm9vbCBpc1ZpZXdGb2N1c2VkKCk7CisgICAgdmlydHVhbCBib29sIGlzVmlld1Zpc2li
bGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3SW5XaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc0RpZENyYXNoKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbGF1bmNoUHJvY2Vz
cygpOworICAgIHZpcnR1YWwgdm9pZCBwYWdlQ2xvc2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dEZvY3VzKGJvb2wgZm9jdXNlZCk7CisgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhib29sIGRp
cmVjdGlvbik7CisgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdURjo6U3Ry
aW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNv
bnN0IFdlYkNvcmU6OkN1cnNvciYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3cG9ydEFyZ3Vt
ZW50cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOworICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdl
YlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENv
bW1hbmRzKCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNl
U3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpG
bG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkTm90SGFuZGxlS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYp
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gY3JlYXRlUG9wdXBN
ZW51UHJveHkoV2ViUGFnZVByb3h5Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvbnRl
eHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5Kik7CisgICAg
dmlydHVhbCB2b2lkIHNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwg
Ym9vbCBmYWRlT3V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1h
aW5GcmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBmbGFzaEJhY2tpbmdTdG9yZVVwZGF0
ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiB1cGRhdGVSZWN0cyk7CisgICAgdmly
dHVhbCBmbG9hdCB1c2VyU3BhY2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50JiwgVmVjdG9yPFdURjo6U3RyaW5nPiYpOworCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkRW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRMZWF2ZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdExv
YWRGb3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21SZXByZXNlbnRhdGlvbik7CisgICAgdmlydHVh
bCB2b2lkIGRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYp
OworICAgIHZpcnR1YWwgZG91YmxlIGN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91Ymxl
KTsKKworICAgIEd0a1dpZGdldCogbV92aWV3OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBQYWdlQ2xpZW50SW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkMTk0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtMCwwICsx
LDYzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiR093blB0ckd0ay5oIgorI2luY2x1
ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50Lmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5o
IgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2lu
Y2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0NvbnRl
eHQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUVkaXRvckluaXQoV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYlZpZXcpOworCitHX0RFRklORV9BQlNUUkFDVF9UWVBFKFdlYktpdFdlYlZpZXdC
YXNlLCB3ZWJraXRfd2ViX3ZpZXdfYmFzZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQorCitzdHJ1Y3Qg
X1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CisgICAgT3duUHRyPFBhZ2VDbGllbnRJbXBsPiBw
YWdlQ2xpZW50OworICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IHBhZ2U7CisgICAgZ2Jvb2xlYW4g
aXNQYWdlQWN0aXZlOworCisgICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQ7CisgICAgZ2ludCBj
dXJyZW50Q2xpY2tDb3VudDsKKyAgICBJbnRQb2ludCBwcmV2aW91c0NsaWNrUG9pbnQ7CisgICAg
Z3VpbnQgcHJldmlvdXNDbGlja0J1dHRvbjsKKyAgICBndWludDMyIHByZXZpb3VzQ2xpY2tUaW1l
OworCisgICAgLy8gRWRpdG9yCisgICAgR1JlZlB0cjxHdGtXaWRnZXQ+IGVkaXRvcldpZGdldDsK
KyAgICBWZWN0b3I8V1RGOjpTdHJpbmc+IHBlbmRpbmdFZGl0b3JDb21tYW5kczsKK307CisKK3N0
YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKK3sK
KyAgICBndGtfd2lkZ2V0X3NldF9yZWFsaXplZCh3aWRnZXQsIFRSVUUpOworCisgICAgR3RrQWxs
b2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0
LCAmYWxsb2NhdGlvbik7CisKKyAgICBHZGtXaW5kb3dBdHRyIGF0dHJpYnV0ZXM7CisgICAgYXR0
cmlidXRlcy53aW5kb3dfdHlwZSA9IEdES19XSU5ET1dfQ0hJTEQ7CisgICAgYXR0cmlidXRlcy54
ID0gYWxsb2NhdGlvbi54OworICAgIGF0dHJpYnV0ZXMueSA9IGFsbG9jYXRpb24ueTsKKyAgICBh
dHRyaWJ1dGVzLndpZHRoID0gYWxsb2NhdGlvbi53aWR0aDsKKyAgICBhdHRyaWJ1dGVzLmhlaWdo
dCA9IGFsbG9jYXRpb24uaGVpZ2h0OworICAgIGF0dHJpYnV0ZXMud2NsYXNzID0gR0RLX0lOUFVU
X09VVFBVVDsKKyAgICBhdHRyaWJ1dGVzLnZpc3VhbCA9IGd0a193aWRnZXRfZ2V0X3Zpc3VhbCh3
aWRnZXQpOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgYXR0cmlidXRlcy5jb2xvcm1h
cCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwKHdpZGdldCk7CisjZW5kaWYKKyAgICBhdHRyaWJ1
dGVzLmV2ZW50X21hc2sgPSBHREtfVklTSUJJTElUWV9OT1RJRllfTUFTSworICAgICAgICB8IEdE
S19FWFBPU1VSRV9NQVNLCisgICAgICAgIHwgR0RLX0JVVFRPTl9QUkVTU19NQVNLCisgICAgICAg
IHwgR0RLX0JVVFRPTl9SRUxFQVNFX01BU0sKKyAgICAgICAgfCBHREtfUE9JTlRFUl9NT1RJT05f
TUFTSworICAgICAgICB8IEdES19LRVlfUFJFU1NfTUFTSworICAgICAgICB8IEdES19LRVlfUkVM
RUFTRV9NQVNLCisgICAgICAgIHwgR0RLX0JVVFRPTl9NT1RJT05fTUFTSworICAgICAgICB8IEdE
S19CVVRUT04xX01PVElPTl9NQVNLCisgICAgICAgIHwgR0RLX0JVVFRPTjJfTU9USU9OX01BU0sK
KyAgICAgICAgfCBHREtfQlVUVE9OM19NT1RJT05fTUFTSzsKKworICAgIGdpbnQgYXR0cmlidXRl
c01hc2sgPSBHREtfV0FfWCB8IEdES19XQV9ZIHwgR0RLX1dBX1ZJU1VBTDsKKyNpZmRlZiBHVEtf
QVBJX1ZFUlNJT05fMgorICAgIGF0dHJpYnV0ZXNNYXNrIHw9IEdES19XQV9DT0xPUk1BUDsKKyNl
bmRpZgorICAgIEdka1dpbmRvdyogd2luZG93ID0gZ2RrX3dpbmRvd19uZXcoZ3RrX3dpZGdldF9n
ZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQpLCAmYXR0cmlidXRlcywgYXR0cmlidXRlc01hc2spOwor
ICAgIGd0a193aWRnZXRfc2V0X3dpbmRvdyh3aWRnZXQsIHdpbmRvdyk7CisgICAgZ2RrX3dpbmRv
d19zZXRfdXNlcl9kYXRhKHdpbmRvdywgd2lkZ2V0KTsKKworI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjAsIDApCisgICAgZ3RrX3dpZGdldF9zdHls
ZV9hdHRhY2god2lkZ2V0KTsKKyNlbHNlCisgICAgd2lkZ2V0LT5zdHlsZSA9IGd0a19zdHlsZV9h
dHRhY2goZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgd2luZG93KTsKKyNlbmRpZgorICAg
IGd0a19zdHlsZV9zZXRfYmFja2dyb3VuZChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCB3
aW5kb3csIEdUS19TVEFURV9OT1JNQUwpOworI2Vsc2UKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfYmFja2dyb3VuZChndGtfd2lkZ2V0X2dldF9zdHlsZV9jb250ZXh0KHdpZGdldCksIHdpbmRv
dyk7CisjZW5kaWYKKworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJ
VF9XRUJfVklFV19CQVNFKHdpZGdldCk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBw
cml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgZ3RrX2ltX2NvbnRleHRfc2V0X2NsaWVudF93
aW5kb3cocHJpdi0+aW1Db250ZXh0LCB3aW5kb3cpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRX
ZWJWaWV3QmFzZUNvbnRhaW5lckFkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0
KiB3aWRnZXQpCit7CisgICAgZ3RrX3dpZGdldF9zZXRfcGFyZW50KHdpZGdldCwgR1RLX1dJREdF
VChjb250YWluZXIpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VGaW5hbGl6
ZShHT2JqZWN0KiBnT2JqZWN0KQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFz
ZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKGdPYmplY3QpOworICAgIFdlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworCisgICAgaWYgKHByaXYtPmltQ29u
dGV4dCkgeworICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5pbUNvbnRleHQpOworICAgICAg
ICBwcml2LT5pbUNvbnRleHQgPSAwOworICAgIH0KKworICAgIGRlbGV0ZSBwcml2OworICAgIHdl
YlZpZXdCYXNlLT5wcml2ID0gMDsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfdmll
d19iYXNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKGdPYmplY3QpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFz
ZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSBuZXcgV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlKCk7CisgICAgd2ViVmlld0Jhc2UtPnByaXYgPSBwcml2OworCisgICAg
cHJpdi0+Y3VycmVudENsaWNrQ291bnQgPSAwOworICAgIHByaXYtPnByZXZpb3VzQ2xpY2tCdXR0
b24gPSAwOworICAgIHByaXYtPnByZXZpb3VzQ2xpY2tUaW1lID0gMDsKKworICAgIGd0a193aWRn
ZXRfc2V0X2Nhbl9mb2N1cyhHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSwgVFJVRSk7CisgICAgcHJp
di0+aW1Db250ZXh0ID0gZ3RrX2ltX211bHRpY29udGV4dF9uZXcoKTsKKyAgICBwcml2LT5wYWdl
Q2xpZW50ID0gUGFnZUNsaWVudEltcGw6OmNyZWF0ZShHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7
CisKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUVkaXRvckluaXQod2ViVmlld0Jhc2UpOworfQorCisj
aWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFz
ZUV4cG9zZShHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRFeHBvc2UqIGV2ZW50KQoreworICAg
IFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdp
ZGdldCk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2Ut
PnByaXY7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGdka19yZWdpb25fZ2V0X2Ns
aXBib3goZXZlbnQtPnJlZ2lvbiwgJmNsaXBSZWN0KTsKKworICAgIEdka1dpbmRvdyogd2luZG93
ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNy
ID0gYWRvcHRSZWYoZ2RrX2NhaXJvX2NyZWF0ZSh3aW5kb3cpKTsKKworICAgIHByaXYtPnBhZ2Ut
PmRyYXdpbmdBcmVhKCktPnBhaW50KGNsaXBSZWN0LCBjcik7CisKKyAgICByZXR1cm4gRkFMU0U7
Cit9CisjZWxzZQorc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhdyhHdGtXaWRn
ZXQqIHdpZGdldCwgY2Fpcm9fdCogY3IpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZp
ZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBXZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBHZGtSZWN0YW5nbGUg
Y2xpcFJlY3Q7CisKKyAgICBpZiAoIWdka19jYWlyb19nZXRfY2xpcF9yZWN0YW5nbGUoY3IsICZj
bGlwUmVjdCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHByaXYtPnBhZ2UtPmRyYXdp
bmdBcmVhKCktPnBhaW50KGNsaXBSZWN0LCBjcik7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9Cisj
ZW5kaWYKKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VTaXplQWxsb2NhdGUoR3RrV2lk
Z2V0KiB3aWRnZXQsIEd0a0FsbG9jYXRpb24qIGFsbG9jYXRpb24pCit7CisgICAgV2ViS2l0V2Vi
Vmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAg
ICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKwor
ICAgIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+
c2l6ZV9hbGxvY2F0ZSh3aWRnZXQsIGFsbG9jYXRpb24pOworICAgIHByaXYtPnBhZ2UtPmRyYXdp
bmdBcmVhKCktPnNldFNpemUoSW50U2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+
aGVpZ2h0KSwgSW50U2l6ZSgpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdC
YXNlRm9jdXNJbkV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEZvY3VzKiBldmVudCkK
K3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdf
QkFTRSh3aWRnZXQpOworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZp
ZXdCYXNlLT5wcml2OworCisgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0
X3RvcGxldmVsKHdpZGdldCk7CisgICAgaWYgKGd0a193aWRnZXRfaXNfdG9wbGV2ZWwodG9wbGV2
ZWwpICYmIGd0a193aW5kb3dfaGFzX3RvcGxldmVsX2ZvY3VzKEdUS19XSU5ET1codG9wbGV2ZWwp
KSkgeworICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbihwcml2LT5pbUNvbnRleHQpOwor
ICAgICAgICBpZiAoIXByaXYtPmlzUGFnZUFjdGl2ZSkgeworICAgICAgICAgICAgcHJpdi0+aXNQ
YWdlQWN0aXZlID0gVFJVRTsKKyAgICAgICAgICAgIHByaXYtPnBhZ2UtPnZpZXdTdGF0ZURpZENo
YW5nZShXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJl
bnRfY2xhc3MpLT5mb2N1c19pbl9ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRm9jdXNPdXRFdmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRGb2N1cyogZXZlbnQpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdC
YXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBXZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKworICAgIHByaXYtPmlzUGFnZUFj
dGl2ZSA9IEZBTFNFOworICAgIHByaXYtPnBhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdl
UHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7CisgICAgaWYgKHByaXYtPmltQ29udGV4dCkKKyAg
ICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KHByaXYtPmltQ29udGV4dCk7CisKKyAgICBy
ZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3Mp
LT5mb2N1c19vdXRfZXZlbnQod2lkZ2V0LCBldmVudCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRXZWJWaWV3QmFzZUtleVByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
S2V5KiBldmVudCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJL
SVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSog
cHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworCisgICAgcHJpdi0+cGFnZS0+aGFuZGxlS2V5Ym9h
cmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQq
PihldmVudCkpKTsKKworICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmll
d19iYXNlX3BhcmVudF9jbGFzcyktPmtleV9wcmVzc19ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlS2V5UmVsZWFzZUV2ZW50KEd0a1dp
ZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBXZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKworICAgIGlm
IChndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MocHJpdi0+aW1Db250ZXh0LCBldmVudCkp
CisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgcHJpdi0+cGFnZS0+aGFuZGxlS2V5Ym9hcmRF
dmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihl
dmVudCkpKTsKKworICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19i
YXNlX3BhcmVudF9jbGFzcyktPmtleV9yZWxlYXNlX2V2ZW50KHdpZGdldCwgZXZlbnQpOworfQor
CisvLyBDb3BpZWQgZnJvbSB3ZWJraXR3ZWJ2aWV3LmNwcAorc3RhdGljIGd1aW50MzIgZ2V0RXZl
bnRUaW1lKEdka0V2ZW50KiBldmVudCkKK3sKKyAgICBndWludDMyIHRpbWUgPSBnZGtfZXZlbnRf
Z2V0X3RpbWUoZXZlbnQpOworICAgIGlmICh0aW1lKQorICAgICAgICByZXR1cm4gdGltZTsKKwor
ICAgIC8vIFJlYWwgZXZlbnRzIGFsd2F5cyBoYXZlIGEgbm9uLXplcm8gdGltZSwgYnV0IGV2ZW50
cyBzeW50aGVzaXplZAorICAgIC8vIGJ5IHRoZSBEUlQgZG8gbm90IGFuZCB3ZSBtdXN0IGNhbGN1
bGF0ZSBhIHRpbWUgbWFudWFsbHkuIFRoaXMgdGltZQorICAgIC8vIGlzIG5vdCBjYWxjdWxhdGVk
IGluIHRoZSBEUlQsIGJlY2F1c2UgR1RLKyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aAorICAgIC8v
IGFueXRoaW5nIG90aGVyIHRoYW4gR0RLX0NVUlJFTlRfVElNRSBvbiBzeW50aGVzaXplZCBldmVu
dHMuCisgICAgR1RpbWVWYWwgdGltZVZhbHVlOworICAgIGdfZ2V0X2N1cnJlbnRfdGltZSgmdGlt
ZVZhbHVlKTsKKyAgICByZXR1cm4gKHRpbWVWYWx1ZS50dl9zZWMgKiAxMDAwKSArICh0aW1lVmFs
dWUudHZfdXNlYyAvIDEwMDApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jh
c2VCdXR0b25QcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogYnV0
dG9uRXZlbnQpCit7CisgICAgaWYgKGJ1dHRvbkV2ZW50LT5idXR0b24gPT0gMykgeworICAgICAg
ICAvLyBGSVhNRTogW0dUS10gQWRkIGNvbnRleHQgbWVudSBzdXBwb3J0IGZvciBXZWJraXQyLgor
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ4MjcK
KyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0K
KworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworCisgICAgLy8gRm9yIGRvdWJs
ZSBhbmQgdHJpcGxlIGNsaWNrcyBHREsgc2VuZHMgYm90aCBhIG5vcm1hbCBidXR0b24gcHJlc3Mg
ZXZlbnQKKyAgICAvLyBhbmQgYSBzcGVjaWZpYyB0eXBlIChsaWtlIEdES18yQlVUVE9OX1BSRVNT
KS4gSWYgd2UgZGV0ZWN0IGEgc3BlY2lhbCBwcmVzcworICAgIC8vIGNvbWluZyB1cCwgaWdub3Jl
IHRoaXMgZXZlbnQgYXMgaXQgY2VydGFpbmx5IGdlbmVyYXRlZCB0aGUgZG91YmxlIG9yIHRyaXBs
ZQorICAgIC8vIGNsaWNrLiBUaGUgY29uc2VxdWVuY2Ugb2Ygbm90IGVhdGluZyB0aGlzIGV2ZW50
IGlzIHR3byBET00gYnV0dG9uIHByZXNzIGV2ZW50cworICAgIC8vIGFyZSBnZW5lcmF0ZWQuCisg
ICAgR093blB0cjxHZGtFdmVudD4gbmV4dEV2ZW50KGdka19ldmVudF9wZWVrKCkpOworICAgIGlm
IChuZXh0RXZlbnQgJiYgKG5leHRFdmVudC0+YW55LnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1Mg
fHwgbmV4dEV2ZW50LT5hbnkudHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykpCisgICAgICAgIHJl
dHVybiBUUlVFOworCisgICAgZ2ludCBkb3VibGVDbGlja0Rpc3RhbmNlID0gMjUwOworICAgIGdp
bnQgZG91YmxlQ2xpY2tUaW1lID0gNTsKKyAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtf
c2V0dGluZ3NfZ2V0X2Zvcl9zY3JlZW4oZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHdpZGdldCkpOwor
ICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgImd0ay1kb3VibGUt
Y2xpY2stZGlzdGFuY2UiLCAmZG91YmxlQ2xpY2tEaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAg
Imd0ay1kb3VibGUtY2xpY2stdGltZSIsICZkb3VibGVDbGlja1RpbWUsIE5VTEwpOworCisgICAg
Ly8gR1RLKyBvbmx5IGNvdW50cyB1cCB0byB0cmlwbGUgY2xpY2tzLCBidXQgV2ViQ29yZSB3YW50
cyB0byBrbm93IGFib3V0CisgICAgLy8gcXVhZHJ1cGxlIGNsaWNrcywgcXVpbnR1cGxlIGNsaWNr
cywgYWQgaW5maW5pdHVtLiBIZXJlLCB3ZSByZXBsaWNhdGUgdGhlCisgICAgLy8gR0RLIGxvZ2lj
IGZvciBjb3VudGluZyBjbGlja3MuCisgICAgR2RrRXZlbnQqIGV2ZW50KHJlaW50ZXJwcmV0X2Nh
c3Q8R2RrRXZlbnQqPihidXR0b25FdmVudCkpOworICAgIGd1aW50MzIgZXZlbnRUaW1lID0gZ2V0
RXZlbnRUaW1lKGV2ZW50KTsKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBX
RUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworICAgIGlmICgoZXZlbnQtPnR5cGUgPT0gR0RL
XzJCVVRUT05fUFJFU1MgfHwgZXZlbnQtPnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCisgICAg
ICAgIHx8ICgoYWJzKGJ1dHRvbkV2ZW50LT54IC0gcHJpdi0+cHJldmlvdXNDbGlja1BvaW50Lngo
KSkgPCBkb3VibGVDbGlja0Rpc3RhbmNlKQorICAgICAgICAgICAgJiYgKGFicyhidXR0b25FdmVu
dC0+eSAtIHByaXYtPnByZXZpb3VzQ2xpY2tQb2ludC55KCkpIDwgZG91YmxlQ2xpY2tEaXN0YW5j
ZSkKKyAgICAgICAgICAgICYmIChldmVudFRpbWUgLSBwcml2LT5wcmV2aW91c0NsaWNrVGltZSA8
IHN0YXRpY19jYXN0PGd1aW50Pihkb3VibGVDbGlja1RpbWUpKQorICAgICAgICAgICAgJiYgKGJ1
dHRvbkV2ZW50LT5idXR0b24gPT0gcHJpdi0+cHJldmlvdXNDbGlja0J1dHRvbikpKQorICAgICAg
ICBwcml2LT5jdXJyZW50Q2xpY2tDb3VudCsrOworICAgIGVsc2UKKyAgICAgICAgcHJpdi0+Y3Vy
cmVudENsaWNrQ291bnQgPSAxOworCisgICAgcHJpdi0+cGFnZS0+aGFuZGxlTW91c2VFdmVudChX
ZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoZXZlbnQsIHByaXYtPmN1cnJlbnRD
bGlja0NvdW50KSk7CisKKyAgICBnZG91YmxlIHgsIHk7CisgICAgZ2RrX2V2ZW50X2dldF9jb29y
ZHMoZXZlbnQsICZ4LCAmeSk7CisgICAgcHJpdi0+cHJldmlvdXNDbGlja1BvaW50ID0gSW50UG9p
bnQoeCwgeSk7CisgICAgcHJpdi0+cHJldmlvdXNDbGlja0J1dHRvbiA9IGJ1dHRvbkV2ZW50LT5i
dXR0b247CisgICAgcHJpdi0+cHJldmlvdXNDbGlja1RpbWUgPSBldmVudFRpbWU7CisKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUJ1dHRv
blJlbGVhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGV2ZW50KQor
eworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19C
QVNFKHdpZGdldCk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmll
d0Jhc2UtPnByaXY7CisKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMod2lkZ2V0KTsKKyAgICBw
cml2LT5wYWdlLT5oYW5kbGVNb3VzZUV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91
c2VFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAwIC8qIGN1cnJlbnRD
bGlja0NvdW50ICovKSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRXZWJWaWV3QmFzZVNjcm9sbEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVu
dFNjcm9sbCogZXZlbnQpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0g
V0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKworICAgIHByaXYtPnBhZ2UtPmhhbmRsZVdo
ZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50KSk7CisK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFz
ZU1vdGlvbk5vdGlmeUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudE1vdGlvbiogZXZl
bnQpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9W
SUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3
ZWJWaWV3QmFzZS0+cHJpdjsKKworICAgIHByaXYtPnBhZ2UtPmhhbmRsZU1vdXNlRXZlbnQoV2Vi
RXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZl
bnQqPihldmVudCksIDAgLyogY3VycmVudENsaWNrQ291bnQgKi8pKTsKKworICAgIHJldHVybiBG
QUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdChX
ZWJLaXRXZWJWaWV3QmFzZUNsYXNzKiB3ZWJWaWV3QmFzZUNsYXNzKQoreworICAgIEd0a1dpZGdl
dENsYXNzKiB3aWRnZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1Mod2ViVmlld0Jhc2VDbGFzcyk7
CisgICAgd2lkZ2V0Q2xhc3MtPnJlYWxpemUgPSB3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemU7Cisj
aWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICB3aWRnZXRDbGFzcy0+ZXhwb3NlX2V2ZW50ID0g
d2Via2l0V2ViVmlld0Jhc2VFeHBvc2U7CisjZWxzZQorICAgIHdpZGdldENsYXNzLT5kcmF3ID0g
d2Via2l0V2ViVmlld0Jhc2VEcmF3OworI2VuZGlmCisgICAgd2lkZ2V0Q2xhc3MtPnNpemVfYWxs
b2NhdGUgPSB3ZWJraXRXZWJWaWV3QmFzZVNpemVBbGxvY2F0ZTsKKyAgICB3aWRnZXRDbGFzcy0+
Zm9jdXNfaW5fZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUZvY3VzSW5FdmVudDsKKyAgICB3aWRn
ZXRDbGFzcy0+Zm9jdXNfb3V0X2V2ZW50ID0gd2Via2l0V2ViVmlld0Jhc2VGb2N1c091dEV2ZW50
OworICAgIHdpZGdldENsYXNzLT5rZXlfcHJlc3NfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUtl
eVByZXNzRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmtleV9yZWxlYXNlX2V2ZW50ID0gd2Via2l0
V2ViVmlld0Jhc2VLZXlSZWxlYXNlRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9wcmVz
c19ldmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NFdmVudDsKKyAgICB3aWRnZXRD
bGFzcy0+YnV0dG9uX3JlbGVhc2VfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblJlbGVh
c2VFdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+c2Nyb2xsX2V2ZW50ID0gd2Via2l0V2ViVmlld0Jh
c2VTY3JvbGxFdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+bW90aW9uX25vdGlmeV9ldmVudCA9IHdl
YmtpdFdlYlZpZXdCYXNlTW90aW9uTm90aWZ5RXZlbnQ7CisKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHdlYlZpZXdCYXNlQ2xhc3MpOworICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRXZWJWaWV3QmFzZUZpbmFsaXplOworCisgICAgR3Rr
Q29udGFpbmVyQ2xhc3MqIGNvbnRhaW5lckNsYXNzID0gR1RLX0NPTlRBSU5FUl9DTEFTUyh3ZWJW
aWV3QmFzZUNsYXNzKTsKKyAgICBjb250YWluZXJDbGFzcy0+YWRkID0gd2Via2l0V2ViVmlld0Jh
c2VDb250YWluZXJBZGQ7Cit9CisKKy8vIEVkaXRvcgorLy8gRklYTUU6IFRoaXMgc2hvdWxkIHBy
b2JhYmx5IGJlIG1vdmVkIHRvIGFub3RoZXIgZmlsZQordHlwZWRlZiBIYXNoTWFwPGludCwgY29u
c3QgY2hhcio+IEludENvbnN0Q2hhckhhc2hNYXA7CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdCYXNlQWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdC
YXNlLCBjb25zdCBjaGFyICpjb21tYW5kKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworICAgIHByaXYtPnBlbmRpbmdFZGl0b3JDb21t
YW5kcy5hcHBlbmQoV1RGOjpTdHJpbmcoY29tbWFuZCkpOworfQorc3RhdGljIHZvaWQgYmFja3Nw
YWNlQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3
QmFzZSkKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiYmFj
a3NwYWNlIik7CisgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCh3
ZWJWaWV3QmFzZSwgIkRlbGV0ZUJhY2t3YXJkIik7Cit9CisKK3N0YXRpYyB2b2lkIHNlbGVjdEFs
bENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBnYm9vbGVhbiBzZWxlY3QsIFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSkKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25h
bWUod2lkZ2V0LCAic2VsZWN0LWFsbCIpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkUGVuZGlu
Z0VkaXRvckNvbW1hbmQod2ViVmlld0Jhc2UsIHNlbGVjdCA/ICJTZWxlY3RBbGwiIDogIlVuc2Vs
ZWN0Iik7Cit9CisKK3N0YXRpYyB2b2lkIGN1dENsaXBib2FyZENhbGxiYWNrKEd0a1dpZGdldCog
d2lkZ2V0LCBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCit7CisgICAgZ19zaWduYWxf
c3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImN1dC1jbGlwYm9hcmQiKTsKKyAgICB3ZWJr
aXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHdlYlZpZXdCYXNlLCAiQ3V0Iik7
Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdl
dCwgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQoreworICAgIGdfc2lnbmFsX3N0b3Bf
ZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJjb3B5LWNsaXBib2FyZCIpOworICAgIHdlYmtpdFdl
YlZpZXdCYXNlQWRkUGVuZGluZ0VkaXRvckNvbW1hbmQod2ViVmlld0Jhc2UsICJDb3B5Iik7Cit9
CisKK3N0YXRpYyB2b2lkIHBhc3RlQ2xpcGJvYXJkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQs
IFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2Vt
aXNzaW9uX2J5X25hbWUod2lkZ2V0LCAicGFzdGUtY2xpcGJvYXJkIik7CisgICAgd2Via2l0V2Vi
Vmlld0Jhc2VBZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCh3ZWJWaWV3QmFzZSwgIlBhc3RlIik7Cit9
CisKK3N0YXRpYyB2b2lkIHRvZ2dsZU92ZXJ3cml0ZUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0
LCBXZWJLaXRXZWJWaWV3QmFzZSopCit7CisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0b2dnbGlu
ZyB0aGUgb3ZlcndyaXRlIG1vZGUsIGJ1dCB0aGUgZGVmYXVsdCBjYWxsYmFjayBleHBlY3RzCisg
ICAgLy8gdGhlIEd0a1RleHRWaWV3IHRvIGhhdmUgYSBsYXlvdXQsIHNvIHdlIGhhbmRsZSB0aGlz
IHNpZ25hbCBqdXN0IHRvIHN0b3AgaXQuCisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9u
YW1lKHdpZGdldCwgInRvZ2dsZS1vdmVyd3JpdGUiKTsKK30KKworLy8gR1RLKyB3aWxsIHN0aWxs
IHNlbmQgdGhlc2Ugc2lnbmFscyB0byB0aGUgd2ViIHZpZXcuIFNvIHdlIGNhbiBzYWZlbHkgc3Rv
cCBzaWduYWwKKy8vIGVtaXNzaW9uIHdpdGhvdXQgYnJlYWtpbmcgYWNjZXNzaWJpbGl0eS4KK3N0
YXRpYyB2b2lkIHBvcHVwTWVudUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBXZWJLaXRXZWJW
aWV3QmFzZSopCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwg
InBvcHVwLW1lbnUiKTsKK30KKworc3RhdGljIHZvaWQgc2hvd0hlbHBDYWxsYmFjayhHdGtXaWRn
ZXQqIHdpZGdldCwgV2ViS2l0V2ViVmlld0Jhc2UqKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1p
c3Npb25fYnlfbmFtZSh3aWRnZXQsICJzaG93LWhlbHAiKTsKK30KKworc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGd0a0RlbGV0ZUNvbW1hbmRzW11bMl0gPSB7CisgICAgeyAiRGVsZXRlQmFja3dh
cmQiLCAgICAgICAgICAgICAgICJEZWxldGVGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgICAg
IH0sIC8vIENoYXJhY3RlcnMKKyAgICB7ICJEZWxldGVXb3JkQmFja3dhcmQiLCAgICAgICAgICAg
IkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgfSwgLy8gV29yZCBlbmRzCisg
ICAgeyAiRGVsZXRlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIg
ICAgICAgICAgICAgICAgICAgIH0sIC8vIFdvcmRzCisgICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdP
ZkxpbmUiLCAgICAgICJEZWxldGVUb0VuZE9mTGluZSIgICAgICAgICAgICAgICAgICAgIH0sIC8v
IExpbmVzCisgICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdPZkxpbmUiLCAgICAgICJEZWxldGVUb0Vu
ZE9mTGluZSIgICAgICAgICAgICAgICAgICAgIH0sIC8vIExpbmUgZW5kcworICAgIHsgIkRlbGV0
ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgiLCAiRGVsZXRlVG9FbmRPZlBhcmFncmFwaCIgICAgICAg
ICAgICAgICB9LCAvLyBQYXJhZ3JhcGggZW5kcworICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZQ
YXJhZ3JhcGgiLCAiRGVsZXRlVG9FbmRPZlBhcmFncmFwaCIgICAgICAgICAgICAgICB9LCAvLyBQ
YXJhZ3JhcGhzCisgICAgeyAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gV2hpdGVzcGFjZSAoTS1cIGluIEVt
YWNzKQorfTsKKworc3RhdGljIHZvaWQgZGVsZXRlRnJvbUN1cnNvckNhbGxiYWNrKEd0a1dpZGdl
dCogd2lkZ2V0LCBHdGtEZWxldGVUeXBlIGRlbGV0ZVR5cGUsIGdpbnQgY291bnQsIFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5
X25hbWUod2lkZ2V0LCAiZGVsZXRlLWZyb20tY3Vyc29yIik7CisgICAgaW50IGRpcmVjdGlvbiA9
IGNvdW50ID4gMCA/IDEgOiAwOworCisgICAgLy8gRW5zdXJpbmcgdGhhdCBkZWxldGVUeXBlIDw9
IEdfTl9FTEVNRU5UUyBoZXJlIHJlc3VsdHMgaW4gYSBjb21waWxlciB3YXJuaW5nCisgICAgLy8g
dGhhdCB0aGUgY29uZGl0aW9uIGlzIGFsd2F5cyB0cnVlLgorCisgICAgaWYgKGRlbGV0ZVR5cGUg
PT0gR1RLX0RFTEVURV9XT1JEUykgeworICAgICAgICBpZiAoIWRpcmVjdGlvbikgeworICAgICAg
ICAgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCh3ZWJWaWV3QmFz
ZSwgIk1vdmVXb3JkRm9yd2FyZCIpOworICAgICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQ
ZW5kaW5nRWRpdG9yQ29tbWFuZCh3ZWJWaWV3QmFzZSwgIk1vdmVXb3JkQmFja3dhcmQiKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkUGVuZGluZ0Vk
aXRvckNvbW1hbmQod2ViVmlld0Jhc2UsICJNb3ZlV29yZEJhY2t3YXJkIik7CisgICAgICAgICAg
ICB3ZWJraXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHdlYlZpZXdCYXNlLCAi
TW92ZVdvcmRGb3J3YXJkIik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGRlbGV0ZVR5cGUg
PT0gR1RLX0RFTEVURV9ESVNQTEFZX0xJTkVTKSB7CisgICAgICAgIGlmICghZGlyZWN0aW9uKQor
ICAgICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCh3ZWJW
aWV3QmFzZSwgIk1vdmVUb0JlZ2lubmluZ09mTGluZSIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHdlYlZpZXdCYXNl
LCAiTW92ZVRvRW5kT2ZMaW5lIik7CisgICAgfSBlbHNlIGlmIChkZWxldGVUeXBlID09IEdUS19E
RUxFVEVfUEFSQUdSQVBIUykgeworICAgICAgICBpZiAoIWRpcmVjdGlvbikKKyAgICAgICAgICAg
IHdlYmtpdFdlYlZpZXdCYXNlQWRkUGVuZGluZ0VkaXRvckNvbW1hbmQod2ViVmlld0Jhc2UsICJN
b3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3
ZWJraXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHdlYlZpZXdCYXNlLCAiTW92
ZVRvRW5kT2ZQYXJhZ3JhcGgiKTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiByYXdDb21tYW5k
ID0gZ3RrRGVsZXRlQ29tbWFuZHNbZGVsZXRlVHlwZV1bZGlyZWN0aW9uXTsKKyAgICBpZiAoIXJh
d0NvbW1hbmQpCisgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFicyhj
b3VudCk7IGkrKykKKyAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRpdG9yQ29t
bWFuZCh3ZWJWaWV3QmFzZSwgcmF3Q29tbWFuZCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBndGtNb3ZlQ29tbWFuZHNbXVs0XSA9IHsKKyAgICB7ICJNb3ZlQmFja3dhcmQiLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkIiwKKyAgICAgICJNb3Zl
QmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJk
QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICB9LCAvLyBGb3J3YXJkL2JhY2t3YXJkIGdy
YXBoZW1lCisgICAgeyAiTW92ZUxlZnQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJNb3ZlUmlnaHQiLAorICAgICAgIk1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlv
biIsICAgICAgICAgICAgICAgICAiTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAg
ICAgICAgIH0sIC8vIExlZnQvcmlnaHQgZ3JhcGhlbWUKKyAgICB7ICJNb3ZlV29yZEJhY2t3YXJk
IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVXb3JkRm9yd2FyZCIsCisgICAg
ICAiTW92ZVdvcmRCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICJNb3Zl
V29yZEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgfSwgLy8gRm9yd2FyZC9iYWNr
d2FyZCB3b3JkCisgICAgeyAiTW92ZVVwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJNb3ZlRG93biIsCisgICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiwg
ICAgICAgICAgICAgICAgICAgICAgICJNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAg
ICAgICAgICAgfSwgLy8gVXAvZG93biBsaW5lCisgICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5l
IiwgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiLAorICAgICAgIk1v
dmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAiTW92ZVRvRW5k
T2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgIH0sIC8vIFVwL2Rvd24gbGluZSBlbmRz
CisgICAgeyAiTW92ZVBhcmFncmFwaEZvcndhcmQiLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJNb3ZlUGFyYWdyYXBoQmFja3dhcmQiLAorICAgICAgIk1vdmVQYXJhZ3JhcGhGb3J3YXJkQW5k
TW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAiTW92ZVBhcmFncmFwaEJhY2t3YXJkQW5kTW9kaWZ5
U2VsZWN0aW9uIiAgIH0sIC8vIFVwL2Rvd24gcGFyYWdyYXBocworICAgIHsgIk1vdmVUb0JlZ2lu
bmluZ09mUGFyYWdyYXBoIiwgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZQYXJhZ3Jh
cGgiLAorICAgICAgIk1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9u
IiwgICAiTW92ZVRvRW5kT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24iICAgIH0sIC8vIFVw
L2Rvd24gcGFyYWdyYXBoIGVuZHMuCisgICAgeyAiTW92ZVBhZ2VVcCIsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd24iLAorICAgICAgIk1vdmVQYWdlVXBB
bmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duQW5kTW9k
aWZ5U2VsZWN0aW9uIiAgICAgICAgICAgIH0sIC8vIFVwL2Rvd24gcGFnZQorICAgIHsgIk1vdmVU
b0JlZ2lubmluZ09mRG9jdW1lbnQiLCAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZE
b2N1bWVudCIsCisgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVj
dGlvbiIsICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgfSwg
Ly8gQmVnaW4vZW5kIG9mIGJ1ZmZlcgorICAgIHsgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gLy8gSG9yaXpvbnRhbCBwYWdlIG1vdmVtZW50Cit9OworCitzdGF0aWMg
dm9pZCBtb3ZlQ3Vyc29yQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a01vdmVtZW50U3Rl
cCBzdGVwLCBnaW50IGNvdW50LCBnYm9vbGVhbiBleHRlbmRTZWxlY3Rpb24sIFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSkKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25h
bWUod2lkZ2V0LCAibW92ZS1jdXJzb3IiKTsKKyAgICBpbnQgZGlyZWN0aW9uID0gY291bnQgPiAw
ID8gMSA6IDA7CisgICAgaWYgKGV4dGVuZFNlbGVjdGlvbikKKyAgICAgICAgZGlyZWN0aW9uICs9
IDI7CisKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZXApID49IEdfTl9FTEVNRU5U
UyhndGtNb3ZlQ29tbWFuZHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBjaGFyKiBy
YXdDb21tYW5kID0gZ3RrTW92ZUNvbW1hbmRzW3N0ZXBdW2RpcmVjdGlvbl07CisgICAgaWYgKCFy
YXdDb21tYW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFi
cyhjb3VudCk7IGkrKykKKyAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRpdG9y
Q29tbWFuZCh3ZWJWaWV3QmFzZSwgcmF3Q29tbWFuZCk7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCBDdHJsS2V5ID0gMSA8PCAwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIEFsdEtleSA9IDEg
PDwgMTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBTaGlmdEtleSA9IDEgPDwgMjsKKworc3RydWN0
IEtleURvd25FbnRyeSB7CisgICAgdW5zaWduZWQgdmlydHVhbEtleTsKKyAgICB1bnNpZ25lZCBt
b2RpZmllcnM7CisgICAgY29uc3QgY2hhciogbmFtZTsKK307CisKK3N0cnVjdCBLZXlQcmVzc0Vu
dHJ5IHsKKyAgICB1bnNpZ25lZCBjaGFyQ29kZTsKKyAgICB1bnNpZ25lZCBtb2RpZmllcnM7Cisg
ICAgY29uc3QgY2hhciogbmFtZTsKK307CisKK3N0YXRpYyBjb25zdCBLZXlEb3duRW50cnkga2V5
RG93bkVudHJpZXNbXSA9IHsKKyAgICB7ICdCJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAi
VG9nZ2xlQm9sZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdJ
JywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiVG9nZ2xlSXRhbGljIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0VTQ0FQRSwgMCwgICAgICAgICAgICAgICAg
ICAiQ2FuY2VsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7
IFZLX09FTV9QRVJJT0QsIEN0cmxLZXksICAgICAgICAiQ2FuY2VsIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1RBQiwgICAgMCwgICAgICAgICAgICAg
ICAgICAiSW5zZXJ0VGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICB7IFZLX1RBQiwgICAgU2hpZnRLZXksICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1JFVFVSTiwgMCwgICAgICAgICAg
ICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
KyAgICB7IFZLX1JFVFVSTiwgQ3RybEtleSwgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1JFVFVSTiwgQWx0S2V5LCAg
ICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICB7IFZLX1JFVFVSTiwgQWx0S2V5IHwgU2hpZnRLZXksICAiSW5zZXJ0TmV3bGluZSIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKK307CisKK3N0YXRpYyBjb25zdCBLZXlQ
cmVzc0VudHJ5IGtleVByZXNzRW50cmllc1tdID0geworICAgIHsgJ1x0JywgICAwLCAgICAgICAg
ICAgICAgICAgICJJbnNlcnRUYWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAorICAgIHsgJ1x0JywgICBTaGlmdEtleSwgICAgICAgICAgICJJbnNlcnRCYWNrdGFiIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ1xyJywgICAwLCAgICAgICAgICAg
ICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAor
ICAgIHsgJ1xyJywgICBDdHJsS2V5LCAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ1xyJywgICBBbHRLZXksICAgICAgICAg
ICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAg
IHsgJ1xyJywgICBBbHRLZXkgfCBTaGlmdEtleSwgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jh
c2VFZGl0b3JJbml0KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKK3sKKyAgICBXZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKworICAgIHBy
aXYtPmVkaXRvcldpZGdldCA9IGd0a190ZXh0X3ZpZXdfbmV3KCk7CisgICAgZ19zaWduYWxfY29u
bmVjdChwcml2LT5lZGl0b3JXaWRnZXQuZ2V0KCksICJiYWNrc3BhY2UiLCBHX0NBTExCQUNLKGJh
Y2tzcGFjZUNhbGxiYWNrKSwgd2ViVmlld0Jhc2UpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJp
di0+ZWRpdG9yV2lkZ2V0LmdldCgpLCAiY3V0LWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0soY3V0Q2xp
cGJvYXJkQ2FsbGJhY2spLCB3ZWJWaWV3QmFzZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwcml2
LT5lZGl0b3JXaWRnZXQuZ2V0KCksICJjb3B5LWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0soY29weUNs
aXBib2FyZENhbGxiYWNrKSwgd2ViVmlld0Jhc2UpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJp
di0+ZWRpdG9yV2lkZ2V0LmdldCgpLCAicGFzdGUtY2xpcGJvYXJkIiwgR19DQUxMQkFDSyhwYXN0
ZUNsaXBib2FyZENhbGxiYWNrKSwgd2ViVmlld0Jhc2UpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
cHJpdi0+ZWRpdG9yV2lkZ2V0LmdldCgpLCAic2VsZWN0LWFsbCIsIEdfQ0FMTEJBQ0soc2VsZWN0
QWxsQ2FsbGJhY2spLCB3ZWJWaWV3QmFzZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwcml2LT5l
ZGl0b3JXaWRnZXQuZ2V0KCksICJtb3ZlLWN1cnNvciIsIEdfQ0FMTEJBQ0sobW92ZUN1cnNvckNh
bGxiYWNrKSwgd2ViVmlld0Jhc2UpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+ZWRpdG9y
V2lkZ2V0LmdldCgpLCAiZGVsZXRlLWZyb20tY3Vyc29yIiwgR19DQUxMQkFDSyhkZWxldGVGcm9t
Q3Vyc29yQ2FsbGJhY2spLCB3ZWJWaWV3QmFzZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwcml2
LT5lZGl0b3JXaWRnZXQuZ2V0KCksICJ0b2dnbGUtb3ZlcndyaXRlIiwgR19DQUxMQkFDSyh0b2dn
bGVPdmVyd3JpdGVDYWxsYmFjayksIHdlYlZpZXdCYXNlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHByaXYtPmVkaXRvcldpZGdldC5nZXQoKSwgInBvcHVwLW1lbnUiLCBHX0NBTExCQUNLKHBvcHVw
TWVudUNhbGxiYWNrKSwgd2ViVmlld0Jhc2UpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+
ZWRpdG9yV2lkZ2V0LmdldCgpLCAic2hvdy1oZWxwIiwgR19DQUxMQkFDSyhzaG93SGVscENhbGxi
YWNrKSwgd2ViVmlld0Jhc2UpOworfQorCisvLyBQcml2YXRlIEFQSQordm9pZCB3ZWJraXRXZWJW
aWV3QmFzZUdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YlZpZXdCYXNlLCBjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgVmVjdG9yPFdU
Rjo6U3RyaW5nPiYgY29tbWFuZExpc3QpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
KiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisKKyAgICBwcml2LT5wZW5kaW5nRWRpdG9yQ29t
bWFuZHMuY2xlYXIoKTsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgZ3RrX2JpbmRp
bmdzX2FjdGl2YXRlX2V2ZW50KEdUS19PQkpFQ1QocHJpdi0+ZWRpdG9yV2lkZ2V0LmdldCgpKSwg
Y29uc3RfY2FzdDxHZGtFdmVudEtleSo+KCZldmVudC5uYXRpdmVFdmVudCgpLT5rZXkpKTsKKyNl
bHNlCisgICAgZ3RrX2JpbmRpbmdzX2FjdGl2YXRlX2V2ZW50KEdfT0JKRUNUKHByaXYtPmVkaXRv
cldpZGdldC5nZXQoKSksIGNvbnN0X2Nhc3Q8R2RrRXZlbnRLZXkqPigmZXZlbnQubmF0aXZlRXZl
bnQoKS0+a2V5KSk7CisjZW5kaWYKKworICAgIGlmIChwcml2LT5wZW5kaW5nRWRpdG9yQ29tbWFu
ZHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbW1hbmRMaXN0LmFwcGVuZChwcml2LT5wZW5kaW5n
RWRpdG9yQ29tbWFuZHMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChJbnRDb25zdENoYXJIYXNoTWFwLCBrZXlEb3duQ29tbWFuZHNNYXAsICgpKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEludENvbnN0Q2hhckhhc2hNYXAsIGtleVByZXNzQ29t
bWFuZHNNYXAsICgpKTsKKworICAgIGlmIChrZXlEb3duQ29tbWFuZHNNYXAuaXNFbXB0eSgpKSB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoa2V5RG93bkVu
dHJpZXMpOyBpKyspCisgICAgICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAuc2V0KGtleURvd25F
bnRyaWVzW2ldLm1vZGlmaWVycyA8PCAxNiB8IGtleURvd25FbnRyaWVzW2ldLnZpcnR1YWxLZXks
IGtleURvd25FbnRyaWVzW2ldLm5hbWUpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBHX05fRUxFTUVOVFMoa2V5UHJlc3NFbnRyaWVzKTsgaSsrKQorICAgICAgICAgICAga2V5
UHJlc3NDb21tYW5kc01hcC5zZXQoa2V5UHJlc3NFbnRyaWVzW2ldLm1vZGlmaWVycyA8PCAxNiB8
IGtleVByZXNzRW50cmllc1tpXS5jaGFyQ29kZSwga2V5UHJlc3NFbnRyaWVzW2ldLm5hbWUpOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7CisgICAgaWYgKGV2ZW50LnNoaWZ0
S2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBTaGlmdEtleTsKKyAgICBpZiAoZXZlbnQuYWx0
S2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBBbHRLZXk7CisgICAgaWYgKGV2ZW50LmNvbnRy
b2xLZXkoKSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEN0cmxLZXk7CisKKyAgICAvLyBGb3Iga2V5
cHJlc3MgZXZlbnRzLCB3ZSB3YW50IGNoYXJDb2RlKCksIGJ1dCBrZXlDb2RlKCkgZG9lcyB0aGF0
LgorICAgIGludCBtYXBLZXkgPSBtb2RpZmllcnMgPDwgMTYgfCBldmVudC5uYXRpdmVWaXJ0dWFs
S2V5Q29kZSgpOworICAgIGlmIChtYXBLZXkpIHsKKyAgICAgICAgSGFzaE1hcDxpbnQsIGNvbnN0
IGNoYXIqPiogY29tbWFuZE1hcCA9IGV2ZW50LnR5cGUoKSA9PSBXZWJFdmVudDo6S2V5RG93biA/
CisgICAgICAgICAgICAma2V5RG93bkNvbW1hbmRzTWFwIDogJmtleVByZXNzQ29tbWFuZHNNYXA7
CisgICAgICAgIGlmIChjb25zdCBjaGFyKiBjb21tYW5kU3RyaW5nID0gY29tbWFuZE1hcC0+Z2V0
KG1hcEtleSkpCisgICAgICAgICAgICBwcml2LT5wZW5kaW5nRWRpdG9yQ29tbWFuZHMuYXBwZW5k
KGNvbW1hbmRTdHJpbmcpOworICAgIH0KKworICAgIGNvbW1hbmRMaXN0LmFwcGVuZChwcml2LT5w
ZW5kaW5nRWRpdG9yQ29tbWFuZHMpOworfQorCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRl
V2ViUGFnZShXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCit7CisgICAgV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisKKyAgICBwcml2LT5wYWdl
ID0gdG9JbXBsKGNvbnRleHRSZWYpLT5jcmVhdGVXZWJQYWdlKHByaXYtPnBhZ2VDbGllbnQuZ2V0
KCksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKKyAgICBwcml2LT5wYWdlLT5pbml0aWFsaXplV2Vi
UGFnZSgpOworfQorCitXZWJQYWdlUHJveHkqIHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXZWJL
aXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCit7CisgICAgcmV0dXJuIHdlYlZpZXdCYXNlLT5w
cml2LT5wYWdlLmdldCgpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi41ZjI0YThlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuaApAQCAtMCwwICsxLDYzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBv
cnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYktpdFdlYlZpZXdCYXNlX2gKKyNkZWZpbmUgV2ViS2l0V2ViVmlld0Jh
c2VfaAorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIK
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0UgICAg
ICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lU
X1dFQl9WSUVXX0JBU0Uob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRSwgV2ViS2l0V2ViVmlld0Jhc2UpKQor
I2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFLCBXZWJLaXRX
ZWJWaWV3QmFzZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9WSUVXX0JBU0Uob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0VC
X1ZJRVdfQkFTRSkpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfVklFV19CQVNFX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9WSUVX
X0JBU0UpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfQkFTRV9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNF
LCBXZWJLaXRXZWJWaWV3QmFzZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXdCYXNlICAgICAgICBXZWJLaXRXZWJWaWV3QmFzZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRX
ZWJWaWV3QmFzZUNsYXNzICAgV2ViS2l0V2ViVmlld0Jhc2VDbGFzczsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlOworCitz
dHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlIHsKKyAgICBHdGtDb250YWluZXIgcGFyZW50OworCisg
ICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlICpwcml2Owor
fTsKKworc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZUNsYXNzIHsKKyAgICBHdGtDb250YWluZXJD
bGFzcyBwYXJlbnQ7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfd2ViX3ZpZXdfYmFz
ZV9nZXRfdHlwZSh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiN2ZkNWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGUuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIFdlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZV9oCisKKyNpbmNs
dWRlICJXZWJLaXRXZWJWaWV3QmFzZS5oIgorCisjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKK0dfQkVHSU5fREVDTFMKKwordm9pZCB3ZWJraXRXZWJWaWV3QmFzZUdldEVk
aXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBj
b25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgVmVjdG9yPFdURjo6U3RyaW5nPiYg
Y29tbWFuZExpc3QpOwordm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0
V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwUmVmKTsKK1dlYlBhZ2VQcm94eSogd2Via2l0V2ViVmlld0Jhc2VH
ZXRQYWdlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSk7CisKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8vIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXRkZWZpbmVzLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXRkZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZjVjNmExYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdGRlZmluZXMuaApAQCAtMCwwICsxLDQyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRkZWZpbmVzX2gK
KyNkZWZpbmUgd2Via2l0ZGVmaW5lc19oCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpZmRlZiBH
X09TX1dJTjMyCisgICAgI2lmZGVmIEJVSUxESU5HX1dFQktJVAorICAgICAgICAjZGVmaW5lIFdF
QktJVF9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmlu
ZSBXRUJLSVRfQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorICAgICNlbmRpZgorICAgICNkZWZp
bmUgV0VCS0lUX09CU09MRVRFX0FQSSBXRUJLSVRfQVBJCisjZWxzZQorICAgICNkZWZpbmUgV0VC
S0lUX0FQSSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQorICAgICNkZWZp
bmUgV0VCS0lUX09CU09MRVRFX0FQSSBXRUJLSVRfQVBJIF9fYXR0cmlidXRlX18oKGRlcHJlY2F0
ZWQpKQorI2VuZGlmCisKKyNpZm5kZWYgV0VCS0lUX0FQSQorICAgICNkZWZpbmUgV0VCS0lUX0FQ
SQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaAppbmRleCA5NGU0NDFmLi44MjlkYWMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2h1bmtlZFVwZGF0ZURyYXdp
bmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2h1bmtlZFVwZGF0
ZURyYXdpbmdBcmVhUHJveHkuaApAQCAtNDEsNiArNDEsNyBAQCBPQkpDX0NMQVNTIFdLVmlldzsK
IGNsYXNzIFFHcmFwaGljc1dLVmlldzsKICNlbGlmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3Ry
dWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRXZWJWaWV3QmFzZSBXZWJLaXRXZWJWaWV3QmFzZTsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKQEAgLTU2LDggKzU3LDcgQEAgdHlwZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsK
ICNlbGlmIFBMQVRGT1JNKFFUKQogdHlwZWRlZiBRR3JhcGhpY3NXS1ZpZXcgUGxhdGZvcm1XZWJW
aWV3OwogI2VsaWYgUExBVEZPUk0oR1RLKQotY2xhc3MgV2ViVmlldzsKLXR5cGVkZWYgV2ViVmll
dyBQbGF0Zm9ybVdlYlZpZXc7Cit0eXBlZGVmIFdlYktpdFdlYlZpZXdCYXNlIFBsYXRmb3JtV2Vi
VmlldzsKICNlbmRpZgogCiBjbGFzcyBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eSA6IHB1
YmxpYyBEcmF3aW5nQXJlYVByb3h5IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlHdGsuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHAK
aW5kZXggYTVjNzA4Zi4uNjdkOGNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5j
cHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUg
IlVwZGF0ZUNodW5rLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSAi
V2ViVmlldy5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogCiAjaW5j
bHVkZSA8Z2RrL2dkay5oPgogCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBXZWJQYWdlUHJveHkqIENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpwYWdlKCkKIHsK
LSAgICByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7CisgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdC
YXNlR2V0UGFnZShtX3dlYlZpZXcpOwogfQogCiB2b2lkIENodW5rZWRVcGRhdGVEcmF3aW5nQXJl
YVByb3h5OjplbnN1cmVCYWNraW5nU3RvcmUoKQpAQCAtNDksNyArNDksNyBAQCB2b2lkIENodW5r
ZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjplbnN1cmVCYWNraW5nU3RvcmUoKQogICAgIGlmICht
X2JhY2tpbmdTdG9yZUltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2JhY2tpbmdTdG9y
ZUltYWdlID0gZ2RrX3dpbmRvd19jcmVhdGVfc2ltaWxhcl9zdXJmYWNlKGd0a193aWRnZXRfZ2V0
X3dpbmRvdyhtX3dlYlZpZXctPndpbmRvdygpKSwKKyAgICBtX2JhY2tpbmdTdG9yZUltYWdlID0g
Z2RrX3dpbmRvd19jcmVhdGVfc2ltaWxhcl9zdXJmYWNlKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhH
VEtfV0lER0VUKG1fd2ViVmlldykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgc2l6
ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7CiB9CiAKQEAgLTg3LDcgKzg3LDcgQEAgdm9p
ZCBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6ZHJhd1VwZGF0ZUNodW5rSW50b0JhY2tp
bmdTdG9yZShVcGRhdGVDaHVuayoKICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0
KCksIHBpeG1hcC5nZXQoKSwgdXBkYXRlQ2h1bmtSZWN0LngoKSwgdXBkYXRlQ2h1bmtSZWN0Lnko
KSk7CiAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwogCi0gICAgZ3RrX3dpZGdldF9xdWV1ZV9k
cmF3X2FyZWEobV93ZWJWaWV3LT53aW5kb3coKSwgdXBkYXRlQ2h1bmtSZWN0LngoKSwgdXBkYXRl
Q2h1bmtSZWN0LnkoKSwKKyAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VU
KG1fd2ViVmlldyksIHVwZGF0ZUNodW5rUmVjdC54KCksIHVwZGF0ZUNodW5rUmVjdC55KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ2h1bmtSZWN0LndpZHRoKCksIHVw
ZGF0ZUNodW5rUmVjdC5oZWlnaHQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1dlYlZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2I1NzM2Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw1NTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLQotI2luY2x1ZGUgIkNodW5rZWRVcGRhdGVEcmF3aW5n
QXJlYVByb3h5LmgiCi0jaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dC5oIgotI2luY2x1ZGUg
IldlYkNvbnRleHRNZW51UHJveHkuaCIKLSNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKLSNp
bmNsdWRlICJXZWJWaWV3V2lkZ2V0LmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXR5cGVkZWYgSGFzaE1hcDxpbnQsIGNvbnN0
IGNoYXIqPiBJbnRDb25zdENoYXJIYXNoTWFwOwotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgV2ViVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50
KEd0a1dpZGdldCogd2lkZ2V0KQotewotICAgIGlmICghKG1faXNQYWdlQWN0aXZlKSkgewotICAg
ICAgICBtX2lzUGFnZUFjdGl2ZSA9IHRydWU7Ci0gICAgICAgIG1fcGFnZS0+dmlld1N0YXRlRGlk
Q2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKLSAgICB9Ci0KLSAgICBt
X3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQpOwot
fQotCi12b2lkIFdlYlZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQp
Ci17Ci0gICAgbV9pc1BhZ2VBY3RpdmUgPSBmYWxzZTsKLSAgICBtX3BhZ2UtPnZpZXdTdGF0ZURp
ZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Ci19Ci0KLQotc3RhdGlj
IHZvaWQgYmFja3NwYWNlQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIFdlYlZpZXcqIGNsaWVu
dCkKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiYmFja3Nw
YWNlIik7Ci0gICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiRGVsZXRlQmFja3dh
cmQiKTsKLX0KLQotc3RhdGljIHZvaWQgc2VsZWN0QWxsQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRn
ZXQsIGdib29sZWFuIHNlbGVjdCwgV2ViVmlldyogY2xpZW50KQotewotICAgIGdfc2lnbmFsX3N0
b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJzZWxlY3QtYWxsIik7Ci0gICAgY2xpZW50LT5h
ZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChzZWxlY3QgPyAiU2VsZWN0QWxsIiA6ICJVbnNlbGVjdCIp
OwotfQotCi1zdGF0aWMgdm9pZCBjdXRDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdl
dCwgV2ViVmlldyogY2xpZW50KQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFt
ZSh3aWRnZXQsICJjdXQtY2xpcGJvYXJkIik7Ci0gICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9y
Q29tbWFuZCgiQ3V0Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlDbGlwYm9hcmRDYWxsYmFjayhH
dGtXaWRnZXQqIHdpZGdldCwgV2ViVmlldyogY2xpZW50KQotewotICAgIGdfc2lnbmFsX3N0b3Bf
ZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJjb3B5LWNsaXBib2FyZCIpOwotICAgIGNsaWVudC0+
YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIkNvcHkiKTsKLX0KLQotc3RhdGljIHZvaWQgcGFzdGVD
bGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgV2ViVmlldyogY2xpZW50KQotewot
ICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJwYXN0ZS1jbGlwYm9h
cmQiKTsKLSAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJQYXN0ZSIpOwotfQot
Ci1zdGF0aWMgdm9pZCB0b2dnbGVPdmVyd3JpdGVDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwg
RWRpdG9yQ2xpZW50KikKLXsKLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRvZ2dsaW5nIHRoZSBv
dmVyd3JpdGUgbW9kZSwgYnV0IHRoZSBkZWZhdWx0IGNhbGxiYWNrIGV4cGVjdHMKLSAgICAvLyB0
aGUgR3RrVGV4dFZpZXcgdG8gaGF2ZSBhIGxheW91dCwgc28gd2UgaGFuZGxlIHRoaXMgc2lnbmFs
IGp1c3QgdG8gc3RvcCBpdC4KLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lk
Z2V0LCAidG9nZ2xlLW92ZXJ3cml0ZSIpOwotfQotCi0vLyBHVEsrIHdpbGwgc3RpbGwgc2VuZCB0
aGVzZSBzaWduYWxzIHRvIHRoZSB3ZWIgdmlldy4gU28gd2UgY2FuIHNhZmVseSBzdG9wIHNpZ25h
bAotLy8gZW1pc3Npb24gd2l0aG91dCBicmVha2luZyBhY2Nlc3NpYmlsaXR5Lgotc3RhdGljIHZv
aWQgcG9wdXBNZW51Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEVkaXRvckNsaWVudCopCi17
Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInBvcHVwLW1lbnUi
KTsKLX0KLQotc3RhdGljIHZvaWQgc2hvd0hlbHBDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwg
RWRpdG9yQ2xpZW50KikKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lk
Z2V0LCAic2hvdy1oZWxwIik7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBndGtEZWxl
dGVDb21tYW5kc1tdWzJdID0gewotICAgIHsgIkRlbGV0ZUJhY2t3YXJkIiwgICAgICAgICAgICAg
ICAiRGVsZXRlRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICB9LCAvLyBDaGFyYWN0ZXJz
Ci0gICAgeyAiRGVsZXRlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2Fy
ZCIgICAgICAgICAgICAgICAgICAgIH0sIC8vIFdvcmQgZW5kcwotICAgIHsgIkRlbGV0ZVdvcmRC
YWNrd2FyZCIsICAgICAgICAgICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAg
ICB9LCAvLyBXb3JkcwotICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVs
ZXRlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICB9LCAvLyBMaW5lcwotICAgIHsgIkRl
bGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAgICAgICAg
ICAgICAgICAgICB9LCAvLyBMaW5lIGVuZHMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFy
YWdyYXBoIiwgIkRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFy
YWdyYXBoIGVuZHMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgIkRlbGV0
ZVRvRW5kT2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBocwotICAgIHsg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IC8vIFdoaXRlc3BhY2UgKE0tXCBpbiBFbWFjcykKLX07Ci0KLXN0YXRp
YyB2b2lkIGRlbGV0ZUZyb21DdXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrRGVs
ZXRlVHlwZSBkZWxldGVUeXBlLCBnaW50IGNvdW50LCBXZWJWaWV3KiBjbGllbnQpCi17Ci0gICAg
Z19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImRlbGV0ZS1mcm9tLWN1cnNv
ciIpOwotICAgIGludCBkaXJlY3Rpb24gPSBjb3VudCA+IDAgPyAxIDogMDsKLQotICAgIC8vIEVu
c3VyaW5nIHRoYXQgZGVsZXRlVHlwZSA8PSBHX05fRUxFTUVOVFMgaGVyZSByZXN1bHRzIGluIGEg
Y29tcGlsZXIgd2FybmluZwotICAgIC8vIHRoYXQgdGhlIGNvbmRpdGlvbiBpcyBhbHdheXMgdHJ1
ZS4KLQotICAgIGlmIChkZWxldGVUeXBlID09IEdUS19ERUxFVEVfV09SRFMpIHsKLSAgICAgICAg
aWYgKCFkaXJlY3Rpb24pIHsKLSAgICAgICAgICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNv
bW1hbmQoIk1vdmVXb3JkRm9yd2FyZCIpOwotICAgICAgICAgICAgY2xpZW50LT5hZGRQZW5kaW5n
RWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRCYWNrd2FyZCIpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRCYWNrd2Fy
ZCIpOwotICAgICAgICAgICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdv
cmRGb3J3YXJkIik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGRlbGV0ZVR5cGUgPT0gR1RL
X0RFTEVURV9ESVNQTEFZX0xJTkVTKSB7Ci0gICAgICAgIGlmICghZGlyZWN0aW9uKQotICAgICAg
ICAgICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvQmVnaW5uaW5nT2ZM
aW5lIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRv
ckNvbW1hbmQoIk1vdmVUb0VuZE9mTGluZSIpOwotICAgIH0gZWxzZSBpZiAoZGVsZXRlVHlwZSA9
PSBHVEtfREVMRVRFX1BBUkFHUkFQSFMpIHsKLSAgICAgICAgaWYgKCFkaXJlY3Rpb24pCi0gICAg
ICAgICAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9CZWdpbm5pbmdP
ZlBhcmFncmFwaCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjbGllbnQtPmFkZFBlbmRp
bmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9FbmRPZlBhcmFncmFwaCIpOwotICAgIH0KLQotICAgIGNv
bnN0IGNoYXIqIHJhd0NvbW1hbmQgPSBndGtEZWxldGVDb21tYW5kc1tkZWxldGVUeXBlXVtkaXJl
Y3Rpb25dOwotICAgIGlmICghcmF3Q29tbWFuZCkKLSAgICAgIHJldHVybjsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgYWJzKGNvdW50KTsgaSsrKQotICAgICAgICBjbGllbnQtPmFkZFBlbmRp
bmdFZGl0b3JDb21tYW5kKHJhd0NvbW1hbmQpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciogY29u
c3QgZ3RrTW92ZUNvbW1hbmRzW11bNF0gPSB7Ci0gICAgeyAiTW92ZUJhY2t3YXJkIiwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlRm9yd2FyZCIsCi0gICAgICAiTW92ZUJh
Y2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAgICJNb3ZlRm9yd2FyZEFu
ZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwgLy8gRm9yd2FyZC9iYWNrd2FyZCBncmFw
aGVtZQotICAgIHsgIk1vdmVMZWZ0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiTW92ZVJpZ2h0IiwKLSAgICAgICJNb3ZlQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24i
LCAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAg
ICAgICB9LCAvLyBMZWZ0L3JpZ2h0IGdyYXBoZW1lCi0gICAgeyAiTW92ZVdvcmRCYWNrd2FyZCIs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlV29yZEZvcndhcmQiLAotICAgICAg
Ik1vdmVXb3JkQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAiTW92ZVdv
cmRGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgIH0sIC8vIEZvcndhcmQvYmFja3dh
cmQgd29yZAotICAgIHsgIk1vdmVVcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiTW92ZURvd24iLAotICAgICAgIk1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbiIsICAg
ICAgICAgICAgICAgICAgICAgICAiTW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAg
ICAgICAgIH0sIC8vIFVwL2Rvd24gbGluZQotICAgIHsgIk1vdmVUb0JlZ2lubmluZ09mTGluZSIs
ICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lIiwKLSAgICAgICJNb3Zl
VG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgIk1vdmVUb0VuZE9m
TGluZUFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICB9LCAvLyBVcC9kb3duIGxpbmUgZW5kcwot
ICAgIHsgIk1vdmVQYXJhZ3JhcGhGb3J3YXJkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAi
TW92ZVBhcmFncmFwaEJhY2t3YXJkIiwKLSAgICAgICJNb3ZlUGFyYWdyYXBoRm9yd2FyZEFuZE1v
ZGlmeVNlbGVjdGlvbiIsICAgICAgICAgIk1vdmVQYXJhZ3JhcGhCYWNrd2FyZEFuZE1vZGlmeVNl
bGVjdGlvbiIgICB9LCAvLyBVcC9kb3duIHBhcmFncmFwaHMKLSAgICB7ICJNb3ZlVG9CZWdpbm5p
bmdPZlBhcmFncmFwaCIsICAgICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mUGFyYWdyYXBo
IiwKLSAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbiIs
ICAgIk1vdmVUb0VuZE9mUGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICB9LCAvLyBVcC9k
b3duIHBhcmFncmFwaCBlbmRzLgotICAgIHsgIk1vdmVQYWdlVXAiLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duIiwKLSAgICAgICJNb3ZlUGFnZVVwQW5k
TW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlRG93bkFuZE1vZGlm
eVNlbGVjdGlvbiIgICAgICAgICAgICB9LCAvLyBVcC9kb3duIHBhZ2UKLSAgICB7ICJNb3ZlVG9C
ZWdpbm5pbmdPZkRvY3VtZW50IiwgICAgICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mRG9j
dW1lbnQiLAotICAgICAgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rp
b24iLCAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgIH0sIC8v
IEJlZ2luL2VuZCBvZiBidWZmZXIKLSAgICB7IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IC8vIEhvcml6b250YWwgcGFnZSBtb3ZlbWVudAotfTsKLQotc3RhdGljIHZv
aWQgbW92ZUN1cnNvckNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtNb3ZlbWVudFN0ZXAg
c3RlcCwgZ2ludCBjb3VudCwgZ2Jvb2xlYW4gZXh0ZW5kU2VsZWN0aW9uLCBXZWJWaWV3KiBjbGll
bnQpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgIm1vdmUt
Y3Vyc29yIik7Ci0gICAgaW50IGRpcmVjdGlvbiA9IGNvdW50ID4gMCA/IDEgOiAwOwotICAgIGlm
IChleHRlbmRTZWxlY3Rpb24pCi0gICAgICAgIGRpcmVjdGlvbiArPSAyOwotCi0gICAgaWYgKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdGVwKSA+PSBHX05fRUxFTUVOVFMoZ3RrTW92ZUNvbW1hbmRz
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgY2hhciogcmF3Q29tbWFuZCA9IGd0a01v
dmVDb21tYW5kc1tzdGVwXVtkaXJlY3Rpb25dOwotICAgIGlmICghcmF3Q29tbWFuZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoY291bnQpOyBpKyspCi0g
ICAgICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQocmF3Q29tbWFuZCk7Ci19Ci0K
LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBDdHJsS2V5ID0gMSA8PCAwOwotc3RhdGljIGNvbnN0IHVu
c2lnbmVkIEFsdEtleSA9IDEgPDwgMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBTaGlmdEtleSA9
IDEgPDwgMjsKLQotc3RydWN0IEtleURvd25FbnRyeSB7Ci0gICAgdW5zaWduZWQgdmlydHVhbEtl
eTsKLSAgICB1bnNpZ25lZCBtb2RpZmllcnM7Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLX07Ci0K
LXN0cnVjdCBLZXlQcmVzc0VudHJ5IHsKLSAgICB1bnNpZ25lZCBjaGFyQ29kZTsKLSAgICB1bnNp
Z25lZCBtb2RpZmllcnM7Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLX07Ci0KLXN0YXRpYyBjb25z
dCBLZXlEb3duRW50cnkga2V5RG93bkVudHJpZXNbXSA9IHsKLSAgICB7ICdCJywgICAgICAgQ3Ry
bEtleSwgICAgICAgICAgICAiVG9nZ2xlQm9sZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKLSAgICB7ICdJJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiVG9nZ2xlSXRh
bGljIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0VTQ0FQRSwg
MCwgICAgICAgICAgICAgICAgICAiQ2FuY2VsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICB7IFZLX09FTV9QRVJJT0QsIEN0cmxLZXksICAgICAgICAiQ2FuY2Vs
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1RBQiwg
ICAgMCwgICAgICAgICAgICAgICAgICAiSW5zZXJ0VGFiIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICB7IFZLX1RBQiwgICAgU2hpZnRLZXksICAgICAgICAgICAiSW5z
ZXJ0QmFja3RhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JF
VFVSTiwgMCwgICAgICAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgQ3RybEtleSwgICAgICAgICAgICAi
SW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZL
X1JFVFVSTiwgQWx0S2V5LCAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgQWx0S2V5IHwgU2hpZnRLZXks
ICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLX07Ci0K
LXN0YXRpYyBjb25zdCBLZXlQcmVzc0VudHJ5IGtleVByZXNzRW50cmllc1tdID0gewotICAgIHsg
J1x0JywgICAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1x0JywgICBTaGlmdEtleSwgICAgICAgICAgICJJ
bnNlcnRCYWNrdGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1xy
JywgICAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAotICAgIHsgJ1xyJywgICBDdHJsS2V5LCAgICAgICAgICAgICJJbnNl
cnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1xyJywg
ICBBbHRLZXksICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAotICAgIHsgJ1xyJywgICBBbHRLZXkgfCBTaGlmdEtleSwgICJJbnNlcnRO
ZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotfTsKLQotV2ViVmlldzo6
V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKLSAg
ICA6IG1faXNQYWdlQWN0aXZlKHRydWUpCi0gICAgLCBtX25hdGl2ZVdpZGdldChndGtfdGV4dF92
aWV3X25ldygpKQotewotICAgIG1fcGFnZSA9IGNvbnRleHQtPmNyZWF0ZVdlYlBhZ2UodGhpcywg
cGFnZUdyb3VwKTsKLQotICAgIG1fdmlld1dpZGdldCA9IHN0YXRpY19jYXN0PEd0a1dpZGdldCo+
KGdfb2JqZWN0X25ldyhXRUJfVklFV19UWVBFX1dJREdFVCwgTlVMTCkpOwotICAgIEFTU0VSVCht
X3ZpZXdXaWRnZXQpOwotCi0gICAgbV9wYWdlLT5pbml0aWFsaXplV2ViUGFnZSgpOwotCi0gICAg
V2ViVmlld1dpZGdldCogd2ViVmlld1dpZGdldCA9IFdFQl9WSUVXX1dJREdFVChtX3ZpZXdXaWRn
ZXQpOwotICAgIHdlYlZpZXdXaWRnZXRTZXRXZWJWaWV3SW5zdGFuY2Uod2ViVmlld1dpZGdldCwg
dGhpcyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiYmFj
a3NwYWNlIiwgR19DQUxMQkFDSyhiYWNrc3BhY2VDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJjdXQtY2xpcGJvYXJkIiwgR19DQUxM
QkFDSyhjdXRDbGlwYm9hcmRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9uYXRpdmVXaWRnZXQuZ2V0KCksICJjb3B5LWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0soY29weUNs
aXBib2FyZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdp
ZGdldC5nZXQoKSwgInBhc3RlLWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0socGFzdGVDbGlwYm9hcmRD
YWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0
KCksICJzZWxlY3QtYWxsIiwgR19DQUxMQkFDSyhzZWxlY3RBbGxDYWxsYmFjayksIHRoaXMpOwot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJtb3ZlLWN1cnNvciIs
IEdfQ0FMTEJBQ0sobW92ZUN1cnNvckNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgImRlbGV0ZS1mcm9tLWN1cnNvciIsIEdfQ0FMTEJB
Q0soZGVsZXRlRnJvbUN1cnNvckNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChtX25hdGl2ZVdpZGdldC5nZXQoKSwgInRvZ2dsZS1vdmVyd3JpdGUiLCBHX0NBTExCQUNLKHRv
Z2dsZU92ZXJ3cml0ZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25h
dGl2ZVdpZGdldC5nZXQoKSwgInBvcHVwLW1lbnUiLCBHX0NBTExCQUNLKHBvcHVwTWVudUNhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwg
InNob3ctaGVscCIsIEdfQ0FMTEJBQ0soc2hvd0hlbHBDYWxsYmFjayksIHRoaXMpOwotfQotCi1X
ZWJWaWV3Ojp+V2ViVmlldygpCi17Ci19Ci0KLUdka1dpbmRvdyogV2ViVmlldzo6Z2V0V2ViVmll
d1dpbmRvdygpCi17Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3ZpZXdXaWRn
ZXQpOwotfQotCi12b2lkIFdlYlZpZXc6OnBhaW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtSZWN0
YW5nbGUgcmVjdCwgY2Fpcm9fdCogY3IpCi17Ci0gICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5w
YWludChJbnRSZWN0KHJlY3QpLCBjcik7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0U2l6ZShHdGtX
aWRnZXQqLCBJbnRTaXplIHdpbmRvd1NpemUpCi17Ci0gICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgp
LT5zZXRTaXplKHdpbmRvd1NpemUsIEludFNpemUoKSk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6aGFu
ZGxlS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSogZXZlbnQpCi17Ci0gICAgbV9wYWdlLT5oYW5k
bGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQocmVpbnRlcnByZXRfY2FzdDxH
ZGtFdmVudCo+KGV2ZW50KSkpOwotfQotCi12b2lkIFdlYlZpZXc6OmhhbmRsZU1vdXNlRXZlbnQo
R2RrRXZlbnQqIGV2ZW50LCBpbnQgY3VycmVudENsaWNrQ291bnQpCi17Ci0gICAgbV9wYWdlLT5o
YW5kbGVNb3VzZUV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChldmVu
dCwgY3VycmVudENsaWNrQ291bnQpKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpoYW5kbGVXaGVlbEV2
ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKLXsKLSAgICBtX3BhZ2UtPmhhbmRsZVdoZWVsRXZl
bnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50KSk7Ci19Ci0KLXZv
aWQgV2ViVmlldzo6Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50JiBldmVudCwgVmVjdG9yPFdURjo6U3RyaW5nPiYgY29tbWFuZExpc3QpCi17
Ci0gICAgbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuY2xlYXIoKTsKLQotI2lmZGVmIEdUS19BUElf
VkVSU0lPTl8yCi0gICAgZ3RrX2JpbmRpbmdzX2FjdGl2YXRlX2V2ZW50KEdUS19PQkpFQ1QobV9u
YXRpdmVXaWRnZXQuZ2V0KCkpLCBjb25zdF9jYXN0PEdka0V2ZW50S2V5Kj4oJmV2ZW50Lm5hdGl2
ZUV2ZW50KCktPmtleSkpOwotI2Vsc2UKLSAgICBndGtfYmluZGluZ3NfYWN0aXZhdGVfZXZlbnQo
R19PQkpFQ1QobV9uYXRpdmVXaWRnZXQuZ2V0KCkpLCBjb25zdF9jYXN0PEdka0V2ZW50S2V5Kj4o
JmV2ZW50Lm5hdGl2ZUV2ZW50KCktPmtleSkpOwotI2VuZGlmCi0KLSAgICBpZiAobV9wZW5kaW5n
RWRpdG9yQ29tbWFuZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbW1hbmRMaXN0LmFwcGVuZCht
X3BlbmRpbmdFZGl0b3JDb21tYW5kcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEludENvbnN0Q2hhckhhc2hNYXAsIGtleURvd25Db21tYW5kc01h
cCwgKCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW50Q29uc3RDaGFySGFzaE1hcCwga2V5
UHJlc3NDb21tYW5kc01hcCwgKCkpOwotCi0gICAgaWYgKGtleURvd25Db21tYW5kc01hcC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhr
ZXlEb3duRW50cmllcyk7IGkrKykKLSAgICAgICAgICAgIGtleURvd25Db21tYW5kc01hcC5zZXQo
a2V5RG93bkVudHJpZXNbaV0ubW9kaWZpZXJzIDw8IDE2IHwga2V5RG93bkVudHJpZXNbaV0udmly
dHVhbEtleSwga2V5RG93bkVudHJpZXNbaV0ubmFtZSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhrZXlQcmVzc0VudHJpZXMpOyBpKyspCi0gICAgICAg
ICAgICBrZXlQcmVzc0NvbW1hbmRzTWFwLnNldChrZXlQcmVzc0VudHJpZXNbaV0ubW9kaWZpZXJz
IDw8IDE2IHwga2V5UHJlc3NFbnRyaWVzW2ldLmNoYXJDb2RlLCBrZXlQcmVzc0VudHJpZXNbaV0u
bmFtZSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbW9kaWZpZXJzID0gMDsKLSAgICBpZiAoZXZl
bnQuc2hpZnRLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OwotICAgIGlmIChl
dmVudC5hbHRLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJzIHw9IEFsdEtleTsKLSAgICBpZiAoZXZl
bnQuY29udHJvbEtleSgpKQotICAgICAgICBtb2RpZmllcnMgfD0gQ3RybEtleTsKLQotICAgIC8v
IEZvciBrZXlwcmVzcyBldmVudHMsIHdlIHdhbnQgY2hhckNvZGUoKSwgYnV0IGtleUNvZGUoKSBk
b2VzIHRoYXQuCi0gICAgaW50IG1hcEtleSA9IG1vZGlmaWVycyA8PCAxNiB8IGV2ZW50Lm5hdGl2
ZVZpcnR1YWxLZXlDb2RlKCk7Ci0gICAgaWYgKG1hcEtleSkgewotICAgICAgICBIYXNoTWFwPGlu
dCwgY29uc3QgY2hhcio+KiBjb21tYW5kTWFwID0gZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpL
ZXlEb3duID8KLSAgICAgICAgICAgICZrZXlEb3duQ29tbWFuZHNNYXAgOiAma2V5UHJlc3NDb21t
YW5kc01hcDsKLSAgICAgICAgaWYgKGNvbnN0IGNoYXIqIGNvbW1hbmRTdHJpbmcgPSBjb21tYW5k
TWFwLT5nZXQobWFwS2V5KSkKLSAgICAgICAgICAgIG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzLmFw
cGVuZChjb21tYW5kU3RyaW5nKTsKLSAgICB9Ci0KLSAgICBjb21tYW5kTGlzdC5hcHBlbmQobV9w
ZW5kaW5nRWRpdG9yQ29tbWFuZHMpOwotfQotCi1ib29sIFdlYlZpZXc6OmlzQWN0aXZlKCkKLXsK
LSAgICByZXR1cm4gbV9pc1BhZ2VBY3RpdmU7Ci19Ci0KLXZvaWQgV2ViVmlldzo6Y2xvc2UoKQot
ewotICAgIG1fcGFnZS0+Y2xvc2UoKTsKLX0KLQotLy8gUGFnZUNsaWVudCdzIHB1cmUgdmlydHVh
bCBmdW5jdGlvbnMKLVBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gV2ViVmlldzo6Y3JlYXRl
RHJhd2luZ0FyZWFQcm94eSgpCi17Ci0gICAgcmV0dXJuIENodW5rZWRVcGRhdGVEcmF3aW5nQXJl
YVByb3h5OjpjcmVhdGUodGhpcywgbV9wYWdlLmdldCgpKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojpz
ZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZGlzcGxheVZpZXcoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2Nyb2xsVmlldyhjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxP
ZmZzZXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotV2ViQ29yZTo6SW50U2l6ZSBX
ZWJWaWV3Ojp2aWV3U2l6ZSgpCi17Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAg
IGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24obV92aWV3V2lkZ2V0LCAmYWxsb2NhdGlvbik7Ci0g
ICAgcmV0dXJuIEludFNpemUoYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOwot
fQotCi1ib29sIFdlYlZpZXc6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJWaWV3Ojppc1ZpZXdGb2N1
c2VkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFdlYlZpZXc6OmlzVmlld1Zpc2libGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aXNWaWV3SW5XaW5kb3coKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViVmll
dzo6V2ViVmlldzo6cHJvY2Vzc0RpZENyYXNoKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFdlYlZpZXc6OmRpZFJlbGF1bmNoUHJvY2VzcygpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRGb2N1cyhib29sKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6dGFrZUZvY3VzKGJvb2wpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojp0b29sVGlwQ2hhbmdlZChjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgV2ViVmlldzo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQotewotICAgIC8v
IFtHVEtdIFdpZGdldDo6c2V0Q3Vyc29yKCkgZ2V0cyBjYWxsZWQgZnJlcXVlbnRseQotICAgIC8v
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzg4Ci0gICAgLy8gU2V0
dGluZyB0aGUgY3Vyc29yIG1heSBiZSBhbiBleHBlbnNpdmUgb3BlcmF0aW9uIGluIHNvbWUgYmFj
a2VuZHMsCi0gICAgLy8gc28gZG9uJ3QgcmUtc2V0IHRoZSBjdXJzb3IgaWYgaXQncyBhbHJlYWR5
IHNldCB0byB0aGUgdGFyZ2V0IHZhbHVlLgotICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dp
ZGdldF9nZXRfd2luZG93KG1fdmlld1dpZGdldCk7Ci0gICAgR2RrQ3Vyc29yKiBjdXJyZW50Q3Vy
c29yID0gZ2RrX3dpbmRvd19nZXRfY3Vyc29yKHdpbmRvdyk7Ci0gICAgR2RrQ3Vyc29yKiBuZXdD
dXJzb3IgPSBjdXJzb3IucGxhdGZvcm1DdXJzb3IoKS5nZXQoKTsKLSAgICBpZiAoY3VycmVudEN1
cnNvciAhPSBuZXdDdXJzb3IpCi0gICAgICAgIGdka193aW5kb3dfc2V0X2N1cnNvcih3aW5kb3cs
IG5ld0N1cnNvcik7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0Vmlld3BvcnRBcmd1bWVudHMoY29u
c3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgV2ViVmlldzo6cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVk
aXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpjbGVhckFsbEVkaXRDb21tYW5kcygpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotRmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRU
b0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdmlld1JlY3QpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gdmlld1JlY3Q7Ci19Ci0KLUZsb2F0UmVjdCBXZWJWaWV3Ojpj
b252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2aWV3UmVjdDsKLX0KLQotSW50UmVjdCBXZWJWaWV3
Ojp3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojpkb25lV2l0
aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFu
ZGxlZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OmRpZE5v
dEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+
IFdlYlZpZXc6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotUGFzc1JlZlB0cjxXZWJDb250ZXh0
TWVudVByb3h5PiBXZWJWaWV3OjpjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSop
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXZWJW
aWV3OjpzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFk
ZU91dCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotdm9pZCBXZWJWaWV3OjpwYWdlRGlkRW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnBh
Z2VEaWRMZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi12b2lkIFdl
YlZpZXc6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21SZXByZXNlbnRh
dGlvbikKLXsKLX0KLQotdm9pZCBXZWJWaWV3OjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3Rv
bVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IENv
cmVJUEM6OkRhdGFSZWZlcmVuY2UmKQotewotfQotCi1kb3VibGUgV2ViVmlldzo6Y3VzdG9tUmVw
cmVzZW50YXRpb25ab29tRmFjdG9yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIFdlYlZpZXc6OnNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZh
Y3Rvcihkb3VibGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3
OjpwYWdlQ2xvc2VkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZp
ZXc6OmRpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUoKSBjb25zdAotewotfQotCi12b2lk
IFdlYlZpZXc6OmZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8SW50UmVjdD4m
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmNzAzMjA4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvV2ViVmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9y
dGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgV2ViVmlld19oCi0jZGVmaW5lIFdlYlZpZXdfaAotCi0jaW5jbHVkZSAiUGFn
ZUNsaWVudC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldpbmRvd3NL
ZXlib2FyZENvZGVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8
Z2RrL2dkay5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIERyYXdp
bmdBcmVhUHJveHk7Ci1jbGFzcyBXZWJQYWdlTmFtZXNwYWNlOwotCi1jbGFzcyBXZWJWaWV3IDog
cHVibGljIFJlZkNvdW50ZWQ8V2ViVmlldz4sIHB1YmxpYyBQYWdlQ2xpZW50IHsKLXB1YmxpYzoK
LSAgICB+V2ViVmlldygpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlZpZXc+IGNyZWF0ZShX
ZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlldyhjb250ZXh0LCBwYWdlR3JvdXApKTsKLSAg
ICB9Ci0KLSAgICBHdGtXaWRnZXQqIHdpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld1dpZGdl
dDsgfQotCi0gICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlLmdl
dCgpOyB9Ci0KLSAgICB2b2lkIGhhbmRsZUZvY3VzSW5FdmVudChHdGtXaWRnZXQqKTsKLSAgICB2
b2lkIGhhbmRsZUZvY3VzT3V0RXZlbnQoR3RrV2lkZ2V0Kik7Ci0KLSAgICB2b2lkIHBhaW50KEd0
a1dpZGdldCosIEdka1JlY3RhbmdsZSwgY2Fpcm9fdCopOwotICAgIHZvaWQgc2V0U2l6ZShHdGtX
aWRnZXQqLCBXZWJDb3JlOjpJbnRTaXplKTsKLSAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQo
R2RrRXZlbnRLZXkqKTsKLSAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwq
KTsKLSAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoR2RrRXZlbnQqLCBpbnQpOwotCi0gICAgdm9p
ZCBhZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKSB7IG1fcGVuZGlu
Z0VkaXRvckNvbW1hbmRzLmFwcGVuZChXVEY6OlN0cmluZyhjb21tYW5kKSk7IH0KLQotcHJpdmF0
ZToKLSAgICBXZWJWaWV3KFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqKTsKLQotICAgIEdka1dp
bmRvdyogZ2V0V2ViVmlld1dpbmRvdygpOwotCi0gICAgYm9vbCBpc0FjdGl2ZSgpOwotICAgIHZv
aWQgY2xvc2UoKTsKLQotICAgIC8vIFBhZ2VDbGllbnQKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlzcGxheVZpZXcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVmlldyhj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzY3JvbGxPZmZzZXQpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSgp
OwotICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdXaW5kb3dBY3RpdmUoKTsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNWaWV3Rm9jdXNlZCgpOwotICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxlKCk7Ci0g
ICAgdmlydHVhbCBib29sIGlzVmlld0luV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nl
c3NEaWRDcmFzaCgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFnZUNsb3NlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhi
b29sIGZvY3VzZWQpOwotICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24p
OwotICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBXVEY6OlN0cmluZyYsIGNv
bnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJD
b3JlOjpDdXJzb3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnRBcmd1bWVudHMoY29u
c3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0
ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJv
eHk6OlVuZG9PclJlZG8pOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygp
OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOwotICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZE5vdEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKTsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5
KFdlYlBhZ2VQcm94eSopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVBy
b3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFk
ZU91dCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgdXBkYXRlUmVjdHMpOwotICAgIHZpcnR1YWwgZmxv
YXQgdXNlclNwYWNlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCYsIFZlY3RvcjxXVEY6OlN0cmluZz4mKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCk7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFp
bkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVwcmVzZW50YXRpb24pOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYg
c3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsKLSAgICB2
aXJ0dWFsIGRvdWJsZSBjdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSk7Ci0KLSAg
ICAvLyBNZW1iZXJzIG9mIFdlYlZpZXcgY2xhc3MKLSAgICBHdGtXaWRnZXQqIG1fdmlld1dpZGdl
dDsKLSAgICBib29sIG1faXNQYWdlQWN0aXZlOwotICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IG1f
cGFnZTsKLSAgICBWZWN0b3I8V1RGOjpTdHJpbmc+IG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzOwot
ICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBtX25hdGl2ZVdpZGdldDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViVmlld19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdXaWRnZXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZGZkZDNiMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YlZpZXdXaWRnZXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzc3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9y
dGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3V2lkZ2V0LmgiCi0KLSNp
bmNsdWRlICJHT3duUHRyR3RrLmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgZ3Bv
aW50ZXIgd2ViVmlld1dpZGdldFBhcmVudENsYXNzID0gMDsKLQotc3RydWN0IF9XZWJWaWV3V2lk
Z2V0UHJpdmF0ZSB7Ci0gICAgV2ViVmlldyogd2ViVmlld0luc3RhbmNlOwotICAgIEd0a0lNQ29u
dGV4dCogaW1Db250ZXh0OwotICAgIGdpbnQgY3VycmVudENsaWNrQ291bnQ7Ci0gICAgSW50UG9p
bnQgcHJldmlvdXNDbGlja1BvaW50OwotICAgIGd1aW50IHByZXZpb3VzQ2xpY2tCdXR0b247Ci0g
ICAgZ3VpbnQzMiBwcmV2aW91c0NsaWNrVGltZTsKLX07Ci0KLXN0YXRpYyB2b2lkIHdlYlZpZXdX
aWRnZXRSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQotewotICAgIGd0a193aWRnZXRfc2V0X3Jl
YWxpemVkKHdpZGdldCwgVFJVRSk7Ci0KLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0g
ICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0aW9uKTsKLQotICAg
IEdka1dpbmRvd0F0dHIgYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLndpbmRvd190eXBlID0g
R0RLX1dJTkRPV19DSElMRDsKLSAgICBhdHRyaWJ1dGVzLnggPSBhbGxvY2F0aW9uLng7Ci0gICAg
YXR0cmlidXRlcy55ID0gYWxsb2NhdGlvbi55OwotICAgIGF0dHJpYnV0ZXMud2lkdGggPSBhbGxv
Y2F0aW9uLndpZHRoOwotICAgIGF0dHJpYnV0ZXMuaGVpZ2h0ID0gYWxsb2NhdGlvbi5oZWlnaHQ7
Ci0gICAgYXR0cmlidXRlcy53Y2xhc3MgPSBHREtfSU5QVVRfT1VUUFVUOwotICAgIGF0dHJpYnV0
ZXMudmlzdWFsID0gZ3RrX3dpZGdldF9nZXRfdmlzdWFsKHdpZGdldCk7Ci0jaWZkZWYgR1RLX0FQ
SV9WRVJTSU9OXzIKLSAgICBhdHRyaWJ1dGVzLmNvbG9ybWFwID0gZ3RrX3dpZGdldF9nZXRfY29s
b3JtYXAod2lkZ2V0KTsKLSNlbmRpZgotICAgIGF0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IEdES19W
SVNJQklMSVRZX05PVElGWV9NQVNLCi0gICAgICAgIHwgR0RLX0VYUE9TVVJFX01BU0sKLSAgICAg
ICAgfCBHREtfQlVUVE9OX1BSRVNTX01BU0sKLSAgICAgICAgfCBHREtfQlVUVE9OX1JFTEVBU0Vf
TUFTSwotICAgICAgICB8IEdES19QT0lOVEVSX01PVElPTl9NQVNLCi0gICAgICAgIHwgR0RLX0tF
WV9QUkVTU19NQVNLCi0gICAgICAgIHwgR0RLX0tFWV9SRUxFQVNFX01BU0sKLSAgICAgICAgfCBH
REtfQlVUVE9OX01PVElPTl9NQVNLCi0gICAgICAgIHwgR0RLX0JVVFRPTjFfTU9USU9OX01BU0sK
LSAgICAgICAgfCBHREtfQlVUVE9OMl9NT1RJT05fTUFTSwotICAgICAgICB8IEdES19CVVRUT04z
X01PVElPTl9NQVNLOwotCi0gICAgZ2ludCBhdHRyaWJ1dGVzTWFzayA9IEdES19XQV9YIHwgR0RL
X1dBX1kgfCBHREtfV0FfVklTVUFMOwotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgYXR0
cmlidXRlc01hc2sgfD0gR0RLX1dBX0NPTE9STUFQOwotI2VuZGlmCi0gICAgR2RrV2luZG93KiB3
aW5kb3cgPSBnZGtfd2luZG93X25ldyhndGtfd2lkZ2V0X2dldF9wYXJlbnRfd2luZG93KHdpZGdl
dCksICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzTWFzayk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfd2lu
ZG93KHdpZGdldCwgd2luZG93KTsKLSAgICBnZGtfd2luZG93X3NldF91c2VyX2RhdGEod2luZG93
LCB3aWRnZXQpOwotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSNpZiBHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAyMCwgMCkKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2F0dGFjaCh3aWRnZXQpOwotI2Vs
c2UKLSAgICB3aWRnZXQtPnN0eWxlID0gZ3RrX3N0eWxlX2F0dGFjaChndGtfd2lkZ2V0X2dldF9z
dHlsZSh3aWRnZXQpLCB3aW5kb3cpOwotI2VuZGlmCi0gICAgZ3RrX3N0eWxlX3NldF9iYWNrZ3Jv
dW5kKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIHdpbmRvdywgR1RLX1NUQVRFX05PUk1B
TCk7Ci0jZWxzZQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9iYWNrZ3JvdW5kKGd0a193aWRn
ZXRfZ2V0X3N0eWxlX2NvbnRleHQod2lkZ2V0KSwgd2luZG93KTsKLSNlbmRpZgotCi0gICAgV2Vi
Vmlld1dpZGdldCogd2ViVmlldyA9IFdFQl9WSUVXX1dJREdFVCh3aWRnZXQpOwotICAgIFdlYlZp
ZXdXaWRnZXRQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKLSAgICBndGtfaW1fY29udGV4
dF9zZXRfY2xpZW50X3dpbmRvdyhwcml2LT5pbUNvbnRleHQsIHdpbmRvdyk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHdlYlZpZXdXaWRnZXRDb250YWluZXJBZGQoR3RrQ29udGFpbmVyKiBjb250YWluZXIs
IEd0a1dpZGdldCogd2lkZ2V0KQotewotICAgIGd0a193aWRnZXRfc2V0X3BhcmVudCh3aWRnZXQs
IEdUS19XSURHRVQoY29udGFpbmVyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYlZpZXdXaWRnZXRE
aXNwb3NlKEdPYmplY3QqIGdvYmplY3QpCi17Ci0gICAgV2ViVmlld1dpZGdldCogd2ViVmlld1dp
ZGdldCA9IFdFQl9WSUVXX1dJREdFVChnb2JqZWN0KTsKLSAgICBXZWJWaWV3V2lkZ2V0UHJpdmF0
ZSogcHJpdiA9IHdlYlZpZXdXaWRnZXQtPnByaXY7Ci0KLSAgICBpZiAocHJpdi0+aW1Db250ZXh0
KSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPmltQ29udGV4dCk7Ci0gICAgICAgIHBy
aXYtPmltQ29udGV4dCA9IDA7Ci0gICAgfQotCi0gICAgR19PQkpFQ1RfQ0xBU1Mod2ViVmlld1dp
ZGdldFBhcmVudENsYXNzKS0+ZGlzcG9zZShnb2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Vi
Vmlld1dpZGdldEluaXQoV2ViVmlld1dpZGdldCogd2ViVmlld1dpZGdldCkKLXsKLSAgICBXZWJW
aWV3V2lkZ2V0UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSh3ZWJW
aWV3V2lkZ2V0LCBXRUJfVklFV19UWVBFX1dJREdFVCwgV2ViVmlld1dpZGdldFByaXZhdGUpOwot
ICAgIHdlYlZpZXdXaWRnZXQtPnByaXYgPSBwcml2OwotCi0gICAgZ3RrX3dpZGdldF9zZXRfY2Fu
X2ZvY3VzKEdUS19XSURHRVQod2ViVmlld1dpZGdldCksIFRSVUUpOwotICAgIHByaXYtPmltQ29u
dGV4dCA9IGd0a19pbV9tdWx0aWNvbnRleHRfbmV3KCk7Ci0KLSAgICBwcml2LT5jdXJyZW50Q2xp
Y2tDb3VudCA9IDA7Ci0gICAgcHJpdi0+cHJldmlvdXNDbGlja0J1dHRvbiA9IDA7Ci0gICAgcHJp
di0+cHJldmlvdXNDbGlja1RpbWUgPSAwOwotfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
LXN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3RXhwb3NlKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVu
dEV4cG9zZSogZXZlbnQpCi17Ci0gICAgV2ViVmlldyogd2ViVmlldyA9IHdlYlZpZXdXaWRnZXRH
ZXRXZWJWaWV3SW5zdGFuY2UoV0VCX1ZJRVdfV0lER0VUKHdpZGdldCkpOwotICAgIEdka1JlY3Rh
bmdsZSBjbGlwUmVjdDsKLSAgICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5yZWdpb24s
ICZjbGlwUmVjdCk7Ci0KLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dp
bmRvdyh3aWRnZXQpOwotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGdka19jYWly
b19jcmVhdGUod2luZG93KSk7Ci0KLSAgICB3ZWJWaWV3LT5wYWludCh3aWRnZXQsIGNsaXBSZWN0
LCBjci5nZXQoKSk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0jZWxzZQotc3RhdGljIGdib29s
ZWFuIHdlYlZpZXdEcmF3KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBjcikKLXsKLSAgICBX
ZWJWaWV3KiB3ZWJWaWV3ID0gd2ViVmlld1dpZGdldEdldFdlYlZpZXdJbnN0YW5jZShXRUJfVklF
V19XSURHRVQod2lkZ2V0KSk7Ci0gICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OwotCi0gICAgaWYg
KCFnZGtfY2Fpcm9fZ2V0X2NsaXBfcmVjdGFuZ2xlKGNyLCAmY2xpcFJlY3QpKQotICAgICAgICBy
ZXR1cm4gRkFMU0U7Ci0KLSAgICB3ZWJWaWV3LT5wYWludCh3aWRnZXQsIGNsaXBSZWN0LCBjcik7
Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgd2ViVmlld1Np
emVBbGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikK
LXsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViVmlld1dpZGdldEdldFdlYlZpZXdJbnN0YW5j
ZShXRUJfVklFV19XSURHRVQod2lkZ2V0KSk7Ci0gICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJWaWV3
V2lkZ2V0UGFyZW50Q2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCwgYWxsb2NhdGlvbik7Ci0g
ICAgd2ViVmlldy0+c2V0U2l6ZSh3aWRnZXQsIEludFNpemUoYWxsb2NhdGlvbi0+d2lkdGgsIGFs
bG9jYXRpb24tPmhlaWdodCkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0ZvY3VzSW5F
dmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRGb2N1cyogZXZlbnQpCi17Ci0gICAgV2Vi
Vmlld1dpZGdldCogd2ViVmlld1dpZGdldCA9IFdFQl9WSUVXX1dJREdFVCh3aWRnZXQpOwotICAg
IFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJWaWV3V2lkZ2V0R2V0V2ViVmlld0luc3RhbmNlKHdlYlZp
ZXdXaWRnZXQpOwotCi0gICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3Rv
cGxldmVsKHdpZGdldCk7Ci0gICAgaWYgKGd0a193aWRnZXRfaXNfdG9wbGV2ZWwodG9wbGV2ZWwp
ICYmIGd0a193aW5kb3dfaGFzX3RvcGxldmVsX2ZvY3VzKEdUS19XSU5ET1codG9wbGV2ZWwpKSkg
ewotICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbih3ZWJWaWV3V2lkZ2V0R2V0SU1Db250
ZXh0KHdlYlZpZXdXaWRnZXQpKTsKLSAgICAgICAgd2ViVmlldy0+aGFuZGxlRm9jdXNJbkV2ZW50
KHdpZGdldCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2ViVmlld1dp
ZGdldFBhcmVudENsYXNzKS0+Zm9jdXNfaW5fZXZlbnQod2lkZ2V0LCBldmVudCk7Ci19Ci0KLXN0
YXRpYyBnYm9vbGVhbiB3ZWJWaWV3Rm9jdXNPdXRFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
RXZlbnRGb2N1cyogZXZlbnQpCi17Ci0gICAgV2ViVmlld1dpZGdldCogd2ViVmlld1dpZGdldCA9
IFdFQl9WSUVXX1dJREdFVCh3aWRnZXQpOwotICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJWaWV3
V2lkZ2V0R2V0V2ViVmlld0luc3RhbmNlKHdlYlZpZXdXaWRnZXQpOwotCi0gICAgd2ViVmlldy0+
aGFuZGxlRm9jdXNPdXRFdmVudCh3aWRnZXQpOwotICAgIEd0a0lNQ29udGV4dCogaW1Db250ZXh0
ID0gd2ViVmlld1dpZGdldEdldElNQ29udGV4dCh3ZWJWaWV3V2lkZ2V0KTsKLSAgICBpZiAoaW1D
b250ZXh0KQotICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19vdXQoaW1Db250ZXh0KTsKLQot
ICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYlZpZXdXaWRnZXRQYXJlbnRDbGFzcyktPmZv
Y3VzX291dF9ldmVudCh3aWRnZXQsIGV2ZW50KTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYlZp
ZXdLZXlQcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQpCi17
Ci0gICAgV2ViVmlldyogd2ViVmlldyA9IHdlYlZpZXdXaWRnZXRHZXRXZWJWaWV3SW5zdGFuY2Uo
V0VCX1ZJRVdfV0lER0VUKHdpZGdldCkpOwotICAgIHdlYlZpZXctPmhhbmRsZUtleWJvYXJkRXZl
bnQoZXZlbnQpOwotCi0gICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2ViVmlld1dpZGdldFBh
cmVudENsYXNzKS0+a2V5X3ByZXNzX2V2ZW50KHdpZGdldCwgZXZlbnQpOwotfQotCi1zdGF0aWMg
Z2Jvb2xlYW4gd2ViVmlld0tleVJlbGVhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZl
bnRLZXkqIGV2ZW50KQotewotICAgIFdlYlZpZXdXaWRnZXQqIHdlYlZpZXdXaWRnZXQgPSBXRUJf
VklFV19XSURHRVQod2lkZ2V0KTsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViVmlld1dpZGdl
dEdldFdlYlZpZXdJbnN0YW5jZSh3ZWJWaWV3V2lkZ2V0KTsKLQotICAgIGlmIChndGtfaW1fY29u
dGV4dF9maWx0ZXJfa2V5cHJlc3Mod2ViVmlld1dpZGdldEdldElNQ29udGV4dCh3ZWJWaWV3V2lk
Z2V0KSwgZXZlbnQpKQotICAgICAgICByZXR1cm4gVFJVRTsKLQotICAgIHdlYlZpZXctPmhhbmRs
ZUtleWJvYXJkRXZlbnQoZXZlbnQpOwotCi0gICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Vi
Vmlld1dpZGdldFBhcmVudENsYXNzKS0+a2V5X3JlbGVhc2VfZXZlbnQod2lkZ2V0LCBldmVudCk7
Ci19Ci0KLS8vIENvcGllZCBmcm9tIHdlYmtpdHdlYnZpZXcuY3BwCi1zdGF0aWMgZ3VpbnQzMiBn
ZXRFdmVudFRpbWUoR2RrRXZlbnQqIGV2ZW50KQotewotICAgIGd1aW50MzIgdGltZSA9IGdka19l
dmVudF9nZXRfdGltZShldmVudCk7Ci0gICAgaWYgKHRpbWUpCi0gICAgICAgIHJldHVybiB0aW1l
OwotCi0gICAgLy8gUmVhbCBldmVudHMgYWx3YXlzIGhhdmUgYSBub24temVybyB0aW1lLCBidXQg
ZXZlbnRzIHN5bnRoZXNpemVkCi0gICAgLy8gYnkgdGhlIERSVCBkbyBub3QgYW5kIHdlIG11c3Qg
Y2FsY3VsYXRlIGEgdGltZSBtYW51YWxseS4gVGhpcyB0aW1lCi0gICAgLy8gaXMgbm90IGNhbGN1
bGF0ZWQgaW4gdGhlIERSVCwgYmVjYXVzZSBHVEsrIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoCi0g
ICAgLy8gYW55dGhpbmcgb3RoZXIgdGhhbiBHREtfQ1VSUkVOVF9USU1FIG9uIHN5bnRoZXNpemVk
IGV2ZW50cy4KLSAgICBHVGltZVZhbCB0aW1lVmFsdWU7Ci0gICAgZ19nZXRfY3VycmVudF90aW1l
KCZ0aW1lVmFsdWUpOwotICAgIHJldHVybiAodGltZVZhbHVlLnR2X3NlYyAqIDEwMDApICsgKHRp
bWVWYWx1ZS50dl91c2VjIC8gMTAwMCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3QnV0
dG9uUHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGJ1dHRvbkV2
ZW50KQotewotICAgIGlmIChidXR0b25FdmVudC0+YnV0dG9uID09IDMpIHsKLSAgICAgICAgLy8g
RklYTUU6IFtHVEtdIEFkZCBjb250ZXh0IG1lbnUgc3VwcG9ydCBmb3IgV2Via2l0Mi4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0ODI3Ci0gICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAg
ICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMod2lkZ2V0KTsKLQotICAgIC8vIEZvciBkb3VibGUgYW5k
IHRyaXBsZSBjbGlja3MgR0RLIHNlbmRzIGJvdGggYSBub3JtYWwgYnV0dG9uIHByZXNzIGV2ZW50
Ci0gICAgLy8gYW5kIGEgc3BlY2lmaWMgdHlwZSAobGlrZSBHREtfMkJVVFRPTl9QUkVTUykuIElm
IHdlIGRldGVjdCBhIHNwZWNpYWwgcHJlc3MKLSAgICAvLyBjb21pbmcgdXAsIGlnbm9yZSB0aGlz
IGV2ZW50IGFzIGl0IGNlcnRhaW5seSBnZW5lcmF0ZWQgdGhlIGRvdWJsZSBvciB0cmlwbGUKLSAg
ICAvLyBjbGljay4gVGhlIGNvbnNlcXVlbmNlIG9mIG5vdCBlYXRpbmcgdGhpcyBldmVudCBpcyB0
d28gRE9NIGJ1dHRvbiBwcmVzcyBldmVudHMKLSAgICAvLyBhcmUgZ2VuZXJhdGVkLgotICAgIEdP
d25QdHI8R2RrRXZlbnQ+IG5leHRFdmVudChnZGtfZXZlbnRfcGVlaygpKTsKLSAgICBpZiAobmV4
dEV2ZW50ICYmIChuZXh0RXZlbnQtPmFueS50eXBlID09IEdES18yQlVUVE9OX1BSRVNTIHx8IG5l
eHRFdmVudC0+YW55LnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpKQotICAgICAgICByZXR1cm4g
VFJVRTsKLQotICAgIGdpbnQgZG91YmxlQ2xpY2tEaXN0YW5jZSA9IDI1MDsKLSAgICBnaW50IGRv
dWJsZUNsaWNrVGltZSA9IDU7Ci0gICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3NldHRp
bmdzX2dldF9mb3Jfc2NyZWVuKGd0a193aWRnZXRfZ2V0X3NjcmVlbih3aWRnZXQpKTsKLSAgICBn
X29iamVjdF9nZXQoc2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICJndGstZG91YmxlLWNsaWNr
LWRpc3RhbmNlIiwgJmRvdWJsZUNsaWNrRGlzdGFuY2UsCi0gICAgICAgICAgICAgICAgICJndGst
ZG91YmxlLWNsaWNrLXRpbWUiLCAmZG91YmxlQ2xpY2tUaW1lLCBOVUxMKTsKLQotICAgIC8vIEdU
Sysgb25seSBjb3VudHMgdXAgdG8gdHJpcGxlIGNsaWNrcywgYnV0IFdlYkNvcmUgd2FudHMgdG8g
a25vdyBhYm91dAotICAgIC8vIHF1YWRydXBsZSBjbGlja3MsIHF1aW50dXBsZSBjbGlja3MsIGFk
IGluZmluaXR1bS4gSGVyZSwgd2UgcmVwbGljYXRlIHRoZQotICAgIC8vIEdESyBsb2dpYyBmb3Ig
Y291bnRpbmcgY2xpY2tzLgotICAgIEdka0V2ZW50KiBldmVudChyZWludGVycHJldF9jYXN0PEdk
a0V2ZW50Kj4oYnV0dG9uRXZlbnQpKTsKLSAgICBndWludDMyIGV2ZW50VGltZSA9IGdldEV2ZW50
VGltZShldmVudCk7Ci0gICAgV2ViVmlld1dpZGdldCogd2ViVmlld1dpZGdldCA9IFdFQl9WSUVX
X1dJREdFVCh3aWRnZXQpOwotICAgIFdlYlZpZXdXaWRnZXRQcml2YXRlKiBwcml2ID0gd2ViVmll
d1dpZGdldC0+cHJpdjsKLSAgICBpZiAoKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNT
IHx8IGV2ZW50LT50eXBlID09IEdES18zQlVUVE9OX1BSRVNTKQotICAgICAgICB8fCAoKGFicyhi
dXR0b25FdmVudC0+eCAtIHByaXYtPnByZXZpb3VzQ2xpY2tQb2ludC54KCkpIDwgZG91YmxlQ2xp
Y2tEaXN0YW5jZSkKLSAgICAgICAgICAgICYmIChhYnMoYnV0dG9uRXZlbnQtPnkgLSBwcml2LT5w
cmV2aW91c0NsaWNrUG9pbnQueSgpKSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCi0gICAgICAgICAg
ICAmJiAoZXZlbnRUaW1lIC0gcHJpdi0+cHJldmlvdXNDbGlja1RpbWUgPCBzdGF0aWNfY2FzdDxn
dWludD4oZG91YmxlQ2xpY2tUaW1lKSkKLSAgICAgICAgICAgICYmIChidXR0b25FdmVudC0+YnV0
dG9uID09IHByaXYtPnByZXZpb3VzQ2xpY2tCdXR0b24pKSkKLSAgICAgICAgcHJpdi0+Y3VycmVu
dENsaWNrQ291bnQrKzsKLSAgICBlbHNlCi0gICAgICAgIHByaXYtPmN1cnJlbnRDbGlja0NvdW50
ID0gMTsKLQotICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJWaWV3V2lkZ2V0R2V0V2ViVmlld0lu
c3RhbmNlKHdlYlZpZXdXaWRnZXQpOwotICAgIHdlYlZpZXctPmhhbmRsZU1vdXNlRXZlbnQoZXZl
bnQsIHByaXYtPmN1cnJlbnRDbGlja0NvdW50KTsKLQotICAgIGdkb3VibGUgeCwgeTsKLSAgICBn
ZGtfZXZlbnRfZ2V0X2Nvb3JkcyhldmVudCwgJngsICZ5KTsKLSAgICBwcml2LT5wcmV2aW91c0Ns
aWNrUG9pbnQgPSBJbnRQb2ludCh4LCB5KTsKLSAgICBwcml2LT5wcmV2aW91c0NsaWNrQnV0dG9u
ID0gYnV0dG9uRXZlbnQtPmJ1dHRvbjsKLSAgICBwcml2LT5wcmV2aW91c0NsaWNrVGltZSA9IGV2
ZW50VGltZTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYlZp
ZXdCdXR0b25SZWxlYXNlRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBl
dmVudCkKLXsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViVmlld1dpZGdldEdldFdlYlZpZXdJ
bnN0YW5jZShXRUJfVklFV19XSURHRVQod2lkZ2V0KSk7Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2Zv
Y3VzKHdpZGdldCk7Ci0gICAgd2ViVmlldy0+aGFuZGxlTW91c2VFdmVudChyZWludGVycHJldF9j
YXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAwIC8qIGN1cnJlbnRDbGlja0NvdW50ICovKTsKLQotICAg
IHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYlZpZXdTY3JvbGxFdmVudChH
dGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQotewotICAgIFdlYlZpZXcq
IHdlYlZpZXcgPSB3ZWJWaWV3V2lkZ2V0R2V0V2ViVmlld0luc3RhbmNlKFdFQl9WSUVXX1dJREdF
VCh3aWRnZXQpKTsKLSAgICB3ZWJWaWV3LT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKLQotICAg
IHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYlZpZXdNb3Rpb25Ob3RpZnlF
dmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRNb3Rpb24qIGV2ZW50KQotewotICAgIFdl
YlZpZXcqIHdlYlZpZXcgPSB3ZWJWaWV3V2lkZ2V0R2V0V2ViVmlld0luc3RhbmNlKFdFQl9WSUVX
X1dJREdFVCh3aWRnZXQpKTsKLSAgICB3ZWJWaWV3LT5oYW5kbGVNb3VzZUV2ZW50KHJlaW50ZXJw
cmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksIDAgLyogY3VycmVudENsaWNrQ291bnQgKi8pOwot
Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJWaWV3V2lkZ2V0Q2xhc3NJ
bml0KFdlYlZpZXdXaWRnZXRDbGFzcyogd2ViVmlld1dpZGdldENsYXNzKQotewotICAgIHdlYlZp
ZXdXaWRnZXRQYXJlbnRDbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCh3ZWJWaWV3V2lk
Z2V0Q2xhc3MpOwotCi0gICAgR3RrV2lkZ2V0Q2xhc3MqIHdpZGdldENsYXNzID0gR1RLX1dJREdF
VF9DTEFTUyh3ZWJWaWV3V2lkZ2V0Q2xhc3MpOwotICAgIHdpZGdldENsYXNzLT5yZWFsaXplID0g
d2ViVmlld1dpZGdldFJlYWxpemU7Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICB3aWRn
ZXRDbGFzcy0+ZXhwb3NlX2V2ZW50ID0gd2ViVmlld0V4cG9zZTsKLSNlbHNlCi0gICAgd2lkZ2V0
Q2xhc3MtPmRyYXcgPSB3ZWJWaWV3RHJhdzsKLSNlbmRpZgotICAgIHdpZGdldENsYXNzLT5zaXpl
X2FsbG9jYXRlID0gd2ViVmlld1NpemVBbGxvY2F0ZTsKLSAgICB3aWRnZXRDbGFzcy0+Zm9jdXNf
aW5fZXZlbnQgPSB3ZWJWaWV3Rm9jdXNJbkV2ZW50OwotICAgIHdpZGdldENsYXNzLT5mb2N1c19v
dXRfZXZlbnQgPSB3ZWJWaWV3Rm9jdXNPdXRFdmVudDsKLSAgICB3aWRnZXRDbGFzcy0+a2V5X3By
ZXNzX2V2ZW50ID0gd2ViVmlld0tleVByZXNzRXZlbnQ7Ci0gICAgd2lkZ2V0Q2xhc3MtPmtleV9y
ZWxlYXNlX2V2ZW50ID0gd2ViVmlld0tleVJlbGVhc2VFdmVudDsKLSAgICB3aWRnZXRDbGFzcy0+
YnV0dG9uX3ByZXNzX2V2ZW50ID0gd2ViVmlld0J1dHRvblByZXNzRXZlbnQ7Ci0gICAgd2lkZ2V0
Q2xhc3MtPmJ1dHRvbl9yZWxlYXNlX2V2ZW50ID0gd2ViVmlld0J1dHRvblJlbGVhc2VFdmVudDsK
LSAgICB3aWRnZXRDbGFzcy0+c2Nyb2xsX2V2ZW50ID0gd2ViVmlld1Njcm9sbEV2ZW50OwotICAg
IHdpZGdldENsYXNzLT5tb3Rpb25fbm90aWZ5X2V2ZW50ID0gd2ViVmlld01vdGlvbk5vdGlmeUV2
ZW50OwotCi0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3
ZWJWaWV3V2lkZ2V0Q2xhc3MpOwotICAgIGdvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdlYlZpZXdX
aWRnZXREaXNwb3NlOwotCi0gICAgR3RrQ29udGFpbmVyQ2xhc3MqIGNvbnRhaW5lckNsYXNzID0g
R1RLX0NPTlRBSU5FUl9DTEFTUyh3ZWJWaWV3V2lkZ2V0Q2xhc3MpOwotICAgIGNvbnRhaW5lckNs
YXNzLT5hZGQgPSB3ZWJWaWV3V2lkZ2V0Q29udGFpbmVyQWRkOwotCi0gICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKHdlYlZpZXdXaWRnZXRDbGFzcywgc2l6ZW9mKFdlYlZpZXdXaWRnZXRQcml2
YXRlKSk7Ci19Ci0KLUdUeXBlIHdlYlZpZXdXaWRnZXRHZXRUeXBlKCkKLXsKLSAgICBzdGF0aWMg
dm9sYXRpbGUgZ3NpemUgZ0RlZmluZVR5cGVJZFZvbGF0aWxlID0gMDsKLQotICAgIGlmICghZ19v
bmNlX2luaXRfZW50ZXIoJmdEZWZpbmVUeXBlSWRWb2xhdGlsZSkpCi0gICAgICAgIHJldHVybiBn
RGVmaW5lVHlwZUlkVm9sYXRpbGU7Ci0KLSAgICBHVHlwZSBnRGVmaW5lVHlwZUlkID0gZ190eXBl
X3JlZ2lzdGVyX3N0YXRpY19zaW1wbGUoR1RLX1RZUEVfQ09OVEFJTkVSLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2ludGVybl9zdGF0
aWNfc3RyaW5nKCJXZWJWaWV3V2lkZ2V0IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihXZWJWaWV3V2lkZ2V0Q2xhc3MpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PEdDbGFzc0luaXRGdW5jPih3ZWJWaWV3V2lkZ2V0Q2xhc3NJbml0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZW9mKFdlYlZpZXdXaWRnZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdJbnN0YW5jZUluaXRGdW5j
Pih3ZWJWaWV3V2lkZ2V0SW5pdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdUeXBlRmxhZ3M+KDApKTsKLSAgICBn
X29uY2VfaW5pdF9sZWF2ZSgmZ0RlZmluZVR5cGVJZFZvbGF0aWxlLCBnRGVmaW5lVHlwZUlkKTsK
LQotICAgIHJldHVybiBnRGVmaW5lVHlwZUlkVm9sYXRpbGU7Ci19Ci0KLVdlYlZpZXcqIHdlYlZp
ZXdXaWRnZXRHZXRXZWJWaWV3SW5zdGFuY2UoV2ViVmlld1dpZGdldCogd2ViVmlld1dpZGdldCkK
LXsKLSAgICByZXR1cm4gd2ViVmlld1dpZGdldC0+cHJpdi0+d2ViVmlld0luc3RhbmNlOwotfQot
Ci12b2lkIHdlYlZpZXdXaWRnZXRTZXRXZWJWaWV3SW5zdGFuY2UoV2ViVmlld1dpZGdldCogd2Vi
Vmlld1dpZGdldCwgV2ViVmlldyogd2ViVmlld0luc3RhbmNlKQotewotICAgIHdlYlZpZXdXaWRn
ZXQtPnByaXYtPndlYlZpZXdJbnN0YW5jZSA9IHdlYlZpZXdJbnN0YW5jZTsKLX0KLQotR3RrSU1D
b250ZXh0KiB3ZWJWaWV3V2lkZ2V0R2V0SU1Db250ZXh0KFdlYlZpZXdXaWRnZXQqIHdlYlZpZXdX
aWRnZXQpCi17Ci0gICAgcmV0dXJuIHdlYlZpZXdXaWRnZXQtPnByaXYtPmltQ29udGV4dDsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlld1dpZGdldC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMWQ4N2YuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0
eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlZpZXdXaWRnZXRfaAotI2RlZmluZSBXZWJW
aWV3V2lkZ2V0X2gKLQotI2luY2x1ZGUgIldlYlZpZXcuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5l
IFdFQl9WSUVXX1RZUEVfV0lER0VUICAgICAgICAgICAgICAod2ViVmlld1dpZGdldEdldFR5cGUo
KSkKLSNkZWZpbmUgV0VCX1ZJRVdfV0lER0VUKG9iamVjdCkgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqZWN0KSwgV0VCX1ZJRVdfVFlQRV9XSURHRVQsIFdlYlZpZXdX
aWRnZXQpKQotI2RlZmluZSBXRUJfVklFV19XSURHRVRfQ0xBU1Moa2xhc3MpICAgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQl9WSUVXX1RZUEVfV0lER0VULCBXZWJWaWV3
V2lkZ2V0Q2xhc3MpKQotI2RlZmluZSBXRUJfVklFV19JU19XSURHRVQob2JqZWN0KSAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmplY3QpLCBXRUJfVklFV19UWVBFX1dJREdF
VCkpCi0jZGVmaW5lIFdFQl9WSUVXX0lTX0NMQVNTKGtsYXNzKSAgICAgICAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgV0VCX1ZJRVdfVFlQRV9XSURHRVQpKQotI2RlZmluZSBX
RUJfVklFV19XSURHRVRfR0VUX0NMQVNTKG9iamVjdCkgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iamVjdCksIFdFQl9WSUVXX1RZUEVfV0lER0VULCBXZWJWaWV3V2lkZ2V0Q2xhc3MpKQot
Ci10eXBlZGVmIHN0cnVjdCBfV2ViVmlld1dpZGdldCBXZWJWaWV3V2lkZ2V0OwotdHlwZWRlZiBz
dHJ1Y3QgX1dlYlZpZXdXaWRnZXRDbGFzcyBXZWJWaWV3V2lkZ2V0Q2xhc3M7Ci10eXBlZGVmIHN0
cnVjdCBfV2ViVmlld1dpZGdldFByaXZhdGUgV2ViVmlld1dpZGdldFByaXZhdGU7Ci0KLXN0cnVj
dCBfV2ViVmlld1dpZGdldCB7Ci0gICAgR3RrQ29udGFpbmVyIHBhcmVudEluc3RhbmNlOwotICAg
IC8qPCBwcml2YXRlID4qLwotICAgIFdlYlZpZXdXaWRnZXRQcml2YXRlKiBwcml2OwotfTsKLQot
c3RydWN0IF9XZWJWaWV3V2lkZ2V0Q2xhc3MgewotICAgIEd0a0NvbnRhaW5lckNsYXNzIHBhcmVu
dENsYXNzOwotfTsKLQotR1R5cGUgd2ViVmlld1dpZGdldEdldFR5cGUoKTsKLQotV2ViVmlldyog
d2ViVmlld1dpZGdldEdldFdlYlZpZXdJbnN0YW5jZShXZWJWaWV3V2lkZ2V0Kik7Ci0KLXZvaWQg
d2ViVmlld1dpZGdldFNldFdlYlZpZXdJbnN0YW5jZShXZWJWaWV3V2lkZ2V0KiwgV2ViVmlldyop
OwotCi1HdGtJTUNvbnRleHQqIHdlYlZpZXdXaWRnZXRHZXRJTUNvbnRleHQoV2ViVmlld1dpZGdl
dCopOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLy8gV2ViVmlld1dpZGdldF9oCmRpZmYgLS1n
aXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3Rr
L21haW4uYwppbmRleCAwYzMyNTEwLi4yMmY3NWVjIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJv
d3Nlci9ndGsvbWFpbi5jCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKQEAgLTMy
LDcgKzMyLDcgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGVVcmlFbnRyeUNhbGxiYWNrKEd0a1dpZGdl
dCAqZW50cnksIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgV0tWaWV3UmVmIHdlYlZpZXcgPSBnX29i
amVjdF9nZXRfZGF0YShHX09CSkVDVChlbnRyeSksICJ3ZWItdmlldyIpOwogICAgIGNvbnN0IGdj
aGFyICp1cmkgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGVudHJ5KSk7Ci0gICAgV0tQ
YWdlTG9hZFVSTChXS1ZpZXdHZXRQYWdlKHdlYlZpZXcpLCBXS1VSTENyZWF0ZVdpdGhVUkwodXJp
KSk7CisgICAgV0tQYWdlTG9hZFVSTChXS1ZpZXdHZXRQYWdlKHdlYlZpZXcpLCBXS1VSTENyZWF0
ZVdpdGhVVEY4Q1N0cmluZyh1cmkpKTsKIH0KIAogc3RhdGljIHZvaWQgZGVzdHJveUNhbGxiYWNr
KEd0a1dpZGdldCAqd2lkZ2V0LCBHdGtXaWRnZXQgKndpbmRvdykKQEAgLTk4LDcgKzk4LDcgQEAg
c3RhdGljIEd0a1dpZGdldCAqY3JlYXRlV2luZG93KFdLVmlld1JlZiB3ZWJWaWV3KQogCiAgICAg
R3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTsKICAgICBndGtfYm94X3Bh
Y2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgY3JlYXRlVG9vbGJhcih1cmlFbnRyeSwgd2ViVmlldyks
IEZBTFNFLCBGQUxTRSwgMCk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCks
IFdLVmlld0dldFdpbmRvdyh3ZWJWaWV3KSwgVFJVRSwgVFJVRSwgMCk7CisgICAgZ3RrX2JveF9w
YWNrX3N0YXJ0KEdUS19CT1godmJveCksIEdUS19XSURHRVQod2ViVmlldyksIFRSVUUsIFRSVUUs
IDApOwogCiAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94
KTsKIApAQCAtMTI3LDEwICsxMjcsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb
XSkKICAgICBHdGtXaWRnZXQgKm1haW5XaW5kb3cgPSBjcmVhdGVXaW5kb3cod2ViVmlldyk7CiAK
ICAgICBnY2hhciogdXJsID0gYXJndW1lbnRUb1VSTChhcmdjID4gMSA/IGFyZ3ZbMV0gOiAiaHR0
cDovL3d3dy53ZWJraXRndGsub3JnLyIpOwotICAgIFdLUGFnZUxvYWRVUkwoV0tWaWV3R2V0UGFn
ZSh3ZWJWaWV3KSwgV0tVUkxDcmVhdGVXaXRoVVJMKHVybCkpOworICAgIFdLUGFnZUxvYWRVUkwo
V0tWaWV3R2V0UGFnZSh3ZWJWaWV3KSwgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcodXJsKSk7
CiAgICAgZ19mcmVlKHVybCk7CiAKLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoV0tWaWV3R2V0
V2luZG93KHdlYlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVCh3
ZWJWaWV3KSk7CiAgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtYWluV2luZG93KTsKICAgICBndGtf
bWFpbigpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88416</attachid>
            <date>2011-04-06 07:59:16 -0700</date>
            <delta_ts>2011-04-15 02:35:35 -0700</delta_ts>
            <desc>Patch fixing coding style issues</desc>
            <filename>wk2-c-api2.diff</filename>
            <type>text/plain</type>
            <size>106043</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmNzBiMjE1Li4zNDc2ZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEy
IEBACisyMDExLTA0LTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RL
XSBJbXBsZW1lbnQgV0tWaWV3IHdpdGggYSBjb21tb24gd2lkZ2V0IHRoYXQgY2FuIGJlIHVzZWQg
YnkgYm90aCBDIGFuZCBndGsgQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTc5NDQKKworICAgICAgICBNb3ZlIGd0ayBBUEkgZnJvbSBVSVByb2Nl
c3MvZ3RrIHRvIFVJUHJvY2Vzcy9BUEkvZ3RrLiBXZWJWaWV3IGFuZAorICAgICAgICBXZWJWaWV3
V2lkZ2V0IGhhdmUgYmVlbiBtZXJnZWQgaW50byBXZWJLaXRXZWJWaWV3QmFzZSwgdGhlIGNvbW1v
bgorICAgICAgICBhYnN0cmFjdCBjbGFzcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdmll
dworICAgICAgICB3aWRnZXRzLiBQYWdlQ2xpZW50IGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIG1v
dmVkIHRvCisgICAgICAgIFBhZ2VDbGllbnRJbXBsIGFuZCBpdCdzIHVzZWQgYnkgV2ViS2l0V2Vi
Vmlld0Jhc2UuIFdLVmlldyBwcm92aWRlcworICAgICAgICBhIGd0ayB3aWRnZXQgZm9yIHRoZSBD
IEFQSSBpbmhlcml0aW5nIGZyb20gV2ViS2l0V2ViVmlld0Jhc2UuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvZ3RrL1dLQVBJQ2FzdEd0ay5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNwcDoKKyAgICAgICAgKHdr
X3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICh3a192aWV3X2luaXQpOgorICAgICAgICAoV0tW
aWV3R2V0UGFnZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9ndGsvV0tWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1Zp
ZXdQcml2YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9n
dGsvV0tWaWV3LmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJ
bXBsKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6On5QYWdlQ2xpZW50SW1wbCk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNldFZpZXdOZWVkc0Rpc3BsYXkp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlzcGxheVZpZXcpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRJbXBsOjp2aWV3U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1Zp
ZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmlzVmlld0luV2lu
ZG93KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRDcmFzaCk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkaWRSZWxhdW5jaFByb2Nlc3MpOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0Rm9jdXMpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6dGFrZUZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OnRvb2xUaXBDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OnNldEN1cnNvcik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRWaWV3
cG9ydEFyZ3VtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpyZWdpc3Rl
ckVkaXRDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNsZWFyQWxs
RWRpdENvbW1hbmRzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNvbnZlcnRU
b0RldmljZVNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNvbnZlcnRU
b1VzZXJTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aW5kb3dUb1Nj
cmVlbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aEtleUV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZE5vdEhhbmRsZUtleUV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZUNvbnRleHRNZW51UHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0RmluZEluZGljYXRvcik6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpwYWdlRGlkRW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnBhZ2VEaWRM
ZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZUNsaWVudEltcGw6OmRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3VzdG9tUmVwcmVzZW50
YXRpb25ab29tRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNldEN1
c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpwYWdlQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRp
ZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50SW1wbDo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJWaWV3LmguCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dXNlclNwYWNlU2NhbGVG
YWN0b3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cDogQWRkZWQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemUpOgorICAgICAgICAo
d2Via2l0V2ViVmlld0Jhc2VDb250YWluZXJBZGQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KToKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdCYXNlRXhwb3NlKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
RHJhdyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVNpemVBbGxvY2F0ZSk6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3QmFzZUZvY3VzSW5FdmVudCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZUZvY3VzT3V0RXZlbnQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VLZXlQcmVzc0V2
ZW50KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlS2V5UmVsZWFzZUV2ZW50KToKKyAgICAg
ICAgKGdldEV2ZW50VGltZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblByZXNz
RXZlbnQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VCdXR0b25SZWxlYXNlRXZlbnQpOgor
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTY3JvbGxFdmVudCk6CisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZU1vdGlvbk5vdGlmeUV2ZW50KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19i
YXNlX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRp
dG9yQ29tbWFuZCk6CisgICAgICAgIChiYWNrc3BhY2VDYWxsYmFjayk6CisgICAgICAgIChzZWxl
Y3RBbGxDYWxsYmFjayk6CisgICAgICAgIChjdXRDbGlwYm9hcmRDYWxsYmFjayk6CisgICAgICAg
IChjb3B5Q2xpcGJvYXJkQ2FsbGJhY2spOgorICAgICAgICAocGFzdGVDbGlwYm9hcmRDYWxsYmFj
ayk6CisgICAgICAgICh0b2dnbGVPdmVyd3JpdGVDYWxsYmFjayk6CisgICAgICAgIChwb3B1cE1l
bnVDYWxsYmFjayk6CisgICAgICAgIChzaG93SGVscENhbGxiYWNrKToKKyAgICAgICAgKGRlbGV0
ZUZyb21DdXJzb3JDYWxsYmFjayk6CisgICAgICAgIChtb3ZlQ3Vyc29yQ2FsbGJhY2spOgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VFZGl0b3JJbml0KToKKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdCYXNlR2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudCk6CisgICAgICAgICh3ZWJraXRXZWJW
aWV3QmFzZUNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VHZXRQYWdl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmguCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdGRlZmluZXMuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpwYWdl
KToKKyAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmVuc3Vy
ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJl
YVByb3h5OjpkcmF3VXBkYXRlQ2h1bmtJbnRvQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZ3RrL1dlYlZpZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsv
V2ViVmlld1dpZGdldC5jcHA6IFJlbW92ZWQuCisKIDIwMTEtMDQtMDUgIENoYW5nIFNodSAgPGNz
aHVAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlZGFmMGE1Li43
MTM3NmJkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDQtMDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBXS1ZpZXcgd2l0aCBhIGNvbW1vbiB3aWRnZXQgdGhh
dCBjYW4gYmUgdXNlZCBieSBib3RoIEMgYW5kIGd0ayBBUElzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Nzk0NAorCisgICAgICAgIFdLVmlldyBpcyBu
b3cgYSBHdGtXaWRnZXQgc28gaXQgY2FuIGJlIHVzZWQgaXQgYXMgYSB3aWRnZXQuCisKKyAgICAg
ICAgKiBNaW5pQnJvd3Nlci9ndGsvbWFpbi5jOgorICAgICAgICAoYWN0aXZhdGVVcmlFbnRyeUNh
bGxiYWNrKToKKyAgICAgICAgKGNyZWF0ZVdpbmRvdyk6CisgICAgICAgIChtYWluKToKKwogMjAx
MS0wNC0wNSAgS2V2aW4gT2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAg
ICAgICBbd3hdIE1hYyBidWlsZCBmaXguIEhhbmRsZSBjYXNlcyB3aGVyZSAxMC40IFNESyBpcyBu
b3QgaW5zdGFsbGVkLCBhbmQgYWxzbyBhZGQgeDg2XzY0IGFyY2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0K
aW5kZXggYTkzY2NiMC4uMTFiNTkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTI5Myw2ICsy
OTMsNyBAQCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL2d0ay9XS0FQSUNhc3RHdGsuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2d0ay9XS1ZpZXcuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
Z3RrL1dLVmlldy5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmll
d1ByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dlYktpdDIuaCBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oIFwKQEAg
LTM1NCw2ICszNTUsMTEgQEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9jcHAvV0tSZXRhaW5QdHIuaCBcCisJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIFwKKwlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmggXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VQcm94eS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9B
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuY3BwIFwKQEAg
LTM4MCwxMiArMzg2LDggQEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUd0ay5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yR3RrLmNwcCBcCi0JU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViUGFnZVByb3h5R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJQcmVmZXJlbmNlc0d0ay5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
Vmlldy5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5j
cHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNo
ZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xh
dW5jaGVyLmNwcCBcCkBAIC03MDcsNiArNzA5LDcgQEAgbGliV2ViS2l0Ml9sYV9DUFBGTEFHUyA9
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MgXAogCS1JJChz
cmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsgXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRG93bmxvYWRzIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsv
V0tBUElDYXN0R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLQVBJ
Q2FzdEd0ay5oCmluZGV4IDc5YzExMzMuLmY3OTVhZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tBUElDYXN0R3RrLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS0FQSUNhc3RHdGsuaApAQCAtMzEsMTEgKzMxLDExIEBA
CiAjZXJyb3IgIlBsZWFzZSAjaW5jbHVkZSBcIldLQVBJQ2FzdC5oXCIgaW5zdGVhZCBvZiB0aGlz
IGZpbGUgZGlyZWN0bHkuIgogI2VuZGlmCiAKLW5hbWVzcGFjZSBXZWJLaXQgewordHlwZWRlZiBz
dHJ1Y3QgX1dLVmlldyBXS1ZpZXc7CiAKLWNsYXNzIFdlYlZpZXc7CituYW1lc3BhY2UgV2ViS2l0
IHsKIAotV0tfQUREX0FQSV9NQVBQSU5HKFdLVmlld1JlZiwgV2ViVmlldykKK1dLX0FERF9BUElf
TUFQUElORyhXS1ZpZXdSZWYsIFdLVmlldykKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5jcHAKaW5kZXggZTNkNmM2OS4uNWM4M2Q4OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNwcApAQCAtMjgsMzIg
KzI4LDMyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tWaWV3LmgiCiAKLSNp
bmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSW1wbC5oPgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
V0tWaWV3UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVdL
Vmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3Vw
UmVmIHBhZ2VHcm91cFJlZikKK0dfREVGSU5FX1RZUEUoV0tWaWV3LCB3a192aWV3LCBXRUJLSVRf
VFlQRV9XRUJfVklFV19CQVNFKQorCitzdGF0aWMgdm9pZCB3a192aWV3X2NsYXNzX2luaXQoV0tW
aWV3Q2xhc3MqIHZpZXdDbGFzcykKIHsKLSAgICBSZWZQdHI8V2ViVmlldz4gdmlldyA9IFdlYlZp
ZXc6OmNyZWF0ZSh0b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKLSAg
ICByZXR1cm4gdG9BUEkodmlldy5yZWxlYXNlKCkubGVha1JlZigpKTsKIH0KIAotR3RrV2lkZ2V0
KiBXS1ZpZXdHZXRXaW5kb3coV0tWaWV3UmVmIHZpZXdSZWYpCitzdGF0aWMgdm9pZCB3a192aWV3
X2luaXQoV0tWaWV3KiB2aWV3KQogewotICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPndpbmRv
dygpOwogfQogCi1XS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlld1JlZikKKy8v
IFB1YmxpYyBBUEkKK1dLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3KQogewot
ICAgIHJldHVybiB0b0FQSSh0b0ltcGwodmlld1JlZiktPnBhZ2UoKSk7CisgICAgcmV0dXJuIHRv
QVBJKHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh0b0ltcGwo
dmlldykpKSk7CiB9CiAKLVdLVVJMUmVmIFdLVVJMQ3JlYXRlV2l0aFVSTChjb25zdCBjaGFyKiB1
cmwpCitXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkVVJMQVBJKFN0
cmluZ0ltcGw6OmNyZWF0ZSh1cmwpLmxlYWtSZWYoKSk7CisgICAgV0tWaWV3KiB2aWV3ID0gV0tf
VklFVyhnX29iamVjdF9uZXcoV0tfVFlQRV9WSUVXLCAwKSk7CisgICAgd2Via2l0V2ViVmlld0Jh
c2VDcmVhdGVXZWJQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHZpZXcpLCBjb250ZXh0UmVmLCBw
YWdlR3JvdXBSZWYpOworICAgIHJldHVybiB0b0FQSSh2aWV3KTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5oCmluZGV4IDgyZTU1YWIuLmRkNjBiN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuaApAQCAtMjksMjAg
KzI5LDE2IEBACiAjZGVmaW5lIFdLVmlld19oCiAKICNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5o
PgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMi
IHsKICNlbmRpZgogCi1XS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS0NvbnRleHRS
ZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKLQotV0tfRVhQT1JUIEd0a1dp
ZGdldCogV0tWaWV3R2V0V2luZG93KFdLVmlld1JlZiB2aWV3KTsKK3R5cGVkZWYgc3RydWN0IF9X
S1ZpZXcgV0tWaWV3OwogCitXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS0NvbnRl
eHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKIFdLX0VYUE9SVCBXS1Bh
Z2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlldyk7CiAKLVdLX0VYUE9SVCBXS1VSTFJl
ZiBXS1VSTENyZWF0ZVdpdGhVUkwoY29uc3QgY2hhciopOwotCiAjaWZkZWYgX19jcGx1c3BsdXMK
IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0
ay9XS1ZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dL
Vmlld1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmViODk4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9X
S1ZpZXdQcml2YXRlLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg
KGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXS1Zp
ZXdQcml2YXRlX2gKKyNkZWZpbmUgV0tWaWV3UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3QmFzZS5oIgorI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0tfVFlQRV9WSUVXICAgICAg
ICAgICAgKHdrX3ZpZXdfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0tfVklFVyhvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXS19UWVBFX1ZJRVcsIFdLVmll
dykpCisjZGVmaW5lIFdLX1ZJRVdfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCAgV0tfVFlQRV9WSUVXLCBXS1ZpZXdDbGFzcykpCisjZGVmaW5lIFdLX0lT
X1ZJRVcob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0tf
VFlQRV9WSUVXKSkKKyNkZWZpbmUgV0tfSVNfVklFV19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXS19UWVBFX1ZJRVcpKQorI2RlZmluZSBXS19WSUVXX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdLX1RZUEVf
VklFVywgV0tWaWV3Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV0tWaWV3Q2xhc3MgICBXS1Zp
ZXdDbGFzczsKKworc3RydWN0IF9XS1ZpZXcgeworICAgIFdlYktpdFdlYlZpZXdCYXNlIHBhcmVu
dDsKK307CisKK3N0cnVjdCBfV0tWaWV3Q2xhc3MgeworICAgIFdlYktpdFdlYlZpZXdCYXNlQ2xh
c3MgcGFyZW50OworfTsKKworR1R5cGUgd2tfdmlld19nZXRfdHlwZSh2b2lkKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8vIFdLVmlld19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uY2VjOTMxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMCwwICsxLDI1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgi
CisKKyNpbmNsdWRlICJDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgorI2lu
Y2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1BhZ2VDbGllbnRJbXBsOjpQYWdlQ2xpZW50SW1wbChHdGtXaWRnZXQqIHdlYlZpZXcp
CisgICAgOiBtX3ZpZXcod2ViVmlldykKK3sKK30KKworUGFnZUNsaWVudEltcGw6On5QYWdlQ2xp
ZW50SW1wbCgpCit7Cit9CisKK1Bhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gUGFnZUNsaWVu
dEltcGw6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKG1fdmlldyk7CisgICAgcmV0dXJu
IENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpjcmVhdGUod2ViVmlld0Jhc2UsIHdlYmtp
dFdlYlZpZXdCYXNlR2V0UGFnZSh3ZWJWaWV3QmFzZSkpOworfQorCit2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpc3BsYXlWaWV3
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpz
Y3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitXZWJDb3JlOjpJbnRTaXplIFBhZ2VDbGllbnRJbXBsOjp2aWV3U2l6ZSgpCit7CisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24obV92
aWV3LCAmYWxsb2NhdGlvbik7CisgICAgcmV0dXJuIEludFNpemUoYWxsb2NhdGlvbi53aWR0aCwg
YWxsb2NhdGlvbi5oZWlnaHQpOworfQorCitib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5k
b3dBY3RpdmUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld0ZvY3VzZWQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6Omlz
Vmlld1Zpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld0luV2luZG93KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBs
Ojpwcm9jZXNzRGlkQ3Jhc2goKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmRpZFJlbGF1bmNoUHJvY2VzcygpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Rm9jdXMoYm9vbCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp0YWtlRm9jdXMoYm9v
bCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp0
b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEN1cnNvcihjb25zdCBD
dXJzb3ImIGN1cnNvcikKK3sKKyAgICAvLyBbR1RLXSBXaWRnZXQ6OnNldEN1cnNvcigpIGdldHMg
Y2FsbGVkIGZyZXF1ZW50bHkKKyAgICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjM4OAorICAgIC8vIFNldHRpbmcgdGhlIGN1cnNvciBtYXkgYmUgYW4gZXhwZW5z
aXZlIG9wZXJhdGlvbiBpbiBzb21lIGJhY2tlbmRzLAorICAgIC8vIHNvIGRvbid0IHJlLXNldCB0
aGUgY3Vyc29yIGlmIGl0J3MgYWxyZWFkeSBzZXQgdG8gdGhlIHRhcmdldCB2YWx1ZS4KKyAgICBH
ZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3ZpZXcpOworICAgIEdk
a0N1cnNvciogY3VycmVudEN1cnNvciA9IGdka193aW5kb3dfZ2V0X2N1cnNvcih3aW5kb3cpOwor
ICAgIEdka0N1cnNvciogbmV3Q3Vyc29yID0gY3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCkuZ2V0KCk7
CisgICAgaWYgKGN1cnJlbnRDdXJzb3IgIT0gbmV3Q3Vyc29yKQorICAgICAgICBnZGtfd2luZG93
X3NldF9jdXJzb3Iod2luZG93LCBuZXdDdXJzb3IpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjpzZXRWaWV3cG9ydEFyZ3VtZW50cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVn
aXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdl
UHJveHk6OlVuZG9PclJlZG8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQ
YWdlQ2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3Bh
Y2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiB2aWV3UmVjdDsKK30KKworRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252
ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiB2aWV3UmVjdDsKK30KKworSW50UmVjdCBQYWdlQ2xpZW50
SW1wbDo6d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wg
d2FzRXZlbnRIYW5kbGVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OmRpZE5vdEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQmIGV2ZW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Bhc3NSZWZQdHI8
V2ViUG9wdXBNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQb3B1cE1lbnVQcm94eShX
ZWJQYWdlUHJveHkqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK1Bhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0
ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRGaW5kSW5kaWNh
dG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9p
ZCBQYWdlQ2xpZW50SW1wbDo6cGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZURp
ZExlYXZlQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKK3ZvaWQgUGFnZUNs
aWVudEltcGw6OmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudCYgZXZlbnQsIFZlY3RvcjxXVEY6OlN0cmluZz4mIGNvbW1hbmRMaXN0KQorewor
ICAgIHdlYmtpdFdlYlZpZXdCYXNlR2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChXRUJLSVRf
V0VCX1ZJRVdfQkFTRShtX3ZpZXcpLCBldmVudCwgY29tbWFuZExpc3QpOworfQorCit2b2lkIFBh
Z2VDbGllbnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVw
cmVzZW50YXRpb24pCit7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZEZpbmlzaExvYWRp
bmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxl
bmFtZSwgY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpCit7Cit9CisKK2RvdWJsZSBQYWdl
Q2xpZW50SW1wbDo6Y3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpz
ZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnBhZ2VDbG9zZWQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENoYW5nZVNj
cm9sbGJhcnNGb3JNYWluRnJhbWUoKSBjb25zdAoreworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjpmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPEludFJlY3Q+JikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmZDNjYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTAs
MCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1v
YmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFnZUNsaWVudEltcGxfaAorI2RlZmlu
ZSBQYWdlQ2xpZW50SW1wbF9oCisKKyNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgRHJhd2luZ0FyZWFQcm94eTsKK2NsYXNzIFdlYlBhZ2VOYW1lc3BhY2U7CisK
K2NsYXNzIFBhZ2VDbGllbnRJbXBsIDogcHVibGljIFBhZ2VDbGllbnQgeworcHVibGljOgorICAg
IH5QYWdlQ2xpZW50SW1wbCgpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VDbGllbnRJbXBs
PiBjcmVhdGUoR3RrV2lkZ2V0KiB3ZWJWaWV3KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBQYWdlQ2xpZW50SW1wbCh3ZWJWaWV3KSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IFBhZ2VDbGllbnRJbXBsKEd0a1dpZGdldCogd2ViVmlldyk7CisKKyAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGxheVZpZXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzY3JvbGxPZmZzZXQpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSB2aWV3
U2l6ZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdXaW5kb3dBY3RpdmUoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNWaWV3Rm9jdXNlZCgpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxl
KCk7CisgICAgdmlydHVhbCBib29sIGlzVmlld0luV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lk
IHByb2Nlc3NEaWRDcmFzaCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3Mo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZUNsb3NlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRG
b2N1cyhib29sIGZvY3VzZWQpOworICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoYm9vbCBkaXJl
Y3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBXVEY6OlN0cmlu
ZyYsIGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25z
dCBXZWJDb3JlOjpDdXJzb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnRBcmd1bWVu
dHMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQ
YWdlUHJveHk6OlVuZG9PclJlZG8pOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21t
YW5kcygpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb0RldmljZVNw
YWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6Rmxv
YXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCk7CisgICAgdmlydHVhbCB2
b2lkIGRpZE5vdEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKTsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVu
dVByb3h5KFdlYlBhZ2VQcm94eSopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250ZXh0
TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopOworICAgIHZp
cnR1YWwgdm9pZCBzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJv
b2wgZmFkZU91dCk7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWlu
RnJhbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZmxhc2hCYWNraW5nU3RvcmVVcGRhdGVz
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgdXBkYXRlUmVjdHMpOworICAgIHZpcnR1
YWwgZmxvYXQgdXNlclNwYWNlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9CisgICAg
dmlydHVhbCB2b2lkIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxXVEY6OlN0cmluZz4mKTsKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZEVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZygpOworICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkTGVhdmVBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKCk7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2Fk
Rm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVwcmVzZW50YXRpb24pOworICAgIHZpcnR1YWwg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsK
KyAgICB2aXJ0dWFsIGRvdWJsZSBjdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSk7
CisKKyAgICBHdGtXaWRnZXQqIG1fdmlldzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gUGFnZUNsaWVudEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmRmOGI5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTAsMCArMSw2
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3QmFzZS5oIgorCisjaW5jbHVkZSAiR093blB0ckd0ay5oIgorI2luY2x1ZGUgIkd0a1Zl
cnNpb25pbmcuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgorI2luY2x1
ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgIldl
YkV2ZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVz
LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0NvbnRleHQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZUVkaXRvckluaXQoV2ViS2l0V2ViVmlld0Jhc2UqKTsKKworR19ERUZJTkVfQUJTVFJB
Q1RfVFlQRShXZWJLaXRXZWJWaWV3QmFzZSwgd2Via2l0X3dlYl92aWV3X2Jhc2UsIEdUS19UWVBF
X0NPTlRBSU5FUikKKworc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgeworICAgIE93
blB0cjxQYWdlQ2xpZW50SW1wbD4gcGFnZUNsaWVudDsKKyAgICBSZWZQdHI8V2ViUGFnZVByb3h5
PiBwYWdlOworICAgIGdib29sZWFuIGlzUGFnZUFjdGl2ZTsKKworICAgIEd0a0lNQ29udGV4dCog
aW1Db250ZXh0OworICAgIGdpbnQgY3VycmVudENsaWNrQ291bnQ7CisgICAgSW50UG9pbnQgcHJl
dmlvdXNDbGlja1BvaW50OworICAgIGd1aW50IHByZXZpb3VzQ2xpY2tCdXR0b247CisgICAgZ3Vp
bnQzMiBwcmV2aW91c0NsaWNrVGltZTsKKworICAgIC8vIEVkaXRvcgorICAgIEdSZWZQdHI8R3Rr
V2lkZ2V0PiBlZGl0b3JXaWRnZXQ7CisgICAgVmVjdG9yPFdURjo6U3RyaW5nPiBwZW5kaW5nRWRp
dG9yQ29tbWFuZHM7Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemUo
R3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgZ3RrX3dpZGdldF9zZXRfcmVhbGl6ZWQod2lkZ2V0
LCBUUlVFKTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0
X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRpb24pOworCisgICAgR2RrV2luZG93QXR0
ciBhdHRyaWJ1dGVzOworICAgIGF0dHJpYnV0ZXMud2luZG93X3R5cGUgPSBHREtfV0lORE9XX0NI
SUxEOworICAgIGF0dHJpYnV0ZXMueCA9IGFsbG9jYXRpb24ueDsKKyAgICBhdHRyaWJ1dGVzLnkg
PSBhbGxvY2F0aW9uLnk7CisgICAgYXR0cmlidXRlcy53aWR0aCA9IGFsbG9jYXRpb24ud2lkdGg7
CisgICAgYXR0cmlidXRlcy5oZWlnaHQgPSBhbGxvY2F0aW9uLmhlaWdodDsKKyAgICBhdHRyaWJ1
dGVzLndjbGFzcyA9IEdES19JTlBVVF9PVVRQVVQ7CisgICAgYXR0cmlidXRlcy52aXN1YWwgPSBn
dGtfd2lkZ2V0X2dldF92aXN1YWwod2lkZ2V0KTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgor
ICAgIGF0dHJpYnV0ZXMuY29sb3JtYXAgPSBndGtfd2lkZ2V0X2dldF9jb2xvcm1hcCh3aWRnZXQp
OworI2VuZGlmCisgICAgYXR0cmlidXRlcy5ldmVudF9tYXNrID0gR0RLX1ZJU0lCSUxJVFlfTk9U
SUZZX01BU0sKKyAgICAgICAgfCBHREtfRVhQT1NVUkVfTUFTSworICAgICAgICB8IEdES19CVVRU
T05fUFJFU1NfTUFTSworICAgICAgICB8IEdES19CVVRUT05fUkVMRUFTRV9NQVNLCisgICAgICAg
IHwgR0RLX1BPSU5URVJfTU9USU9OX01BU0sKKyAgICAgICAgfCBHREtfS0VZX1BSRVNTX01BU0sK
KyAgICAgICAgfCBHREtfS0VZX1JFTEVBU0VfTUFTSworICAgICAgICB8IEdES19CVVRUT05fTU9U
SU9OX01BU0sKKyAgICAgICAgfCBHREtfQlVUVE9OMV9NT1RJT05fTUFTSworICAgICAgICB8IEdE
S19CVVRUT04yX01PVElPTl9NQVNLCisgICAgICAgIHwgR0RLX0JVVFRPTjNfTU9USU9OX01BU0s7
CisKKyAgICBnaW50IGF0dHJpYnV0ZXNNYXNrID0gR0RLX1dBX1ggfCBHREtfV0FfWSB8IEdES19X
QV9WSVNVQUw7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBhdHRyaWJ1dGVzTWFzayB8
PSBHREtfV0FfQ09MT1JNQVA7CisjZW5kaWYKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGdka193
aW5kb3dfbmV3KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cod2lkZ2V0KSwgJmF0dHJpYnV0
ZXMsIGF0dHJpYnV0ZXNNYXNrKTsKKyAgICBndGtfd2lkZ2V0X3NldF93aW5kb3cod2lkZ2V0LCB3
aW5kb3cpOworICAgIGdka193aW5kb3dfc2V0X3VzZXJfZGF0YSh3aW5kb3csIHdpZGdldCk7CisK
KyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDIwLCAw
KQorICAgIGd0a193aWRnZXRfc3R5bGVfYXR0YWNoKHdpZGdldCk7CisjZWxzZQorICAgIHdpZGdl
dC0+c3R5bGUgPSBndGtfc3R5bGVfYXR0YWNoKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCks
IHdpbmRvdyk7CisjZW5kaWYKKyAgICBndGtfc3R5bGVfc2V0X2JhY2tncm91bmQoZ3RrX3dpZGdl
dF9nZXRfc3R5bGUod2lkZ2V0KSwgd2luZG93LCBHVEtfU1RBVEVfTk9STUFMKTsKKyNlbHNlCisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2JhY2tncm91bmQoZ3RrX3dpZGdldF9nZXRfc3R5bGVf
Y29udGV4dCh3aWRnZXQpLCB3aW5kb3cpOworI2VuZGlmCisKKyAgICBXZWJLaXRXZWJWaWV3QmFz
ZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdlYktp
dFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworICAgIGd0a19p
bV9jb250ZXh0X3NldF9jbGllbnRfd2luZG93KHByaXYtPmltQ29udGV4dCwgd2luZG93KTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDb250YWluZXJBZGQoR3RrQ29udGFpbmVy
KiBjb250YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIGd0a193aWRnZXRfc2V0X3Bh
cmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlRmluYWxpemUoR09iamVjdCogZ09iamVjdCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRShnT2JqZWN0KTsK
KyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsK
KworICAgIGlmIChwcml2LT5pbUNvbnRleHQpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJp
di0+aW1Db250ZXh0KTsKKyAgICAgICAgcHJpdi0+aW1Db250ZXh0ID0gMDsKKyAgICB9CisKKyAg
ICBkZWxldGUgcHJpdjsKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdiA9IDA7CisKKyAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShnT2Jq
ZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfaW5pdChXZWJLaXRX
ZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
KiBwcml2ID0gbmV3IFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSgpOworICAgIHdlYlZpZXdCYXNl
LT5wcml2ID0gcHJpdjsKKworICAgIHByaXYtPmN1cnJlbnRDbGlja0NvdW50ID0gMDsKKyAgICBw
cml2LT5wcmV2aW91c0NsaWNrQnV0dG9uID0gMDsKKyAgICBwcml2LT5wcmV2aW91c0NsaWNrVGlt
ZSA9IDA7CisKKyAgICBndGtfd2lkZ2V0X3NldF9jYW5fZm9jdXMoR1RLX1dJREdFVCh3ZWJWaWV3
QmFzZSksIFRSVUUpOworICAgIHByaXYtPmltQ29udGV4dCA9IGd0a19pbV9tdWx0aWNvbnRleHRf
bmV3KCk7CisgICAgcHJpdi0+cGFnZUNsaWVudCA9IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGUoR1RL
X1dJREdFVCh3ZWJWaWV3QmFzZSkpOworCisgICAgd2Via2l0V2ViVmlld0Jhc2VFZGl0b3JJbml0
KHdlYlZpZXdCYXNlKTsKK30KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0V2ViVmlld0Jhc2VFeHBvc2UoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
RXhwb3NlKiBldmVudCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBX
RUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsK
KyAgICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5yZWdpb24sICZjbGlwUmVjdCk7CisK
KyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOwor
ICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGdka19jYWlyb19jcmVhdGUod2luZG93
KSk7CisKKyAgICBwcml2LT5wYWdlLT5kcmF3aW5nQXJlYSgpLT5wYWludChjbGlwUmVjdCwgY3Ip
OworCisgICAgcmV0dXJuIEZBTFNFOworfQorI2Vsc2UKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRX
ZWJWaWV3QmFzZURyYXcoR3RrV2lkZ2V0KiB3aWRnZXQsIGNhaXJvX3QqIGNyKQoreworICAgIFdl
YktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdl
dCk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnBy
aXY7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworCisgICAgaWYgKCFnZGtfY2Fpcm9fZ2V0
X2NsaXBfcmVjdGFuZ2xlKGNyLCAmY2xpcFJlY3QpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisK
KyAgICBwcml2LT5wYWdlLT5kcmF3aW5nQXJlYSgpLT5wYWludChjbGlwUmVjdCwgY3IpOworCisg
ICAgcmV0dXJuIEZBTFNFOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdC
YXNlU2l6ZUFsbG9jYXRlKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0
aW9uKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJf
VklFV19CQVNFKHdpZGdldCk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0g
d2ViVmlld0Jhc2UtPnByaXY7CisKKyAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmll
d19iYXNlX3BhcmVudF9jbGFzcyktPnNpemVfYWxsb2NhdGUod2lkZ2V0LCBhbGxvY2F0aW9uKTsK
KyAgICBwcml2LT5wYWdlLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKEludFNpemUoYWxsb2NhdGlv
bi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCksIEludFNpemUoKSk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUZvY3VzSW5FdmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRGb2N1cyogZXZlbnQpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdC
YXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBXZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKworICAgIEd0a1dpZGdldCogdG9w
bGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCh3aWRnZXQpOworICAgIGlmIChndGtfd2lk
Z2V0X2lzX3RvcGxldmVsKHRvcGxldmVsKSAmJiBndGtfd2luZG93X2hhc190b3BsZXZlbF9mb2N1
cyhHVEtfV0lORE9XKHRvcGxldmVsKSkpIHsKKyAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNf
aW4ocHJpdi0+aW1Db250ZXh0KTsKKyAgICAgICAgaWYgKCFwcml2LT5pc1BhZ2VBY3RpdmUpIHsK
KyAgICAgICAgICAgIHByaXYtPmlzUGFnZUFjdGl2ZSA9IFRSVUU7CisgICAgICAgICAgICBwcml2
LT5wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3Rp
dmUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Vi
a2l0X3dlYl92aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+Zm9jdXNfaW5fZXZlbnQod2lkZ2V0LCBl
dmVudCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUZvY3VzT3V0RXZl
bnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMqIGV2ZW50KQoreworICAgIFdlYktp
dFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7
CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7
CisKKyAgICBwcml2LT5pc1BhZ2VBY3RpdmUgPSBGQUxTRTsKKyAgICBwcml2LT5wYWdlLT52aWV3
U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOworICAgIGlm
IChwcml2LT5pbUNvbnRleHQpCisgICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX291dChwcml2
LT5pbUNvbnRleHQpOworCisgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92
aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+Zm9jdXNfb3V0X2V2ZW50KHdpZGdldCwgZXZlbnQpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VLZXlQcmVzc0V2ZW50KEd0a1dp
ZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBXZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKworICAgIHBy
aXYtPnBhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChyZWlu
dGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKSk7CisKKyAgICByZXR1cm4gR1RLX1dJREdF
VF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5rZXlfcHJlc3NfZXZl
bnQod2lkZ2V0LCBldmVudCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFz
ZUtleVJlbGVhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50KQor
eworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19C
QVNFKHdpZGdldCk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmll
d0Jhc2UtPnByaXY7CisKKyAgICBpZiAoZ3RrX2ltX2NvbnRleHRfZmlsdGVyX2tleXByZXNzKHBy
aXYtPmltQ29udGV4dCwgZXZlbnQpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIHByaXYt
PnBhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVy
cHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKSk7CisKKyAgICByZXR1cm4gR1RLX1dJREdFVF9D
TEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5rZXlfcmVsZWFzZV9ldmVu
dCh3aWRnZXQsIGV2ZW50KTsKK30KKworLy8gQ29waWVkIGZyb20gd2Via2l0d2Vidmlldy5jcHAK
K3N0YXRpYyBndWludDMyIGdldEV2ZW50VGltZShHZGtFdmVudCogZXZlbnQpCit7CisgICAgZ3Vp
bnQzMiB0aW1lID0gZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KTsKKyAgICBpZiAodGltZSkKKyAg
ICAgICAgcmV0dXJuIHRpbWU7CisKKyAgICAvLyBSZWFsIGV2ZW50cyBhbHdheXMgaGF2ZSBhIG5v
bi16ZXJvIHRpbWUsIGJ1dCBldmVudHMgc3ludGhlc2l6ZWQKKyAgICAvLyBieSB0aGUgRFJUIGRv
IG5vdCBhbmQgd2UgbXVzdCBjYWxjdWxhdGUgYSB0aW1lIG1hbnVhbGx5LiBUaGlzIHRpbWUKKyAg
ICAvLyBpcyBub3QgY2FsY3VsYXRlZCBpbiB0aGUgRFJULCBiZWNhdXNlIEdUSysgZG9lcyBub3Qg
d29yayB3ZWxsIHdpdGgKKyAgICAvLyBhbnl0aGluZyBvdGhlciB0aGFuIEdES19DVVJSRU5UX1RJ
TUUgb24gc3ludGhlc2l6ZWQgZXZlbnRzLgorICAgIEdUaW1lVmFsIHRpbWVWYWx1ZTsKKyAgICBn
X2dldF9jdXJyZW50X3RpbWUoJnRpbWVWYWx1ZSk7CisgICAgcmV0dXJuICh0aW1lVmFsdWUudHZf
c2VjICogMTAwMCkgKyAodGltZVZhbHVlLnR2X3VzZWMgLyAxMDAwKTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrRXZlbnRCdXR0b24qIGJ1dHRvbkV2ZW50KQoreworICAgIGlmIChidXR0b25FdmVudC0+
YnV0dG9uID09IDMpIHsKKyAgICAgICAgLy8gRklYTUU6IFtHVEtdIEFkZCBjb250ZXh0IG1lbnUg
c3VwcG9ydCBmb3IgV2Via2l0Mi4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU0ODI3CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAg
IHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMod2lkZ2V0
KTsKKworICAgIC8vIEZvciBkb3VibGUgYW5kIHRyaXBsZSBjbGlja3MgR0RLIHNlbmRzIGJvdGgg
YSBub3JtYWwgYnV0dG9uIHByZXNzIGV2ZW50CisgICAgLy8gYW5kIGEgc3BlY2lmaWMgdHlwZSAo
bGlrZSBHREtfMkJVVFRPTl9QUkVTUykuIElmIHdlIGRldGVjdCBhIHNwZWNpYWwgcHJlc3MKKyAg
ICAvLyBjb21pbmcgdXAsIGlnbm9yZSB0aGlzIGV2ZW50IGFzIGl0IGNlcnRhaW5seSBnZW5lcmF0
ZWQgdGhlIGRvdWJsZSBvciB0cmlwbGUKKyAgICAvLyBjbGljay4gVGhlIGNvbnNlcXVlbmNlIG9m
IG5vdCBlYXRpbmcgdGhpcyBldmVudCBpcyB0d28gRE9NIGJ1dHRvbiBwcmVzcyBldmVudHMKKyAg
ICAvLyBhcmUgZ2VuZXJhdGVkLgorICAgIEdPd25QdHI8R2RrRXZlbnQ+IG5leHRFdmVudChnZGtf
ZXZlbnRfcGVlaygpKTsKKyAgICBpZiAobmV4dEV2ZW50ICYmIChuZXh0RXZlbnQtPmFueS50eXBl
ID09IEdES18yQlVUVE9OX1BSRVNTIHx8IG5leHRFdmVudC0+YW55LnR5cGUgPT0gR0RLXzNCVVRU
T05fUFJFU1MpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIGdpbnQgZG91YmxlQ2xpY2tE
aXN0YW5jZSA9IDI1MDsKKyAgICBnaW50IGRvdWJsZUNsaWNrVGltZSA9IDU7CisgICAgR3RrU2V0
dGluZ3MqIHNldHRpbmdzID0gZ3RrX3NldHRpbmdzX2dldF9mb3Jfc2NyZWVuKGd0a193aWRnZXRf
Z2V0X3NjcmVlbih3aWRnZXQpKTsKKyAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsCisgICAgICAg
ICAgICAgICAgICJndGstZG91YmxlLWNsaWNrLWRpc3RhbmNlIiwgJmRvdWJsZUNsaWNrRGlzdGFu
Y2UsCisgICAgICAgICAgICAgICAgICJndGstZG91YmxlLWNsaWNrLXRpbWUiLCAmZG91YmxlQ2xp
Y2tUaW1lLCBOVUxMKTsKKworICAgIC8vIEdUSysgb25seSBjb3VudHMgdXAgdG8gdHJpcGxlIGNs
aWNrcywgYnV0IFdlYkNvcmUgd2FudHMgdG8ga25vdyBhYm91dAorICAgIC8vIHF1YWRydXBsZSBj
bGlja3MsIHF1aW50dXBsZSBjbGlja3MsIGFkIGluZmluaXR1bS4gSGVyZSwgd2UgcmVwbGljYXRl
IHRoZQorICAgIC8vIEdESyBsb2dpYyBmb3IgY291bnRpbmcgY2xpY2tzLgorICAgIEdka0V2ZW50
KiBldmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oYnV0dG9uRXZlbnQpKTsKKyAgICBn
dWludDMyIGV2ZW50VGltZSA9IGdldEV2ZW50VGltZShldmVudCk7CisgICAgV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBp
ZiAoKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTIHx8IGV2ZW50LT50eXBlID09IEdE
S18zQlVUVE9OX1BSRVNTKQorICAgICAgICB8fCAoKGFicyhidXR0b25FdmVudC0+eCAtIHByaXYt
PnByZXZpb3VzQ2xpY2tQb2ludC54KCkpIDwgZG91YmxlQ2xpY2tEaXN0YW5jZSkKKyAgICAgICAg
ICAgICYmIChhYnMoYnV0dG9uRXZlbnQtPnkgLSBwcml2LT5wcmV2aW91c0NsaWNrUG9pbnQueSgp
KSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCisgICAgICAgICAgICAmJiAoZXZlbnRUaW1lIC0gcHJp
di0+cHJldmlvdXNDbGlja1RpbWUgPCBzdGF0aWNfY2FzdDxndWludD4oZG91YmxlQ2xpY2tUaW1l
KSkKKyAgICAgICAgICAgICYmIChidXR0b25FdmVudC0+YnV0dG9uID09IHByaXYtPnByZXZpb3Vz
Q2xpY2tCdXR0b24pKSkKKyAgICAgICAgcHJpdi0+Y3VycmVudENsaWNrQ291bnQrKzsKKyAgICBl
bHNlCisgICAgICAgIHByaXYtPmN1cnJlbnRDbGlja0NvdW50ID0gMTsKKworICAgIHByaXYtPnBh
Z2UtPmhhbmRsZU1vdXNlRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50
KGV2ZW50LCBwcml2LT5jdXJyZW50Q2xpY2tDb3VudCkpOworCisgICAgZ2RvdWJsZSB4LCB5Owor
ICAgIGdka19ldmVudF9nZXRfY29vcmRzKGV2ZW50LCAmeCwgJnkpOworICAgIHByaXYtPnByZXZp
b3VzQ2xpY2tQb2ludCA9IEludFBvaW50KHgsIHkpOworICAgIHByaXYtPnByZXZpb3VzQ2xpY2tC
dXR0b24gPSBidXR0b25FdmVudC0+YnV0dG9uOworICAgIHByaXYtPnByZXZpb3VzQ2xpY2tUaW1l
ID0gZXZlbnRUaW1lOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0V2ViVmlld0Jhc2VCdXR0b25SZWxlYXNlRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0V2ZW50QnV0dG9uKiBldmVudCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jh
c2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworCisgICAgZ3RrX3dpZGdldF9ncmFi
X2ZvY3VzKHdpZGdldCk7CisgICAgcHJpdi0+cGFnZS0+aGFuZGxlTW91c2VFdmVudChXZWJFdmVu
dEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+
KGV2ZW50KSwgMCAvKiBjdXJyZW50Q2xpY2tDb3VudCAqLykpOworCisgICAgcmV0dXJuIEZBTFNF
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VTY3JvbGxFdmVudChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQoreworICAgIFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CisgICAg
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisKKyAg
ICBwcml2LT5wYWdlLT5oYW5kbGVXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2Vi
V2hlZWxFdmVudChldmVudCkpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0V2ViVmlld0Jhc2VNb3Rpb25Ob3RpZnlFdmVudChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrRXZlbnRNb3Rpb24qIGV2ZW50KQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJW
aWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CisgICAgV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisKKyAgICBwcml2LT5wYWdl
LT5oYW5kbGVNb3VzZUV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChy
ZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAwIC8qIGN1cnJlbnRDbGlja0NvdW50
ICovKSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
dmlld19iYXNlX2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyogd2ViVmlld0Jhc2VD
bGFzcykKK3sKKyAgICBHdGtXaWRnZXRDbGFzcyogd2lkZ2V0Q2xhc3MgPSBHVEtfV0lER0VUX0NM
QVNTKHdlYlZpZXdCYXNlQ2xhc3MpOworICAgIHdpZGdldENsYXNzLT5yZWFsaXplID0gd2Via2l0
V2ViVmlld0Jhc2VSZWFsaXplOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgd2lkZ2V0
Q2xhc3MtPmV4cG9zZV9ldmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlRXhwb3NlOworI2Vsc2UKKyAg
ICB3aWRnZXRDbGFzcy0+ZHJhdyA9IHdlYmtpdFdlYlZpZXdCYXNlRHJhdzsKKyNlbmRpZgorICAg
IHdpZGdldENsYXNzLT5zaXplX2FsbG9jYXRlID0gd2Via2l0V2ViVmlld0Jhc2VTaXplQWxsb2Nh
dGU7CisgICAgd2lkZ2V0Q2xhc3MtPmZvY3VzX2luX2V2ZW50ID0gd2Via2l0V2ViVmlld0Jhc2VG
b2N1c0luRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmZvY3VzX291dF9ldmVudCA9IHdlYmtpdFdl
YlZpZXdCYXNlRm9jdXNPdXRFdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+a2V5X3ByZXNzX2V2ZW50
ID0gd2Via2l0V2ViVmlld0Jhc2VLZXlQcmVzc0V2ZW50OworICAgIHdpZGdldENsYXNzLT5rZXlf
cmVsZWFzZV9ldmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlS2V5UmVsZWFzZUV2ZW50OworICAgIHdp
ZGdldENsYXNzLT5idXR0b25fcHJlc3NfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblBy
ZXNzRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9yZWxlYXNlX2V2ZW50ID0gd2Via2l0
V2ViVmlld0Jhc2VCdXR0b25SZWxlYXNlRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPnNjcm9sbF9l
dmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPm1v
dGlvbl9ub3RpZnlfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZU1vdGlvbk5vdGlmeUV2ZW50Owor
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJWaWV3
QmFzZUNsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0V2ViVmlld0Jh
c2VGaW5hbGl6ZTsKKworICAgIEd0a0NvbnRhaW5lckNsYXNzKiBjb250YWluZXJDbGFzcyA9IEdU
S19DT05UQUlORVJfQ0xBU1Mod2ViVmlld0Jhc2VDbGFzcyk7CisgICAgY29udGFpbmVyQ2xhc3Mt
PmFkZCA9IHdlYmtpdFdlYlZpZXdCYXNlQ29udGFpbmVyQWRkOworfQorCisvLyBFZGl0b3IKKy8v
IEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCB0byBhbm90aGVyIGZpbGUKK3R5
cGVkZWYgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPiBJbnRDb25zdENoYXJIYXNoTWFwOworCitz
dGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKFdlYktp
dFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgY29uc3QgY2hhciAqY29tbWFuZCkKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBw
cml2LT5wZW5kaW5nRWRpdG9yQ29tbWFuZHMuYXBwZW5kKFdURjo6U3RyaW5nKGNvbW1hbmQpKTsK
K30KK3N0YXRpYyB2b2lkIGJhY2tzcGFjZUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBXZWJL
aXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lv
bl9ieV9uYW1lKHdpZGdldCwgImJhY2tzcGFjZSIpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRk
UGVuZGluZ0VkaXRvckNvbW1hbmQod2ViVmlld0Jhc2UsICJEZWxldGVCYWNrd2FyZCIpOworfQor
CitzdGF0aWMgdm9pZCBzZWxlY3RBbGxDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgZ2Jvb2xl
YW4gc2VsZWN0LCBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCit7CisgICAgZ19zaWdu
YWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInNlbGVjdC1hbGwiKTsKKyAgICB3ZWJr
aXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHdlYlZpZXdCYXNlLCBzZWxlY3Qg
PyAiU2VsZWN0QWxsIiA6ICJVbnNlbGVjdCIpOworfQorCitzdGF0aWMgdm9pZCBjdXRDbGlwYm9h
cmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdC
YXNlKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJjdXQt
Y2xpcGJvYXJkIik7CisgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRpdG9yQ29tbWFu
ZCh3ZWJWaWV3QmFzZSwgIkN1dCIpOworfQorCitzdGF0aWMgdm9pZCBjb3B5Q2xpcGJvYXJkQ2Fs
bGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkK
K3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiY29weS1jbGlw
Ym9hcmQiKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHdl
YlZpZXdCYXNlLCAiQ29weSIpOworfQorCitzdGF0aWMgdm9pZCBwYXN0ZUNsaXBib2FyZENhbGxi
YWNrKEd0a1dpZGdldCogd2lkZ2V0LCBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCit7
CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInBhc3RlLWNsaXBi
b2FyZCIpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkUGVuZGluZ0VkaXRvckNvbW1hbmQod2Vi
Vmlld0Jhc2UsICJQYXN0ZSIpOworfQorCitzdGF0aWMgdm9pZCB0b2dnbGVPdmVyd3JpdGVDYWxs
YmFjayhHdGtXaWRnZXQqIHdpZGdldCwgV2ViS2l0V2ViVmlld0Jhc2UqKQoreworICAgIC8vIFdl
IGRvbid0IHN1cHBvcnQgdG9nZ2xpbmcgdGhlIG92ZXJ3cml0ZSBtb2RlLCBidXQgdGhlIGRlZmF1
bHQgY2FsbGJhY2sgZXhwZWN0cworICAgIC8vIHRoZSBHdGtUZXh0VmlldyB0byBoYXZlIGEgbGF5
b3V0LCBzbyB3ZSBoYW5kbGUgdGhpcyBzaWduYWwganVzdCB0byBzdG9wIGl0LgorICAgIGdfc2ln
bmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJ0b2dnbGUtb3ZlcndyaXRlIik7Cit9
CisKKy8vIEdUSysgd2lsbCBzdGlsbCBzZW5kIHRoZXNlIHNpZ25hbHMgdG8gdGhlIHdlYiB2aWV3
LiBTbyB3ZSBjYW4gc2FmZWx5IHN0b3Agc2lnbmFsCisvLyBlbWlzc2lvbiB3aXRob3V0IGJyZWFr
aW5nIGFjY2Vzc2liaWxpdHkuCitzdGF0aWMgdm9pZCBwb3B1cE1lbnVDYWxsYmFjayhHdGtXaWRn
ZXQqIHdpZGdldCwgV2ViS2l0V2ViVmlld0Jhc2UqKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1p
c3Npb25fYnlfbmFtZSh3aWRnZXQsICJwb3B1cC1tZW51Iik7Cit9CisKK3N0YXRpYyB2b2lkIHNo
b3dIZWxwQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIFdlYktpdFdlYlZpZXdCYXNlKikKK3sK
KyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAic2hvdy1oZWxwIik7
Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBndGtEZWxldGVDb21tYW5kc1tdWzJdID0g
eworICAgIHsgIkRlbGV0ZUJhY2t3YXJkIiwgICAgICAgICAgICAgICAiRGVsZXRlRm9yd2FyZCIg
ICAgICAgICAgICAgICAgICAgICAgICB9LCAvLyBDaGFyYWN0ZXJzCisgICAgeyAiRGVsZXRlV29y
ZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIgICAgICAgICAgICAgICAg
ICAgIH0sIC8vIFdvcmQgZW5kcworICAgIHsgIkRlbGV0ZVdvcmRCYWNrd2FyZCIsICAgICAgICAg
ICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICB9LCAvLyBXb3JkcworICAg
IHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAg
ICAgICAgICAgICAgICAgICB9LCAvLyBMaW5lcworICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZM
aW5lIiwgICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICB9LCAvLyBM
aW5lIGVuZHMKKyAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgIkRlbGV0ZVRv
RW5kT2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBoIGVuZHMKKyAgICB7
ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgIkRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgi
ICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBocworICAgIHsgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8v
IFdoaXRlc3BhY2UgKE0tXCBpbiBFbWFjcykKK307CisKK3N0YXRpYyB2b2lkIGRlbGV0ZUZyb21D
dXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrRGVsZXRlVHlwZSBkZWxldGVUeXBl
LCBnaW50IGNvdW50LCBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCit7CisgICAgZ19z
aWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImRlbGV0ZS1mcm9tLWN1cnNvciIp
OworICAgIGludCBkaXJlY3Rpb24gPSBjb3VudCA+IDAgPyAxIDogMDsKKworICAgIC8vIEVuc3Vy
aW5nIHRoYXQgZGVsZXRlVHlwZSA8PSBHX05fRUxFTUVOVFMgaGVyZSByZXN1bHRzIGluIGEgY29t
cGlsZXIgd2FybmluZworICAgIC8vIHRoYXQgdGhlIGNvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZS4K
KworICAgIGlmIChkZWxldGVUeXBlID09IEdUS19ERUxFVEVfV09SRFMpIHsKKyAgICAgICAgaWYg
KCFkaXJlY3Rpb24pIHsKKyAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkUGVuZGluZ0Vk
aXRvckNvbW1hbmQod2ViVmlld0Jhc2UsICJNb3ZlV29yZEZvcndhcmQiKTsKKyAgICAgICAgICAg
IHdlYmtpdFdlYlZpZXdCYXNlQWRkUGVuZGluZ0VkaXRvckNvbW1hbmQod2ViVmlld0Jhc2UsICJN
b3ZlV29yZEJhY2t3YXJkIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3ZWJraXRX
ZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHdlYlZpZXdCYXNlLCAiTW92ZVdvcmRC
YWNrd2FyZCIpOworICAgICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRpdG9y
Q29tbWFuZCh3ZWJWaWV3QmFzZSwgIk1vdmVXb3JkRm9yd2FyZCIpOworICAgICAgICB9CisgICAg
fSBlbHNlIGlmIChkZWxldGVUeXBlID09IEdUS19ERUxFVEVfRElTUExBWV9MSU5FUykgeworICAg
ICAgICBpZiAoIWRpcmVjdGlvbikKKyAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkUGVu
ZGluZ0VkaXRvckNvbW1hbmQod2ViVmlld0Jhc2UsICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmUiKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRp
dG9yQ29tbWFuZCh3ZWJWaWV3QmFzZSwgIk1vdmVUb0VuZE9mTGluZSIpOworICAgIH0gZWxzZSBp
ZiAoZGVsZXRlVHlwZSA9PSBHVEtfREVMRVRFX1BBUkFHUkFQSFMpIHsKKyAgICAgICAgaWYgKCFk
aXJlY3Rpb24pCisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JD
b21tYW5kKHdlYlZpZXdCYXNlLCAiTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgiKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRpdG9yQ29t
bWFuZCh3ZWJWaWV3QmFzZSwgIk1vdmVUb0VuZE9mUGFyYWdyYXBoIik7CisgICAgfQorCisgICAg
Y29uc3QgY2hhciogcmF3Q29tbWFuZCA9IGd0a0RlbGV0ZUNvbW1hbmRzW2RlbGV0ZVR5cGVdW2Rp
cmVjdGlvbl07CisgICAgaWYgKCFyYXdDb21tYW5kKQorICAgICAgcmV0dXJuOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBhYnMoY291bnQpOyBpKyspCisgICAgICAgIHdlYmtpdFdlYlZpZXdC
YXNlQWRkUGVuZGluZ0VkaXRvckNvbW1hbmQod2ViVmlld0Jhc2UsIHJhd0NvbW1hbmQpOworfQor
CitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZ3RrTW92ZUNvbW1hbmRzW11bNF0gPSB7CisgICAg
eyAiTW92ZUJhY2t3YXJkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3Zl
Rm9yd2FyZCIsCisgICAgICAiTW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAg
ICAgICAgICAgICJNb3ZlRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwg
Ly8gRm9yd2FyZC9iYWNrd2FyZCBncmFwaGVtZQorICAgIHsgIk1vdmVMZWZ0IiwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiwKKyAgICAgICJNb3ZlQmFj
a3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5k
TW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICB9LCAvLyBMZWZ0L3JpZ2h0IGdyYXBoZW1lCisg
ICAgeyAiTW92ZVdvcmRCYWNrd2FyZCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJN
b3ZlV29yZEZvcndhcmQiLAorICAgICAgIk1vdmVXb3JkQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rp
b24iLCAgICAgICAgICAgICAiTW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAg
ICAgIH0sIC8vIEZvcndhcmQvYmFja3dhcmQgd29yZAorICAgIHsgIk1vdmVVcCIsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZURvd24iLAorICAgICAgIk1vdmVV
cEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAgICAgICAiTW92ZURvd25BbmRN
b2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgIH0sIC8vIFVwL2Rvd24gbGluZQorICAgIHsg
Ik1vdmVUb0JlZ2lubmluZ09mTGluZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRv
RW5kT2ZMaW5lIiwKKyAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rp
b24iLCAgICAgICAgIk1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICB9
LCAvLyBVcC9kb3duIGxpbmUgZW5kcworICAgIHsgIk1vdmVQYXJhZ3JhcGhGb3J3YXJkIiwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVBhcmFncmFwaEJhY2t3YXJkIiwKKyAgICAgICJN
b3ZlUGFyYWdyYXBoRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgIk1vdmVQYXJh
Z3JhcGhCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgICB9LCAvLyBVcC9kb3duIHBhcmFncmFw
aHMKKyAgICB7ICJNb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCIsICAgICAgICAgICAgICAgICAg
ICAgIk1vdmVUb0VuZE9mUGFyYWdyYXBoIiwKKyAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZlBhcmFn
cmFwaEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgIk1vdmVUb0VuZE9mUGFyYWdyYXBoQW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICB9LCAvLyBVcC9kb3duIHBhcmFncmFwaCBlbmRzLgorICAgIHsgIk1vdmVQ
YWdlVXAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3du
IiwKKyAgICAgICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAg
ICAgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICB9LCAvLyBVcC9k
b3duIHBhZ2UKKyAgICB7ICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IiwgICAgICAgICAgICAg
ICAgICAgICAgIk1vdmVUb0VuZE9mRG9jdW1lbnQiLAorICAgICAgIk1vdmVUb0JlZ2lubmluZ09m
RG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudEFuZE1v
ZGlmeVNlbGVjdGlvbiIgICAgIH0sIC8vIEJlZ2luL2VuZCBvZiBidWZmZXIKKyAgICB7IDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8vIEhvcml6b250YWwgcGFnZSBt
b3ZlbWVudAorfTsKKworc3RhdGljIHZvaWQgbW92ZUN1cnNvckNhbGxiYWNrKEd0a1dpZGdldCog
d2lkZ2V0LCBHdGtNb3ZlbWVudFN0ZXAgc3RlcCwgZ2ludCBjb3VudCwgZ2Jvb2xlYW4gZXh0ZW5k
U2VsZWN0aW9uLCBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCit7CisgICAgZ19zaWdu
YWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgIm1vdmUtY3Vyc29yIik7CisgICAgaW50
IGRpcmVjdGlvbiA9IGNvdW50ID4gMCA/IDEgOiAwOworICAgIGlmIChleHRlbmRTZWxlY3Rpb24p
CisgICAgICAgIGRpcmVjdGlvbiArPSAyOworCisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdGVwKSA+PSBHX05fRUxFTUVOVFMoZ3RrTW92ZUNvbW1hbmRzKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29uc3QgY2hhciogcmF3Q29tbWFuZCA9IGd0a01vdmVDb21tYW5kc1tzdGVwXVtk
aXJlY3Rpb25dOworICAgIGlmICghcmF3Q29tbWFuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoY291bnQpOyBpKyspCisgICAgICAgIHdlYmtpdFdlYlZp
ZXdCYXNlQWRkUGVuZGluZ0VkaXRvckNvbW1hbmQod2ViVmlld0Jhc2UsIHJhd0NvbW1hbmQpOwor
fQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgQ3RybEtleSA9IDEgPDwgMDsKK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBBbHRLZXkgPSAxIDw8IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgU2hpZnRL
ZXkgPSAxIDw8IDI7CisKK3N0cnVjdCBLZXlEb3duRW50cnkgeworICAgIHVuc2lnbmVkIHZpcnR1
YWxLZXk7CisgICAgdW5zaWduZWQgbW9kaWZpZXJzOworICAgIGNvbnN0IGNoYXIqIG5hbWU7Cit9
OworCitzdHJ1Y3QgS2V5UHJlc3NFbnRyeSB7CisgICAgdW5zaWduZWQgY2hhckNvZGU7CisgICAg
dW5zaWduZWQgbW9kaWZpZXJzOworICAgIGNvbnN0IGNoYXIqIG5hbWU7Cit9OworCitzdGF0aWMg
Y29uc3QgS2V5RG93bkVudHJ5IGtleURvd25FbnRyaWVzW10gPSB7CisgICAgeyAnQicsICAgICAg
IEN0cmxLZXksICAgICAgICAgICAgIlRvZ2dsZUJvbGQiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgeyAnSScsICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIlRvZ2ds
ZUl0YWxpYyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19FU0NB
UEUsIDAsICAgICAgICAgICAgICAgICAgIkNhbmNlbCIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgeyBWS19PRU1fUEVSSU9ELCBDdHJsS2V5LCAgICAgICAgIkNh
bmNlbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19U
QUIsICAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19UQUIsICAgIFNoaWZ0S2V5LCAgICAgICAgICAg
Ikluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBW
S19SRVRVUk4sIDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19SRVRVUk4sIEN0cmxLZXksICAgICAgICAg
ICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
eyBWS19SRVRVUk4sIEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19SRVRVUk4sIEFsdEtleSB8IFNoaWZ0
S2V5LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCit9
OworCitzdGF0aWMgY29uc3QgS2V5UHJlc3NFbnRyeSBrZXlQcmVzc0VudHJpZXNbXSA9IHsKKyAg
ICB7ICdcdCcsICAgMCwgICAgICAgICAgICAgICAgICAiSW5zZXJ0VGFiIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdcdCcsICAgU2hpZnRLZXksICAgICAgICAg
ICAiSW5zZXJ0QmFja3RhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7
ICdccicsICAgMCwgICAgICAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdccicsICAgQ3RybEtleSwgICAgICAgICAgICAi
SW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdc
cicsICAgQWx0S2V5LCAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKKyAgICB7ICdccicsICAgQWx0S2V5IHwgU2hpZnRLZXksICAiSW5z
ZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKK307CisKK3N0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRWRpdG9ySW5pdChXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
Vmlld0Jhc2UpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmll
d0Jhc2UtPnByaXY7CisKKyAgICBwcml2LT5lZGl0b3JXaWRnZXQgPSBndGtfdGV4dF92aWV3X25l
dygpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+ZWRpdG9yV2lkZ2V0LmdldCgpLCAiYmFj
a3NwYWNlIiwgR19DQUxMQkFDSyhiYWNrc3BhY2VDYWxsYmFjayksIHdlYlZpZXdCYXNlKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPmVkaXRvcldpZGdldC5nZXQoKSwgImN1dC1jbGlwYm9h
cmQiLCBHX0NBTExCQUNLKGN1dENsaXBib2FyZENhbGxiYWNrKSwgd2ViVmlld0Jhc2UpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+ZWRpdG9yV2lkZ2V0LmdldCgpLCAiY29weS1jbGlwYm9h
cmQiLCBHX0NBTExCQUNLKGNvcHlDbGlwYm9hcmRDYWxsYmFjayksIHdlYlZpZXdCYXNlKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPmVkaXRvcldpZGdldC5nZXQoKSwgInBhc3RlLWNsaXBi
b2FyZCIsIEdfQ0FMTEJBQ0socGFzdGVDbGlwYm9hcmRDYWxsYmFjayksIHdlYlZpZXdCYXNlKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPmVkaXRvcldpZGdldC5nZXQoKSwgInNlbGVjdC1h
bGwiLCBHX0NBTExCQUNLKHNlbGVjdEFsbENhbGxiYWNrKSwgd2ViVmlld0Jhc2UpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QocHJpdi0+ZWRpdG9yV2lkZ2V0LmdldCgpLCAibW92ZS1jdXJzb3IiLCBH
X0NBTExCQUNLKG1vdmVDdXJzb3JDYWxsYmFjayksIHdlYlZpZXdCYXNlKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KHByaXYtPmVkaXRvcldpZGdldC5nZXQoKSwgImRlbGV0ZS1mcm9tLWN1cnNvciIs
IEdfQ0FMTEJBQ0soZGVsZXRlRnJvbUN1cnNvckNhbGxiYWNrKSwgd2ViVmlld0Jhc2UpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+ZWRpdG9yV2lkZ2V0LmdldCgpLCAidG9nZ2xlLW92ZXJ3
cml0ZSIsIEdfQ0FMTEJBQ0sodG9nZ2xlT3ZlcndyaXRlQ2FsbGJhY2spLCB3ZWJWaWV3QmFzZSk7
CisgICAgZ19zaWduYWxfY29ubmVjdChwcml2LT5lZGl0b3JXaWRnZXQuZ2V0KCksICJwb3B1cC1t
ZW51IiwgR19DQUxMQkFDSyhwb3B1cE1lbnVDYWxsYmFjayksIHdlYlZpZXdCYXNlKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0KHByaXYtPmVkaXRvcldpZGdldC5nZXQoKSwgInNob3ctaGVscCIsIEdf
Q0FMTEJBQ0soc2hvd0hlbHBDYWxsYmFjayksIHdlYlZpZXdCYXNlKTsKK30KKworLy8gUHJpdmF0
ZSBBUEkKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VHZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50
KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudCYgZXZlbnQsIFZlY3RvcjxXVEY6OlN0cmluZz4mIGNvbW1hbmRMaXN0KQoreworICAgIFdl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworCisgICAg
cHJpdi0+cGVuZGluZ0VkaXRvckNvbW1hbmRzLmNsZWFyKCk7CisKKyNpZmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgorICAgIGd0a19iaW5kaW5nc19hY3RpdmF0ZV9ldmVudChHVEtfT0JKRUNUKHByaXYt
PmVkaXRvcldpZGdldC5nZXQoKSksIGNvbnN0X2Nhc3Q8R2RrRXZlbnRLZXkqPigmZXZlbnQubmF0
aXZlRXZlbnQoKS0+a2V5KSk7CisjZWxzZQorICAgIGd0a19iaW5kaW5nc19hY3RpdmF0ZV9ldmVu
dChHX09CSkVDVChwcml2LT5lZGl0b3JXaWRnZXQuZ2V0KCkpLCBjb25zdF9jYXN0PEdka0V2ZW50
S2V5Kj4oJmV2ZW50Lm5hdGl2ZUV2ZW50KCktPmtleSkpOworI2VuZGlmCisKKyAgICBpZiAocHJp
di0+cGVuZGluZ0VkaXRvckNvbW1hbmRzLmlzRW1wdHkoKSkgeworICAgICAgICBjb21tYW5kTGlz
dC5hcHBlbmQocHJpdi0+cGVuZGluZ0VkaXRvckNvbW1hbmRzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW50Q29uc3RDaGFySGFzaE1hcCwga2V5
RG93bkNvbW1hbmRzTWFwLCAoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbnRDb25zdENo
YXJIYXNoTWFwLCBrZXlQcmVzc0NvbW1hbmRzTWFwLCAoKSk7CisKKyAgICBpZiAoa2V5RG93bkNv
bW1hbmRzTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
R19OX0VMRU1FTlRTKGtleURvd25FbnRyaWVzKTsgaSsrKQorICAgICAgICAgICAga2V5RG93bkNv
bW1hbmRzTWFwLnNldChrZXlEb3duRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlEb3du
RW50cmllc1tpXS52aXJ0dWFsS2V5LCBrZXlEb3duRW50cmllc1tpXS5uYW1lKTsKKworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGtleVByZXNzRW50cmllcyk7
IGkrKykKKyAgICAgICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAuc2V0KGtleVByZXNzRW50cmll
c1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlQcmVzc0VudHJpZXNbaV0uY2hhckNvZGUsIGtleVBy
ZXNzRW50cmllc1tpXS5uYW1lKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAw
OworICAgIGlmIChldmVudC5zaGlmdEtleSgpKQorICAgICAgICBtb2RpZmllcnMgfD0gU2hpZnRL
ZXk7CisgICAgaWYgKGV2ZW50LmFsdEtleSgpKQorICAgICAgICBtb2RpZmllcnMgfD0gQWx0S2V5
OworICAgIGlmIChldmVudC5jb250cm9sS2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBDdHJs
S2V5OworCisgICAgLy8gRm9yIGtleXByZXNzIGV2ZW50cywgd2Ugd2FudCBjaGFyQ29kZSgpLCBi
dXQga2V5Q29kZSgpIGRvZXMgdGhhdC4KKyAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2
IHwgZXZlbnQubmF0aXZlVmlydHVhbEtleUNvZGUoKTsKKyAgICBpZiAobWFwS2V5KSB7CisgICAg
ICAgIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGNvbW1hbmRNYXAgPSBldmVudC50eXBlKCkg
PT0gV2ViRXZlbnQ6OktleURvd24gPworICAgICAgICAgICAgJmtleURvd25Db21tYW5kc01hcCA6
ICZrZXlQcmVzc0NvbW1hbmRzTWFwOworICAgICAgICBpZiAoY29uc3QgY2hhciogY29tbWFuZFN0
cmluZyA9IGNvbW1hbmRNYXAtPmdldChtYXBLZXkpKQorICAgICAgICAgICAgcHJpdi0+cGVuZGlu
Z0VkaXRvckNvbW1hbmRzLmFwcGVuZChjb21tYW5kU3RyaW5nKTsKKyAgICB9CisKKyAgICBjb21t
YW5kTGlzdC5hcHBlbmQocHJpdi0+cGVuZGluZ0VkaXRvckNvbW1hbmRzKTsKK30KKwordm9pZCB3
ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdC
YXNlLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVm
KQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5w
cml2OworCisgICAgcHJpdi0+cGFnZSA9IHRvSW1wbChjb250ZXh0UmVmKS0+Y3JlYXRlV2ViUGFn
ZShwcml2LT5wYWdlQ2xpZW50LmdldCgpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSk7CisgICAgcHJp
di0+cGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKK30KKworV2ViUGFnZVByb3h5KiB3ZWJraXRX
ZWJWaWV3QmFzZUdldFBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQoreworICAg
IHJldHVybiB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZS5nZXQoKTsKK30KKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjODI5ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmgKQEAg
LTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEg
TW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJLaXRXZWJWaWV3QmFzZV9oCisj
ZGVmaW5lIFdlYktpdFdlYlZpZXdCYXNlX2gKKworI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIK
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
VFlQRV9XRUJfVklFV19CQVNFICAgICAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2dldF90
eXBlKCkpCisjZGVmaW5lIFdFQktJVF9XRUJfVklFV19CQVNFKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0Us
IFdlYktpdFdlYlZpZXdCYXNlKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0JBU0VfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
V0VCX1ZJRVdfQkFTRSwgV2ViS2l0V2ViVmlld0Jhc2VDbGFzcykpCisjZGVmaW5lIFdFQktJVF9J
U19XRUJfVklFV19CQVNFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0UpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VC
X1ZJRVdfQkFTRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0JB
U0VfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX1RZUEVfV0VCX1ZJRVdfQkFTRSwgV2ViS2l0V2ViVmlld0Jhc2VDbGFzcykpCisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZSAgICAgICAgV2ViS2l0V2ViVmlld0Jhc2U7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyAgIFdlYktpdFdlYlZpZXdCYXNl
Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIFdlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZSB7CisgICAgR3Rr
Q29udGFpbmVyIHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VDbGFz
cyB7CisgICAgR3RrQ29udGFpbmVyQ2xhc3MgcGFyZW50OworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X3dlYl92aWV3X2Jhc2VfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi43ZjNjYWVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKQEAgLTAsMCArMSwyMSBAQAor
I2lmbmRlZiBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGVfaAorCisjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgorI2lu
Y2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisj
aW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworR19CRUdJTl9ERUNMUworCit2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlR2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChXZWJLaXRXZWJWaWV3
QmFzZSosIGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0b3I8V1RGOjpTdHJpbmc+
JiBjb21tYW5kTGlzdCk7Cit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXZWJL
aXRXZWJWaWV3QmFzZSosIFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYpOworV2ViUGFnZVBy
b3h5KiB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqKTsKKworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLy8gV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdGRlZmluZXMuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdGRlZmluZXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWM2YTFjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0ZGVmaW5lcy5oCkBAIC0wLDAg
KzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtp
dGRlZmluZXNfaAorI2RlZmluZSB3ZWJraXRkZWZpbmVzX2gKKworI2luY2x1ZGUgPGdsaWIuaD4K
KworI2lmZGVmIEdfT1NfV0lOMzIKKyAgICAjaWZkZWYgQlVJTERJTkdfV0VCS0lUCisgICAgICAg
ICNkZWZpbmUgV0VCS0lUX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyAgICAjZWxzZQorICAg
ICAgICAjZGVmaW5lIFdFQktJVF9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisgICAgI2VuZGlm
CisgICAgI2RlZmluZSBXRUJLSVRfT0JTT0xFVEVfQVBJIFdFQktJVF9BUEkKKyNlbHNlCisgICAg
I2RlZmluZSBXRUJLSVRfQVBJIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkp
CisgICAgI2RlZmluZSBXRUJLSVRfT0JTT0xFVEVfQVBJIFdFQktJVF9BUEkgX19hdHRyaWJ1dGVf
XygoZGVwcmVjYXRlZCkpCisjZW5kaWYKKworI2lmbmRlZiBXRUJLSVRfQVBJCisgICAgI2RlZmlu
ZSBXRUJLSVRfQVBJCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDk0ZTQ0
MWYuLjgyOWRhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9DaHVua2Vk
VXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
aHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oCkBAIC00MSw2ICs0MSw3IEBAIE9CSkNfQ0xB
U1MgV0tWaWV3OwogY2xhc3MgUUdyYXBoaWNzV0tWaWV3OwogI2VsaWYgUExBVEZPUk0oR1RLKQog
dHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlIFdlYktpdFdlYlZpZXdCYXNlOwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewpAQCAtNTYsOCArNTcsNyBAQCB0eXBlZGVmIFdlYlZpZXcgUGxhdGZv
cm1XZWJWaWV3OwogI2VsaWYgUExBVEZPUk0oUVQpCiB0eXBlZGVmIFFHcmFwaGljc1dLVmlldyBQ
bGF0Zm9ybVdlYlZpZXc7CiAjZWxpZiBQTEFURk9STShHVEspCi1jbGFzcyBXZWJWaWV3OwotdHlw
ZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsKK3R5cGVkZWYgV2ViS2l0V2ViVmlld0Jhc2Ug
UGxhdGZvcm1XZWJWaWV3OwogI2VuZGlmCiAKIGNsYXNzIENodW5rZWRVcGRhdGVEcmF3aW5nQXJl
YVByb3h5IDogcHVibGljIERyYXdpbmdBcmVhUHJveHkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVBy
b3h5R3RrLmNwcAppbmRleCBhNWM3MDhmLi40MjM5ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5R3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJl
YVByb3h5R3RrLmNwcApAQCAtMzAsOCArMzAsOCBAQAogCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8u
aCIKICNpbmNsdWRlICJVcGRhdGVDaHVuay5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgIldlYlZp
ZXcuaCIKIAogI2luY2x1ZGUgPGdkay9nZGsuaD4KIApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogV2ViUGFnZVByb3h5KiBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94
eTo6cGFnZSgpCiB7Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+cGFnZSgpOworICAgIHJldHVybiB3
ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UobV93ZWJWaWV3KTsKIH0KIAogdm9pZCBDaHVua2VkVXBk
YXRlRHJhd2luZ0FyZWFQcm94eTo6ZW5zdXJlQmFja2luZ1N0b3JlKCkKQEAgLTQ5LDcgKzQ5LDcg
QEAgdm9pZCBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6ZW5zdXJlQmFja2luZ1N0b3Jl
KCkKICAgICBpZiAobV9iYWNraW5nU3RvcmVJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9iYWNraW5nU3RvcmVJbWFnZSA9IGdka193aW5kb3dfY3JlYXRlX3NpbWlsYXJfc3VyZmFjZShn
dGtfd2lkZ2V0X2dldF93aW5kb3cobV93ZWJWaWV3LT53aW5kb3coKSksCisgICAgbV9iYWNraW5n
U3RvcmVJbWFnZSA9IGdka193aW5kb3dfY3JlYXRlX3NpbWlsYXJfc3VyZmFjZShndGtfd2lkZ2V0
X2dldF93aW5kb3coR1RLX1dJREdFVChtX3dlYlZpZXcpKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0NPTlRFTlRfQ09M
T1JfQUxQSEEsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOwogfQogCkBAIC04Nyw3
ICs4Nyw3IEBAIHZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmRyYXdVcGRhdGVD
aHVua0ludG9CYWNraW5nU3RvcmUoVXBkYXRlQ2h1bmsqCiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9z
dXJmYWNlKGNyLmdldCgpLCBwaXhtYXAuZ2V0KCksIHVwZGF0ZUNodW5rUmVjdC54KCksIHVwZGF0
ZUNodW5rUmVjdC55KCkpOwogICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKIAotICAgIGd0a193
aWRnZXRfcXVldWVfZHJhd19hcmVhKG1fd2ViVmlldy0+d2luZG93KCksIHVwZGF0ZUNodW5rUmVj
dC54KCksIHVwZGF0ZUNodW5rUmVjdC55KCksCisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2Fy
ZWEoR1RLX1dJREdFVChtX3dlYlZpZXcpLCB1cGRhdGVDaHVua1JlY3QueCgpLCB1cGRhdGVDaHVu
a1JlY3QueSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNodW5rUmVj
dC53aWR0aCgpLCB1cGRhdGVDaHVua1JlY3QuaGVpZ2h0KCkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJWaWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzNiNTczNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZp
ZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29w
eXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0KLSNpbmNsdWRlICJDaHVua2Vk
VXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZl
bnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIldlYkNvbnRleHQu
aCIKLSNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViRXZlbnRG
YWN0b3J5LmgiCi0jaW5jbHVkZSAiV2ViVmlld1dpZGdldC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi10eXBlZGVmIEhhc2hN
YXA8aW50LCBjb25zdCBjaGFyKj4gSW50Q29uc3RDaGFySGFzaE1hcDsKLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYlZpZXc6OmhhbmRs
ZUZvY3VzSW5FdmVudChHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBpZiAoIShtX2lzUGFnZUFj
dGl2ZSkpIHsKLSAgICAgICAgbV9pc1BhZ2VBY3RpdmUgPSB0cnVlOwotICAgICAgICBtX3BhZ2Ut
PnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Ci0g
ICAgfQotCi0gICAgbV9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3
SXNGb2N1c2VkKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KEd0a1dp
ZGdldCogd2lkZ2V0KQotewotICAgIG1faXNQYWdlQWN0aXZlID0gZmFsc2U7Ci0gICAgbV9wYWdl
LT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwot
fQotCi0KLXN0YXRpYyB2b2lkIGJhY2tzcGFjZUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBX
ZWJWaWV3KiBjbGllbnQpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdp
ZGdldCwgImJhY2tzcGFjZSIpOwotICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQo
IkRlbGV0ZUJhY2t3YXJkIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbGVjdEFsbENhbGxiYWNrKEd0
a1dpZGdldCogd2lkZ2V0LCBnYm9vbGVhbiBzZWxlY3QsIFdlYlZpZXcqIGNsaWVudCkKLXsKLSAg
ICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAic2VsZWN0LWFsbCIpOwot
ICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoc2VsZWN0ID8gIlNlbGVjdEFsbCIg
OiAiVW5zZWxlY3QiKTsKLX0KLQotc3RhdGljIHZvaWQgY3V0Q2xpcGJvYXJkQ2FsbGJhY2soR3Rr
V2lkZ2V0KiB3aWRnZXQsIFdlYlZpZXcqIGNsaWVudCkKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2Vt
aXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiY3V0LWNsaXBib2FyZCIpOwotICAgIGNsaWVudC0+YWRk
UGVuZGluZ0VkaXRvckNvbW1hbmQoIkN1dCIpOwotfQotCi1zdGF0aWMgdm9pZCBjb3B5Q2xpcGJv
YXJkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIFdlYlZpZXcqIGNsaWVudCkKLXsKLSAgICBn
X3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiY29weS1jbGlwYm9hcmQiKTsK
LSAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJDb3B5Iik7Ci19Ci0KLXN0YXRp
YyB2b2lkIHBhc3RlQ2xpcGJvYXJkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIFdlYlZpZXcq
IGNsaWVudCkKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAi
cGFzdGUtY2xpcGJvYXJkIik7Ci0gICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgi
UGFzdGUiKTsKLX0KLQotc3RhdGljIHZvaWQgdG9nZ2xlT3ZlcndyaXRlQ2FsbGJhY2soR3RrV2lk
Z2V0KiB3aWRnZXQsIEVkaXRvckNsaWVudCopCi17Ci0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0
b2dnbGluZyB0aGUgb3ZlcndyaXRlIG1vZGUsIGJ1dCB0aGUgZGVmYXVsdCBjYWxsYmFjayBleHBl
Y3RzCi0gICAgLy8gdGhlIEd0a1RleHRWaWV3IHRvIGhhdmUgYSBsYXlvdXQsIHNvIHdlIGhhbmRs
ZSB0aGlzIHNpZ25hbCBqdXN0IHRvIHN0b3AgaXQuCi0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lv
bl9ieV9uYW1lKHdpZGdldCwgInRvZ2dsZS1vdmVyd3JpdGUiKTsKLX0KLQotLy8gR1RLKyB3aWxs
IHN0aWxsIHNlbmQgdGhlc2Ugc2lnbmFscyB0byB0aGUgd2ViIHZpZXcuIFNvIHdlIGNhbiBzYWZl
bHkgc3RvcCBzaWduYWwKLS8vIGVtaXNzaW9uIHdpdGhvdXQgYnJlYWtpbmcgYWNjZXNzaWJpbGl0
eS4KLXN0YXRpYyB2b2lkIHBvcHVwTWVudUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBFZGl0
b3JDbGllbnQqKQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQs
ICJwb3B1cC1tZW51Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNob3dIZWxwQ2FsbGJhY2soR3RrV2lk
Z2V0KiB3aWRnZXQsIEVkaXRvckNsaWVudCopCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lv
bl9ieV9uYW1lKHdpZGdldCwgInNob3ctaGVscCIpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgZ3RrRGVsZXRlQ29tbWFuZHNbXVsyXSA9IHsKLSAgICB7ICJEZWxldGVCYWNrd2FyZCIs
ICAgICAgICAgICAgICAgIkRlbGV0ZUZvcndhcmQiICAgICAgICAgICAgICAgICAgICAgICAgfSwg
Ly8gQ2hhcmFjdGVycwotICAgIHsgIkRlbGV0ZVdvcmRCYWNrd2FyZCIsICAgICAgICAgICAiRGVs
ZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICB9LCAvLyBXb3JkIGVuZHMKLSAgICB7
ICJEZWxldGVXb3JkQmFja3dhcmQiLCAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAg
ICAgICAgICAgICAgICAgfSwgLy8gV29yZHMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mTGlu
ZSIsICAgICAgIkRlbGV0ZVRvRW5kT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgfSwgLy8gTGlu
ZXMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mTGluZSIsICAgICAgIkRlbGV0ZVRvRW5kT2ZM
aW5lIiAgICAgICAgICAgICAgICAgICAgfSwgLy8gTGluZSBlbmRzCi0gICAgeyAiRGVsZXRlVG9C
ZWdpbm5pbmdPZlBhcmFncmFwaCIsICJEZWxldGVUb0VuZE9mUGFyYWdyYXBoIiAgICAgICAgICAg
ICAgIH0sIC8vIFBhcmFncmFwaCBlbmRzCi0gICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdPZlBhcmFn
cmFwaCIsICJEZWxldGVUb0VuZE9mUGFyYWdyYXBoIiAgICAgICAgICAgICAgIH0sIC8vIFBhcmFn
cmFwaHMKLSAgICB7IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBXaGl0ZXNwYWNlIChNLVwgaW4gRW1hY3Mp
Ci19OwotCi1zdGF0aWMgdm9pZCBkZWxldGVGcm9tQ3Vyc29yQ2FsbGJhY2soR3RrV2lkZ2V0KiB3
aWRnZXQsIEd0a0RlbGV0ZVR5cGUgZGVsZXRlVHlwZSwgZ2ludCBjb3VudCwgV2ViVmlldyogY2xp
ZW50KQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJkZWxl
dGUtZnJvbS1jdXJzb3IiKTsKLSAgICBpbnQgZGlyZWN0aW9uID0gY291bnQgPiAwID8gMSA6IDA7
Ci0KLSAgICAvLyBFbnN1cmluZyB0aGF0IGRlbGV0ZVR5cGUgPD0gR19OX0VMRU1FTlRTIGhlcmUg
cmVzdWx0cyBpbiBhIGNvbXBpbGVyIHdhcm5pbmcKLSAgICAvLyB0aGF0IHRoZSBjb25kaXRpb24g
aXMgYWx3YXlzIHRydWUuCi0KLSAgICBpZiAoZGVsZXRlVHlwZSA9PSBHVEtfREVMRVRFX1dPUkRT
KSB7Ci0gICAgICAgIGlmICghZGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICBjbGllbnQtPmFkZFBl
bmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlV29yZEZvcndhcmQiKTsKLSAgICAgICAgICAgIGNsaWVu
dC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkQmFja3dhcmQiKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1v
dmVXb3JkQmFja3dhcmQiKTsKLSAgICAgICAgICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNv
bW1hbmQoIk1vdmVXb3JkRm9yd2FyZCIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChkZWxl
dGVUeXBlID09IEdUS19ERUxFVEVfRElTUExBWV9MSU5FUykgewotICAgICAgICBpZiAoIWRpcmVj
dGlvbikKLSAgICAgICAgICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVU
b0JlZ2lubmluZ09mTGluZSIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjbGllbnQtPmFk
ZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9FbmRPZkxpbmUiKTsKLSAgICB9IGVsc2UgaWYg
KGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9QQVJBR1JBUEhTKSB7Ci0gICAgICAgIGlmICghZGly
ZWN0aW9uKQotICAgICAgICAgICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92
ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2xp
ZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvRW5kT2ZQYXJhZ3JhcGgiKTsKLSAg
ICB9Ci0KLSAgICBjb25zdCBjaGFyKiByYXdDb21tYW5kID0gZ3RrRGVsZXRlQ29tbWFuZHNbZGVs
ZXRlVHlwZV1bZGlyZWN0aW9uXTsKLSAgICBpZiAoIXJhd0NvbW1hbmQpCi0gICAgICByZXR1cm47
Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFicyhjb3VudCk7IGkrKykKLSAgICAgICAgY2xp
ZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChyYXdDb21tYW5kKTsKLX0KLQotc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGd0a01vdmVDb21tYW5kc1tdWzRdID0gewotICAgIHsgIk1vdmVCYWNr
d2FyZCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZUZvcndhcmQiLAot
ICAgICAgIk1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAi
TW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgIH0sIC8vIEZvcndhcmQv
YmFja3dhcmQgZ3JhcGhlbWUKLSAgICB7ICJNb3ZlTGVmdCIsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIk1vdmVSaWdodCIsCi0gICAgICAiTW92ZUJhY2t3YXJkQW5kTW9k
aWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAgICJNb3ZlRm9yd2FyZEFuZE1vZGlmeVNlbGVj
dGlvbiIgICAgICAgICAgICAgfSwgLy8gTGVmdC9yaWdodCBncmFwaGVtZQotICAgIHsgIk1vdmVX
b3JkQmFja3dhcmQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVdvcmRGb3J3
YXJkIiwKLSAgICAgICJNb3ZlV29yZEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAg
ICAgICAgIk1vdmVXb3JkRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICB9LCAvLyBG
b3J3YXJkL2JhY2t3YXJkIHdvcmQKLSAgICB7ICJNb3ZlVXAiLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIk1vdmVEb3duIiwKLSAgICAgICJNb3ZlVXBBbmRNb2RpZnlT
ZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVEb3duQW5kTW9kaWZ5U2VsZWN0
aW9uIiAgICAgICAgICAgICAgICB9LCAvLyBVcC9kb3duIGxpbmUKLSAgICB7ICJNb3ZlVG9CZWdp
bm5pbmdPZkxpbmUiLCAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mTGluZSIs
Ci0gICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAg
ICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgfSwgLy8gVXAvZG93
biBsaW5lIGVuZHMKLSAgICB7ICJNb3ZlUGFyYWdyYXBoRm9yd2FyZCIsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIk1vdmVQYXJhZ3JhcGhCYWNrd2FyZCIsCi0gICAgICAiTW92ZVBhcmFncmFw
aEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICJNb3ZlUGFyYWdyYXBoQmFja3dh
cmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgfSwgLy8gVXAvZG93biBwYXJhZ3JhcGhzCi0gICAgeyAi
TW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgiLCAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9F
bmRPZlBhcmFncmFwaCIsCi0gICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2Rp
ZnlTZWxlY3Rpb24iLCAgICJNb3ZlVG9FbmRPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbiIg
ICAgfSwgLy8gVXAvZG93biBwYXJhZ3JhcGggZW5kcy4KLSAgICB7ICJNb3ZlUGFnZVVwIiwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlRG93biIsCi0gICAgICAi
TW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAgICJNb3ZlUGFn
ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgfSwgLy8gVXAvZG93biBwYWdlCi0g
ICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCIsICAgICAgICAgICAgICAgICAgICAgICJN
b3ZlVG9FbmRPZkRvY3VtZW50IiwKLSAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5k
TW9kaWZ5U2VsZWN0aW9uIiwgICAgIk1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rp
b24iICAgICB9LCAvLyBCZWdpbi9lbmQgb2YgYnVmZmVyCi0gICAgeyAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAwLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBIb3Jpem9udGFsIHBhZ2UgbW92ZW1lbnQKLX07
Ci0KLXN0YXRpYyB2b2lkIG1vdmVDdXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3Rr
TW92ZW1lbnRTdGVwIHN0ZXAsIGdpbnQgY291bnQsIGdib29sZWFuIGV4dGVuZFNlbGVjdGlvbiwg
V2ViVmlldyogY2xpZW50KQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3
aWRnZXQsICJtb3ZlLWN1cnNvciIpOwotICAgIGludCBkaXJlY3Rpb24gPSBjb3VudCA+IDAgPyAx
IDogMDsKLSAgICBpZiAoZXh0ZW5kU2VsZWN0aW9uKQotICAgICAgICBkaXJlY3Rpb24gKz0gMjsK
LQotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RlcCkgPj0gR19OX0VMRU1FTlRTKGd0
a01vdmVDb21tYW5kcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGNoYXIqIHJhd0Nv
bW1hbmQgPSBndGtNb3ZlQ29tbWFuZHNbc3RlcF1bZGlyZWN0aW9uXTsKLSAgICBpZiAoIXJhd0Nv
bW1hbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzKGNv
dW50KTsgaSsrKQotICAgICAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHJhd0Nv
bW1hbmQpOwotfQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgQ3RybEtleSA9IDEgPDwgMDsKLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBBbHRLZXkgPSAxIDw8IDE7Ci1zdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU2hpZnRLZXkgPSAxIDw8IDI7Ci0KLXN0cnVjdCBLZXlEb3duRW50cnkgewotICAgIHVuc2ln
bmVkIHZpcnR1YWxLZXk7Ci0gICAgdW5zaWduZWQgbW9kaWZpZXJzOwotICAgIGNvbnN0IGNoYXIq
IG5hbWU7Ci19OwotCi1zdHJ1Y3QgS2V5UHJlc3NFbnRyeSB7Ci0gICAgdW5zaWduZWQgY2hhckNv
ZGU7Ci0gICAgdW5zaWduZWQgbW9kaWZpZXJzOwotICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci19Owot
Ci1zdGF0aWMgY29uc3QgS2V5RG93bkVudHJ5IGtleURvd25FbnRyaWVzW10gPSB7Ci0gICAgeyAn
QicsICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIlRvZ2dsZUJvbGQiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnSScsICAgICAgIEN0cmxLZXksICAgICAgICAg
ICAgIlRvZ2dsZUl0YWxpYyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAg
eyBWS19FU0NBUEUsIDAsICAgICAgICAgICAgICAgICAgIkNhbmNlbCIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19PRU1fUEVSSU9ELCBDdHJsS2V5LCAg
ICAgICAgIkNhbmNlbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0g
ICAgeyBWS19UQUIsICAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19UQUIsICAgIFNoaWZ0S2V5LCAg
ICAgICAgICAgIkluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
Ci0gICAgeyBWS19SRVRVUk4sIDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SRVRVUk4sIEN0cmxLZXks
ICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCi0gICAgeyBWS19SRVRVUk4sIEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SRVRVUk4sIEFsdEtl
eSB8IFNoaWZ0S2V5LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCi19OwotCi1zdGF0aWMgY29uc3QgS2V5UHJlc3NFbnRyeSBrZXlQcmVzc0VudHJpZXNb
XSA9IHsKLSAgICB7ICdcdCcsICAgMCwgICAgICAgICAgICAgICAgICAiSW5zZXJ0VGFiIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdcdCcsICAgU2hpZnRLZXks
ICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICB7ICdccicsICAgMCwgICAgICAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdccicsICAgQ3RybEtleSwgICAg
ICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
LSAgICB7ICdccicsICAgQWx0S2V5LCAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdccicsICAgQWx0S2V5IHwgU2hpZnRL
ZXksICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLX07
Ci0KLVdlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBw
YWdlR3JvdXApCi0gICAgOiBtX2lzUGFnZUFjdGl2ZSh0cnVlKQotICAgICwgbV9uYXRpdmVXaWRn
ZXQoZ3RrX3RleHRfdmlld19uZXcoKSkKLXsKLSAgICBtX3BhZ2UgPSBjb250ZXh0LT5jcmVhdGVX
ZWJQYWdlKHRoaXMsIHBhZ2VHcm91cCk7Ci0KLSAgICBtX3ZpZXdXaWRnZXQgPSBzdGF0aWNfY2Fz
dDxHdGtXaWRnZXQqPihnX29iamVjdF9uZXcoV0VCX1ZJRVdfVFlQRV9XSURHRVQsIE5VTEwpKTsK
LSAgICBBU1NFUlQobV92aWV3V2lkZ2V0KTsKLQotICAgIG1fcGFnZS0+aW5pdGlhbGl6ZVdlYlBh
Z2UoKTsKLQotICAgIFdlYlZpZXdXaWRnZXQqIHdlYlZpZXdXaWRnZXQgPSBXRUJfVklFV19XSURH
RVQobV92aWV3V2lkZ2V0KTsKLSAgICB3ZWJWaWV3V2lkZ2V0U2V0V2ViVmlld0luc3RhbmNlKHdl
YlZpZXdXaWRnZXQsIHRoaXMpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdl
dC5nZXQoKSwgImJhY2tzcGFjZSIsIEdfQ0FMTEJBQ0soYmFja3NwYWNlQ2FsbGJhY2spLCB0aGlz
KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiY3V0LWNsaXBi
b2FyZCIsIEdfQ0FMTEJBQ0soY3V0Q2xpcGJvYXJkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiY29weS1jbGlwYm9hcmQiLCBHX0NB
TExCQUNLKGNvcHlDbGlwYm9hcmRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJwYXN0ZS1jbGlwYm9hcmQiLCBHX0NBTExCQUNLKHBh
c3RlQ2xpcGJvYXJkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0
aXZlV2lkZ2V0LmdldCgpLCAic2VsZWN0LWFsbCIsIEdfQ0FMTEJBQ0soc2VsZWN0QWxsQ2FsbGJh
Y2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAi
bW92ZS1jdXJzb3IiLCBHX0NBTExCQUNLKG1vdmVDdXJzb3JDYWxsYmFjayksIHRoaXMpOwotICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJkZWxldGUtZnJvbS1jdXJz
b3IiLCBHX0NBTExCQUNLKGRlbGV0ZUZyb21DdXJzb3JDYWxsYmFjayksIHRoaXMpOwotICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJ0b2dnbGUtb3ZlcndyaXRlIiwg
R19DQUxMQkFDSyh0b2dnbGVPdmVyd3JpdGVDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJwb3B1cC1tZW51IiwgR19DQUxMQkFDSyhw
b3B1cE1lbnVDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVX
aWRnZXQuZ2V0KCksICJzaG93LWhlbHAiLCBHX0NBTExCQUNLKHNob3dIZWxwQ2FsbGJhY2spLCB0
aGlzKTsKLX0KLQotV2ViVmlldzo6fldlYlZpZXcoKQotewotfQotCi1HZGtXaW5kb3cqIFdlYlZp
ZXc6OmdldFdlYlZpZXdXaW5kb3coKQotewotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF93aW5k
b3cobV92aWV3V2lkZ2V0KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpwYWludChHdGtXaWRnZXQqIHdp
ZGdldCwgR2RrUmVjdGFuZ2xlIHJlY3QsIGNhaXJvX3QqIGNyKQotewotICAgIG1fcGFnZS0+ZHJh
d2luZ0FyZWEoKS0+cGFpbnQoSW50UmVjdChyZWN0KSwgY3IpOwotfQotCi12b2lkIFdlYlZpZXc6
OnNldFNpemUoR3RrV2lkZ2V0KiwgSW50U2l6ZSB3aW5kb3dTaXplKQotewotICAgIG1fcGFnZS0+
ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZSh3aW5kb3dTaXplLCBJbnRTaXplKCkpOwotfQotCi12b2lk
IFdlYlZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQotewotICAg
IG1fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHJlaW50
ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCkpKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpoYW5k
bGVNb3VzZUV2ZW50KEdka0V2ZW50KiBldmVudCwgaW50IGN1cnJlbnRDbGlja0NvdW50KQotewot
ICAgIG1fcGFnZS0+aGFuZGxlTW91c2VFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1v
dXNlRXZlbnQoZXZlbnQsIGN1cnJlbnRDbGlja0NvdW50KSk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6
aGFuZGxlV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCogZXZlbnQpCi17Ci0gICAgbV9wYWdlLT5o
YW5kbGVXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChldmVu
dCkpOwotfQotCi12b2lkIFdlYlZpZXc6OmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29u
c3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQsIFZlY3RvcjxXVEY6OlN0cmluZz4mIGNv
bW1hbmRMaXN0KQotewotICAgIG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzLmNsZWFyKCk7Ci0KLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIGd0a19iaW5kaW5nc19hY3RpdmF0ZV9ldmVudChH
VEtfT0JKRUNUKG1fbmF0aXZlV2lkZ2V0LmdldCgpKSwgY29uc3RfY2FzdDxHZGtFdmVudEtleSo+
KCZldmVudC5uYXRpdmVFdmVudCgpLT5rZXkpKTsKLSNlbHNlCi0gICAgZ3RrX2JpbmRpbmdzX2Fj
dGl2YXRlX2V2ZW50KEdfT0JKRUNUKG1fbmF0aXZlV2lkZ2V0LmdldCgpKSwgY29uc3RfY2FzdDxH
ZGtFdmVudEtleSo+KCZldmVudC5uYXRpdmVFdmVudCgpLT5rZXkpKTsKLSNlbmRpZgotCi0gICAg
aWYgKG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzLmlzRW1wdHkoKSkgewotICAgICAgICBjb21tYW5k
TGlzdC5hcHBlbmQobV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbnRDb25zdENoYXJIYXNoTWFwLCBrZXlE
b3duQ29tbWFuZHNNYXAsICgpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEludENvbnN0Q2hh
ckhhc2hNYXAsIGtleVByZXNzQ29tbWFuZHNNYXAsICgpKTsKLQotICAgIGlmIChrZXlEb3duQ29t
bWFuZHNNYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBH
X05fRUxFTUVOVFMoa2V5RG93bkVudHJpZXMpOyBpKyspCi0gICAgICAgICAgICBrZXlEb3duQ29t
bWFuZHNNYXAuc2V0KGtleURvd25FbnRyaWVzW2ldLm1vZGlmaWVycyA8PCAxNiB8IGtleURvd25F
bnRyaWVzW2ldLnZpcnR1YWxLZXksIGtleURvd25FbnRyaWVzW2ldLm5hbWUpOwotCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoa2V5UHJlc3NFbnRyaWVzKTsg
aSsrKQotICAgICAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcC5zZXQoa2V5UHJlc3NFbnRyaWVz
W2ldLm1vZGlmaWVycyA8PCAxNiB8IGtleVByZXNzRW50cmllc1tpXS5jaGFyQ29kZSwga2V5UHJl
c3NFbnRyaWVzW2ldLm5hbWUpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7
Ci0gICAgaWYgKGV2ZW50LnNoaWZ0S2V5KCkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBTaGlmdEtl
eTsKLSAgICBpZiAoZXZlbnQuYWx0S2V5KCkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBBbHRLZXk7
Ci0gICAgaWYgKGV2ZW50LmNvbnRyb2xLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJzIHw9IEN0cmxL
ZXk7Ci0KLSAgICAvLyBGb3Iga2V5cHJlc3MgZXZlbnRzLCB3ZSB3YW50IGNoYXJDb2RlKCksIGJ1
dCBrZXlDb2RlKCkgZG9lcyB0aGF0LgotICAgIGludCBtYXBLZXkgPSBtb2RpZmllcnMgPDwgMTYg
fCBldmVudC5uYXRpdmVWaXJ0dWFsS2V5Q29kZSgpOwotICAgIGlmIChtYXBLZXkpIHsKLSAgICAg
ICAgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPiogY29tbWFuZE1hcCA9IGV2ZW50LnR5cGUoKSA9
PSBXZWJFdmVudDo6S2V5RG93biA/Ci0gICAgICAgICAgICAma2V5RG93bkNvbW1hbmRzTWFwIDog
JmtleVByZXNzQ29tbWFuZHNNYXA7Ci0gICAgICAgIGlmIChjb25zdCBjaGFyKiBjb21tYW5kU3Ry
aW5nID0gY29tbWFuZE1hcC0+Z2V0KG1hcEtleSkpCi0gICAgICAgICAgICBtX3BlbmRpbmdFZGl0
b3JDb21tYW5kcy5hcHBlbmQoY29tbWFuZFN0cmluZyk7Ci0gICAgfQotCi0gICAgY29tbWFuZExp
c3QuYXBwZW5kKG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzKTsKLX0KLQotYm9vbCBXZWJWaWV3Ojpp
c0FjdGl2ZSgpCi17Ci0gICAgcmV0dXJuIG1faXNQYWdlQWN0aXZlOwotfQotCi12b2lkIFdlYlZp
ZXc6OmNsb3NlKCkKLXsKLSAgICBtX3BhZ2UtPmNsb3NlKCk7Ci19Ci0KLS8vIFBhZ2VDbGllbnQn
cyBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zCi1QYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IFdl
YlZpZXc6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQotewotICAgIHJldHVybiBDaHVua2VkVXBk
YXRlRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5nZXQoKSk7Ci19Ci0KLXZv
aWQgV2ViVmlldzo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OmRpc3BsYXlWaWV3
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnNjcm9sbFZp
ZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2Nyb2xsT2Zmc2V0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVdlYkNv
cmU6OkludFNpemUgV2ViVmlldzo6dmlld1NpemUoKQotewotICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKG1fdmlld1dpZGdldCwgJmFs
bG9jYXRpb24pOwotICAgIHJldHVybiBJbnRTaXplKGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRp
b24uaGVpZ2h0KTsKLX0KLQotYm9vbCBXZWJWaWV3Ojppc1ZpZXdXaW5kb3dBY3RpdmUoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViVmll
dzo6aXNWaWV3Rm9jdXNlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNpYmxlKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlZpZXc6OmlzVmlld0lu
V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFdlYlZpZXc6OldlYlZpZXc6OnByb2Nlc3NEaWRDcmFzaCgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpkaWRSZWxhdW5jaFByb2Nlc3MoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0Rm9jdXMoYm9vbCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnRha2VGb2N1cyhi
b29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6dG9vbFRp
cENoYW5nZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNv
cikKLXsKLSAgICAvLyBbR1RLXSBXaWRnZXQ6OnNldEN1cnNvcigpIGdldHMgY2FsbGVkIGZyZXF1
ZW50bHkKLSAgICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM4
OAotICAgIC8vIFNldHRpbmcgdGhlIGN1cnNvciBtYXkgYmUgYW4gZXhwZW5zaXZlIG9wZXJhdGlv
biBpbiBzb21lIGJhY2tlbmRzLAotICAgIC8vIHNvIGRvbid0IHJlLXNldCB0aGUgY3Vyc29yIGlm
IGl0J3MgYWxyZWFkeSBzZXQgdG8gdGhlIHRhcmdldCB2YWx1ZS4KLSAgICBHZGtXaW5kb3cqIHdp
bmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3ZpZXdXaWRnZXQpOwotICAgIEdka0N1cnNv
ciogY3VycmVudEN1cnNvciA9IGdka193aW5kb3dfZ2V0X2N1cnNvcih3aW5kb3cpOwotICAgIEdk
a0N1cnNvciogbmV3Q3Vyc29yID0gY3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCkuZ2V0KCk7Ci0gICAg
aWYgKGN1cnJlbnRDdXJzb3IgIT0gbmV3Q3Vyc29yKQotICAgICAgICBnZGtfd2luZG93X3NldF9j
dXJzb3Iod2luZG93LCBuZXdDdXJzb3IpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldFZpZXdwb3J0
QXJndW1lbnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFz
c1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6Y2xlYXJBbGxFZGl0
Q29tbWFuZHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUZsb2F0UmVjdCBXZWJW
aWV3Ojpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHZpZXdSZWN0KQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZpZXdSZWN0OwotfQotCi1GbG9hdFJl
Y3QgV2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdmlld1JlY3Qp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmlld1JlY3Q7Ci19Ci0KLUlu
dFJlY3QgV2ViVmlldzo6d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLXZvaWQgV2Vi
Vmlldzo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9v
bCB3YXNFdmVudEhhbmRsZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBX
ZWJWaWV3OjpkaWROb3RIYW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50
JiBldmVudCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1QYXNzUmVmUHRyPFdlYlBv
cHVwTWVudVByb3h5PiBXZWJWaWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkq
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBhc3NSZWZQ
dHI8V2ViQ29udGV4dE1lbnVQcm94eT4gV2ViVmlldzo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShX
ZWJQYWdlUHJveHkqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXZvaWQgV2ViVmlldzo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0
b3I+LCBib29sIGZhZGVPdXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLXZvaWQgV2ViVmlldzo6cGFnZURpZEVudGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBXZWJWaWV3OjpwYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLQotdm9pZCBXZWJWaWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3Vz
dG9tUmVwcmVzZW50YXRpb24pCi17Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZGlkRmluaXNoTG9hZGlu
Z0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVu
YW1lLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikKLXsKLX0KLQotZG91YmxlIFdlYlZp
ZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRDdXN0b21SZXByZXNl
bnRhdGlvblpvb21GYWN0b3IoZG91YmxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgV2ViVmlldzo6cGFnZUNsb3NlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXZWJWaWV3OjpkaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lKCkgY29uc3QK
LXsKLX0KLQotdm9pZCBXZWJWaWV3OjpmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVj
dG9yPEludFJlY3Q+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcwMzIwOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlZpZXdfaAotI2RlZmluZSBXZWJWaWV3X2gKLQot
I2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNs
dWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5o
PgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3Rr
L2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1jbGFzcyBEcmF3aW5nQXJlYVByb3h5OwotY2xhc3MgV2ViUGFnZU5hbWVzcGFjZTsKLQotY2xh
c3MgV2ViVmlldyA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXc+LCBwdWJsaWMgUGFnZUNsaWVu
dCB7Ci1wdWJsaWM6Ci0gICAgfldlYlZpZXcoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJW
aWV3PiBjcmVhdGUoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlZpZXcoY29udGV4dCwgcGFn
ZUdyb3VwKSk7Ci0gICAgfQotCi0gICAgR3RrV2lkZ2V0KiB3aW5kb3coKSBjb25zdCB7IHJldHVy
biBtX3ZpZXdXaWRnZXQ7IH0KLQotICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZS5nZXQoKTsgfQotCi0gICAgdm9pZCBoYW5kbGVGb2N1c0luRXZlbnQoR3RrV2lk
Z2V0Kik7Ci0gICAgdm9pZCBoYW5kbGVGb2N1c091dEV2ZW50KEd0a1dpZGdldCopOwotCi0gICAg
dm9pZCBwYWludChHdGtXaWRnZXQqLCBHZGtSZWN0YW5nbGUsIGNhaXJvX3QqKTsKLSAgICB2b2lk
IHNldFNpemUoR3RrV2lkZ2V0KiwgV2ViQ29yZTo6SW50U2l6ZSk7Ci0gICAgdm9pZCBoYW5kbGVL
ZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5Kik7Ci0gICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KEdk
a0V2ZW50U2Nyb2xsKik7Ci0gICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KEdka0V2ZW50KiwgaW50
KTsKLQotICAgIHZvaWQgYWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoY29uc3QgY2hhciogY29tbWFu
ZCkgeyBtX3BlbmRpbmdFZGl0b3JDb21tYW5kcy5hcHBlbmQoV1RGOjpTdHJpbmcoY29tbWFuZCkp
OyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKik7
Ci0KLSAgICBHZGtXaW5kb3cqIGdldFdlYlZpZXdXaW5kb3coKTsKLQotICAgIGJvb2wgaXNBY3Rp
dmUoKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICAvLyBQYWdlQ2xpZW50Ci0gICAgdmlydHVh
bCBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BsYXlWaWV3KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNp
emUgdmlld1NpemUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3V2luZG93QWN0aXZlKCk7Ci0g
ICAgdmlydHVhbCBib29sIGlzVmlld0ZvY3VzZWQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3
VmlzaWJsZSgpOwotICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdJbldpbmRvdygpOwotICAgIHZpcnR1
YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQ
cm9jZXNzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VDbG9zZWQoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Rm9jdXMoYm9vbCBmb2N1c2VkKTsKLSAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKGJv
b2wgZGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgV1RG
OjpTdHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJz
b3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpZXdwb3J0
QXJndW1lbnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJik7Ci0gICAgdmlydHVh
bCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5
PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxF
ZGl0Q29tbWFuZHMoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9E
ZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25z
dCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpOwotICAgIHZp
cnR1YWwgdm9pZCBkaWROb3RIYW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50Jik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQ
b3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2Vi
Q29udGV4dE1lbnVQcm94eT4gY3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0
b3I+LCBib29sIGZhZGVPdXQpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxiYXJz
Rm9yTWFpbkZyYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGZsYXNoQmFja2luZ1N0b3Jl
VXBkYXRlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIHVwZGF0ZVJlY3RzKTsKLSAg
ICB2aXJ0dWFsIGZsb2F0IHVzZXJTcGFjZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gMTsg
fQotICAgIHZpcnR1YWwgdm9pZCBnZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KGNvbnN0IE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0b3I8V1RGOjpTdHJpbmc+Jik7Ci0KLSNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRFbnRlckFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZExlYXZlQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29t
bWl0TG9hZEZvck1haW5GcmFtZShib29sIHVzZUN1c3RvbVJlcHJlc2VudGF0aW9uKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJl
bmNlJik7Ci0gICAgdmlydHVhbCBkb3VibGUgY3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9y
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcihk
b3VibGUpOwotCi0gICAgLy8gTWVtYmVycyBvZiBXZWJWaWV3IGNsYXNzCi0gICAgR3RrV2lkZ2V0
KiBtX3ZpZXdXaWRnZXQ7Ci0gICAgYm9vbCBtX2lzUGFnZUFjdGl2ZTsKLSAgICBSZWZQdHI8V2Vi
UGFnZVByb3h5PiBtX3BhZ2U7Ci0gICAgVmVjdG9yPFdURjo6U3RyaW5nPiBtX3BlbmRpbmdFZGl0
b3JDb21tYW5kczsKLSAgICBHUmVmUHRyPEd0a1dpZGdldD4gbV9uYXRpdmVXaWRnZXQ7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYlZpZXdfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlld1dpZGdldC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGRmZGQzYjIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld1dp
ZGdldC5oIgotCi0jaW5jbHVkZSAiR093blB0ckd0ay5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25p
bmcuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJv
LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotc3RhdGljIGdwb2ludGVyIHdlYlZpZXdXaWRnZXRQYXJlbnRDbGFzcyA9IDA7Ci0KLXN0cnVj
dCBfV2ViVmlld1dpZGdldFByaXZhdGUgewotICAgIFdlYlZpZXcqIHdlYlZpZXdJbnN0YW5jZTsK
LSAgICBHdGtJTUNvbnRleHQqIGltQ29udGV4dDsKLSAgICBnaW50IGN1cnJlbnRDbGlja0NvdW50
OwotICAgIEludFBvaW50IHByZXZpb3VzQ2xpY2tQb2ludDsKLSAgICBndWludCBwcmV2aW91c0Ns
aWNrQnV0dG9uOwotICAgIGd1aW50MzIgcHJldmlvdXNDbGlja1RpbWU7Ci19OwotCi1zdGF0aWMg
dm9pZCB3ZWJWaWV3V2lkZ2V0UmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBndGtf
d2lkZ2V0X3NldF9yZWFsaXplZCh3aWRnZXQsIFRSVUUpOwotCi0gICAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmYWxsb2Nh
dGlvbik7Ci0KLSAgICBHZGtXaW5kb3dBdHRyIGF0dHJpYnV0ZXM7Ci0gICAgYXR0cmlidXRlcy53
aW5kb3dfdHlwZSA9IEdES19XSU5ET1dfQ0hJTEQ7Ci0gICAgYXR0cmlidXRlcy54ID0gYWxsb2Nh
dGlvbi54OwotICAgIGF0dHJpYnV0ZXMueSA9IGFsbG9jYXRpb24ueTsKLSAgICBhdHRyaWJ1dGVz
LndpZHRoID0gYWxsb2NhdGlvbi53aWR0aDsKLSAgICBhdHRyaWJ1dGVzLmhlaWdodCA9IGFsbG9j
YXRpb24uaGVpZ2h0OwotICAgIGF0dHJpYnV0ZXMud2NsYXNzID0gR0RLX0lOUFVUX09VVFBVVDsK
LSAgICBhdHRyaWJ1dGVzLnZpc3VhbCA9IGd0a193aWRnZXRfZ2V0X3Zpc3VhbCh3aWRnZXQpOwot
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgYXR0cmlidXRlcy5jb2xvcm1hcCA9IGd0a193
aWRnZXRfZ2V0X2NvbG9ybWFwKHdpZGdldCk7Ci0jZW5kaWYKLSAgICBhdHRyaWJ1dGVzLmV2ZW50
X21hc2sgPSBHREtfVklTSUJJTElUWV9OT1RJRllfTUFTSwotICAgICAgICB8IEdES19FWFBPU1VS
RV9NQVNLCi0gICAgICAgIHwgR0RLX0JVVFRPTl9QUkVTU19NQVNLCi0gICAgICAgIHwgR0RLX0JV
VFRPTl9SRUxFQVNFX01BU0sKLSAgICAgICAgfCBHREtfUE9JTlRFUl9NT1RJT05fTUFTSwotICAg
ICAgICB8IEdES19LRVlfUFJFU1NfTUFTSwotICAgICAgICB8IEdES19LRVlfUkVMRUFTRV9NQVNL
Ci0gICAgICAgIHwgR0RLX0JVVFRPTl9NT1RJT05fTUFTSwotICAgICAgICB8IEdES19CVVRUT04x
X01PVElPTl9NQVNLCi0gICAgICAgIHwgR0RLX0JVVFRPTjJfTU9USU9OX01BU0sKLSAgICAgICAg
fCBHREtfQlVUVE9OM19NT1RJT05fTUFTSzsKLQotICAgIGdpbnQgYXR0cmlidXRlc01hc2sgPSBH
REtfV0FfWCB8IEdES19XQV9ZIHwgR0RLX1dBX1ZJU1VBTDsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgotICAgIGF0dHJpYnV0ZXNNYXNrIHw9IEdES19XQV9DT0xPUk1BUDsKLSNlbmRpZgotICAg
IEdka1dpbmRvdyogd2luZG93ID0gZ2RrX3dpbmRvd19uZXcoZ3RrX3dpZGdldF9nZXRfcGFyZW50
X3dpbmRvdyh3aWRnZXQpLCAmYXR0cmlidXRlcywgYXR0cmlidXRlc01hc2spOwotICAgIGd0a193
aWRnZXRfc2V0X3dpbmRvdyh3aWRnZXQsIHdpbmRvdyk7Ci0gICAgZ2RrX3dpbmRvd19zZXRfdXNl
cl9kYXRhKHdpbmRvdywgd2lkZ2V0KTsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0jaWYg
R1RLX0NIRUNLX1ZFUlNJT04oMiwgMjAsIDApCi0gICAgZ3RrX3dpZGdldF9zdHlsZV9hdHRhY2go
d2lkZ2V0KTsKLSNlbHNlCi0gICAgd2lkZ2V0LT5zdHlsZSA9IGd0a19zdHlsZV9hdHRhY2goZ3Rr
X3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgd2luZG93KTsKLSNlbmRpZgotICAgIGd0a19zdHls
ZV9zZXRfYmFja2dyb3VuZChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCB3aW5kb3csIEdU
S19TVEFURV9OT1JNQUwpOwotI2Vsc2UKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfYmFja2dy
b3VuZChndGtfd2lkZ2V0X2dldF9zdHlsZV9jb250ZXh0KHdpZGdldCksIHdpbmRvdyk7Ci0jZW5k
aWYKLQotICAgIFdlYlZpZXdXaWRnZXQqIHdlYlZpZXcgPSBXRUJfVklFV19XSURHRVQod2lkZ2V0
KTsKLSAgICBXZWJWaWV3V2lkZ2V0UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7Ci0gICAg
Z3RrX2ltX2NvbnRleHRfc2V0X2NsaWVudF93aW5kb3cocHJpdi0+aW1Db250ZXh0LCB3aW5kb3cp
OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJWaWV3V2lkZ2V0Q29udGFpbmVyQWRkKEd0a0NvbnRhaW5l
ciogY29udGFpbmVyLCBHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBndGtfd2lkZ2V0X3NldF9w
YXJlbnQod2lkZ2V0LCBHVEtfV0lER0VUKGNvbnRhaW5lcikpOwotfQotCi1zdGF0aWMgdm9pZCB3
ZWJWaWV3V2lkZ2V0RGlzcG9zZShHT2JqZWN0KiBnb2JqZWN0KQotewotICAgIFdlYlZpZXdXaWRn
ZXQqIHdlYlZpZXdXaWRnZXQgPSBXRUJfVklFV19XSURHRVQoZ29iamVjdCk7Ci0gICAgV2ViVmll
d1dpZGdldFByaXZhdGUqIHByaXYgPSB3ZWJWaWV3V2lkZ2V0LT5wcml2OwotCi0gICAgaWYgKHBy
aXYtPmltQ29udGV4dCkgewotICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5pbUNvbnRleHQp
OwotICAgICAgICBwcml2LT5pbUNvbnRleHQgPSAwOwotICAgIH0KLQotICAgIEdfT0JKRUNUX0NM
QVNTKHdlYlZpZXdXaWRnZXRQYXJlbnRDbGFzcyktPmRpc3Bvc2UoZ29iamVjdCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHdlYlZpZXdXaWRnZXRJbml0KFdlYlZpZXdXaWRnZXQqIHdlYlZpZXdXaWRnZXQp
Ci17Ci0gICAgV2ViVmlld1dpZGdldFByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUod2ViVmlld1dpZGdldCwgV0VCX1ZJRVdfVFlQRV9XSURHRVQsIFdlYlZpZXdXaWRn
ZXRQcml2YXRlKTsKLSAgICB3ZWJWaWV3V2lkZ2V0LT5wcml2ID0gcHJpdjsKLQotICAgIGd0a193
aWRnZXRfc2V0X2Nhbl9mb2N1cyhHVEtfV0lER0VUKHdlYlZpZXdXaWRnZXQpLCBUUlVFKTsKLSAg
ICBwcml2LT5pbUNvbnRleHQgPSBndGtfaW1fbXVsdGljb250ZXh0X25ldygpOwotCi0gICAgcHJp
di0+Y3VycmVudENsaWNrQ291bnQgPSAwOwotICAgIHByaXYtPnByZXZpb3VzQ2xpY2tCdXR0b24g
PSAwOwotICAgIHByaXYtPnByZXZpb3VzQ2xpY2tUaW1lID0gMDsKLX0KLQotI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0V4cG9zZShHdGtXaWRnZXQqIHdp
ZGdldCwgR2RrRXZlbnRFeHBvc2UqIGV2ZW50KQotewotICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3
ZWJWaWV3V2lkZ2V0R2V0V2ViVmlld0luc3RhbmNlKFdFQl9WSUVXX1dJREdFVCh3aWRnZXQpKTsK
LSAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7Ci0gICAgZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChl
dmVudC0+cmVnaW9uLCAmY2xpcFJlY3QpOwotCi0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtf
d2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9w
dFJlZihnZGtfY2Fpcm9fY3JlYXRlKHdpbmRvdykpOwotCi0gICAgd2ViVmlldy0+cGFpbnQod2lk
Z2V0LCBjbGlwUmVjdCwgY3IuZ2V0KCkpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotI2Vsc2UK
LXN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3RHJhdyhHdGtXaWRnZXQqIHdpZGdldCwgY2Fpcm9fdCog
Y3IpCi17Ci0gICAgV2ViVmlldyogd2ViVmlldyA9IHdlYlZpZXdXaWRnZXRHZXRXZWJWaWV3SW5z
dGFuY2UoV0VCX1ZJRVdfV0lER0VUKHdpZGdldCkpOwotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVj
dDsKLQotICAgIGlmICghZ2RrX2NhaXJvX2dldF9jbGlwX3JlY3RhbmdsZShjciwgJmNsaXBSZWN0
KSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgd2ViVmlldy0+cGFpbnQod2lkZ2V0LCBj
bGlwUmVjdCwgY3IpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2
b2lkIHdlYlZpZXdTaXplQWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0FsbG9jYXRpb24q
IGFsbG9jYXRpb24pCi17Ci0gICAgV2ViVmlldyogd2ViVmlldyA9IHdlYlZpZXdXaWRnZXRHZXRX
ZWJWaWV3SW5zdGFuY2UoV0VCX1ZJRVdfV0lER0VUKHdpZGdldCkpOwotICAgIEdUS19XSURHRVRf
Q0xBU1Mod2ViVmlld1dpZGdldFBhcmVudENsYXNzKS0+c2l6ZV9hbGxvY2F0ZSh3aWRnZXQsIGFs
bG9jYXRpb24pOwotICAgIHdlYlZpZXctPnNldFNpemUod2lkZ2V0LCBJbnRTaXplKGFsbG9jYXRp
b24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdl
YlZpZXdGb2N1c0luRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMqIGV2ZW50
KQotewotICAgIFdlYlZpZXdXaWRnZXQqIHdlYlZpZXdXaWRnZXQgPSBXRUJfVklFV19XSURHRVQo
d2lkZ2V0KTsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViVmlld1dpZGdldEdldFdlYlZpZXdJ
bnN0YW5jZSh3ZWJWaWV3V2lkZ2V0KTsKLQotICAgIEd0a1dpZGdldCogdG9wbGV2ZWwgPSBndGtf
d2lkZ2V0X2dldF90b3BsZXZlbCh3aWRnZXQpOwotICAgIGlmIChndGtfd2lkZ2V0X2lzX3RvcGxl
dmVsKHRvcGxldmVsKSAmJiBndGtfd2luZG93X2hhc190b3BsZXZlbF9mb2N1cyhHVEtfV0lORE9X
KHRvcGxldmVsKSkpIHsKLSAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfaW4od2ViVmlld1dp
ZGdldEdldElNQ29udGV4dCh3ZWJWaWV3V2lkZ2V0KSk7Ci0gICAgICAgIHdlYlZpZXctPmhhbmRs
ZUZvY3VzSW5FdmVudCh3aWRnZXQpOwotICAgIH0KLQotICAgIHJldHVybiBHVEtfV0lER0VUX0NM
QVNTKHdlYlZpZXdXaWRnZXRQYXJlbnRDbGFzcyktPmZvY3VzX2luX2V2ZW50KHdpZGdldCwgZXZl
bnQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0ZvY3VzT3V0RXZlbnQoR3RrV2lkZ2V0
KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMqIGV2ZW50KQotewotICAgIFdlYlZpZXdXaWRnZXQqIHdl
YlZpZXdXaWRnZXQgPSBXRUJfVklFV19XSURHRVQod2lkZ2V0KTsKLSAgICBXZWJWaWV3KiB3ZWJW
aWV3ID0gd2ViVmlld1dpZGdldEdldFdlYlZpZXdJbnN0YW5jZSh3ZWJWaWV3V2lkZ2V0KTsKLQot
ICAgIHdlYlZpZXctPmhhbmRsZUZvY3VzT3V0RXZlbnQod2lkZ2V0KTsKLSAgICBHdGtJTUNvbnRl
eHQqIGltQ29udGV4dCA9IHdlYlZpZXdXaWRnZXRHZXRJTUNvbnRleHQod2ViVmlld1dpZGdldCk7
Ci0gICAgaWYgKGltQ29udGV4dCkKLSAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KGlt
Q29udGV4dCk7Ci0KLSAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJWaWV3V2lkZ2V0UGFy
ZW50Q2xhc3MpLT5mb2N1c19vdXRfZXZlbnQod2lkZ2V0LCBldmVudCk7Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiB3ZWJWaWV3S2V5UHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRL
ZXkqIGV2ZW50KQotewotICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJWaWV3V2lkZ2V0R2V0V2Vi
Vmlld0luc3RhbmNlKFdFQl9WSUVXX1dJREdFVCh3aWRnZXQpKTsKLSAgICB3ZWJWaWV3LT5oYW5k
bGVLZXlib2FyZEV2ZW50KGV2ZW50KTsKLQotICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdl
YlZpZXdXaWRnZXRQYXJlbnRDbGFzcyktPmtleV9wcmVzc19ldmVudCh3aWRnZXQsIGV2ZW50KTsK
LX0KLQotc3RhdGljIGdib29sZWFuIHdlYlZpZXdLZXlSZWxlYXNlRXZlbnQoR3RrV2lkZ2V0KiB3
aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCkKLXsKLSAgICBXZWJWaWV3V2lkZ2V0KiB3ZWJWaWV3
V2lkZ2V0ID0gV0VCX1ZJRVdfV0lER0VUKHdpZGdldCk7Ci0gICAgV2ViVmlldyogd2ViVmlldyA9
IHdlYlZpZXdXaWRnZXRHZXRXZWJWaWV3SW5zdGFuY2Uod2ViVmlld1dpZGdldCk7Ci0KLSAgICBp
ZiAoZ3RrX2ltX2NvbnRleHRfZmlsdGVyX2tleXByZXNzKHdlYlZpZXdXaWRnZXRHZXRJTUNvbnRl
eHQod2ViVmlld1dpZGdldCksIGV2ZW50KSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICB3
ZWJWaWV3LT5oYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50KTsKLQotICAgIHJldHVybiBHVEtfV0lE
R0VUX0NMQVNTKHdlYlZpZXdXaWRnZXRQYXJlbnRDbGFzcyktPmtleV9yZWxlYXNlX2V2ZW50KHdp
ZGdldCwgZXZlbnQpOwotfQotCi0vLyBDb3BpZWQgZnJvbSB3ZWJraXR3ZWJ2aWV3LmNwcAotc3Rh
dGljIGd1aW50MzIgZ2V0RXZlbnRUaW1lKEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBndWludDMy
IHRpbWUgPSBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpOwotICAgIGlmICh0aW1lKQotICAgICAg
ICByZXR1cm4gdGltZTsKLQotICAgIC8vIFJlYWwgZXZlbnRzIGFsd2F5cyBoYXZlIGEgbm9uLXpl
cm8gdGltZSwgYnV0IGV2ZW50cyBzeW50aGVzaXplZAotICAgIC8vIGJ5IHRoZSBEUlQgZG8gbm90
IGFuZCB3ZSBtdXN0IGNhbGN1bGF0ZSBhIHRpbWUgbWFudWFsbHkuIFRoaXMgdGltZQotICAgIC8v
IGlzIG5vdCBjYWxjdWxhdGVkIGluIHRoZSBEUlQsIGJlY2F1c2UgR1RLKyBkb2VzIG5vdCB3b3Jr
IHdlbGwgd2l0aAotICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gR0RLX0NVUlJFTlRfVElNRSBv
biBzeW50aGVzaXplZCBldmVudHMuCi0gICAgR1RpbWVWYWwgdGltZVZhbHVlOwotICAgIGdfZ2V0
X2N1cnJlbnRfdGltZSgmdGltZVZhbHVlKTsKLSAgICByZXR1cm4gKHRpbWVWYWx1ZS50dl9zZWMg
KiAxMDAwKSArICh0aW1lVmFsdWUudHZfdXNlYyAvIDEwMDApOwotfQotCi1zdGF0aWMgZ2Jvb2xl
YW4gd2ViVmlld0J1dHRvblByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0
dG9uKiBidXR0b25FdmVudCkKLXsKLSAgICBpZiAoYnV0dG9uRXZlbnQtPmJ1dHRvbiA9PSAzKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBbR1RLXSBBZGQgY29udGV4dCBtZW51IHN1cHBvcnQgZm9yIFdl
YmtpdDIuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NDgyNwotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4gRkFMU0U7
Ci0gICAgfQotCi0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7Ci0KLSAgICAvLyBG
b3IgZG91YmxlIGFuZCB0cmlwbGUgY2xpY2tzIEdESyBzZW5kcyBib3RoIGEgbm9ybWFsIGJ1dHRv
biBwcmVzcyBldmVudAotICAgIC8vIGFuZCBhIHNwZWNpZmljIHR5cGUgKGxpa2UgR0RLXzJCVVRU
T05fUFJFU1MpLiBJZiB3ZSBkZXRlY3QgYSBzcGVjaWFsIHByZXNzCi0gICAgLy8gY29taW5nIHVw
LCBpZ25vcmUgdGhpcyBldmVudCBhcyBpdCBjZXJ0YWlubHkgZ2VuZXJhdGVkIHRoZSBkb3VibGUg
b3IgdHJpcGxlCi0gICAgLy8gY2xpY2suIFRoZSBjb25zZXF1ZW5jZSBvZiBub3QgZWF0aW5nIHRo
aXMgZXZlbnQgaXMgdHdvIERPTSBidXR0b24gcHJlc3MgZXZlbnRzCi0gICAgLy8gYXJlIGdlbmVy
YXRlZC4KLSAgICBHT3duUHRyPEdka0V2ZW50PiBuZXh0RXZlbnQoZ2RrX2V2ZW50X3BlZWsoKSk7
Ci0gICAgaWYgKG5leHRFdmVudCAmJiAobmV4dEV2ZW50LT5hbnkudHlwZSA9PSBHREtfMkJVVFRP
Tl9QUkVTUyB8fCBuZXh0RXZlbnQtPmFueS50eXBlID09IEdES18zQlVUVE9OX1BSRVNTKSkKLSAg
ICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBnaW50IGRvdWJsZUNsaWNrRGlzdGFuY2UgPSAyNTA7
Ci0gICAgZ2ludCBkb3VibGVDbGlja1RpbWUgPSA1OwotICAgIEd0a1NldHRpbmdzKiBzZXR0aW5n
cyA9IGd0a19zZXR0aW5nc19nZXRfZm9yX3NjcmVlbihndGtfd2lkZ2V0X2dldF9zY3JlZW4od2lk
Z2V0KSk7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLAotICAgICAgICAgICAgICAgICAiZ3Rr
LWRvdWJsZS1jbGljay1kaXN0YW5jZSIsICZkb3VibGVDbGlja0Rpc3RhbmNlLAotICAgICAgICAg
ICAgICAgICAiZ3RrLWRvdWJsZS1jbGljay10aW1lIiwgJmRvdWJsZUNsaWNrVGltZSwgTlVMTCk7
Ci0KLSAgICAvLyBHVEsrIG9ubHkgY291bnRzIHVwIHRvIHRyaXBsZSBjbGlja3MsIGJ1dCBXZWJD
b3JlIHdhbnRzIHRvIGtub3cgYWJvdXQKLSAgICAvLyBxdWFkcnVwbGUgY2xpY2tzLCBxdWludHVw
bGUgY2xpY2tzLCBhZCBpbmZpbml0dW0uIEhlcmUsIHdlIHJlcGxpY2F0ZSB0aGUKLSAgICAvLyBH
REsgbG9naWMgZm9yIGNvdW50aW5nIGNsaWNrcy4KLSAgICBHZGtFdmVudCogZXZlbnQocmVpbnRl
cnByZXRfY2FzdDxHZGtFdmVudCo+KGJ1dHRvbkV2ZW50KSk7Ci0gICAgZ3VpbnQzMiBldmVudFRp
bWUgPSBnZXRFdmVudFRpbWUoZXZlbnQpOwotICAgIFdlYlZpZXdXaWRnZXQqIHdlYlZpZXdXaWRn
ZXQgPSBXRUJfVklFV19XSURHRVQod2lkZ2V0KTsKLSAgICBXZWJWaWV3V2lkZ2V0UHJpdmF0ZSog
cHJpdiA9IHdlYlZpZXdXaWRnZXQtPnByaXY7Ci0gICAgaWYgKChldmVudC0+dHlwZSA9PSBHREtf
MkJVVFRPTl9QUkVTUyB8fCBldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKLSAgICAg
ICAgfHwgKChhYnMoYnV0dG9uRXZlbnQtPnggLSBwcml2LT5wcmV2aW91c0NsaWNrUG9pbnQueCgp
KSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCi0gICAgICAgICAgICAmJiAoYWJzKGJ1dHRvbkV2ZW50
LT55IC0gcHJpdi0+cHJldmlvdXNDbGlja1BvaW50LnkoKSkgPCBkb3VibGVDbGlja0Rpc3RhbmNl
KQotICAgICAgICAgICAgJiYgKGV2ZW50VGltZSAtIHByaXYtPnByZXZpb3VzQ2xpY2tUaW1lIDwg
c3RhdGljX2Nhc3Q8Z3VpbnQ+KGRvdWJsZUNsaWNrVGltZSkpCi0gICAgICAgICAgICAmJiAoYnV0
dG9uRXZlbnQtPmJ1dHRvbiA9PSBwcml2LT5wcmV2aW91c0NsaWNrQnV0dG9uKSkpCi0gICAgICAg
IHByaXYtPmN1cnJlbnRDbGlja0NvdW50Kys7Ci0gICAgZWxzZQotICAgICAgICBwcml2LT5jdXJy
ZW50Q2xpY2tDb3VudCA9IDE7Ci0KLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViVmlld1dpZGdl
dEdldFdlYlZpZXdJbnN0YW5jZSh3ZWJWaWV3V2lkZ2V0KTsKLSAgICB3ZWJWaWV3LT5oYW5kbGVN
b3VzZUV2ZW50KGV2ZW50LCBwcml2LT5jdXJyZW50Q2xpY2tDb3VudCk7Ci0KLSAgICBnZG91Ymxl
IHgsIHk7Ci0gICAgZ2RrX2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4LCAmeSk7Ci0gICAgcHJp
di0+cHJldmlvdXNDbGlja1BvaW50ID0gSW50UG9pbnQoeCwgeSk7Ci0gICAgcHJpdi0+cHJldmlv
dXNDbGlja0J1dHRvbiA9IGJ1dHRvbkV2ZW50LT5idXR0b247Ci0gICAgcHJpdi0+cHJldmlvdXND
bGlja1RpbWUgPSBldmVudFRpbWU7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiB3ZWJWaWV3QnV0dG9uUmVsZWFzZUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtF
dmVudEJ1dHRvbiogZXZlbnQpCi17Ci0gICAgV2ViVmlldyogd2ViVmlldyA9IHdlYlZpZXdXaWRn
ZXRHZXRXZWJWaWV3SW5zdGFuY2UoV0VCX1ZJRVdfV0lER0VUKHdpZGdldCkpOwotICAgIGd0a193
aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOwotICAgIHdlYlZpZXctPmhhbmRsZU1vdXNlRXZlbnQo
cmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgMCAvKiBjdXJyZW50Q2xpY2tDb3Vu
dCAqLyk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3
U2Nyb2xsRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50U2Nyb2xsKiBldmVudCkKLXsK
LSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViVmlld1dpZGdldEdldFdlYlZpZXdJbnN0YW5jZShX
RUJfVklFV19XSURHRVQod2lkZ2V0KSk7Ci0gICAgd2ViVmlldy0+aGFuZGxlV2hlZWxFdmVudChl
dmVudCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3
TW90aW9uTm90aWZ5RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVu
dCkKLXsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViVmlld1dpZGdldEdldFdlYlZpZXdJbnN0
YW5jZShXRUJfVklFV19XSURHRVQod2lkZ2V0KSk7Ci0gICAgd2ViVmlldy0+aGFuZGxlTW91c2VF
dmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAwIC8qIGN1cnJlbnRDbGlj
a0NvdW50ICovKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgd2ViVmll
d1dpZGdldENsYXNzSW5pdChXZWJWaWV3V2lkZ2V0Q2xhc3MqIHdlYlZpZXdXaWRnZXRDbGFzcykK
LXsKLSAgICB3ZWJWaWV3V2lkZ2V0UGFyZW50Q2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJl
bnQod2ViVmlld1dpZGdldENsYXNzKTsKLQotICAgIEd0a1dpZGdldENsYXNzKiB3aWRnZXRDbGFz
cyA9IEdUS19XSURHRVRfQ0xBU1Mod2ViVmlld1dpZGdldENsYXNzKTsKLSAgICB3aWRnZXRDbGFz
cy0+cmVhbGl6ZSA9IHdlYlZpZXdXaWRnZXRSZWFsaXplOwotI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCi0gICAgd2lkZ2V0Q2xhc3MtPmV4cG9zZV9ldmVudCA9IHdlYlZpZXdFeHBvc2U7Ci0jZWxz
ZQotICAgIHdpZGdldENsYXNzLT5kcmF3ID0gd2ViVmlld0RyYXc7Ci0jZW5kaWYKLSAgICB3aWRn
ZXRDbGFzcy0+c2l6ZV9hbGxvY2F0ZSA9IHdlYlZpZXdTaXplQWxsb2NhdGU7Ci0gICAgd2lkZ2V0
Q2xhc3MtPmZvY3VzX2luX2V2ZW50ID0gd2ViVmlld0ZvY3VzSW5FdmVudDsKLSAgICB3aWRnZXRD
bGFzcy0+Zm9jdXNfb3V0X2V2ZW50ID0gd2ViVmlld0ZvY3VzT3V0RXZlbnQ7Ci0gICAgd2lkZ2V0
Q2xhc3MtPmtleV9wcmVzc19ldmVudCA9IHdlYlZpZXdLZXlQcmVzc0V2ZW50OwotICAgIHdpZGdl
dENsYXNzLT5rZXlfcmVsZWFzZV9ldmVudCA9IHdlYlZpZXdLZXlSZWxlYXNlRXZlbnQ7Ci0gICAg
d2lkZ2V0Q2xhc3MtPmJ1dHRvbl9wcmVzc19ldmVudCA9IHdlYlZpZXdCdXR0b25QcmVzc0V2ZW50
OwotICAgIHdpZGdldENsYXNzLT5idXR0b25fcmVsZWFzZV9ldmVudCA9IHdlYlZpZXdCdXR0b25S
ZWxlYXNlRXZlbnQ7Ci0gICAgd2lkZ2V0Q2xhc3MtPnNjcm9sbF9ldmVudCA9IHdlYlZpZXdTY3Jv
bGxFdmVudDsKLSAgICB3aWRnZXRDbGFzcy0+bW90aW9uX25vdGlmeV9ldmVudCA9IHdlYlZpZXdN
b3Rpb25Ob3RpZnlFdmVudDsKLQotICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1Mod2ViVmlld1dpZGdldENsYXNzKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmRpc3Bv
c2UgPSB3ZWJWaWV3V2lkZ2V0RGlzcG9zZTsKLQotICAgIEd0a0NvbnRhaW5lckNsYXNzKiBjb250
YWluZXJDbGFzcyA9IEdUS19DT05UQUlORVJfQ0xBU1Mod2ViVmlld1dpZGdldENsYXNzKTsKLSAg
ICBjb250YWluZXJDbGFzcy0+YWRkID0gd2ViVmlld1dpZGdldENvbnRhaW5lckFkZDsKLQotICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSh3ZWJWaWV3V2lkZ2V0Q2xhc3MsIHNpemVvZihXZWJW
aWV3V2lkZ2V0UHJpdmF0ZSkpOwotfQotCi1HVHlwZSB3ZWJWaWV3V2lkZ2V0R2V0VHlwZSgpCi17
Ci0gICAgc3RhdGljIHZvbGF0aWxlIGdzaXplIGdEZWZpbmVUeXBlSWRWb2xhdGlsZSA9IDA7Ci0K
LSAgICBpZiAoIWdfb25jZV9pbml0X2VudGVyKCZnRGVmaW5lVHlwZUlkVm9sYXRpbGUpKQotICAg
ICAgICByZXR1cm4gZ0RlZmluZVR5cGVJZFZvbGF0aWxlOwotCi0gICAgR1R5cGUgZ0RlZmluZVR5
cGVJZCA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWNfc2ltcGxlKEdUS19UWVBFX0NPTlRBSU5FUiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19pbnRlcm5fc3RhdGljX3N0cmluZygiV2ViVmlld1dpZGdldCIpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV2ViVmlld1dp
ZGdldENsYXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQ2xhc3NJbml0RnVuYz4od2ViVmlld1dpZGdl
dENsYXNzSW5pdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVvZihXZWJWaWV3V2lkZ2V0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHSW5z
dGFuY2VJbml0RnVuYz4od2ViVmlld1dpZGdldEluaXQpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHVHlwZUZsYWdz
PigwKSk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUoJmdEZWZpbmVUeXBlSWRWb2xhdGlsZSwgZ0Rl
ZmluZVR5cGVJZCk7Ci0KLSAgICByZXR1cm4gZ0RlZmluZVR5cGVJZFZvbGF0aWxlOwotfQotCi1X
ZWJWaWV3KiB3ZWJWaWV3V2lkZ2V0R2V0V2ViVmlld0luc3RhbmNlKFdlYlZpZXdXaWRnZXQqIHdl
YlZpZXdXaWRnZXQpCi17Ci0gICAgcmV0dXJuIHdlYlZpZXdXaWRnZXQtPnByaXYtPndlYlZpZXdJ
bnN0YW5jZTsKLX0KLQotdm9pZCB3ZWJWaWV3V2lkZ2V0U2V0V2ViVmlld0luc3RhbmNlKFdlYlZp
ZXdXaWRnZXQqIHdlYlZpZXdXaWRnZXQsIFdlYlZpZXcqIHdlYlZpZXdJbnN0YW5jZSkKLXsKLSAg
ICB3ZWJWaWV3V2lkZ2V0LT5wcml2LT53ZWJWaWV3SW5zdGFuY2UgPSB3ZWJWaWV3SW5zdGFuY2U7
Ci19Ci0KLUd0a0lNQ29udGV4dCogd2ViVmlld1dpZGdldEdldElNQ29udGV4dChXZWJWaWV3V2lk
Z2V0KiB3ZWJWaWV3V2lkZ2V0KQotewotICAgIHJldHVybiB3ZWJWaWV3V2lkZ2V0LT5wcml2LT5p
bUNvbnRleHQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YlZpZXdXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlld1dpZGdl
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjFkODdmLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlld1dpZGdldC5oCisrKyAvZGV2L251
bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJWaWV3V2lkZ2V0X2gK
LSNkZWZpbmUgV2ViVmlld1dpZGdldF9oCi0KLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0KLSNpbmNs
dWRlIDxndGsvZ3RrLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLUdfQkVHSU5fREVD
TFMKLQotI2RlZmluZSBXRUJfVklFV19UWVBFX1dJREdFVCAgICAgICAgICAgICAgKHdlYlZpZXdX
aWRnZXRHZXRUeXBlKCkpCi0jZGVmaW5lIFdFQl9WSUVXX1dJREdFVChvYmplY3QpICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iamVjdCksIFdFQl9WSUVXX1RZUEVfV0lE
R0VULCBXZWJWaWV3V2lkZ2V0KSkKLSNkZWZpbmUgV0VCX1ZJRVdfV0lER0VUX0NMQVNTKGtsYXNz
KSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJfVklFV19UWVBFX1dJ
REdFVCwgV2ViVmlld1dpZGdldENsYXNzKSkKLSNkZWZpbmUgV0VCX1ZJRVdfSVNfV0lER0VUKG9i
amVjdCkgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqZWN0KSwgV0VCX1ZJ
RVdfVFlQRV9XSURHRVQpKQotI2RlZmluZSBXRUJfVklFV19JU19DTEFTUyhrbGFzcykgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQl9WSUVXX1RZUEVfV0lER0VU
KSkKLSNkZWZpbmUgV0VCX1ZJRVdfV0lER0VUX0dFVF9DTEFTUyhvYmplY3QpIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmplY3QpLCBXRUJfVklFV19UWVBFX1dJREdFVCwgV2ViVmlld1dp
ZGdldENsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYlZpZXdXaWRnZXQgV2ViVmlld1dpZGdl
dDsKLXR5cGVkZWYgc3RydWN0IF9XZWJWaWV3V2lkZ2V0Q2xhc3MgV2ViVmlld1dpZGdldENsYXNz
OwotdHlwZWRlZiBzdHJ1Y3QgX1dlYlZpZXdXaWRnZXRQcml2YXRlIFdlYlZpZXdXaWRnZXRQcml2
YXRlOwotCi1zdHJ1Y3QgX1dlYlZpZXdXaWRnZXQgewotICAgIEd0a0NvbnRhaW5lciBwYXJlbnRJ
bnN0YW5jZTsKLSAgICAvKjwgcHJpdmF0ZSA+Ki8KLSAgICBXZWJWaWV3V2lkZ2V0UHJpdmF0ZSog
cHJpdjsKLX07Ci0KLXN0cnVjdCBfV2ViVmlld1dpZGdldENsYXNzIHsKLSAgICBHdGtDb250YWlu
ZXJDbGFzcyBwYXJlbnRDbGFzczsKLX07Ci0KLUdUeXBlIHdlYlZpZXdXaWRnZXRHZXRUeXBlKCk7
Ci0KLVdlYlZpZXcqIHdlYlZpZXdXaWRnZXRHZXRXZWJWaWV3SW5zdGFuY2UoV2ViVmlld1dpZGdl
dCopOwotCi12b2lkIHdlYlZpZXdXaWRnZXRTZXRXZWJWaWV3SW5zdGFuY2UoV2ViVmlld1dpZGdl
dCosIFdlYlZpZXcqKTsKLQotR3RrSU1Db250ZXh0KiB3ZWJWaWV3V2lkZ2V0R2V0SU1Db250ZXh0
KFdlYlZpZXdXaWRnZXQqKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8vIFdlYlZpZXdXaWRn
ZXRfaApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYyBiL1Rvb2xzL01p
bmlCcm93c2VyL2d0ay9tYWluLmMKaW5kZXggMGMzMjUxMC4uMjJmNzVlYyAxMDA2NDQKLS0tIGEv
VG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsv
bWFpbi5jCkBAIC0zMiw3ICszMiw3IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlVXJpRW50cnlDYWxs
YmFjayhHdGtXaWRnZXQgKmVudHJ5LCBncG9pbnRlciBkYXRhKQogewogICAgIFdLVmlld1JlZiB3
ZWJWaWV3ID0gZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QoZW50cnkpLCAid2ViLXZpZXciKTsK
ICAgICBjb25zdCBnY2hhciAqdXJpID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShlbnRy
eSkpOwotICAgIFdLUGFnZUxvYWRVUkwoV0tWaWV3R2V0UGFnZSh3ZWJWaWV3KSwgV0tVUkxDcmVh
dGVXaXRoVVJMKHVyaSkpOworICAgIFdLUGFnZUxvYWRVUkwoV0tWaWV3R2V0UGFnZSh3ZWJWaWV3
KSwgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcodXJpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRl
c3Ryb3lDYWxsYmFjayhHdGtXaWRnZXQgKndpZGdldCwgR3RrV2lkZ2V0ICp3aW5kb3cpCkBAIC05
OCw3ICs5OCw3IEBAIHN0YXRpYyBHdGtXaWRnZXQgKmNyZWF0ZVdpbmRvdyhXS1ZpZXdSZWYgd2Vi
VmlldykKIAogICAgIEd0a1dpZGdldCAqdmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7CiAg
ICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGNyZWF0ZVRvb2xiYXIodXJpRW50
cnksIHdlYlZpZXcpLCBGQUxTRSwgRkFMU0UsIDApOwotICAgIGd0a19ib3hfcGFja19zdGFydChH
VEtfQk9YKHZib3gpLCBXS1ZpZXdHZXRXaW5kb3cod2ViVmlldyksIFRSVUUsIFRSVUUsIDApOwor
ICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBHVEtfV0lER0VUKHdlYlZpZXcp
LCBUUlVFLCBUUlVFLCAwKTsKIAogICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
d2luZG93KSwgdmJveCk7CiAKQEAgLTEyNywxMCArMTI3LDEwIEBAIGludCBtYWluKGludCBhcmdj
LCBjaGFyICphcmd2W10pCiAgICAgR3RrV2lkZ2V0ICptYWluV2luZG93ID0gY3JlYXRlV2luZG93
KHdlYlZpZXcpOwogCiAgICAgZ2NoYXIqIHVybCA9IGFyZ3VtZW50VG9VUkwoYXJnYyA+IDEgPyBh
cmd2WzFdIDogImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iKTsKLSAgICBXS1BhZ2VMb2FkVVJM
KFdLVmlld0dldFBhZ2Uod2ViVmlldyksIFdLVVJMQ3JlYXRlV2l0aFVSTCh1cmwpKTsKKyAgICBX
S1BhZ2VMb2FkVVJMKFdLVmlld0dldFBhZ2Uod2ViVmlldyksIFdLVVJMQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHVybCkpOwogICAgIGdfZnJlZSh1cmwpOwogCi0gICAgZ3RrX3dpZGdldF9ncmFiX2Zv
Y3VzKFdLVmlld0dldFdpbmRvdyh3ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3Vz
KEdUS19XSURHRVQod2ViVmlldykpOwogICAgIGd0a193aWRnZXRfc2hvd19hbGwobWFpbldpbmRv
dyk7CiAgICAgZ3RrX21haW4oKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89758</attachid>
            <date>2011-04-15 02:35:35 -0700</date>
            <delta_ts>2011-04-27 05:32:59 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-c-api3.diff</filename>
            <type>text/plain</type>
            <size>107530</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlMzg5NDQxLi5mZTUyYjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEy
IEBACisyMDExLTA0LTE1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RL
XSBJbXBsZW1lbnQgV0tWaWV3IHdpdGggYSBjb21tb24gd2lkZ2V0IHRoYXQgY2FuIGJlIHVzZWQg
YnkgYm90aCBDIGFuZCBndGsgQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTc5NDQKKworICAgICAgICBNb3ZlIGd0ayBBUEkgZnJvbSBVSVByb2Nl
c3MvZ3RrIHRvIFVJUHJvY2Vzcy9BUEkvZ3RrLiBXZWJWaWV3IGFuZAorICAgICAgICBXZWJWaWV3
V2lkZ2V0IGhhdmUgYmVlbiBtZXJnZWQgaW50byBXZWJLaXRXZWJWaWV3QmFzZSwgdGhlIGNvbW1v
bgorICAgICAgICBhYnN0cmFjdCBjbGFzcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdmll
dworICAgICAgICB3aWRnZXRzLiBQYWdlQ2xpZW50IGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIG1v
dmVkIHRvCisgICAgICAgIFBhZ2VDbGllbnRJbXBsIGFuZCBpdCdzIHVzZWQgYnkgV2ViS2l0V2Vi
Vmlld0Jhc2UuIFdLVmlldyBwcm92aWRlcworICAgICAgICBhIGd0ayB3aWRnZXQgZm9yIHRoZSBD
IEFQSSBpbmhlcml0aW5nIGZyb20gV2ViS2l0V2ViVmlld0Jhc2UuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvZ3RrL1dLQVBJQ2FzdEd0ay5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNwcDoKKyAgICAgICAgKHdr
X3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICh3a192aWV3X2luaXQpOgorICAgICAgICAoV0tW
aWV3R2V0UGFnZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9ndGsvV0tWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1Zp
ZXdQcml2YXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
Vmlld1dpZGdldC5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBs
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpQYWdlQ2xpZW50
SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp+UGFnZUNsaWVudEltcGwp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRWaWV3TmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpc3BsYXlWaWV3KToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNjcm9sbFZpZXcpOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6dmlld1NpemUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6aXNWaWV3V2luZG93QWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OmlzVmlld0ZvY3VzZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNW
aWV3VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdJbldp
bmRvdyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpwcm9jZXNzRGlkQ3Jhc2gp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkUmVsYXVuY2hQcm9jZXNzKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnRha2VGb2N1cyk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp0b29sVGlwQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3IpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6c2V0Vmlld3BvcnRBcmd1bWVudHMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6cmVnaXN0ZXJFZGl0Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjpjbGVhckFsbEVkaXRDb21tYW5kcyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjpjYW5VbmRvUmVkbyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpleGVj
dXRlVW5kb1JlZG8pOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRv
RGV2aWNlU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRv
VXNlclNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OndpbmRvd1RvU2Ny
ZWVuKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5RXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkTm90SGFuZGxlS2V5RXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBNZW51UHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRGaW5kSW5kaWNhdG9yKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnBhZ2VEaWRFbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cGFnZURpZExl
YXZlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjpnZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZUNsaWVudEltcGw6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUpOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRh
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjdXN0b21SZXByZXNlbnRh
dGlvblpvb21GYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vz
dG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OnBhZ2VDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlk
Q2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1dlYlZpZXcuaC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp1c2VyU3BhY2VTY2FsZUZh
Y3Rvcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlUmVhbGl6ZSk6CisgICAgICAgICh3
ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lckFkZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZUZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQpOgorICAgICAg
ICAod2Via2l0V2ViVmlld0Jhc2VFeHBvc2UpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VE
cmF3KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU2l6ZUFsbG9jYXRlKToKKyAgICAgICAg
KHdlYmtpdFdlYlZpZXdCYXNlRm9jdXNJbkV2ZW50KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlRm9jdXNPdXRFdmVudCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUtleVByZXNzRXZl
bnQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VLZXlSZWxlYXNlRXZlbnQpOgorICAgICAg
ICAoZ2V0RXZlbnRUaW1lKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NF
dmVudCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblJlbGVhc2VFdmVudCk6Cisg
ICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVNjcm9sbEV2ZW50KToKKyAgICAgICAgKHdlYmtpdFdl
YlZpZXdCYXNlTW90aW9uTm90aWZ5RXZlbnQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VR
dWVyeVRvb2x0aXApOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdCk6
CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKToKKyAg
ICAgICAgKGJhY2tzcGFjZUNhbGxiYWNrKToKKyAgICAgICAgKHNlbGVjdEFsbENhbGxiYWNrKToK
KyAgICAgICAgKGN1dENsaXBib2FyZENhbGxiYWNrKToKKyAgICAgICAgKGNvcHlDbGlwYm9hcmRD
YWxsYmFjayk6CisgICAgICAgIChwYXN0ZUNsaXBib2FyZENhbGxiYWNrKToKKyAgICAgICAgKHRv
Z2dsZU92ZXJ3cml0ZUNhbGxiYWNrKToKKyAgICAgICAgKHBvcHVwTWVudUNhbGxiYWNrKToKKyAg
ICAgICAgKHNob3dIZWxwQ2FsbGJhY2spOgorICAgICAgICAoZGVsZXRlRnJvbUN1cnNvckNhbGxi
YWNrKToKKyAgICAgICAgKG1vdmVDdXJzb3JDYWxsYmFjayk6CisgICAgICAgICh3ZWJraXRXZWJW
aWV3QmFzZUVkaXRvckluaXQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VHZXRFZGl0b3JD
b21tYW5kc0ZvcktleUV2ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJWaWV3V2lkZ2V0LmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtp
dGRlZmluZXMuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3
aW5nQXJlYVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJh
d2luZ0FyZWFQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3
aW5nQXJlYVByb3h5OjpwYWdlKToKKyAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdp
bmdBcmVhUHJveHk6OmVuc3VyZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkNodW5r
ZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpkcmF3VXBkYXRlQ2h1bmtJbnRvQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9ndGsvV2ViVmlld1dpZGdldC5jcHA6IFJlbW92ZWQuCisKIDIwMTEtMDQt
MTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDM3ZmVlZjkuLmJmZTJmYjAgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAx
MS0wNC0xNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVt
ZW50IFdLVmlldyB3aXRoIGEgY29tbW9uIHdpZGdldCB0aGF0IGNhbiBiZSB1c2VkIGJ5IGJvdGgg
QyBhbmQgZ3RrIEFQSXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU3OTQ0CisKKyAgICAgICAgV0tWaWV3IGlzIG5vdyBhIEd0a1dpZGdldCBzbyBpdCBj
YW4gYmUgdXNlZCBhcyBhIHdpZGdldC4KKworICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9tYWlu
LmM6CisgICAgICAgIChhcmd1bWVudFRvVVJMKToKKwogMjAxMS0wNC0xNCAgQWxvayBQcml5YWRh
cnNoaSAgPGFsb2twQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJh
cnRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAwMmUyOGQwLi5iZjg3ZmZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbQpAQCAtMjkzLDYgKzI5Myw3IEBAIGxpYldlYktpdDJfbGFfU09VUkNFUyA9IFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLQVBJQ2FzdEd0ay5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV2ViS2l0Mi5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tBUElDYXN0LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyLmggXApAQCAtMzU0LDYgKzM1NSwxMSBAQCBsaWJXZWJLaXQyX2xhX1NP
VVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VDYWNo
ZU1hbmFnZXIuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VD
YWNoZU1hbmFnZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2NwcC9XS1Jl
dGFpblB0ci5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50
SW1wbC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJ
bXBsLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlv
bi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uRGVj
aXNpb25MaXN0ZW5lci5jcHAgXApAQCAtMzgwLDEyICszODYsOCBAQCBsaWJXZWJLaXQyX2xhX1NP
VVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNw
cCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JH
dGsuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdXaWRnZXQuY3Bw
IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdXaWRnZXQuaCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlByZWZlcmVuY2VzR3RrLmNwcCBcCi0JU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJWaWV3LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9n
dGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
dW5jaGVyL2d0ay9UaHJlYWRMYXVuY2hlckd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuY3BwIFwKQEAgLTcwNyw2ICs3MDksNyBAQCBs
aWJXZWJLaXQyX2xhX0NQUEZMQUdTID0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9jcHAg
XAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrIFwKIAktSSQo
c3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0aGVudGljYXRpb24gXAogCS1JJChz
cmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Eb3dubG9hZHMgXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS0FQSUNhc3RHdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9ndGsvV0tBUElDYXN0R3RrLmgKaW5kZXggNzljMTEzMy4uZjc5NWFlMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS0FQSUNhc3RH
dGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLQVBJQ2FzdEd0
ay5oCkBAIC0zMSwxMSArMzEsMTEgQEAKICNlcnJvciAiUGxlYXNlICNpbmNsdWRlIFwiV0tBUElD
YXN0LmhcIiBpbnN0ZWFkIG9mIHRoaXMgZmlsZSBkaXJlY3RseS4iCiAjZW5kaWYKIAotbmFtZXNw
YWNlIFdlYktpdCB7Cit0eXBlZGVmIHN0cnVjdCBfV0tWaWV3IFdLVmlldzsKIAotY2xhc3MgV2Vi
VmlldzsKK25hbWVzcGFjZSBXZWJLaXQgewogCi1XS19BRERfQVBJX01BUFBJTkcoV0tWaWV3UmVm
LCBXZWJWaWV3KQorV0tfQUREX0FQSV9NQVBQSU5HKFdLVmlld1JlZiwgV0tWaWV3KQogCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNwcAppbmRleCBl
M2Q2YzY5Li41YzgzZDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvZ3RrL1dLVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0
ay9XS1ZpZXcuY3BwCkBAIC0yOCwzMiArMjgsMzIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJXS1ZpZXcuaCIKIAotI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldl
YlZpZXcuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXS1ZpZXdQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQorR19ERUZJTkVfVFlQRShX
S1ZpZXcsIHdrX3ZpZXcsIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0UpCisKK3N0YXRpYyB2b2lk
IHdrX3ZpZXdfY2xhc3NfaW5pdChXS1ZpZXdDbGFzcyogdmlld0NsYXNzKQogewotICAgIFJlZlB0
cjxXZWJWaWV3PiB2aWV3ID0gV2ViVmlldzo6Y3JlYXRlKHRvSW1wbChjb250ZXh0UmVmKSwgdG9J
bXBsKHBhZ2VHcm91cFJlZikpOwotICAgIHJldHVybiB0b0FQSSh2aWV3LnJlbGVhc2UoKS5sZWFr
UmVmKCkpOwogfQogCi1HdGtXaWRnZXQqIFdLVmlld0dldFdpbmRvdyhXS1ZpZXdSZWYgdmlld1Jl
ZikKK3N0YXRpYyB2b2lkIHdrX3ZpZXdfaW5pdChXS1ZpZXcqIHZpZXcpCiB7Ci0gICAgcmV0dXJu
IHRvSW1wbCh2aWV3UmVmKS0+d2luZG93KCk7CiB9CiAKLVdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdl
KFdLVmlld1JlZiB2aWV3UmVmKQorLy8gUHVibGljIEFQSQorV0tQYWdlUmVmIFdLVmlld0dldFBh
Z2UoV0tWaWV3UmVmIHZpZXcpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbCh2aWV3UmVmKS0+
cGFnZSgpKTsKKyAgICByZXR1cm4gdG9BUEkod2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJ
VF9XRUJfVklFV19CQVNFKHRvSW1wbCh2aWV3KSkpKTsKIH0KIAotV0tVUkxSZWYgV0tVUkxDcmVh
dGVXaXRoVVJMKGNvbnN0IGNoYXIqIHVybCkKK1dLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICBy
ZXR1cm4gdG9Db3BpZWRVUkxBUEkoU3RyaW5nSW1wbDo6Y3JlYXRlKHVybCkubGVha1JlZigpKTsK
KyAgICBXS1ZpZXcqIHZpZXcgPSBXS19WSUVXKGdfb2JqZWN0X25ldyhXS19UWVBFX1ZJRVcsIDAp
KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JB
U0UodmlldyksIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZik7CisgICAgcmV0dXJuIHRvQVBJKHZp
ZXcpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9X
S1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmgKaW5k
ZXggODJlNTVhYi4uZGQ2MGI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2d0ay9XS1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
Z3RrL1dLVmlldy5oCkBAIC0yOSwyMCArMjksMTYgQEAKICNkZWZpbmUgV0tWaWV3X2gKIAogI2lu
Y2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgogCiAjaWZkZWYg
X19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLVdLX0VYUE9SVCBXS1ZpZXdSZWYg
V0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXApOwotCi1XS19FWFBPUlQgR3RrV2lkZ2V0KiBXS1ZpZXdHZXRXaW5kb3coV0tWaWV3UmVmIHZp
ZXcpOwordHlwZWRlZiBzdHJ1Y3QgX1dLVmlldyBXS1ZpZXc7CiAKK1dLX0VYUE9SVCBXS1ZpZXdS
ZWYgV0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXApOwogV0tfRVhQT1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3
KTsKIAotV0tfRVhQT1JUIFdLVVJMUmVmIFdLVVJMQ3JlYXRlV2l0aFVSTChjb25zdCBjaGFyKik7
Ci0KICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjBiZWI4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlld1ByaXZhdGUuaApAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdLVmlld1ByaXZhdGVfaAorI2RlZmluZSBXS1ZpZXdQcml2YXRl
X2gKKworI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCisjaW5jbHVkZSAid2Via2l0ZGVm
aW5lcy5oIgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXS19UWVBFX1ZJRVcgICAgICAgICAgICAod2tfdmlld19nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXS19WSUVXKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdLX1RZUEVfVklFVywgV0tWaWV3KSkKKyNkZWZpbmUgV0tfVklFV19DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXS19UWVBFX1ZJRVcsIFdLVmll
d0NsYXNzKSkKKyNkZWZpbmUgV0tfSVNfVklFVyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXS19UWVBFX1ZJRVcpKQorI2RlZmluZSBXS19JU19WSUVXX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdLX1RZUEVfVklF
VykpCisjZGVmaW5lIFdLX1ZJRVdfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X0NMQVNTKChvYmopLCAgV0tfVFlQRV9WSUVXLCBXS1ZpZXdDbGFzcykpCisKK3R5cGVkZWYgc3Ry
dWN0IF9XS1ZpZXdDbGFzcyAgIFdLVmlld0NsYXNzOworCitzdHJ1Y3QgX1dLVmlldyB7CisgICAg
V2ViS2l0V2ViVmlld0Jhc2UgcGFyZW50OworfTsKKworc3RydWN0IF9XS1ZpZXdDbGFzcyB7Cisg
ICAgV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyBwYXJlbnQ7Cit9OworCitHVHlwZSB3a192aWV3X2dl
dF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gV0tWaWV3X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzFiYWZkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3Bw
CkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUGFnZUNsaWVudEltcGwuaCIKKworI2luY2x1ZGUgIkNodW5rZWRVcGRhdGVEcmF3aW5n
QXJlYVByb3h5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJD
b250ZXh0TWVudVByb3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJ
bXBsKEd0a1dpZGdldCogd2ViVmlldykKKyAgICA6IG1fdmlldyh3ZWJWaWV3KQoreworfQorCitQ
YWdlQ2xpZW50SW1wbDo6flBhZ2VDbGllbnRJbXBsKCkKK3sKK30KKworUGFzc093blB0cjxEcmF3
aW5nQXJlYVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpCit7
CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JB
U0UobV92aWV3KTsKKyAgICByZXR1cm4gQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmNy
ZWF0ZSh3ZWJWaWV3QmFzZSwgd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKHdlYlZpZXdCYXNlKSk7
Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZGlzcGxheVZpZXcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OnNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
c2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1dlYkNvcmU6OkludFNpemUgUGFnZUNsaWVudEltcGw6
OnZpZXdTaXplKCkKK3sKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisgICAgZ3RrX3dp
ZGdldF9nZXRfYWxsb2NhdGlvbihtX3ZpZXcsICZhbGxvY2F0aW9uKTsKKyAgICByZXR1cm4gSW50
U2l6ZShhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7Cit9CisKK2Jvb2wgUGFn
ZUNsaWVudEltcGw6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9j
dXNlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3VmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3
SW5XaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRDcmFzaCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVsYXVuY2hQcm9jZXNz
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp0
YWtlRm9jdXMoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjp0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEN1
cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICAvLyBbR1RLXSBXaWRnZXQ6OnNldEN1
cnNvcigpIGdldHMgY2FsbGVkIGZyZXF1ZW50bHkKKyAgICAvLyBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM4OAorICAgIC8vIFNldHRpbmcgdGhlIGN1cnNvciBtYXkg
YmUgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiBpbiBzb21lIGJhY2tlbmRzLAorICAgIC8vIHNvIGRv
bid0IHJlLXNldCB0aGUgY3Vyc29yIGlmIGl0J3MgYWxyZWFkeSBzZXQgdG8gdGhlIHRhcmdldCB2
YWx1ZS4KKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3Zp
ZXcpOworICAgIEdka0N1cnNvciogY3VycmVudEN1cnNvciA9IGdka193aW5kb3dfZ2V0X2N1cnNv
cih3aW5kb3cpOworICAgIEdka0N1cnNvciogbmV3Q3Vyc29yID0gY3Vyc29yLnBsYXRmb3JtQ3Vy
c29yKCkuZ2V0KCk7CisgICAgaWYgKGN1cnJlbnRDdXJzb3IgIT0gbmV3Q3Vyc29yKQorICAgICAg
ICBnZGtfd2luZG93X3NldF9jdXJzb3Iod2luZG93LCBuZXdDdXJzb3IpOworfQorCit2b2lkIFBh
Z2VDbGllbnRJbXBsOjpzZXRWaWV3cG9ydEFyZ3VtZW50cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9y
dEFyZ3VtZW50cyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xp
ZW50SW1wbDo6cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJv
eHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmNhblVuZG9SZWRv
KFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVVuZG9SZWRv
KFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitGbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZs
b2F0UmVjdCYgdmlld1JlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
dmlld1JlY3Q7Cit9CisKK0Zsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvVXNlclNw
YWNlKGNvbnN0IEZsb2F0UmVjdCYgdmlld1JlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gdmlld1JlY3Q7Cit9CisKK0ludFJlY3QgUGFnZUNsaWVudEltcGw6OndpbmRv
d1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0
aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFu
ZGxlZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjpkaWROb3RIYW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVu
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQYXNzUmVmUHRyPFdlYlBvcHVwTWVu
dVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitQYXNzUmVm
UHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVDb250ZXh0TWVu
dVByb3h5KFdlYlBhZ2VQcm94eSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RmluZEluZGljYXRvcihQYXNzUmVm
UHRyPEZpbmRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OnBhZ2VEaWRFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnBhZ2VEaWRMZWF2ZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpn
ZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQm
IGV2ZW50LCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBjb21tYW5kTGlzdCkKK3sKKyAgICB3ZWJraXRX
ZWJWaWV3QmFzZUdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoV0VCS0lUX1dFQl9WSUVXX0JB
U0UobV92aWV3KSwgZXZlbnQsIGNvbW1hbmRMaXN0KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1w
bDo6ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShib29sIHVzZUN1c3RvbVJlcHJlc2VudGF0aW9u
KQoreworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1
c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0
IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKQoreworfQorCitkb3VibGUgUGFnZUNsaWVudEltcGw6
OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3VzdG9tUmVw
cmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpwYWdlQ2xvc2VkKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDaGFuZ2VTY3JvbGxiYXJzRm9y
TWFpbkZyYW1lKCkgY29uc3QKK3sKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6Zmxhc2hCYWNr
aW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZmluZFN0cmluZ0luQ3VzdG9tUmVw
cmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmNvdW50U3RyaW5n
TWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMs
IHVuc2lnbmVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFn
ZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGll
bnRJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjMzY0ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGll
bnRJbXBsLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAy
MDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFnZUNsaWVu
dEltcGxfaAorI2RlZmluZSBQYWdlQ2xpZW50SW1wbF9oCisKKyNpbmNsdWRlICJQYWdlQ2xpZW50
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRHJhd2luZ0FyZWFQcm94eTsKK2NsYXNzIFdlYlBh
Z2VOYW1lc3BhY2U7CisKK2NsYXNzIFBhZ2VDbGllbnRJbXBsIDogcHVibGljIFBhZ2VDbGllbnQg
eworcHVibGljOgorICAgIH5QYWdlQ2xpZW50SW1wbCgpOworICAgIHN0YXRpYyBQYXNzT3duUHRy
PFBhZ2VDbGllbnRJbXBsPiBjcmVhdGUoR3RrV2lkZ2V0KiB3ZWJWaWV3KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlQ2xpZW50SW1wbCh3ZWJWaWV3KSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIFBhZ2VDbGllbnRJbXBsKEd0a1dpZGdldCogd2ViVmlldyk7CisKKyAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQ
cm94eSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGxheVZpZXcoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsVmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50U2l6ZSB2aWV3U2l6ZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdXaW5kb3dBY3Rp
dmUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3Rm9jdXNlZCgpOworICAgIHZpcnR1YWwgYm9v
bCBpc1ZpZXdWaXNpYmxlKCk7CisgICAgdmlydHVhbCBib29sIGlzVmlld0luV2luZG93KCk7Cisg
ICAgdmlydHVhbCB2b2lkIHByb2Nlc3NEaWRDcmFzaCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWxhdW5jaFByb2Nlc3MoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZUNsb3NlZCgpOworICAgIHZp
cnR1YWwgdm9pZCB0YWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB0
b29sVGlwQ2hhbmdlZChjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnRBcmd1bWVudHMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVm
UHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOworICAg
IHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOworICAgIHZpcnR1YWwgYm9vbCBj
YW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOworICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3Bh
Y2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRS
ZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9v
bCB3YXNFdmVudEhhbmRsZWQpOworICAgIHZpcnR1YWwgdm9pZCBkaWROb3RIYW5kbGVLZXlFdmVu
dChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Jik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKTsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gY3JlYXRlQ29udGV4
dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmluZEluZGlj
YXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQpOworICAgIHZpcnR1
YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lKCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6
SW50UmVjdD4mIHVwZGF0ZVJlY3RzKTsKKyAgICB2aXJ0dWFsIGZsb2F0IHVzZXJTcGFjZVNjYWxl
RmFjdG9yKCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRFZGl0b3JD
b21tYW5kc0ZvcktleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0b3I8
V1RGOjpTdHJpbmc+Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbmRTdHJpbmdJbkN1c3RvbVJlcHJl
c2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCk7CisgICAgdmly
dHVhbCB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3Qg
U3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpOworICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCk7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFp
bkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVwcmVzZW50YXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYg
c3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsKKyAgICB2
aXJ0dWFsIGRvdWJsZSBjdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSk7CisKKyAg
ICBHdGtXaWRnZXQqIG1fdmlldzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gUGFnZUNsaWVudEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjQwNTNmMzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTAsMCArMSw2NDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3
QmFzZS5oIgorCisjaW5jbHVkZSAiR093blB0ckd0ay5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25p
bmcuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIlJl
ZlB0ckNhaXJvLmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkV2ZW50
RmFjdG9yeS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCisj
aW5jbHVkZSA8V2ViS2l0Mi9XS0NvbnRleHQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFz
ZUVkaXRvckluaXQoV2ViS2l0V2ViVmlld0Jhc2UqKTsKKworR19ERUZJTkVfQUJTVFJBQ1RfVFlQ
RShXZWJLaXRXZWJWaWV3QmFzZSwgd2Via2l0X3dlYl92aWV3X2Jhc2UsIEdUS19UWVBFX0NPTlRB
SU5FUikKKworc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgeworICAgIE93blB0cjxQ
YWdlQ2xpZW50SW1wbD4gcGFnZUNsaWVudDsKKyAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBwYWdl
OworICAgIGdib29sZWFuIGlzUGFnZUFjdGl2ZTsKKworICAgIEd0a0lNQ29udGV4dCogaW1Db250
ZXh0OworICAgIGdpbnQgY3VycmVudENsaWNrQ291bnQ7CisgICAgSW50UG9pbnQgcHJldmlvdXND
bGlja1BvaW50OworICAgIGd1aW50IHByZXZpb3VzQ2xpY2tCdXR0b247CisgICAgZ3VpbnQzMiBw
cmV2aW91c0NsaWNrVGltZTsKKworICAgIC8vIEVkaXRvcgorICAgIEdSZWZQdHI8R3RrV2lkZ2V0
PiBlZGl0b3JXaWRnZXQ7CisgICAgVmVjdG9yPFdURjo6U3RyaW5nPiBwZW5kaW5nRWRpdG9yQ29t
bWFuZHM7Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemUoR3RrV2lk
Z2V0KiB3aWRnZXQpCit7CisgICAgZ3RrX3dpZGdldF9zZXRfcmVhbGl6ZWQod2lkZ2V0LCBUUlVF
KTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9h
bGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRpb24pOworCisgICAgR2RrV2luZG93QXR0ciBhdHRy
aWJ1dGVzOworICAgIGF0dHJpYnV0ZXMud2luZG93X3R5cGUgPSBHREtfV0lORE9XX0NISUxEOwor
ICAgIGF0dHJpYnV0ZXMueCA9IGFsbG9jYXRpb24ueDsKKyAgICBhdHRyaWJ1dGVzLnkgPSBhbGxv
Y2F0aW9uLnk7CisgICAgYXR0cmlidXRlcy53aWR0aCA9IGFsbG9jYXRpb24ud2lkdGg7CisgICAg
YXR0cmlidXRlcy5oZWlnaHQgPSBhbGxvY2F0aW9uLmhlaWdodDsKKyAgICBhdHRyaWJ1dGVzLndj
bGFzcyA9IEdES19JTlBVVF9PVVRQVVQ7CisgICAgYXR0cmlidXRlcy52aXN1YWwgPSBndGtfd2lk
Z2V0X2dldF92aXN1YWwod2lkZ2V0KTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGF0
dHJpYnV0ZXMuY29sb3JtYXAgPSBndGtfd2lkZ2V0X2dldF9jb2xvcm1hcCh3aWRnZXQpOworI2Vu
ZGlmCisgICAgYXR0cmlidXRlcy5ldmVudF9tYXNrID0gR0RLX1ZJU0lCSUxJVFlfTk9USUZZX01B
U0sKKyAgICAgICAgfCBHREtfRVhQT1NVUkVfTUFTSworICAgICAgICB8IEdES19CVVRUT05fUFJF
U1NfTUFTSworICAgICAgICB8IEdES19CVVRUT05fUkVMRUFTRV9NQVNLCisgICAgICAgIHwgR0RL
X1BPSU5URVJfTU9USU9OX01BU0sKKyAgICAgICAgfCBHREtfS0VZX1BSRVNTX01BU0sKKyAgICAg
ICAgfCBHREtfS0VZX1JFTEVBU0VfTUFTSworICAgICAgICB8IEdES19CVVRUT05fTU9USU9OX01B
U0sKKyAgICAgICAgfCBHREtfQlVUVE9OMV9NT1RJT05fTUFTSworICAgICAgICB8IEdES19CVVRU
T04yX01PVElPTl9NQVNLCisgICAgICAgIHwgR0RLX0JVVFRPTjNfTU9USU9OX01BU0s7CisKKyAg
ICBnaW50IGF0dHJpYnV0ZXNNYXNrID0gR0RLX1dBX1ggfCBHREtfV0FfWSB8IEdES19XQV9WSVNV
QUw7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBhdHRyaWJ1dGVzTWFzayB8PSBHREtf
V0FfQ09MT1JNQVA7CisjZW5kaWYKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGdka193aW5kb3df
bmV3KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cod2lkZ2V0KSwgJmF0dHJpYnV0ZXMsIGF0
dHJpYnV0ZXNNYXNrKTsKKyAgICBndGtfd2lkZ2V0X3NldF93aW5kb3cod2lkZ2V0LCB3aW5kb3cp
OworICAgIGdka193aW5kb3dfc2V0X3VzZXJfZGF0YSh3aW5kb3csIHdpZGdldCk7CisKKyNpZmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgorI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDIwLCAwKQorICAg
IGd0a193aWRnZXRfc3R5bGVfYXR0YWNoKHdpZGdldCk7CisjZWxzZQorICAgIHdpZGdldC0+c3R5
bGUgPSBndGtfc3R5bGVfYXR0YWNoKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIHdpbmRv
dyk7CisjZW5kaWYKKyAgICBndGtfc3R5bGVfc2V0X2JhY2tncm91bmQoZ3RrX3dpZGdldF9nZXRf
c3R5bGUod2lkZ2V0KSwgd2luZG93LCBHVEtfU1RBVEVfTk9STUFMKTsKKyNlbHNlCisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2V0X2JhY2tncm91bmQoZ3RrX3dpZGdldF9nZXRfc3R5bGVfY29udGV4
dCh3aWRnZXQpLCB3aW5kb3cpOworI2VuZGlmCisKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
Vmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworICAgIGd0a19pbV9jb250
ZXh0X3NldF9jbGllbnRfd2luZG93KHByaXYtPmltQ29udGV4dCwgd2luZG93KTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDb250YWluZXJBZGQoR3RrQ29udGFpbmVyKiBjb250
YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIGd0a193aWRnZXRfc2V0X3BhcmVudCh3
aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlRmluYWxpemUoR09iamVjdCogZ09iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3
QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRShnT2JqZWN0KTsKKyAgICBX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKworICAg
IGlmIChwcml2LT5pbUNvbnRleHQpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+aW1D
b250ZXh0KTsKKyAgICAgICAgcHJpdi0+aW1Db250ZXh0ID0gMDsKKyAgICB9CisKKyAgICBwcml2
LT5wYWdlLT5jbG9zZSgpOworCisgICAgZGVsZXRlIHByaXY7CisgICAgd2ViVmlld0Jhc2UtPnBy
aXYgPSAwOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUoZ09iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
dmlld19iYXNlX2luaXQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQoreworICAgIFdl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IG5ldyBXZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUoKTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdiA9IHByaXY7CisKKyAgICBwcml2LT5jdXJyZW50
Q2xpY2tDb3VudCA9IDA7CisgICAgcHJpdi0+cHJldmlvdXNDbGlja0J1dHRvbiA9IDA7CisgICAg
cHJpdi0+cHJldmlvdXNDbGlja1RpbWUgPSAwOworCisgICAgZ3RrX3dpZGdldF9zZXRfY2FuX2Zv
Y3VzKEdUS19XSURHRVQod2ViVmlld0Jhc2UpLCBUUlVFKTsKKyAgICBwcml2LT5pbUNvbnRleHQg
PSBndGtfaW1fbXVsdGljb250ZXh0X25ldygpOworICAgIHByaXYtPnBhZ2VDbGllbnQgPSBQYWdl
Q2xpZW50SW1wbDo6Y3JlYXRlKEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsKKworICAgIHdlYmtp
dFdlYlZpZXdCYXNlRWRpdG9ySW5pdCh3ZWJWaWV3QmFzZSk7Cit9CisKKyNpZmRlZiBHVEtfQVBJ
X1ZFUlNJT05fMgorc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRXhwb3NlKEd0a1dp
ZGdldCogd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSogZXZlbnQpCit7CisgICAgV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKyAgICBH
ZGtSZWN0YW5nbGUgY2xpcFJlY3Q7CisgICAgZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChldmVudC0+
cmVnaW9uLCAmY2xpcFJlY3QpOworCisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0
X2dldF93aW5kb3cod2lkZ2V0KTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihn
ZGtfY2Fpcm9fY3JlYXRlKHdpbmRvdykpOworCisgICAgcHJpdi0+cGFnZS0+ZHJhd2luZ0FyZWEo
KS0+cGFpbnQoY2xpcFJlY3QsIGNyKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKyNlbHNlCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmF3KEd0a1dpZGdldCogd2lkZ2V0LCBj
YWlyb190KiBjcikKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJL
SVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSog
cHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKKwor
ICAgIGlmICghZ2RrX2NhaXJvX2dldF9jbGlwX3JlY3RhbmdsZShjciwgJmNsaXBSZWN0KSkKKyAg
ICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcHJpdi0+cGFnZS0+ZHJhd2luZ0FyZWEoKS0+cGFp
bnQoY2xpcFJlY3QsIGNyKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgorCitzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNpemVBbGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdldCwg
R3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
Vmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworCisgICAgR1RLX1dJREdF
VF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRl
KHdpZGdldCwgYWxsb2NhdGlvbik7CisgICAgcHJpdi0+cGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0
U2l6ZShJbnRTaXplKGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpLCBJbnRT
aXplKCkpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VGb2N1c0luRXZl
bnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMqIGV2ZW50KQoreworICAgIFdlYktp
dFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7
CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7
CisKKyAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwod2lk
Z2V0KTsKKyAgICBpZiAoZ3RrX3dpZGdldF9pc190b3BsZXZlbCh0b3BsZXZlbCkgJiYgZ3RrX3dp
bmRvd19oYXNfdG9wbGV2ZWxfZm9jdXMoR1RLX1dJTkRPVyh0b3BsZXZlbCkpKSB7CisgICAgICAg
IGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKHByaXYtPmltQ29udGV4dCk7CisgICAgICAgIGlmICgh
cHJpdi0+aXNQYWdlQWN0aXZlKSB7CisgICAgICAgICAgICBwcml2LT5pc1BhZ2VBY3RpdmUgPSBU
UlVFOworICAgICAgICAgICAgcHJpdi0+cGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQ
cm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPmZv
Y3VzX2luX2V2ZW50KHdpZGdldCwgZXZlbnQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
V2ViVmlld0Jhc2VGb2N1c091dEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEZvY3Vz
KiBldmVudCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRf
V0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJp
diA9IHdlYlZpZXdCYXNlLT5wcml2OworCisgICAgcHJpdi0+aXNQYWdlQWN0aXZlID0gRkFMU0U7
CisgICAgcHJpdi0+cGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld1dp
bmRvd0lzQWN0aXZlKTsKKyAgICBpZiAocHJpdi0+aW1Db250ZXh0KQorICAgICAgICBndGtfaW1f
Y29udGV4dF9mb2N1c19vdXQocHJpdi0+aW1Db250ZXh0KTsKKworICAgIHJldHVybiBHVEtfV0lE
R0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPmZvY3VzX291dF9l
dmVudCh3aWRnZXQsIGV2ZW50KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdC
YXNlS2V5UHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50KQor
eworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19C
QVNFKHdpZGdldCk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmll
d0Jhc2UtPnByaXY7CisKKyAgICBwcml2LT5wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSkpOwor
CisgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfcGFyZW50
X2NsYXNzKS0+a2V5X3ByZXNzX2V2ZW50KHdpZGdldCwgZXZlbnQpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0V2ViVmlld0Jhc2VLZXlSZWxlYXNlRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQs
IEdka0V2ZW50S2V5KiBldmVudCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jh
c2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFdlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworCisgICAgaWYgKGd0a19pbV9jb250
ZXh0X2ZpbHRlcl9rZXlwcmVzcyhwcml2LT5pbUNvbnRleHQsIGV2ZW50KSkKKyAgICAgICAgcmV0
dXJuIFRSVUU7CisKKyAgICBwcml2LT5wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSkpOworCisg
ICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfcGFyZW50X2Ns
YXNzKS0+a2V5X3JlbGVhc2VfZXZlbnQod2lkZ2V0LCBldmVudCk7Cit9CisKKy8vIENvcGllZCBm
cm9tIHdlYmtpdHdlYnZpZXcuY3BwCitzdGF0aWMgZ3VpbnQzMiBnZXRFdmVudFRpbWUoR2RrRXZl
bnQqIGV2ZW50KQoreworICAgIGd1aW50MzIgdGltZSA9IGdka19ldmVudF9nZXRfdGltZShldmVu
dCk7CisgICAgaWYgKHRpbWUpCisgICAgICAgIHJldHVybiB0aW1lOworCisgICAgLy8gUmVhbCBl
dmVudHMgYWx3YXlzIGhhdmUgYSBub24temVybyB0aW1lLCBidXQgZXZlbnRzIHN5bnRoZXNpemVk
CisgICAgLy8gYnkgdGhlIERSVCBkbyBub3QgYW5kIHdlIG11c3QgY2FsY3VsYXRlIGEgdGltZSBt
YW51YWxseS4gVGhpcyB0aW1lCisgICAgLy8gaXMgbm90IGNhbGN1bGF0ZWQgaW4gdGhlIERSVCwg
YmVjYXVzZSBHVEsrIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoCisgICAgLy8gYW55dGhpbmcgb3Ro
ZXIgdGhhbiBHREtfQ1VSUkVOVF9USU1FIG9uIHN5bnRoZXNpemVkIGV2ZW50cy4KKyAgICBHVGlt
ZVZhbCB0aW1lVmFsdWU7CisgICAgZ19nZXRfY3VycmVudF90aW1lKCZ0aW1lVmFsdWUpOworICAg
IHJldHVybiAodGltZVZhbHVlLnR2X3NlYyAqIDEwMDApICsgKHRpbWVWYWx1ZS50dl91c2VjIC8g
MTAwMCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblByZXNz
RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBidXR0b25FdmVudCkKK3sK
KyAgICBpZiAoYnV0dG9uRXZlbnQtPmJ1dHRvbiA9PSAzKSB7CisgICAgICAgIC8vIEZJWE1FOiBb
R1RLXSBBZGQgY29udGV4dCBtZW51IHN1cHBvcnQgZm9yIFdlYmtpdDIuCisgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDgyNworICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgZ3RrX3dp
ZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7CisKKyAgICAvLyBGb3IgZG91YmxlIGFuZCB0cmlwbGUg
Y2xpY2tzIEdESyBzZW5kcyBib3RoIGEgbm9ybWFsIGJ1dHRvbiBwcmVzcyBldmVudAorICAgIC8v
IGFuZCBhIHNwZWNpZmljIHR5cGUgKGxpa2UgR0RLXzJCVVRUT05fUFJFU1MpLiBJZiB3ZSBkZXRl
Y3QgYSBzcGVjaWFsIHByZXNzCisgICAgLy8gY29taW5nIHVwLCBpZ25vcmUgdGhpcyBldmVudCBh
cyBpdCBjZXJ0YWlubHkgZ2VuZXJhdGVkIHRoZSBkb3VibGUgb3IgdHJpcGxlCisgICAgLy8gY2xp
Y2suIFRoZSBjb25zZXF1ZW5jZSBvZiBub3QgZWF0aW5nIHRoaXMgZXZlbnQgaXMgdHdvIERPTSBi
dXR0b24gcHJlc3MgZXZlbnRzCisgICAgLy8gYXJlIGdlbmVyYXRlZC4KKyAgICBHT3duUHRyPEdk
a0V2ZW50PiBuZXh0RXZlbnQoZ2RrX2V2ZW50X3BlZWsoKSk7CisgICAgaWYgKG5leHRFdmVudCAm
JiAobmV4dEV2ZW50LT5hbnkudHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUyB8fCBuZXh0RXZlbnQt
PmFueS50eXBlID09IEdES18zQlVUVE9OX1BSRVNTKSkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisK
KyAgICBnaW50IGRvdWJsZUNsaWNrRGlzdGFuY2UgPSAyNTA7CisgICAgZ2ludCBkb3VibGVDbGlj
a1RpbWUgPSA1OworICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRf
Zm9yX3NjcmVlbihndGtfd2lkZ2V0X2dldF9zY3JlZW4od2lkZ2V0KSk7CisgICAgZ19vYmplY3Rf
Z2V0KHNldHRpbmdzLAorICAgICAgICAgICAgICAgICAiZ3RrLWRvdWJsZS1jbGljay1kaXN0YW5j
ZSIsICZkb3VibGVDbGlja0Rpc3RhbmNlLAorICAgICAgICAgICAgICAgICAiZ3RrLWRvdWJsZS1j
bGljay10aW1lIiwgJmRvdWJsZUNsaWNrVGltZSwgTlVMTCk7CisKKyAgICAvLyBHVEsrIG9ubHkg
Y291bnRzIHVwIHRvIHRyaXBsZSBjbGlja3MsIGJ1dCBXZWJDb3JlIHdhbnRzIHRvIGtub3cgYWJv
dXQKKyAgICAvLyBxdWFkcnVwbGUgY2xpY2tzLCBxdWludHVwbGUgY2xpY2tzLCBhZCBpbmZpbml0
dW0uIEhlcmUsIHdlIHJlcGxpY2F0ZSB0aGUKKyAgICAvLyBHREsgbG9naWMgZm9yIGNvdW50aW5n
IGNsaWNrcy4KKyAgICBHZGtFdmVudCogZXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+
KGJ1dHRvbkV2ZW50KSk7CisgICAgZ3VpbnQzMiBldmVudFRpbWUgPSBnZXRFdmVudFRpbWUoZXZl
bnQpOworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklF
V19CQVNFKHdpZGdldCk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2Vi
Vmlld0Jhc2UtPnByaXY7CisgICAgaWYgKChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVT
UyB8fCBldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKKyAgICAgICAgfHwgKChhYnMo
YnV0dG9uRXZlbnQtPnggLSBwcml2LT5wcmV2aW91c0NsaWNrUG9pbnQueCgpKSA8IGRvdWJsZUNs
aWNrRGlzdGFuY2UpCisgICAgICAgICAgICAmJiAoYWJzKGJ1dHRvbkV2ZW50LT55IC0gcHJpdi0+
cHJldmlvdXNDbGlja1BvaW50LnkoKSkgPCBkb3VibGVDbGlja0Rpc3RhbmNlKQorICAgICAgICAg
ICAgJiYgKGV2ZW50VGltZSAtIHByaXYtPnByZXZpb3VzQ2xpY2tUaW1lIDwgc3RhdGljX2Nhc3Q8
Z3VpbnQ+KGRvdWJsZUNsaWNrVGltZSkpCisgICAgICAgICAgICAmJiAoYnV0dG9uRXZlbnQtPmJ1
dHRvbiA9PSBwcml2LT5wcmV2aW91c0NsaWNrQnV0dG9uKSkpCisgICAgICAgIHByaXYtPmN1cnJl
bnRDbGlja0NvdW50Kys7CisgICAgZWxzZQorICAgICAgICBwcml2LT5jdXJyZW50Q2xpY2tDb3Vu
dCA9IDE7CisKKyAgICBwcml2LT5wYWdlLT5oYW5kbGVNb3VzZUV2ZW50KFdlYkV2ZW50RmFjdG9y
eTo6Y3JlYXRlV2ViTW91c2VFdmVudChldmVudCwgcHJpdi0+Y3VycmVudENsaWNrQ291bnQpKTsK
KworICAgIGdkb3VibGUgeCwgeTsKKyAgICBnZGtfZXZlbnRfZ2V0X2Nvb3JkcyhldmVudCwgJngs
ICZ5KTsKKyAgICBwcml2LT5wcmV2aW91c0NsaWNrUG9pbnQgPSBJbnRQb2ludCh4LCB5KTsKKyAg
ICBwcml2LT5wcmV2aW91c0NsaWNrQnV0dG9uID0gYnV0dG9uRXZlbnQtPmJ1dHRvbjsKKyAgICBw
cml2LT5wcmV2aW91c0NsaWNrVGltZSA9IGV2ZW50VGltZTsKKworICAgIHJldHVybiBGQUxTRTsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUmVsZWFzZUV2ZW50
KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQpCit7CisgICAgV2ViS2l0
V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsK
KyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsK
KworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIHByaXYtPnBhZ2UtPmhh
bmRsZU1vdXNlRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KHJlaW50
ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksIDAgLyogY3VycmVudENsaWNrQ291bnQgKi8p
KTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZp
ZXdCYXNlU2Nyb2xsRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50U2Nyb2xsKiBldmVu
dCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJ
RVdfQkFTRSh3aWRnZXQpOworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdl
YlZpZXdCYXNlLT5wcml2OworCisgICAgcHJpdi0+cGFnZS0+aGFuZGxlV2hlZWxFdmVudChXZWJF
dmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQpKTsKKworICAgIHJldHVybiBG
QUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlTW90aW9uTm90aWZ5
RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCkKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRn
ZXQpOworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5w
cml2OworCisgICAgcHJpdi0+cGFnZS0+aGFuZGxlTW91c2VFdmVudChXZWJFdmVudEZhY3Rvcnk6
OmNyZWF0ZVdlYk1vdXNlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwg
MCAvKiBjdXJyZW50Q2xpY2tDb3VudCAqLykpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9jbGFzc19pbml0KFdlYktpdFdlYlZpZXdC
YXNlQ2xhc3MqIHdlYlZpZXdCYXNlQ2xhc3MpCit7CisgICAgR3RrV2lkZ2V0Q2xhc3MqIHdpZGdl
dENsYXNzID0gR1RLX1dJREdFVF9DTEFTUyh3ZWJWaWV3QmFzZUNsYXNzKTsKKyAgICB3aWRnZXRD
bGFzcy0+cmVhbGl6ZSA9IHdlYmtpdFdlYlZpZXdCYXNlUmVhbGl6ZTsKKyNpZmRlZiBHVEtfQVBJ
X1ZFUlNJT05fMgorICAgIHdpZGdldENsYXNzLT5leHBvc2VfZXZlbnQgPSB3ZWJraXRXZWJWaWV3
QmFzZUV4cG9zZTsKKyNlbHNlCisgICAgd2lkZ2V0Q2xhc3MtPmRyYXcgPSB3ZWJraXRXZWJWaWV3
QmFzZURyYXc7CisjZW5kaWYKKyAgICB3aWRnZXRDbGFzcy0+c2l6ZV9hbGxvY2F0ZSA9IHdlYmtp
dFdlYlZpZXdCYXNlU2l6ZUFsbG9jYXRlOworICAgIHdpZGdldENsYXNzLT5mb2N1c19pbl9ldmVu
dCA9IHdlYmtpdFdlYlZpZXdCYXNlRm9jdXNJbkV2ZW50OworICAgIHdpZGdldENsYXNzLT5mb2N1
c19vdXRfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUZvY3VzT3V0RXZlbnQ7CisgICAgd2lkZ2V0
Q2xhc3MtPmtleV9wcmVzc19ldmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlS2V5UHJlc3NFdmVudDsK
KyAgICB3aWRnZXRDbGFzcy0+a2V5X3JlbGVhc2VfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZUtl
eVJlbGVhc2VFdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+YnV0dG9uX3ByZXNzX2V2ZW50ID0gd2Vi
a2l0V2ViVmlld0Jhc2VCdXR0b25QcmVzc0V2ZW50OworICAgIHdpZGdldENsYXNzLT5idXR0b25f
cmVsZWFzZV9ldmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUmVsZWFzZUV2ZW50OworICAg
IHdpZGdldENsYXNzLT5zY3JvbGxfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZVNjcm9sbEV2ZW50
OworICAgIHdpZGdldENsYXNzLT5tb3Rpb25fbm90aWZ5X2V2ZW50ID0gd2Via2l0V2ViVmlld0Jh
c2VNb3Rpb25Ob3RpZnlFdmVudDsKKworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1Mod2ViVmlld0Jhc2VDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5maW5h
bGl6ZSA9IHdlYmtpdFdlYlZpZXdCYXNlRmluYWxpemU7CisKKyAgICBHdGtDb250YWluZXJDbGFz
cyogY29udGFpbmVyQ2xhc3MgPSBHVEtfQ09OVEFJTkVSX0NMQVNTKHdlYlZpZXdCYXNlQ2xhc3Mp
OworICAgIGNvbnRhaW5lckNsYXNzLT5hZGQgPSB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lckFk
ZDsKK30KKworLy8gRWRpdG9yCisvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgbW92
ZWQgdG8gYW5vdGhlciBmaWxlCit0eXBlZGVmIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4gSW50
Q29uc3RDaGFySGFzaE1hcDsKKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VBZGRQZW5k
aW5nRWRpdG9yQ29tbWFuZChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGNvbnN0IGNo
YXIgKmNvbW1hbmQpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2Vi
Vmlld0Jhc2UtPnByaXY7CisgICAgcHJpdi0+cGVuZGluZ0VkaXRvckNvbW1hbmRzLmFwcGVuZChX
VEY6OlN0cmluZyhjb21tYW5kKSk7Cit9CitzdGF0aWMgdm9pZCBiYWNrc3BhY2VDYWxsYmFjayhH
dGtXaWRnZXQqIHdpZGdldCwgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQoreworICAg
IGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJiYWNrc3BhY2UiKTsKKyAg
ICB3ZWJraXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHdlYlZpZXdCYXNlLCAi
RGVsZXRlQmFja3dhcmQiKTsKK30KKworc3RhdGljIHZvaWQgc2VsZWN0QWxsQ2FsbGJhY2soR3Rr
V2lkZ2V0KiB3aWRnZXQsIGdib29sZWFuIHNlbGVjdCwgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZp
ZXdCYXNlKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJz
ZWxlY3QtYWxsIik7CisgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRpdG9yQ29tbWFu
ZCh3ZWJWaWV3QmFzZSwgc2VsZWN0ID8gIlNlbGVjdEFsbCIgOiAiVW5zZWxlY3QiKTsKK30KKwor
c3RhdGljIHZvaWQgY3V0Q2xpcGJvYXJkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIFdlYktp
dFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9u
X2J5X25hbWUod2lkZ2V0LCAiY3V0LWNsaXBib2FyZCIpOworICAgIHdlYmtpdFdlYlZpZXdCYXNl
QWRkUGVuZGluZ0VkaXRvckNvbW1hbmQod2ViVmlld0Jhc2UsICJDdXQiKTsKK30KKworc3RhdGlj
IHZvaWQgY29weUNsaXBib2FyZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBXZWJLaXRXZWJW
aWV3QmFzZSogd2ViVmlld0Jhc2UpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9u
YW1lKHdpZGdldCwgImNvcHktY2xpcGJvYXJkIik7CisgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQ
ZW5kaW5nRWRpdG9yQ29tbWFuZCh3ZWJWaWV3QmFzZSwgIkNvcHkiKTsKK30KKworc3RhdGljIHZv
aWQgcGFzdGVDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYlZpZXdCYXNlKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFt
ZSh3aWRnZXQsICJwYXN0ZS1jbGlwYm9hcmQiKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFBl
bmRpbmdFZGl0b3JDb21tYW5kKHdlYlZpZXdCYXNlLCAiUGFzdGUiKTsKK30KKworc3RhdGljIHZv
aWQgdG9nZ2xlT3ZlcndyaXRlQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIFdlYktpdFdlYlZp
ZXdCYXNlKikKK3sKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRvZ2dsaW5nIHRoZSBvdmVyd3Jp
dGUgbW9kZSwgYnV0IHRoZSBkZWZhdWx0IGNhbGxiYWNrIGV4cGVjdHMKKyAgICAvLyB0aGUgR3Rr
VGV4dFZpZXcgdG8gaGF2ZSBhIGxheW91dCwgc28gd2UgaGFuZGxlIHRoaXMgc2lnbmFsIGp1c3Qg
dG8gc3RvcCBpdC4KKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAi
dG9nZ2xlLW92ZXJ3cml0ZSIpOworfQorCisvLyBHVEsrIHdpbGwgc3RpbGwgc2VuZCB0aGVzZSBz
aWduYWxzIHRvIHRoZSB3ZWIgdmlldy4gU28gd2UgY2FuIHNhZmVseSBzdG9wIHNpZ25hbAorLy8g
ZW1pc3Npb24gd2l0aG91dCBicmVha2luZyBhY2Nlc3NpYmlsaXR5Lgorc3RhdGljIHZvaWQgcG9w
dXBNZW51Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIFdlYktpdFdlYlZpZXdCYXNlKikKK3sK
KyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAicG9wdXAtbWVudSIp
OworfQorCitzdGF0aWMgdm9pZCBzaG93SGVscENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBX
ZWJLaXRXZWJWaWV3QmFzZSopCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1l
KHdpZGdldCwgInNob3ctaGVscCIpOworfQorCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZ3Rr
RGVsZXRlQ29tbWFuZHNbXVsyXSA9IHsKKyAgICB7ICJEZWxldGVCYWNrd2FyZCIsICAgICAgICAg
ICAgICAgIkRlbGV0ZUZvcndhcmQiICAgICAgICAgICAgICAgICAgICAgICAgfSwgLy8gQ2hhcmFj
dGVycworICAgIHsgIkRlbGV0ZVdvcmRCYWNrd2FyZCIsICAgICAgICAgICAiRGVsZXRlV29yZEZv
cndhcmQiICAgICAgICAgICAgICAgICAgICB9LCAvLyBXb3JkIGVuZHMKKyAgICB7ICJEZWxldGVX
b3JkQmFja3dhcmQiLCAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAgICAgICAgICAg
ICAgICAgfSwgLy8gV29yZHMKKyAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mTGluZSIsICAgICAg
IkRlbGV0ZVRvRW5kT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgfSwgLy8gTGluZXMKKyAgICB7
ICJEZWxldGVUb0JlZ2lubmluZ09mTGluZSIsICAgICAgIkRlbGV0ZVRvRW5kT2ZMaW5lIiAgICAg
ICAgICAgICAgICAgICAgfSwgLy8gTGluZSBlbmRzCisgICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdP
ZlBhcmFncmFwaCIsICJEZWxldGVUb0VuZE9mUGFyYWdyYXBoIiAgICAgICAgICAgICAgIH0sIC8v
IFBhcmFncmFwaCBlbmRzCisgICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCIsICJE
ZWxldGVUb0VuZE9mUGFyYWdyYXBoIiAgICAgICAgICAgICAgIH0sIC8vIFBhcmFncmFwaHMKKyAg
ICB7IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSAvLyBXaGl0ZXNwYWNlIChNLVwgaW4gRW1hY3MpCit9OworCitz
dGF0aWMgdm9pZCBkZWxldGVGcm9tQ3Vyc29yQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0
a0RlbGV0ZVR5cGUgZGVsZXRlVHlwZSwgZ2ludCBjb3VudCwgV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YlZpZXdCYXNlKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQs
ICJkZWxldGUtZnJvbS1jdXJzb3IiKTsKKyAgICBpbnQgZGlyZWN0aW9uID0gY291bnQgPiAwID8g
MSA6IDA7CisKKyAgICAvLyBFbnN1cmluZyB0aGF0IGRlbGV0ZVR5cGUgPD0gR19OX0VMRU1FTlRT
IGhlcmUgcmVzdWx0cyBpbiBhIGNvbXBpbGVyIHdhcm5pbmcKKyAgICAvLyB0aGF0IHRoZSBjb25k
aXRpb24gaXMgYWx3YXlzIHRydWUuCisKKyAgICBpZiAoZGVsZXRlVHlwZSA9PSBHVEtfREVMRVRF
X1dPUkRTKSB7CisgICAgICAgIGlmICghZGlyZWN0aW9uKSB7CisgICAgICAgICAgICB3ZWJraXRX
ZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHdlYlZpZXdCYXNlLCAiTW92ZVdvcmRG
b3J3YXJkIik7CisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JD
b21tYW5kKHdlYlZpZXdCYXNlLCAiTW92ZVdvcmRCYWNrd2FyZCIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCh3
ZWJWaWV3QmFzZSwgIk1vdmVXb3JkQmFja3dhcmQiKTsKKyAgICAgICAgICAgIHdlYmtpdFdlYlZp
ZXdCYXNlQWRkUGVuZGluZ0VkaXRvckNvbW1hbmQod2ViVmlld0Jhc2UsICJNb3ZlV29yZEZvcndh
cmQiKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZGVsZXRlVHlwZSA9PSBHVEtfREVMRVRF
X0RJU1BMQVlfTElORVMpIHsKKyAgICAgICAgaWYgKCFkaXJlY3Rpb24pCisgICAgICAgICAgICB3
ZWJraXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHdlYlZpZXdCYXNlLCAiTW92
ZVRvQmVnaW5uaW5nT2ZMaW5lIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdlYmtpdFdl
YlZpZXdCYXNlQWRkUGVuZGluZ0VkaXRvckNvbW1hbmQod2ViVmlld0Jhc2UsICJNb3ZlVG9FbmRP
ZkxpbmUiKTsKKyAgICB9IGVsc2UgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9QQVJBR1JB
UEhTKSB7CisgICAgICAgIGlmICghZGlyZWN0aW9uKQorICAgICAgICAgICAgd2Via2l0V2ViVmll
d0Jhc2VBZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCh3ZWJWaWV3QmFzZSwgIk1vdmVUb0JlZ2lubmlu
Z09mUGFyYWdyYXBoIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdlYmtpdFdlYlZpZXdC
YXNlQWRkUGVuZGluZ0VkaXRvckNvbW1hbmQod2ViVmlld0Jhc2UsICJNb3ZlVG9FbmRPZlBhcmFn
cmFwaCIpOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHJhd0NvbW1hbmQgPSBndGtEZWxldGVD
b21tYW5kc1tkZWxldGVUeXBlXVtkaXJlY3Rpb25dOworICAgIGlmICghcmF3Q29tbWFuZCkKKyAg
ICAgIHJldHVybjsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzKGNvdW50KTsgaSsrKQor
ICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHdlYlZpZXdC
YXNlLCByYXdDb21tYW5kKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGd0a01vdmVD
b21tYW5kc1tdWzRdID0geworICAgIHsgIk1vdmVCYWNrd2FyZCIsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiTW92ZUZvcndhcmQiLAorICAgICAgIk1vdmVCYWNrd2FyZEFuZE1v
ZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAiTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxl
Y3Rpb24iICAgICAgICAgICAgIH0sIC8vIEZvcndhcmQvYmFja3dhcmQgZ3JhcGhlbWUKKyAgICB7
ICJNb3ZlTGVmdCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVS
aWdodCIsCisgICAgICAiTW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAg
ICAgICAgICJNb3ZlRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwgLy8g
TGVmdC9yaWdodCBncmFwaGVtZQorICAgIHsgIk1vdmVXb3JkQmFja3dhcmQiLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiTW92ZVdvcmRGb3J3YXJkIiwKKyAgICAgICJNb3ZlV29yZEJh
Y2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgIk1vdmVXb3JkRm9yd2FyZEFu
ZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICB9LCAvLyBGb3J3YXJkL2JhY2t3YXJkIHdvcmQKKyAg
ICB7ICJNb3ZlVXAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1v
dmVEb3duIiwKKyAgICAgICJNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAg
ICAgICAgICAgIk1vdmVEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICB9LCAv
LyBVcC9kb3duIGxpbmUKKyAgICB7ICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmUiLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mTGluZSIsCisgICAgICAiTW92ZVRvQmVnaW5uaW5n
T2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2Rp
ZnlTZWxlY3Rpb24iICAgICAgICAgfSwgLy8gVXAvZG93biBsaW5lIGVuZHMKKyAgICB7ICJNb3Zl
UGFyYWdyYXBoRm9yd2FyZCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVQYXJhZ3Jh
cGhCYWNrd2FyZCIsCisgICAgICAiTW92ZVBhcmFncmFwaEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rp
b24iLCAgICAgICAgICJNb3ZlUGFyYWdyYXBoQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAg
fSwgLy8gVXAvZG93biBwYXJhZ3JhcGhzCisgICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3Jh
cGgiLCAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZlBhcmFncmFwaCIsCisgICAgICAi
TW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICJNb3ZlVG9F
bmRPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgfSwgLy8gVXAvZG93biBwYXJhZ3Jh
cGggZW5kcy4KKyAgICB7ICJNb3ZlUGFnZVVwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIk1vdmVQYWdlRG93biIsCisgICAgICAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVj
dGlvbiIsICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24i
ICAgICAgICAgICAgfSwgLy8gVXAvZG93biBwYWdlCisgICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZE
b2N1bWVudCIsICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50IiwKKyAg
ICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgIk1v
dmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICB9LCAvLyBCZWdpbi9lbmQg
b2YgYnVmZmVyCisgICAgeyAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsCisgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSAvLyBIb3Jpem9udGFsIHBhZ2UgbW92ZW1lbnQKK307CisKK3N0YXRpYyB2b2lkIG1vdmVDdXJz
b3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrTW92ZW1lbnRTdGVwIHN0ZXAsIGdpbnQg
Y291bnQsIGdib29sZWFuIGV4dGVuZFNlbGVjdGlvbiwgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZp
ZXdCYXNlKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJt
b3ZlLWN1cnNvciIpOworICAgIGludCBkaXJlY3Rpb24gPSBjb3VudCA+IDAgPyAxIDogMDsKKyAg
ICBpZiAoZXh0ZW5kU2VsZWN0aW9uKQorICAgICAgICBkaXJlY3Rpb24gKz0gMjsKKworICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RlcCkgPj0gR19OX0VMRU1FTlRTKGd0a01vdmVDb21t
YW5kcykpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGNoYXIqIHJhd0NvbW1hbmQgPSBn
dGtNb3ZlQ29tbWFuZHNbc3RlcF1bZGlyZWN0aW9uXTsKKyAgICBpZiAoIXJhd0NvbW1hbmQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzKGNvdW50KTsgaSsr
KQorICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHdlYlZp
ZXdCYXNlLCByYXdDb21tYW5kKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIEN0cmxLZXkg
PSAxIDw8IDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgQWx0S2V5ID0gMSA8PCAxOworc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFNoaWZ0S2V5ID0gMSA8PCAyOworCitzdHJ1Y3QgS2V5RG93bkVudHJ5
IHsKKyAgICB1bnNpZ25lZCB2aXJ0dWFsS2V5OworICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKKyAg
ICBjb25zdCBjaGFyKiBuYW1lOworfTsKKworc3RydWN0IEtleVByZXNzRW50cnkgeworICAgIHVu
c2lnbmVkIGNoYXJDb2RlOworICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKKyAgICBjb25zdCBjaGFy
KiBuYW1lOworfTsKKworc3RhdGljIGNvbnN0IEtleURvd25FbnRyeSBrZXlEb3duRW50cmllc1td
ID0geworICAgIHsgJ0InLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJUb2dnbGVCb2xkIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ0knLCAgICAgICBDdHJs
S2V5LCAgICAgICAgICAgICJUb2dnbGVJdGFsaWMiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAorICAgIHsgVktfRVNDQVBFLCAwLCAgICAgICAgICAgICAgICAgICJDYW5jZWwiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfT0VNX1BFUklP
RCwgQ3RybEtleSwgICAgICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAorICAgIHsgVktfVEFCLCAgICAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnRU
YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfVEFCLCAg
ICBTaGlmdEtleSwgICAgICAgICAgICJJbnNlcnRCYWNrdGFiIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJOLCAwLCAgICAgICAgICAgICAgICAgICJJbnNl
cnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVU
VVJOLCBDdHJsS2V5LCAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJOLCBBbHRLZXksICAgICAgICAgICAgICJJ
bnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktf
UkVUVVJOLCBBbHRLZXkgfCBTaGlmdEtleSwgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorfTsKKworc3RhdGljIGNvbnN0IEtleVByZXNzRW50cnkga2V5
UHJlc3NFbnRyaWVzW10gPSB7CisgICAgeyAnXHQnLCAgIDAsICAgICAgICAgICAgICAgICAgIklu
c2VydFRhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHQn
LCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2Vy
dE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAg
IEN0cmxLZXksICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5l
d2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIEFs
dEtleSB8IFNoaWZ0S2V5LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUVkaXRvckluaXQo
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OworCisgICAgcHJpdi0+ZWRpdG9yV2lk
Z2V0ID0gZ3RrX3RleHRfdmlld19uZXcoKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPmVk
aXRvcldpZGdldC5nZXQoKSwgImJhY2tzcGFjZSIsIEdfQ0FMTEJBQ0soYmFja3NwYWNlQ2FsbGJh
Y2spLCB3ZWJWaWV3QmFzZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwcml2LT5lZGl0b3JXaWRn
ZXQuZ2V0KCksICJjdXQtY2xpcGJvYXJkIiwgR19DQUxMQkFDSyhjdXRDbGlwYm9hcmRDYWxsYmFj
ayksIHdlYlZpZXdCYXNlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPmVkaXRvcldpZGdl
dC5nZXQoKSwgImNvcHktY2xpcGJvYXJkIiwgR19DQUxMQkFDSyhjb3B5Q2xpcGJvYXJkQ2FsbGJh
Y2spLCB3ZWJWaWV3QmFzZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwcml2LT5lZGl0b3JXaWRn
ZXQuZ2V0KCksICJwYXN0ZS1jbGlwYm9hcmQiLCBHX0NBTExCQUNLKHBhc3RlQ2xpcGJvYXJkQ2Fs
bGJhY2spLCB3ZWJWaWV3QmFzZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwcml2LT5lZGl0b3JX
aWRnZXQuZ2V0KCksICJzZWxlY3QtYWxsIiwgR19DQUxMQkFDSyhzZWxlY3RBbGxDYWxsYmFjayks
IHdlYlZpZXdCYXNlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPmVkaXRvcldpZGdldC5n
ZXQoKSwgIm1vdmUtY3Vyc29yIiwgR19DQUxMQkFDSyhtb3ZlQ3Vyc29yQ2FsbGJhY2spLCB3ZWJW
aWV3QmFzZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwcml2LT5lZGl0b3JXaWRnZXQuZ2V0KCks
ICJkZWxldGUtZnJvbS1jdXJzb3IiLCBHX0NBTExCQUNLKGRlbGV0ZUZyb21DdXJzb3JDYWxsYmFj
ayksIHdlYlZpZXdCYXNlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPmVkaXRvcldpZGdl
dC5nZXQoKSwgInRvZ2dsZS1vdmVyd3JpdGUiLCBHX0NBTExCQUNLKHRvZ2dsZU92ZXJ3cml0ZUNh
bGxiYWNrKSwgd2ViVmlld0Jhc2UpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+ZWRpdG9y
V2lkZ2V0LmdldCgpLCAicG9wdXAtbWVudSIsIEdfQ0FMTEJBQ0socG9wdXBNZW51Q2FsbGJhY2sp
LCB3ZWJWaWV3QmFzZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwcml2LT5lZGl0b3JXaWRnZXQu
Z2V0KCksICJzaG93LWhlbHAiLCBHX0NBTExCQUNLKHNob3dIZWxwQ2FsbGJhY2spLCB3ZWJWaWV3
QmFzZSk7Cit9CisKKy8vIFByaXZhdGUgQVBJCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlR2V0RWRp
dG9yQ29tbWFuZHNGb3JLZXlFdmVudChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGNv
bnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBj
b21tYW5kTGlzdCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJW
aWV3QmFzZS0+cHJpdjsKKworICAgIHByaXYtPnBlbmRpbmdFZGl0b3JDb21tYW5kcy5jbGVhcigp
OworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBndGtfYmluZGluZ3NfYWN0aXZhdGVf
ZXZlbnQoR1RLX09CSkVDVChwcml2LT5lZGl0b3JXaWRnZXQuZ2V0KCkpLCBjb25zdF9jYXN0PEdk
a0V2ZW50S2V5Kj4oJmV2ZW50Lm5hdGl2ZUV2ZW50KCktPmtleSkpOworI2Vsc2UKKyAgICBndGtf
YmluZGluZ3NfYWN0aXZhdGVfZXZlbnQoR19PQkpFQ1QocHJpdi0+ZWRpdG9yV2lkZ2V0LmdldCgp
KSwgY29uc3RfY2FzdDxHZGtFdmVudEtleSo+KCZldmVudC5uYXRpdmVFdmVudCgpLT5rZXkpKTsK
KyNlbmRpZgorCisgICAgaWYgKHByaXYtPnBlbmRpbmdFZGl0b3JDb21tYW5kcy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgY29tbWFuZExpc3QuYXBwZW5kKHByaXYtPnBlbmRpbmdFZGl0b3JDb21tYW5k
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKElu
dENvbnN0Q2hhckhhc2hNYXAsIGtleURvd25Db21tYW5kc01hcCwgKCkpOworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoSW50Q29uc3RDaGFySGFzaE1hcCwga2V5UHJlc3NDb21tYW5kc01hcCwgKCkp
OworCisgICAgaWYgKGtleURvd25Db21tYW5kc01hcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhrZXlEb3duRW50cmllcyk7IGkrKykK
KyAgICAgICAgICAgIGtleURvd25Db21tYW5kc01hcC5zZXQoa2V5RG93bkVudHJpZXNbaV0ubW9k
aWZpZXJzIDw8IDE2IHwga2V5RG93bkVudHJpZXNbaV0udmlydHVhbEtleSwga2V5RG93bkVudHJp
ZXNbaV0ubmFtZSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdfTl9FTEVN
RU5UUyhrZXlQcmVzc0VudHJpZXMpOyBpKyspCisgICAgICAgICAgICBrZXlQcmVzc0NvbW1hbmRz
TWFwLnNldChrZXlQcmVzc0VudHJpZXNbaV0ubW9kaWZpZXJzIDw8IDE2IHwga2V5UHJlc3NFbnRy
aWVzW2ldLmNoYXJDb2RlLCBrZXlQcmVzc0VudHJpZXNbaV0ubmFtZSk7CisgICAgfQorCisgICAg
dW5zaWduZWQgbW9kaWZpZXJzID0gMDsKKyAgICBpZiAoZXZlbnQuc2hpZnRLZXkoKSkKKyAgICAg
ICAgbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OworICAgIGlmIChldmVudC5hbHRLZXkoKSkKKyAgICAg
ICAgbW9kaWZpZXJzIHw9IEFsdEtleTsKKyAgICBpZiAoZXZlbnQuY29udHJvbEtleSgpKQorICAg
ICAgICBtb2RpZmllcnMgfD0gQ3RybEtleTsKKworICAgIC8vIEZvciBrZXlwcmVzcyBldmVudHMs
IHdlIHdhbnQgY2hhckNvZGUoKSwgYnV0IGtleUNvZGUoKSBkb2VzIHRoYXQuCisgICAgaW50IG1h
cEtleSA9IG1vZGlmaWVycyA8PCAxNiB8IGV2ZW50Lm5hdGl2ZVZpcnR1YWxLZXlDb2RlKCk7Cisg
ICAgaWYgKG1hcEtleSkgeworICAgICAgICBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+KiBjb21t
YW5kTWFwID0gZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpLZXlEb3duID8KKyAgICAgICAgICAg
ICZrZXlEb3duQ29tbWFuZHNNYXAgOiAma2V5UHJlc3NDb21tYW5kc01hcDsKKyAgICAgICAgaWYg
KGNvbnN0IGNoYXIqIGNvbW1hbmRTdHJpbmcgPSBjb21tYW5kTWFwLT5nZXQobWFwS2V5KSkKKyAg
ICAgICAgICAgIHByaXYtPnBlbmRpbmdFZGl0b3JDb21tYW5kcy5hcHBlbmQoY29tbWFuZFN0cmlu
Zyk7CisgICAgfQorCisgICAgY29tbWFuZExpc3QuYXBwZW5kKHByaXYtPnBlbmRpbmdFZGl0b3JD
b21tYW5kcyk7Cit9CisKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdlYktp
dFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUq
IHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKKworICAgIHByaXYtPnBhZ2UgPSB0b0ltcGwoY29u
dGV4dFJlZiktPmNyZWF0ZVdlYlBhZ2UocHJpdi0+cGFnZUNsaWVudC5nZXQoKSwgdG9JbXBsKHBh
Z2VHcm91cFJlZikpOworICAgIHByaXYtPnBhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7Cit9CisK
K1dlYlBhZ2VQcm94eSogd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJWaWV3QmFzZSkKK3sKKyAgICByZXR1cm4gd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2UuZ2V0
KCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Nzlk
MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJp
Z2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViS2l0V2ViVmlld0Jhc2VfaAorI2RlZmluZSBXZWJLaXRXZWJWaWV3QmFzZV9oCisKKyNpbmNs
dWRlICJ3ZWJraXRkZWZpbmVzLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRSAgICAgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfYmFzZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfQkFT
RShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfVFlQRV9XRUJfVklFV19CQVNFLCBXZWJLaXRXZWJWaWV3QmFzZSkpCisjZGVmaW5lIFdFQktJ
VF9XRUJfVklFV19CQVNFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0UsIFdlYktpdFdlYlZpZXdCYXNlQ2xh
c3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX1ZJRVdfQkFTRShvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9WSUVXX0JBU0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRSkpCisjZGVm
aW5lIFdFQktJVF9XRUJfVklFV19CQVNFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0UsIFdlYktpdFdlYlZp
ZXdCYXNlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2UgICAgICAg
IFdlYktpdFdlYlZpZXdCYXNlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlQ2xh
c3MgICBXZWJLaXRXZWJWaWV3QmFzZUNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZSBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0
V2ViVmlld0Jhc2UgeworICAgIEd0a0NvbnRhaW5lciBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0
ZSA+Ki8KKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdFdlYlZpZXdCYXNlQ2xhc3MgeworICAgIEd0a0NvbnRhaW5lckNsYXNzIHBhcmVudDsK
KworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dl
YmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2
b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgq
X3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF93ZWJfdmlld19iYXNlX2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
N2YzY2FlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYg
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0V2ViVmlld0Jhc2VQcml2
YXRlX2gKKworI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJX
ZWJLaXRXZWJWaWV3QmFzZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUg
PFdlYktpdDIvV0tCYXNlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0dfQkVHSU5fREVDTFMKKwordm9pZCB3ZWJraXRXZWJW
aWV3QmFzZUdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoV2ViS2l0V2ViVmlld0Jhc2UqLCBj
b25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgVmVjdG9yPFdURjo6U3RyaW5nPiYgY29tbWFu
ZExpc3QpOwordm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0V2ViVmll
d0Jhc2UqLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmKTsKK1dlYlBhZ2VQcm94eSogd2Vi
a2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdlYktpdFdlYlZpZXdCYXNlKik7CisKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8vIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXRkZWZpbmVzLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXRkZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjNmExYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdGRlZmluZXMuaApAQCAtMCwwICsxLDQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRkZWZpbmVz
X2gKKyNkZWZpbmUgd2Via2l0ZGVmaW5lc19oCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpZmRl
ZiBHX09TX1dJTjMyCisgICAgI2lmZGVmIEJVSUxESU5HX1dFQktJVAorICAgICAgICAjZGVmaW5l
IFdFQktJVF9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisgICAgI2Vsc2UKKyAgICAgICAgI2Rl
ZmluZSBXRUJLSVRfQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorICAgICNlbmRpZgorICAgICNk
ZWZpbmUgV0VCS0lUX09CU09MRVRFX0FQSSBXRUJLSVRfQVBJCisjZWxzZQorICAgICNkZWZpbmUg
V0VCS0lUX0FQSSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQorICAgICNk
ZWZpbmUgV0VCS0lUX09CU09MRVRFX0FQSSBXRUJLSVRfQVBJIF9fYXR0cmlidXRlX18oKGRlcHJl
Y2F0ZWQpKQorI2VuZGlmCisKKyNpZm5kZWYgV0VCS0lUX0FQSQorICAgICNkZWZpbmUgV0VCS0lU
X0FQSQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaAppbmRleCA5NGU0NDFmLi44Mjlk
YWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2h1bmtlZFVwZGF0ZURy
YXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2h1bmtlZFVw
ZGF0ZURyYXdpbmdBcmVhUHJveHkuaApAQCAtNDEsNiArNDEsNyBAQCBPQkpDX0NMQVNTIFdLVmll
dzsKIGNsYXNzIFFHcmFwaGljc1dLVmlldzsKICNlbGlmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYg
c3RydWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRXZWJWaWV3QmFzZSBXZWJLaXRXZWJWaWV3QmFzZTsKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKQEAgLTU2LDggKzU3LDcgQEAgdHlwZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmll
dzsKICNlbGlmIFBMQVRGT1JNKFFUKQogdHlwZWRlZiBRR3JhcGhpY3NXS1ZpZXcgUGxhdGZvcm1X
ZWJWaWV3OwogI2VsaWYgUExBVEZPUk0oR1RLKQotY2xhc3MgV2ViVmlldzsKLXR5cGVkZWYgV2Vi
VmlldyBQbGF0Zm9ybVdlYlZpZXc7Cit0eXBlZGVmIFdlYktpdFdlYlZpZXdCYXNlIFBsYXRmb3Jt
V2ViVmlldzsKICNlbmRpZgogCiBjbGFzcyBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eSA6
IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlHdGsuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5j
cHAKaW5kZXggODlhOWVmNy4uZjQ3MzIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0
ay5jcHAKQEAgLTMwLDEwICszMCw5IEBACiAKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2lu
Y2x1ZGUgIlVwZGF0ZUNodW5rLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lvbmluZy5oPgotI2luY2x1ZGUgPGdkay9nZGsuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQxLDcgKzQwLDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIFdlYlBhZ2VQcm94eSogQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6
OnBhZ2UoKQogewotICAgIHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsKKyAgICByZXR1cm4gd2Vi
a2l0V2ViVmlld0Jhc2VHZXRQYWdlKG1fd2ViVmlldyk7CiB9CiAKIHZvaWQgQ2h1bmtlZFVwZGF0
ZURyYXdpbmdBcmVhUHJveHk6OmVuc3VyZUJhY2tpbmdTdG9yZSgpCkBAIC00OSw3ICs0OCw3IEBA
IHZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmVuc3VyZUJhY2tpbmdTdG9yZSgp
CiAgICAgaWYgKG1fYmFja2luZ1N0b3JlSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
YmFja2luZ1N0b3JlSW1hZ2UgPSBnZGtfd2luZG93X2NyZWF0ZV9zaW1pbGFyX3N1cmZhY2UoZ3Rr
X3dpZGdldF9nZXRfd2luZG93KG1fd2ViVmlldy0+d2luZG93KCkpLAorICAgIG1fYmFja2luZ1N0
b3JlSW1hZ2UgPSBnZGtfd2luZG93X2NyZWF0ZV9zaW1pbGFyX3N1cmZhY2UoZ3RrX3dpZGdldF9n
ZXRfd2luZG93KEdUS19XSURHRVQobV93ZWJWaWV3KSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19DT05URU5UX0NPTE9S
X0FMUEhBLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKIH0KIApAQCAtODcsNyAr
ODYsNyBAQCB2b2lkIENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpkcmF3VXBkYXRlQ2h1
bmtJbnRvQmFja2luZ1N0b3JlKFVwZGF0ZUNodW5rKgogICAgIGNhaXJvX3NldF9zb3VyY2Vfc3Vy
ZmFjZShjci5nZXQoKSwgcGl4bWFwLmdldCgpLCB1cGRhdGVDaHVua1JlY3QueCgpLCB1cGRhdGVD
aHVua1JlY3QueSgpKTsKICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CiAKLSAgICBndGtfd2lk
Z2V0X3F1ZXVlX2RyYXdfYXJlYShtX3dlYlZpZXctPndpbmRvdygpLCB1cGRhdGVDaHVua1JlY3Qu
eCgpLCB1cGRhdGVDaHVua1JlY3QueSgpLAorICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVh
KEdUS19XSURHRVQobV93ZWJWaWV3KSwgdXBkYXRlQ2h1bmtSZWN0LngoKSwgdXBkYXRlQ2h1bmtS
ZWN0LnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDaHVua1JlY3Qu
d2lkdGgoKSwgdXBkYXRlQ2h1bmtSZWN0LmhlaWdodCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViVmlldy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5
NGFiOWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotCi0jaW5jbHVkZSAiQ2h1bmtlZFVw
ZGF0ZURyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgotI2luY2x1ZGUgIldlYkV2ZW50RmFj
dG9yeS5oIgotI2luY2x1ZGUgIldlYlZpZXdXaWRnZXQuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdHlwZWRlZiBIYXNoTWFw
PGludCwgY29uc3QgY2hhcio+IEludENvbnN0Q2hhckhhc2hNYXA7Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBXZWJWaWV3OjpoYW5kbGVG
b2N1c0luRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgaWYgKCEobV9pc1BhZ2VBY3Rp
dmUpKSB7Ci0gICAgICAgIG1faXNQYWdlQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgbV9wYWdlLT52
aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwotICAg
IH0KLQotICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lz
Rm9jdXNlZCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudChHdGtXaWRn
ZXQqIHdpZGdldCkKLXsKLSAgICBtX2lzUGFnZUFjdGl2ZSA9IGZhbHNlOwotICAgIG1fcGFnZS0+
dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKLX0K
LQotCi1zdGF0aWMgdm9pZCBiYWNrc3BhY2VDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgV2Vi
VmlldyogY2xpZW50KQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRn
ZXQsICJiYWNrc3BhY2UiKTsKLSAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJE
ZWxldGVCYWNrd2FyZCIpOwotfQotCi1zdGF0aWMgdm9pZCBzZWxlY3RBbGxDYWxsYmFjayhHdGtX
aWRnZXQqIHdpZGdldCwgZ2Jvb2xlYW4gc2VsZWN0LCBXZWJWaWV3KiBjbGllbnQpCi17Ci0gICAg
Z19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInNlbGVjdC1hbGwiKTsKLSAg
ICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHNlbGVjdCA/ICJTZWxlY3RBbGwiIDog
IlVuc2VsZWN0Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIGN1dENsaXBib2FyZENhbGxiYWNrKEd0a1dp
ZGdldCogd2lkZ2V0LCBXZWJWaWV3KiBjbGllbnQpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlz
c2lvbl9ieV9uYW1lKHdpZGdldCwgImN1dC1jbGlwYm9hcmQiKTsKLSAgICBjbGllbnQtPmFkZFBl
bmRpbmdFZGl0b3JDb21tYW5kKCJDdXQiKTsKLX0KLQotc3RhdGljIHZvaWQgY29weUNsaXBib2Fy
ZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBXZWJWaWV3KiBjbGllbnQpCi17Ci0gICAgZ19z
aWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImNvcHktY2xpcGJvYXJkIik7Ci0g
ICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiQ29weSIpOwotfQotCi1zdGF0aWMg
dm9pZCBwYXN0ZUNsaXBib2FyZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBXZWJWaWV3KiBj
bGllbnQpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInBh
c3RlLWNsaXBib2FyZCIpOwotICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIlBh
c3RlIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRvZ2dsZU92ZXJ3cml0ZUNhbGxiYWNrKEd0a1dpZGdl
dCogd2lkZ2V0LCBFZGl0b3JDbGllbnQqKQotewotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdG9n
Z2xpbmcgdGhlIG92ZXJ3cml0ZSBtb2RlLCBidXQgdGhlIGRlZmF1bHQgY2FsbGJhY2sgZXhwZWN0
cwotICAgIC8vIHRoZSBHdGtUZXh0VmlldyB0byBoYXZlIGEgbGF5b3V0LCBzbyB3ZSBoYW5kbGUg
dGhpcyBzaWduYWwganVzdCB0byBzdG9wIGl0LgotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25f
YnlfbmFtZSh3aWRnZXQsICJ0b2dnbGUtb3ZlcndyaXRlIik7Ci19Ci0KLS8vIEdUSysgd2lsbCBz
dGlsbCBzZW5kIHRoZXNlIHNpZ25hbHMgdG8gdGhlIHdlYiB2aWV3LiBTbyB3ZSBjYW4gc2FmZWx5
IHN0b3Agc2lnbmFsCi0vLyBlbWlzc2lvbiB3aXRob3V0IGJyZWFraW5nIGFjY2Vzc2liaWxpdHku
Ci1zdGF0aWMgdm9pZCBwb3B1cE1lbnVDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgRWRpdG9y
Q2xpZW50KikKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAi
cG9wdXAtbWVudSIpOwotfQotCi1zdGF0aWMgdm9pZCBzaG93SGVscENhbGxiYWNrKEd0a1dpZGdl
dCogd2lkZ2V0LCBFZGl0b3JDbGllbnQqKQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25f
YnlfbmFtZSh3aWRnZXQsICJzaG93LWhlbHAiKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGd0a0RlbGV0ZUNvbW1hbmRzW11bMl0gPSB7Ci0gICAgeyAiRGVsZXRlQmFja3dhcmQiLCAg
ICAgICAgICAgICAgICJEZWxldGVGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgIH0sIC8v
IENoYXJhY3RlcnMKLSAgICB7ICJEZWxldGVXb3JkQmFja3dhcmQiLCAgICAgICAgICAgIkRlbGV0
ZVdvcmRGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgfSwgLy8gV29yZCBlbmRzCi0gICAgeyAi
RGVsZXRlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIgICAgICAg
ICAgICAgICAgICAgIH0sIC8vIFdvcmRzCi0gICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdPZkxpbmUi
LCAgICAgICJEZWxldGVUb0VuZE9mTGluZSIgICAgICAgICAgICAgICAgICAgIH0sIC8vIExpbmVz
Ci0gICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdPZkxpbmUiLCAgICAgICJEZWxldGVUb0VuZE9mTGlu
ZSIgICAgICAgICAgICAgICAgICAgIH0sIC8vIExpbmUgZW5kcwotICAgIHsgIkRlbGV0ZVRvQmVn
aW5uaW5nT2ZQYXJhZ3JhcGgiLCAiRGVsZXRlVG9FbmRPZlBhcmFncmFwaCIgICAgICAgICAgICAg
ICB9LCAvLyBQYXJhZ3JhcGggZW5kcwotICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZQYXJhZ3Jh
cGgiLCAiRGVsZXRlVG9FbmRPZlBhcmFncmFwaCIgICAgICAgICAgICAgICB9LCAvLyBQYXJhZ3Jh
cGhzCi0gICAgeyAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gV2hpdGVzcGFjZSAoTS1cIGluIEVtYWNzKQot
fTsKLQotc3RhdGljIHZvaWQgZGVsZXRlRnJvbUN1cnNvckNhbGxiYWNrKEd0a1dpZGdldCogd2lk
Z2V0LCBHdGtEZWxldGVUeXBlIGRlbGV0ZVR5cGUsIGdpbnQgY291bnQsIFdlYlZpZXcqIGNsaWVu
dCkKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiZGVsZXRl
LWZyb20tY3Vyc29yIik7Ci0gICAgaW50IGRpcmVjdGlvbiA9IGNvdW50ID4gMCA/IDEgOiAwOwot
Ci0gICAgLy8gRW5zdXJpbmcgdGhhdCBkZWxldGVUeXBlIDw9IEdfTl9FTEVNRU5UUyBoZXJlIHJl
c3VsdHMgaW4gYSBjb21waWxlciB3YXJuaW5nCi0gICAgLy8gdGhhdCB0aGUgY29uZGl0aW9uIGlz
IGFsd2F5cyB0cnVlLgotCi0gICAgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9XT1JEUykg
ewotICAgICAgICBpZiAoIWRpcmVjdGlvbikgewotICAgICAgICAgICAgY2xpZW50LT5hZGRQZW5k
aW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRGb3J3YXJkIik7Ci0gICAgICAgICAgICBjbGllbnQt
PmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlV29yZEJhY2t3YXJkIik7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3Zl
V29yZEJhY2t3YXJkIik7Ci0gICAgICAgICAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21t
YW5kKCJNb3ZlV29yZEZvcndhcmQiKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZGVsZXRl
VHlwZSA9PSBHVEtfREVMRVRFX0RJU1BMQVlfTElORVMpIHsKLSAgICAgICAgaWYgKCFkaXJlY3Rp
b24pCi0gICAgICAgICAgICBjbGllbnQtPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9C
ZWdpbm5pbmdPZkxpbmUiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2xpZW50LT5hZGRQ
ZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvRW5kT2ZMaW5lIik7Ci0gICAgfSBlbHNlIGlmIChk
ZWxldGVUeXBlID09IEdUS19ERUxFVEVfUEFSQUdSQVBIUykgewotICAgICAgICBpZiAoIWRpcmVj
dGlvbikKLSAgICAgICAgICAgIGNsaWVudC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVU
b0JlZ2lubmluZ09mUGFyYWdyYXBoIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNsaWVu
dC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVUb0VuZE9mUGFyYWdyYXBoIik7Ci0gICAg
fQotCi0gICAgY29uc3QgY2hhciogcmF3Q29tbWFuZCA9IGd0a0RlbGV0ZUNvbW1hbmRzW2RlbGV0
ZVR5cGVdW2RpcmVjdGlvbl07Ci0gICAgaWYgKCFyYXdDb21tYW5kKQotICAgICAgcmV0dXJuOwot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoY291bnQpOyBpKyspCi0gICAgICAgIGNsaWVu
dC0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQocmF3Q29tbWFuZCk7Ci19Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBndGtNb3ZlQ29tbWFuZHNbXVs0XSA9IHsKLSAgICB7ICJNb3ZlQmFja3dh
cmQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkIiwKLSAg
ICAgICJNb3ZlQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgIk1v
dmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICB9LCAvLyBGb3J3YXJkL2Jh
Y2t3YXJkIGdyYXBoZW1lCi0gICAgeyAiTW92ZUxlZnQiLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJNb3ZlUmlnaHQiLAotICAgICAgIk1vdmVCYWNrd2FyZEFuZE1vZGlm
eVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAiTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rp
b24iICAgICAgICAgICAgIH0sIC8vIExlZnQvcmlnaHQgZ3JhcGhlbWUKLSAgICB7ICJNb3ZlV29y
ZEJhY2t3YXJkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVXb3JkRm9yd2Fy
ZCIsCi0gICAgICAiTW92ZVdvcmRCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAg
ICAgICJNb3ZlV29yZEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgfSwgLy8gRm9y
d2FyZC9iYWNrd2FyZCB3b3JkCi0gICAgeyAiTW92ZVVwIiwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJNb3ZlRG93biIsCi0gICAgICAiTW92ZVVwQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiwgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlv
biIgICAgICAgICAgICAgICAgfSwgLy8gVXAvZG93biBsaW5lCi0gICAgeyAiTW92ZVRvQmVnaW5u
aW5nT2ZMaW5lIiwgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiLAot
ICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAi
TW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgIH0sIC8vIFVwL2Rvd24g
bGluZSBlbmRzCi0gICAgeyAiTW92ZVBhcmFncmFwaEZvcndhcmQiLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJNb3ZlUGFyYWdyYXBoQmFja3dhcmQiLAotICAgICAgIk1vdmVQYXJhZ3JhcGhG
b3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAiTW92ZVBhcmFncmFwaEJhY2t3YXJk
QW5kTW9kaWZ5U2VsZWN0aW9uIiAgIH0sIC8vIFVwL2Rvd24gcGFyYWdyYXBocwotICAgIHsgIk1v
dmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5k
T2ZQYXJhZ3JhcGgiLAotICAgICAgIk1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoQW5kTW9kaWZ5
U2VsZWN0aW9uIiwgICAiTW92ZVRvRW5kT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24iICAg
IH0sIC8vIFVwL2Rvd24gcGFyYWdyYXBoIGVuZHMuCi0gICAgeyAiTW92ZVBhZ2VVcCIsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd24iLAotICAgICAgIk1v
dmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VE
b3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgIH0sIC8vIFVwL2Rvd24gcGFnZQotICAg
IHsgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQiLCAgICAgICAgICAgICAgICAgICAgICAiTW92
ZVRvRW5kT2ZEb2N1bWVudCIsCi0gICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1v
ZGlmeVNlbGVjdGlvbiIsICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9u
IiAgICAgfSwgLy8gQmVnaW4vZW5kIG9mIGJ1ZmZlcgotICAgIHsgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gLy8gSG9yaXpvbnRhbCBwYWdlIG1vdmVtZW50Ci19Owot
Ci1zdGF0aWMgdm9pZCBtb3ZlQ3Vyc29yQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a01v
dmVtZW50U3RlcCBzdGVwLCBnaW50IGNvdW50LCBnYm9vbGVhbiBleHRlbmRTZWxlY3Rpb24sIFdl
YlZpZXcqIGNsaWVudCkKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lk
Z2V0LCAibW92ZS1jdXJzb3IiKTsKLSAgICBpbnQgZGlyZWN0aW9uID0gY291bnQgPiAwID8gMSA6
IDA7Ci0gICAgaWYgKGV4dGVuZFNlbGVjdGlvbikKLSAgICAgICAgZGlyZWN0aW9uICs9IDI7Ci0K
LSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZXApID49IEdfTl9FTEVNRU5UUyhndGtN
b3ZlQ29tbWFuZHMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBjaGFyKiByYXdDb21t
YW5kID0gZ3RrTW92ZUNvbW1hbmRzW3N0ZXBdW2RpcmVjdGlvbl07Ci0gICAgaWYgKCFyYXdDb21t
YW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFicyhjb3Vu
dCk7IGkrKykKLSAgICAgICAgY2xpZW50LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChyYXdDb21t
YW5kKTsKLX0KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEN0cmxLZXkgPSAxIDw8IDA7Ci1zdGF0
aWMgY29uc3QgdW5zaWduZWQgQWx0S2V5ID0gMSA8PCAxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFNoaWZ0S2V5ID0gMSA8PCAyOwotCi1zdHJ1Y3QgS2V5RG93bkVudHJ5IHsKLSAgICB1bnNpZ25l
ZCB2aXJ0dWFsS2V5OwotICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKLSAgICBjb25zdCBjaGFyKiBu
YW1lOwotfTsKLQotc3RydWN0IEtleVByZXNzRW50cnkgewotICAgIHVuc2lnbmVkIGNoYXJDb2Rl
OwotICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKLSAgICBjb25zdCBjaGFyKiBuYW1lOwotfTsKLQot
c3RhdGljIGNvbnN0IEtleURvd25FbnRyeSBrZXlEb3duRW50cmllc1tdID0gewotICAgIHsgJ0In
LCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJUb2dnbGVCb2xkIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ0knLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAg
ICJUb2dnbGVJdGFsaWMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsg
VktfRVNDQVBFLCAwLCAgICAgICAgICAgICAgICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfT0VNX1BFUklPRCwgQ3RybEtleSwgICAg
ICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAg
IHsgVktfVEFCLCAgICAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfVEFCLCAgICBTaGlmdEtleSwgICAg
ICAgICAgICJJbnNlcnRCYWNrdGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAot
ICAgIHsgVktfUkVUVVJOLCAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJOLCBDdHJsS2V5LCAg
ICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAotICAgIHsgVktfUkVUVVJOLCBBbHRLZXksICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJOLCBBbHRLZXkg
fCBTaGlmdEtleSwgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAotfTsKLQotc3RhdGljIGNvbnN0IEtleVByZXNzRW50cnkga2V5UHJlc3NFbnRyaWVzW10g
PSB7Ci0gICAgeyAnXHQnLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHQnLCAgIFNoaWZ0S2V5LCAg
ICAgICAgICAgIkluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
Ci0gICAgeyAnXHInLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgIEN0cmxLZXksICAgICAg
ICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0g
ICAgeyAnXHInLCAgIEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgIEFsdEtleSB8IFNoaWZ0S2V5
LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi19Owot
Ci1XZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFn
ZUdyb3VwKQotICAgIDogbV9pc1BhZ2VBY3RpdmUodHJ1ZSkKLSAgICAsIG1fbmF0aXZlV2lkZ2V0
KGd0a190ZXh0X3ZpZXdfbmV3KCkpCi17Ci0gICAgbV9wYWdlID0gY29udGV4dC0+Y3JlYXRlV2Vi
UGFnZSh0aGlzLCBwYWdlR3JvdXApOwotCi0gICAgbV92aWV3V2lkZ2V0ID0gc3RhdGljX2Nhc3Q8
R3RrV2lkZ2V0Kj4oZ19vYmplY3RfbmV3KFdFQl9WSUVXX1RZUEVfV0lER0VULCBOVUxMKSk7Ci0g
ICAgQVNTRVJUKG1fdmlld1dpZGdldCk7Ci0KLSAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQYWdl
KCk7Ci0KLSAgICBXZWJWaWV3V2lkZ2V0KiB3ZWJWaWV3V2lkZ2V0ID0gV0VCX1ZJRVdfV0lER0VU
KG1fdmlld1dpZGdldCk7Ci0gICAgd2ViVmlld1dpZGdldFNldFdlYlZpZXdJbnN0YW5jZSh3ZWJW
aWV3V2lkZ2V0LCB0aGlzKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQu
Z2V0KCksICJiYWNrc3BhY2UiLCBHX0NBTExCQUNLKGJhY2tzcGFjZUNhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgImN1dC1jbGlwYm9h
cmQiLCBHX0NBTExCQUNLKGN1dENsaXBib2FyZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgImNvcHktY2xpcGJvYXJkIiwgR19DQUxM
QkFDSyhjb3B5Q2xpcGJvYXJkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAicGFzdGUtY2xpcGJvYXJkIiwgR19DQUxMQkFDSyhwYXN0
ZUNsaXBib2FyZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2
ZVdpZGdldC5nZXQoKSwgInNlbGVjdC1hbGwiLCBHX0NBTExCQUNLKHNlbGVjdEFsbENhbGxiYWNr
KSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgIm1v
dmUtY3Vyc29yIiwgR19DQUxMQkFDSyhtb3ZlQ3Vyc29yQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiZGVsZXRlLWZyb20tY3Vyc29y
IiwgR19DQUxMQkFDSyhkZWxldGVGcm9tQ3Vyc29yQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAidG9nZ2xlLW92ZXJ3cml0ZSIsIEdf
Q0FMTEJBQ0sodG9nZ2xlT3ZlcndyaXRlQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAicG9wdXAtbWVudSIsIEdfQ0FMTEJBQ0socG9w
dXBNZW51Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lk
Z2V0LmdldCgpLCAic2hvdy1oZWxwIiwgR19DQUxMQkFDSyhzaG93SGVscENhbGxiYWNrKSwgdGhp
cyk7Ci19Ci0KLVdlYlZpZXc6On5XZWJWaWV3KCkKLXsKLX0KLQotR2RrV2luZG93KiBXZWJWaWV3
OjpnZXRXZWJWaWV3V2luZG93KCkKLXsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfd2luZG93
KG1fdmlld1dpZGdldCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6cGFpbnQoR3RrV2lkZ2V0KiB3aWRn
ZXQsIEdka1JlY3RhbmdsZSByZWN0LCBjYWlyb190KiBjcikKLXsKLSAgICBtX3BhZ2UtPmRyYXdp
bmdBcmVhKCktPnBhaW50KEludFJlY3QocmVjdCksIGNyKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojpz
ZXRTaXplKEd0a1dpZGdldCosIEludFNpemUgd2luZG93U2l6ZSkKLXsKLSAgICBtX3BhZ2UtPmRy
YXdpbmdBcmVhKCktPnNldFNpemUod2luZG93U2l6ZSwgSW50U2l6ZSgpKTsKLX0KLQotdm9pZCBX
ZWJWaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkKLXsKLSAgICBt
X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVy
cHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKSk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6aGFuZGxl
TW91c2VFdmVudChHZGtFdmVudCogZXZlbnQsIGludCBjdXJyZW50Q2xpY2tDb3VudCkKLXsKLSAg
ICBtX3BhZ2UtPmhhbmRsZU1vdXNlRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3Vz
ZUV2ZW50KGV2ZW50LCBjdXJyZW50Q2xpY2tDb3VudCkpOwotfQotCi12b2lkIFdlYlZpZXc6Omhh
bmRsZVdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQotewotICAgIG1fcGFnZS0+aGFu
ZGxlV2hlZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQp
KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpnZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KGNvbnN0
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBjb21t
YW5kTGlzdCkKLXsKLSAgICBtX3BlbmRpbmdFZGl0b3JDb21tYW5kcy5jbGVhcigpOwotCi0jaWZk
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBndGtfYmluZGluZ3NfYWN0aXZhdGVfZXZlbnQoR1RL
X09CSkVDVChtX25hdGl2ZVdpZGdldC5nZXQoKSksIGNvbnN0X2Nhc3Q8R2RrRXZlbnRLZXkqPigm
ZXZlbnQubmF0aXZlRXZlbnQoKS0+a2V5KSk7Ci0jZWxzZQotICAgIGd0a19iaW5kaW5nc19hY3Rp
dmF0ZV9ldmVudChHX09CSkVDVChtX25hdGl2ZVdpZGdldC5nZXQoKSksIGNvbnN0X2Nhc3Q8R2Rr
RXZlbnRLZXkqPigmZXZlbnQubmF0aXZlRXZlbnQoKS0+a2V5KSk7Ci0jZW5kaWYKLQotICAgIGlm
IChtX3BlbmRpbmdFZGl0b3JDb21tYW5kcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tbWFuZExp
c3QuYXBwZW5kKG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW50Q29uc3RDaGFySGFzaE1hcCwga2V5RG93
bkNvbW1hbmRzTWFwLCAoKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbnRDb25zdENoYXJI
YXNoTWFwLCBrZXlQcmVzc0NvbW1hbmRzTWFwLCAoKSk7Ci0KLSAgICBpZiAoa2V5RG93bkNvbW1h
bmRzTWFwLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR19O
X0VMRU1FTlRTKGtleURvd25FbnRyaWVzKTsgaSsrKQotICAgICAgICAgICAga2V5RG93bkNvbW1h
bmRzTWFwLnNldChrZXlEb3duRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlEb3duRW50
cmllc1tpXS52aXJ0dWFsS2V5LCBrZXlEb3duRW50cmllc1tpXS5uYW1lKTsKLQotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGtleVByZXNzRW50cmllcyk7IGkr
KykKLSAgICAgICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAuc2V0KGtleVByZXNzRW50cmllc1tp
XS5tb2RpZmllcnMgPDwgMTYgfCBrZXlQcmVzc0VudHJpZXNbaV0uY2hhckNvZGUsIGtleVByZXNz
RW50cmllc1tpXS5uYW1lKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOwot
ICAgIGlmIChldmVudC5zaGlmdEtleSgpKQotICAgICAgICBtb2RpZmllcnMgfD0gU2hpZnRLZXk7
Ci0gICAgaWYgKGV2ZW50LmFsdEtleSgpKQotICAgICAgICBtb2RpZmllcnMgfD0gQWx0S2V5Owot
ICAgIGlmIChldmVudC5jb250cm9sS2V5KCkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBDdHJsS2V5
OwotCi0gICAgLy8gRm9yIGtleXByZXNzIGV2ZW50cywgd2Ugd2FudCBjaGFyQ29kZSgpLCBidXQg
a2V5Q29kZSgpIGRvZXMgdGhhdC4KLSAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwg
ZXZlbnQubmF0aXZlVmlydHVhbEtleUNvZGUoKTsKLSAgICBpZiAobWFwS2V5KSB7Ci0gICAgICAg
IEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGNvbW1hbmRNYXAgPSBldmVudC50eXBlKCkgPT0g
V2ViRXZlbnQ6OktleURvd24gPwotICAgICAgICAgICAgJmtleURvd25Db21tYW5kc01hcCA6ICZr
ZXlQcmVzc0NvbW1hbmRzTWFwOwotICAgICAgICBpZiAoY29uc3QgY2hhciogY29tbWFuZFN0cmlu
ZyA9IGNvbW1hbmRNYXAtPmdldChtYXBLZXkpKQotICAgICAgICAgICAgbV9wZW5kaW5nRWRpdG9y
Q29tbWFuZHMuYXBwZW5kKGNvbW1hbmRTdHJpbmcpOwotICAgIH0KLQotICAgIGNvbW1hbmRMaXN0
LmFwcGVuZChtX3BlbmRpbmdFZGl0b3JDb21tYW5kcyk7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aXNB
Y3RpdmUoKQotewotICAgIHJldHVybiBtX2lzUGFnZUFjdGl2ZTsKLX0KLQotdm9pZCBXZWJWaWV3
OjpjbG9zZSgpCi17Ci0gICAgbV9wYWdlLT5jbG9zZSgpOwotfQotCi0vLyBQYWdlQ2xpZW50J3Mg
cHVyZSB2aXJ0dWFsIGZ1bmN0aW9ucwotUGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBXZWJW
aWV3OjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCkKLXsKLSAgICByZXR1cm4gQ2h1bmtlZFVwZGF0
ZURyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuZ2V0KCkpOwotfQotCi12b2lk
IFdlYlZpZXc6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpkaXNwbGF5Vmlldygp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzY3JvbGxWaWV3
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1XZWJDb3Jl
OjpJbnRTaXplIFdlYlZpZXc6OnZpZXdTaXplKCkKLXsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9j
YXRpb247Ci0gICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihtX3ZpZXdXaWRnZXQsICZhbGxv
Y2F0aW9uKTsKLSAgICByZXR1cm4gSW50U2l6ZShhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9u
LmhlaWdodCk7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aXNWaWV3V2luZG93QWN0aXZlKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlZpZXc6
OmlzVmlld0ZvY3VzZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aXNWaWV3VmlzaWJsZSgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJWaWV3Ojppc1ZpZXdJbldp
bmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBXZWJWaWV3OjpXZWJWaWV3Ojpwcm9jZXNzRGlkQ3Jhc2goKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnRha2VGb2N1cyhib29sKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6dG9vbFRpcENoYW5n
ZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYlZpZXc6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKLXsK
LSAgICAvLyBbR1RLXSBXaWRnZXQ6OnNldEN1cnNvcigpIGdldHMgY2FsbGVkIGZyZXF1ZW50bHkK
LSAgICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM4OAotICAg
IC8vIFNldHRpbmcgdGhlIGN1cnNvciBtYXkgYmUgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiBpbiBz
b21lIGJhY2tlbmRzLAotICAgIC8vIHNvIGRvbid0IHJlLXNldCB0aGUgY3Vyc29yIGlmIGl0J3Mg
YWxyZWFkeSBzZXQgdG8gdGhlIHRhcmdldCB2YWx1ZS4KLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3ZpZXdXaWRnZXQpOwotICAgIEdka0N1cnNvciogY3Vy
cmVudEN1cnNvciA9IGdka193aW5kb3dfZ2V0X2N1cnNvcih3aW5kb3cpOwotICAgIEdka0N1cnNv
ciogbmV3Q3Vyc29yID0gY3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCkuZ2V0KCk7Ci0gICAgaWYgKGN1
cnJlbnRDdXJzb3IgIT0gbmV3Q3Vyc29yKQotICAgICAgICBnZGtfd2luZG93X3NldF9jdXJzb3Io
d2luZG93LCBuZXdDdXJzb3IpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldFZpZXdwb3J0QXJndW1l
bnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0
cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6Y2xlYXJBbGxFZGl0Q29tbWFu
ZHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgV2ViVmlldzo6Y2FuVW5k
b1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYlZpZXc6OmV4ZWN1dGVVbmRvUmVkbyhX
ZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
RmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYg
dmlld1JlY3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmlld1JlY3Q7
Ci19Ci0KLUZsb2F0UmVjdCBXZWJWaWV3Ojpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRS
ZWN0JiB2aWV3UmVjdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2aWV3
UmVjdDsKLX0KLQotSW50UmVjdCBXZWJWaWV3Ojp3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0
JiByZWN0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsK
LX0KLQotdm9pZCBXZWJWaWV3Ojpkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYlZpZXc6OmRpZE5vdEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQmIGV2ZW50KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBh
c3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFdlYlZpZXc6OmNyZWF0ZVBvcHVwTWVudVByb3h5
KFdlYlBhZ2VQcm94eSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBXZWJWaWV3OjpjcmVhdGVDb250
ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQ
dHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotdm9pZCBXZWJWaWV3Ojpw
YWdlRGlkRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnBhZ2VEaWRMZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotCi12b2lkIFdlYlZpZXc6OmRpZENvbW1pdExvYWRGb3JNYWluRnJh
bWUoYm9vbCB1c2VDdXN0b21SZXByZXNlbnRhdGlvbikKLXsKLX0KLQotdm9pZCBXZWJWaWV3Ojpk
aWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYg
c3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKQotewotfQot
Ci1kb3VibGUgV2ViVmlldzo6Y3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdlYlZpZXc6OnNl
dEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcihkb3VibGUpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpwYWdlQ2xvc2VkKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OmRpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWlu
RnJhbWUoKSBjb25zdAotewotfQotCi12b2lkIFdlYlZpZXc6OmZsYXNoQmFja2luZ1N0b3JlVXBk
YXRlcyhjb25zdCBWZWN0b3I8SW50UmVjdD4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViVmlldzo6ZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3Qg
U3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgV2ViVmlldzo6Y291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRh
dGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2VmMTRj
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChj
KSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViVmll
d19oCi0jZGVmaW5lIFdlYlZpZXdfaAotCi0jaW5jbHVkZSAiUGFnZUNsaWVudC5oIgotI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1
ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIERyYXdpbmdBcmVhUHJveHk7Ci1jbGFz
cyBXZWJQYWdlTmFtZXNwYWNlOwotCi1jbGFzcyBXZWJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8
V2ViVmlldz4sIHB1YmxpYyBQYWdlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB+V2ViVmlldygpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlZpZXc+IGNyZWF0ZShXZWJDb250ZXh0KiBjb250ZXh0
LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV2ViVmlldyhjb250ZXh0LCBwYWdlR3JvdXApKTsKLSAgICB9Ci0KLSAgICBHdGtXaWRn
ZXQqIHdpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld1dpZGdldDsgfQotCi0gICAgV2ViUGFn
ZVByb3h5KiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlLmdldCgpOyB9Ci0KLSAgICB2b2lk
IGhhbmRsZUZvY3VzSW5FdmVudChHdGtXaWRnZXQqKTsKLSAgICB2b2lkIGhhbmRsZUZvY3VzT3V0
RXZlbnQoR3RrV2lkZ2V0Kik7Ci0KLSAgICB2b2lkIHBhaW50KEd0a1dpZGdldCosIEdka1JlY3Rh
bmdsZSwgY2Fpcm9fdCopOwotICAgIHZvaWQgc2V0U2l6ZShHdGtXaWRnZXQqLCBXZWJDb3JlOjpJ
bnRTaXplKTsKLSAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqKTsKLSAg
ICB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwqKTsKLSAgICB2b2lkIGhhbmRs
ZU1vdXNlRXZlbnQoR2RrRXZlbnQqLCBpbnQpOwotCi0gICAgdm9pZCBhZGRQZW5kaW5nRWRpdG9y
Q29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKSB7IG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzLmFw
cGVuZChXVEY6OlN0cmluZyhjb21tYW5kKSk7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJWaWV3KFdl
YkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqKTsKLQotICAgIEdka1dpbmRvdyogZ2V0V2ViVmlld1dp
bmRvdygpOwotCi0gICAgYm9vbCBpc0FjdGl2ZSgpOwotICAgIHZvaWQgY2xvc2UoKTsKLQotICAg
IC8vIFBhZ2VDbGllbnQKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4g
Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNE
aXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGxh
eVZpZXcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVmlldyhjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSgpOwotICAgIHZpcnR1YWwgYm9v
bCBpc1ZpZXdXaW5kb3dBY3RpdmUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3Rm9jdXNlZCgp
OwotICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxlKCk7Ci0gICAgdmlydHVhbCBib29sIGlz
Vmlld0luV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NEaWRDcmFzaCgpOwotICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFn
ZUNsb3NlZCgpOwotICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24pOwot
ICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0
IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3Jl
OjpDdXJzb3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnRBcmd1bWVudHMoY29uc3Qg
V2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJF
ZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6
OlVuZG9PclJlZG8pOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwot
ICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwot
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRv
KTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVj
dCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWROb3RIYW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Jik7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQb3B1cE1lbnVQcm94
eShXZWJQYWdlUHJveHkqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQ
cm94eT4gY3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sIGZh
ZGVPdXQpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1l
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25z
dCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIHVwZGF0ZVJlY3RzKTsKLSAgICB2aXJ0dWFsIGZs
b2F0IHVzZXJTcGFjZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1
YWwgdm9pZCBnZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQmLCBWZWN0b3I8V1RGOjpTdHJpbmc+Jik7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmRT
dHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1
bnNpZ25lZCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVw
cmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKTsKLQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZEVu
dGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkTGVh
dmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBk
aWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVwcmVzZW50YXRpb24pOwot
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0
aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IENvcmVJUEM6OkRhdGFS
ZWZlcmVuY2UmKTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBjdXN0b21SZXByZXNlbnRhdGlvblpvb21G
YWN0b3IoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFj
dG9yKGRvdWJsZSk7Ci0KLSAgICAvLyBNZW1iZXJzIG9mIFdlYlZpZXcgY2xhc3MKLSAgICBHdGtX
aWRnZXQqIG1fdmlld1dpZGdldDsKLSAgICBib29sIG1faXNQYWdlQWN0aXZlOwotICAgIFJlZlB0
cjxXZWJQYWdlUHJveHk+IG1fcGFnZTsKLSAgICBWZWN0b3I8V1RGOjpTdHJpbmc+IG1fcGVuZGlu
Z0VkaXRvckNvbW1hbmRzOwotICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBtX25hdGl2ZVdpZGdldDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViVmlld19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdXaWRnZXQuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZGZkZDNiMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdXaWRnZXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzc3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmls
aXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJW
aWV3V2lkZ2V0LmgiCi0KLSNpbmNsdWRlICJHT3duUHRyR3RrLmgiCi0jaW5jbHVkZSAiR3RrVmVy
c2lvbmluZy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVmUHRy
Q2Fpcm8uaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1zdGF0aWMgZ3BvaW50ZXIgd2ViVmlld1dpZGdldFBhcmVudENsYXNzID0gMDsKLQot
c3RydWN0IF9XZWJWaWV3V2lkZ2V0UHJpdmF0ZSB7Ci0gICAgV2ViVmlldyogd2ViVmlld0luc3Rh
bmNlOwotICAgIEd0a0lNQ29udGV4dCogaW1Db250ZXh0OwotICAgIGdpbnQgY3VycmVudENsaWNr
Q291bnQ7Ci0gICAgSW50UG9pbnQgcHJldmlvdXNDbGlja1BvaW50OwotICAgIGd1aW50IHByZXZp
b3VzQ2xpY2tCdXR0b247Ci0gICAgZ3VpbnQzMiBwcmV2aW91c0NsaWNrVGltZTsKLX07Ci0KLXN0
YXRpYyB2b2lkIHdlYlZpZXdXaWRnZXRSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQotewotICAg
IGd0a193aWRnZXRfc2V0X3JlYWxpemVkKHdpZGdldCwgVFJVRSk7Ci0KLSAgICBHdGtBbGxvY2F0
aW9uIGFsbG9jYXRpb247Ci0gICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZh
bGxvY2F0aW9uKTsKLQotICAgIEdka1dpbmRvd0F0dHIgYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1
dGVzLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19DSElMRDsKLSAgICBhdHRyaWJ1dGVzLnggPSBh
bGxvY2F0aW9uLng7Ci0gICAgYXR0cmlidXRlcy55ID0gYWxsb2NhdGlvbi55OwotICAgIGF0dHJp
YnV0ZXMud2lkdGggPSBhbGxvY2F0aW9uLndpZHRoOwotICAgIGF0dHJpYnV0ZXMuaGVpZ2h0ID0g
YWxsb2NhdGlvbi5oZWlnaHQ7Ci0gICAgYXR0cmlidXRlcy53Y2xhc3MgPSBHREtfSU5QVVRfT1VU
UFVUOwotICAgIGF0dHJpYnV0ZXMudmlzdWFsID0gZ3RrX3dpZGdldF9nZXRfdmlzdWFsKHdpZGdl
dCk7Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBhdHRyaWJ1dGVzLmNvbG9ybWFwID0g
Z3RrX3dpZGdldF9nZXRfY29sb3JtYXAod2lkZ2V0KTsKLSNlbmRpZgotICAgIGF0dHJpYnV0ZXMu
ZXZlbnRfbWFzayA9IEdES19WSVNJQklMSVRZX05PVElGWV9NQVNLCi0gICAgICAgIHwgR0RLX0VY
UE9TVVJFX01BU0sKLSAgICAgICAgfCBHREtfQlVUVE9OX1BSRVNTX01BU0sKLSAgICAgICAgfCBH
REtfQlVUVE9OX1JFTEVBU0VfTUFTSwotICAgICAgICB8IEdES19QT0lOVEVSX01PVElPTl9NQVNL
Ci0gICAgICAgIHwgR0RLX0tFWV9QUkVTU19NQVNLCi0gICAgICAgIHwgR0RLX0tFWV9SRUxFQVNF
X01BU0sKLSAgICAgICAgfCBHREtfQlVUVE9OX01PVElPTl9NQVNLCi0gICAgICAgIHwgR0RLX0JV
VFRPTjFfTU9USU9OX01BU0sKLSAgICAgICAgfCBHREtfQlVUVE9OMl9NT1RJT05fTUFTSwotICAg
ICAgICB8IEdES19CVVRUT04zX01PVElPTl9NQVNLOwotCi0gICAgZ2ludCBhdHRyaWJ1dGVzTWFz
ayA9IEdES19XQV9YIHwgR0RLX1dBX1kgfCBHREtfV0FfVklTVUFMOwotI2lmZGVmIEdUS19BUElf
VkVSU0lPTl8yCi0gICAgYXR0cmlidXRlc01hc2sgfD0gR0RLX1dBX0NPTE9STUFQOwotI2VuZGlm
Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBnZGtfd2luZG93X25ldyhndGtfd2lkZ2V0X2dldF9w
YXJlbnRfd2luZG93KHdpZGdldCksICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzTWFzayk7Ci0gICAg
Z3RrX3dpZGdldF9zZXRfd2luZG93KHdpZGdldCwgd2luZG93KTsKLSAgICBnZGtfd2luZG93X3Nl
dF91c2VyX2RhdGEod2luZG93LCB3aWRnZXQpOwotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
LSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMCwgMCkKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2F0
dGFjaCh3aWRnZXQpOwotI2Vsc2UKLSAgICB3aWRnZXQtPnN0eWxlID0gZ3RrX3N0eWxlX2F0dGFj
aChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCB3aW5kb3cpOwotI2VuZGlmCi0gICAgZ3Rr
X3N0eWxlX3NldF9iYWNrZ3JvdW5kKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIHdpbmRv
dywgR1RLX1NUQVRFX05PUk1BTCk7Ci0jZWxzZQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9i
YWNrZ3JvdW5kKGd0a193aWRnZXRfZ2V0X3N0eWxlX2NvbnRleHQod2lkZ2V0KSwgd2luZG93KTsK
LSNlbmRpZgotCi0gICAgV2ViVmlld1dpZGdldCogd2ViVmlldyA9IFdFQl9WSUVXX1dJREdFVCh3
aWRnZXQpOwotICAgIFdlYlZpZXdXaWRnZXRQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsK
LSAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyhwcml2LT5pbUNvbnRleHQsIHdp
bmRvdyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYlZpZXdXaWRnZXRDb250YWluZXJBZGQoR3RrQ29u
dGFpbmVyKiBjb250YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQotewotICAgIGd0a193aWRnZXRf
c2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHdlYlZpZXdXaWRnZXREaXNwb3NlKEdPYmplY3QqIGdvYmplY3QpCi17Ci0gICAgV2ViVmll
d1dpZGdldCogd2ViVmlld1dpZGdldCA9IFdFQl9WSUVXX1dJREdFVChnb2JqZWN0KTsKLSAgICBX
ZWJWaWV3V2lkZ2V0UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdXaWRnZXQtPnByaXY7Ci0KLSAgICBp
ZiAocHJpdi0+aW1Db250ZXh0KSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPmltQ29u
dGV4dCk7Ci0gICAgICAgIHByaXYtPmltQ29udGV4dCA9IDA7Ci0gICAgfQotCi0gICAgR19PQkpF
Q1RfQ0xBU1Mod2ViVmlld1dpZGdldFBhcmVudENsYXNzKS0+ZGlzcG9zZShnb2JqZWN0KTsKLX0K
LQotc3RhdGljIHZvaWQgd2ViVmlld1dpZGdldEluaXQoV2ViVmlld1dpZGdldCogd2ViVmlld1dp
ZGdldCkKLXsKLSAgICBXZWJWaWV3V2lkZ2V0UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURSh3ZWJWaWV3V2lkZ2V0LCBXRUJfVklFV19UWVBFX1dJREdFVCwgV2ViVmll
d1dpZGdldFByaXZhdGUpOwotICAgIHdlYlZpZXdXaWRnZXQtPnByaXYgPSBwcml2OwotCi0gICAg
Z3RrX3dpZGdldF9zZXRfY2FuX2ZvY3VzKEdUS19XSURHRVQod2ViVmlld1dpZGdldCksIFRSVUUp
OwotICAgIHByaXYtPmltQ29udGV4dCA9IGd0a19pbV9tdWx0aWNvbnRleHRfbmV3KCk7Ci0KLSAg
ICBwcml2LT5jdXJyZW50Q2xpY2tDb3VudCA9IDA7Ci0gICAgcHJpdi0+cHJldmlvdXNDbGlja0J1
dHRvbiA9IDA7Ci0gICAgcHJpdi0+cHJldmlvdXNDbGlja1RpbWUgPSAwOwotfQotCi0jaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKLXN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3RXhwb3NlKEd0a1dpZGdl
dCogd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSogZXZlbnQpCi17Ci0gICAgV2ViVmlldyogd2ViVmll
dyA9IHdlYlZpZXdXaWRnZXRHZXRXZWJWaWV3SW5zdGFuY2UoV0VCX1ZJRVdfV0lER0VUKHdpZGdl
dCkpOwotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKLSAgICBnZGtfcmVnaW9uX2dldF9jbGlw
Ym94KGV2ZW50LT5yZWdpb24sICZjbGlwUmVjdCk7Ci0KLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOwotICAgIFJlZlB0cjxjYWlyb190PiBjciA9
IGFkb3B0UmVmKGdka19jYWlyb19jcmVhdGUod2luZG93KSk7Ci0KLSAgICB3ZWJWaWV3LT5wYWlu
dCh3aWRnZXQsIGNsaXBSZWN0LCBjci5nZXQoKSk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0j
ZWxzZQotc3RhdGljIGdib29sZWFuIHdlYlZpZXdEcmF3KEd0a1dpZGdldCogd2lkZ2V0LCBjYWly
b190KiBjcikKLXsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViVmlld1dpZGdldEdldFdlYlZp
ZXdJbnN0YW5jZShXRUJfVklFV19XSURHRVQod2lkZ2V0KSk7Ci0gICAgR2RrUmVjdGFuZ2xlIGNs
aXBSZWN0OwotCi0gICAgaWYgKCFnZGtfY2Fpcm9fZ2V0X2NsaXBfcmVjdGFuZ2xlKGNyLCAmY2xp
cFJlY3QpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICB3ZWJWaWV3LT5wYWludCh3aWRn
ZXQsIGNsaXBSZWN0LCBjcik7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0jZW5kaWYKLQotc3Rh
dGljIHZvaWQgd2ViVmlld1NpemVBbGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2Nh
dGlvbiogYWxsb2NhdGlvbikKLXsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViVmlld1dpZGdl
dEdldFdlYlZpZXdJbnN0YW5jZShXRUJfVklFV19XSURHRVQod2lkZ2V0KSk7Ci0gICAgR1RLX1dJ
REdFVF9DTEFTUyh3ZWJWaWV3V2lkZ2V0UGFyZW50Q2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdl
dCwgYWxsb2NhdGlvbik7Ci0gICAgd2ViVmlldy0+c2V0U2l6ZSh3aWRnZXQsIEludFNpemUoYWxs
b2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCkpOwotfQotCi1zdGF0aWMgZ2Jvb2xl
YW4gd2ViVmlld0ZvY3VzSW5FdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRGb2N1cyog
ZXZlbnQpCi17Ci0gICAgV2ViVmlld1dpZGdldCogd2ViVmlld1dpZGdldCA9IFdFQl9WSUVXX1dJ
REdFVCh3aWRnZXQpOwotICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJWaWV3V2lkZ2V0R2V0V2Vi
Vmlld0luc3RhbmNlKHdlYlZpZXdXaWRnZXQpOwotCi0gICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9
IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKHdpZGdldCk7Ci0gICAgaWYgKGd0a193aWRnZXRfaXNf
dG9wbGV2ZWwodG9wbGV2ZWwpICYmIGd0a193aW5kb3dfaGFzX3RvcGxldmVsX2ZvY3VzKEdUS19X
SU5ET1codG9wbGV2ZWwpKSkgewotICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbih3ZWJW
aWV3V2lkZ2V0R2V0SU1Db250ZXh0KHdlYlZpZXdXaWRnZXQpKTsKLSAgICAgICAgd2ViVmlldy0+
aGFuZGxlRm9jdXNJbkV2ZW50KHdpZGdldCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdUS19XSURH
RVRfQ0xBU1Mod2ViVmlld1dpZGdldFBhcmVudENsYXNzKS0+Zm9jdXNfaW5fZXZlbnQod2lkZ2V0
LCBldmVudCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3Rm9jdXNPdXRFdmVudChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRXZlbnRGb2N1cyogZXZlbnQpCi17Ci0gICAgV2ViVmlld1dpZGdl
dCogd2ViVmlld1dpZGdldCA9IFdFQl9WSUVXX1dJREdFVCh3aWRnZXQpOwotICAgIFdlYlZpZXcq
IHdlYlZpZXcgPSB3ZWJWaWV3V2lkZ2V0R2V0V2ViVmlld0luc3RhbmNlKHdlYlZpZXdXaWRnZXQp
OwotCi0gICAgd2ViVmlldy0+aGFuZGxlRm9jdXNPdXRFdmVudCh3aWRnZXQpOwotICAgIEd0a0lN
Q29udGV4dCogaW1Db250ZXh0ID0gd2ViVmlld1dpZGdldEdldElNQ29udGV4dCh3ZWJWaWV3V2lk
Z2V0KTsKLSAgICBpZiAoaW1Db250ZXh0KQotICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19v
dXQoaW1Db250ZXh0KTsKLQotICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYlZpZXdXaWRn
ZXRQYXJlbnRDbGFzcyktPmZvY3VzX291dF9ldmVudCh3aWRnZXQsIGV2ZW50KTsKLX0KLQotc3Rh
dGljIGdib29sZWFuIHdlYlZpZXdLZXlQcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtF
dmVudEtleSogZXZlbnQpCi17Ci0gICAgV2ViVmlldyogd2ViVmlldyA9IHdlYlZpZXdXaWRnZXRH
ZXRXZWJWaWV3SW5zdGFuY2UoV0VCX1ZJRVdfV0lER0VUKHdpZGdldCkpOwotICAgIHdlYlZpZXct
PmhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQpOwotCi0gICAgcmV0dXJuIEdUS19XSURHRVRfQ0xB
U1Mod2ViVmlld1dpZGdldFBhcmVudENsYXNzKS0+a2V5X3ByZXNzX2V2ZW50KHdpZGdldCwgZXZl
bnQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0tleVJlbGVhc2VFdmVudChHdGtXaWRn
ZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50KQotewotICAgIFdlYlZpZXdXaWRnZXQqIHdl
YlZpZXdXaWRnZXQgPSBXRUJfVklFV19XSURHRVQod2lkZ2V0KTsKLSAgICBXZWJWaWV3KiB3ZWJW
aWV3ID0gd2ViVmlld1dpZGdldEdldFdlYlZpZXdJbnN0YW5jZSh3ZWJWaWV3V2lkZ2V0KTsKLQot
ICAgIGlmIChndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3Mod2ViVmlld1dpZGdldEdldElN
Q29udGV4dCh3ZWJWaWV3V2lkZ2V0KSwgZXZlbnQpKQotICAgICAgICByZXR1cm4gVFJVRTsKLQot
ICAgIHdlYlZpZXctPmhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQpOwotCi0gICAgcmV0dXJuIEdU
S19XSURHRVRfQ0xBU1Mod2ViVmlld1dpZGdldFBhcmVudENsYXNzKS0+a2V5X3JlbGVhc2VfZXZl
bnQod2lkZ2V0LCBldmVudCk7Ci19Ci0KLS8vIENvcGllZCBmcm9tIHdlYmtpdHdlYnZpZXcuY3Bw
Ci1zdGF0aWMgZ3VpbnQzMiBnZXRFdmVudFRpbWUoR2RrRXZlbnQqIGV2ZW50KQotewotICAgIGd1
aW50MzIgdGltZSA9IGdka19ldmVudF9nZXRfdGltZShldmVudCk7Ci0gICAgaWYgKHRpbWUpCi0g
ICAgICAgIHJldHVybiB0aW1lOwotCi0gICAgLy8gUmVhbCBldmVudHMgYWx3YXlzIGhhdmUgYSBu
b24temVybyB0aW1lLCBidXQgZXZlbnRzIHN5bnRoZXNpemVkCi0gICAgLy8gYnkgdGhlIERSVCBk
byBub3QgYW5kIHdlIG11c3QgY2FsY3VsYXRlIGEgdGltZSBtYW51YWxseS4gVGhpcyB0aW1lCi0g
ICAgLy8gaXMgbm90IGNhbGN1bGF0ZWQgaW4gdGhlIERSVCwgYmVjYXVzZSBHVEsrIGRvZXMgbm90
IHdvcmsgd2VsbCB3aXRoCi0gICAgLy8gYW55dGhpbmcgb3RoZXIgdGhhbiBHREtfQ1VSUkVOVF9U
SU1FIG9uIHN5bnRoZXNpemVkIGV2ZW50cy4KLSAgICBHVGltZVZhbCB0aW1lVmFsdWU7Ci0gICAg
Z19nZXRfY3VycmVudF90aW1lKCZ0aW1lVmFsdWUpOwotICAgIHJldHVybiAodGltZVZhbHVlLnR2
X3NlYyAqIDEwMDApICsgKHRpbWVWYWx1ZS50dl91c2VjIC8gMTAwMCk7Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiB3ZWJWaWV3QnV0dG9uUHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZl
bnRCdXR0b24qIGJ1dHRvbkV2ZW50KQotewotICAgIGlmIChidXR0b25FdmVudC0+YnV0dG9uID09
IDMpIHsKLSAgICAgICAgLy8gRklYTUU6IFtHVEtdIEFkZCBjb250ZXh0IG1lbnUgc3VwcG9ydCBm
b3IgV2Via2l0Mi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU0ODI3Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJldHVybiBG
QUxTRTsKLSAgICB9Ci0KLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMod2lkZ2V0KTsKLQotICAg
IC8vIEZvciBkb3VibGUgYW5kIHRyaXBsZSBjbGlja3MgR0RLIHNlbmRzIGJvdGggYSBub3JtYWwg
YnV0dG9uIHByZXNzIGV2ZW50Ci0gICAgLy8gYW5kIGEgc3BlY2lmaWMgdHlwZSAobGlrZSBHREtf
MkJVVFRPTl9QUkVTUykuIElmIHdlIGRldGVjdCBhIHNwZWNpYWwgcHJlc3MKLSAgICAvLyBjb21p
bmcgdXAsIGlnbm9yZSB0aGlzIGV2ZW50IGFzIGl0IGNlcnRhaW5seSBnZW5lcmF0ZWQgdGhlIGRv
dWJsZSBvciB0cmlwbGUKLSAgICAvLyBjbGljay4gVGhlIGNvbnNlcXVlbmNlIG9mIG5vdCBlYXRp
bmcgdGhpcyBldmVudCBpcyB0d28gRE9NIGJ1dHRvbiBwcmVzcyBldmVudHMKLSAgICAvLyBhcmUg
Z2VuZXJhdGVkLgotICAgIEdPd25QdHI8R2RrRXZlbnQ+IG5leHRFdmVudChnZGtfZXZlbnRfcGVl
aygpKTsKLSAgICBpZiAobmV4dEV2ZW50ICYmIChuZXh0RXZlbnQtPmFueS50eXBlID09IEdES18y
QlVUVE9OX1BSRVNTIHx8IG5leHRFdmVudC0+YW55LnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1Mp
KQotICAgICAgICByZXR1cm4gVFJVRTsKLQotICAgIGdpbnQgZG91YmxlQ2xpY2tEaXN0YW5jZSA9
IDI1MDsKLSAgICBnaW50IGRvdWJsZUNsaWNrVGltZSA9IDU7Ci0gICAgR3RrU2V0dGluZ3MqIHNl
dHRpbmdzID0gZ3RrX3NldHRpbmdzX2dldF9mb3Jfc2NyZWVuKGd0a193aWRnZXRfZ2V0X3NjcmVl
bih3aWRnZXQpKTsKLSAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsCi0gICAgICAgICAgICAgICAg
ICJndGstZG91YmxlLWNsaWNrLWRpc3RhbmNlIiwgJmRvdWJsZUNsaWNrRGlzdGFuY2UsCi0gICAg
ICAgICAgICAgICAgICJndGstZG91YmxlLWNsaWNrLXRpbWUiLCAmZG91YmxlQ2xpY2tUaW1lLCBO
VUxMKTsKLQotICAgIC8vIEdUSysgb25seSBjb3VudHMgdXAgdG8gdHJpcGxlIGNsaWNrcywgYnV0
IFdlYkNvcmUgd2FudHMgdG8ga25vdyBhYm91dAotICAgIC8vIHF1YWRydXBsZSBjbGlja3MsIHF1
aW50dXBsZSBjbGlja3MsIGFkIGluZmluaXR1bS4gSGVyZSwgd2UgcmVwbGljYXRlIHRoZQotICAg
IC8vIEdESyBsb2dpYyBmb3IgY291bnRpbmcgY2xpY2tzLgotICAgIEdka0V2ZW50KiBldmVudChy
ZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oYnV0dG9uRXZlbnQpKTsKLSAgICBndWludDMyIGV2
ZW50VGltZSA9IGdldEV2ZW50VGltZShldmVudCk7Ci0gICAgV2ViVmlld1dpZGdldCogd2ViVmll
d1dpZGdldCA9IFdFQl9WSUVXX1dJREdFVCh3aWRnZXQpOwotICAgIFdlYlZpZXdXaWRnZXRQcml2
YXRlKiBwcml2ID0gd2ViVmlld1dpZGdldC0+cHJpdjsKLSAgICBpZiAoKGV2ZW50LT50eXBlID09
IEdES18yQlVUVE9OX1BSRVNTIHx8IGV2ZW50LT50eXBlID09IEdES18zQlVUVE9OX1BSRVNTKQot
ICAgICAgICB8fCAoKGFicyhidXR0b25FdmVudC0+eCAtIHByaXYtPnByZXZpb3VzQ2xpY2tQb2lu
dC54KCkpIDwgZG91YmxlQ2xpY2tEaXN0YW5jZSkKLSAgICAgICAgICAgICYmIChhYnMoYnV0dG9u
RXZlbnQtPnkgLSBwcml2LT5wcmV2aW91c0NsaWNrUG9pbnQueSgpKSA8IGRvdWJsZUNsaWNrRGlz
dGFuY2UpCi0gICAgICAgICAgICAmJiAoZXZlbnRUaW1lIC0gcHJpdi0+cHJldmlvdXNDbGlja1Rp
bWUgPCBzdGF0aWNfY2FzdDxndWludD4oZG91YmxlQ2xpY2tUaW1lKSkKLSAgICAgICAgICAgICYm
IChidXR0b25FdmVudC0+YnV0dG9uID09IHByaXYtPnByZXZpb3VzQ2xpY2tCdXR0b24pKSkKLSAg
ICAgICAgcHJpdi0+Y3VycmVudENsaWNrQ291bnQrKzsKLSAgICBlbHNlCi0gICAgICAgIHByaXYt
PmN1cnJlbnRDbGlja0NvdW50ID0gMTsKLQotICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJWaWV3
V2lkZ2V0R2V0V2ViVmlld0luc3RhbmNlKHdlYlZpZXdXaWRnZXQpOwotICAgIHdlYlZpZXctPmhh
bmRsZU1vdXNlRXZlbnQoZXZlbnQsIHByaXYtPmN1cnJlbnRDbGlja0NvdW50KTsKLQotICAgIGdk
b3VibGUgeCwgeTsKLSAgICBnZGtfZXZlbnRfZ2V0X2Nvb3JkcyhldmVudCwgJngsICZ5KTsKLSAg
ICBwcml2LT5wcmV2aW91c0NsaWNrUG9pbnQgPSBJbnRQb2ludCh4LCB5KTsKLSAgICBwcml2LT5w
cmV2aW91c0NsaWNrQnV0dG9uID0gYnV0dG9uRXZlbnQtPmJ1dHRvbjsKLSAgICBwcml2LT5wcmV2
aW91c0NsaWNrVGltZSA9IGV2ZW50VGltZTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3Rh
dGljIGdib29sZWFuIHdlYlZpZXdCdXR0b25SZWxlYXNlRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQs
IEdka0V2ZW50QnV0dG9uKiBldmVudCkKLXsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViVmll
d1dpZGdldEdldFdlYlZpZXdJbnN0YW5jZShXRUJfVklFV19XSURHRVQod2lkZ2V0KSk7Ci0gICAg
Z3RrX3dpZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7Ci0gICAgd2ViVmlldy0+aGFuZGxlTW91c2VF
dmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAwIC8qIGN1cnJlbnRDbGlj
a0NvdW50ICovKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdl
YlZpZXdTY3JvbGxFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRTY3JvbGwqIGV2ZW50
KQotewotICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJWaWV3V2lkZ2V0R2V0V2ViVmlld0luc3Rh
bmNlKFdFQl9WSUVXX1dJREdFVCh3aWRnZXQpKTsKLSAgICB3ZWJWaWV3LT5oYW5kbGVXaGVlbEV2
ZW50KGV2ZW50KTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdl
YlZpZXdNb3Rpb25Ob3RpZnlFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRNb3Rpb24q
IGV2ZW50KQotewotICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJWaWV3V2lkZ2V0R2V0V2ViVmll
d0luc3RhbmNlKFdFQl9WSUVXX1dJREdFVCh3aWRnZXQpKTsKLSAgICB3ZWJWaWV3LT5oYW5kbGVN
b3VzZUV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksIDAgLyogY3VycmVu
dENsaWNrQ291bnQgKi8pOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB3
ZWJWaWV3V2lkZ2V0Q2xhc3NJbml0KFdlYlZpZXdXaWRnZXRDbGFzcyogd2ViVmlld1dpZGdldENs
YXNzKQotewotICAgIHdlYlZpZXdXaWRnZXRQYXJlbnRDbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVr
X3BhcmVudCh3ZWJWaWV3V2lkZ2V0Q2xhc3MpOwotCi0gICAgR3RrV2lkZ2V0Q2xhc3MqIHdpZGdl
dENsYXNzID0gR1RLX1dJREdFVF9DTEFTUyh3ZWJWaWV3V2lkZ2V0Q2xhc3MpOwotICAgIHdpZGdl
dENsYXNzLT5yZWFsaXplID0gd2ViVmlld1dpZGdldFJlYWxpemU7Ci0jaWZkZWYgR1RLX0FQSV9W
RVJTSU9OXzIKLSAgICB3aWRnZXRDbGFzcy0+ZXhwb3NlX2V2ZW50ID0gd2ViVmlld0V4cG9zZTsK
LSNlbHNlCi0gICAgd2lkZ2V0Q2xhc3MtPmRyYXcgPSB3ZWJWaWV3RHJhdzsKLSNlbmRpZgotICAg
IHdpZGdldENsYXNzLT5zaXplX2FsbG9jYXRlID0gd2ViVmlld1NpemVBbGxvY2F0ZTsKLSAgICB3
aWRnZXRDbGFzcy0+Zm9jdXNfaW5fZXZlbnQgPSB3ZWJWaWV3Rm9jdXNJbkV2ZW50OwotICAgIHdp
ZGdldENsYXNzLT5mb2N1c19vdXRfZXZlbnQgPSB3ZWJWaWV3Rm9jdXNPdXRFdmVudDsKLSAgICB3
aWRnZXRDbGFzcy0+a2V5X3ByZXNzX2V2ZW50ID0gd2ViVmlld0tleVByZXNzRXZlbnQ7Ci0gICAg
d2lkZ2V0Q2xhc3MtPmtleV9yZWxlYXNlX2V2ZW50ID0gd2ViVmlld0tleVJlbGVhc2VFdmVudDsK
LSAgICB3aWRnZXRDbGFzcy0+YnV0dG9uX3ByZXNzX2V2ZW50ID0gd2ViVmlld0J1dHRvblByZXNz
RXZlbnQ7Ci0gICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9yZWxlYXNlX2V2ZW50ID0gd2ViVmlld0J1
dHRvblJlbGVhc2VFdmVudDsKLSAgICB3aWRnZXRDbGFzcy0+c2Nyb2xsX2V2ZW50ID0gd2ViVmll
d1Njcm9sbEV2ZW50OwotICAgIHdpZGdldENsYXNzLT5tb3Rpb25fbm90aWZ5X2V2ZW50ID0gd2Vi
Vmlld01vdGlvbk5vdGlmeUV2ZW50OwotCi0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyh3ZWJWaWV3V2lkZ2V0Q2xhc3MpOwotICAgIGdvYmplY3RDbGFzcy0+
ZGlzcG9zZSA9IHdlYlZpZXdXaWRnZXREaXNwb3NlOwotCi0gICAgR3RrQ29udGFpbmVyQ2xhc3Mq
IGNvbnRhaW5lckNsYXNzID0gR1RLX0NPTlRBSU5FUl9DTEFTUyh3ZWJWaWV3V2lkZ2V0Q2xhc3Mp
OwotICAgIGNvbnRhaW5lckNsYXNzLT5hZGQgPSB3ZWJWaWV3V2lkZ2V0Q29udGFpbmVyQWRkOwot
Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHdlYlZpZXdXaWRnZXRDbGFzcywgc2l6ZW9m
KFdlYlZpZXdXaWRnZXRQcml2YXRlKSk7Ci19Ci0KLUdUeXBlIHdlYlZpZXdXaWRnZXRHZXRUeXBl
KCkKLXsKLSAgICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgZ0RlZmluZVR5cGVJZFZvbGF0aWxlID0g
MDsKLQotICAgIGlmICghZ19vbmNlX2luaXRfZW50ZXIoJmdEZWZpbmVUeXBlSWRWb2xhdGlsZSkp
Ci0gICAgICAgIHJldHVybiBnRGVmaW5lVHlwZUlkVm9sYXRpbGU7Ci0KLSAgICBHVHlwZSBnRGVm
aW5lVHlwZUlkID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpY19zaW1wbGUoR1RLX1RZUEVfQ09OVEFJ
TkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX2ludGVybl9zdGF0aWNfc3RyaW5nKCJXZWJWaWV3V2lkZ2V0IiksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihXZWJW
aWV3V2lkZ2V0Q2xhc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdDbGFzc0luaXRGdW5jPih3ZWJWaWV3
V2lkZ2V0Q2xhc3NJbml0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZW9mKFdlYlZpZXdXaWRnZXQpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PEdJbnN0YW5jZUluaXRGdW5jPih3ZWJWaWV3V2lkZ2V0SW5pdCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdUeXBl
RmxhZ3M+KDApKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSgmZ0RlZmluZVR5cGVJZFZvbGF0aWxl
LCBnRGVmaW5lVHlwZUlkKTsKLQotICAgIHJldHVybiBnRGVmaW5lVHlwZUlkVm9sYXRpbGU7Ci19
Ci0KLVdlYlZpZXcqIHdlYlZpZXdXaWRnZXRHZXRXZWJWaWV3SW5zdGFuY2UoV2ViVmlld1dpZGdl
dCogd2ViVmlld1dpZGdldCkKLXsKLSAgICByZXR1cm4gd2ViVmlld1dpZGdldC0+cHJpdi0+d2Vi
Vmlld0luc3RhbmNlOwotfQotCi12b2lkIHdlYlZpZXdXaWRnZXRTZXRXZWJWaWV3SW5zdGFuY2Uo
V2ViVmlld1dpZGdldCogd2ViVmlld1dpZGdldCwgV2ViVmlldyogd2ViVmlld0luc3RhbmNlKQot
ewotICAgIHdlYlZpZXdXaWRnZXQtPnByaXYtPndlYlZpZXdJbnN0YW5jZSA9IHdlYlZpZXdJbnN0
YW5jZTsKLX0KLQotR3RrSU1Db250ZXh0KiB3ZWJWaWV3V2lkZ2V0R2V0SU1Db250ZXh0KFdlYlZp
ZXdXaWRnZXQqIHdlYlZpZXdXaWRnZXQpCi17Ci0gICAgcmV0dXJuIHdlYlZpZXdXaWRnZXQtPnBy
aXYtPmltQ29udGV4dDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViVmlld1dpZGdldC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3
V2lkZ2V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMWQ4N2YuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3V2lkZ2V0LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAx
MCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlZpZXdXaWRn
ZXRfaAotI2RlZmluZSBXZWJWaWV3V2lkZ2V0X2gKLQotI2luY2x1ZGUgIldlYlZpZXcuaCIKLQot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotR19CRUdJ
Tl9ERUNMUwotCi0jZGVmaW5lIFdFQl9WSUVXX1RZUEVfV0lER0VUICAgICAgICAgICAgICAod2Vi
Vmlld1dpZGdldEdldFR5cGUoKSkKLSNkZWZpbmUgV0VCX1ZJRVdfV0lER0VUKG9iamVjdCkgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqZWN0KSwgV0VCX1ZJRVdfVFlQ
RV9XSURHRVQsIFdlYlZpZXdXaWRnZXQpKQotI2RlZmluZSBXRUJfVklFV19XSURHRVRfQ0xBU1Mo
a2xhc3MpICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQl9WSUVXX1RZ
UEVfV0lER0VULCBXZWJWaWV3V2lkZ2V0Q2xhc3MpKQotI2RlZmluZSBXRUJfVklFV19JU19XSURH
RVQob2JqZWN0KSAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmplY3QpLCBX
RUJfVklFV19UWVBFX1dJREdFVCkpCi0jZGVmaW5lIFdFQl9WSUVXX0lTX0NMQVNTKGtsYXNzKSAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgV0VCX1ZJRVdfVFlQRV9X
SURHRVQpKQotI2RlZmluZSBXRUJfVklFV19XSURHRVRfR0VUX0NMQVNTKG9iamVjdCkgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iamVjdCksIFdFQl9WSUVXX1RZUEVfV0lER0VULCBXZWJW
aWV3V2lkZ2V0Q2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViVmlld1dpZGdldCBXZWJWaWV3
V2lkZ2V0OwotdHlwZWRlZiBzdHJ1Y3QgX1dlYlZpZXdXaWRnZXRDbGFzcyBXZWJWaWV3V2lkZ2V0
Q2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfV2ViVmlld1dpZGdldFByaXZhdGUgV2ViVmlld1dpZGdl
dFByaXZhdGU7Ci0KLXN0cnVjdCBfV2ViVmlld1dpZGdldCB7Ci0gICAgR3RrQ29udGFpbmVyIHBh
cmVudEluc3RhbmNlOwotICAgIC8qPCBwcml2YXRlID4qLwotICAgIFdlYlZpZXdXaWRnZXRQcml2
YXRlKiBwcml2OwotfTsKLQotc3RydWN0IF9XZWJWaWV3V2lkZ2V0Q2xhc3MgewotICAgIEd0a0Nv
bnRhaW5lckNsYXNzIHBhcmVudENsYXNzOwotfTsKLQotR1R5cGUgd2ViVmlld1dpZGdldEdldFR5
cGUoKTsKLQotV2ViVmlldyogd2ViVmlld1dpZGdldEdldFdlYlZpZXdJbnN0YW5jZShXZWJWaWV3
V2lkZ2V0Kik7Ci0KLXZvaWQgd2ViVmlld1dpZGdldFNldFdlYlZpZXdJbnN0YW5jZShXZWJWaWV3
V2lkZ2V0KiwgV2ViVmlldyopOwotCi1HdGtJTUNvbnRleHQqIHdlYlZpZXdXaWRnZXRHZXRJTUNv
bnRleHQoV2ViVmlld1dpZGdldCopOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLy8gV2ViVmll
d1dpZGdldF9oCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jIGIvVG9v
bHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYwppbmRleCAwYzMyNTEwLi4yMmY3NWVjIDEwMDY0NAot
LS0gYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCisrKyBiL1Rvb2xzL01pbmlCcm93c2Vy
L2d0ay9tYWluLmMKQEAgLTMyLDcgKzMyLDcgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGVVcmlFbnRy
eUNhbGxiYWNrKEd0a1dpZGdldCAqZW50cnksIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgV0tWaWV3
UmVmIHdlYlZpZXcgPSBnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChlbnRyeSksICJ3ZWItdmll
dyIpOwogICAgIGNvbnN0IGdjaGFyICp1cmkgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZ
KGVudHJ5KSk7Ci0gICAgV0tQYWdlTG9hZFVSTChXS1ZpZXdHZXRQYWdlKHdlYlZpZXcpLCBXS1VS
TENyZWF0ZVdpdGhVUkwodXJpKSk7CisgICAgV0tQYWdlTG9hZFVSTChXS1ZpZXdHZXRQYWdlKHdl
YlZpZXcpLCBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1cmkpKTsKIH0KIAogc3RhdGljIHZv
aWQgZGVzdHJveUNhbGxiYWNrKEd0a1dpZGdldCAqd2lkZ2V0LCBHdGtXaWRnZXQgKndpbmRvdykK
QEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIEd0a1dpZGdldCAqY3JlYXRlV2luZG93KFdLVmlld1Jl
ZiB3ZWJWaWV3KQogCiAgICAgR3RrV2lkZ2V0ICp2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAw
KTsKICAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgY3JlYXRlVG9vbGJhcih1
cmlFbnRyeSwgd2ViVmlldyksIEZBTFNFLCBGQUxTRSwgMCk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0
YXJ0KEdUS19CT1godmJveCksIFdLVmlld0dldFdpbmRvdyh3ZWJWaWV3KSwgVFJVRSwgVFJVRSwg
MCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIEdUS19XSURHRVQod2Vi
VmlldyksIFRSVUUsIFRSVUUsIDApOwogCiAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUih3aW5kb3cpLCB2Ym94KTsKIApAQCAtMTI3LDEwICsxMjcsMTAgQEAgaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKICAgICBHdGtXaWRnZXQgKm1haW5XaW5kb3cgPSBjcmVhdGVX
aW5kb3cod2ViVmlldyk7CiAKICAgICBnY2hhciogdXJsID0gYXJndW1lbnRUb1VSTChhcmdjID4g
MSA/IGFyZ3ZbMV0gOiAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIpOwotICAgIFdLUGFnZUxv
YWRVUkwoV0tWaWV3R2V0UGFnZSh3ZWJWaWV3KSwgV0tVUkxDcmVhdGVXaXRoVVJMKHVybCkpOwor
ICAgIFdLUGFnZUxvYWRVUkwoV0tWaWV3R2V0UGFnZSh3ZWJWaWV3KSwgV0tVUkxDcmVhdGVXaXRo
VVRGOENTdHJpbmcodXJsKSk7CiAgICAgZ19mcmVlKHVybCk7CiAKLSAgICBndGtfd2lkZ2V0X2dy
YWJfZm9jdXMoV0tWaWV3R2V0V2luZG93KHdlYlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X2dyYWJf
Zm9jdXMoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CiAgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtYWlu
V2luZG93KTsKICAgICBndGtfbWFpbigpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>