<?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>103644</bug_id>
          
          <creation_ts>2012-11-29 08:41:38 -0800</creation_ts>
          <short_desc>[GTK] Split GtkAuthenticationDialog in two widgets</short_desc>
          <delta_ts>2013-04-12 11:56:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>779033</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-29 08:41:38 -0800</bug_when>
    <thetext>One for the common auth logic and another one with the dialog specific things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779036</commentid>
    <comment_count>1</comment_count>
      <attachid>176741</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-29 08:44:47 -0800</bug_when>
    <thetext>Created attachment 176741
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781275</commentid>
    <comment_count>2</comment_count>
      <attachid>177218</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-12-03 03:06:25 -0800</bug_when>
    <thetext>Created attachment 177218
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781281</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-03 03:12:10 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781282</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-03 03:12:32 -0800</bug_when>
    <thetext>Attachment 177218 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u...&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.h&quot;
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:165:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:169:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:170:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:175:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:178:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:179:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 19 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>840599</commentid>
    <comment_count>5</comment_count>
      <attachid>189975</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-02-24 06:33:09 -0800</bug_when>
    <thetext>Created attachment 189975
Updated patch

Updated to apply on current git master. This patch also fixes a problem in both WebKit1 and WebKit2 when the web view is destroyed with an active auth dialog, in WebKit1 the dialog remains open while in WebKit2 the UI process crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840600</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-02-24 06:33:44 -0800</bug_when>
    <thetext>Adding owners to CC, since the patch includes changes in WebKit2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840603</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-24 06:45:24 -0800</bug_when>
    <thetext>Attachment 189975 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkAuthenticationDialog.h&apos;, u&apos;Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp&apos;, u&apos;Source/WebCore/platform/gtk/WebKitAuthenticationWidget.h&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/WebKit/gtk/GNUmakefile.am&apos;, u&apos;Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp&apos;, u&apos;Source/WebKit/gtk/po/ChangeLog&apos;, u&apos;Source/WebKit/gtk/po/POTFILES.in&apos;, u&apos;Source/WebKit/gtk/webkit/webkitauthenticationdialog.cpp&apos;, u&apos;Source/WebKit/gtk/webkit/webkitauthenticationdialog.h&apos;, u&apos;Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/GNUmakefile.list.am&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h&apos;, u&apos;Source/autotools/Versions.m4&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/gtk/generate-gtkdoc&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.h&quot;
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:166:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:170:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:171:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:176:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:179:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:180:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 23 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>848577</commentid>
    <comment_count>8</comment_count>
      <attachid>189975</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2013-03-06 00:46:26 -0800</bug_when>
    <thetext>Comment on attachment 189975
Updated patch

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

This looks great to me, I think a common core and two small widgets for wk1 and wk2 makes this more readable. I just have two or three very minor comments, but r+ as far as I&apos;m concerned.

&gt; Source/WebKit/gtk/webkit/webkitauthenticationdialog.h:21
&gt; +

I think it&apos;s probably not needed here but I&apos;d just add the G_BEGIN_DECLS stuff for consistency&apos;s sake.

&gt; Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp:27
&gt; +#include &lt;wtf/text/CString.h&gt;

This extra include seems odd?

&gt; Source/autotools/Versions.m4:-18
&gt; -m4_define([gtk2_required_version], [2.10])

If it&apos;s not a pain in the ass I&apos;d just try to not bump this, since the gtk2 stuff is on its way out and asking people to bump it for a very minor feature seems odd. But no strong feelings about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848579</commentid>
    <comment_count>9</comment_count>
      <attachid>189975</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2013-03-06 00:47:22 -0800</bug_when>
    <thetext>Comment on attachment 189975
Updated patch

Ah, leave the r+ alone since it touches stuff in WebKit2 (even if it&apos;s only GTK).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848588</commentid>
    <comment_count>10</comment_count>
      <attachid>189975</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-03-06 00:55:25 -0800</bug_when>
    <thetext>Comment on attachment 189975
Updated patch

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

Thanks for the review!

&gt;&gt; Source/WebKit/gtk/webkit/webkitauthenticationdialog.h:21
&gt;&gt; +
&gt; 
&gt; I think it&apos;s probably not needed here but I&apos;d just add the G_BEGIN_DECLS stuff for consistency&apos;s sake.

We don&apos;t use those macros in private headers, I think it doesn&apos;t even compile, since this is not a C header but a C++ one.

&gt;&gt; Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp:27
&gt;&gt; +#include &lt;wtf/text/CString.h&gt;
&gt; 
&gt; This extra include seems odd?

GtkAuthenticationDialog.h included CString, and it&apos;s used in this file.

&gt;&gt; Source/autotools/Versions.m4:-18
&gt;&gt; -m4_define([gtk2_required_version], [2.10])
&gt; 
&gt; If it&apos;s not a pain in the ass I&apos;d just try to not bump this, since the gtk2 stuff is on its way out and asking people to bump it for a very minor feature seems odd. But no strong feelings about it.

I don&apos;t think anybody will have to bump gtk version, 2.16 is already too old. I&apos;m not even sure current wk builds with gtk 2.10.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851008</commentid>
    <comment_count>11</comment_count>
      <attachid>189975</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-03-08 02:15:07 -0800</bug_when>
    <thetext>Comment on attachment 189975
Updated patch

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:30
&gt; +    RefPtr&lt;AuthenticationChallengeProxy&gt; authenticationChallenge;

There is a proper &quot;public&quot; API for this: WKAuthenticationChallenge (already used by Mac and EFL). Why can&apos;t it be used here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851017</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-03-08 02:24:35 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 189975 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=189975&amp;action=review

Thanks for the review.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:30
&gt; &gt; +    RefPtr&lt;AuthenticationChallengeProxy&gt; authenticationChallenge;
&gt; 
&gt; There is a proper &quot;public&quot; API for this: WKAuthenticationChallenge (already used by Mac and EFL). Why can&apos;t it be used here?

It can be used. We switched long time ago to use only the internal API, because the code is a lot simpler, to avoid unnecessary casts and memory allocations in some cases. We didn&apos;t know this was a problem for Apple, I&apos;ve always considered the C API as public for wk users not for the ports, and we indeed expose both APIs, so that WebKitGTK+ users can use the GTK+ high level API or the C API directly. Switching back to use the C API now would be a lot of work and we are currently at the end of our release cycle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851430</commentid>
    <comment_count>13</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-03-08 12:28:29 -0800</bug_when>
    <thetext>I don&apos;t see anything that could hurt the project. I sign off on this for WebKit2.

&gt; It can be used. We switched long time ago to use only the internal API, because the code is a lot simpler, to avoid unnecessary casts and memory allocations in some cases. We didn&apos;t know this was a problem for Apple, I&apos;ve always considered the C API as public for wk users not for the ports, and we indeed expose both APIs, so that WebKitGTK+ users can use the GTK+ high level API or the C API directly. Switching back to use the C API now would be a lot of work and we are currently at the end of our release cycle.

I don&apos;t have a strong opinion regarding using the C API or not for all ports.

What I care about is:
1) correctness and testing.
2) hackability.

The nice thing I see about the recent move from everyone to the C API, is we have a common ground for testing: the WK C API. Anything exposed there can/should be tested by solid API tests.

Ports can have extra layers of tests on top (and I think all of them do now), but the common base is covered by common tests.

That being said, I dislike the C API as the interfacing layer. I wish WebKit2 did not grow into this giant mess such that the C API is considered a good idea :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851747</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-03-09 01:00:36 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; I don&apos;t see anything that could hurt the project. I sign off on this for WebKit2.
&gt; 
&gt; &gt; It can be used. We switched long time ago to use only the internal API, because the code is a lot simpler, to avoid unnecessary casts and memory allocations in some cases. We didn&apos;t know this was a problem for Apple, I&apos;ve always considered the C API as public for wk users not for the ports, and we indeed expose both APIs, so that WebKitGTK+ users can use the GTK+ high level API or the C API directly. Switching back to use the C API now would be a lot of work and we are currently at the end of our release cycle.
&gt; 
&gt; I don&apos;t have a strong opinion regarding using the C API or not for all ports.
&gt; 
&gt; What I care about is:
&gt; 1) correctness and testing.
&gt; 2) hackability.
&gt; 
&gt; The nice thing I see about the recent move from everyone to the C API, is we have a common ground for testing: the WK C API. Anything exposed there can/should be tested by solid API tests.

Well, in most of the cases the C API methods are just wrappers around an internal method, without any other logic, so it&apos;s not that relevant for testing purposes. We use the C API clients to receive the events. The C API is also fully tested by WTR and the TestWebKitAPI tests.

&gt; Ports can have extra layers of tests on top (and I think all of them do now), but the common base is covered by common tests.

Indeed, unit tests are very important for us, and we don&apos;t accept patches adding new API without a solid unit test exercising the API. 

&gt; That being said, I dislike the C API as the interfacing layer. I wish WebKit2 did not grow into this giant mess such that the C API is considered a good idea :(

Agree, we decided to switch also because in the last contributors meeting it was said that the C API was going to be removed or replaced by a C++ API at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854220</commentid>
    <comment_count>15</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-03-13 05:24:51 -0700</bug_when>
    <thetext>See also Bug 112248 - POTFILES.in needs to be updated!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854278</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-03-13 07:12:02 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; See also Bug 112248 - POTFILES.in needs to be updated!

hmm, the patch actually includes those changes, the problem is that the POTFILES.in patch has changed in trunk since I wrote the patch, so it&apos;s not patched when applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855239</commentid>
    <comment_count>17</comment_count>
      <attachid>193134</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-03-14 09:10:31 -0700</bug_when>
    <thetext>Created attachment 193134
Updated patch

Updated for the POTFILE changes in trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855241</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-14 09:16:01 -0700</bug_when>
    <thetext>Attachment 193134 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkAuthenticationDialog.h&apos;, u&apos;Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp&apos;, u&apos;Source/WebCore/platform/gtk/WebKitAuthenticationWidget.h&apos;, u&apos;Source/WebCore/platform/gtk/po/POTFILES.in&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/WebKit/gtk/GNUmakefile.am&apos;, u&apos;Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp&apos;, u&apos;Source/WebKit/gtk/webkit/webkitauthenticationdialog.cpp&apos;, u&apos;Source/WebKit/gtk/webkit/webkitauthenticationdialog.h&apos;, u&apos;Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/GNUmakefile.list.am&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h&apos;, u&apos;Source/autotools/Versions.m4&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/gtk/generate-gtkdoc&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.h&quot;
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:166:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:170:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:171:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:176:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:179:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/gtk/WebKitAuthenticationWidget.cpp:180:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 22 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>874380</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-04-11 23:39:24 -0700</bug_when>
    <thetext>ping owners, this is just a refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874394</commentid>
    <comment_count>20</comment_count>
      <attachid>193134</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-12 00:08:45 -0700</bug_when>
    <thetext>Comment on attachment 193134
Updated patch

I sign off on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874819</commentid>
    <comment_count>21</comment_count>
      <attachid>193134</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2013-04-12 10:08:19 -0700</bug_when>
    <thetext>Comment on attachment 193134
Updated patch

I assume Benjamin&apos;s comment means this is ok for the owners.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874867</commentid>
    <comment_count>22</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-12 11:19:26 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 193134 [details])
&gt; I assume Benjamin&apos;s comment means this is ok for the owners.

Yep. :)

I had expressed my concerns before about using the C API, but that should not be blocking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874888</commentid>
    <comment_count>23</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-04-12 11:56:26 -0700</bug_when>
    <thetext>Committed r148294: &lt;http://trac.webkit.org/changeset/148294&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176741</attachid>
            <date>2012-11-29 08:44:47 -0800</date>
            <delta_ts>2012-12-03 03:06:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk-auth-widget.diff</filename>
            <type>text/plain</type>
            <size>29499</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyOGM3OTdjLi45OTJkNGRk
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTItMTEtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIFNwbGl0IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIGluIHR3byB3aWRn
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM2
NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNv
bmZpZ3VyZS5hYzogQnVtcCBHVEsrIDIgcmVxdWlyZW1lbnRzIHRvIDIuMTYgZm9yCisgICAgICAg
IEd0a09yaWVudGFibGUuCisKIDIwMTItMTEtMjYgIEhhbHRvbiBIdW8gIDxoYWx0b24uaHVvQGlu
dGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBDTWFrZSBzaG93cyBFTkFCTEVfM0RfUkVOREVSSU5H
IGFuZCBFTkFCTEVfV0VCR0wgaXMgc3RpbGwgT0ZGIHdoZW4gQUMgaXMgZW5hYmxlZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGI5OGY2YjguLjdhYWM5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAx
Mi0xMS0yOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gU3BsaXQgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgaW4gdHdvIHdpZGdldHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzY0NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhl
IGF1dGhlbnRpY2F0aW9uIGxvZ2ljIGZyb20gR3RrQXV0aGVudGljYXRpb25EaWFsb2cgdG8gYQor
ICAgICAgICBuZXcgd2lkZ2V0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGFueSBvdGhlciB3aWRnZXQu
IFRoaXMgYWxsb3dzIHRvCisgICAgICAgIHNoYXJlIHRoZSBhdXRoZW50aWNhdGlvbiBsb2dpYyBi
ZXR3ZWVuIFdlYktpdDEgYW5kIFdlYktpdDIgd2l0aG91dAorICAgICAgICBoYXZpbmcgdG8gdXNl
IGEgR3RrRGlhbG9nLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkIG5ldyBm
aWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3RrQXV0aGVudGljYXRpb25EaWFs
b2c6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nOjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nOjphdXRoZW50aWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3RrQXV0aGVudGlj
YXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg6CisgICAgICAgIChH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1dlYktpdEF1
dGhlbnRpY2F0aW9uV2lkZ2V0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcC4KKyAgICAgICAgKF9XZWJLaXRBdXRo
ZW50aWNhdGlvbldpZGdldFByaXZhdGUpOgorICAgICAgICAoYWRkRW50cnlUb0dyaWQpOgorICAg
ICAgICAod2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRJbml0aWFsaXplKToKKyAgICAgICAgKHdl
YmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0RmluYWxpemUpOgorICAgICAgICAod2Via2l0X2F1dGhl
bnRpY2F0aW9uX3dpZGdldF9pbml0KToKKyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl93
aWRnZXRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldE5l
dyk6IENyZWF0ZSBhCisgICAgICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0IGZvciB0aGUg
Z2l2ZW4gY2hhbGxlbmdlLgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVh
dGVDcmVkZW50aWFsKTogQ3JlYXRlIGEgQ3JlZGVudGlhbAorICAgICAgICB1c2luZyB0aGUgY3Vy
cmVudCB2YWx1ZXMgb2YgdGhlIHdpZGdldC4KKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9u
V2lkZ2V0R2V0Q2hhbGxlbmdlKTogUmV0dXJuIHRoZSBjaGFsbGVuZ2UuCisgICAgICAgICogcGxh
dGZvcm0vZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0Lmg6IEFkZGVkLgorCiAyMDEyLTEx
LTI3ICBNaWtlIFdlc3QgIDxta3dzdEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW1wcm92ZSBX
ZWJTb2NrZXRDaGFubmVsIGNvbm5lY3Rpb24gZmFpbHVyZSBjb25zb2xlIG1lc3NhZ2VzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCmluZGV4IGU1NmE5ZjUuLjczOGQwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxMi0xMS0yOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gU3BsaXQgR3RrQXV0aGVudGljYXRpb25EaWFsb2cg
aW4gdHdvIHdpZGdldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwMzY0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcDogSW5jbHVkZSB3dGYvdGV4
dC9DU3RyaW5nLmgKKwogMjAxMi0xMS0yNyAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgQ29uc29saWRhdGUgRnJhbWVMb2FkZXI6OmxvYWQoKSBpbnRv
IG9uZSBmdW5jdGlvbiB0YWtpbmcgYSBGcmFtZUxvYWRSZXF1ZXN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9wby9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9wby9DaGFuZ2VM
b2cKaW5kZXggZmNlNWNkZi4uMjhhYzE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsv
cG8vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3BvL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDEyLTExLTI5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXSBTcGxpdCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyBp
biB0d28gd2lkZ2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAzNjQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBQT1RGSUxFUy5pbjogUmVwbGFjZSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAg
d2l0aAorICAgICAgICBXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC5jcHAKKwogMjAxMi0xMS0w
NSAgU2FuZGVlcCBTaGVkbWFrZSAgPHNzaGVkbWFrQHJlZGhhdC5jb20+CiAKICAgICAgICAgW2wx
MG5dIFttcl0gVXBkYXRlZCBXZWJLaXRHVEsrIFRyYW5zbGF0aW9uKHMpIGluIE1hcmF0aGkgW21y
XSBsYW5ndWFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZGNjYmY3Yi4uYzk1
MjA2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC02MDQ5LDYgKzYwNDksOCBA
QCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9T
ZWFyY2hQb3B1cE1lbnVHdGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJl
ZFRpbWVyR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uV2lk
Z2V0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dlYktpdEF1dGhlbnRpY2F0
aW9uV2lkZ2V0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNh
dGlvbkRpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cuY3BwCmluZGV4IGFmMTI0MmYuLjA1Mzc0ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApA
QCAtMjAsNTEgKzIwLDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3RrQXV0
aGVudGljYXRpb25EaWFsb2cuaCIKIAotI2luY2x1ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3RvcmUu
aCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIu
aD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5o
PgorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi1zdGF0aWMgR3RrV2lkZ2V0KiBh
ZGRFbnRyeVRvVGFibGUoR3RrVGFibGUqIHRhYmxlLCBpbnQgcm93LCBjb25zdCBjaGFyKiBsYWJl
bFRleHQpCi0jZWxzZQotc3RhdGljIEd0a1dpZGdldCogYWRkRW50cnlUb0dyaWQoR3RrR3JpZCog
Z3JpZCwgaW50IHJvdywgY29uc3QgY2hhciogbGFiZWxUZXh0KQotI2VuZGlmCi17Ci0gICAgR3Rr
V2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcobGFiZWxUZXh0KTsKLSAgICBndGtfbWlzY19z
ZXRfYWxpZ25tZW50KEdUS19NSVNDKGxhYmVsKSwgMC4wLCAwLjUpOwotCi0gICAgR3RrV2lkZ2V0
KiBlbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKLSAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19k
ZWZhdWx0KEdUS19FTlRSWShlbnRyeSksIFRSVUUpOwotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKLSAgICBndGtfdGFibGVfYXR0YWNoKHRhYmxlLCBsYWJlbCwgMCwgMSwgcm93LCByb3cgKyAx
LCBHVEtfRklMTCwgc3RhdGljX2Nhc3Q8R3RrQXR0YWNoT3B0aW9ucz4oR1RLX0VYUEFORCB8IEdU
S19GSUxMKSwgMCwgMCk7Ci0gICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0cyh0YWJsZSwgZW50
cnksIDEsIDIsIHJvdywgcm93ICsgMSk7Ci0jZWxzZQotICAgIGd0a19ncmlkX2F0dGFjaChncmlk
LCBsYWJlbCwgMCwgcm93LCAxLCAxKTsKLSAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKGxhYmVs
LCBUUlVFKTsKLQotICAgIGd0a19ncmlkX2F0dGFjaChncmlkLCBlbnRyeSwgMSwgcm93LCAxLCAx
KTsKLSAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKGVudHJ5LCBUUlVFKTsKLSAgICBndGtfd2lk
Z2V0X3NldF92ZXhwYW5kKGVudHJ5LCBUUlVFKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGVudHJ5
OwotfQotCiBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6fkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
KCkKIHsKIH0KIAogR3RrQXV0aGVudGljYXRpb25EaWFsb2c6Okd0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nKEd0a1dpbmRvdyogcGFyZW50V2luZG93LCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYgY2hhbGxlbmdlKQogICAgIDogbV9kaWFsb2coZ3RrX2RpYWxvZ19uZXcoKSkKLSAgICAsIG1f
bG9naW5FbnRyeSgwKQotICAgICwgbV9wYXNzd29yZEVudHJ5KDApCi0gICAgLCBtX3JlbWVtYmVy
Q2hlY2tCdXR0b24oMCkKLSAgICAsIG1fY2hhbGxlbmdlKGNoYWxsZW5nZSkKKyAgICAsIG1fYXV0
aFdpZGdldCh3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldE5ldyhjaGFsbGVuZ2UpKQogewogICAg
IEd0a0RpYWxvZyogZGlhbG9nID0gR1RLX0RJQUxPRyhtX2RpYWxvZyk7CiAgICAgZ3RrX2RpYWxv
Z19hZGRfYnV0dG9ucyhkaWFsb2csIEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5D
RUwsIEdUS19TVE9DS19PSywgR1RLX1JFU1BPTlNFX09LLCBOVUxMKTsKQEAgLTg1LDExNyArNTEs
MTQgQEAgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0
a1dpbmRvdyogcGFyZW50V2luZG93LCBjb25zdAogICAgIGlmIChwYXJlbnRXaW5kb3cpCiAgICAg
ICAgIGd0a193aW5kb3dfc2V0X3RyYW5zaWVudF9mb3Iod2luZG93LCBwYXJlbnRXaW5kb3cpOwog
Ci0gICAgLy8gQnVpbGQgY29udGVudHMuCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBH
dGtXaWRnZXQqIGhCb3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDEyKTsKLSNlbHNlCi0gICAgR3Rr
V2lkZ2V0KiBoQm94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIDEy
KTsKLSNlbmRpZgotICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJ
TkVSKGhCb3gpLCA1KTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChndGtfZGlhbG9n
X2dldF9jb250ZW50X2FyZWEoZGlhbG9nKSksIGhCb3gsIFRSVUUsIFRSVUUsIDApOwotCi0gICAg
R3RrV2lkZ2V0KiBpY29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFM
T0dfQVVUSEVOVElDQVRJT04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKLSAgICBndGtfbWlzY19z
ZXRfYWxpZ25tZW50KEdUS19NSVNDKGljb24pLCAwLjUsIDAuMCk7Ci0gICAgZ3RrX2JveF9wYWNr
X3N0YXJ0KEdUS19CT1goaEJveCksIGljb24sIEZBTFNFLCBGQUxTRSwgMCk7Ci0KLSNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCogbWFpblZCb3ggPSBndGtfdmJveF9uZXco
RkFMU0UsIDE4KTsKLSNlbHNlCi0gICAgR3RrV2lkZ2V0KiBtYWluVkJveCA9IGd0a19ib3hfbmV3
KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMTgpOwotI2VuZGlmCi0gICAgZ3RrX2JveF9wYWNr
X3N0YXJ0KEdUS19CT1goaEJveCksIG1haW5WQm94LCBUUlVFLCBUUlVFLCAwKTsKLQotICAgIEdP
d25QdHI8Y2hhcj4gZGVzY3JpcHRpb24oZ19zdHJkdXBfcHJpbnRmKF8oIkEgdXNlcm5hbWUgYW5k
IHBhc3N3b3JkIGFyZSBiZWluZyByZXF1ZXN0ZWQgYnkgdGhlIHNpdGUgJXMiKSwKLSAgICAgICAg
bV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpKTsKLSAg
ICBHdGtXaWRnZXQqIGRlc2NyaXB0aW9uTGFiZWwgPSBndGtfbGFiZWxfbmV3KGRlc2NyaXB0aW9u
LmdldCgpKTsKLSAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGRlc2NyaXB0aW9u
TGFiZWwpLCAwLjAsIDAuNSk7Ci0gICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVM
KGRlc2NyaXB0aW9uTGFiZWwpLCBUUlVFKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JP
WChtYWluVkJveCksIEdUS19XSURHRVQoZGVzY3JpcHRpb25MYWJlbCksIEZBTFNFLCBGQUxTRSwg
MCk7Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCogdkJveCA9IGd0
a192Ym94X25ldyhGQUxTRSwgNik7Ci0jZWxzZQotICAgIEd0a1dpZGdldCogdkJveCA9IGd0a19i
b3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgNik7Ci0jZW5kaWYKLSAgICBndGtfYm94
X3BhY2tfc3RhcnQoR1RLX0JPWChtYWluVkJveCksIHZCb3gsIEZBTFNFLCBGQUxTRSwgMCk7Ci0K
LSAgICAvLyBUaGUgdGFibGUgdGhhdCBob2xkcyB0aGUgZW50cmllcy4KLSAgICBHdGtXaWRnZXQq
IGVudHJ5Q29udGFpbmVyID0gZ3RrX2FsaWdubWVudF9uZXcoMC4wLCAwLjAsIDEuMCwgMS4wKTsK
LSAgICBndGtfYWxpZ25tZW50X3NldF9wYWRkaW5nKEdUS19BTElHTk1FTlQoZW50cnlDb250YWlu
ZXIpLCAwLCAwLCAwLCAwKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Qm94KSwg
ZW50cnlDb250YWluZXIsIEZBTFNFLCBGQUxTRSwgMCk7Ci0KLSAgICAvLyBDaGVja2luZyB0aGF0
IHJlYWxtIGlzIG5vdCBhbiBlbXB0eSBzdHJpbmcuCi0gICAgU3RyaW5nIHJlYWxtID0gbV9jaGFs
bGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucmVhbG0oKTsKLSAgICBib29sIGhhc1JlYWxtID0gIXJl
YWxtLmlzRW1wdHkoKTsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3RrV2lkZ2V0
KiB0YWJsZSA9IGd0a190YWJsZV9uZXcoaGFzUmVhbG0gPyAzIDogMiwgMiwgRkFMU0UpOwotICAg
IGd0a190YWJsZV9zZXRfY29sX3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIDEyKTsKLSAgICBn
dGtfdGFibGVfc2V0X3Jvd19zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUpLCA2KTsKLSAgICBndGtf
Y29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGVudHJ5Q29udGFpbmVyKSwgdGFibGUpOwotI2Vs
c2UKLSAgICBHdGtXaWRnZXQqIGdyaWQgPSBndGtfZ3JpZF9uZXcoKTsKLSAgICBndGtfZ3JpZF9z
ZXRfY29sdW1uX3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCksIDEyKTsKLSAgICBndGtfZ3JpZF9zZXRf
cm93X3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCksIDYpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdU
S19DT05UQUlORVIoZW50cnlDb250YWluZXIpLCBncmlkKTsKLSNlbmRpZgotCi0gICAgaWYgKGhh
c1JlYWxtKSB7Ci0gICAgICAgIEd0a1dpZGdldCogc2VydmVyTWVzc2FnZURlc2NyaXB0aW9uTGFi
ZWwgPSBndGtfbGFiZWxfbmV3KF8oIlNlcnZlciBtZXNzYWdlOiIpKTsKLSAgICAgICAgZ3RrX21p
c2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyhzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCks
IDAuMCwgMC41KTsKLSAgICAgICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKHNl
cnZlck1lc3NhZ2VEZXNjcmlwdGlvbkxhYmVsKSwgVFJVRSk7Ci0jaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKLSAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFCTEUodGFibGUp
LCBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCwgMCwgMSwgMCwgMSk7Ci0jZWxzZQotICAg
ICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIHNlcnZlck1lc3NhZ2VEZXNjcmlw
dGlvbkxhYmVsLCAwLCAwLCAxLCAxKTsKLSAgICAgICAgZ3RrX3dpZGdldF9zZXRfaGV4cGFuZChz
ZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCwgVFJVRSk7Ci0gICAgICAgIGd0a193aWRnZXRf
c2V0X3ZleHBhbmQoc2VydmVyTWVzc2FnZURlc2NyaXB0aW9uTGFiZWwsIFRSVUUpOwotI2VuZGlm
Ci0gICAgICAgIEd0a1dpZGdldCogc2VydmVyTWVzc2FnZUxhYmVsID0gZ3RrX2xhYmVsX25ldyhy
ZWFsbS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtf
TUlTQyhzZXJ2ZXJNZXNzYWdlTGFiZWwpLCAwLjAsIDAuNSk7Ci0gICAgICAgIGd0a19sYWJlbF9z
ZXRfbGluZV93cmFwKEdUS19MQUJFTChzZXJ2ZXJNZXNzYWdlTGFiZWwpLCBUUlVFKTsKLSNpZmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgICAgICBndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdU
S19UQUJMRSh0YWJsZSksIHNlcnZlck1lc3NhZ2VMYWJlbCwgMSwgMiwgMCwgMSk7Ci0jZWxzZQot
ICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIHNlcnZlck1lc3NhZ2VMYWJl
bCwgMSwgMCwgMSwgMSk7Ci0gICAgICAgIGd0a193aWRnZXRfc2V0X2hleHBhbmQoc2VydmVyTWVz
c2FnZUxhYmVsLCBUUlVFKTsKLSAgICAgICAgZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChzZXJ2ZXJN
ZXNzYWdlTGFiZWwsIFRSVUUpOwotI2VuZGlmCi0gICAgfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKLSAgICBtX2xvZ2luRW50cnkgPSBhZGRFbnRyeVRvVGFibGUoR1RLX1RBQkxFKHRhYmxl
KSwgaGFzUmVhbG0gPyAxIDogMCwgXygiVXNlcm5hbWU6IikpOwotICAgIG1fcGFzc3dvcmRFbnRy
eSA9IGFkZEVudHJ5VG9UYWJsZShHVEtfVEFCTEUodGFibGUpLCBoYXNSZWFsbSA/IDIgOiAxLCBf
KCJQYXNzd29yZDoiKSk7Ci0jZWxzZQotICAgIG1fbG9naW5FbnRyeSA9IGFkZEVudHJ5VG9Hcmlk
KEdUS19HUklEKGdyaWQpLCBoYXNSZWFsbSA/IDEgOiAwLCBfKCJVc2VybmFtZToiKSk7Ci0gICAg
bV9wYXNzd29yZEVudHJ5ID0gYWRkRW50cnlUb0dyaWQoR1RLX0dSSUQoZ3JpZCksIGhhc1JlYWxt
ID8gMiA6IDEsIF8oIlBhc3N3b3JkOiIpKTsKLSNlbmRpZgotCi0gICAgZ3RrX2VudHJ5X3NldF92
aXNpYmlsaXR5KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBGQUxTRSk7Ci0KLSNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCogcmVtZW1iZXJCb3ggPSBndGtfdmJveF9u
ZXcoRkFMU0UsIDYpOwotI2Vsc2UKLSAgICBHdGtXaWRnZXQqIHJlbWVtYmVyQm94ID0gZ3RrX2Jv
eF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCA2KTsKLSNlbmRpZgotICAgIGd0a19ib3hf
cGFja19zdGFydChHVEtfQk9YKHZCb3gpLCByZW1lbWJlckJveCwgRkFMU0UsIEZBTFNFLCAwKTsK
LQotICAgIG1fcmVtZW1iZXJDaGVja0J1dHRvbiA9IGd0a19jaGVja19idXR0b25fbmV3X3dpdGhf
bW5lbW9uaWMoXygiX1JlbWVtYmVyIHBhc3N3b3JkIikpOwotICAgIGd0a19sYWJlbF9zZXRfbGlu
ZV93cmFwKEdUS19MQUJFTChndGtfYmluX2dldF9jaGlsZChHVEtfQklOKG1fcmVtZW1iZXJDaGVj
a0J1dHRvbikpKSwgVFJVRSk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gocmVtZW1i
ZXJCb3gpLCBtX3JlbWVtYmVyQ2hlY2tCdXR0b24sIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1goZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVhKGRpYWxv
ZykpLCBtX2F1dGhXaWRnZXQsIFRSVUUsIFRSVUUsIDApOworICAgIGd0a193aWRnZXRfc2hvdyht
X2F1dGhXaWRnZXQpOwogfQogCiB2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpzaG93KCkK
IHsKLSAgICBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdl
ID0gbV9jaGFsbGVuZ2UucHJvcG9zZWRDcmVkZW50aWFsKCk7Ci0gICAgaWYgKCFjcmVkZW50aWFs
RnJvbVBlcnNpc3RlbnRTdG9yYWdlLmlzRW1wdHkoKSkgewotICAgICAgICBndGtfZW50cnlfc2V0
X3RleHQoR1RLX0VOVFJZKG1fbG9naW5FbnRyeSksIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0
b3JhZ2UudXNlcigpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBndGtfZW50cnlfc2V0X3RleHQo
R1RLX0VOVFJZKG1fcGFzc3dvcmRFbnRyeSksIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3Jh
Z2UucGFzc3dvcmQoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZ3RrX3RvZ2dsZV9idXR0b25f
c2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihtX3JlbWVtYmVyQ2hlY2tCdXR0b24pLCBUUlVF
KTsKLSAgICB9Ci0KICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZGlhbG9nLCAicmVzcG9uc2UiLCBH
X0NBTExCQUNLKGF1dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayksIHRoaXMpOwot
ICAgIGd0a193aWRnZXRfc2hvd19hbGwobV9kaWFsb2cpOworICAgIGd0a193aWRnZXRfc2hvdyht
X2RpYWxvZyk7CiB9CiAKIHZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmRlc3Ryb3koKQpA
QCAtMjA2LDIzICs2OSwxOCBAQCB2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpkZXN0cm95
KCkKIAogdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRlKGNvbnN0IENy
ZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7CisgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hh
bGxlbmdlID0gd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRHZXRDaGFsbGVuZ2UoV0VCS0lUX0FV
VEhFTlRJQ0FUSU9OX1dJREdFVChtX2F1dGhXaWRnZXQpKTsKICAgICBpZiAoY3JlZGVudGlhbC5p
c0VtcHR5KCkpCi0gICAgICAgIG1fY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJl
Y2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChtX2NoYWxsZW5nZSk7Cisg
ICAgICAgIGNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RU
b0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY2hhbGxlbmdlKTsKICAgICBlbHNlCi0gICAgICAg
IG1fY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkQ3JlZGVudGlhbCht
X2NoYWxsZW5nZSwgY3JlZGVudGlhbCk7CisgICAgICAgIGNoYWxsZW5nZS5hdXRoZW50aWNhdGlv
bkNsaWVudCgpLT5yZWNlaXZlZENyZWRlbnRpYWwoY2hhbGxlbmdlLCBjcmVkZW50aWFsKTsKIH0K
IAogdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRpb25EaWFsb2dSZXNw
b25zZUNhbGxiYWNrKEd0a1dpZGdldCosIGdpbnQgcmVzcG9uc2VJRCwgR3RrQXV0aGVudGljYXRp
b25EaWFsb2cqIGRpYWxvZykKIHsKICAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWw7Ci0gICAgaWYg
KHJlc3BvbnNlSUQgPT0gR1RLX1JFU1BPTlNFX09LKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnVz
ZXJuYW1lID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShkaWFsb2ctPm1fbG9naW5FbnRy
eSkpOwotICAgICAgICBjb25zdCBjaGFyICpwYXNzd29yZCA9IGd0a19lbnRyeV9nZXRfdGV4dChH
VEtfRU5UUlkoZGlhbG9nLT5tX3Bhc3N3b3JkRW50cnkpKTsKLSAgICAgICAgQ3JlZGVudGlhbFBl
cnNpc3RlbmNlIHBlcnNpc3RlbmNlID0gZ3RrX3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShHVEtf
VE9HR0xFX0JVVFRPTihkaWFsb2ctPm1fcmVtZW1iZXJDaGVja0J1dHRvbikpID8KLSAgICAgICAg
ICAgIENyZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudCA6IENyZWRlbnRpYWxQZXJzaXN0ZW5j
ZUZvclNlc3Npb247Ci0gICAgICAgIGNyZWRlbnRpYWwgPSBDcmVkZW50aWFsKFN0cmluZzo6ZnJv
bVVURjgodXNlcm5hbWUpLCBTdHJpbmc6OmZyb21VVEY4KHBhc3N3b3JkKSwgcGVyc2lzdGVuY2Up
OwotICAgIH0KLQorICAgIGlmIChyZXNwb25zZUlEID09IEdUS19SRVNQT05TRV9PSykKKyAgICAg
ICAgY3JlZGVudGlhbCA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0Q3JlYXRlQ3JlZGVudGlh
bChXRUJLSVRfQVVUSEVOVElDQVRJT05fV0lER0VUKGRpYWxvZy0+bV9hdXRoV2lkZ2V0KSk7CiAg
ICAgZGlhbG9nLT5hdXRoZW50aWNhdGUoY3JlZGVudGlhbCk7CiAgICAgZGlhbG9nLT5kZXN0cm95
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50
aWNhdGlvbkRpYWxvZy5oCmluZGV4IDdlNjQ3OGYuLjk1ZGU4ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCkBAIC0y
MCwxNSArMjAsMTUgQEAKICNpZm5kZWYgR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAogI2RlZmlu
ZSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCiAKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlIDxsaWJzb3VwL3Nv
dXAuaD4KKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC5oIgogI2luY2x1ZGUg
PHd0Zi9GYXN0QWxsb2NCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworY2xhc3MgQ3JlZGVudGlhbDsKKwogY2xhc3MgR3Rr
QXV0aGVudGljYXRpb25EaWFsb2cgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTQxLDE0
ICs0MSwxMSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGF1dGhlbnRp
Y2F0ZShjb25zdCBDcmVkZW50aWFsJik7CiAgICAgR3RrV2lkZ2V0KiBtX2RpYWxvZzsKLSAgICBH
dGtXaWRnZXQqIG1fbG9naW5FbnRyeTsKLSAgICBHdGtXaWRnZXQqIG1fcGFzc3dvcmRFbnRyeTsK
LSAgICBHdGtXaWRnZXQqIG1fcmVtZW1iZXJDaGVja0J1dHRvbjsKIAogcHJpdmF0ZToKICAgICB2
b2lkIGRlc3Ryb3koKTsKICAgICBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3Bv
bnNlQ2FsbGJhY2soR3RrV2lkZ2V0KiwgZ2ludCByZXNwb25zZUlELCBHdGtBdXRoZW50aWNhdGlv
bkRpYWxvZyopOwotICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIG1fY2hhbGxlbmdlOworICAg
IEd0a1dpZGdldCogbV9hdXRoV2lkZ2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dlYktpdEF1dGhlbnRpY2F0
aW9uV2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XZWJLaXRBdXRoZW50
aWNhdGlvbldpZGdldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgy
MWRhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XZWJL
aXRBdXRoZW50aWNhdGlvbldpZGdldC5jcHAKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0LmgiCisKKyNpbmNsdWRlICJDcmVkZW50aWFsQmFj
a2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgPGdsaWIv
Z2kxOG4tbGliLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0cnVj
dCBfV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRQcml2YXRlIHsKKyAgICBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSBjaGFsbGVuZ2U7CisKKyAgICBHdGtXaWRnZXQqIGxvZ2luRW50cnk7CisgICAg
R3RrV2lkZ2V0KiBwYXNzd29yZEVudHJ5OworICAgIEd0a1dpZGdldCogcmVtZW1iZXJDaGVja0J1
dHRvbjsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQsIHdl
YmtpdF9hdXRoZW50aWNhdGlvbl93aWRnZXQsIEdUS19UWVBFX0JPWCkKKworI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCitzdGF0aWMgR3RrV2lkZ2V0KiBhZGRFbnRyeVRvVGFibGUoR3RrVGFibGUq
IHRhYmxlLCBpbnQgcm93LCBjb25zdCBjaGFyKiBsYWJlbFRleHQpCisjZWxzZQorc3RhdGljIEd0
a1dpZGdldCogYWRkRW50cnlUb0dyaWQoR3RrR3JpZCogZ3JpZCwgaW50IHJvdywgY29uc3QgY2hh
ciogbGFiZWxUZXh0KQorI2VuZGlmCit7CisgICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJl
bF9uZXcobGFiZWxUZXh0KTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGxh
YmVsKSwgMC4wLCAwLjUpOworCisgICAgR3RrV2lkZ2V0KiBlbnRyeSA9IGd0a19lbnRyeV9uZXco
KTsKKyAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19FTlRSWShlbnRyeSks
IFRSVUUpOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBndGtfdGFibGVfYXR0YWNo
KHRhYmxlLCBsYWJlbCwgMCwgMSwgcm93LCByb3cgKyAxLCBHVEtfRklMTCwgc3RhdGljX2Nhc3Q8
R3RrQXR0YWNoT3B0aW9ucz4oR1RLX0VYUEFORCB8IEdUS19GSUxMKSwgMCwgMCk7CisgICAgZ3Rr
X3RhYmxlX2F0dGFjaF9kZWZhdWx0cyh0YWJsZSwgZW50cnksIDEsIDIsIHJvdywgcm93ICsgMSk7
CisjZWxzZQorICAgIGd0a19ncmlkX2F0dGFjaChncmlkLCBsYWJlbCwgMCwgcm93LCAxLCAxKTsK
KyAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKGxhYmVsLCBUUlVFKTsKKworICAgIGd0a19ncmlk
X2F0dGFjaChncmlkLCBlbnRyeSwgMSwgcm93LCAxLCAxKTsKKyAgICBndGtfd2lkZ2V0X3NldF9o
ZXhwYW5kKGVudHJ5LCBUUlVFKTsKKyAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKGVudHJ5LCBU
UlVFKTsKKyNlbmRpZgorCisgICAgZ3RrX3dpZGdldF9zaG93KGxhYmVsKTsKKyAgICBndGtfd2lk
Z2V0X3Nob3coZW50cnkpOworCisgICAgcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldEluaXRpYWxpemUoV2ViS2l0QXV0aGVudGljYXRpb25X
aWRnZXQqIGF1dGhXaWRnZXQpCit7CisgICAgZ3RrX29yaWVudGFibGVfc2V0X29yaWVudGF0aW9u
KEdUS19PUklFTlRBQkxFKGF1dGhXaWRnZXQpLCBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7
CisgICAgZ3RrX2JveF9zZXRfc3BhY2luZyhHVEtfQk9YKGF1dGhXaWRnZXQpLCAxMik7CisgICAg
Z3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoYXV0aFdpZGdldCks
IDUpOworCisgICAgR3RrV2lkZ2V0KiBpY29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdU
S19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKKyAg
ICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGljb24pLCAwLjUsIDAuMCk7CisgICAg
Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYXV0aFdpZGdldCksIGljb24sIEZBTFNFLCBGQUxT
RSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KGljb24pOworCisjaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKKyAgICBHdGtXaWRnZXQqIG1haW5WQm94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAxOCk7
CisjZWxzZQorICAgIEd0a1dpZGdldCogbWFpblZCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5U
QVRJT05fVkVSVElDQUwsIDE4KTsKKyNlbmRpZgorCisgICAgR093blB0cjxjaGFyPiBkZXNjcmlw
dGlvbihnX3N0cmR1cF9wcmludGYoXygiQSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIGJlaW5n
IHJlcXVlc3RlZCBieSB0aGUgc2l0ZSAlcyIpLAorICAgICAgICBhdXRoV2lkZ2V0LT5wcml2LT5j
aGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBH
dGtXaWRnZXQqIGRlc2NyaXB0aW9uTGFiZWwgPSBndGtfbGFiZWxfbmV3KGRlc2NyaXB0aW9uLmdl
dCgpKTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGRlc2NyaXB0aW9uTGFi
ZWwpLCAwLjAsIDAuNSk7CisgICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGRl
c2NyaXB0aW9uTGFiZWwpLCBUUlVFKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCht
YWluVkJveCksIGRlc2NyaXB0aW9uTGFiZWwsIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX3dp
ZGdldF9zaG93KGRlc2NyaXB0aW9uTGFiZWwpOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
KyAgICBHdGtXaWRnZXQqIHZCb3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDYpOworI2Vsc2UKKyAg
ICBHdGtXaWRnZXQqIHZCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUws
IDYpOworI2VuZGlmCisKKyAgICAvLyBUaGUgdGFibGUgdGhhdCBob2xkcyB0aGUgZW50cmllcy4K
KyAgICBHdGtXaWRnZXQqIGVudHJ5Q29udGFpbmVyID0gZ3RrX2FsaWdubWVudF9uZXcoMC4wLCAw
LjAsIDEuMCwgMS4wKTsKKyAgICBndGtfYWxpZ25tZW50X3NldF9wYWRkaW5nKEdUS19BTElHTk1F
TlQoZW50cnlDb250YWluZXIpLCAwLCAwLCAwLCAwKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQo
R1RLX0JPWCh2Qm94KSwgZW50cnlDb250YWluZXIsIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3Rr
X3dpZGdldF9zaG93KGVudHJ5Q29udGFpbmVyKTsKKworICAgIC8vIENoZWNraW5nIHRoYXQgcmVh
bG0gaXMgbm90IGFuIGVtcHR5IHN0cmluZy4KKyAgICBTdHJpbmcgcmVhbG0gPSBhdXRoV2lkZ2V0
LT5wcml2LT5jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucmVhbG0oKTsKKyAgICBib29sIGhh
c1JlYWxtID0gIXJlYWxtLmlzRW1wdHkoKTsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisg
ICAgR3RrV2lkZ2V0KiB0YWJsZSA9IGd0a190YWJsZV9uZXcoaGFzUmVhbG0gPyAzIDogMiwgMiwg
RkFMU0UpOworICAgIGd0a190YWJsZV9zZXRfY29sX3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSks
IDEyKTsKKyAgICBndGtfdGFibGVfc2V0X3Jvd19zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUpLCA2
KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGVudHJ5Q29udGFpbmVyKSwg
dGFibGUpOworICAgIGd0a193aWRnZXRfc2hvdyh0YWJsZSk7CisjZWxzZQorICAgIEd0a1dpZGdl
dCogZ3JpZCA9IGd0a19ncmlkX25ldygpOworICAgIGd0a19ncmlkX3NldF9jb2x1bW5fc3BhY2lu
ZyhHVEtfR1JJRChncmlkKSwgMTIpOworICAgIGd0a19ncmlkX3NldF9yb3dfc3BhY2luZyhHVEtf
R1JJRChncmlkKSwgNik7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihlbnRy
eUNvbnRhaW5lciksIGdyaWQpOworICAgIGd0a193aWRnZXRfc2hvdyhncmlkKTsKKyNlbmRpZgor
CisgICAgaWYgKGhhc1JlYWxtKSB7CisgICAgICAgIEd0a1dpZGdldCogc2VydmVyTWVzc2FnZURl
c2NyaXB0aW9uTGFiZWwgPSBndGtfbGFiZWxfbmV3KF8oIlNlcnZlciBtZXNzYWdlOiIpKTsKKyAg
ICAgICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyhzZXJ2ZXJNZXNzYWdlRGVzY3Jp
cHRpb25MYWJlbCksIDAuMCwgMC41KTsKKyAgICAgICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAo
R1RLX0xBQkVMKHNlcnZlck1lc3NhZ2VEZXNjcmlwdGlvbkxhYmVsKSwgVFJVRSk7CisjaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKKyAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtf
VEFCTEUodGFibGUpLCBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCwgMCwgMSwgMCwgMSk7
CisjZWxzZQorICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIHNlcnZlck1l
c3NhZ2VEZXNjcmlwdGlvbkxhYmVsLCAwLCAwLCAxLCAxKTsKKyAgICAgICAgZ3RrX3dpZGdldF9z
ZXRfaGV4cGFuZChzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCwgVFJVRSk7CisgICAgICAg
IGd0a193aWRnZXRfc2V0X3ZleHBhbmQoc2VydmVyTWVzc2FnZURlc2NyaXB0aW9uTGFiZWwsIFRS
VUUpOworI2VuZGlmCisgICAgICAgIGd0a193aWRnZXRfc2hvdyhzZXJ2ZXJNZXNzYWdlRGVzY3Jp
cHRpb25MYWJlbCk7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdlTGFiZWwgPSBn
dGtfbGFiZWxfbmV3KHJlYWxtLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBndGtfbWlzY19zZXRf
YWxpZ25tZW50KEdUS19NSVNDKHNlcnZlck1lc3NhZ2VMYWJlbCksIDAuMCwgMC41KTsKKyAgICAg
ICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKHNlcnZlck1lc3NhZ2VMYWJlbCks
IFRSVUUpOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgICAgIGd0a190YWJsZV9hdHRh
Y2hfZGVmYXVsdHMoR1RLX1RBQkxFKHRhYmxlKSwgc2VydmVyTWVzc2FnZUxhYmVsLCAxLCAyLCAw
LCAxKTsKKyNlbHNlCisgICAgICAgIGd0a19ncmlkX2F0dGFjaChHVEtfR1JJRChncmlkKSwgc2Vy
dmVyTWVzc2FnZUxhYmVsLCAxLCAwLCAxLCAxKTsKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfaGV4
cGFuZChzZXJ2ZXJNZXNzYWdlTGFiZWwsIFRSVUUpOworICAgICAgICBndGtfd2lkZ2V0X3NldF92
ZXhwYW5kKHNlcnZlck1lc3NhZ2VMYWJlbCwgVFJVRSk7CisjZW5kaWYKKyAgICAgICAgZ3RrX3dp
ZGdldF9zaG93KHNlcnZlck1lc3NhZ2VMYWJlbCk7CisgICAgfQorCisjaWZkZWYgR1RLX0FQSV9W
RVJTSU9OXzIKKyAgICBhdXRoV2lkZ2V0LT5wcml2LT5sb2dpbkVudHJ5ID0gYWRkRW50cnlUb1Rh
YmxlKEdUS19UQUJMRSh0YWJsZSksIGhhc1JlYWxtID8gMSA6IDAsIF8oIlVzZXJuYW1lOiIpKTsK
KyAgICBhdXRoV2lkZ2V0LT5wcml2LT5wYXNzd29yZEVudHJ5ID0gYWRkRW50cnlUb1RhYmxlKEdU
S19UQUJMRSh0YWJsZSksIGhhc1JlYWxtID8gMiA6IDEsIF8oIlBhc3N3b3JkOiIpKTsKKyNlbHNl
CisgICAgYXV0aFdpZGdldC0+cHJpdi0+bG9naW5FbnRyeSA9IGFkZEVudHJ5VG9HcmlkKEdUS19H
UklEKGdyaWQpLCBoYXNSZWFsbSA/IDEgOiAwLCBfKCJVc2VybmFtZToiKSk7CisgICAgYXV0aFdp
ZGdldC0+cHJpdi0+cGFzc3dvcmRFbnRyeSA9IGFkZEVudHJ5VG9HcmlkKEdUS19HUklEKGdyaWQp
LCBoYXNSZWFsbSA/IDIgOiAxLCBfKCJQYXNzd29yZDoiKSk7CisjZW5kaWYKKyAgICBndGtfZW50
cnlfc2V0X3Zpc2liaWxpdHkoR1RLX0VOVFJZKGF1dGhXaWRnZXQtPnByaXYtPnBhc3N3b3JkRW50
cnkpLCBGQUxTRSk7CisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEd0a1dpZGdldCog
cmVtZW1iZXJCb3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDYpOworI2Vsc2UKKyAgICBHdGtXaWRn
ZXQqIHJlbWVtYmVyQm94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCA2
KTsKKyNlbmRpZgorICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZCb3gpLCByZW1lbWJl
ckJveCwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cocmVtZW1iZXJCb3gp
OworCisgICAgYXV0aFdpZGdldC0+cHJpdi0+cmVtZW1iZXJDaGVja0J1dHRvbiA9IGd0a19jaGVj
a19idXR0b25fbmV3X3dpdGhfbW5lbW9uaWMoXygiX1JlbWVtYmVyIHBhc3N3b3JkIikpOworICAg
IGd0a19sYWJlbF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChndGtfYmluX2dldF9jaGlsZChHVEtf
QklOKGF1dGhXaWRnZXQtPnByaXYtPnJlbWVtYmVyQ2hlY2tCdXR0b24pKSksIFRSVUUpOworICAg
IGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHJlbWVtYmVyQm94KSwgYXV0aFdpZGdldC0+cHJp
di0+cmVtZW1iZXJDaGVja0J1dHRvbiwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBndGtfd2lkZ2V0
X3Nob3coYXV0aFdpZGdldC0+cHJpdi0+cmVtZW1iZXJDaGVja0J1dHRvbik7CisKKyAgICBjb25z
dCBDcmVkZW50aWFsJiBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlID0gYXV0aFdpZGdl
dC0+cHJpdi0+Y2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpOworICAgIGlmICghY3JlZGVu
dGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ3RrX2VudHJ5
X3NldF90ZXh0KEdUS19FTlRSWShhdXRoV2lkZ2V0LT5wcml2LT5sb2dpbkVudHJ5KSwgY3JlZGVu
dGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS51c2VyKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkoYXV0aFdpZGdldC0+cHJpdi0+cGFzc3dvcmRF
bnRyeSksIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UucGFzc3dvcmQoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgZ3RrX3RvZ2dsZV9idXR0b25fc2V0X2FjdGl2ZShHVEtfVE9HR0xF
X0JVVFRPTihhdXRoV2lkZ2V0LT5wcml2LT5yZW1lbWJlckNoZWNrQnV0dG9uKSwgVFJVRSk7Cisg
ICAgfQorCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gobWFpblZCb3gpLCB2Qm94LCBG
QUxTRSwgRkFMU0UsIDApOworICAgIGd0a193aWRnZXRfc2hvdyh2Qm94KTsKKworICAgIGd0a19i
b3hfcGFja19zdGFydChHVEtfQk9YKGF1dGhXaWRnZXQpLCBtYWluVkJveCwgVFJVRSwgVFJVRSwg
MCk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1haW5WQm94KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0QXV0aGVudGljYXRpb25XaWRnZXRGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
V0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1dJREdFVChvYmplY3QpLT5wcml2LT5+V2ViS2l0QXV0aGVu
dGljYXRpb25XaWRnZXRQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2F1dGhl
bnRpY2F0aW9uX3dpZGdldF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfYXV0aGVudGljYXRpb25fd2lkZ2V0X2luaXQoV2ViS2l0QXV0aGVu
dGljYXRpb25XaWRnZXQqIGF1dGhXaWRnZXQpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25X
aWRnZXRQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGF1dGhXaWRn
ZXQsIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1dJREdFVCwgV2ViS2l0QXV0aGVudGljYXRp
b25XaWRnZXRQcml2YXRlKTsKKyAgICBuZXcgKHByaXYpIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lk
Z2V0UHJpdmF0ZSgpOworICAgIGF1dGhXaWRnZXQtPnByaXYgPSBwcml2OworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfYXV0aGVudGljYXRpb25fd2lkZ2V0X2NsYXNzX2luaXQoV2ViS2l0QXV0aGVu
dGljYXRpb25XaWRnZXRDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldEZpbmFsaXplOworICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0
UHJpdmF0ZSkpOworfQorCitHdGtXaWRnZXQqIHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0TmV3
KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCit7CisgICAgV2ViS2l0
QXV0aGVudGljYXRpb25XaWRnZXQqIGF1dGhXaWRnZXQgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05f
V0lER0VUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9XSURHRVQsIE5V
TEwpKTsKKyAgICBhdXRoV2lkZ2V0LT5wcml2LT5jaGFsbGVuZ2UgPSBjaGFsbGVuZ2U7CisgICAg
d2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRJbml0aWFsaXplKGF1dGhXaWRnZXQpOworICAgIHJl
dHVybiBHVEtfV0lER0VUKGF1dGhXaWRnZXQpOworfQorCitDcmVkZW50aWFsIHdlYmtpdEF1dGhl
bnRpY2F0aW9uV2lkZ2V0Q3JlYXRlQ3JlZGVudGlhbChXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdl
dCogYXV0aFdpZGdldCkKK3sKKyAgICBjb25zdCBjaGFyKiB1c2VybmFtZSA9IGd0a19lbnRyeV9n
ZXRfdGV4dChHVEtfRU5UUlkoYXV0aFdpZGdldC0+cHJpdi0+bG9naW5FbnRyeSkpOworICAgIGNv
bnN0IGNoYXIqIHBhc3N3b3JkID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShhdXRoV2lk
Z2V0LT5wcml2LT5wYXNzd29yZEVudHJ5KSk7CisgICAgQ3JlZGVudGlhbFBlcnNpc3RlbmNlIHBl
cnNpc3RlbmNlID0gZ3RrX3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRP
TihhdXRoV2lkZ2V0LT5wcml2LT5yZW1lbWJlckNoZWNrQnV0dG9uKSkgPworICAgICAgICBDcmVk
ZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQgOiBDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNz
aW9uOworICAgIHJldHVybiBDcmVkZW50aWFsKFN0cmluZzo6ZnJvbVVURjgodXNlcm5hbWUpLCBT
dHJpbmc6OmZyb21VVEY4KHBhc3N3b3JkKSwgcGVyc2lzdGVuY2UpOworfQorCitBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYgd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRHZXRDaGFsbGVuZ2UoV2Vi
S2l0QXV0aGVudGljYXRpb25XaWRnZXQqIGF1dGhXaWRnZXQpCit7CisgICAgcmV0dXJuIGF1dGhX
aWRnZXQtPnByaXYtPmNoYWxsZW5nZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkNzIyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC5oCkBAIC0wLDAg
KzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldF9oCisjZGVmaW5lIFdlYktpdEF1dGhlbnRpY2F0aW9u
V2lkZ2V0X2gKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfQVVU
SEVOVElDQVRJT05fV0lER0VUICAgICAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl93aWRn
ZXRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1dJREdFVChvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQ
RV9BVVRIRU5USUNBVElPTl9XSURHRVQsIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0KSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1dJREdFVChvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9X
SURHRVQpKQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fV0lER0VUX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0FVVEhF
TlRJQ0FUSU9OX1dJREdFVCwgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRDbGFzcykpCisjZGVm
aW5lIFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9XSURHRVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fV0lE
R0VUKSkKKyNkZWZpbmUgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1dJREdFVF9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9BVVRIRU5U
SUNBVElPTl9XSURHRVQsIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0Q2xhc3MpKQorCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQgICAgICAgIFdlYktpdEF1dGhl
bnRpY2F0aW9uV2lkZ2V0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uV2lk
Z2V0Q2xhc3MgICBXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldENsYXNzOwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0UHJpdmF0ZSBXZWJLaXRBdXRoZW50aWNhdGlv
bldpZGdldFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQgewor
ICAgIEd0a0JveCBwYXJlbnQ7CisKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldFByaXZh
dGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0Q2xhc3Mg
eworICAgIEd0a0JveENsYXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUgd2Via2l0X2F1dGhl
bnRpY2F0aW9uX3dpZGdldF9nZXRfdHlwZSgpOworR3RrV2lkZ2V0KiB3ZWJraXRBdXRoZW50aWNh
dGlvbldpZGdldE5ldyhjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwor
V2ViQ29yZTo6Q3JlZGVudGlhbCB3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldENyZWF0ZUNyZWRl
bnRpYWwoV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQqKTsKK1dlYkNvcmU6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiB3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldEdldENoYWxsZW5nZShXZWJL
aXRBdXRoZW50aWNhdGlvbldpZGdldCopOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gV2Vi
S2l0QXV0aGVudGljYXRpb25XaWRnZXRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
cG8vUE9URklMRVMuaW4gYi9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5pbgppbmRleCBm
YTQ3MTgxLi4zYjlkYzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxF
Uy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5pbgpAQCAtMSw3ICsxLDcg
QEAKICMgTGlzdCBvZiBzb3VyY2UgZmlsZXMgd2hpY2ggY29udGFpbiB0cmFuc2xhdGFibGUgc3Ry
aW5ncy4KIC4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAKLS4uLy4uL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAogLi4vLi4vV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKKy4uLy4uL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0LmNwcAogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcAogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRH
dGsuY3BwCiBXZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNw
cCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jcHAKaW5k
ZXggZGExNjExNC4uM2Y3Zjc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0c291cGF1dGhkaWFsb2cuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiR3Rr
QXV0aGVudGljYXRpb25EaWFsb2cuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2lu
Y2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9j
b25maWd1cmUuYWMKaW5kZXggOTc5ODBlNC4uZTRlM2FlMSAxMDA2NDQKLS0tIGEvY29uZmlndXJl
LmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMjg5LDcgKzI4OSw3IEBAIEFDX0FSR19XSVRIKFtn
dGtdLAogICAgICAgICBbd2l0aF9ndGs9My4wXSkKIEFDX01TR19SRVNVTFQoWyR3aXRoX2d0a10p
CiAKLUdUSzJfUkVRVUlSRURfVkVSU0lPTj0yLjEwCitHVEsyX1JFUVVJUkVEX1ZFUlNJT049Mi4x
NgogR0FJTDJfUkVRVUlSRURfVkVSU0lPTj0xLjgKIEdUSzNfUkVRVUlSRURfVkVSU0lPTj0zLjQu
MAogR0FJTDNfUkVRVUlSRURfVkVSU0lPTj0zLjAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177218</attachid>
            <date>2012-12-03 03:06:25 -0800</date>
            <delta_ts>2013-02-24 06:33:09 -0800</delta_ts>
            <desc>New patch</desc>
            <filename>wk-auth-widgets.diff</filename>
            <type>text/plain</type>
            <size>62264</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3M2ZlNDczLi5hOWJlZjlh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTItMTItMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIFNwbGl0IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIGluIHR3byB3aWRn
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM2
NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNv
bmZpZ3VyZS5hYzogQnVtcCBHVEsrIDIgcmVxdWlyZW1lbnRzIHRvIDIuMTYgZm9yCisgICAgICAg
IEd0a09yaWVudGFibGUuCisKIDIwMTItMTEtMjkgIFJhZmFlbCBXZWluc3RlaW4gIDxyYWZhZWx3
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbSFRNTFRlbXBsYXRlRWxlbWVudF0gQWRkIGZlYXR1
cmUgZmxhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDkxNzQ2YjguLmRkYWVhMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNyBAQAorMjAxMi0xMi0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gU3BsaXQgR3RrQXV0aGVudGljYXRpb25EaWFsb2cg
aW4gdHdvIHdpZGdldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwMzY0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE1vdmUgdGhlIGF1dGhlbnRpY2F0aW9uIGxvZ2ljIGZyb20gR3RrQXV0aGVudGljYXRp
b25EaWFsb2cgdG8gYQorICAgICAgICBuZXcgd2lkZ2V0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGFu
eSBvdGhlciB3aWRnZXQuIFRoaXMgYWxsb3dzIHRvCisgICAgICAgIHNoYXJlIHRoZSBhdXRoZW50
aWNhdGlvbiBsb2dpYyBiZXR3ZWVuIFdlYktpdDEgYW5kIFdlYktpdDIgd2l0aG91dAorICAgICAg
ICBoYXZpbmcgdG8gdXNlIGEgR3RrRGlhbG9nLiBSZW1vdmUgR3RrQXV0aGVudGljYXRpb25EaWFs
b2cgY2xhc3MsCisgICAgICAgIHNpbmNlIHRoZSBjb2RlIGlzIG5vdCBzaGFyZWQgYW55bW9yZS4K
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGls
YXRpb24uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvV2ViS2l0QXV0aGVudGljYXRp
b25XaWRnZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdl
dFByaXZhdGUpOgorICAgICAgICAocGFja1R3b0NvbHVtbkxheW91dEluQm94KToKKyAgICAgICAg
KGNyZWF0ZUxhYmVsKToKKyAgICAgICAgKGNyZWF0ZUVudHJ5KToKKyAgICAgICAgKHdlYmtpdEF1
dGhlbnRpY2F0aW9uV2lkZ2V0SW5pdGlhbGl6ZSk6CisgICAgICAgICh3ZWJraXRBdXRoZW50aWNh
dGlvbldpZGdldEZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl93aWRn
ZXRfaW5pdCk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fd2lkZ2V0X2NsYXNzX2lu
aXQpOgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25XaWRnZXROZXcpOiBDcmVhdGUgYSBu
ZXcKKyAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQgZm9yIHRoZSBnaXZlbiBjaGFs
bGVuZ2UuCisgICAgICAgICh3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldENyZWF0ZUNyZWRlbnRp
YWwpOiBDcmVhdGUgYSBDcmVkZW50aWFsCisgICAgICAgIHVzaW5nIHRoZSBjdXJyZW50IHZhbHVl
cyBvZiB0aGUgd2lkZ2V0LgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRHZXRD
aGFsbGVuZ2UpOiBSZXR1cm4gdGhlIGNoYWxsZW5nZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsv
V2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQuaDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0QXV0
aGVudGljYXRpb25XaWRnZXQpOgorICAgICAgICAoX1dlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0
Q2xhc3MpOgorCiAyMDEyLTExLTI5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBbV2ViS2l0Ml0gV2ViS2l0V2ViVmlld0Jhc2UgY3JlYXRl
cyBhIEdMIGNvbnRleHQgZm9yIHRoZSByZWRpcmVjdGVkIFhDb21wb3NpdGUgd2luZG93IGNyYXNo
aW5nIFdlYktpdCBpbiBYdmZiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggOWE4YzBmMi4uNzYwOGVmZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTEyLTAzICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBTcGxpdCBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZyBpbiB0d28gd2lkZ2V0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjQ0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0c291cGF1dGhkaWFs
b2cuY3BwOgorICAgICAgICAoY3JlYXRlQXV0aGVudGljYXRpb25EaWFsb2cpOiBDcmVhdGUgYSBH
dGtEaWFsb2cgdG8gY29udGFpbiB0aGUKKyAgICAgICAgYXV0aGVudGljYXRpb24gd2lkZ2V0Lgor
ICAgICAgICAoYXV0aGVudGljYXRpb25EaWFsb2dSZXNwb25zZUNhbGxiYWNrKTogQXV0aGVudGlj
YXRlIHVzaW5nIHRoZQorICAgICAgICBjcmVkZW50aWFsIG9yIGNvbnRpbnVlIHdpdGhvdXQgY3Jl
ZGVudGlhbCBpcyB0aGUgZGlhbG9nIGlzCisgICAgICAgIGNhbmNlbGxlZC4KKyAgICAgICAgKHNl
c3Npb25BdXRoZW50aWNhdGUpOiBDcmVhdGUgYSBHdGtEaWFsb2cgY29udGFpbmluZyBhCisgICAg
ICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0LgorCiAyMDEyLTExLTI5ICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdIEZvcndhcmQgY29va2ll
IGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvcG8vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvcG8vQ2hhbmdlTG9nCmluZGV4IGZj
ZTVjZGYuLjBjNDgxNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3BvL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9wby9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxMi0xMi0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dUS10gU3BsaXQgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgaW4gdHdvIHdpZGdl
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzY0
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUE9U
RklMRVMuaW46IFJlcGxhY2UgR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwIHdpdGgKKyAgICAg
ICAgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQuY3BwCisKIDIwMTItMTEtMDUgIFNhbmRlZXAg
U2hlZG1ha2UgIDxzc2hlZG1ha0ByZWRoYXQuY29tPgogCiAgICAgICAgIFtsMTBuXSBbbXJdIFVw
ZGF0ZWQgV2ViS2l0R1RLKyBUcmFuc2xhdGlvbihzKSBpbiBNYXJhdGhpIFttcl0gbGFuZ3VhZ2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlNzEzZjUxLi41OWViMWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEg
QEAKKzIwMTItMTItMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFNwbGl0IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIGluIHR3byB3
aWRnZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDM2NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZW1vdmUgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIGNsYXNzIGFuZCBhZGQKKyAgICAg
ICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cgd2lkZ2V0IGNvbnRhaW5pbmcgYQorICAgICAg
ICBXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxp
c3QuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNh
dGlvbkRpYWxvZy5jcHA6IEFkZGVkLgorICAgICAgICAoX1dlYktpdEF1dGhlbnRpY2F0aW9uRGlh
bG9nUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRp
Y2F0ZSk6IFVzZSB0aGUKKyAgICAgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSB0byBh
dXRoZW50aWNhdGUgYW5kIGRlc3Ryb3kgdGhlIGRpYWxvZy4KKyAgICAgICAgKG9rQnV0dG9uQ2xp
Y2tlZCk6IENhbGwgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dBdXRoZW50aWNhdGUoKQorICAg
ICAgICB3aXRoIHRoZSBjcmVkZW50aWFsLgorICAgICAgICAoY2FuY2VsQnV0dG9uQ2xpY2tlZCk6
IENhbGwKKyAgICAgICAgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dBdXRoZW50aWNhdGUoKSB3
aXRoIGEgTlVMTCBjcmVkZW50aWFsIHRvCisgICAgICAgIGNvbnRpbnVlIHdpdGhvdXQgY3JlZGVu
dGlhbC4KKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nSW5pdGlhbGl6ZSk6IEJ1
aWxkIHRoZSBVSS4KKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nRHJhdyk6IERy
YXcgYSBiYWNrZ3JvdW5kLgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dNYXAp
OiBHcmFiIGRlZmF1bHQgYnV0dG9uLgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25EaWFs
b2dDb25zdHJ1Y3RlZCk6IENyZWF0ZSBhIEd0a1N0eWxlQ29udGV4dAorICAgICAgICB3aXRoIHRo
ZSBHdGtXaW5kb3cgcGF0aCB0byBkcmF3IHRoZSB3aWRnZXQgYmFja2dyb3VuZCBsaWtlIGEgcmVh
bAorICAgICAgICBkaWFsb2cuCisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9n
X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcpOiBD
cmVhdGUgYSBuZXcKKyAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cgd2lkZ2V0Lgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmg6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgor
ICAgICAgICAod2Via2l0V2ViVmlld0hhbmRsZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogQ3Jl
YXRlIGEKKyAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cgd2lkZ2V0IGFuZCBwYXNz
IGFkZCBpdCB0byB0aGUKKyAgICAgICAgY29udGFpbmVyLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKF9XZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUpOiBVcGRhdGVkIHRvIHVzZSB0aGUgd2lkZ2V0IGRpcmVjdGx5LgorICAgICAgICAo
d2Via2l0V2ViVmlld0NoaWxkSXNJbnRlcm5hbFdpZGdldCk6IERpdHRvLgorICAgICAgICAod2Vi
a2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNhdGlvbkRpYWxvZyk6IERpdHRvLgorICAgICAgICAo
d2Via2l0V2ViVmlld0Jhc2VDYW5jZWxBdXRoZW50aWNhdGlvbkRpYWxvZyk6IERpdHRvLgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VDb250YWluZXJSZW1vdmUpOiBEaXR0by4KKyAgICAgICAg
KHdlYmtpdFdlYlZpZXdCYXNlQ29udGFpbmVyRm9yYWxsKTogRGl0dG8uCisgICAgICAgIChyZXNp
emVXZWJLaXRXZWJWaWV3QmFzZUZyb21BbGxvY2F0aW9uKTogRGl0dG8uCisgICAgICAgICh3ZWJr
aXRXZWJWaWV3QmFzZUZvY3VzKTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmg6CisKIDIwMTItMTEtMjkgIFRpbSBIb3J0b24gIDx0
aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUERGUGx1Z2luOiBPbmx5IHBsYWlu
IHRleHQgY2FuIGJlIGNvcGllZCBvdXQgb2YgUERGcwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGEyNTJkNWUuLmIyMDJkMDQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0xMi0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dUS10gU3BsaXQgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgaW4gdHdvIHdpZGdl
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzY0
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZ3Rr
L2dlbmVyYXRlLWd0a2RvYzoKKyAgICAgICAgKGdldF93ZWJraXQyX29wdGlvbnMpOiBEbyBub3Qg
Z2VuZXJhdGUgYXBpIGRvY3MgZm9yCisgICAgICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9n
IHdoaWNoIGlzIHByaXZhdGUgaW4gV2ViS2l0Mi4KKwogMjAxMi0xMS0yOSAgUmFmYWVsIFdlaW5z
dGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtIVE1MVGVtcGxhdGVFbGVt
ZW50XSBBZGQgZmVhdHVyZSBmbGFnCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBl
NTJhMTY4Li4wZmJjZjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTYwMDgs
OCArNjAwOCw2IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0dPd25QdHJHdGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dS
ZWZQdHJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5o
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAgXApAQCAtNjA0NCw2ICs2
MDQyLDggQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9TaGFyZWRUaW1lckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Tb3Vu
ZEd0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XZWJLaXRBdXRoZW50aWNh
dGlvbldpZGdldC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XZWJLaXRBdXRo
ZW50aWNhdGlvbldpZGdldC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0
R3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0Nv
bnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0
aGVudGljYXRpb25EaWFsb2cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTky
YTViYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCi0KLSNpbmNsdWRlICJDcmVk
ZW50aWFsQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1
ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29u
c3QgaW50IGdMYXlvdXRDb2x1bW5TcGFjaW5nID0gMTI7Ci1zdGF0aWMgY29uc3QgaW50IGdMYXlv
dXRSb3dTcGFjaW5nID0gNjsKLXN0YXRpYyBjb25zdCBpbnQgZ0J1dHRvblNwYWNpbmcgPSA1Owot
Ci1HdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2coY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKLSAgICA6IG1fZGlhbG9nKDApCi0g
ICAgLCBtX2xvZ2luRW50cnkoMCkKLSAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQotICAgICwgbV9y
ZW1lbWJlckNoZWNrQnV0dG9uKDApCi0gICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCi17Ci19
Ci0KLUd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtX
aW5kb3cqIHBhcmVudFdpbmRvdywgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxs
ZW5nZSkKLSAgICA6IG1fZGlhbG9nKGd0a19kaWFsb2dfbmV3KCkpCi0gICAgLCBtX2xvZ2luRW50
cnkoMCkKLSAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQotICAgICwgbV9yZW1lbWJlckNoZWNrQnV0
dG9uKDApCi0gICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCi17Ci0gICAgR3RrV2lkZ2V0KiBj
b250ZW50QXJlYSA9IGd0a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShHVEtfRElBTE9HKG1fZGlh
bG9nKSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIo
R1RLX0RJQUxPRyhtX2RpYWxvZykpLCA1KTsKLSAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19C
T1goY29udGVudEFyZWEpLCAyKTsgLyogMiAqIDUgKyAyID0gMTIgKi8KLQotICAgIEd0a1dpbmRv
dyogd2luZG93ID0gR1RLX1dJTkRPVyhtX2RpYWxvZyk7Ci0gICAgZ3RrX3dpbmRvd19zZXRfcmVz
aXphYmxlKHdpbmRvdywgRkFMU0UpOwotICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywg
IiIpOwotICAgIGd0a193aW5kb3dfc2V0X2ljb25fbmFtZSh3aW5kb3csIEdUS19TVE9DS19ESUFM
T0dfQVVUSEVOVElDQVRJT04pOwotCi0gICAgaWYgKHBhcmVudFdpbmRvdykKLSAgICAgICAgZ3Rr
X3dpbmRvd19zZXRfdHJhbnNpZW50X2Zvcih3aW5kb3csIHBhcmVudFdpbmRvdyk7Ci0KLSAgICBj
cmVhdGVDb250ZW50c0luQ29udGFpbmVyKGNvbnRlbnRBcmVhKTsKLX0KLQotI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCi1zdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goR3RrV2lk
Z2V0KiBib3gsIC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKLSAgICB2YV9zdGFy
dChhcmd1bWVudExpc3QsIGJveCk7Ci0KLSAgICBHdGtXaWRnZXQqIHRhYmxlID0gZ3RrX3RhYmxl
X25ldygxLCAyLCBGQUxTRSk7Ci0gICAgZ3RrX3RhYmxlX3NldF9jb2xfc3BhY2luZ3MoR1RLX1RB
QkxFKHRhYmxlKSwgZ0xheW91dENvbHVtblNwYWNpbmcpOwotICAgIGd0a190YWJsZV9zZXRfcm93
X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlvdXRSb3dTcGFjaW5nKTsKLQotICAgIEd0
a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRn
ZXQqKTsKLSAgICBpbnQgcm93TnVtYmVyID0gMDsKLSAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRn
ZXQpIHsKLSAgICAgICAgaWYgKHJvd051bWJlcikKLSAgICAgICAgICAgIGd0a190YWJsZV9yZXNp
emUoR1RLX1RBQkxFKHRhYmxlKSwgcm93TnVtYmVyICsgMSwgMik7Ci0KLSAgICAgICAgR3RrV2lk
Z2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQq
KTsKLSAgICAgICAgR3RrQXR0YWNoT3B0aW9ucyBhdHRhY2hPcHRpb25zID0gc3RhdGljX2Nhc3Q8
R3RrQXR0YWNoT3B0aW9ucz4oR1RLX0VYUEFORCB8IEdUS19GSUxMKTsKLSAgICAgICAgZ3RrX3Rh
YmxlX2F0dGFjaChHVEtfVEFCTEUodGFibGUpLCBmaXJzdENvbHVtbldpZGdldCwKLSAgICAgICAg
ICAgIDAsIHNlY29uZENvbHVtbldpZGdldCA/IDEgOiAyLAotICAgICAgICAgICAgcm93TnVtYmVy
LCByb3dOdW1iZXIgKyAxLAotICAgICAgICAgICAgYXR0YWNoT3B0aW9ucywgYXR0YWNoT3B0aW9u
cywKLSAgICAgICAgICAgIDAsIDApOwotCi0gICAgICAgIGlmIChzZWNvbmRDb2x1bW5XaWRnZXQp
Ci0gICAgICAgICAgICBndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJsZSks
IHNlY29uZENvbHVtbldpZGdldCwgMSwgMiwgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAxKTsKLQot
ICAgICAgICBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdl
dCopOwotICAgICAgICByb3dOdW1iZXIrKzsKLSAgICB9Ci0KLSAgICB2YV9lbmQoYXJndW1lbnRM
aXN0KTsKLQotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJveCksIHRhYmxlLCBGQUxT
RSwgRkFMU0UsIDApOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIHBhY2tUd29Db2x1bW5MYXlvdXRJ
bkJveChHdGtXaWRnZXQqIGJveCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJndW1lbnRMaXN0Owot
ICAgIHZhX3N0YXJ0KGFyZ3VtZW50TGlzdCwgYm94KTsKLQotICAgIEd0a1dpZGdldCogZ3JpZCA9
IGd0a19ncmlkX25ldygpOwotICAgIGd0a19ncmlkX3NldF9jb2x1bW5fc3BhY2luZyhHVEtfR1JJ
RChncmlkKSwgZ0xheW91dFJvd1NwYWNpbmcpOwotICAgIGd0a19ncmlkX3NldF9yb3dfc3BhY2lu
ZyhHVEtfR1JJRChncmlkKSwgZ0xheW91dFJvd1NwYWNpbmcpOwotICAgIGd0a19ncmlkX3NldF9j
b2x1bW5faG9tb2dlbmVvdXMoR1RLX0dSSUQoZ3JpZCksIFRSVUUpOwotCi0gICAgR3RrV2lkZ2V0
KiBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOwot
ICAgIGludCByb3dOdW1iZXIgPSAwOwotICAgIHdoaWxlIChmaXJzdENvbHVtbldpZGdldCkgewot
ICAgICAgICBHdGtXaWRnZXQqIHNlY29uZENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExp
c3QsIEd0a1dpZGdldCopOwotICAgICAgICBpbnQgZmlyc3RXaWRnZXRXaWR0aCA9IHNlY29uZENv
bHVtbldpZGdldCA/IDEgOiAyOwotCi0gICAgICAgIGd0a19ncmlkX2F0dGFjaChHVEtfR1JJRChn
cmlkKSwgZmlyc3RDb2x1bW5XaWRnZXQsIDAsIHJvd051bWJlciwgZmlyc3RXaWRnZXRXaWR0aCwg
MSk7Ci0gICAgICAgIGd0a193aWRnZXRfc2V0X2hleHBhbmQoZmlyc3RDb2x1bW5XaWRnZXQsIFRS
VUUpOwotICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBU
UlVFKTsKLQotICAgICAgICBpZiAoc2Vjb25kQ29sdW1uV2lkZ2V0KSB7Ci0gICAgICAgICAgICBn
dGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIHNlY29uZENvbHVtbldpZGdldCwgMSwgcm93
TnVtYmVyLCAxLCAxKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2V0X2hleHBhbmQoc2Vjb25k
Q29sdW1uV2lkZ2V0LCBUUlVFKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2V0X3ZleHBhbmQo
c2Vjb25kQ29sdW1uV2lkZ2V0LCBUUlVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpcnN0Q29s
dW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7Ci0gICAgICAgIHJv
d051bWJlcisrOwotICAgIH0KLQotICAgIHZhX2VuZChhcmd1bWVudExpc3QpOwotCi0gICAgZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwgZ3JpZCwgRkFMU0UsIEZBTFNFLCAwKTsKLX0K
LSNlbmRpZgotCi1zdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVEaWFsb2dMYWJlbChjb25zdCBjaGFy
KiBsYWJlbFN0cmluZywgaW50IGhvcml6b250YWxQYWRkaW5nID0gMCkKLXsKLSAgICBHdGtXaWRn
ZXQqIGxhYmVsID0gZ3RrX2xhYmVsX25ldyhsYWJlbFN0cmluZyk7Ci0gICAgZ3RrX21pc2Nfc2V0
X2FsaWdubWVudChHVEtfTUlTQyhsYWJlbCksIDAsIDAuNSk7Ci0gICAgaWYgKGhvcml6b250YWxQ
YWRkaW5nKQotICAgICAgICBndGtfbWlzY19zZXRfcGFkZGluZyhHVEtfTUlTQyhsYWJlbCksIDAs
IGhvcml6b250YWxQYWRkaW5nKTsKLSAgICByZXR1cm4gbGFiZWw7Ci19Ci0KLXN0YXRpYyBHdGtX
aWRnZXQqIGNyZWF0ZURpYWxvZ0VudHJ5KEd0a1dpZGdldCoqIG1lbWJlcikKLXsKLSAgICAqbWVt
YmVyID0gZ3RrX2VudHJ5X25ldygpOwotICAgIGd0a19lbnRyeV9zZXRfYWN0aXZhdGVzX2RlZmF1
bHQoR1RLX0VOVFJZKCptZW1iZXIpLCBUUlVFKTsKLSAgICByZXR1cm4gKm1lbWJlcjsKLX0KLQot
dm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6Y3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcihH
dGtXaWRnZXQqIGNvbnRhaW5lcikKLXsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEd0
a1dpZGdldCogaEJveCA9IGd0a19oYm94X25ldyhGQUxTRSwgZ0xheW91dENvbHVtblNwYWNpbmcp
OwotI2Vsc2UKLSAgICBHdGtXaWRnZXQqIGhCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJ
T05fSE9SSVpPTlRBTCwgZ0xheW91dENvbHVtblNwYWNpbmcpOwotI2VuZGlmCi0gICAgZ3RrX2Nv
bnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoaEJveCksIGdCdXR0b25TcGFj
aW5nKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGNvbnRhaW5lciksIGhC
b3gpOwotCi0gICAgR3RrV2lkZ2V0KiBpY29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdU
S19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKLSAg
ICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGljb24pLCAwLjUsIDApOwotICAgIGd0
a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhCb3gpLCBpY29uLCBGQUxTRSwgRkFMU0UsIDApOwot
Ci0gICAgR093blB0cjxjaGFyPiBwcm9tcHQoZ19zdHJkdXBfcHJpbnRmKAotICAgICAgICBfKCJU
aGUgc2l0ZSAlczolaSByZXF1ZXN0cyBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCIpLAotICAgICAg
ICBtX2NoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwKLSAg
ICAgICAgbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucG9ydCgpKSk7Ci0KLSAgICBtX3Jl
bWVtYmVyQ2hlY2tCdXR0b24gPSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRoX21uZW1vbmljKF8o
Il9SZW1lbWJlciBwYXNzd29yZCIpKTsKLSAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtf
TEFCRUwoZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtX3JlbWVtYmVyQ2hlY2tCdXR0b24pKSks
IFRSVUUpOwotCi0KLSAgICAvLyBXZSBhcmUgYWRkaW5nIHRoZSBidXR0b24gYm94IGhlcmUgbWFu
dWFsbHkgaW5zdGVhZCBvZiB1c2luZyB0aGUgcmVhZHktbWFkZSBHdGtEaWFsb2cgYnV0dG9ucy4K
LSAgICAvLyBUaGlzIGlzIHNvIHRoYXQgd2UgY2FuIHNoYXJlIHRoZSBjb2RlIHdpdGggaW1wbGVt
ZW50YXRpb25zIHRoYXQgZG8gbm90IHVzZSBHdGtEaWFsb2cuCi0jaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKLSAgICBHdGtXaWRnZXQqIGJ1dHRvbkJveCA9IGd0a19oYnV0dG9uX2JveF9uZXcoKTsK
LSNlbHNlCi0gICAgR3RrV2lkZ2V0KiBidXR0b25Cb3ggPSBndGtfYnV0dG9uX2JveF9uZXcoR1RL
X09SSUVOVEFUSU9OX0hPUklaT05UQUwpOwotI2VuZGlmCi0gICAgZ3RrX2JveF9zZXRfc3BhY2lu
ZyhHVEtfQk9YKGJ1dHRvbkJveCksIGdCdXR0b25TcGFjaW5nKTsKLSAgICBndGtfYnV0dG9uX2Jv
eF9zZXRfbGF5b3V0KEdUS19CVVRUT05fQk9YKGJ1dHRvbkJveCksIEdUS19CVVRUT05CT1hfRU5E
KTsKLQotICAgIG1fb2theUJ1dHRvbiA9IGd0a19idXR0b25fbmV3X2Zyb21fc3RvY2soR1RLX1NU
T0NLX09LKTsKLSAgICBtX2NhbmNlbEJ1dHRvbiA9IGd0a19idXR0b25fbmV3X2Zyb21fc3RvY2so
R1RLX1NUT0NLX0NBTkNFTCk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYnV0dG9u
Qm94KSwgbV9jYW5jZWxCdXR0b24sIEZBTFNFLCBUUlVFLCAwKTsKLSAgICBndGtfYm94X3BhY2tf
c3RhcnQoR1RLX0JPWChidXR0b25Cb3gpLCBtX29rYXlCdXR0b24sIEZBTFNFLCBUUlVFLCAwKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KG1fb2theUJ1dHRvbiwgImNsaWNrZWQiLCBHX0NBTExCQUNL
KGJ1dHRvbkNsaWNrZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9j
YW5jZWxCdXR0b24sICJjbGlja2VkIiwgR19DQUxMQkFDSyhidXR0b25DbGlja2VkQ2FsbGJhY2sp
LCB0aGlzKTsKLQotICAgIFN0cmluZyByZWFsbSA9IG1fY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFj
ZSgpLnJlYWxtKCk7Ci0gICAgaWYgKCFyZWFsbS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGFja1R3
b0NvbHVtbkxheW91dEluQm94KGhCb3gsCi0gICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChw
cm9tcHQuZ2V0KCksIGdMYXlvdXRSb3dTcGFjaW5nKSwgTlVMTCwKLSAgICAgICAgICAgIGNyZWF0
ZURpYWxvZ0xhYmVsKF8oIlNlcnZlciBtZXNzYWdlOiIpKSwgY3JlYXRlRGlhbG9nTGFiZWwocmVh
bG0udXRmOCgpLmRhdGEoKSksCi0gICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJVc2Vy
bmFtZToiKSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZtX2xvZ2luRW50cnkpLAotICAgICAgICAgICAg
Y3JlYXRlRGlhbG9nTGFiZWwoXygiUGFzc3dvcmQ6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9w
YXNzd29yZEVudHJ5KSwKLSAgICAgICAgICAgIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwK
LSAgICAgICAgICAgIGJ1dHRvbkJveCwgTlVMTCwgTlVMTCk7Ci0KLSAgICB9IGVsc2UgewotICAg
ICAgICBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goaEJveCwKLSAgICAgICAgICAgIGNyZWF0ZURp
YWxvZ0xhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91dFJvd1NwYWNpbmcpLCBOVUxMLAotICAgICAg
ICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiVXNlcm5hbWU6IikpLCBjcmVhdGVEaWFsb2dFbnRy
eSgmbV9sb2dpbkVudHJ5KSwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlBhc3N3
b3JkOiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1fcGFzc3dvcmRFbnRyeSksCi0gICAgICAgICAg
ICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24sIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICBidXR0b25C
b3gsIE5VTEwsIE5VTEwpOwotICAgIH0KLQotICAgIGd0a19lbnRyeV9zZXRfdmlzaWJpbGl0eShH
VEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgRkFMU0UpOwotICAgIGNvbnN0IENyZWRlbnRpYWwm
IGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UgPSBtX2NoYWxsZW5nZS5wcm9wb3NlZENy
ZWRlbnRpYWwoKTsKLSAgICBpZiAoIWNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkobV9sb2dpbkVu
dHJ5KSwgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS51c2VyKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgIGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5
KSwgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS5wYXNzd29yZCgpLnV0ZjgoKS5kYXRh
KCkpOwotICAgICAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVU
VE9OKG1fcmVtZW1iZXJDaGVja0J1dHRvbiksIFRSVUUpOwotICAgIH0KLX0KLQotdm9pZCBHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZzo6c2hvdygpCi17Ci0gICAgZ3RrX3dpZGdldF9zZXRfY2FuX2Rl
ZmF1bHQobV9va2F5QnV0dG9uLCBUUlVFKTsKLSAgICBndGtfd2lkZ2V0X2dyYWJfZGVmYXVsdCht
X29rYXlCdXR0b24pOwotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhtX2xvZ2luRW50cnkpOwot
Ci0gICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2RpYWxvZyk7Ci19Ci0KLXZvaWQgR3RrQXV0aGVu
dGljYXRpb25EaWFsb2c6OmRlc3Ryb3koKQotewotICAgIGd0a193aWRnZXRfZGVzdHJveShtX2Rp
YWxvZyk7Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFs
b2c6OmF1dGhlbnRpY2F0ZShjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAgIGlm
IChjcmVkZW50aWFsLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jaGFsbGVuZ2UuYXV0aGVudGljYXRp
b25DbGllbnQoKS0+cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKG1f
Y2hhbGxlbmdlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9u
Q2xpZW50KCktPnJlY2VpdmVkQ3JlZGVudGlhbChtX2NoYWxsZW5nZSwgY3JlZGVudGlhbCk7Ci19
Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmJ1dHRvbkNsaWNrZWRDYWxsYmFjayhH
dGtXaWRnZXQqIGJ1dHRvbiwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZykKLXsKLSAg
ICBDcmVkZW50aWFsIGNyZWRlbnRpYWw7Ci0gICAgaWYgKGJ1dHRvbiA9PSBkaWFsb2ctPm1fb2th
eUJ1dHRvbikgewotICAgICAgICBjb25zdCBjaGFyICp1c2VybmFtZSA9IGd0a19lbnRyeV9nZXRf
dGV4dChHVEtfRU5UUlkoZGlhbG9nLT5tX2xvZ2luRW50cnkpKTsKLSAgICAgICAgY29uc3QgY2hh
ciAqcGFzc3dvcmQgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGRpYWxvZy0+bV9wYXNz
d29yZEVudHJ5KSk7Ci0gICAgICAgIENyZWRlbnRpYWxQZXJzaXN0ZW5jZSBwZXJzaXN0ZW5jZSA9
IGd0a190b2dnbGVfYnV0dG9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04oZGlhbG9nLT5t
X3JlbWVtYmVyQ2hlY2tCdXR0b24pKSA/Ci0gICAgICAgICAgICBDcmVkZW50aWFsUGVyc2lzdGVu
Y2VQZXJtYW5lbnQgOiBDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uOwotICAgICAgICBj
cmVkZW50aWFsID0gQ3JlZGVudGlhbChTdHJpbmc6OmZyb21VVEY4KHVzZXJuYW1lKSwgU3RyaW5n
Ojpmcm9tVVRGOChwYXNzd29yZCksIHBlcnNpc3RlbmNlKTsKLSAgICB9Ci0KLSAgICBkaWFsb2ct
PmF1dGhlbnRpY2F0ZShjcmVkZW50aWFsKTsKLSAgICBkaWFsb2ctPmRlc3Ryb3koKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOGE4ZDU2My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrQXV0aGVudGljYXRpb25EaWFsb2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZ19oCi0jZGVmaW5lIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gK
LQotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCi0jaW5jbHVkZSAiR1JlZlB0
ckd0ay5oIgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0QWxs
b2NCYXNlLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHdGtBdXRoZW50aWNhdGlv
bkRpYWxvZyk7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwot
ICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRvdyosIGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJik7Ci0gICAgdmlydHVhbCB+R3RrQXV0aGVudGljYXRpb25EaWFsb2coKSB7
IH0KLSAgICB2b2lkIHNob3coKTsKLSAgICB2b2lkIGRlc3Ryb3koKTsKLQotcHJvdGVjdGVkOgot
ICAgIHZvaWQgY3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcihHdGtXaWRnZXQqIGNvbnRhaW5lcik7
Ci0gICAgdmlydHVhbCB2b2lkIGF1dGhlbnRpY2F0ZShjb25zdCBDcmVkZW50aWFsJik7Ci0gICAg
R3RrV2lkZ2V0KiBtX2RpYWxvZzsKLSAgICBHdGtXaWRnZXQqIG1fbG9naW5FbnRyeTsKLSAgICBH
dGtXaWRnZXQqIG1fcGFzc3dvcmRFbnRyeTsKLSAgICBHdGtXaWRnZXQqIG1fcmVtZW1iZXJDaGVj
a0J1dHRvbjsKLSAgICBHdGtXaWRnZXQqIG1fb2theUJ1dHRvbjsKLSAgICBHdGtXaWRnZXQqIG1f
Y2FuY2VsQnV0dG9uOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIGJ1dHRvbkNsaWNrZWRD
YWxsYmFjayhHdGtXaWRnZXQqLCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyopOwotICAgIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlIG1fY2hhbGxlbmdlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdl
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3OTE0NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XZWJLaXRBdXRoZW50aWNh
dGlvbldpZGdldC5jcHAKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhl
bnRpY2F0aW9uV2lkZ2V0LmgiCisKKyNpbmNsdWRlICJDcmVkZW50aWFsQmFja2luZ1N0b3JlLmgi
CisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0cnVjdCBfV2ViS2l0QXV0
aGVudGljYXRpb25XaWRnZXRQcml2YXRlIHsKKyAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBj
aGFsbGVuZ2U7CisKKyAgICBHdGtXaWRnZXQqIGxvZ2luRW50cnk7CisgICAgR3RrV2lkZ2V0KiBw
YXNzd29yZEVudHJ5OworICAgIEd0a1dpZGdldCogcmVtZW1iZXJDaGVja0J1dHRvbjsKK307CisK
K0dfREVGSU5FX1RZUEUoV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQsIHdlYmtpdF9hdXRoZW50
aWNhdGlvbl93aWRnZXQsIEdUS19UWVBFX0JPWCkKKworc3RhdGljIGNvbnN0IGludCBnTGF5b3V0
Q29sdW1uU3BhY2luZyA9IDEyOworc3RhdGljIGNvbnN0IGludCBnTGF5b3V0Um93U3BhY2luZyA9
IDY7CitzdGF0aWMgY29uc3QgaW50IGdCdXR0b25TcGFjaW5nID0gNTsKKworI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCitzdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goR3RrV2lk
Z2V0KiBib3gsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKKyAgICB2YV9zdGFy
dChhcmd1bWVudExpc3QsIGJveCk7CisKKyAgICBHdGtXaWRnZXQqIHRhYmxlID0gZ3RrX3RhYmxl
X25ldygxLCAyLCBGQUxTRSk7CisgICAgZ3RrX3RhYmxlX3NldF9jb2xfc3BhY2luZ3MoR1RLX1RB
QkxFKHRhYmxlKSwgZ0xheW91dENvbHVtblNwYWNpbmcpOworICAgIGd0a190YWJsZV9zZXRfcm93
X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlvdXRSb3dTcGFjaW5nKTsKKworICAgIEd0
a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRn
ZXQqKTsKKyAgICBpbnQgcm93TnVtYmVyID0gMDsKKyAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRn
ZXQpIHsKKyAgICAgICAgaWYgKHJvd051bWJlcikKKyAgICAgICAgICAgIGd0a190YWJsZV9yZXNp
emUoR1RLX1RBQkxFKHRhYmxlKSwgcm93TnVtYmVyICsgMSwgMik7CisKKyAgICAgICAgR3RrV2lk
Z2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQq
KTsKKyAgICAgICAgR3RrQXR0YWNoT3B0aW9ucyBhdHRhY2hPcHRpb25zID0gc3RhdGljX2Nhc3Q8
R3RrQXR0YWNoT3B0aW9ucz4oR1RLX0VYUEFORCB8IEdUS19GSUxMKTsKKyAgICAgICAgZ3RrX3Rh
YmxlX2F0dGFjaCgKKyAgICAgICAgICAgIEdUS19UQUJMRSh0YWJsZSksIGZpcnN0Q29sdW1uV2lk
Z2V0LAorICAgICAgICAgICAgMCwgc2Vjb25kQ29sdW1uV2lkZ2V0ID8gMSA6IDIsCisgICAgICAg
ICAgICByb3dOdW1iZXIsIHJvd051bWJlciArIDEsCisgICAgICAgICAgICBhdHRhY2hPcHRpb25z
LCBhdHRhY2hPcHRpb25zLAorICAgICAgICAgICAgMCwgMCk7CisgICAgICAgIGd0a193aWRnZXRf
c2hvdyhmaXJzdENvbHVtbldpZGdldCk7CisKKyAgICAgICAgaWYgKHNlY29uZENvbHVtbldpZGdl
dCkgeworICAgICAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFCTEUodGFi
bGUpLCBzZWNvbmRDb2x1bW5XaWRnZXQsIDEsIDIsIHJvd051bWJlciwgcm93TnVtYmVyICsgMSk7
CisgICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3coc2Vjb25kQ29sdW1uV2lkZ2V0KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZpcnN0Q29sdW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwg
R3RrV2lkZ2V0Kik7CisgICAgICAgIHJvd051bWJlcisrOworICAgIH0KKworICAgIHZhX2VuZChh
cmd1bWVudExpc3QpOworCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwgdGFi
bGUsIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KHRhYmxlKTsKK30KKyNl
bHNlCitzdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gs
IC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKKyAgICB2YV9zdGFydChhcmd1bWVu
dExpc3QsIGJveCk7CisKKyAgICBHdGtXaWRnZXQqIGdyaWQgPSBndGtfZ3JpZF9uZXcoKTsKKyAg
ICBndGtfZ3JpZF9zZXRfY29sdW1uX3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCksIGdMYXlvdXRSb3dT
cGFjaW5nKTsKKyAgICBndGtfZ3JpZF9zZXRfcm93X3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCksIGdM
YXlvdXRSb3dTcGFjaW5nKTsKKyAgICBndGtfZ3JpZF9zZXRfY29sdW1uX2hvbW9nZW5lb3VzKEdU
S19HUklEKGdyaWQpLCBUUlVFKTsKKworICAgIEd0a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQg
PSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICBpbnQgcm93TnVtYmVyID0g
MDsKKyAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKKyAgICAgICAgR3RrV2lkZ2V0KiBz
ZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAg
ICAgICAgaW50IGZpcnN0V2lkZ2V0V2lkdGggPSBzZWNvbmRDb2x1bW5XaWRnZXQgPyAxIDogMjsK
KworICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIGZpcnN0Q29sdW1uV2lk
Z2V0LCAwLCByb3dOdW1iZXIsIGZpcnN0V2lkZ2V0V2lkdGgsIDEpOworICAgICAgICBndGtfd2lk
Z2V0X3NldF9oZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBUUlVFKTsKKyAgICAgICAgZ3RrX3dp
ZGdldF9zZXRfdmV4cGFuZChmaXJzdENvbHVtbldpZGdldCwgVFJVRSk7CisgICAgICAgIGd0a193
aWRnZXRfc2hvdyhmaXJzdENvbHVtbldpZGdldCk7CisKKyAgICAgICAgaWYgKHNlY29uZENvbHVt
bldpZGdldCkgeworICAgICAgICAgICAgZ3RrX2dyaWRfYXR0YWNoKEdUS19HUklEKGdyaWQpLCBz
ZWNvbmRDb2x1bW5XaWRnZXQsIDEsIHJvd051bWJlciwgMSwgMSk7CisgICAgICAgICAgICBndGtf
d2lkZ2V0X3NldF9oZXhwYW5kKHNlY29uZENvbHVtbldpZGdldCwgVFJVRSk7CisgICAgICAgICAg
ICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHNlY29uZENvbHVtbldpZGdldCwgVFJVRSk7CisgICAg
ICAgICAgICBndGtfd2lkZ2V0X3Nob3coc2Vjb25kQ29sdW1uV2lkZ2V0KTsKKyAgICAgICAgfQor
CisgICAgICAgIGZpcnN0Q29sdW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lk
Z2V0Kik7CisgICAgICAgIHJvd051bWJlcisrOworICAgIH0KKworICAgIHZhX2VuZChhcmd1bWVu
dExpc3QpOworCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwgZ3JpZCwgRkFM
U0UsIEZBTFNFLCAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZ3JpZCk7Cit9CisjZW5kaWYKKwor
c3RhdGljIEd0a1dpZGdldCogY3JlYXRlTGFiZWwoY29uc3QgY2hhciogbGFiZWxTdHJpbmcsIGlu
dCBob3Jpem9udGFsUGFkZGluZyA9IDApCit7CisgICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19s
YWJlbF9uZXcobGFiZWxTdHJpbmcpOworICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01J
U0MobGFiZWwpLCAwLCAwLjUpOworICAgIGlmIChob3Jpem9udGFsUGFkZGluZykKKyAgICAgICAg
Z3RrX21pc2Nfc2V0X3BhZGRpbmcoR1RLX01JU0MobGFiZWwpLCAwLCBob3Jpem9udGFsUGFkZGlu
Zyk7CisgICAgcmV0dXJuIGxhYmVsOworfQorCitzdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVFbnRy
eShHdGtXaWRnZXQqKiBtZW1iZXIpCit7CisgICAgKm1lbWJlciA9IGd0a19lbnRyeV9uZXcoKTsK
KyAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19FTlRSWSgqbWVtYmVyKSwg
VFJVRSk7CisgICAgcmV0dXJuICptZW1iZXI7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEF1dGhl
bnRpY2F0aW9uV2lkZ2V0SW5pdGlhbGl6ZShXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldCogYXV0
aFdpZGdldCkKK3sKKyAgICBndGtfb3JpZW50YWJsZV9zZXRfb3JpZW50YXRpb24oR1RLX09SSUVO
VEFCTEUoYXV0aFdpZGdldCksIEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKTsKKyAgICBndGtf
Ym94X3NldF9zcGFjaW5nKEdUS19CT1goYXV0aFdpZGdldCksIGdMYXlvdXRDb2x1bW5TcGFjaW5n
KTsKKyAgICBndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihhdXRo
V2lkZ2V0KSwgZ0J1dHRvblNwYWNpbmcpOworCisgICAgR3RrV2lkZ2V0KiBpY29uID0gZ3RrX2lt
YWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04sIEdUS19J
Q09OX1NJWkVfRElBTE9HKTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGlj
b24pLCAwLjUsIDAuMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYXV0aFdpZGdl
dCksIGljb24sIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KGljb24pOwor
CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRQcml2YXRlKiBwcml2ID0gYXV0aFdpZGdl
dC0+cHJpdjsKKyAgICBHT3duUHRyPGNoYXI+IHByb21wdChnX3N0cmR1cF9wcmludGYoCisgICAg
ICAgIF8oIlRoZSBzaXRlICVzOiVpIHJlcXVlc3RzIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIiks
CisgICAgICAgIHByaXYtPmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5ob3N0KCkudXRmOCgp
LmRhdGEoKSwKKyAgICAgICAgcHJpdi0+Y2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnBvcnQo
KSkpOworCisgICAgcHJpdi0+cmVtZW1iZXJDaGVja0J1dHRvbiA9IGd0a19jaGVja19idXR0b25f
bmV3X3dpdGhfbW5lbW9uaWMoXygiX1JlbWVtYmVyIHBhc3N3b3JkIikpOworICAgIGd0a19sYWJl
bF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChndGtfYmluX2dldF9jaGlsZChHVEtfQklOKHByaXYt
PnJlbWVtYmVyQ2hlY2tCdXR0b24pKSksIFRSVUUpOworCisgICAgU3RyaW5nIHJlYWxtID0gYXV0
aFdpZGdldC0+cHJpdi0+Y2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnJlYWxtKCk7CisgICAg
aWYgKCFyZWFsbS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcGFja1R3b0NvbHVtbkxheW91dEluQm94
KAorICAgICAgICAgICAgR1RLX1dJREdFVChhdXRoV2lkZ2V0KSwKKyAgICAgICAgICAgIGNyZWF0
ZUxhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91dFJvd1NwYWNpbmcpLCBOVUxMLAorICAgICAgICAg
ICAgY3JlYXRlTGFiZWwoXygiU2VydmVyIG1lc3NhZ2U6IikpLCBjcmVhdGVMYWJlbChyZWFsbS51
dGY4KCkuZGF0YSgpKSwKKyAgICAgICAgICAgIGNyZWF0ZUxhYmVsKF8oIlVzZXJuYW1lOiIpKSwg
Y3JlYXRlRW50cnkoJnByaXYtPmxvZ2luRW50cnkpLAorICAgICAgICAgICAgY3JlYXRlTGFiZWwo
XygiUGFzc3dvcmQ6IikpLCBjcmVhdGVFbnRyeSgmcHJpdi0+cGFzc3dvcmRFbnRyeSksCisgICAg
ICAgICAgICBwcml2LT5yZW1lbWJlckNoZWNrQnV0dG9uLCBOVUxMLAorICAgICAgICAgICAgTlVM
TCk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goCisg
ICAgICAgICAgICBHVEtfV0lER0VUKGF1dGhXaWRnZXQpLAorICAgICAgICAgICAgY3JlYXRlTGFi
ZWwocHJvbXB0LmdldCgpLCBnTGF5b3V0Um93U3BhY2luZyksIE5VTEwsCisgICAgICAgICAgICBj
cmVhdGVMYWJlbChfKCJVc2VybmFtZToiKSksIGNyZWF0ZUVudHJ5KCZwcml2LT5sb2dpbkVudHJ5
KSwKKyAgICAgICAgICAgIGNyZWF0ZUxhYmVsKF8oIlBhc3N3b3JkOiIpKSwgY3JlYXRlRW50cnko
JnByaXYtPnBhc3N3b3JkRW50cnkpLAorICAgICAgICAgICAgcHJpdi0+cmVtZW1iZXJDaGVja0J1
dHRvbiwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIE5VTEwpOworICAgIH0KKyAgICBndGtfZW50
cnlfc2V0X3Zpc2liaWxpdHkoR1RLX0VOVFJZKHByaXYtPnBhc3N3b3JkRW50cnkpLCBGQUxTRSk7
CisKKyAgICBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdl
ID0gcHJpdi0+Y2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpOworICAgIGlmICghY3JlZGVu
dGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ3RrX2VudHJ5
X3NldF90ZXh0KEdUS19FTlRSWShwcml2LT5sb2dpbkVudHJ5KSwgY3JlZGVudGlhbEZyb21QZXJz
aXN0ZW50U3RvcmFnZS51c2VyKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGd0a19lbnRyeV9z
ZXRfdGV4dChHVEtfRU5UUlkocHJpdi0+cGFzc3dvcmRFbnRyeSksIGNyZWRlbnRpYWxGcm9tUGVy
c2lzdGVudFN0b3JhZ2UucGFzc3dvcmQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZ3RrX3Rv
Z2dsZV9idXR0b25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihwcml2LT5yZW1lbWJlckNo
ZWNrQnV0dG9uKSwgVFJVRSk7CisgICAgfQorCisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHBy
aXYtPmxvZ2luRW50cnkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvbldp
ZGdldEZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJ
T05fV0lER0VUKG9iamVjdCktPnByaXYtPn5XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldFByaXZh
dGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYXV0aGVudGljYXRpb25fd2lkZ2V0X3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9h
dXRoZW50aWNhdGlvbl93aWRnZXRfaW5pdChXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldCogYXV0
aFdpZGdldCkKK3sKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldFByaXZhdGUqIHByaXYg
PSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoYXV0aFdpZGdldCwgV0VCS0lUX1RZUEVfQVVU
SEVOVElDQVRJT05fV0lER0VULCBXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldFByaXZhdGUpOwor
ICAgIG5ldyAocHJpdikgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRQcml2YXRlKCk7CisgICAg
YXV0aFdpZGdldC0+cHJpdiA9IHByaXY7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50
aWNhdGlvbl93aWRnZXRfY2xhc3NfaW5pdChXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldENsYXNz
KiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xB
U1Moa2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdEF1dGhlbnRpY2F0
aW9uV2lkZ2V0RmluYWxpemU7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKG9iamVjdENs
YXNzLCBzaXplb2YoV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRQcml2YXRlKSk7Cit9CisKK0d0
a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXROZXcoY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3sKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdl
dCogYXV0aFdpZGdldCA9IFdFQktJVF9BVVRIRU5USUNBVElPTl9XSURHRVQoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1dJREdFVCwgTlVMTCkpOworICAgIGF1dGhXaWRn
ZXQtPnByaXYtPmNoYWxsZW5nZSA9IGNoYWxsZW5nZTsKKyAgICB3ZWJraXRBdXRoZW50aWNhdGlv
bldpZGdldEluaXRpYWxpemUoYXV0aFdpZGdldCk7CisgICAgcmV0dXJuIEdUS19XSURHRVQoYXV0
aFdpZGdldCk7Cit9CisKK0NyZWRlbnRpYWwgd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVh
dGVDcmVkZW50aWFsKFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0KiBhdXRoV2lkZ2V0KQorewor
ICAgIGNvbnN0IGNoYXIqIHVzZXJuYW1lID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShh
dXRoV2lkZ2V0LT5wcml2LT5sb2dpbkVudHJ5KSk7CisgICAgY29uc3QgY2hhciogcGFzc3dvcmQg
PSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGF1dGhXaWRnZXQtPnByaXYtPnBhc3N3b3Jk
RW50cnkpKTsKKyAgICBDcmVkZW50aWFsUGVyc2lzdGVuY2UgcGVyc2lzdGVuY2UgPSBndGtfdG9n
Z2xlX2J1dHRvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKGF1dGhXaWRnZXQtPnByaXYt
PnJlbWVtYmVyQ2hlY2tCdXR0b24pKSA/CisgICAgICAgIENyZWRlbnRpYWxQZXJzaXN0ZW5jZVBl
cm1hbmVudCA6IENyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb247CisgICAgcmV0dXJuIENy
ZWRlbnRpYWwoU3RyaW5nOjpmcm9tVVRGOCh1c2VybmFtZSksIFN0cmluZzo6ZnJvbVVURjgocGFz
c3dvcmQpLCBwZXJzaXN0ZW5jZSk7Cit9CisKK0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiB3ZWJr
aXRBdXRoZW50aWNhdGlvbldpZGdldEdldENoYWxsZW5nZShXZWJLaXRBdXRoZW50aWNhdGlvbldp
ZGdldCogYXV0aFdpZGdldCkKK3sKKyAgICByZXR1cm4gYXV0aFdpZGdldC0+cHJpdi0+Y2hhbGxl
bmdlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dlYktpdEF1
dGhlbnRpY2F0aW9uV2lkZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2ViS2l0
QXV0aGVudGljYXRpb25XaWRnZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li42N2Q3MjI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1dlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdEF1dGhlbnRpY2F0aW9u
V2lkZ2V0X2gKKyNkZWZpbmUgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRfaAorCisjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9XSURHRVQg
ICAgICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3dpZGdldF9nZXRfdHlwZSgpKQorI2Rl
ZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fV0lER0VUKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1dJ
REdFVCwgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQpKQorI2RlZmluZSBXRUJLSVRfSVNfQVVU
SEVOVElDQVRJT05fV0lER0VUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1dJREdFVCkpCisjZGVmaW5lIFdF
QktJVF9BVVRIRU5USUNBVElPTl9XSURHRVRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fV0lER0VULCBX
ZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0FVVEhF
TlRJQ0FUSU9OX1dJREdFVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksICBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9XSURHRVQpKQorI2RlZmluZSBXRUJL
SVRfQVVUSEVOVElDQVRJT05fV0lER0VUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1dJREdFVCwgV2Vi
S2l0QXV0aGVudGljYXRpb25XaWRnZXRDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRB
dXRoZW50aWNhdGlvbldpZGdldCAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQ7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRDbGFzcyAgIFdlYktpdEF1
dGhlbnRpY2F0aW9uV2lkZ2V0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGlj
YXRpb25XaWRnZXRQcml2YXRlIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0UHJpdmF0ZTsKKwor
c3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldCB7CisgICAgR3RrQm94IHBhcmVudDsK
KworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0UHJpdmF0ZSogcHJpdjsKK307CisKK3N0
cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRDbGFzcyB7CisgICAgR3RrQm94Q2xhc3Mg
cGFyZW50Q2xhc3M7Cit9OworCitHVHlwZSB3ZWJraXRfYXV0aGVudGljYXRpb25fd2lkZ2V0X2dl
dF90eXBlKCk7CitHdGtXaWRnZXQqIHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0TmV3KGNvbnN0
IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CitXZWJDb3JlOjpDcmVkZW50aWFs
IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0Q3JlYXRlQ3JlZGVudGlhbChXZWJLaXRBdXRoZW50
aWNhdGlvbldpZGdldCopOworV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIHdlYmtp
dEF1dGhlbnRpY2F0aW9uV2lkZ2V0R2V0Q2hhbGxlbmdlKFdlYktpdEF1dGhlbnRpY2F0aW9uV2lk
Z2V0Kik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBXZWJLaXRBdXRoZW50aWNhdGlvbldp
ZGdldF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5pbiBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3BvL1BPVEZJTEVTLmluCmluZGV4IGZhNDcxODEuLjNiOWRjODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3BvL1BPVEZJTEVTLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3BvL1BPVEZJTEVTLmluCkBAIC0xLDcgKzEsNyBAQAogIyBMaXN0IG9mIHNvdXJj
ZSBmaWxlcyB3aGljaCBjb250YWluIHRyYW5zbGF0YWJsZSBzdHJpbmdzLgogLi4vLi4vV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcAotLi4vLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCiAuLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9M
b2NhbGl6ZWRTdHJpbmdzR3RrLmNwcAorLi4vLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2ViS2l0
QXV0aGVudGljYXRpb25XaWRnZXQuY3BwCiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
Y3BwCiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAKIFdlYkNvcmVTdXBw
b3J0L0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuY3BwIGIvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcAppbmRleCBkYTE2MTE0Li45ZTRmNDBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFs
b2cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxv
Zy5jcHAKQEAgLTIxLDkgKzIxLDEwIEBACiAjaW5jbHVkZSAid2Via2l0c291cGF1dGhkaWFsb2cu
aCIKIAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2xpZW50LmgiCi0jaW5jbHVkZSAiR3RrQXV0
aGVudGljYXRpb25EaWFsb2cuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1
ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0LmgiCiAjaW5jbHVkZSAid2Via2l0bWFyc2hh
bC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKQEAgLTEzMCw2ICsxMzEsNDIgQEAgc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfYXV0
aF9kaWFsb2dfc2Vzc2lvbl9mZWF0dXJlX2luaXQoU291cFNlc3Npb25GZWF0dXJlSW50ZXIKICAg
ICBmZWF0dXJlSW50ZXJmYWNlLT5kZXRhY2ggPSBkZXRhY2g7CiB9CiAKK3N0YXRpYyBHdGtXaWRn
ZXQqIGNyZWF0ZUF1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRvdyogcGFyZW50V2luZG93LCBj
b25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQoreworICAgIEd0a0RpYWxv
ZyogZGlhbG9nID0gR1RLX0RJQUxPRyhndGtfZGlhbG9nX25ldygpKTsKKyAgICBndGtfZGlhbG9n
X2FkZF9idXR0b25zKGRpYWxvZywgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNF
TCwgR1RLX1NUT0NLX09LLCBHVEtfUkVTUE9OU0VfT0ssIE5VTEwpOworICAgIGd0a19kaWFsb2df
c2V0X2RlZmF1bHRfcmVzcG9uc2UoZGlhbG9nLCBHVEtfUkVTUE9OU0VfT0spOworCisgICAgR3Rr
V2lkZ2V0KiBjb250ZW50QXJlYSA9IGd0a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShkaWFsb2cp
OworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGRpYWxv
ZyksIDUpOworICAgIGd0a19ib3hfc2V0X3NwYWNpbmcoR1RLX0JPWChjb250ZW50QXJlYSksIDIp
OyAvKiAyICogNSArIDIgPSAxMiAqLworCisgICAgR3RrV2lkZ2V0KiBhY3Rpb25BcmVhID0gZ3Rr
X2RpYWxvZ19nZXRfYWN0aW9uX2FyZWEoZGlhbG9nKTsKKyAgICBndGtfY29udGFpbmVyX3NldF9i
b3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihhY3Rpb25BcmVhKSwgNSk7CisgICAgZ3RrX2JveF9z
ZXRfc3BhY2luZyhHVEtfQk9YKGFjdGlvbkFyZWEpLCA2KTsKKworICAgIEd0a1dpbmRvdyogd2lu
ZG93ID0gR1RLX1dJTkRPVyhkaWFsb2cpOworICAgIGd0a193aW5kb3dfc2V0X3Jlc2l6YWJsZSh3
aW5kb3csIEZBTFNFKTsKKyAgICBndGtfd2luZG93X3NldF90aXRsZSh3aW5kb3csICIiKTsKKyAg
ICBndGtfd2luZG93X3NldF9pY29uX25hbWUod2luZG93LCBHVEtfU1RPQ0tfRElBTE9HX0FVVEhF
TlRJQ0FUSU9OKTsKKyAgICBpZiAocGFyZW50V2luZG93KQorICAgICAgICBndGtfd2luZG93X3Nl
dF90cmFuc2llbnRfZm9yKHdpbmRvdywgcGFyZW50V2luZG93KTsKKworICAgIHJldHVybiBHVEtf
V0lER0VUKGRpYWxvZyk7Cit9CisKK3N0YXRpYyB2b2lkIGF1dGhlbnRpY2F0aW9uRGlhbG9nUmVz
cG9uc2VDYWxsYmFjayhHdGtXaWRnZXQqIGF1dGhEaWFsb2csIGdpbnQgcmVzcG9uc2VJRCwgV2Vi
S2l0QXV0aGVudGljYXRpb25XaWRnZXQqIGF1dGhXaWRnZXQpCit7CisgICAgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UgY2hhbGxlbmdlID0gd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRHZXRDaGFs
bGVuZ2UoYXV0aFdpZGdldCk7CisgICAgaWYgKHJlc3BvbnNlSUQgPT0gR1RLX1JFU1BPTlNFX09L
KSB7CisgICAgICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbCA9IHdlYmtpdEF1dGhlbnRpY2F0aW9u
V2lkZ2V0Q3JlYXRlQ3JlZGVudGlhbChhdXRoV2lkZ2V0KTsKKyAgICAgICAgY2hhbGxlbmdlLmF1
dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkQ3JlZGVudGlhbChjaGFsbGVuZ2UsIGNyZWRl
bnRpYWwpOworICAgIH0gZWxzZQorICAgICAgICBjaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGll
bnQoKS0+cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNoYWxsZW5n
ZSk7CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koYXV0aERpYWxvZyk7Cit9CisKIHN0YXRpYyB2
b2lkIHNlc3Npb25BdXRoZW50aWNhdGUoU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdl
KiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCwgZ2Jvb2xlYW4gcmV0cnlpbmcsIFNvdXBTZXNzaW9u
RmVhdHVyZSogbWFuYWdlcikKIHsKICAgICBHdGtXaW5kb3cqIHRvcGxldmVsID0gMDsKQEAgLTE0
Myw4ICsxODAsMTQgQEAgc3RhdGljIHZvaWQgc2Vzc2lvbkF1dGhlbnRpY2F0ZShTb3VwU2Vzc2lv
biogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIFNvdXAKICAgICAvLyBpbXBvc3NpYmxl
IHdpdGggZ2NjLCBkdWUgdG8gV2ViS2l0U291cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlvbkNsaWVu
dCdzIHR3byBzdXBlcmNsYXNzZXMuCiAgICAgY2xpZW50LT5kZXJlZldlYktpdFNvdXBBdXRoRGlh
bG9nQXV0aGVudGljYXRpb25DbGllbnQoKTsKIAotICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
KiBhdXRoRGlhbG9nID0gbmV3IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKHRvcGxldmVsLCBjaGFs
bGVuZ2UpOwotICAgIGF1dGhEaWFsb2ctPnNob3coKTsKKyAgICBHdGtXaWRnZXQqIGF1dGhEaWFs
b2cgPSBjcmVhdGVBdXRoZW50aWNhdGlvbkRpYWxvZyh0b3BsZXZlbCwgY2hhbGxlbmdlKTsKKwor
ICAgIEd0a1dpZGdldCogYXV0aFdpZGdldCA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0TmV3
KGNoYWxsZW5nZSk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goZ3RrX2RpYWxvZ19n
ZXRfY29udGVudF9hcmVhKEdUS19ESUFMT0coYXV0aERpYWxvZykpKSwgYXV0aFdpZGdldCwgVFJV
RSwgVFJVRSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KGF1dGhXaWRnZXQpOworCisgICAgZ19z
aWduYWxfY29ubmVjdChhdXRoRGlhbG9nLCAicmVzcG9uc2UiLCBHX0NBTExCQUNLKGF1dGhlbnRp
Y2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayksIGF1dGhXaWRnZXQpOworICAgIGd0a193aWRn
ZXRfc2hvdyhhdXRoRGlhbG9nKTsKIH0KIAogc3RhdGljIHZvaWQgYXR0YWNoKFNvdXBTZXNzaW9u
RmVhdHVyZSogbWFuYWdlciwgU291cFNlc3Npb24qIHNlc3Npb24pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCBhYjUyM2VmLi5mZjAyZDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KQEAgLTYzMCw4ICs2MzAsOCBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwL1dLUmV0YWluUHRyLmggXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmggXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBcCi0JU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBcCi0J
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTNlZmU4Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgi
Ci0KLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCi0jaW5jbHVkZSAi
QXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmgiCi0jaW5jbHVkZSAiV2ViQ3JlZGVudGlh
bC5oIgotI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldl
YktpdFdlYlZpZXdQcml2YXRlLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBHdGtFdmVudEJveCBkb2Vz
IG5vdCBkcmF3IGEgYmFja2dyb3VuZCBieSBkZWZhdWx0LAotLy8gYnV0IHdlIHdhbnQgaXQgdG8g
aGF2ZSBhIG5vcm1hbCBHdGtXaW5kb3cgYmFja2dyb3VuZC4KLXN0YXRpYyBnYm9vbGVhbiBkcmF3
U2lnbmFsKEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBjciwgR3RrU3R5bGVDb250ZXh0KiBz
dHlsZUNvbnRleHQpCi17Ci0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKHN0eWxlQ29udGV4dCwg
Y3IsIDAsIDAsCi0gICAgICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRlZF93aWR0aCh3aWRnZXQp
LCBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfaGVpZ2h0KHdpZGdldCkpOwotICAgIHJldHVybiBG
QUxTRTsKLX0KLQotV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpXZWJLaXQyR3RrQXV0
aGVudGljYXRpb25EaWFsb2coQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UpCi0gICAgOiBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS0+Y29yZSgpKQotICAgICwgbV9hdXRoZW50aWNhdGlvbkNoYWxsZW5nZShh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKLSAgICAsIG1fc3R5bGVDb250ZXh0KGFkb3B0R1JlZihn
dGtfc3R5bGVfY29udGV4dF9uZXcoKSkpCi17Ci0gICAgbV9kaWFsb2cgPSBndGtfZXZlbnRfYm94
X25ldygpOwotCi0gICAgR3RrV2lkZ2V0KiBmcmFtZSA9IGd0a19mcmFtZV9uZXcoMCk7Ci0gICAg
Z3RrX2ZyYW1lX3NldF9zaGFkb3dfdHlwZShHVEtfRlJBTUUoZnJhbWUpLCBHVEtfU0hBRE9XX0lO
KTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fZGlhbG9nKSwgZnJhbWUp
OwotICAgIGNyZWF0ZUNvbnRlbnRzSW5Db250YWluZXIoZnJhbWUpOwotCi0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfYWRkX2NsYXNzKG1fc3R5bGVDb250ZXh0LmdldCgpLCBHVEtfU1RZTEVfQ0xBU1Nf
QkFDS0dST1VORCk7Ci0gICAgR3RrV2lkZ2V0UGF0aCogcGF0aCA9IGd0a193aWRnZXRfcGF0aF9u
ZXcoKTsKLSAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aCwgR1RLX1RZUEVfV0lO
RE9XKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChtX3N0eWxlQ29udGV4dC5nZXQo
KSwgcGF0aCk7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2ZyZWUocGF0aCk7Ci0KLSAgICBnX3NpZ25h
bF9jb25uZWN0KG1fZGlhbG9nLCAiZHJhdyIsIEdfQ0FMTEJBQ0soZHJhd1NpZ25hbCksIG1fc3R5
bGVDb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFs
b2c6OmF1dGhlbnRpY2F0ZShjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKQot
ewotICAgIFJlZlB0cjxXZWJDcmVkZW50aWFsPiB3ZWJDcmVkZW50aWFsID0gV2ViQ3JlZGVudGlh
bDo6Y3JlYXRlKGNyZWRlbnRpYWwpOwotICAgIG1fYXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmxp
c3RlbmVyKCktPnVzZUNyZWRlbnRpYWwod2ViQ3JlZGVudGlhbC5nZXQoKSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcwNjQ2Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAotI2Rl
ZmluZSBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAotCi0jaW5jbHVkZSAiQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgotI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCi0jaW5j
bHVkZSAiV2ViS2l0V2ViVmlld0Jhc2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NyZWRlbnRpYWwu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg+Ci0jaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
V2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIDogcHVibGljIFdlYkNvcmU6Okd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nIHsKLXB1YmxpYzoKLSAgICBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25E
aWFsb2coQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSopOwotICAgIHZpcnR1YWwgfldlYktp
dDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZygpIHsgfQotICAgIEd0a1dpZGdldCogd2lkZ2V0KCkg
eyByZXR1cm4gbV9kaWFsb2c7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBhdXRo
ZW50aWNhdGUoY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpOwotCi1wcml2YXRlOgotICAgIFJl
ZlB0cjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiBtX2F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlOwotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBtX3N0eWxlQ29udGV4dDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViS2l0Mkd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5iMWRhNjFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwCkBA
IC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5o
IgorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmgiCisjaW5jbHVk
ZSAiV2ViQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0
LmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCitzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSB7CisgICAgUmVm
UHRyPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
OworCisgICAgR3RrV2lkZ2V0KiBhdXRoV2lkZ2V0OworICAgIEd0a1dpZGdldCogZGVmYXVsdEJ1
dHRvbjsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0OworfTsKKwor
V0VCS0lUX0RFRklORV9UWVBFKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLCB3ZWJraXRfYXV0
aGVudGljYXRpb25fZGlhbG9nLCBHVEtfVFlQRV9FVkVOVF9CT1gpCisKK3N0YXRpYyB2b2lkIHdl
YmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQXV0aGVudGljYXRlKFdlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nKiBhdXRoRGlhbG9nLCBXZWJDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIFdl
YktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSogcHJpdiA9IGF1dGhEaWFsb2ctPnByaXY7
CisgICAgcHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmxpc3RlbmVyKCktPnVzZUNyZWRl
bnRpYWwoY3JlZGVudGlhbCk7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoYXV0
aERpYWxvZykpOworfQorCitzdGF0aWMgdm9pZCBva0J1dHRvbkNsaWNrZWQoR3RrQnV0dG9uKiwg
V2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2cpCit7CisgICAgV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2dQcml2YXRlKiBwcml2ID0gYXV0aERpYWxvZy0+cHJpdjsKKyAgICBS
ZWZQdHI8V2ViQ3JlZGVudGlhbD4gd2ViQ3JlZGVudGlhbCA9IFdlYkNyZWRlbnRpYWw6OmNyZWF0
ZSh3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldENyZWF0ZUNyZWRlbnRpYWwoV0VCS0lUX0FVVEhF
TlRJQ0FUSU9OX1dJREdFVChwcml2LT5hdXRoV2lkZ2V0KSkpOworICAgIHdlYmtpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nQXV0aGVudGljYXRlKGF1dGhEaWFsb2csIHdlYkNyZWRlbnRpYWwuZ2V0KCkp
OworfQorCitzdGF0aWMgdm9pZCBjYW5jZWxCdXR0b25DbGlja2VkKEd0a0J1dHRvbiosIFdlYktp
dEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nKQoreworICAgIHdlYmtpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nQXV0aGVudGljYXRlKGF1dGhEaWFsb2csIDApOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0luaXRpYWxpemUoV2ViS2l0QXV0aGVudGljYXRp
b25EaWFsb2cqIGF1dGhEaWFsb2cpCit7CisgICAgR3RrV2lkZ2V0KiBmcmFtZSA9IGd0a19mcmFt
ZV9uZXcoMCk7CisgICAgZ3RrX2ZyYW1lX3NldF9zaGFkb3dfdHlwZShHVEtfRlJBTUUoZnJhbWUp
LCBHVEtfU0hBRE9XX0lOKTsKKworICAgIEd0a1dpZGdldCogdkJveCA9IGd0a19ib3hfbmV3KEdU
S19PUklFTlRBVElPTl9WRVJUSUNBTCwgNik7CisgICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVy
X3dpZHRoKEdUS19DT05UQUlORVIodkJveCksIDUpOworCisgICAgR3RrV2lkZ2V0KiBidXR0b25C
b3ggPSBndGtfYnV0dG9uX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpOworICAg
IGd0a19idXR0b25fYm94X3NldF9sYXlvdXQoR1RLX0JVVFRPTl9CT1goYnV0dG9uQm94KSwgR1RL
X0JVVFRPTkJPWF9FTkQpOworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtf
Q09OVEFJTkVSKGJ1dHRvbkJveCksIDUpOworICAgIGd0a19ib3hfc2V0X3NwYWNpbmcoR1RLX0JP
WChidXR0b25Cb3gpLCA2KTsKKworICAgIEd0a1dpZGdldCogYnV0dG9uID0gZ3RrX2J1dHRvbl9u
ZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfQ0FOQ0VMKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGJ1
dHRvbiwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGNhbmNlbEJ1dHRvbkNsaWNrZWQpLCBhdXRoRGlh
bG9nKTsKKyAgICBndGtfYm94X3BhY2tfZW5kKEdUS19CT1goYnV0dG9uQm94KSwgYnV0dG9uLCBG
QUxTRSwgVFJVRSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KGJ1dHRvbik7CisKKyAgICBidXR0
b24gPSBndGtfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19PSyk7CisgICAgYXV0aERp
YWxvZy0+cHJpdi0+ZGVmYXVsdEJ1dHRvbiA9IGJ1dHRvbjsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KGJ1dHRvbiwgImNsaWNrZWQiLCBHX0NBTExCQUNLKG9rQnV0dG9uQ2xpY2tlZCksIGF1dGhEaWFs
b2cpOworICAgIGd0a193aWRnZXRfc2V0X2Nhbl9kZWZhdWx0KGJ1dHRvbiwgVFJVRSk7CisgICAg
Z3RrX2JveF9wYWNrX2VuZChHVEtfQk9YKGJ1dHRvbkJveCksIGJ1dHRvbiwgRkFMU0UsIFRSVUUs
IDApOworICAgIGd0a193aWRnZXRfc2hvdyhidXR0b24pOworCisgICAgYXV0aERpYWxvZy0+cHJp
di0+YXV0aFdpZGdldCA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0TmV3KGF1dGhEaWFsb2ct
PnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5jb3JlKCkpOworICAgIGd0a19ib3hfcGFj
a19zdGFydChHVEtfQk9YKHZCb3gpLCBhdXRoRGlhbG9nLT5wcml2LT5hdXRoV2lkZ2V0LCBUUlVF
LCBUUlVFLCAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coYXV0aERpYWxvZy0+cHJpdi0+YXV0aFdp
ZGdldCk7CisKKyAgICBndGtfYm94X3BhY2tfZW5kKEdUS19CT1godkJveCksIGJ1dHRvbkJveCwg
RkFMU0UsIFRSVUUsIDApOworICAgIGd0a193aWRnZXRfc2hvdyhidXR0b25Cb3gpOworCisgICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmcmFtZSksIHZCb3gpOworICAgIGd0a193
aWRnZXRfc2hvdyh2Qm94KTsKKworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
YXV0aERpYWxvZyksIGZyYW1lKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZnJhbWUpOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dEcmF3KEd0a1dpZGdldCog
d2lkZ2V0LCBjYWlyb190KiBjcikKK3sKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1By
aXZhdGUqIHByaXYgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElBTE9HKHdpZGdldCktPnByaXY7
CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKHByaXYtPnN0eWxlQ29udGV4dC5nZXQoKSk7
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKHByaXYtPnN0eWxlQ29udGV4dC5nZXQo
KSwgR1RLX1NUWUxFX0NMQVNTX0JBQ0tHUk9VTkQpOworICAgIGd0a19yZW5kZXJfYmFja2dyb3Vu
ZChwcml2LT5zdHlsZUNvbnRleHQuZ2V0KCksIGNyLCAwLCAwLCBndGtfd2lkZ2V0X2dldF9hbGxv
Y2F0ZWRfd2lkdGgod2lkZ2V0KSwgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX2hlaWdodCh3aWRn
ZXQpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKHByaXYtPnN0eWxlQ29udGV4dC5n
ZXQoKSk7CisKKyAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFs
b2dfcGFyZW50X2NsYXNzKS0+ZHJhdyh3aWRnZXQsIGNyKTsKKworICAgIHJldHVybiBGQUxTRTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dNYXAoR3RrV2lkZ2V0
KiB3aWRnZXQpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX0RJQUxPRyh3aWRnZXQpLT5wcml2OworICAgIGd0a193
aWRnZXRfZ3JhYl9kZWZhdWx0KHByaXYtPmRlZmF1bHRCdXR0b24pOworCisgICAgR1RLX1dJREdF
VF9DTEFTUyh3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX3BhcmVudF9jbGFzcyktPm1hcCh3
aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NvbnN0
cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYXV0
aGVudGljYXRpb25fZGlhbG9nX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7CisK
KyAgICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfQVVU
SEVOVElDQVRJT05fRElBTE9HKG9iamVjdCktPnByaXY7CisgICAgcHJpdi0+c3R5bGVDb250ZXh0
ID0gYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKTsKKyAgICBHdGtXaWRnZXRQYXRo
KiBwYXRoID0gZ3RrX3dpZGdldF9wYXRoX25ldygpOworICAgIGd0a193aWRnZXRfcGF0aF9hcHBl
bmRfdHlwZShwYXRoLCBHVEtfVFlQRV9XSU5ET1cpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3Nl
dF9wYXRoKHByaXYtPnN0eWxlQ29udGV4dC5nZXQoKSwgcGF0aCk7CisgICAgZ3RrX3dpZGdldF9w
YXRoX2ZyZWUocGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9k
aWFsb2dfY2xhc3NfaW5pdChXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNzKiBrbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3Mp
OworICAgIG9iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlh
bG9nQ29uc3RydWN0ZWQ7CisKKyAgICBHdGtXaWRnZXRDbGFzcyogd2lkZ2V0Q2xhc3MgPSBHVEtf
V0lER0VUX0NMQVNTKGtsYXNzKTsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhdyA9IHdlYmtpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nRHJhdzsKKyAgICB3aWRnZXRDbGFzcy0+bWFwID0gd2Via2l0QXV0aGVu
dGljYXRpb25EaWFsb2dNYXA7Cit9CisKK0d0a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRpb25E
aWFsb2dOZXcoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFs
bGVuZ2UpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2cgPSBX
RUJLSVRfQVVUSEVOVElDQVRJT05fRElBTE9HKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9BVVRI
RU5USUNBVElPTl9ESUFMT0csIE5VTEwpKTsKKyAgICBhdXRoRGlhbG9nLT5wcml2LT5hdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSA9IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIHdlYmtpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nSW5pdGlhbGl6ZShhdXRoRGlhbG9nKTsKKyAgICByZXR1cm4gR1RL
X1dJREdFVChhdXRoRGlhbG9nKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjhmYWMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxv
Zy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ19oCisjZGVmaW5lIFdlYktpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nX2gKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHkuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9ESUFMT0cgICAgICAgICAgICAod2Via2l0X2F1
dGhlbnRpY2F0aW9uX2RpYWxvZ19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElD
QVRJT05fRElBTE9HKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1Qo
KG9iaiksIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX0RJQUxPRywgV2ViS2l0QXV0aGVudGlj
YXRpb25EaWFsb2cpKQorI2RlZmluZSBXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fRElBTE9HKG9i
aikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBF
X0FVVEhFTlRJQ0FUSU9OX0RJQUxPRykpCisjZGVmaW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9E
SUFMT0dfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fRElBTE9HLCBXZWJLaXRBdXRoZW50aWNhdGlvbkRp
YWxvZ0NsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX0RJQUxPR19DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9B
VVRIRU5USUNBVElPTl9ESUFMT0cpKQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElB
TE9HX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX0RJQUxPRywgV2ViS2l0QXV0aGVudGljYXRpb25EaWFs
b2dDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyAg
ICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2c7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2dDbGFzcyAgIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQ2xh
c3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dQcml2YXRlIFdl
YktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50
aWNhdGlvbkRpYWxvZyB7CisgICAgR3RrRXZlbnRCb3ggcGFyZW50OworCisgICAgV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2dQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ0NsYXNzIHsKKyAgICBHdGtFdmVudEJveENsYXNzIHBhcmVudENsYXNz
OworfTsKKworR1R5cGUgd2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZ19nZXRfdHlwZSgpOwor
R3RrV2lkZ2V0KiB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhXZWJLaXQ6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlUHJveHkqKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIFdlYktp
dEF1dGhlbnRpY2F0aW9uRGlhbG9nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwCmluZGV4IDFlYWUyNjcuLmQ3NzA3
MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExv
YWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0TG9hZGVyQ2xpZW50LmNwcApAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldlYktpdExvYWRlckNsaWVudC5oIgogCi0jaW5jbHVkZSAiV2ViS2l0Mkd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCiAjaW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFVSSVJlc3BvbnNlUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCBmYjBjNWVkLi5mODg3NWJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51SXRlbS5o
IgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51SXRlbURhdGEuaCIKICNpbmNsdWRlICJXZWJEYXRh
LmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCIKICNpbmNsdWRlICJX
ZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1l
bnVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlLmgiCkBA
IC0xNjEyLDkgKzE2MTMsNyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdTdWJtaXRGb3JtUmVxdWVzdChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGb3JtU3VibWlzc2lvbgogCiB2b2lkIHdlYmtp
dFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSkKIHsKLSAgICBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZyA9IG5ldyBX
ZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2coYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOwot
ICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkQXV0aGVudGljYXRpb25EaWFsb2coV0VCS0lUX1dFQl9W
SUVXX0JBU0Uod2ViVmlldyksIGRpYWxvZyk7Ci0gICAgZGlhbG9nLT5zaG93KCk7CisgICAgd2Vi
a2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNhdGlvbkRpYWxvZyhXRUJLSVRfV0VCX1ZJRVdfQkFT
RSh3ZWJWaWV3KSwgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggYzQ2ZGViMi4uODYwOWUxNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9y
eS5oIgogI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5DbGllbnRHdGsuaCIKICNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgi
CiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNl
QWNjZXNzaWJsZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgpAQCAt
MTA2LDcgKzEwNyw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBJ
bnRTaXplIHJlc2l6ZXJTaXplOwogICAgIEdSZWZQdHI8QXRrT2JqZWN0PiBhY2Nlc3NpYmxlOwog
ICAgIGJvb2wgbmVlZHNSZXNpemVPbk1hcDsKLSAgICBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25E
aWFsb2cqIGF1dGhlbnRpY2F0aW9uRGlhbG9nOworICAgIEd0a1dpZGdldCogYXV0aGVudGljYXRp
b25EaWFsb2c7CiAgICAgR3RrV2lkZ2V0KiBpbnNwZWN0b3JWaWV3OwogICAgIHVuc2lnbmVkIGlu
c3BlY3RvclZpZXdIZWlnaHQ7CiAgICAgR093blB0cjxHZGtFdmVudD4gY29udGV4dE1lbnVFdmVu
dDsKQEAgLTI3Niw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJlYWxp
emUoR3RrV2lkZ2V0KiB3aWRnZXQpCiBzdGF0aWMgYm9vbCB3ZWJraXRXZWJWaWV3Q2hpbGRJc0lu
dGVybmFsV2lkZ2V0KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgR3RrV2lkZ2V0KiB3
aWRnZXQpCiB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jh
c2UtPnByaXY7Ci0gICAgcmV0dXJuIHdpZGdldCA9PSBwcml2LT5pbnNwZWN0b3JWaWV3IHx8IChw
cml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZyAmJiBwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZy0+
d2lkZ2V0KCkgPT0gd2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0ID09IHByaXYtPmluc3BlY3Rv
clZpZXcgfHwgd2lkZ2V0ID09IHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nOwogfQogCiBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lckFkZChHdGtDb250YWluZXIqIGNvbnRh
aW5lciwgR3RrV2lkZ2V0KiB3aWRnZXQpCkBAIC0yOTUsMTggKzI5NiwyMiBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lckFkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwg
R3RrV2lkZ2V0KiB3aQogICAgIGd0a193aWRnZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURH
RVQoY29udGFpbmVyKSk7CiB9CiAKLXZvaWQgd2Via2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNh
dGlvbkRpYWxvZyhXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIFdlYktpdDJHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZyogZGlhbG9nKQordm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhl
bnRpY2F0aW9uRGlhbG9nKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgR3RrV2lkZ2V0
KiBkaWFsb2cpCiB7Ci0gICAgd2ViVmlld0Jhc2UtPnByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9n
ID0gZGlhbG9nOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2ViVmlld0Jh
c2UpLCBkaWFsb2ctPndpZGdldCgpKTsKLSAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJ
REdFVCh3ZWJWaWV3QmFzZSkpOyAvLyBXZSBuZWVkIHRvIGRyYXcgdGhlIHNoYWRvdyBvdmVyIHRo
ZSB3aWRnZXQuCisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jh
c2UtPnByaXY7CisgICAgcHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cgPSBkaWFsb2c7CisgICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3ZWJWaWV3QmFzZSksIGRpYWxvZyk7Cisg
ICAgZ3RrX3dpZGdldF9zaG93KGRpYWxvZyk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGRyYXcgdGhl
IHNoYWRvdyBvdmVyIHRoZSB3aWRnZXQuCisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19X
SURHRVQod2ViVmlld0Jhc2UpKTsKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNhbmNlbEF1
dGhlbnRpY2F0aW9uRGlhbG9nKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKIHsKICAg
ICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKICAg
ICBpZiAocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cpCi0gICAgICAgIHByaXYtPmF1dGhlbnRp
Y2F0aW9uRGlhbG9nLT5kZXN0cm95KCk7CisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShwcml2
LT5hdXRoZW50aWNhdGlvbkRpYWxvZyk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VBZGRX
ZWJJbnNwZWN0b3IoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBHdGtXaWRnZXQqIGlu
c3BlY3RvcikKQEAgLTMyNyw3ICszMzIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFz
ZUNvbnRhaW5lclJlbW92ZShHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KgogICAg
IGlmIChwcml2LT5pbnNwZWN0b3JWaWV3ID09IHdpZGdldCkgewogICAgICAgICBwcml2LT5pbnNw
ZWN0b3JWaWV3ID0gMDsKICAgICAgICAgcHJpdi0+aW5zcGVjdG9yVmlld0hlaWdodCA9IDA7Ci0g
ICAgfSBlbHNlIGlmIChwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZyAmJiBwcml2LT5hdXRoZW50
aWNhdGlvbkRpYWxvZy0+d2lkZ2V0KCkgPT0gd2lkZ2V0KSB7CisgICAgfSBlbHNlIGlmIChwcml2
LT5hdXRoZW50aWNhdGlvbkRpYWxvZyA9PSB3aWRnZXQpIHsKICAgICAgICAgcHJpdi0+YXV0aGVu
dGljYXRpb25EaWFsb2cgPSAwOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChwcml2LT5j
aGlsZHJlbi5jb250YWlucyh3aWRnZXQpKTsKQEAgLTM1MSw3ICszNTYsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lckZvcmFsbChHdGtDb250YWluZXIqIGNvbnRhaW5l
ciwgZ2Jvb2xlYW4gaQogICAgICAgICAoKmNhbGxiYWNrKShwcml2LT5pbnNwZWN0b3JWaWV3LCBj
YWxsYmFja0RhdGEpOwogCiAgICAgaWYgKGluY2x1ZGVJbnRlcm5hbHMgJiYgcHJpdi0+YXV0aGVu
dGljYXRpb25EaWFsb2cpCi0gICAgICAgICgqY2FsbGJhY2spKHByaXYtPmF1dGhlbnRpY2F0aW9u
RGlhbG9nLT53aWRnZXQoKSwgY2FsbGJhY2tEYXRhKTsKKyAgICAgICAgKCpjYWxsYmFjaykocHJp
di0+YXV0aGVudGljYXRpb25EaWFsb2csIGNhbGxiYWNrRGF0YSk7CiB9CiAKIHZvaWQgd2Via2l0
V2ViVmlld0Jhc2VDaGlsZE1vdmVSZXNpemUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXcsIEd0
a1dpZGdldCogY2hpbGQsIGNvbnN0IEludFJlY3QmIGNoaWxkUmVjdCkKQEAgLTQ3Niw3ICs0ODEs
NyBAQCBzdGF0aWMgdm9pZCByZXNpemVXZWJLaXRXZWJWaWV3QmFzZUZyb21BbGxvY2F0aW9uKFdl
YktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZQogICAgIC8vIGFmdGVyIGNhbGN1bGF0aW5nIHRo
ZSBpbnNwZWN0b3IgYWxsb2NhdGlvbi4KICAgICBpZiAocHJpdi0+YXV0aGVudGljYXRpb25EaWFs
b2cpIHsKICAgICAgICAgR3RrUmVxdWlzaXRpb24gbmF0dXJhbFNpemU7Ci0gICAgICAgIGd0a193
aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXplKHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nLT53aWRn
ZXQoKSwgMCwgJm5hdHVyYWxTaXplKTsKKyAgICAgICAgZ3RrX3dpZGdldF9nZXRfcHJlZmVycmVk
X3NpemUocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2csIDAsICZuYXR1cmFsU2l6ZSk7CiAKICAg
ICAgICAgR3RrQWxsb2NhdGlvbiBjaGlsZEFsbG9jYXRpb24gPSB7CiAgICAgICAgICAgICAodmll
d1JlY3Qud2lkdGgoKSAtIG5hdHVyYWxTaXplLndpZHRoKSAvIDIsCkBAIC00ODQsNyArNDg5LDcg
QEAgc3RhdGljIHZvaWQgcmVzaXplV2ViS2l0V2ViVmlld0Jhc2VGcm9tQWxsb2NhdGlvbihXZWJL
aXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UKICAgICAgICAgICAgIG5hdHVyYWxTaXplLndpZHRo
LAogICAgICAgICAgICAgbmF0dXJhbFNpemUuaGVpZ2h0CiAgICAgICAgIH07Ci0gICAgICAgIGd0
a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZy0+d2lkZ2V0
KCksICZjaGlsZEFsbG9jYXRpb24pOworICAgICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUo
cHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2csICZjaGlsZEFsbG9jYXRpb24pOwogICAgIH0KIAog
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKQEAgLTgxNSw3ICs4MjAsNyBAQCBzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0V2ViVmlld0Jhc2VGb2N1cyhHdGtXaWRnZXQqIHdpZGdldCwgR3RrRGlyZWN0
aW9uVHlwZSBkaXJlYwogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9XRUJfVklFV19CQVNFKHdpZGdldCktPnByaXY7CiAgICAgaWYgKHByaXYtPmF1dGhlbnRpY2F0
aW9uRGlhbG9nKSB7CiAgICAgICAgIGdib29sZWFuIHJldHVyblZhbHVlOwotICAgICAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2ctPndpZGdldCgpLCAi
Zm9jdXMiLCBkaXJlY3Rpb24sICZyZXR1cm5WYWx1ZSk7CisgICAgICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZywgImZvY3VzIiwgZGlyZWN0aW9uLCAm
cmV0dXJuVmFsdWUpOwogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZS5oCmluZGV4IDJiZDBiYzAuLjhiZDRmMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJp
dmF0ZS5oCkBAIC0yOSw3ICsyOSw2IEBACiAjZGVmaW5lIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZV9oCiAKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5R3RrLmgiCi0jaW5jbHVkZSAiV2Vi
S2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5o
IgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5
LmgiCkBAIC02NSw3ICs2NCw3IEBAIHR5cGVkZWYgdm9pZCAoKldlYktpdFdlYlZpZXdCYXNlRG93
bmxvYWRSZXF1ZXN0SGFuZGxlcikgKFdlYktpdFdlYlZpZXdCYXNlKiwgV2ViCiB2b2lkIHdlYmtp
dFdlYlZpZXdCYXNlU2V0RG93bmxvYWRSZXF1ZXN0SGFuZGxlcihXZWJLaXRXZWJWaWV3QmFzZSos
IFdlYktpdFdlYlZpZXdCYXNlRG93bmxvYWRSZXF1ZXN0SGFuZGxlcik7CiB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlSGFuZGxlRG93bmxvYWRSZXF1ZXN0KFdlYktpdFdlYlZpZXdCYXNlKiwgV2ViS2l0
OjpEb3dubG9hZFByb3h5Kik7CiAKLXZvaWQgd2Via2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNh
dGlvbkRpYWxvZyhXZWJLaXRXZWJWaWV3QmFzZSosIFdlYktpdDo6V2ViS2l0Mkd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nKik7Cit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQWRkQXV0aGVudGljYXRpb25E
aWFsb2coV2ViS2l0V2ViVmlld0Jhc2UqLCBHdGtXaWRnZXQqIGF1dGhEaWFsb2cpOwogdm9pZCB3
ZWJraXRXZWJWaWV3QmFzZUNhbmNlbEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdlYktpdFdlYlZpZXdC
YXNlKik7CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQWRkV2ViSW5zcGVjdG9yKFdlYktpdFdlYlZp
ZXdCYXNlKiwgR3RrV2lkZ2V0KiBpbnNwZWN0b3IpOwogCmRpZmYgLS1naXQgYS9Ub29scy9ndGsv
Z2VuZXJhdGUtZ3RrZG9jIGIvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYwppbmRleCAzZWRkMTNm
Li5iYTM3NTZmIDEwMDc1NQotLS0gYS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCisrKyBiL1Rv
b2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKQEAgLTk4LDkgKzk4LDkgQEAgZGVmIGdldF93ZWJraXQy
X29wdGlvbnMoKToKICAgICAgICAgJ2lnbm9yZWRfZmlsZXMnOiBnbG9iLmdsb2Ioc3JjX3BhdGgo
JypQcml2YXRlLmgnKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNy
Y19wYXRoKCcqQ2xpZW50KicpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmds
b2Ioc3JjX3BhdGgoJ1dlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS4qJykpICsgXAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0Mkd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nLionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9i
KHNyY19wYXRoKCdXZWJLaXRHZW9sb2NhdGlvblByb3ZpZGVyLionKSkgKyBcCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXRUZXh0Q2hlY2tlci4qJykp
ICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2cuKicpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBn
bG9iLmdsb2IoZGVyaXZlZF9zb3VyY2VzX3BhdGgoJ3dlYmtpdDJndGsnLCAnd2Via2l0MicsICdX
ZWJLaXRNYXJzaGFsLionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9i
KGRlcml2ZWRfc291cmNlc19wYXRoKCd3ZWJraXQyZ3RrJywgJ3dlYmtpdDInLCAnV2ViS2l0RW51
bVR5cGVzLionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19w
YXRoKCd0ZXN0cy8qLmgnKSkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5h
YwppbmRleCA5Nzk4MGU0Li5lNGUzYWUxIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIv
Y29uZmlndXJlLmFjCkBAIC0yODksNyArMjg5LDcgQEAgQUNfQVJHX1dJVEgoW2d0a10sCiAgICAg
ICAgIFt3aXRoX2d0az0zLjBdKQogQUNfTVNHX1JFU1VMVChbJHdpdGhfZ3RrXSkKIAotR1RLMl9S
RVFVSVJFRF9WRVJTSU9OPTIuMTAKK0dUSzJfUkVRVUlSRURfVkVSU0lPTj0yLjE2CiBHQUlMMl9S
RVFVSVJFRF9WRVJTSU9OPTEuOAogR1RLM19SRVFVSVJFRF9WRVJTSU9OPTMuNC4wCiBHQUlMM19S
RVFVSVJFRF9WRVJTSU9OPTMuMAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189975</attachid>
            <date>2013-02-24 06:33:09 -0800</date>
            <delta_ts>2013-03-14 09:10:31 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk-auth-widget3.diff</filename>
            <type>text/plain</type>
            <size>71788</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyNGU3ZTljLi5mYTYzNTkz
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTMtMDItMjQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIFNwbGl0IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIGluIHR3byB3aWRn
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM2
NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNv
dXJjZS9hdXRvdG9vbHMvVmVyc2lvbnMubTQ6IEJ1bXAgR1RLKyAyIHJlcXVpcmVtZW50cyB0byAy
LjE2CisgICAgICAgIGZvciBHdGtPcmllbnRhYmxlLgorCiAyMDEzLTAyLTIxICBUb255IENoYW5n
ICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQXV0b2dlbmVyYXRlIFNldHRpbmdzIHRo
YXQgY2FsbCBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMgd2hlbiBzZXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCBlMzFkNmU1Li40MTYzYTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTMt
MDItMjQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFtHVEtdIFNwbGl0IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIGluIHR3byB3aWRnZXRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM2NDQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgY3VycmVu
dCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyBpbXBsZW1lbnRzIGJvdGggdGhlIGNvbW1vbgorICAg
ICAgICBsb2dpYyBhbmQgd2lkZ2V0cyB0byBpbXBsZW1lbnQgYSByZWFsIEd0a0RpYWxvZyBhbmQg
YSB3aWRnZXQgdG8gYmUKKyAgICAgICAgZW1iZWRkZWQgaW4gYW55IGNvbnRhaW5lci4gV2ViS2l0
MSB1c2VzIGEgR3RrRGlhbG9nIHdoaWxlIFdlYktpdDIKKyAgICAgICAgZW1iZWRzIHRoZSBkaWFs
b2cgaW4gdGhlIFdlYlZpZXcuIFRoaXMgcGF0Y2ggc3BsaXRzIHRoZSBjb2RlIHRvCisgICAgICAg
IGxlYXZlIGluIFBsYXRmb3JtIG9ubHkgdGhlIGNvZGUgdGhhdCBpcyBhY3R1YWxseSBjb21tb24s
IGxlYXZpbmcKKyAgICAgICAgdGhlIHdpZGdldCBpbXBsZW1lbnRhdGlvbiB0byB0aGUgV2ViS2l0
IGxheWVyLCB1c2luZyBhIGRpYWxvZyBpbgorICAgICAgICBXZWJLaXQxIGFuZCBlbWJlZGRpbmcg
YXV0aCB3aWRnZXQgaW4gdGhlIFdlYlZpZXcgaW4gV2ViS2l0Mi4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmxpc3QuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
cGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKF9XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldFByaXZhdGUpOgorICAgICAg
ICAocGFja1R3b0NvbHVtbkxheW91dEluQm94KToKKyAgICAgICAgKGNyZWF0ZUxhYmVsKToKKyAg
ICAgICAgKGNyZWF0ZUVudHJ5KToKKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0
SW5pdGlhbGl6ZSk6CisgICAgICAgICh3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldEZpbmFsaXpl
KToKKyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl93aWRnZXRfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRfYXV0aGVudGljYXRpb25fd2lkZ2V0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Vi
a2l0QXV0aGVudGljYXRpb25XaWRnZXROZXcpOgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRp
b25XaWRnZXRDcmVhdGVDcmVkZW50aWFsKToKKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9u
V2lkZ2V0R2V0Q2hhbGxlbmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvV2ViS2l0QXV0aGVu
dGljYXRpb25XaWRnZXQuaDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0QXV0aGVudGljYXRpb25X
aWRnZXQpOgorICAgICAgICAoX1dlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0Q2xhc3MpOgorCiAy
MDEzLTAyLTIzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlc291cmNlUmVxdWVzdEJhc2UgdW5uZWNlc3NhcmlseSB1cGRhdGVzIHdoZW4gbm90aGluZyBj
aGFuZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggZjFkM2FmOS4uMGFkN2Y1YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEzLTAyLTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBTcGxpdCBHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZyBpbiB0d28gd2lkZ2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21w
aWxhdGlvbi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIFVzZSBoZWxwZXIgY3JlYXRlQXV0
aGVudGljYXRpb25EaWFsb2coKSB0byBjcmVhdGUgYW5kIHNob3cgdGhlCisgICAgICAgIGF1dGgg
ZGlhbG9nLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRhdXRoZW50aWNhdGlvbmRpYWxvZy5jcHA6
IEFkZGVkLgorICAgICAgICAoYXV0aGVudGljYXRpb25EaWFsb2dSZXNwb25zZUNhbGxiYWNrKToK
KyAgICAgICAgKGNyZWF0ZUF1dGhlbnRpY2F0aW9uRGlhbG9nKToKKyAgICAgICAgKiB3ZWJraXQv
d2Via2l0YXV0aGVudGljYXRpb25kaWFsb2cuaDogQWRkZWQuCisgICAgICAgICogd2Via2l0L3dl
YmtpdHNvdXBhdXRoZGlhbG9nLmNwcDoKKyAgICAgICAgKHNlc3Npb25BdXRoZW50aWNhdGUpOiBE
aXR0by4KKwogMjAxMy0wMi0yMyAgSmFzb24gQW5kZXJzc2VuICA8amFuZGVyc3NlbkBnbWFpbC5j
b20+CiAKICAgICAgICAgTW92ZSBzZXRBdXRvZmlsbGVkIGZyb20gVGVzdFJ1bm5lciB0byBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9wby9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9wby9DaGFuZ2VMb2cKaW5kZXggOGRkM2RkOC4uYTNiN2U5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvcG8vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3BvL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEzLTAyLTI0ICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBTcGxpdCBHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZyBpbiB0d28gd2lkZ2V0cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQT1RGSUxFUy5pbjogUmVwbGFjZSBHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZy5jcHAgd2l0aAorICAgICAgICBXZWJLaXRBdXRoZW50aWNhdGlvbldp
ZGdldC5jcHAKKwogMjAxMy0wMi0xOSAgTWnImXUgTW9sZG92YW4gIDxkdW1vbEBnbm9tZS5vcmc+
CiAKICAgICAgICAgUm9tYW5pYW4gdHJhbnNsYXRpb24gZm9yIFdlYktpdEd0aysgSEVBRApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IDBlNzZmNDguLjdiOTlkNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAor
MjAxMy0wMi0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dUS10gU3BsaXQgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgaW4gdHdvIHdpZGdl
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzY0
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZy5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRBdXRoZW50
aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZSk6IFVzZSB0aGUKKyAgICAgICAgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VQcm94eSB0byBhdXRoZW50aWNhdGUgYW5kIGRlc3Ryb3kgdGhlIGRpYWxvZy4K
KyAgICAgICAgKG9rQnV0dG9uQ2xpY2tlZCk6IENhbGwgd2Via2l0QXV0aGVudGljYXRpb25EaWFs
b2dBdXRoZW50aWNhdGUoKQorICAgICAgICB3aXRoIHRoZSBjcmVkZW50aWFsLgorICAgICAgICAo
Y2FuY2VsQnV0dG9uQ2xpY2tlZCk6IENhbGwKKyAgICAgICAgd2Via2l0QXV0aGVudGljYXRpb25E
aWFsb2dBdXRoZW50aWNhdGUoKSB3aXRoIGEgTlVMTCBjcmVkZW50aWFsIHRvCisgICAgICAgIGNv
bnRpbnVlIHdpdGhvdXQgY3JlZGVudGlhbC4KKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nSW5pdGlhbGl6ZSk6IEJ1aWxkIHRoZSBVSS4KKyAgICAgICAgKHdlYmtpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nRHJhdyk6IERyYXcgYSBiYWNrZ3JvdW5kLgorICAgICAgICAod2Via2l0QXV0
aGVudGljYXRpb25EaWFsb2dNYXApOiBHcmFiIGRlZmF1bHQgYnV0dG9uLgorICAgICAgICAod2Vi
a2l0QXV0aGVudGljYXRpb25EaWFsb2dDb25zdHJ1Y3RlZCk6IENyZWF0ZSBhIEd0a1N0eWxlQ29u
dGV4dAorICAgICAgICB3aXRoIHRoZSBHdGtXaW5kb3cgcGF0aCB0byBkcmF3IHRoZSB3aWRnZXQg
YmFja2dyb3VuZCBsaWtlIGEgcmVhbAorICAgICAgICBkaWFsb2cuCisgICAgICAgICh3ZWJraXRf
YXV0aGVudGljYXRpb25fZGlhbG9nX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0QXV0aGVu
dGljYXRpb25EaWFsb2dOZXcpOiBDcmVhdGUgYSBuZXcKKyAgICAgICAgV2ViS2l0QXV0aGVudGlj
YXRpb25EaWFsb2cgd2lkZ2V0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdExvYWRlckNsaWVudC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpOiBDcmVhdGUgYQorICAgICAgICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxv
ZyB3aWRnZXQgYW5kIHBhc3MgYWRkIGl0IHRvIHRoZQorICAgICAgICBjb250YWluZXIuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAgICAgICAo
X1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSk6IFVwZGF0ZWQgdG8gdXNlIHRoZSB3aWRnZXQgZGly
ZWN0bHkuCisgICAgICAgICh3ZWJraXRXZWJWaWV3Q2hpbGRJc0ludGVybmFsV2lkZ2V0KTogRGl0
dG8uCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9nKTog
RGl0dG8uCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNhbmNlbEF1dGhlbnRpY2F0aW9uRGlh
bG9nKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lclJlbW92ZSk6
IERpdHRvLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VDb250YWluZXJGb3JhbGwpOiBEaXR0
by4KKyAgICAgICAgKHJlc2l6ZVdlYktpdFdlYlZpZXdCYXNlRnJvbUFsbG9jYXRpb24pOiBEaXR0
by4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRm9jdXMpOiBEaXR0by4KKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdCYXNlRGVzdHJveSk6IERlc3Ryb3kgdGhlIGF1dGggd2lkZ2V0IGlzIHByZXNl
bnQuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9jbGFzc19pbml0KTogQWRkIGltcGxl
bWVudGF0aW9uIGZvcgorICAgICAgICBHdGtXaWRnZXRDbGFzczo6ZGVzdHJveS4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDoKKwogMjAxMy0w
Mi0yMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCB0ZW1wb3Jh
cnkgd29yayBhcm91bmQgZm9yIDMyLWJpdCBwbHVnaW5zIG5vdCB3b3JraW5nIGluIHByb2R1Y3Rp
b24gYnVpbGRzIGFzIFhQQ1NlcnZpY2VzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggMjEyYWMwYS4uYjRlNzRmMCAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAy
LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXSBTcGxpdCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyBpbiB0d28gd2lkZ2V0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjQ0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBndGsvZ2VuZXJh
dGUtZ3RrZG9jOgorICAgICAgICAoZ2V0X3dlYmtpdDJfb3B0aW9ucyk6IERvIG5vdCBnZW5lcmF0
ZSBhcGkgZG9jcyBmb3IKKyAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cgd2hpY2gg
aXMgcHJpdmF0ZSBpbiBXZWJLaXQyLgorICAgICAgICAoZ2V0X3dlYmtpdDFfb3B0aW9ucyk6IERv
IG5vdCBnZW5lcmF0ZSBhcGkgZG9jcyBmb3IKKyAgICAgICAgd2Via2l0YXV0aGVudGljYXRpb25k
aWFsb2cgd2hpY2ggaXMgcHJpdmF0ZSBpbiBXZWJLaXQxLgorCiAyMDEzLTAyLTIzICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIER1bXBS
ZW5kZXJUcmVlIFRlc3RTaGVsbDo6aW5pdGlhbGl6ZSBzaG91bGQgdGFrZSBQbGF0Zm9ybSogbm93
IHRoYXQgV2ViS2l0UGxhdGZvcm1TdXBwb3J0IGlzIGVtcHR5CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQppbmRleCA4YWUyZjRmLi5hMGJiMDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTYxODIsOCArNjE4Miw2IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR1JlZlB0ckd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0
aGVudGljYXRpb25EaWFsb2cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1Bs
dWdpbldpZGdldC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5X
aWRnZXQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAg
XApAQCAtNjIxOCw2ICs2MjE2LDggQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9X
ZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dp
ZGdldFJlbmRlcmluZ0NvbnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzRhMmVhYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjY5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCi0K
LSNpbmNsdWRlICJDcmVkZW50aWFsQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lv
bmluZy5oIgotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5o
PgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgY29uc3QgaW50IGdMYXlvdXRDb2x1bW5TcGFjaW5nID0gMTI7Ci1zdGF0aWMg
Y29uc3QgaW50IGdMYXlvdXRSb3dTcGFjaW5nID0gNjsKLXN0YXRpYyBjb25zdCBpbnQgZ0J1dHRv
blNwYWNpbmcgPSA1OwotCi1HdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRp
b25EaWFsb2coY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ3JlZGVu
dGlhbFN0b3JhZ2VNb2RlIG1vZGUpCi0gICAgOiBtX2RpYWxvZygwKQotICAgICwgbV9sb2dpbkVu
dHJ5KDApCi0gICAgLCBtX3Bhc3N3b3JkRW50cnkoMCkKLSAgICAsIG1fcmVtZW1iZXJDaGVja0J1
dHRvbigwKQotICAgICwgbV9jaGFsbGVuZ2UoY2hhbGxlbmdlKQotICAgICwgbV9jcmVkZW50aWFs
U3RvcmFnZU1vZGUobW9kZSkKLXsKLX0KLQotR3RrQXV0aGVudGljYXRpb25EaWFsb2c6Okd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRvdyogcGFyZW50V2luZG93LCBjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgbW9kZSkK
LSAgICA6IG1fZGlhbG9nKGd0a19kaWFsb2dfbmV3KCkpCi0gICAgLCBtX2xvZ2luRW50cnkoMCkK
LSAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQotICAgICwgbV9yZW1lbWJlckNoZWNrQnV0dG9uKDAp
Ci0gICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCi0gICAgLCBtX2NyZWRlbnRpYWxTdG9yYWdl
TW9kZShtb2RlKQotewotICAgIEd0a1dpZGdldCogY29udGVudEFyZWEgPSBndGtfZGlhbG9nX2dl
dF9jb250ZW50X2FyZWEoR1RLX0RJQUxPRyhtX2RpYWxvZykpOwotICAgIGd0a19jb250YWluZXJf
c2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKEdUS19ESUFMT0cobV9kaWFsb2cpKSwgNSk7
Ci0gICAgZ3RrX2JveF9zZXRfc3BhY2luZyhHVEtfQk9YKGNvbnRlbnRBcmVhKSwgMik7IC8qIDIg
KiA1ICsgMiA9IDEyICovCi0KLSAgICBHdGtXaW5kb3cqIHdpbmRvdyA9IEdUS19XSU5ET1cobV9k
aWFsb2cpOwotICAgIGd0a193aW5kb3dfc2V0X3Jlc2l6YWJsZSh3aW5kb3csIEZBTFNFKTsKLSAg
ICBndGtfd2luZG93X3NldF90aXRsZSh3aW5kb3csICIiKTsKLSAgICBndGtfd2luZG93X3NldF9p
Y29uX25hbWUod2luZG93LCBHVEtfU1RPQ0tfRElBTE9HX0FVVEhFTlRJQ0FUSU9OKTsKLQotICAg
IGlmIChwYXJlbnRXaW5kb3cpCi0gICAgICAgIGd0a193aW5kb3dfc2V0X3RyYW5zaWVudF9mb3Io
d2luZG93LCBwYXJlbnRXaW5kb3cpOwotCi0gICAgY3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcihj
b250ZW50QXJlYSk7Ci19Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotc3RhdGljIHZvaWQg
cGFja1R3b0NvbHVtbkxheW91dEluQm94KEd0a1dpZGdldCogYm94LCAuLi4pCi17Ci0gICAgdmFf
bGlzdCBhcmd1bWVudExpc3Q7Ci0gICAgdmFfc3RhcnQoYXJndW1lbnRMaXN0LCBib3gpOwotCi0g
ICAgR3RrV2lkZ2V0KiB0YWJsZSA9IGd0a190YWJsZV9uZXcoMSwgMiwgRkFMU0UpOwotICAgIGd0
a190YWJsZV9zZXRfY29sX3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlvdXRDb2x1bW5T
cGFjaW5nKTsKLSAgICBndGtfdGFibGVfc2V0X3Jvd19zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUp
LCBnTGF5b3V0Um93U3BhY2luZyk7Ci0KLSAgICBHdGtXaWRnZXQqIGZpcnN0Q29sdW1uV2lkZ2V0
ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7Ci0gICAgaW50IHJvd051bWJlciA9
IDA7Ci0gICAgd2hpbGUgKGZpcnN0Q29sdW1uV2lkZ2V0KSB7Ci0gICAgICAgIGlmIChyb3dOdW1i
ZXIpCi0gICAgICAgICAgICBndGtfdGFibGVfcmVzaXplKEdUS19UQUJMRSh0YWJsZSksIHJvd051
bWJlciArIDEsIDIpOwotCi0gICAgICAgIEd0a1dpZGdldCogc2Vjb25kQ29sdW1uV2lkZ2V0ID0g
dmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7Ci0gICAgICAgIEd0a0F0dGFjaE9wdGlv
bnMgYXR0YWNoT3B0aW9ucyA9IHN0YXRpY19jYXN0PEd0a0F0dGFjaE9wdGlvbnM+KEdUS19FWFBB
TkQgfCBHVEtfRklMTCk7Ci0gICAgICAgIGd0a190YWJsZV9hdHRhY2goR1RLX1RBQkxFKHRhYmxl
KSwgZmlyc3RDb2x1bW5XaWRnZXQsCi0gICAgICAgICAgICAwLCBzZWNvbmRDb2x1bW5XaWRnZXQg
PyAxIDogMiwKLSAgICAgICAgICAgIHJvd051bWJlciwgcm93TnVtYmVyICsgMSwKLSAgICAgICAg
ICAgIGF0dGFjaE9wdGlvbnMsIGF0dGFjaE9wdGlvbnMsCi0gICAgICAgICAgICAwLCAwKTsKLQot
ICAgICAgICBpZiAoc2Vjb25kQ29sdW1uV2lkZ2V0KQotICAgICAgICAgICAgZ3RrX3RhYmxlX2F0
dGFjaF9kZWZhdWx0cyhHVEtfVEFCTEUodGFibGUpLCBzZWNvbmRDb2x1bW5XaWRnZXQsIDEsIDIs
IHJvd051bWJlciwgcm93TnVtYmVyICsgMSk7Ci0KLSAgICAgICAgZmlyc3RDb2x1bW5XaWRnZXQg
PSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAgICAgICAgcm93TnVtYmVyKys7
Ci0gICAgfQotCi0gICAgdmFfZW5kKGFyZ3VtZW50TGlzdCk7Ci0KLSAgICBndGtfYm94X3BhY2tf
c3RhcnQoR1RLX0JPWChib3gpLCB0YWJsZSwgRkFMU0UsIEZBTFNFLCAwKTsKLX0KLSNlbHNlCi1z
dGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gsIC4uLikK
LXsKLSAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKLSAgICB2YV9zdGFydChhcmd1bWVudExpc3Qs
IGJveCk7Ci0KLSAgICBHdGtXaWRnZXQqIGdyaWQgPSBndGtfZ3JpZF9uZXcoKTsKLSAgICBndGtf
Z3JpZF9zZXRfY29sdW1uX3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCksIGdMYXlvdXRSb3dTcGFjaW5n
KTsKLSAgICBndGtfZ3JpZF9zZXRfcm93X3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCksIGdMYXlvdXRS
b3dTcGFjaW5nKTsKLSAgICBndGtfZ3JpZF9zZXRfY29sdW1uX2hvbW9nZW5lb3VzKEdUS19HUklE
KGdyaWQpLCBUUlVFKTsKLQotICAgIEd0a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9h
cmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAgICBpbnQgcm93TnVtYmVyID0gMDsKLSAg
ICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKLSAgICAgICAgR3RrV2lkZ2V0KiBzZWNvbmRD
b2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAgICAgICAg
aW50IGZpcnN0V2lkZ2V0V2lkdGggPSBzZWNvbmRDb2x1bW5XaWRnZXQgPyAxIDogMjsKLQotICAg
ICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIGZpcnN0Q29sdW1uV2lkZ2V0LCAw
LCByb3dOdW1iZXIsIGZpcnN0V2lkZ2V0V2lkdGgsIDEpOwotICAgICAgICBndGtfd2lkZ2V0X3Nl
dF9oZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBUUlVFKTsKLSAgICAgICAgZ3RrX3dpZGdldF9z
ZXRfdmV4cGFuZChmaXJzdENvbHVtbldpZGdldCwgVFJVRSk7Ci0KLSAgICAgICAgaWYgKHNlY29u
ZENvbHVtbldpZGdldCkgewotICAgICAgICAgICAgZ3RrX2dyaWRfYXR0YWNoKEdUS19HUklEKGdy
aWQpLCBzZWNvbmRDb2x1bW5XaWRnZXQsIDEsIHJvd051bWJlciwgMSwgMSk7Ci0gICAgICAgICAg
ICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKHNlY29uZENvbHVtbldpZGdldCwgVFJVRSk7Ci0gICAg
ICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHNlY29uZENvbHVtbldpZGdldCwgVFJVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVu
dExpc3QsIEd0a1dpZGdldCopOwotICAgICAgICByb3dOdW1iZXIrKzsKLSAgICB9Ci0KLSAgICB2
YV9lbmQoYXJndW1lbnRMaXN0KTsKLQotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJv
eCksIGdyaWQsIEZBTFNFLCBGQUxTRSwgMCk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIEd0a1dpZGdl
dCogY3JlYXRlRGlhbG9nTGFiZWwoY29uc3QgY2hhciogbGFiZWxTdHJpbmcsIGludCBob3Jpem9u
dGFsUGFkZGluZyA9IDApCi17Ci0gICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXco
bGFiZWxTdHJpbmcpOwotICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MobGFiZWwp
LCAwLCAwLjUpOwotICAgIGlmIChob3Jpem9udGFsUGFkZGluZykKLSAgICAgICAgZ3RrX21pc2Nf
c2V0X3BhZGRpbmcoR1RLX01JU0MobGFiZWwpLCAwLCBob3Jpem9udGFsUGFkZGluZyk7Ci0gICAg
cmV0dXJuIGxhYmVsOwotfQotCi1zdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVEaWFsb2dFbnRyeShH
dGtXaWRnZXQqKiBtZW1iZXIpCi17Ci0gICAgKm1lbWJlciA9IGd0a19lbnRyeV9uZXcoKTsKLSAg
ICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19FTlRSWSgqbWVtYmVyKSwgVFJV
RSk7Ci0gICAgcmV0dXJuICptZW1iZXI7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFs
b2c6OmNyZWF0ZUNvbnRlbnRzSW5Db250YWluZXIoR3RrV2lkZ2V0KiBjb250YWluZXIpCi17Ci0j
aWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHdGtXaWRnZXQqIGhCb3ggPSBndGtfaGJveF9u
ZXcoRkFMU0UsIGdMYXlvdXRDb2x1bW5TcGFjaW5nKTsKLSNlbHNlCi0gICAgR3RrV2lkZ2V0KiBo
Qm94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIGdMYXlvdXRDb2x1
bW5TcGFjaW5nKTsKLSNlbmRpZgotICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChH
VEtfQ09OVEFJTkVSKGhCb3gpLCBnQnV0dG9uU3BhY2luZyk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUihjb250YWluZXIpLCBoQm94KTsKLQotICAgIEd0a1dpZGdldCogaWNv
biA9IGd0a19pbWFnZV9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfRElBTE9HX0FVVEhFTlRJQ0FU
SU9OLCBHVEtfSUNPTl9TSVpFX0RJQUxPRyk7Ci0gICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChH
VEtfTUlTQyhpY29uKSwgMC41LCAwKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCho
Qm94KSwgaWNvbiwgRkFMU0UsIEZBTFNFLCAwKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gcHJvbXB0
KGdfc3RyZHVwX3ByaW50ZigKLSAgICAgICAgXygiVGhlIHNpdGUgJXM6JWkgcmVxdWVzdHMgYSB1
c2VybmFtZSBhbmQgcGFzc3dvcmQiKSwKLSAgICAgICAgbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNw
YWNlKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCksCi0gICAgICAgIG1fY2hhbGxlbmdlLnByb3RlY3Rp
b25TcGFjZSgpLnBvcnQoKSkpOwotCi0gICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uID0gZ3RrX2No
ZWNrX2J1dHRvbl9uZXdfd2l0aF9tbmVtb25pYyhfKCJfUmVtZW1iZXIgcGFzc3dvcmQiKSk7Ci0g
ICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2NoaWxkKEdU
S19CSU4obV9yZW1lbWJlckNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKLSAgICBndGtfd2lkZ2V0X3Nl
dF9ub19zaG93X2FsbChtX3JlbWVtYmVyQ2hlY2tCdXR0b24sIG1fY3JlZGVudGlhbFN0b3JhZ2VN
b2RlID09IERpc2FsbG93UGVyc2lzdGVudFN0b3JhZ2UpOwotCi0KLSAgICAvLyBXZSBhcmUgYWRk
aW5nIHRoZSBidXR0b24gYm94IGhlcmUgbWFudWFsbHkgaW5zdGVhZCBvZiB1c2luZyB0aGUgcmVh
ZHktbWFkZSBHdGtEaWFsb2cgYnV0dG9ucy4KLSAgICAvLyBUaGlzIGlzIHNvIHRoYXQgd2UgY2Fu
IHNoYXJlIHRoZSBjb2RlIHdpdGggaW1wbGVtZW50YXRpb25zIHRoYXQgZG8gbm90IHVzZSBHdGtE
aWFsb2cuCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHdGtXaWRnZXQqIGJ1dHRvbkJv
eCA9IGd0a19oYnV0dG9uX2JveF9uZXcoKTsKLSNlbHNlCi0gICAgR3RrV2lkZ2V0KiBidXR0b25C
b3ggPSBndGtfYnV0dG9uX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpOwotI2Vu
ZGlmCi0gICAgZ3RrX2JveF9zZXRfc3BhY2luZyhHVEtfQk9YKGJ1dHRvbkJveCksIGdCdXR0b25T
cGFjaW5nKTsKLSAgICBndGtfYnV0dG9uX2JveF9zZXRfbGF5b3V0KEdUS19CVVRUT05fQk9YKGJ1
dHRvbkJveCksIEdUS19CVVRUT05CT1hfRU5EKTsKLQotICAgIG1fb2theUJ1dHRvbiA9IGd0a19i
dXR0b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX09LKTsKLSAgICBtX2NhbmNlbEJ1dHRvbiA9
IGd0a19idXR0b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX0NBTkNFTCk7Ci0gICAgZ3RrX2Jv
eF9wYWNrX3N0YXJ0KEdUS19CT1goYnV0dG9uQm94KSwgbV9jYW5jZWxCdXR0b24sIEZBTFNFLCBU
UlVFLCAwKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChidXR0b25Cb3gpLCBtX29r
YXlCdXR0b24sIEZBTFNFLCBUUlVFLCAwKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fb2theUJ1
dHRvbiwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGJ1dHRvbkNsaWNrZWRDYWxsYmFjayksIHRoaXMp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jYW5jZWxCdXR0b24sICJjbGlja2VkIiwgR19DQUxM
QkFDSyhidXR0b25DbGlja2VkQ2FsbGJhY2spLCB0aGlzKTsKLQotICAgIFN0cmluZyByZWFsbSA9
IG1fY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnJlYWxtKCk7Ci0gICAgaWYgKCFyZWFsbS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgcGFja1R3b0NvbHVtbkxheW91dEluQm94KGhCb3gsCi0gICAg
ICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChwcm9tcHQuZ2V0KCksIGdMYXlvdXRSb3dTcGFjaW5n
KSwgTlVMTCwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlNlcnZlciBtZXNzYWdl
OiIpKSwgY3JlYXRlRGlhbG9nTGFiZWwocmVhbG0udXRmOCgpLmRhdGEoKSksCi0gICAgICAgICAg
ICBjcmVhdGVEaWFsb2dMYWJlbChfKCJVc2VybmFtZToiKSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZt
X2xvZ2luRW50cnkpLAotICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiUGFzc3dvcmQ6
IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9wYXNzd29yZEVudHJ5KSwKLSAgICAgICAgICAgIG1f
cmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwKLSAgICAgICAgICAgIGJ1dHRvbkJveCwgTlVMTCwg
TlVMTCk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3go
aEJveCwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91
dFJvd1NwYWNpbmcpLCBOVUxMLAotICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiVXNl
cm5hbWU6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9sb2dpbkVudHJ5KSwKLSAgICAgICAgICAg
IGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlBhc3N3b3JkOiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1f
cGFzc3dvcmRFbnRyeSksCi0gICAgICAgICAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24sIE5VTEws
IE5VTEwsCi0gICAgICAgICAgICBidXR0b25Cb3gsIE5VTEwsIE5VTEwpOwotICAgIH0KLQotICAg
IGd0a19lbnRyeV9zZXRfdmlzaWJpbGl0eShHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgRkFM
U0UpOwotICAgIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3Jh
Z2UgPSBtX2NoYWxsZW5nZS5wcm9wb3NlZENyZWRlbnRpYWwoKTsKLSAgICBpZiAoIWNyZWRlbnRp
YWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGd0a19lbnRyeV9z
ZXRfdGV4dChHVEtfRU5UUlkobV9sb2dpbkVudHJ5KSwgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50
U3RvcmFnZS51c2VyKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGd0a19lbnRyeV9zZXRfdGV4
dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3Rv
cmFnZS5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBndGtfdG9nZ2xlX2J1dHRv
bl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKG1fcmVtZW1iZXJDaGVja0J1dHRvbiksIFRS
VUUpOwotICAgIH0KLX0KLQotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2hvdygpCi17
Ci0gICAgZ3RrX3dpZGdldF9zZXRfY2FuX2RlZmF1bHQobV9va2F5QnV0dG9uLCBUUlVFKTsKLSAg
ICBndGtfd2lkZ2V0X2dyYWJfZGVmYXVsdChtX29rYXlCdXR0b24pOwotICAgIGd0a193aWRnZXRf
Z3JhYl9mb2N1cyhtX2xvZ2luRW50cnkpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2Rp
YWxvZyk7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmRlc3Ryb3koKQotewot
ICAgIGd0a193aWRnZXRfZGVzdHJveShtX2RpYWxvZyk7Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0K
LXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0ZShjb25zdCBDcmVkZW50
aWFsJiBjcmVkZW50aWFsKQotewotICAgIGlmIChjcmVkZW50aWFsLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV9jaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRSZXF1ZXN0VG9D
b250aW51ZVdpdGhvdXRDcmVkZW50aWFsKG1fY2hhbGxlbmdlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkQ3JlZGVudGlhbCht
X2NoYWxsZW5nZSwgY3JlZGVudGlhbCk7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFs
b2c6OmJ1dHRvbkNsaWNrZWRDYWxsYmFjayhHdGtXaWRnZXQqIGJ1dHRvbiwgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cqIGRpYWxvZykKLXsKLSAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWw7Ci0gICAg
aWYgKGJ1dHRvbiA9PSBkaWFsb2ctPm1fb2theUJ1dHRvbikgewotICAgICAgICBjb25zdCBjaGFy
ICp1c2VybmFtZSA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZGlhbG9nLT5tX2xvZ2lu
RW50cnkpKTsKLSAgICAgICAgY29uc3QgY2hhciAqcGFzc3dvcmQgPSBndGtfZW50cnlfZ2V0X3Rl
eHQoR1RLX0VOVFJZKGRpYWxvZy0+bV9wYXNzd29yZEVudHJ5KSk7Ci0gICAgICAgIGJvb2wgcmVt
ZW1iZXJQYXNzd29yZCA9IGd0a190b2dnbGVfYnV0dG9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9C
VVRUT04oZGlhbG9nLT5tX3JlbWVtYmVyQ2hlY2tCdXR0b24pKTsKLSAgICAgICAgQ3JlZGVudGlh
bFBlcnNpc3RlbmNlIHBlcnNpc3RlbmNlOwotCi0gICAgICAgIGlmIChyZW1lbWJlclBhc3N3b3Jk
ICYmIGRpYWxvZy0+bV9jcmVkZW50aWFsU3RvcmFnZU1vZGUgPT0gQWxsb3dQZXJzaXN0ZW50U3Rv
cmFnZSkKLSAgICAgICAgICAgIHBlcnNpc3RlbmNlID0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlUGVy
bWFuZW50OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwZXJzaXN0ZW5jZSA9IENyZWRlbnRp
YWxQZXJzaXN0ZW5jZUZvclNlc3Npb247Ci0KLSAgICAgICAgY3JlZGVudGlhbCA9IENyZWRlbnRp
YWwoU3RyaW5nOjpmcm9tVVRGOCh1c2VybmFtZSksIFN0cmluZzo6ZnJvbVVURjgocGFzc3dvcmQp
LCBwZXJzaXN0ZW5jZSk7Ci0gICAgfQotCi0gICAgZGlhbG9nLT5hdXRoZW50aWNhdGUoY3JlZGVu
dGlhbCk7Ci0gICAgZGlhbG9nLT5kZXN0cm95KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNh
dGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3N2M4MWEuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR3RrQXV0aGVudGljYXRpb25EaWFsb2df
aAotI2RlZmluZSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCi0KLSNpbmNsdWRlICJBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgotI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoR3RrQXV0aGVudGljYXRpb25EaWFsb2cpOwotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgZW51bSBDcmVkZW50aWFsU3RvcmFn
ZU1vZGUgewotICAgICAgICBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlLCAvLyBUaGUgdXNlciBpcyBh
c2tlZCB3aGV0aGVyIHRvIHN0b3JlIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24uCi0gICAgICAgIERp
c2FsbG93UGVyc2lzdGVudFN0b3JhZ2UgLy8gQ3JlZGVudGlhbCBpbmZvcm1hdGlvbiBpcyBvbmx5
IGtlcHQgaW4gdGhlIHNlc3Npb24uCi0gICAgfTsKLQotICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2Rl
KTsKLSAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqLCBjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSk7Ci0gICAgdmlydHVhbCB+
R3RrQXV0aGVudGljYXRpb25EaWFsb2coKSB7IH0KLSAgICB2b2lkIHNob3coKTsKLSAgICB2b2lk
IGRlc3Ryb3koKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgY3JlYXRlQ29udGVudHNJbkNvbnRh
aW5lcihHdGtXaWRnZXQqIGNvbnRhaW5lcik7Ci0gICAgdmlydHVhbCB2b2lkIGF1dGhlbnRpY2F0
ZShjb25zdCBDcmVkZW50aWFsJik7Ci0gICAgR3RrV2lkZ2V0KiBtX2RpYWxvZzsKLSAgICBHdGtX
aWRnZXQqIG1fbG9naW5FbnRyeTsKLSAgICBHdGtXaWRnZXQqIG1fcGFzc3dvcmRFbnRyeTsKLSAg
ICBHdGtXaWRnZXQqIG1fcmVtZW1iZXJDaGVja0J1dHRvbjsKLSAgICBHdGtXaWRnZXQqIG1fb2th
eUJ1dHRvbjsKLSAgICBHdGtXaWRnZXQqIG1fY2FuY2VsQnV0dG9uOwotCi1wcml2YXRlOgotICAg
IHN0YXRpYyB2b2lkIGJ1dHRvbkNsaWNrZWRDYWxsYmFjayhHdGtXaWRnZXQqLCBHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZyopOwotICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIG1fY2hhbGxlbmdl
OwotICAgIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtX2NyZWRlbnRpYWxTdG9yYWdlTW9kZTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XZWJLaXRB
dXRoZW50aWNhdGlvbldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2Vi
S2l0QXV0aGVudGljYXRpb25XaWRnZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmU0N2Q1OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQuY3BwCkBAIC0wLDAgKzEsMjQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC5oIgorCisjaW5jbHVkZSAiQ3Jl
ZGVudGlhbEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNs
dWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0UHJpdmF0ZSB7CisgICAgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlOworICAgIENyZWRlbnRpYWxTdG9yYWdlTW9k
ZSBjcmVkZW50aWFsU3RvcmFnZU1vZGU7CisKKyAgICBHdGtXaWRnZXQqIGxvZ2luRW50cnk7Cisg
ICAgR3RrV2lkZ2V0KiBwYXNzd29yZEVudHJ5OworICAgIEd0a1dpZGdldCogcmVtZW1iZXJDaGVj
a0J1dHRvbjsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQs
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl93aWRnZXQsIEdUS19UWVBFX0JPWCkKKworc3RhdGljIGNv
bnN0IGludCBnTGF5b3V0Q29sdW1uU3BhY2luZyA9IDEyOworc3RhdGljIGNvbnN0IGludCBnTGF5
b3V0Um93U3BhY2luZyA9IDY7CitzdGF0aWMgY29uc3QgaW50IGdCdXR0b25TcGFjaW5nID0gNTsK
KworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5
b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3VtZW50TGlz
dDsKKyAgICB2YV9zdGFydChhcmd1bWVudExpc3QsIGJveCk7CisKKyAgICBHdGtXaWRnZXQqIHRh
YmxlID0gZ3RrX3RhYmxlX25ldygxLCAyLCBGQUxTRSk7CisgICAgZ3RrX3RhYmxlX3NldF9jb2xf
c3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgZ0xheW91dENvbHVtblNwYWNpbmcpOworICAgIGd0
a190YWJsZV9zZXRfcm93X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlvdXRSb3dTcGFj
aW5nKTsKKworICAgIEd0a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1l
bnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICBpbnQgcm93TnVtYmVyID0gMDsKKyAgICB3aGlsZSAo
Zmlyc3RDb2x1bW5XaWRnZXQpIHsKKyAgICAgICAgaWYgKHJvd051bWJlcikKKyAgICAgICAgICAg
IGd0a190YWJsZV9yZXNpemUoR1RLX1RBQkxFKHRhYmxlKSwgcm93TnVtYmVyICsgMSwgMik7CisK
KyAgICAgICAgR3RrV2lkZ2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRM
aXN0LCBHdGtXaWRnZXQqKTsKKyAgICAgICAgR3RrQXR0YWNoT3B0aW9ucyBhdHRhY2hPcHRpb25z
ID0gc3RhdGljX2Nhc3Q8R3RrQXR0YWNoT3B0aW9ucz4oR1RLX0VYUEFORCB8IEdUS19GSUxMKTsK
KyAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaCgKKyAgICAgICAgICAgIEdUS19UQUJMRSh0YWJsZSks
IGZpcnN0Q29sdW1uV2lkZ2V0LAorICAgICAgICAgICAgMCwgc2Vjb25kQ29sdW1uV2lkZ2V0ID8g
MSA6IDIsCisgICAgICAgICAgICByb3dOdW1iZXIsIHJvd051bWJlciArIDEsCisgICAgICAgICAg
ICBhdHRhY2hPcHRpb25zLCBhdHRhY2hPcHRpb25zLAorICAgICAgICAgICAgMCwgMCk7CisgICAg
ICAgIGd0a193aWRnZXRfc2hvdyhmaXJzdENvbHVtbldpZGdldCk7CisKKyAgICAgICAgaWYgKHNl
Y29uZENvbHVtbldpZGdldCkgeworICAgICAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0
cyhHVEtfVEFCTEUodGFibGUpLCBzZWNvbmRDb2x1bW5XaWRnZXQsIDEsIDIsIHJvd051bWJlciwg
cm93TnVtYmVyICsgMSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3coc2Vjb25kQ29sdW1u
V2lkZ2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0Q29sdW1uV2lkZ2V0ID0gdmFfYXJn
KGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7CisgICAgICAgIHJvd051bWJlcisrOworICAgIH0K
KworICAgIHZhX2VuZChhcmd1bWVudExpc3QpOworCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1goYm94KSwgdGFibGUsIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93
KHRhYmxlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3go
R3RrV2lkZ2V0KiBib3gsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKKyAgICB2
YV9zdGFydChhcmd1bWVudExpc3QsIGJveCk7CisKKyAgICBHdGtXaWRnZXQqIGdyaWQgPSBndGtf
Z3JpZF9uZXcoKTsKKyAgICBndGtfZ3JpZF9zZXRfY29sdW1uX3NwYWNpbmcoR1RLX0dSSUQoZ3Jp
ZCksIGdMYXlvdXRSb3dTcGFjaW5nKTsKKyAgICBndGtfZ3JpZF9zZXRfcm93X3NwYWNpbmcoR1RL
X0dSSUQoZ3JpZCksIGdMYXlvdXRSb3dTcGFjaW5nKTsKKyAgICBndGtfZ3JpZF9zZXRfY29sdW1u
X2hvbW9nZW5lb3VzKEdUS19HUklEKGdyaWQpLCBUUlVFKTsKKworICAgIEd0a1dpZGdldCogZmly
c3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICBp
bnQgcm93TnVtYmVyID0gMDsKKyAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKKyAgICAg
ICAgR3RrV2lkZ2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBH
dGtXaWRnZXQqKTsKKyAgICAgICAgaW50IGZpcnN0V2lkZ2V0V2lkdGggPSBzZWNvbmRDb2x1bW5X
aWRnZXQgPyAxIDogMjsKKworICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCks
IGZpcnN0Q29sdW1uV2lkZ2V0LCAwLCByb3dOdW1iZXIsIGZpcnN0V2lkZ2V0V2lkdGgsIDEpOwor
ICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBUUlVFKTsK
KyAgICAgICAgZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChmaXJzdENvbHVtbldpZGdldCwgVFJVRSk7
CisgICAgICAgIGd0a193aWRnZXRfc2hvdyhmaXJzdENvbHVtbldpZGdldCk7CisKKyAgICAgICAg
aWYgKHNlY29uZENvbHVtbldpZGdldCkgeworICAgICAgICAgICAgZ3RrX2dyaWRfYXR0YWNoKEdU
S19HUklEKGdyaWQpLCBzZWNvbmRDb2x1bW5XaWRnZXQsIDEsIHJvd051bWJlciwgMSwgMSk7Cisg
ICAgICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKHNlY29uZENvbHVtbldpZGdldCwgVFJV
RSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHNlY29uZENvbHVtbldpZGdl
dCwgVFJVRSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3coc2Vjb25kQ29sdW1uV2lkZ2V0
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0Q29sdW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3Vt
ZW50TGlzdCwgR3RrV2lkZ2V0Kik7CisgICAgICAgIHJvd051bWJlcisrOworICAgIH0KKworICAg
IHZhX2VuZChhcmd1bWVudExpc3QpOworCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1go
Ym94KSwgZ3JpZCwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZ3JpZCk7
Cit9CisjZW5kaWYKKworc3RhdGljIEd0a1dpZGdldCogY3JlYXRlTGFiZWwoY29uc3QgY2hhciog
bGFiZWxTdHJpbmcsIGludCBob3Jpem9udGFsUGFkZGluZyA9IDApCit7CisgICAgR3RrV2lkZ2V0
KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcobGFiZWxTdHJpbmcpOworICAgIGd0a19taXNjX3NldF9h
bGlnbm1lbnQoR1RLX01JU0MobGFiZWwpLCAwLCAwLjUpOworICAgIGlmIChob3Jpem9udGFsUGFk
ZGluZykKKyAgICAgICAgZ3RrX21pc2Nfc2V0X3BhZGRpbmcoR1RLX01JU0MobGFiZWwpLCAwLCBo
b3Jpem9udGFsUGFkZGluZyk7CisgICAgcmV0dXJuIGxhYmVsOworfQorCitzdGF0aWMgR3RrV2lk
Z2V0KiBjcmVhdGVFbnRyeShHdGtXaWRnZXQqKiBtZW1iZXIpCit7CisgICAgKm1lbWJlciA9IGd0
a19lbnRyeV9uZXcoKTsKKyAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19F
TlRSWSgqbWVtYmVyKSwgVFJVRSk7CisgICAgcmV0dXJuICptZW1iZXI7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0SW5pdGlhbGl6ZShXZWJLaXRBdXRoZW50aWNh
dGlvbldpZGdldCogYXV0aFdpZGdldCkKK3sKKyAgICBndGtfb3JpZW50YWJsZV9zZXRfb3JpZW50
YXRpb24oR1RLX09SSUVOVEFCTEUoYXV0aFdpZGdldCksIEdUS19PUklFTlRBVElPTl9IT1JJWk9O
VEFMKTsKKyAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goYXV0aFdpZGdldCksIGdMYXlv
dXRDb2x1bW5TcGFjaW5nKTsKKyAgICBndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGgoR1RL
X0NPTlRBSU5FUihhdXRoV2lkZ2V0KSwgZ0J1dHRvblNwYWNpbmcpOworCisgICAgR3RrV2lkZ2V0
KiBpY29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0dfQVVUSEVO
VElDQVRJT04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25t
ZW50KEdUS19NSVNDKGljb24pLCAwLjUsIDAuMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1goYXV0aFdpZGdldCksIGljb24sIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX3dpZGdl
dF9zaG93KGljb24pOworCisgICAgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRQcml2YXRlKiBw
cml2ID0gYXV0aFdpZGdldC0+cHJpdjsKKyAgICBHT3duUHRyPGNoYXI+IHByb21wdChnX3N0cmR1
cF9wcmludGYoCisgICAgICAgIF8oIlRoZSBzaXRlICVzOiVpIHJlcXVlc3RzIGEgdXNlcm5hbWUg
YW5kIHBhc3N3b3JkIiksCisgICAgICAgIHByaXYtPmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uo
KS5ob3N0KCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgcHJpdi0+Y2hhbGxlbmdlLnByb3RlY3Rp
b25TcGFjZSgpLnBvcnQoKSkpOworCisgICAgcHJpdi0+cmVtZW1iZXJDaGVja0J1dHRvbiA9IGd0
a19jaGVja19idXR0b25fbmV3X3dpdGhfbW5lbW9uaWMoXygiX1JlbWVtYmVyIHBhc3N3b3JkIikp
OworICAgIGd0a19sYWJlbF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChndGtfYmluX2dldF9jaGls
ZChHVEtfQklOKHByaXYtPnJlbWVtYmVyQ2hlY2tCdXR0b24pKSksIFRSVUUpOworCisgICAgU3Ry
aW5nIHJlYWxtID0gYXV0aFdpZGdldC0+cHJpdi0+Y2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgp
LnJlYWxtKCk7CisgICAgaWYgKCFyZWFsbS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcGFja1R3b0Nv
bHVtbkxheW91dEluQm94KAorICAgICAgICAgICAgR1RLX1dJREdFVChhdXRoV2lkZ2V0KSwKKyAg
ICAgICAgICAgIGNyZWF0ZUxhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91dFJvd1NwYWNpbmcpLCBO
VUxMLAorICAgICAgICAgICAgY3JlYXRlTGFiZWwoXygiU2VydmVyIG1lc3NhZ2U6IikpLCBjcmVh
dGVMYWJlbChyZWFsbS51dGY4KCkuZGF0YSgpKSwKKyAgICAgICAgICAgIGNyZWF0ZUxhYmVsKF8o
IlVzZXJuYW1lOiIpKSwgY3JlYXRlRW50cnkoJnByaXYtPmxvZ2luRW50cnkpLAorICAgICAgICAg
ICAgY3JlYXRlTGFiZWwoXygiUGFzc3dvcmQ6IikpLCBjcmVhdGVFbnRyeSgmcHJpdi0+cGFzc3dv
cmRFbnRyeSksCisgICAgICAgICAgICBwcml2LT5yZW1lbWJlckNoZWNrQnV0dG9uLCBOVUxMLAor
ICAgICAgICAgICAgTlVMTCk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBwYWNrVHdvQ29sdW1u
TGF5b3V0SW5Cb3goCisgICAgICAgICAgICBHVEtfV0lER0VUKGF1dGhXaWRnZXQpLAorICAgICAg
ICAgICAgY3JlYXRlTGFiZWwocHJvbXB0LmdldCgpLCBnTGF5b3V0Um93U3BhY2luZyksIE5VTEws
CisgICAgICAgICAgICBjcmVhdGVMYWJlbChfKCJVc2VybmFtZToiKSksIGNyZWF0ZUVudHJ5KCZw
cml2LT5sb2dpbkVudHJ5KSwKKyAgICAgICAgICAgIGNyZWF0ZUxhYmVsKF8oIlBhc3N3b3JkOiIp
KSwgY3JlYXRlRW50cnkoJnByaXYtPnBhc3N3b3JkRW50cnkpLAorICAgICAgICAgICAgcHJpdi0+
cmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIE5VTEwpOworICAg
IH0KKyAgICBndGtfZW50cnlfc2V0X3Zpc2liaWxpdHkoR1RLX0VOVFJZKHByaXYtPnBhc3N3b3Jk
RW50cnkpLCBGQUxTRSk7CisgICAgZ3RrX3dpZGdldF9zZXRfdmlzaWJsZShwcml2LT5yZW1lbWJl
ckNoZWNrQnV0dG9uLCBwcml2LT5jcmVkZW50aWFsU3RvcmFnZU1vZGUgIT0gRGlzYWxsb3dQZXJz
aXN0ZW50U3RvcmFnZSk7CisKKyAgICBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsRnJvbVBl
cnNpc3RlbnRTdG9yYWdlID0gcHJpdi0+Y2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpOwor
ICAgIGlmICghY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShwcml2LT5sb2dpbkVudHJ5KSwgY3Jl
ZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS51c2VyKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgIGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkocHJpdi0+cGFzc3dvcmRFbnRyeSksIGNy
ZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UucGFzc3dvcmQoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgZ3RrX3RvZ2dsZV9idXR0b25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihw
cml2LT5yZW1lbWJlckNoZWNrQnV0dG9uKSwgVFJVRSk7CisgICAgfQorCisgICAgZ3RrX3dpZGdl
dF9ncmFiX2ZvY3VzKHByaXYtPmxvZ2luRW50cnkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRB
dXRoZW50aWNhdGlvbldpZGdldEZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJL
SVRfQVVUSEVOVElDQVRJT05fV0lER0VUKG9iamVjdCktPnByaXYtPn5XZWJLaXRBdXRoZW50aWNh
dGlvbldpZGdldFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYXV0aGVudGlj
YXRpb25fd2lkZ2V0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl93aWRnZXRfaW5pdChXZWJLaXRBdXRoZW50aWNh
dGlvbldpZGdldCogYXV0aFdpZGdldCkKK3sKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdl
dFByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoYXV0aFdpZGdldCwg
V0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fV0lER0VULCBXZWJLaXRBdXRoZW50aWNhdGlvbldp
ZGdldFByaXZhdGUpOworICAgIG5ldyAocHJpdikgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRQ
cml2YXRlKCk7CisgICAgYXV0aFdpZGdldC0+cHJpdiA9IHByaXY7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl93aWRnZXRfY2xhc3NfaW5pdChXZWJLaXRBdXRoZW50aWNh
dGlvbldpZGdldENsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdl
YmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0RmluYWxpemU7CisgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKG9iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRQcml2
YXRlKSk7Cit9CisKK0d0a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXROZXcoY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ3JlZGVudGlhbFN0b3JhZ2VN
b2RlIG1vZGUpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQqIGF1dGhXaWRnZXQg
PSBXRUJLSVRfQVVUSEVOVElDQVRJT05fV0lER0VUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9B
VVRIRU5USUNBVElPTl9XSURHRVQsIE5VTEwpKTsKKyAgICBhdXRoV2lkZ2V0LT5wcml2LT5jaGFs
bGVuZ2UgPSBjaGFsbGVuZ2U7CisgICAgYXV0aFdpZGdldC0+cHJpdi0+Y3JlZGVudGlhbFN0b3Jh
Z2VNb2RlID0gbW9kZTsKKyAgICB3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldEluaXRpYWxpemUo
YXV0aFdpZGdldCk7CisgICAgcmV0dXJuIEdUS19XSURHRVQoYXV0aFdpZGdldCk7Cit9CisKK0Ny
ZWRlbnRpYWwgd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFsKFdlYktp
dEF1dGhlbnRpY2F0aW9uV2lkZ2V0KiBhdXRoV2lkZ2V0KQoreworICAgIGNvbnN0IGNoYXIqIHVz
ZXJuYW1lID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShhdXRoV2lkZ2V0LT5wcml2LT5s
b2dpbkVudHJ5KSk7CisgICAgY29uc3QgY2hhciogcGFzc3dvcmQgPSBndGtfZW50cnlfZ2V0X3Rl
eHQoR1RLX0VOVFJZKGF1dGhXaWRnZXQtPnByaXYtPnBhc3N3b3JkRW50cnkpKTsKKyAgICBib29s
IHJlbWVtYmVyUGFzc3dvcmQgPSBndGtfdG9nZ2xlX2J1dHRvbl9nZXRfYWN0aXZlKEdUS19UT0dH
TEVfQlVUVE9OKGF1dGhXaWRnZXQtPnByaXYtPnJlbWVtYmVyQ2hlY2tCdXR0b24pKTsKKworICAg
IENyZWRlbnRpYWxQZXJzaXN0ZW5jZSBwZXJzaXN0ZW5jZTsKKyAgICBpZiAocmVtZW1iZXJQYXNz
d29yZCAmJiBhdXRoV2lkZ2V0LT5wcml2LT5jcmVkZW50aWFsU3RvcmFnZU1vZGUgPT0gQWxsb3dQ
ZXJzaXN0ZW50U3RvcmFnZSkKKyAgICAgICAgcGVyc2lzdGVuY2UgPSBDcmVkZW50aWFsUGVyc2lz
dGVuY2VQZXJtYW5lbnQ7CisgICAgZWxzZQorICAgICAgICBwZXJzaXN0ZW5jZSA9IENyZWRlbnRp
YWxQZXJzaXN0ZW5jZUZvclNlc3Npb247CisgICAgcmV0dXJuIENyZWRlbnRpYWwoU3RyaW5nOjpm
cm9tVVRGOCh1c2VybmFtZSksIFN0cmluZzo6ZnJvbVVURjgocGFzc3dvcmQpLCBwZXJzaXN0ZW5j
ZSk7Cit9CisKK0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiB3ZWJraXRBdXRoZW50aWNhdGlvbldp
ZGdldEdldENoYWxsZW5nZShXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldCogYXV0aFdpZGdldCkK
K3sKKyAgICByZXR1cm4gYXV0aFdpZGdldC0+cHJpdi0+Y2hhbGxlbmdlOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25XaWRn
ZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmI5M2RjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dlYktpdEF1dGhlbnRpY2F0
aW9uV2lkZ2V0LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0X2gKKyNkZWZpbmUg
V2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRfaAorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK2VudW0gQ3JlZGVudGlhbFN0b3Jh
Z2VNb2RlIHsKKyAgICBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlLCAvLyBUaGUgdXNlciBpcyBhc2tl
ZCB3aGV0aGVyIHRvIHN0b3JlIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24uCisgICAgRGlzYWxsb3dQ
ZXJzaXN0ZW50U3RvcmFnZSAvLyBDcmVkZW50aWFsIGluZm9ybWF0aW9uIGlzIG9ubHkga2VwdCBp
biB0aGUgc2Vzc2lvbi4KK307CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQ
RV9BVVRIRU5USUNBVElPTl9XSURHRVQgICAgICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9u
X3dpZGdldF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fV0lER0VU
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1dJREdFVCwgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQp
KQorI2RlZmluZSBXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fV0lER0VUKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FU
SU9OX1dJREdFVCkpCisjZGVmaW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9XSURHRVRfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
QVVUSEVOVElDQVRJT05fV0lER0VULCBXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldENsYXNzKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1dJREdFVF9DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElP
Tl9XSURHRVQpKQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fV0lER0VUX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0FV
VEhFTlRJQ0FUSU9OX1dJREdFVCwgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRDbGFzcykpCisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldCAgICAgICAgV2ViS2l0
QXV0aGVudGljYXRpb25XaWRnZXQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRp
b25XaWRnZXRDbGFzcyAgIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0Q2xhc3M7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRQcml2YXRlIFdlYktpdEF1dGhlbnRp
Y2F0aW9uV2lkZ2V0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdl
dCB7CisgICAgR3RrQm94IHBhcmVudDsKKworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0
UHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRD
bGFzcyB7CisgICAgR3RrQm94Q2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitHVHlwZSB3ZWJraXRf
YXV0aGVudGljYXRpb25fd2lkZ2V0X2dldF90eXBlKCk7CitHdGtXaWRnZXQqIHdlYmtpdEF1dGhl
bnRpY2F0aW9uV2lkZ2V0TmV3KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKK1dlYkNvcmU6OkNyZWRlbnRpYWwgd2Via2l0QXV0
aGVudGljYXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFsKFdlYktpdEF1dGhlbnRpY2F0aW9uV2lk
Z2V0Kik7CitXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgd2Via2l0QXV0aGVudGlj
YXRpb25XaWRnZXRHZXRDaGFsbGVuZ2UoV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQqKTsKKwor
R19FTkRfREVDTFMKKworI2VuZGlmIC8vIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktp
dC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggMjJkM2M4Ny4uMTU4YTA1YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsv
R05VbWFrZWZpbGUuYW0KQEAgLTIyMyw2ICsyMjMsOCBAQCB3ZWJraXRndGtfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmls
dGVyLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0lucHV0
TWV0aG9kRmlsdGVyLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRhcHBsaWNh
dGlvbmNhY2hlLmNwcCBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGF1dGhlbnRp
Y2F0aW9uZGlhbG9nLmNwcCBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGF1dGhl
bnRpY2F0aW9uZGlhbG9nLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3du
bG9hZC5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZHByaXZh
dGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGVycm9yLmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEd0ay5jcHAKaW5kZXggNmI0MGUyOS4uYmQ1MzY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApA
QCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHRHdGsuaCIK
ICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRl
ICJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgogI2luY2x1ZGUgIkd0a1BsdWdpbldpZGdldC5o
IgogI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50
LmgiCkBAIC02Niw2ICs2NSw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVk
ZSAid2Via2l0YXV0aGVudGljYXRpb25kaWFsb2cuaCIKICNpbmNsdWRlICJ3ZWJraXRlcnJvci5o
IgogI2luY2x1ZGUgIndlYmtpdGZhdmljb25kYXRhYmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdGZh
dmljb25kYXRhYmFzZXByaXZhdGUuaCIKQEAgLTIwNiwxNyArMjA2LDE2IEBAIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdl
YkNvcmU6OkRvY3VtCiAgICAgfQogCiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93
ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1fZnJhbWUpOwotICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nOjpDcmVkZW50aWFsU3RvcmFnZU1vZGUgY3JlZGVudGlhbFN0b3JhZ2VNb2RlOwogCisgICAg
Q3JlZGVudGlhbFN0b3JhZ2VNb2RlIGNyZWRlbnRpYWxTdG9yYWdlTW9kZTsKICAgICBpZiAoY29y
ZSh2aWV3KS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAgICAgICBj
cmVkZW50aWFsU3RvcmFnZU1vZGUgPSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6RGlzYWxsb3dQ
ZXJzaXN0ZW50U3RvcmFnZTsKKyAgICAgICAgY3JlZGVudGlhbFN0b3JhZ2VNb2RlID0gRGlzYWxs
b3dQZXJzaXN0ZW50U3RvcmFnZTsKICAgICBlbHNlCi0gICAgICAgIGNyZWRlbnRpYWxTdG9yYWdl
TW9kZSA9IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpBbGxvd1BlcnNpc3RlbnRTdG9yYWdlOwor
ICAgICAgICBjcmVkZW50aWFsU3RvcmFnZU1vZGUgPSBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlOwog
CiAgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19X
SURHRVQodmlldykpOwotICAgIEd0a1dpbmRvdyogdG9wbGV2ZWxXaW5kb3cgPSB3aWRnZXRJc09u
c2NyZWVuVG9wbGV2ZWxXaW5kb3codG9wbGV2ZWwpID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAw
OwotICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cgPSBuZXcgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2codG9wbGV2ZWxXaW5kb3csIGNoYWxsZW5nZSwgY3JlZGVudGlhbFN0b3JhZ2VN
b2RlKTsKLSAgICBkaWFsb2ctPnNob3coKTsKKyAgICBHdGtXaWRnZXQqIGF1dGhEaWFsb2cgPSBj
cmVhdGVBdXRoZW50aWNhdGlvbkRpYWxvZyh3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3co
dG9wbGV2ZWwpID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAwLCBjaGFsbGVuZ2UsIGNyZWRlbnRp
YWxTdG9yYWdlTW9kZSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGF1dGhEaWFsb2cpOwogfQogCiB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmll
ciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvcG8vUE9URklMRVMuaW4gYi9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5p
bgppbmRleCBiMTcwMDFhLi42ZjgzNjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9w
by9QT1RGSUxFUy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5pbgpAQCAt
MSw4ICsxLDggQEAKICMgTGlzdCBvZiBzb3VyY2UgZmlsZXMgd2hpY2ggY29udGFpbiB0cmFuc2xh
dGFibGUgc3RyaW5ncy4KIC4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAK
IC4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXJHdGsuY3BwCi0uLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlv
bkRpYWxvZy5jcHAKIC4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NH
dGsuY3BwCisuLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbldp
ZGdldC5jcHAKIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKIFdlYkNvcmVTdXBw
b3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcAogd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGF1dGhlbnRpY2F0aW9u
ZGlhbG9nLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRhdXRoZW50aWNhdGlv
bmRpYWxvZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2ZGVmYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRhdXRoZW50
aWNhdGlvbmRpYWxvZy5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTMgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXRhdXRoZW50aWNhdGlvbmRpYWxvZy5oIgor
CitzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrV2lk
Z2V0KiBhdXRoRGlhbG9nLCBnaW50IHJlc3BvbnNlSUQsIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lk
Z2V0KiBhdXRoV2lkZ2V0KQoreworICAgIFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
IGNoYWxsZW5nZSA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0R2V0Q2hhbGxlbmdlKGF1dGhX
aWRnZXQpOworICAgIGlmIChyZXNwb25zZUlEID09IEdUS19SRVNQT05TRV9PSykgeworICAgICAg
ICBXZWJDb3JlOjpDcmVkZW50aWFsIGNyZWRlbnRpYWwgPSB3ZWJraXRBdXRoZW50aWNhdGlvbldp
ZGdldENyZWF0ZUNyZWRlbnRpYWwoYXV0aFdpZGdldCk7CisgICAgICAgIGNoYWxsZW5nZS5hdXRo
ZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZENyZWRlbnRpYWwoY2hhbGxlbmdlLCBjcmVkZW50
aWFsKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50
KCktPnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2Up
OworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGF1dGhEaWFsb2cpOworfQorCitHdGtXaWRnZXQq
IGNyZWF0ZUF1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRvdyogcGFyZW50V2luZG93LCBjb25z
dCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDcmVkZW50aWFs
U3RvcmFnZU1vZGUgbW9kZSkKK3sKKyAgICBHdGtEaWFsb2cqIGRpYWxvZyA9IEdUS19ESUFMT0co
Z3RrX2RpYWxvZ19uZXcoKSk7CisgICAgZ3RrX2RpYWxvZ19hZGRfYnV0dG9ucyhkaWFsb2csIEdU
S19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsIEdUS19TVE9DS19PSywgR1RLX1JF
U1BPTlNFX09LLCBOVUxMKTsKKyAgICBndGtfZGlhbG9nX3NldF9kZWZhdWx0X3Jlc3BvbnNlKGRp
YWxvZywgR1RLX1JFU1BPTlNFX09LKTsKKworICAgIEd0a1dpZGdldCogY29udGVudEFyZWEgPSBn
dGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoZGlhbG9nKTsKKyAgICBndGtfY29udGFpbmVyX3Nl
dF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCA1KTsKKyAgICBndGtfYm94X3Nl
dF9zcGFjaW5nKEdUS19CT1goY29udGVudEFyZWEpLCAyKTsgLyogMiAqIDUgKyAyID0gMTIgKi8K
KworICAgIEd0a1dpZGdldCogYXV0aFdpZGdldCA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0
TmV3KGNoYWxsZW5nZSwgbW9kZSk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goY29u
dGVudEFyZWEpLCBhdXRoV2lkZ2V0LCBUUlVFLCBUUlVFLCAwKTsKKyAgICBndGtfd2lkZ2V0X3No
b3coYXV0aFdpZGdldCk7CisKKyAgICBHdGtXaWRnZXQqIGFjdGlvbkFyZWEgPSBndGtfZGlhbG9n
X2dldF9hY3Rpb25fYXJlYShkaWFsb2cpOworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93
aWR0aChHVEtfQ09OVEFJTkVSKGFjdGlvbkFyZWEpLCA1KTsKKyAgICBndGtfYm94X3NldF9zcGFj
aW5nKEdUS19CT1goYWN0aW9uQXJlYSksIDYpOworCisgICAgR3RrV2luZG93KiB3aW5kb3cgPSBH
VEtfV0lORE9XKGRpYWxvZyk7CisgICAgZ3RrX3dpbmRvd19zZXRfcmVzaXphYmxlKHdpbmRvdywg
RkFMU0UpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywgIiIpOworICAgIGd0a193
aW5kb3dfc2V0X2ljb25fbmFtZSh3aW5kb3csIEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJ
T04pOworICAgIGd0a193aW5kb3dfc2V0X2Rlc3Ryb3lfd2l0aF9wYXJlbnQgKHdpbmRvdywgVFJV
RSk7CisgICAgaWYgKHBhcmVudFdpbmRvdykKKyAgICAgICAgZ3RrX3dpbmRvd19zZXRfdHJhbnNp
ZW50X2Zvcih3aW5kb3csIHBhcmVudFdpbmRvdyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRp
YWxvZywgInJlc3BvbnNlIiwgR19DQUxMQkFDSyhhdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNl
Q2FsbGJhY2spLCBhdXRoV2lkZ2V0KTsKKworICAgIHJldHVybiBHVEtfV0lER0VUKGRpYWxvZyk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0YXV0aGVudGlj
YXRpb25kaWFsb2cuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRhdXRoZW50aWNh
dGlvbmRpYWxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5M2FjODQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0YXV0aGVu
dGljYXRpb25kaWFsb2cuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRl
ZiB3ZWJraXRhdXRoZW50aWNhdGlvbmRpYWxvZ19oCisjZGVmaW5lIHdlYmtpdGF1dGhlbnRpY2F0
aW9uZGlhbG9nX2gKKworI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0LmgiCisK
K0d0a1dpZGdldCogY3JlYXRlQXV0aGVudGljYXRpb25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRX
aW5kb3csIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3JlZGVudGlh
bFN0b3JhZ2VNb2RlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcAppbmRleCBmNDlhZmVmMy4uZWIwNTVmOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuY3BwCkBA
IC0yMSw5ICsyMSwxMCBAQAogI2luY2x1ZGUgIndlYmtpdHNvdXBhdXRoZGlhbG9nLmgiCiAKICNp
bmNsdWRlICJBdXRoZW50aWNhdGlvbkNsaWVudC5oIgotI2luY2x1ZGUgIkd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJ3ZWJr
aXRhdXRoZW50aWNhdGlvbmRpYWxvZy5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CkBAIC0xNDMsOCArMTQ0LDggQEAgc3RhdGljIHZvaWQgc2Vzc2lvbkF1dGhlbnRpY2F0ZShTb3Vw
U2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIFNvdXAKICAgICAvLyBpbXBv
c3NpYmxlIHdpdGggZ2NjLCBkdWUgdG8gV2ViS2l0U291cEF1dGhEaWFsb2dBdXRoZW50aWNhdGlv
bkNsaWVudCdzIHR3byBzdXBlcmNsYXNzZXMuCiAgICAgY2xpZW50LT5kZXJlZldlYktpdFNvdXBB
dXRoRGlhbG9nQXV0aGVudGljYXRpb25DbGllbnQoKTsKIAotICAgIEd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nKiBhdXRoRGlhbG9nID0gbmV3IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKHRvcGxldmVs
LCBjaGFsbGVuZ2UsIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpEaXNhbGxvd1BlcnNpc3RlbnRT
dG9yYWdlKTsKLSAgICBhdXRoRGlhbG9nLT5zaG93KCk7CisgICAgR3RrV2lkZ2V0KiBhdXRoRGlh
bG9nID0gY3JlYXRlQXV0aGVudGljYXRpb25EaWFsb2codG9wbGV2ZWwsIGNoYWxsZW5nZSwgRGlz
YWxsb3dQZXJzaXN0ZW50U3RvcmFnZSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGF1dGhEaWFsb2cp
OwogfQogCiBzdGF0aWMgdm9pZCBhdHRhY2goU291cFNlc3Npb25GZWF0dXJlKiBtYW5hZ2VyLCBT
b3VwU2Vzc2lvbiogc2Vzc2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDJi
MjMxMTMuLmM2OWQwODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTY0Myw4
ICs2NDMsOCBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvY3BwL1dLUmV0YWluUHRyLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1BhZ2VDbGllbnRJbXBsLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1BhZ2VDbGllbnRJbXBsLmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggXAorCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNw
cCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRp
b25EaWFsb2cuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFj
a0ZvcndhcmRMaXN0LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEJhY2tGb3J3YXJkTGlzdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkZDY1NC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCi0KLSNpbmNsdWRlICJBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCi0jaW5jbHVkZSAiQXV0aGVudGljYXRpb25EZWNp
c2lvbkxpc3RlbmVyLmgiCi0jaW5jbHVkZSAiV2ViQ3JlZGVudGlhbC5oIgotI2luY2x1ZGUgIldl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2YXRl
LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotLy8gVGhp
cyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBHdGtFdmVudEJveCBkb2VzIG5vdCBkcmF3IGEgYmFja2dy
b3VuZCBieSBkZWZhdWx0LAotLy8gYnV0IHdlIHdhbnQgaXQgdG8gaGF2ZSBhIG5vcm1hbCBHdGtX
aW5kb3cgYmFja2dyb3VuZC4KLXN0YXRpYyBnYm9vbGVhbiBkcmF3U2lnbmFsKEd0a1dpZGdldCog
d2lkZ2V0LCBjYWlyb190KiBjciwgR3RrU3R5bGVDb250ZXh0KiBzdHlsZUNvbnRleHQpCi17Ci0g
ICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKHN0eWxlQ29udGV4dCwgY3IsIDAsIDAsCi0gICAgICAg
IGd0a193aWRnZXRfZ2V0X2FsbG9jYXRlZF93aWR0aCh3aWRnZXQpLCBndGtfd2lkZ2V0X2dldF9h
bGxvY2F0ZWRfaGVpZ2h0KHdpZGdldCkpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotV2ViS2l0
Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2co
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIENy
ZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2RlKQotICAgIDogR3RrQXV0aGVudGljYXRpb25EaWFsb2co
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmNvcmUoKSwgbW9kZSkKLSAgICAsIG1fYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCi0gICAgLCBtX3N0eWxlQ29u
dGV4dChhZG9wdEdSZWYoZ3RrX3N0eWxlX2NvbnRleHRfbmV3KCkpKQotewotICAgIG1fZGlhbG9n
ID0gZ3RrX2V2ZW50X2JveF9uZXcoKTsKLQotICAgIEd0a1dpZGdldCogZnJhbWUgPSBndGtfZnJh
bWVfbmV3KDApOwotICAgIGd0a19mcmFtZV9zZXRfc2hhZG93X3R5cGUoR1RLX0ZSQU1FKGZyYW1l
KSwgR1RLX1NIQURPV19JTik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUiht
X2RpYWxvZyksIGZyYW1lKTsKLSAgICBjcmVhdGVDb250ZW50c0luQ29udGFpbmVyKGZyYW1lKTsK
LQotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhtX3N0eWxlQ29udGV4dC5nZXQoKSwg
R1RLX1NUWUxFX0NMQVNTX0JBQ0tHUk9VTkQpOwotICAgIEd0a1dpZGdldFBhdGgqIHBhdGggPSBn
dGtfd2lkZ2V0X3BhdGhfbmV3KCk7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBh
dGgsIEdUS19UWVBFX1dJTkRPVyk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhdGgobV9z
dHlsZUNvbnRleHQuZ2V0KCksIHBhdGgpOwotICAgIGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgp
OwotCi0gICAgZ19zaWduYWxfY29ubmVjdChtX2RpYWxvZywgImRyYXciLCBHX0NBTExCQUNLKGRy
YXdTaWduYWwpLCBtX3N0eWxlQ29udGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViS2l0Mkd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nOjphdXRoZW50aWNhdGUoY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlh
bCYgY3JlZGVudGlhbCkKLXsKLSAgICBSZWZQdHI8V2ViQ3JlZGVudGlhbD4gd2ViQ3JlZGVudGlh
bCA9IFdlYkNyZWRlbnRpYWw6OmNyZWF0ZShjcmVkZW50aWFsKTsKLSAgICBtX2F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLT5saXN0ZW5lcigpLT51c2VDcmVkZW50aWFsKHdlYkNyZWRlbnRpYWwuZ2V0
KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZjIxNGUuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nX2gKLSNkZWZpbmUgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKLQot
I2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKLSNpbmNsdWRlICJXS1Jl
dGFpblB0ci5oIgotI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9DcmVkZW50aWFsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtBdXRoZW50aWNhdGlvbkRp
YWxvZy5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIFdlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyA6IHB1YmxpYyBX
ZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB7Ci1wdWJsaWM6Ci0gICAgV2ViS2l0Mkd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqLCBDcmVk
ZW50aWFsU3RvcmFnZU1vZGUpOwotICAgIHZpcnR1YWwgfldlYktpdDJHdGtBdXRoZW50aWNhdGlv
bkRpYWxvZygpIHsgfQotICAgIEd0a1dpZGdldCogd2lkZ2V0KCkgeyByZXR1cm4gbV9kaWFsb2c7
IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBhdXRoZW50aWNhdGUoY29uc3QgV2Vi
Q29yZTo6Q3JlZGVudGlhbCYpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5PiBtX2F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiBtX3N0eWxlQ29udGV4dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0
aW9uRGlhbG9nLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wNjk5ZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgorCisjaW5jbHVkZSAiQXV0
aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2ViQ3JlZGVudGlhbC5o
IgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
Kworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUgeworICAgIFJlZlB0
cjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsK
KworICAgIEd0a1dpZGdldCogYXV0aFdpZGdldDsKKyAgICBHdGtXaWRnZXQqIGRlZmF1bHRCdXR0
b247CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dDsKK307CisKK1dF
QktJVF9ERUZJTkVfVFlQRShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZywgd2Via2l0X2F1dGhl
bnRpY2F0aW9uX2RpYWxvZywgR1RLX1RZUEVfRVZFTlRfQk9YKQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRBdXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShXZWJLaXRBdXRoZW50aWNhdGlvbkRp
YWxvZyogYXV0aERpYWxvZywgV2ViQ3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBXZWJL
aXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUqIHByaXYgPSBhdXRoRGlhbG9nLT5wcml2Owor
ICAgIHByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5lcigpLT51c2VDcmVkZW50
aWFsKGNyZWRlbnRpYWwpOworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGF1dGhE
aWFsb2cpKTsKK30KKworc3RhdGljIHZvaWQgb2tCdXR0b25DbGlja2VkKEd0a0J1dHRvbiosIFdl
YktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nKQoreworICAgIFdlYktpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSogcHJpdiA9IGF1dGhEaWFsb2ctPnByaXY7CisgICAgUmVm
UHRyPFdlYkNyZWRlbnRpYWw+IHdlYkNyZWRlbnRpYWwgPSBXZWJDcmVkZW50aWFsOjpjcmVhdGUo
d2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFsKFdFQktJVF9BVVRIRU5U
SUNBVElPTl9XSURHRVQocHJpdi0+YXV0aFdpZGdldCkpKTsKKyAgICB3ZWJraXRBdXRoZW50aWNh
dGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCB3ZWJDcmVkZW50aWFsLmdldCgpKTsK
K30KKworc3RhdGljIHZvaWQgY2FuY2VsQnV0dG9uQ2xpY2tlZChHdGtCdXR0b24qLCBXZWJLaXRB
dXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZykKK3sKKyAgICB3ZWJraXRBdXRoZW50aWNh
dGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCAwKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0aWFsaXplKFdlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nKiBhdXRoRGlhbG9nLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgY3JlZGVudGlhbFN0b3Jh
Z2VNb2RlKQoreworICAgIEd0a1dpZGdldCogZnJhbWUgPSBndGtfZnJhbWVfbmV3KDApOworICAg
IGd0a19mcmFtZV9zZXRfc2hhZG93X3R5cGUoR1RLX0ZSQU1FKGZyYW1lKSwgR1RLX1NIQURPV19J
Tik7CisKKyAgICBHdGtXaWRnZXQqIHZCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05f
VkVSVElDQUwsIDYpOworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09O
VEFJTkVSKHZCb3gpLCA1KTsKKworICAgIEd0a1dpZGdldCogYnV0dG9uQm94ID0gZ3RrX2J1dHRv
bl9ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKTsKKyAgICBndGtfYnV0dG9uX2Jv
eF9zZXRfbGF5b3V0KEdUS19CVVRUT05fQk9YKGJ1dHRvbkJveCksIEdUS19CVVRUT05CT1hfRU5E
KTsKKyAgICBndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihidXR0
b25Cb3gpLCA1KTsKKyAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goYnV0dG9uQm94KSwg
Nik7CisKKyAgICBHdGtXaWRnZXQqIGJ1dHRvbiA9IGd0a19idXR0b25fbmV3X2Zyb21fc3RvY2so
R1RLX1NUT0NLX0NBTkNFTCk7CisgICAgZ19zaWduYWxfY29ubmVjdChidXR0b24sICJjbGlja2Vk
IiwgR19DQUxMQkFDSyhjYW5jZWxCdXR0b25DbGlja2VkKSwgYXV0aERpYWxvZyk7CisgICAgZ3Rr
X2JveF9wYWNrX2VuZChHVEtfQk9YKGJ1dHRvbkJveCksIGJ1dHRvbiwgRkFMU0UsIFRSVUUsIDAp
OworICAgIGd0a193aWRnZXRfc2hvdyhidXR0b24pOworCisgICAgYnV0dG9uID0gZ3RrX2J1dHRv
bl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfT0spOworICAgIGF1dGhEaWFsb2ctPnByaXYtPmRl
ZmF1bHRCdXR0b24gPSBidXR0b247CisgICAgZ19zaWduYWxfY29ubmVjdChidXR0b24sICJjbGlj
a2VkIiwgR19DQUxMQkFDSyhva0J1dHRvbkNsaWNrZWQpLCBhdXRoRGlhbG9nKTsKKyAgICBndGtf
d2lkZ2V0X3NldF9jYW5fZGVmYXVsdChidXR0b24sIFRSVUUpOworICAgIGd0a19ib3hfcGFja19l
bmQoR1RLX0JPWChidXR0b25Cb3gpLCBidXR0b24sIEZBTFNFLCBUUlVFLCAwKTsKKyAgICBndGtf
d2lkZ2V0X3Nob3coYnV0dG9uKTsKKworICAgIGF1dGhEaWFsb2ctPnByaXYtPmF1dGhXaWRnZXQg
PSB3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldE5ldyhhdXRoRGlhbG9nLT5wcml2LT5hdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS0+Y29yZSgpLCBjcmVkZW50aWFsU3RvcmFnZU1vZGUpOworICAgIGd0
a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZCb3gpLCBhdXRoRGlhbG9nLT5wcml2LT5hdXRoV2lk
Z2V0LCBUUlVFLCBUUlVFLCAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coYXV0aERpYWxvZy0+cHJp
di0+YXV0aFdpZGdldCk7CisKKyAgICBndGtfYm94X3BhY2tfZW5kKEdUS19CT1godkJveCksIGJ1
dHRvbkJveCwgRkFMU0UsIFRSVUUsIDApOworICAgIGd0a193aWRnZXRfc2hvdyhidXR0b25Cb3gp
OworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmcmFtZSksIHZCb3gpOwor
ICAgIGd0a193aWRnZXRfc2hvdyh2Qm94KTsKKworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIoYXV0aERpYWxvZyksIGZyYW1lKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZnJhbWUp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dEcmF3KEd0
a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBjcikKK3sKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZ1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElBTE9HKHdpZGdl
dCktPnByaXY7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKHByaXYtPnN0eWxlQ29udGV4
dC5nZXQoKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKHByaXYtPnN0eWxlQ29u
dGV4dC5nZXQoKSwgR1RLX1NUWUxFX0NMQVNTX0JBQ0tHUk9VTkQpOworICAgIGd0a19yZW5kZXJf
YmFja2dyb3VuZChwcml2LT5zdHlsZUNvbnRleHQuZ2V0KCksIGNyLCAwLCAwLCBndGtfd2lkZ2V0
X2dldF9hbGxvY2F0ZWRfd2lkdGgod2lkZ2V0KSwgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX2hl
aWdodCh3aWRnZXQpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKHByaXYtPnN0eWxl
Q29udGV4dC5nZXQoKSk7CisKKyAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9kaWFsb2dfcGFyZW50X2NsYXNzKS0+ZHJhdyh3aWRnZXQsIGNyKTsKKworICAgIHJldHVy
biBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dNYXAo
R3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX0RJQUxPRyh3aWRnZXQpLT5wcml2Owor
ICAgIGd0a193aWRnZXRfZ3JhYl9kZWZhdWx0KHByaXYtPmRlZmF1bHRCdXR0b24pOworCisgICAg
R1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX3BhcmVudF9jbGFz
cyktPm1hcCh3aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvbkRp
YWxvZ0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9i
amVjdCk7CisKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUqIHByaXYgPSBX
RUJLSVRfQVVUSEVOVElDQVRJT05fRElBTE9HKG9iamVjdCktPnByaXY7CisgICAgcHJpdi0+c3R5
bGVDb250ZXh0ID0gYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKTsKKyAgICBHdGtX
aWRnZXRQYXRoKiBwYXRoID0gZ3RrX3dpZGdldF9wYXRoX25ldygpOworICAgIGd0a193aWRnZXRf
cGF0aF9hcHBlbmRfdHlwZShwYXRoLCBHVEtfVFlQRV9XSU5ET1cpOworICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9wYXRoKHByaXYtPnN0eWxlQ29udGV4dC5nZXQoKSwgcGF0aCk7CisgICAgZ3Rr
X3dpZGdldF9wYXRoX2ZyZWUocGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9kaWFsb2dfY2xhc3NfaW5pdChXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNz
KiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xB
U1Moa2xhc3MpOworICAgIG9iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nQ29uc3RydWN0ZWQ7CisKKyAgICBHdGtXaWRnZXRDbGFzcyogd2lkZ2V0Q2xh
c3MgPSBHVEtfV0lER0VUX0NMQVNTKGtsYXNzKTsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhdyA9IHdl
YmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nRHJhdzsKKyAgICB3aWRnZXRDbGFzcy0+bWFwID0gd2Vi
a2l0QXV0aGVudGljYXRpb25EaWFsb2dNYXA7Cit9CisKK0d0a1dpZGdldCogd2Via2l0QXV0aGVu
dGljYXRpb25EaWFsb2dOZXcoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2RlKQoreworICAgIFdlYktp
dEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9O
X0RJQUxPRyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fRElBTE9HLCBO
VUxMKSk7CisgICAgYXV0aERpYWxvZy0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKKyAgICB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0lu
aXRpYWxpemUoYXV0aERpYWxvZywgbW9kZSk7CisgICAgcmV0dXJuIEdUS19XSURHRVQoYXV0aERp
YWxvZyk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43ZDRkZTJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaApAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0QXV0aGVudGljYXRpb25EaWFsb2dfaAorI2RlZmluZSBXZWJLaXRBdXRoZW50aWNhdGlvbkRp
YWxvZ19oCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCisjaW5j
bHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9E
SUFMT0cgICAgICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZ19nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElBTE9HKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FU
SU9OX0RJQUxPRywgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cpKQorI2RlZmluZSBXRUJLSVRf
SVNfQVVUSEVOVElDQVRJT05fRElBTE9HKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX0RJQUxPRykpCisjZGVm
aW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9ESUFMT0dfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fRElB
TE9HLCBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X0FVVEhFTlRJQ0FUSU9OX0RJQUxPR19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9ESUFMT0cpKQorI2RlZmlu
ZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElBTE9HX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX0RJQUxP
RywgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFs
b2c7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dDbGFzcyAgIFdl
YktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2dQcml2YXRlIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0
ZTsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyB7CisgICAgR3RrRXZlbnRC
b3ggcGFyZW50OworCisgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dQcml2YXRlKiBwcml2
OworfTsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNzIHsKKyAgICBH
dGtFdmVudEJveENsYXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUgd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX2RpYWxvZ19nZXRfdHlwZSgpOworR3RrV2lkZ2V0KiB3ZWJraXRBdXRoZW50aWNhdGlv
bkRpYWxvZ05ldyhXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqLCBDcmVkZW50
aWFsU3RvcmFnZU1vZGUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gV2ViS2l0QXV0aGVu
dGljYXRpb25EaWFsb2dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5jcHAKaW5kZXggMzMyNmQxMi4uMDUwYzcxZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2Fk
ZXJDbGllbnQuY3BwCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2ViS2l0TG9hZGVyQ2xpZW50LmgiCiAKLSNpbmNsdWRlICJXZWJLaXQyR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cuaCIKICNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRl
LmgiCiAjaW5jbHVkZSAiV2ViS2l0VVJJUmVzcG9uc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDIzMjBlMWMuLjY3M2FmMDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtLmgiCiAjaW5j
bHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgogI2luY2x1ZGUgIldlYkRhdGEuaCIKKyNp
bmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgogI2luY2x1ZGUgIldlYktpdEJh
Y2tGb3J3YXJkTGlzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRDb250ZXh0TWVudUNsaWVu
dC5oIgogI2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUuaCIKQEAgLTE2NjYs
MTcgKzE2NjcsMTMgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U3VibWl0Rm9ybVJlcXVlc3QoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgV2ViS2l0Rm9ybVN1Ym1pc3Npb24KIAogdm9pZCB3ZWJraXRXZWJW
aWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCiB7
Ci0gICAgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2c7Ci0gICAgR3RrQXV0
aGVudGljYXRpb25EaWFsb2c6OkNyZWRlbnRpYWxTdG9yYWdlTW9kZSBjcmVkZW50aWFsU3RvcmFn
ZU1vZGU7Ci0KKyAgICBDcmVkZW50aWFsU3RvcmFnZU1vZGUgY3JlZGVudGlhbFN0b3JhZ2VNb2Rl
OwogICAgIGlmICh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5nKHdl
YlZpZXctPnByaXYtPnNldHRpbmdzLmdldCgpKSkKLSAgICAgICAgY3JlZGVudGlhbFN0b3JhZ2VN
b2RlID0gR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OkRpc2FsbG93UGVyc2lzdGVudFN0b3JhZ2U7
CisgICAgICAgIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IERpc2FsbG93UGVyc2lzdGVudFN0b3Jh
Z2U7CiAgICAgZWxzZQotICAgICAgICBjcmVkZW50aWFsU3RvcmFnZU1vZGUgPSBHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZzo6QWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKKyAgICAgICAgY3JlZGVudGlh
bFN0b3JhZ2VNb2RlID0gQWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKIAotICAgIGRpYWxvZyA9IG5l
dyBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2coYXV0aGVudGljYXRpb25DaGFsbGVuZ2Us
IGNyZWRlbnRpYWxTdG9yYWdlTW9kZSk7Ci0gICAgd2Via2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50
aWNhdGlvbkRpYWxvZyhXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgZGlhbG9nKTsKLSAg
ICBkaWFsb2ctPnNob3coKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9u
RGlhbG9nKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpLCB3ZWJraXRBdXRoZW50aWNhdGlv
bkRpYWxvZ05ldyhhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgY3JlZGVudGlhbFN0b3JhZ2VNb2Rl
KSk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0luc2VjdXJlQ29udGVudERldGVjdGVkKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEluc2VjdXJlQ29udGVudEV2ZW50IHR5cGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZS5jcHAKaW5kZXggMjM0NGY4OS4uNzQ4MmFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtMzYsNiArMzYs
NyBAQAogI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIldlYkZ1bGxTY3Jl
ZW5DbGllbnRHdGsuaCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUg
IldlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5o
IgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oIgogI2luY2x1ZGUgIldl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgpAQCAtMTA0LDcgKzEwNSw3IEBAIHN0cnVjdCBfV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBJbnRTaXplIHJlc2l6ZXJTaXplOwogICAgIEdS
ZWZQdHI8QXRrT2JqZWN0PiBhY2Nlc3NpYmxlOwogICAgIGJvb2wgbmVlZHNSZXNpemVPbk1hcDsK
LSAgICBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhlbnRpY2F0aW9uRGlhbG9n
OworICAgIEd0a1dpZGdldCogYXV0aGVudGljYXRpb25EaWFsb2c7CiAgICAgR3RrV2lkZ2V0KiBp
bnNwZWN0b3JWaWV3OwogICAgIHVuc2lnbmVkIGluc3BlY3RvclZpZXdIZWlnaHQ7CiAgICAgR093
blB0cjxHZGtFdmVudD4gY29udGV4dE1lbnVFdmVudDsKQEAgLTI3Miw3ICsyNzMsNyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCiBzdGF0
aWMgYm9vbCB3ZWJraXRXZWJWaWV3Q2hpbGRJc0ludGVybmFsV2lkZ2V0KFdlYktpdFdlYlZpZXdC
YXNlKiB3ZWJWaWV3QmFzZSwgR3RrV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7Ci0gICAgcmV0dXJuIHdpZGdl
dCA9PSBwcml2LT5pbnNwZWN0b3JWaWV3IHx8IChwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZyAm
JiBwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZy0+d2lkZ2V0KCkgPT0gd2lkZ2V0KTsKKyAgICBy
ZXR1cm4gd2lkZ2V0ID09IHByaXYtPmluc3BlY3RvclZpZXcgfHwgd2lkZ2V0ID09IHByaXYtPmF1
dGhlbnRpY2F0aW9uRGlhbG9nOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNv
bnRhaW5lckFkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KiB3aWRnZXQpCkBA
IC0yOTEsMTggKzI5MiwyMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5l
ckFkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KiB3aQogICAgIGd0a193aWRn
ZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7CiB9CiAKLXZvaWQg
d2Via2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNhdGlvbkRpYWxvZyhXZWJLaXRXZWJWaWV3QmFz
ZSogd2ViVmlld0Jhc2UsIFdlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyogZGlhbG9nKQor
dm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSwgR3RrV2lkZ2V0KiBkaWFsb2cpCiB7Ci0gICAgd2ViVmlld0Jh
c2UtPnByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nID0gZGlhbG9nOwotICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIod2ViVmlld0Jhc2UpLCBkaWFsb2ctPndpZGdldCgpKTsKLSAg
ICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSkpOyAvLyBXZSBu
ZWVkIHRvIGRyYXcgdGhlIHNoYWRvdyBvdmVyIHRoZSB3aWRnZXQuCisgICAgV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgcHJpdi0+YXV0aGVu
dGljYXRpb25EaWFsb2cgPSBkaWFsb2c7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUih3ZWJWaWV3QmFzZSksIGRpYWxvZyk7CisgICAgZ3RrX3dpZGdldF9zaG93KGRpYWxvZyk7
CisKKyAgICAvLyBXZSBuZWVkIHRvIGRyYXcgdGhlIHNoYWRvdyBvdmVyIHRoZSB3aWRnZXQuCisg
ICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsKIH0KIAog
dm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNhbmNlbEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUq
IHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKICAgICBpZiAocHJpdi0+YXV0aGVudGljYXRpb25E
aWFsb2cpCi0gICAgICAgIHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nLT5kZXN0cm95KCk7Cisg
ICAgICAgIGd0a193aWRnZXRfZGVzdHJveShwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZyk7CiB9
CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VBZGRXZWJJbnNwZWN0b3IoV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYlZpZXdCYXNlLCBHdGtXaWRnZXQqIGluc3BlY3RvcikKQEAgLTMyMyw3ICszMjgsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lclJlbW92ZShHdGtDb250YWlu
ZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KgogICAgIGlmIChwcml2LT5pbnNwZWN0b3JWaWV3ID09
IHdpZGdldCkgewogICAgICAgICBwcml2LT5pbnNwZWN0b3JWaWV3ID0gMDsKICAgICAgICAgcHJp
di0+aW5zcGVjdG9yVmlld0hlaWdodCA9IDA7Ci0gICAgfSBlbHNlIGlmIChwcml2LT5hdXRoZW50
aWNhdGlvbkRpYWxvZyAmJiBwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZy0+d2lkZ2V0KCkgPT0g
d2lkZ2V0KSB7CisgICAgfSBlbHNlIGlmIChwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZyA9PSB3
aWRnZXQpIHsKICAgICAgICAgcHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cgPSAwOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChwcml2LT5jaGlsZHJlbi5jb250YWlucyh3aWRnZXQpKTsK
QEAgLTM0Nyw3ICszNTIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5l
ckZvcmFsbChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgZ2Jvb2xlYW4gaQogICAgICAgICAoKmNh
bGxiYWNrKShwcml2LT5pbnNwZWN0b3JWaWV3LCBjYWxsYmFja0RhdGEpOwogCiAgICAgaWYgKGlu
Y2x1ZGVJbnRlcm5hbHMgJiYgcHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cpCi0gICAgICAgICgq
Y2FsbGJhY2spKHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nLT53aWRnZXQoKSwgY2FsbGJhY2tE
YXRhKTsKKyAgICAgICAgKCpjYWxsYmFjaykocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2csIGNh
bGxiYWNrRGF0YSk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDaGlsZE1vdmVSZXNpemUo
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXcsIEd0a1dpZGdldCogY2hpbGQsIGNvbnN0IEludFJl
Y3QmIGNoaWxkUmVjdCkKQEAgLTQ3Myw3ICs0NzgsNyBAQCBzdGF0aWMgdm9pZCByZXNpemVXZWJL
aXRXZWJWaWV3QmFzZUZyb21BbGxvY2F0aW9uKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFz
ZQogICAgIC8vIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSBpbnNwZWN0b3IgYWxsb2NhdGlvbi4KICAg
ICBpZiAocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cpIHsKICAgICAgICAgR3RrUmVxdWlzaXRp
b24gbmF0dXJhbFNpemU7Ci0gICAgICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXplKHBy
aXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nLT53aWRnZXQoKSwgMCwgJm5hdHVyYWxTaXplKTsKKyAg
ICAgICAgZ3RrX3dpZGdldF9nZXRfcHJlZmVycmVkX3NpemUocHJpdi0+YXV0aGVudGljYXRpb25E
aWFsb2csIDAsICZuYXR1cmFsU2l6ZSk7CiAKICAgICAgICAgR3RrQWxsb2NhdGlvbiBjaGlsZEFs
bG9jYXRpb24gPSB7CiAgICAgICAgICAgICAodmlld1JlY3Qud2lkdGgoKSAtIG5hdHVyYWxTaXpl
LndpZHRoKSAvIDIsCkBAIC00ODEsNyArNDg2LDcgQEAgc3RhdGljIHZvaWQgcmVzaXplV2ViS2l0
V2ViVmlld0Jhc2VGcm9tQWxsb2NhdGlvbihXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UK
ICAgICAgICAgICAgIG5hdHVyYWxTaXplLndpZHRoLAogICAgICAgICAgICAgbmF0dXJhbFNpemUu
aGVpZ2h0CiAgICAgICAgIH07Ci0gICAgICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShwcml2
LT5hdXRoZW50aWNhdGlvbkRpYWxvZy0+d2lkZ2V0KCksICZjaGlsZEFsbG9jYXRpb24pOworICAg
ICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cs
ICZjaGlsZEFsbG9jYXRpb24pOwogICAgIH0KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkK
QEAgLTgxNywxMyArODIyLDIyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUZv
Y3VzKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtEaXJlY3Rpb25UeXBlIGRpcmVjCiAgICAgV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KS0+
cHJpdjsKICAgICBpZiAocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cpIHsKICAgICAgICAgZ2Jv
b2xlYW4gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShwcml2LT5h
dXRoZW50aWNhdGlvbkRpYWxvZy0+d2lkZ2V0KCksICJmb2N1cyIsIGRpcmVjdGlvbiwgJnJldHVy
blZhbHVlKTsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHByaXYtPmF1dGhlbnRpY2F0
aW9uRGlhbG9nLCAiZm9jdXMiLCBkaXJlY3Rpb24sICZyZXR1cm5WYWx1ZSk7CiAgICAgICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKICAgICB9CiAKICAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3
ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5mb2N1cyh3aWRnZXQsIGRpcmVjdGlv
bik7CiB9CiAKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGVzdHJveShHdGtXaWRnZXQq
IHdpZGdldCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSBXRUJLSVRf
V0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2OworICAgIGlmIChwcml2LT5hdXRoZW50aWNhdGlv
bkRpYWxvZykKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KHByaXYtPmF1dGhlbnRpY2F0aW9u
RGlhbG9nKTsKKworICAgIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfcGFy
ZW50X2NsYXNzKS0+ZGVzdHJveSh3aWRnZXQpOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfYmFzZV9jbGFzc19pbml0KFdlYktpdFdlYlZpZXdCYXNlQ2xhc3MqIHdlYmtpdFdlYlZp
ZXdCYXNlQ2xhc3MpCiB7CiAgICAgR3RrV2lkZ2V0Q2xhc3MqIHdpZGdldENsYXNzID0gR1RLX1dJ
REdFVF9DTEFTUyh3ZWJraXRXZWJWaWV3QmFzZUNsYXNzKTsKQEAgLTg1MCw2ICs4NjQsNyBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9jbGFzc19pbml0KFdlYktpdFdlYlZpZXdC
YXNlQ2xhc3MqIHdlYmtpdFdlYlZpZQogICAgIHdpZGdldENsYXNzLT5kcmFnX2RhdGFfcmVjZWl2
ZWQgPSB3ZWJraXRXZWJWaWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQ7CiAgICAgd2lkZ2V0Q2xhc3Mt
PmdldF9hY2Nlc3NpYmxlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlOwogICAgIHdp
ZGdldENsYXNzLT5wYXJlbnRfc2V0ID0gd2Via2l0V2ViVmlld0Jhc2VQYXJlbnRTZXQ7CisgICAg
d2lkZ2V0Q2xhc3MtPmRlc3Ryb3kgPSB3ZWJraXRXZWJWaWV3QmFzZURlc3Ryb3k7CiAKICAgICBH
T2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdFdlYlZpZXdC
YXNlQ2xhc3MpOwogICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRXZWJWaWV3
QmFzZUNvbnN0cnVjdGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAppbmRleCAzZDg4NjQxLi5lMzBm
ZDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaApAQCAtMjksNyArMjksNiBAQAogI2RlZmluZSBX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVfaAogCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94
eUd0ay5oIgotI2luY2x1ZGUgIldlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgogI2lu
Y2x1ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZS5oIgog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgpAQCAtNjcsNyArNjYsNyBAQCB0eXBlZGVmIHZvaWQg
KCpXZWJLaXRXZWJWaWV3QmFzZURvd25sb2FkUmVxdWVzdEhhbmRsZXIpIChXZWJLaXRXZWJWaWV3
QmFzZSosIFdlYgogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldERvd25sb2FkUmVxdWVzdEhhbmRs
ZXIoV2ViS2l0V2ViVmlld0Jhc2UqLCBXZWJLaXRXZWJWaWV3QmFzZURvd25sb2FkUmVxdWVzdEhh
bmRsZXIpOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUhhbmRsZURvd25sb2FkUmVxdWVzdChXZWJL
aXRXZWJWaWV3QmFzZSosIFdlYktpdDo6RG93bmxvYWRQcm94eSopOwogCi12b2lkIHdlYmtpdFdl
YlZpZXdCYXNlQWRkQXV0aGVudGljYXRpb25EaWFsb2coV2ViS2l0V2ViVmlld0Jhc2UqLCBXZWJL
aXQ6OldlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyopOwordm9pZCB3ZWJraXRXZWJWaWV3
QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdlYktpdFdlYlZpZXdCYXNlKiwgR3RrV2lkZ2V0
KiBhdXRoRGlhbG9nKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDYW5jZWxBdXRoZW50aWNhdGlv
bkRpYWxvZyhXZWJLaXRXZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFkZFdl
Ykluc3BlY3RvcihXZWJLaXRXZWJWaWV3QmFzZSosIEd0a1dpZGdldCogaW5zcGVjdG9yKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL2F1dG90b29scy9WZXJzaW9ucy5tNCBiL1NvdXJjZS9hdXRvdG9v
bHMvVmVyc2lvbnMubTQKaW5kZXggNWY5MGIzMy4uZjFiYTNlZiAxMDA2NDQKLS0tIGEvU291cmNl
L2F1dG90b29scy9WZXJzaW9ucy5tNAorKysgYi9Tb3VyY2UvYXV0b3Rvb2xzL1ZlcnNpb25zLm00
CkBAIC0xNSw3ICsxNSw3IEBAIG00X2RlZmluZShbbGlid2Via2l0Z3RrX3ZlcnNpb25dLCBbMTg6
MToxOF0pCiBtNF9kZWZpbmUoW2xpYmphdmFzY3JpcHRjb3JlZ3RrX3ZlcnNpb25dLCBbMTM6ODox
M10pCiBtNF9kZWZpbmUoW2xpYndlYmtpdDJndGtfdmVyc2lvbl0sIFsyMTowOjIxXSkKIAotbTRf
ZGVmaW5lKFtndGsyX3JlcXVpcmVkX3ZlcnNpb25dLCBbMi4xMF0pCittNF9kZWZpbmUoW2d0azJf
cmVxdWlyZWRfdmVyc2lvbl0sIFsyLjE2XSkKIG00X2RlZmluZShbZ2FpbDJfcmVxdWlyZWRfdmVy
c2lvbl0sIFsxLjhdKQogbTRfZGVmaW5lKFtndGszX3JlcXVpcmVkX3ZlcnNpb25dLCBbMy40LjBd
KQogbTRfZGVmaW5lKFtnYWlsM19yZXF1aXJlZF92ZXJzaW9uXSwgWzMuMF0pCmRpZmYgLS1naXQg
YS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jIGIvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYwpp
bmRleCBhMWQ1MTA5Li43Yjk4MTcyIDEwMDc1NQotLS0gYS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3Rr
ZG9jCisrKyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKQEAgLTEwMCw5ICsxMDAsOSBAQCBk
ZWYgZ2V0X3dlYmtpdDJfb3B0aW9ucygpOgogICAgICAgICAnaWdub3JlZF9maWxlcyc6IGdsb2Iu
Z2xvYihzcmNfcGF0aCgnKlByaXZhdGUuaCcpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbG9iLmdsb2IoaW5qZWN0ZWRfYnVuZGxlX3NyY19wYXRoKCcqUHJpdmF0ZS5oJykpICsgXAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnKkNsaWVudConKSkg
KyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXQy
R3RrQXV0aGVudGljYXRpb25EaWFsb2cuKicpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ1dlYktpdEdlb2xvY2F0aW9uUHJvdmlkZXIuKicpKSArIFwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ1dlYktpdFRleHRD
aGVja2VyLionKSkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19w
YXRoKCdXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy4qJykpICsgXAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxl
LionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdX
ZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2xvYi5nbG9iKGRlcml2ZWRfc291cmNlc19wYXRoKCd3ZWJraXQyZ3RrJywgJ3dlYmtp
dDInLCAnV2ViS2l0TWFyc2hhbC4qJykpICsgXApAQCAtMTM4LDYgKzEzOCw3IEBAIGRlZiBnZXRf
d2Via2l0MV9vcHRpb25zKGd0a192ZXJzaW9uKToKICAgICAgICAgICAgICAgICAgICAnIC1JJyAr
IGNvbW1vbi50b3BfbGV2ZWxfcGF0aCgnU291cmNlJywgJ0phdmFTY3JpcHRDb3JlJywgJ0Zvcndh
cmRpbmdIZWFkZXJzJyksCiAgICAgICAgICdjcm9zc19yZWZlcmVuY2VfZGVwcycgOiBnZXRfZ3Rr
ZG9jX21vZHVsZV9wYXRocyh4cmVmX2RlcHMpLAogICAgICAgICAnaWdub3JlZF9maWxlcyc6IGds
b2IuZ2xvYihzcmNfcGF0aCgnd2Via2l0JywgJypwcml2YXRlLionKSkgKyBcCisgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCd3ZWJraXQnLCAnd2Via2l0YXV0aGVu
dGljYXRpb25kaWFsb2cuKicpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmds
b2Ioc3JjX3BhdGgoJ3dlYmtpdCcsICd3ZWJraXRzcGVsbGNoZWNrZXJlbmNoYW50LionKSkKICAg
ICB9KQogICAgIHJldHVybiBvcHRpb25zCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193134</attachid>
            <date>2013-03-14 09:10:31 -0700</date>
            <delta_ts>2013-04-12 10:08:19 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk-auth-widget.diff</filename>
            <type>text/plain</type>
            <size>71100</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBhMjgyN2NhLi42N2I0OTBh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTMtMDMtMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIFNwbGl0IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIGluIHR3byB3aWRn
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM2
NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNv
dXJjZS9hdXRvdG9vbHMvVmVyc2lvbnMubTQ6IEJ1bXAgR1RLKyAyIHJlcXVpcmVtZW50cyB0byAy
LjE2CisgICAgICAgIGZvciBHdGtPcmllbnRhYmxlLgorCiAyMDEzLTAzLTE0ICBTaW1vbiBIYXVz
bWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdIEltcHJvdmUg
dGhlIGhhbmRsaW5nIG9mIG1vY2sgZ2VvbG9jYXRpb24sIGRldmljZSBvcmllbnRhdGlvbiBhbmQg
bW90aW9uIGNsaWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0NjRmYzRhLi42NmJlY2VlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzcgQEAKKzIwMTMtMDMtMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFNwbGl0IEd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nIGluIHR3byB3aWRnZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDM2NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGUgY3VycmVudCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyBpbXBsZW1l
bnRzIGJvdGggdGhlIGNvbW1vbgorICAgICAgICBsb2dpYyBhbmQgd2lkZ2V0cyB0byBpbXBsZW1l
bnQgYSByZWFsIEd0a0RpYWxvZyBhbmQgYSB3aWRnZXQgdG8gYmUKKyAgICAgICAgZW1iZWRkZWQg
aW4gYW55IGNvbnRhaW5lci4gV2ViS2l0MSB1c2VzIGEgR3RrRGlhbG9nIHdoaWxlIFdlYktpdDIK
KyAgICAgICAgZW1iZWRzIHRoZSBkaWFsb2cgaW4gdGhlIFdlYlZpZXcuIFRoaXMgcGF0Y2ggc3Bs
aXRzIHRoZSBjb2RlIHRvCisgICAgICAgIGxlYXZlIGluIFBsYXRmb3JtIG9ubHkgdGhlIGNvZGUg
dGhhdCBpcyBhY3R1YWxseSBjb21tb24sIGxlYXZpbmcKKyAgICAgICAgdGhlIHdpZGdldCBpbXBs
ZW1lbnRhdGlvbiB0byB0aGUgV2ViS2l0IGxheWVyLCB1c2luZyBhIGRpYWxvZyBpbgorICAgICAg
ICBXZWJLaXQxIGFuZCBlbWJlZGRpbmcgYXV0aCB3aWRnZXQgaW4gdGhlIFdlYlZpZXcgaW4gV2Vi
S2l0Mi4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZCBuZXcgZmlsZXMgdG8g
Y29tcGlsYXRpb24uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRp
b25EaWFsb2cuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvV2ViS2l0QXV0aGVu
dGljYXRpb25XaWRnZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRBdXRoZW50aWNhdGlv
bldpZGdldFByaXZhdGUpOgorICAgICAgICAocGFja1R3b0NvbHVtbkxheW91dEluQm94KToKKyAg
ICAgICAgKGNyZWF0ZUxhYmVsKToKKyAgICAgICAgKGNyZWF0ZUVudHJ5KToKKyAgICAgICAgKHdl
YmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0SW5pdGlhbGl6ZSk6CisgICAgICAgICh3ZWJraXRBdXRo
ZW50aWNhdGlvbldpZGdldEZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlv
bl93aWRnZXRfaW5pdCk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fd2lkZ2V0X2Ns
YXNzX2luaXQpOgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25XaWRnZXROZXcpOgorICAg
ICAgICAod2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFsKToKKyAgICAg
ICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0R2V0Q2hhbGxlbmdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQuaDogQWRkZWQuCisgICAgICAg
IChfV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQpOgorICAgICAgICAoX1dlYktpdEF1dGhlbnRp
Y2F0aW9uV2lkZ2V0Q2xhc3MpOgorCiAyMDEzLTAzLTE0ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRt
YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGtlZXAgZGVwcmVjYXRl
ZCBmdW5jdGlvbiBzdHVicyBpbiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQppbmRleCAzZDRhMDcyLi40YjkxYTY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTYyMjksOCArNjIyOSw2IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
QXV0aGVudGljYXRpb25EaWFsb2cuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a1BsdWdpbldpZGdldC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQ
bHVnaW5XaWRnZXQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVu
dS5jcHAgXApAQCAtNjI2Myw2ICs2MjYxLDggQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzRhMmVhYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgSWdhbGlhIFMu
TC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
LmgiCi0KLSNpbmNsdWRlICJDcmVkZW50aWFsQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiR3Rr
VmVyc2lvbmluZy5oIgotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jaW5jbHVkZSA8Z3Rr
L2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgY29uc3QgaW50IGdMYXlvdXRDb2x1bW5TcGFjaW5nID0gMTI7Ci1z
dGF0aWMgY29uc3QgaW50IGdMYXlvdXRSb3dTcGFjaW5nID0gNjsKLXN0YXRpYyBjb25zdCBpbnQg
Z0J1dHRvblNwYWNpbmcgPSA1OwotCi1HdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVu
dGljYXRpb25EaWFsb2coY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwg
Q3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCi0gICAgOiBtX2RpYWxvZygwKQotICAgICwgbV9s
b2dpbkVudHJ5KDApCi0gICAgLCBtX3Bhc3N3b3JkRW50cnkoMCkKLSAgICAsIG1fcmVtZW1iZXJD
aGVja0J1dHRvbigwKQotICAgICwgbV9jaGFsbGVuZ2UoY2hhbGxlbmdlKQotICAgICwgbV9jcmVk
ZW50aWFsU3RvcmFnZU1vZGUobW9kZSkKLXsKLX0KLQotR3RrQXV0aGVudGljYXRpb25EaWFsb2c6
Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRvdyogcGFyZW50V2luZG93LCBjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUg
bW9kZSkKLSAgICA6IG1fZGlhbG9nKGd0a19kaWFsb2dfbmV3KCkpCi0gICAgLCBtX2xvZ2luRW50
cnkoMCkKLSAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQotICAgICwgbV9yZW1lbWJlckNoZWNrQnV0
dG9uKDApCi0gICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCi0gICAgLCBtX2NyZWRlbnRpYWxT
dG9yYWdlTW9kZShtb2RlKQotewotICAgIEd0a1dpZGdldCogY29udGVudEFyZWEgPSBndGtfZGlh
bG9nX2dldF9jb250ZW50X2FyZWEoR1RLX0RJQUxPRyhtX2RpYWxvZykpOwotICAgIGd0a19jb250
YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKEdUS19ESUFMT0cobV9kaWFsb2cp
KSwgNSk7Ci0gICAgZ3RrX2JveF9zZXRfc3BhY2luZyhHVEtfQk9YKGNvbnRlbnRBcmVhKSwgMik7
IC8qIDIgKiA1ICsgMiA9IDEyICovCi0KLSAgICBHdGtXaW5kb3cqIHdpbmRvdyA9IEdUS19XSU5E
T1cobV9kaWFsb2cpOwotICAgIGd0a193aW5kb3dfc2V0X3Jlc2l6YWJsZSh3aW5kb3csIEZBTFNF
KTsKLSAgICBndGtfd2luZG93X3NldF90aXRsZSh3aW5kb3csICIiKTsKLSAgICBndGtfd2luZG93
X3NldF9pY29uX25hbWUod2luZG93LCBHVEtfU1RPQ0tfRElBTE9HX0FVVEhFTlRJQ0FUSU9OKTsK
LQotICAgIGlmIChwYXJlbnRXaW5kb3cpCi0gICAgICAgIGd0a193aW5kb3dfc2V0X3RyYW5zaWVu
dF9mb3Iod2luZG93LCBwYXJlbnRXaW5kb3cpOwotCi0gICAgY3JlYXRlQ29udGVudHNJbkNvbnRh
aW5lcihjb250ZW50QXJlYSk7Ci19Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotc3RhdGlj
IHZvaWQgcGFja1R3b0NvbHVtbkxheW91dEluQm94KEd0a1dpZGdldCogYm94LCAuLi4pCi17Ci0g
ICAgdmFfbGlzdCBhcmd1bWVudExpc3Q7Ci0gICAgdmFfc3RhcnQoYXJndW1lbnRMaXN0LCBib3gp
OwotCi0gICAgR3RrV2lkZ2V0KiB0YWJsZSA9IGd0a190YWJsZV9uZXcoMSwgMiwgRkFMU0UpOwot
ICAgIGd0a190YWJsZV9zZXRfY29sX3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlvdXRD
b2x1bW5TcGFjaW5nKTsKLSAgICBndGtfdGFibGVfc2V0X3Jvd19zcGFjaW5ncyhHVEtfVEFCTEUo
dGFibGUpLCBnTGF5b3V0Um93U3BhY2luZyk7Ci0KLSAgICBHdGtXaWRnZXQqIGZpcnN0Q29sdW1u
V2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7Ci0gICAgaW50IHJvd051
bWJlciA9IDA7Ci0gICAgd2hpbGUgKGZpcnN0Q29sdW1uV2lkZ2V0KSB7Ci0gICAgICAgIGlmIChy
b3dOdW1iZXIpCi0gICAgICAgICAgICBndGtfdGFibGVfcmVzaXplKEdUS19UQUJMRSh0YWJsZSks
IHJvd051bWJlciArIDEsIDIpOwotCi0gICAgICAgIEd0a1dpZGdldCogc2Vjb25kQ29sdW1uV2lk
Z2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7Ci0gICAgICAgIEd0a0F0dGFj
aE9wdGlvbnMgYXR0YWNoT3B0aW9ucyA9IHN0YXRpY19jYXN0PEd0a0F0dGFjaE9wdGlvbnM+KEdU
S19FWFBBTkQgfCBHVEtfRklMTCk7Ci0gICAgICAgIGd0a190YWJsZV9hdHRhY2goR1RLX1RBQkxF
KHRhYmxlKSwgZmlyc3RDb2x1bW5XaWRnZXQsCi0gICAgICAgICAgICAwLCBzZWNvbmRDb2x1bW5X
aWRnZXQgPyAxIDogMiwKLSAgICAgICAgICAgIHJvd051bWJlciwgcm93TnVtYmVyICsgMSwKLSAg
ICAgICAgICAgIGF0dGFjaE9wdGlvbnMsIGF0dGFjaE9wdGlvbnMsCi0gICAgICAgICAgICAwLCAw
KTsKLQotICAgICAgICBpZiAoc2Vjb25kQ29sdW1uV2lkZ2V0KQotICAgICAgICAgICAgZ3RrX3Rh
YmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFCTEUodGFibGUpLCBzZWNvbmRDb2x1bW5XaWRnZXQs
IDEsIDIsIHJvd051bWJlciwgcm93TnVtYmVyICsgMSk7Ci0KLSAgICAgICAgZmlyc3RDb2x1bW5X
aWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAgICAgICAgcm93TnVt
YmVyKys7Ci0gICAgfQotCi0gICAgdmFfZW5kKGFyZ3VtZW50TGlzdCk7Ci0KLSAgICBndGtfYm94
X3BhY2tfc3RhcnQoR1RLX0JPWChib3gpLCB0YWJsZSwgRkFMU0UsIEZBTFNFLCAwKTsKLX0KLSNl
bHNlCi1zdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gs
IC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKLSAgICB2YV9zdGFydChhcmd1bWVu
dExpc3QsIGJveCk7Ci0KLSAgICBHdGtXaWRnZXQqIGdyaWQgPSBndGtfZ3JpZF9uZXcoKTsKLSAg
ICBndGtfZ3JpZF9zZXRfY29sdW1uX3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCksIGdMYXlvdXRSb3dT
cGFjaW5nKTsKLSAgICBndGtfZ3JpZF9zZXRfcm93X3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCksIGdM
YXlvdXRSb3dTcGFjaW5nKTsKLSAgICBndGtfZ3JpZF9zZXRfY29sdW1uX2hvbW9nZW5lb3VzKEdU
S19HUklEKGdyaWQpLCBUUlVFKTsKLQotICAgIEd0a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQg
PSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAgICBpbnQgcm93TnVtYmVyID0g
MDsKLSAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKLSAgICAgICAgR3RrV2lkZ2V0KiBz
ZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAg
ICAgICAgaW50IGZpcnN0V2lkZ2V0V2lkdGggPSBzZWNvbmRDb2x1bW5XaWRnZXQgPyAxIDogMjsK
LQotICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIGZpcnN0Q29sdW1uV2lk
Z2V0LCAwLCByb3dOdW1iZXIsIGZpcnN0V2lkZ2V0V2lkdGgsIDEpOwotICAgICAgICBndGtfd2lk
Z2V0X3NldF9oZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBUUlVFKTsKLSAgICAgICAgZ3RrX3dp
ZGdldF9zZXRfdmV4cGFuZChmaXJzdENvbHVtbldpZGdldCwgVFJVRSk7Ci0KLSAgICAgICAgaWYg
KHNlY29uZENvbHVtbldpZGdldCkgewotICAgICAgICAgICAgZ3RrX2dyaWRfYXR0YWNoKEdUS19H
UklEKGdyaWQpLCBzZWNvbmRDb2x1bW5XaWRnZXQsIDEsIHJvd051bWJlciwgMSwgMSk7Ci0gICAg
ICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKHNlY29uZENvbHVtbldpZGdldCwgVFJVRSk7
Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHNlY29uZENvbHVtbldpZGdldCwg
VFJVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhh
cmd1bWVudExpc3QsIEd0a1dpZGdldCopOwotICAgICAgICByb3dOdW1iZXIrKzsKLSAgICB9Ci0K
LSAgICB2YV9lbmQoYXJndW1lbnRMaXN0KTsKLQotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtf
Qk9YKGJveCksIGdyaWQsIEZBTFNFLCBGQUxTRSwgMCk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIEd0
a1dpZGdldCogY3JlYXRlRGlhbG9nTGFiZWwoY29uc3QgY2hhciogbGFiZWxTdHJpbmcsIGludCBo
b3Jpem9udGFsUGFkZGluZyA9IDApCi17Ci0gICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJl
bF9uZXcobGFiZWxTdHJpbmcpOwotICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0Mo
bGFiZWwpLCAwLCAwLjUpOwotICAgIGlmIChob3Jpem9udGFsUGFkZGluZykKLSAgICAgICAgZ3Rr
X21pc2Nfc2V0X3BhZGRpbmcoR1RLX01JU0MobGFiZWwpLCAwLCBob3Jpem9udGFsUGFkZGluZyk7
Ci0gICAgcmV0dXJuIGxhYmVsOwotfQotCi1zdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVEaWFsb2dF
bnRyeShHdGtXaWRnZXQqKiBtZW1iZXIpCi17Ci0gICAgKm1lbWJlciA9IGd0a19lbnRyeV9uZXco
KTsKLSAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19FTlRSWSgqbWVtYmVy
KSwgVFJVRSk7Ci0gICAgcmV0dXJuICptZW1iZXI7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRp
b25EaWFsb2c6OmNyZWF0ZUNvbnRlbnRzSW5Db250YWluZXIoR3RrV2lkZ2V0KiBjb250YWluZXIp
Ci17Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHdGtXaWRnZXQqIGhCb3ggPSBndGtf
aGJveF9uZXcoRkFMU0UsIGdMYXlvdXRDb2x1bW5TcGFjaW5nKTsKLSNlbHNlCi0gICAgR3RrV2lk
Z2V0KiBoQm94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIGdMYXlv
dXRDb2x1bW5TcGFjaW5nKTsKLSNlbmRpZgotICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93
aWR0aChHVEtfQ09OVEFJTkVSKGhCb3gpLCBnQnV0dG9uU3BhY2luZyk7Ci0gICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250YWluZXIpLCBoQm94KTsKLQotICAgIEd0a1dpZGdl
dCogaWNvbiA9IGd0a19pbWFnZV9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfRElBTE9HX0FVVEhF
TlRJQ0FUSU9OLCBHVEtfSUNPTl9TSVpFX0RJQUxPRyk7Ci0gICAgZ3RrX21pc2Nfc2V0X2FsaWdu
bWVudChHVEtfTUlTQyhpY29uKSwgMC41LCAwKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RL
X0JPWChoQm94KSwgaWNvbiwgRkFMU0UsIEZBTFNFLCAwKTsKLQotICAgIEdPd25QdHI8Y2hhcj4g
cHJvbXB0KGdfc3RyZHVwX3ByaW50ZigKLSAgICAgICAgXygiVGhlIHNpdGUgJXM6JWkgcmVxdWVz
dHMgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQiKSwKLSAgICAgICAgbV9jaGFsbGVuZ2UucHJvdGVj
dGlvblNwYWNlKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCksCi0gICAgICAgIG1fY2hhbGxlbmdlLnBy
b3RlY3Rpb25TcGFjZSgpLnBvcnQoKSkpOwotCi0gICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uID0g
Z3RrX2NoZWNrX2J1dHRvbl9uZXdfd2l0aF9tbmVtb25pYyhfKCJfUmVtZW1iZXIgcGFzc3dvcmQi
KSk7Ci0gICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2No
aWxkKEdUS19CSU4obV9yZW1lbWJlckNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKLSAgICBndGtfd2lk
Z2V0X3NldF9ub19zaG93X2FsbChtX3JlbWVtYmVyQ2hlY2tCdXR0b24sIG1fY3JlZGVudGlhbFN0
b3JhZ2VNb2RlID09IERpc2FsbG93UGVyc2lzdGVudFN0b3JhZ2UpOwotCi0KLSAgICAvLyBXZSBh
cmUgYWRkaW5nIHRoZSBidXR0b24gYm94IGhlcmUgbWFudWFsbHkgaW5zdGVhZCBvZiB1c2luZyB0
aGUgcmVhZHktbWFkZSBHdGtEaWFsb2cgYnV0dG9ucy4KLSAgICAvLyBUaGlzIGlzIHNvIHRoYXQg
d2UgY2FuIHNoYXJlIHRoZSBjb2RlIHdpdGggaW1wbGVtZW50YXRpb25zIHRoYXQgZG8gbm90IHVz
ZSBHdGtEaWFsb2cuCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHdGtXaWRnZXQqIGJ1
dHRvbkJveCA9IGd0a19oYnV0dG9uX2JveF9uZXcoKTsKLSNlbHNlCi0gICAgR3RrV2lkZ2V0KiBi
dXR0b25Cb3ggPSBndGtfYnV0dG9uX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwp
OwotI2VuZGlmCi0gICAgZ3RrX2JveF9zZXRfc3BhY2luZyhHVEtfQk9YKGJ1dHRvbkJveCksIGdC
dXR0b25TcGFjaW5nKTsKLSAgICBndGtfYnV0dG9uX2JveF9zZXRfbGF5b3V0KEdUS19CVVRUT05f
Qk9YKGJ1dHRvbkJveCksIEdUS19CVVRUT05CT1hfRU5EKTsKLQotICAgIG1fb2theUJ1dHRvbiA9
IGd0a19idXR0b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX09LKTsKLSAgICBtX2NhbmNlbEJ1
dHRvbiA9IGd0a19idXR0b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX0NBTkNFTCk7Ci0gICAg
Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYnV0dG9uQm94KSwgbV9jYW5jZWxCdXR0b24sIEZB
TFNFLCBUUlVFLCAwKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChidXR0b25Cb3gp
LCBtX29rYXlCdXR0b24sIEZBTFNFLCBUUlVFLCAwKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1f
b2theUJ1dHRvbiwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGJ1dHRvbkNsaWNrZWRDYWxsYmFjayks
IHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jYW5jZWxCdXR0b24sICJjbGlja2VkIiwg
R19DQUxMQkFDSyhidXR0b25DbGlja2VkQ2FsbGJhY2spLCB0aGlzKTsKLQotICAgIFN0cmluZyBy
ZWFsbSA9IG1fY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnJlYWxtKCk7Ci0gICAgaWYgKCFy
ZWFsbS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGFja1R3b0NvbHVtbkxheW91dEluQm94KGhCb3gs
Ci0gICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChwcm9tcHQuZ2V0KCksIGdMYXlvdXRSb3dT
cGFjaW5nKSwgTlVMTCwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlNlcnZlciBt
ZXNzYWdlOiIpKSwgY3JlYXRlRGlhbG9nTGFiZWwocmVhbG0udXRmOCgpLmRhdGEoKSksCi0gICAg
ICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJVc2VybmFtZToiKSksIGNyZWF0ZURpYWxvZ0Vu
dHJ5KCZtX2xvZ2luRW50cnkpLAotICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiUGFz
c3dvcmQ6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9wYXNzd29yZEVudHJ5KSwKLSAgICAgICAg
ICAgIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwKLSAgICAgICAgICAgIGJ1dHRvbkJveCwg
TlVMTCwgTlVMTCk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBwYWNrVHdvQ29sdW1uTGF5b3V0
SW5Cb3goaEJveCwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKHByb21wdC5nZXQoKSwg
Z0xheW91dFJvd1NwYWNpbmcpLCBOVUxMLAotICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwo
XygiVXNlcm5hbWU6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9sb2dpbkVudHJ5KSwKLSAgICAg
ICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlBhc3N3b3JkOiIpKSwgY3JlYXRlRGlhbG9nRW50
cnkoJm1fcGFzc3dvcmRFbnRyeSksCi0gICAgICAgICAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24s
IE5VTEwsIE5VTEwsCi0gICAgICAgICAgICBidXR0b25Cb3gsIE5VTEwsIE5VTEwpOwotICAgIH0K
LQotICAgIGd0a19lbnRyeV9zZXRfdmlzaWJpbGl0eShHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5
KSwgRkFMU0UpOwotICAgIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVu
dFN0b3JhZ2UgPSBtX2NoYWxsZW5nZS5wcm9wb3NlZENyZWRlbnRpYWwoKTsKLSAgICBpZiAoIWNy
ZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGd0a19l
bnRyeV9zZXRfdGV4dChHVEtfRU5UUlkobV9sb2dpbkVudHJ5KSwgY3JlZGVudGlhbEZyb21QZXJz
aXN0ZW50U3RvcmFnZS51c2VyKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGd0a19lbnRyeV9z
ZXRfdGV4dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgY3JlZGVudGlhbEZyb21QZXJzaXN0
ZW50U3RvcmFnZS5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBndGtfdG9nZ2xl
X2J1dHRvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKG1fcmVtZW1iZXJDaGVja0J1dHRv
biksIFRSVUUpOwotICAgIH0KLX0KLQotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2hv
dygpCi17Ci0gICAgZ3RrX3dpZGdldF9zZXRfY2FuX2RlZmF1bHQobV9va2F5QnV0dG9uLCBUUlVF
KTsKLSAgICBndGtfd2lkZ2V0X2dyYWJfZGVmYXVsdChtX29rYXlCdXR0b24pOwotICAgIGd0a193
aWRnZXRfZ3JhYl9mb2N1cyhtX2xvZ2luRW50cnkpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93X2Fs
bChtX2RpYWxvZyk7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmRlc3Ryb3ko
KQotewotICAgIGd0a193aWRnZXRfZGVzdHJveShtX2RpYWxvZyk7Ci0gICAgZGVsZXRlIHRoaXM7
Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0ZShjb25zdCBD
cmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAgIGlmIChjcmVkZW50aWFsLmlzRW1wdHkoKSkK
LSAgICAgICAgbV9jaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRSZXF1
ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKG1fY2hhbGxlbmdlKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkQ3JlZGVu
dGlhbChtX2NoYWxsZW5nZSwgY3JlZGVudGlhbCk7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRp
b25EaWFsb2c6OmJ1dHRvbkNsaWNrZWRDYWxsYmFjayhHdGtXaWRnZXQqIGJ1dHRvbiwgR3RrQXV0
aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZykKLXsKLSAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWw7
Ci0gICAgaWYgKGJ1dHRvbiA9PSBkaWFsb2ctPm1fb2theUJ1dHRvbikgewotICAgICAgICBjb25z
dCBjaGFyICp1c2VybmFtZSA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZGlhbG9nLT5t
X2xvZ2luRW50cnkpKTsKLSAgICAgICAgY29uc3QgY2hhciAqcGFzc3dvcmQgPSBndGtfZW50cnlf
Z2V0X3RleHQoR1RLX0VOVFJZKGRpYWxvZy0+bV9wYXNzd29yZEVudHJ5KSk7Ci0gICAgICAgIGJv
b2wgcmVtZW1iZXJQYXNzd29yZCA9IGd0a190b2dnbGVfYnV0dG9uX2dldF9hY3RpdmUoR1RLX1RP
R0dMRV9CVVRUT04oZGlhbG9nLT5tX3JlbWVtYmVyQ2hlY2tCdXR0b24pKTsKLSAgICAgICAgQ3Jl
ZGVudGlhbFBlcnNpc3RlbmNlIHBlcnNpc3RlbmNlOwotCi0gICAgICAgIGlmIChyZW1lbWJlclBh
c3N3b3JkICYmIGRpYWxvZy0+bV9jcmVkZW50aWFsU3RvcmFnZU1vZGUgPT0gQWxsb3dQZXJzaXN0
ZW50U3RvcmFnZSkKLSAgICAgICAgICAgIHBlcnNpc3RlbmNlID0gQ3JlZGVudGlhbFBlcnNpc3Rl
bmNlUGVybWFuZW50OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwZXJzaXN0ZW5jZSA9IENy
ZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb247Ci0KLSAgICAgICAgY3JlZGVudGlhbCA9IENy
ZWRlbnRpYWwoU3RyaW5nOjpmcm9tVVRGOCh1c2VybmFtZSksIFN0cmluZzo6ZnJvbVVURjgocGFz
c3dvcmQpLCBwZXJzaXN0ZW5jZSk7Ci0gICAgfQotCi0gICAgZGlhbG9nLT5hdXRoZW50aWNhdGUo
Y3JlZGVudGlhbCk7Ci0gICAgZGlhbG9nLT5kZXN0cm95KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3N2M4MWEu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR3RrQXV0aGVudGljYXRpb25E
aWFsb2dfaAotI2RlZmluZSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCi0KLSNpbmNsdWRlICJB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNs
dWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3RrQXV0aGVudGljYXRpb25EaWFsb2cpOwotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgZW51bSBDcmVkZW50aWFs
U3RvcmFnZU1vZGUgewotICAgICAgICBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlLCAvLyBUaGUgdXNl
ciBpcyBhc2tlZCB3aGV0aGVyIHRvIHN0b3JlIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24uCi0gICAg
ICAgIERpc2FsbG93UGVyc2lzdGVudFN0b3JhZ2UgLy8gQ3JlZGVudGlhbCBpbmZvcm1hdGlvbiBp
cyBvbmx5IGtlcHQgaW4gdGhlIHNlc3Npb24uCi0gICAgfTsKLQotICAgIEd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3JlZGVudGlhbFN0b3Jh
Z2VNb2RlKTsKLSAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqLCBjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSk7Ci0gICAgdmly
dHVhbCB+R3RrQXV0aGVudGljYXRpb25EaWFsb2coKSB7IH0KLSAgICB2b2lkIHNob3coKTsKLSAg
ICB2b2lkIGRlc3Ryb3koKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgY3JlYXRlQ29udGVudHNJ
bkNvbnRhaW5lcihHdGtXaWRnZXQqIGNvbnRhaW5lcik7Ci0gICAgdmlydHVhbCB2b2lkIGF1dGhl
bnRpY2F0ZShjb25zdCBDcmVkZW50aWFsJik7Ci0gICAgR3RrV2lkZ2V0KiBtX2RpYWxvZzsKLSAg
ICBHdGtXaWRnZXQqIG1fbG9naW5FbnRyeTsKLSAgICBHdGtXaWRnZXQqIG1fcGFzc3dvcmRFbnRy
eTsKLSAgICBHdGtXaWRnZXQqIG1fcmVtZW1iZXJDaGVja0J1dHRvbjsKLSAgICBHdGtXaWRnZXQq
IG1fb2theUJ1dHRvbjsKLSAgICBHdGtXaWRnZXQqIG1fY2FuY2VsQnV0dG9uOwotCi1wcml2YXRl
OgotICAgIHN0YXRpYyB2b2lkIGJ1dHRvbkNsaWNrZWRDYWxsYmFjayhHdGtXaWRnZXQqLCBHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZyopOwotICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIG1fY2hh
bGxlbmdlOwotICAgIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtX2NyZWRlbnRpYWxTdG9yYWdlTW9k
ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9X
ZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmU0N2Q1OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQuY3BwCkBAIC0wLDAgKzEsMjQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC5oIgorCisjaW5jbHVk
ZSAiQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIK
KyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0UHJpdmF0ZSB7Cisg
ICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlOworICAgIENyZWRlbnRpYWxTdG9y
YWdlTW9kZSBjcmVkZW50aWFsU3RvcmFnZU1vZGU7CisKKyAgICBHdGtXaWRnZXQqIGxvZ2luRW50
cnk7CisgICAgR3RrV2lkZ2V0KiBwYXNzd29yZEVudHJ5OworICAgIEd0a1dpZGdldCogcmVtZW1i
ZXJDaGVja0J1dHRvbjsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0QXV0aGVudGljYXRpb25X
aWRnZXQsIHdlYmtpdF9hdXRoZW50aWNhdGlvbl93aWRnZXQsIEdUS19UWVBFX0JPWCkKKworc3Rh
dGljIGNvbnN0IGludCBnTGF5b3V0Q29sdW1uU3BhY2luZyA9IDEyOworc3RhdGljIGNvbnN0IGlu
dCBnTGF5b3V0Um93U3BhY2luZyA9IDY7CitzdGF0aWMgY29uc3QgaW50IGdCdXR0b25TcGFjaW5n
ID0gNTsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMgdm9pZCBwYWNrVHdvQ29s
dW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3Vt
ZW50TGlzdDsKKyAgICB2YV9zdGFydChhcmd1bWVudExpc3QsIGJveCk7CisKKyAgICBHdGtXaWRn
ZXQqIHRhYmxlID0gZ3RrX3RhYmxlX25ldygxLCAyLCBGQUxTRSk7CisgICAgZ3RrX3RhYmxlX3Nl
dF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgZ0xheW91dENvbHVtblNwYWNpbmcpOwor
ICAgIGd0a190YWJsZV9zZXRfcm93X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlvdXRS
b3dTcGFjaW5nKTsKKworICAgIEd0a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmco
YXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICBpbnQgcm93TnVtYmVyID0gMDsKKyAgICB3
aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKKyAgICAgICAgaWYgKHJvd051bWJlcikKKyAgICAg
ICAgICAgIGd0a190YWJsZV9yZXNpemUoR1RLX1RBQkxFKHRhYmxlKSwgcm93TnVtYmVyICsgMSwg
Mik7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJn
dW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICAgICAgR3RrQXR0YWNoT3B0aW9ucyBhdHRhY2hP
cHRpb25zID0gc3RhdGljX2Nhc3Q8R3RrQXR0YWNoT3B0aW9ucz4oR1RLX0VYUEFORCB8IEdUS19G
SUxMKTsKKyAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaCgKKyAgICAgICAgICAgIEdUS19UQUJMRSh0
YWJsZSksIGZpcnN0Q29sdW1uV2lkZ2V0LAorICAgICAgICAgICAgMCwgc2Vjb25kQ29sdW1uV2lk
Z2V0ID8gMSA6IDIsCisgICAgICAgICAgICByb3dOdW1iZXIsIHJvd051bWJlciArIDEsCisgICAg
ICAgICAgICBhdHRhY2hPcHRpb25zLCBhdHRhY2hPcHRpb25zLAorICAgICAgICAgICAgMCwgMCk7
CisgICAgICAgIGd0a193aWRnZXRfc2hvdyhmaXJzdENvbHVtbldpZGdldCk7CisKKyAgICAgICAg
aWYgKHNlY29uZENvbHVtbldpZGdldCkgeworICAgICAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9k
ZWZhdWx0cyhHVEtfVEFCTEUodGFibGUpLCBzZWNvbmRDb2x1bW5XaWRnZXQsIDEsIDIsIHJvd051
bWJlciwgcm93TnVtYmVyICsgMSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3coc2Vjb25k
Q29sdW1uV2lkZ2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0Q29sdW1uV2lkZ2V0ID0g
dmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7CisgICAgICAgIHJvd051bWJlcisrOwor
ICAgIH0KKworICAgIHZhX2VuZChhcmd1bWVudExpc3QpOworCisgICAgZ3RrX2JveF9wYWNrX3N0
YXJ0KEdUS19CT1goYm94KSwgdGFibGUsIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX3dpZGdl
dF9zaG93KHRhYmxlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0
SW5Cb3goR3RrV2lkZ2V0KiBib3gsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsK
KyAgICB2YV9zdGFydChhcmd1bWVudExpc3QsIGJveCk7CisKKyAgICBHdGtXaWRnZXQqIGdyaWQg
PSBndGtfZ3JpZF9uZXcoKTsKKyAgICBndGtfZ3JpZF9zZXRfY29sdW1uX3NwYWNpbmcoR1RLX0dS
SUQoZ3JpZCksIGdMYXlvdXRSb3dTcGFjaW5nKTsKKyAgICBndGtfZ3JpZF9zZXRfcm93X3NwYWNp
bmcoR1RLX0dSSUQoZ3JpZCksIGdMYXlvdXRSb3dTcGFjaW5nKTsKKyAgICBndGtfZ3JpZF9zZXRf
Y29sdW1uX2hvbW9nZW5lb3VzKEdUS19HUklEKGdyaWQpLCBUUlVFKTsKKworICAgIEd0a1dpZGdl
dCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsK
KyAgICBpbnQgcm93TnVtYmVyID0gMDsKKyAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsK
KyAgICAgICAgR3RrV2lkZ2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRM
aXN0LCBHdGtXaWRnZXQqKTsKKyAgICAgICAgaW50IGZpcnN0V2lkZ2V0V2lkdGggPSBzZWNvbmRD
b2x1bW5XaWRnZXQgPyAxIDogMjsKKworICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQo
Z3JpZCksIGZpcnN0Q29sdW1uV2lkZ2V0LCAwLCByb3dOdW1iZXIsIGZpcnN0V2lkZ2V0V2lkdGgs
IDEpOworICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBU
UlVFKTsKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChmaXJzdENvbHVtbldpZGdldCwg
VFJVRSk7CisgICAgICAgIGd0a193aWRnZXRfc2hvdyhmaXJzdENvbHVtbldpZGdldCk7CisKKyAg
ICAgICAgaWYgKHNlY29uZENvbHVtbldpZGdldCkgeworICAgICAgICAgICAgZ3RrX2dyaWRfYXR0
YWNoKEdUS19HUklEKGdyaWQpLCBzZWNvbmRDb2x1bW5XaWRnZXQsIDEsIHJvd051bWJlciwgMSwg
MSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKHNlY29uZENvbHVtbldpZGdl
dCwgVFJVRSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHNlY29uZENvbHVt
bldpZGdldCwgVFJVRSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3coc2Vjb25kQ29sdW1u
V2lkZ2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0Q29sdW1uV2lkZ2V0ID0gdmFfYXJn
KGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7CisgICAgICAgIHJvd051bWJlcisrOworICAgIH0K
KworICAgIHZhX2VuZChhcmd1bWVudExpc3QpOworCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1goYm94KSwgZ3JpZCwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3co
Z3JpZCk7Cit9CisjZW5kaWYKKworc3RhdGljIEd0a1dpZGdldCogY3JlYXRlTGFiZWwoY29uc3Qg
Y2hhciogbGFiZWxTdHJpbmcsIGludCBob3Jpem9udGFsUGFkZGluZyA9IDApCit7CisgICAgR3Rr
V2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcobGFiZWxTdHJpbmcpOworICAgIGd0a19taXNj
X3NldF9hbGlnbm1lbnQoR1RLX01JU0MobGFiZWwpLCAwLCAwLjUpOworICAgIGlmIChob3Jpem9u
dGFsUGFkZGluZykKKyAgICAgICAgZ3RrX21pc2Nfc2V0X3BhZGRpbmcoR1RLX01JU0MobGFiZWwp
LCAwLCBob3Jpem9udGFsUGFkZGluZyk7CisgICAgcmV0dXJuIGxhYmVsOworfQorCitzdGF0aWMg
R3RrV2lkZ2V0KiBjcmVhdGVFbnRyeShHdGtXaWRnZXQqKiBtZW1iZXIpCit7CisgICAgKm1lbWJl
ciA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0
KEdUS19FTlRSWSgqbWVtYmVyKSwgVFJVRSk7CisgICAgcmV0dXJuICptZW1iZXI7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0SW5pdGlhbGl6ZShXZWJLaXRBdXRo
ZW50aWNhdGlvbldpZGdldCogYXV0aFdpZGdldCkKK3sKKyAgICBndGtfb3JpZW50YWJsZV9zZXRf
b3JpZW50YXRpb24oR1RLX09SSUVOVEFCTEUoYXV0aFdpZGdldCksIEdUS19PUklFTlRBVElPTl9I
T1JJWk9OVEFMKTsKKyAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goYXV0aFdpZGdldCks
IGdMYXlvdXRDb2x1bW5TcGFjaW5nKTsKKyAgICBndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lk
dGgoR1RLX0NPTlRBSU5FUihhdXRoV2lkZ2V0KSwgZ0J1dHRvblNwYWNpbmcpOworCisgICAgR3Rr
V2lkZ2V0KiBpY29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0df
QVVUSEVOVElDQVRJT04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKKyAgICBndGtfbWlzY19zZXRf
YWxpZ25tZW50KEdUS19NSVNDKGljb24pLCAwLjUsIDAuMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0
YXJ0KEdUS19CT1goYXV0aFdpZGdldCksIGljb24sIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3Rr
X3dpZGdldF9zaG93KGljb24pOworCisgICAgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRQcml2
YXRlKiBwcml2ID0gYXV0aFdpZGdldC0+cHJpdjsKKyAgICBHT3duUHRyPGNoYXI+IHByb21wdChn
X3N0cmR1cF9wcmludGYoCisgICAgICAgIF8oIlRoZSBzaXRlICVzOiVpIHJlcXVlc3RzIGEgdXNl
cm5hbWUgYW5kIHBhc3N3b3JkIiksCisgICAgICAgIHByaXYtPmNoYWxsZW5nZS5wcm90ZWN0aW9u
U3BhY2UoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgcHJpdi0+Y2hhbGxlbmdlLnBy
b3RlY3Rpb25TcGFjZSgpLnBvcnQoKSkpOworCisgICAgcHJpdi0+cmVtZW1iZXJDaGVja0J1dHRv
biA9IGd0a19jaGVja19idXR0b25fbmV3X3dpdGhfbW5lbW9uaWMoXygiX1JlbWVtYmVyIHBhc3N3
b3JkIikpOworICAgIGd0a19sYWJlbF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChndGtfYmluX2dl
dF9jaGlsZChHVEtfQklOKHByaXYtPnJlbWVtYmVyQ2hlY2tCdXR0b24pKSksIFRSVUUpOworCisg
ICAgU3RyaW5nIHJlYWxtID0gYXV0aFdpZGdldC0+cHJpdi0+Y2hhbGxlbmdlLnByb3RlY3Rpb25T
cGFjZSgpLnJlYWxtKCk7CisgICAgaWYgKCFyZWFsbS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcGFj
a1R3b0NvbHVtbkxheW91dEluQm94KAorICAgICAgICAgICAgR1RLX1dJREdFVChhdXRoV2lkZ2V0
KSwKKyAgICAgICAgICAgIGNyZWF0ZUxhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91dFJvd1NwYWNp
bmcpLCBOVUxMLAorICAgICAgICAgICAgY3JlYXRlTGFiZWwoXygiU2VydmVyIG1lc3NhZ2U6Iikp
LCBjcmVhdGVMYWJlbChyZWFsbS51dGY4KCkuZGF0YSgpKSwKKyAgICAgICAgICAgIGNyZWF0ZUxh
YmVsKF8oIlVzZXJuYW1lOiIpKSwgY3JlYXRlRW50cnkoJnByaXYtPmxvZ2luRW50cnkpLAorICAg
ICAgICAgICAgY3JlYXRlTGFiZWwoXygiUGFzc3dvcmQ6IikpLCBjcmVhdGVFbnRyeSgmcHJpdi0+
cGFzc3dvcmRFbnRyeSksCisgICAgICAgICAgICBwcml2LT5yZW1lbWJlckNoZWNrQnV0dG9uLCBO
VUxMLAorICAgICAgICAgICAgTlVMTCk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBwYWNrVHdv
Q29sdW1uTGF5b3V0SW5Cb3goCisgICAgICAgICAgICBHVEtfV0lER0VUKGF1dGhXaWRnZXQpLAor
ICAgICAgICAgICAgY3JlYXRlTGFiZWwocHJvbXB0LmdldCgpLCBnTGF5b3V0Um93U3BhY2luZyks
IE5VTEwsCisgICAgICAgICAgICBjcmVhdGVMYWJlbChfKCJVc2VybmFtZToiKSksIGNyZWF0ZUVu
dHJ5KCZwcml2LT5sb2dpbkVudHJ5KSwKKyAgICAgICAgICAgIGNyZWF0ZUxhYmVsKF8oIlBhc3N3
b3JkOiIpKSwgY3JlYXRlRW50cnkoJnByaXYtPnBhc3N3b3JkRW50cnkpLAorICAgICAgICAgICAg
cHJpdi0+cmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIE5VTEwp
OworICAgIH0KKyAgICBndGtfZW50cnlfc2V0X3Zpc2liaWxpdHkoR1RLX0VOVFJZKHByaXYtPnBh
c3N3b3JkRW50cnkpLCBGQUxTRSk7CisgICAgZ3RrX3dpZGdldF9zZXRfdmlzaWJsZShwcml2LT5y
ZW1lbWJlckNoZWNrQnV0dG9uLCBwcml2LT5jcmVkZW50aWFsU3RvcmFnZU1vZGUgIT0gRGlzYWxs
b3dQZXJzaXN0ZW50U3RvcmFnZSk7CisKKyAgICBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFs
RnJvbVBlcnNpc3RlbnRTdG9yYWdlID0gcHJpdi0+Y2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlh
bCgpOworICAgIGlmICghY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShwcml2LT5sb2dpbkVudHJ5
KSwgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS51c2VyKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkocHJpdi0+cGFzc3dvcmRFbnRy
eSksIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UucGFzc3dvcmQoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgZ3RrX3RvZ2dsZV9idXR0b25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JV
VFRPTihwcml2LT5yZW1lbWJlckNoZWNrQnV0dG9uKSwgVFJVRSk7CisgICAgfQorCisgICAgZ3Rr
X3dpZGdldF9ncmFiX2ZvY3VzKHByaXYtPmxvZ2luRW50cnkpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldEZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBXRUJLSVRfQVVUSEVOVElDQVRJT05fV0lER0VUKG9iamVjdCktPnByaXYtPn5XZWJLaXRBdXRo
ZW50aWNhdGlvbldpZGdldFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYXV0
aGVudGljYXRpb25fd2lkZ2V0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl93aWRnZXRfaW5pdChXZWJLaXRBdXRo
ZW50aWNhdGlvbldpZGdldCogYXV0aFdpZGdldCkKK3sKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlv
bldpZGdldFByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoYXV0aFdp
ZGdldCwgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fV0lER0VULCBXZWJLaXRBdXRoZW50aWNh
dGlvbldpZGdldFByaXZhdGUpOworICAgIG5ldyAocHJpdikgV2ViS2l0QXV0aGVudGljYXRpb25X
aWRnZXRQcml2YXRlKCk7CisgICAgYXV0aFdpZGdldC0+cHJpdiA9IHByaXY7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl93aWRnZXRfY2xhc3NfaW5pdChXZWJLaXRBdXRo
ZW50aWNhdGlvbldpZGdldENsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6
ZSA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0RmluYWxpemU7CisgICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKG9iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0QXV0aGVudGljYXRpb25XaWRn
ZXRQcml2YXRlKSk7Cit9CisKK0d0a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRO
ZXcoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ3JlZGVudGlhbFN0
b3JhZ2VNb2RlIG1vZGUpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQqIGF1dGhX
aWRnZXQgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05fV0lER0VUKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9BVVRIRU5USUNBVElPTl9XSURHRVQsIE5VTEwpKTsKKyAgICBhdXRoV2lkZ2V0LT5wcml2
LT5jaGFsbGVuZ2UgPSBjaGFsbGVuZ2U7CisgICAgYXV0aFdpZGdldC0+cHJpdi0+Y3JlZGVudGlh
bFN0b3JhZ2VNb2RlID0gbW9kZTsKKyAgICB3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldEluaXRp
YWxpemUoYXV0aFdpZGdldCk7CisgICAgcmV0dXJuIEdUS19XSURHRVQoYXV0aFdpZGdldCk7Cit9
CisKK0NyZWRlbnRpYWwgd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFs
KFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0KiBhdXRoV2lkZ2V0KQoreworICAgIGNvbnN0IGNo
YXIqIHVzZXJuYW1lID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShhdXRoV2lkZ2V0LT5w
cml2LT5sb2dpbkVudHJ5KSk7CisgICAgY29uc3QgY2hhciogcGFzc3dvcmQgPSBndGtfZW50cnlf
Z2V0X3RleHQoR1RLX0VOVFJZKGF1dGhXaWRnZXQtPnByaXYtPnBhc3N3b3JkRW50cnkpKTsKKyAg
ICBib29sIHJlbWVtYmVyUGFzc3dvcmQgPSBndGtfdG9nZ2xlX2J1dHRvbl9nZXRfYWN0aXZlKEdU
S19UT0dHTEVfQlVUVE9OKGF1dGhXaWRnZXQtPnByaXYtPnJlbWVtYmVyQ2hlY2tCdXR0b24pKTsK
KworICAgIENyZWRlbnRpYWxQZXJzaXN0ZW5jZSBwZXJzaXN0ZW5jZTsKKyAgICBpZiAocmVtZW1i
ZXJQYXNzd29yZCAmJiBhdXRoV2lkZ2V0LT5wcml2LT5jcmVkZW50aWFsU3RvcmFnZU1vZGUgPT0g
QWxsb3dQZXJzaXN0ZW50U3RvcmFnZSkKKyAgICAgICAgcGVyc2lzdGVuY2UgPSBDcmVkZW50aWFs
UGVyc2lzdGVuY2VQZXJtYW5lbnQ7CisgICAgZWxzZQorICAgICAgICBwZXJzaXN0ZW5jZSA9IENy
ZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb247CisgICAgcmV0dXJuIENyZWRlbnRpYWwoU3Ry
aW5nOjpmcm9tVVRGOCh1c2VybmFtZSksIFN0cmluZzo6ZnJvbVVURjgocGFzc3dvcmQpLCBwZXJz
aXN0ZW5jZSk7Cit9CisKK0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiB3ZWJraXRBdXRoZW50aWNh
dGlvbldpZGdldEdldENoYWxsZW5nZShXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldCogYXV0aFdp
ZGdldCkKK3sKKyAgICByZXR1cm4gYXV0aFdpZGdldC0+cHJpdi0+Y2hhbGxlbmdlOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
V2lkZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2ViS2l0QXV0aGVudGljYXRp
b25XaWRnZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmI5M2RjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dlYktpdEF1dGhl
bnRpY2F0aW9uV2lkZ2V0LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0X2gKKyNk
ZWZpbmUgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRfaAorCisjaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK2VudW0gQ3JlZGVudGlh
bFN0b3JhZ2VNb2RlIHsKKyAgICBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlLCAvLyBUaGUgdXNlciBp
cyBhc2tlZCB3aGV0aGVyIHRvIHN0b3JlIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24uCisgICAgRGlz
YWxsb3dQZXJzaXN0ZW50U3RvcmFnZSAvLyBDcmVkZW50aWFsIGluZm9ybWF0aW9uIGlzIG9ubHkg
a2VwdCBpbiB0aGUgc2Vzc2lvbi4KK307CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJL
SVRfVFlQRV9BVVRIRU5USUNBVElPTl9XSURHRVQgICAgICAgICAgICAod2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3dpZGdldF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05f
V0lER0VUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1dJREdFVCwgV2ViS2l0QXV0aGVudGljYXRpb25X
aWRnZXQpKQorI2RlZmluZSBXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fV0lER0VUKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0FVVEhF
TlRJQ0FUSU9OX1dJREdFVCkpCisjZGVmaW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9XSURHRVRf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfQVVUSEVOVElDQVRJT05fV0lER0VULCBXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldENs
YXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1dJREdFVF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9BVVRIRU5U
SUNBVElPTl9XSURHRVQpKQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fV0lER0VUX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9U
WVBFX0FVVEhFTlRJQ0FUSU9OX1dJREdFVCwgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRDbGFz
cykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldCAgICAgICAg
V2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVu
dGljYXRpb25XaWRnZXRDbGFzcyAgIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0Q2xhc3M7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXRQcml2YXRlIFdlYktpdEF1
dGhlbnRpY2F0aW9uV2lkZ2V0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlv
bldpZGdldCB7CisgICAgR3RrQm94IHBhcmVudDsKKworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9u
V2lkZ2V0UHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25X
aWRnZXRDbGFzcyB7CisgICAgR3RrQm94Q2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitHVHlwZSB3
ZWJraXRfYXV0aGVudGljYXRpb25fd2lkZ2V0X2dldF90eXBlKCk7CitHdGtXaWRnZXQqIHdlYmtp
dEF1dGhlbnRpY2F0aW9uV2lkZ2V0TmV3KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKK1dlYkNvcmU6OkNyZWRlbnRpYWwgd2Vi
a2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFsKFdlYktpdEF1dGhlbnRpY2F0
aW9uV2lkZ2V0Kik7CitXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgd2Via2l0QXV0
aGVudGljYXRpb25XaWRnZXRHZXRDaGFsbGVuZ2UoV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQq
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIFdlYktpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5p
biBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbgppbmRleCBkOWYx
M2JhLi45ZjY5NWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8v
UE9URklMRVMuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJTEVT
LmluCkBAIC0xLDcgKzEsNyBAQAogIyBMaXN0IG9mIHNvdXJjZSBmaWxlcyB3aGljaCBjb250YWlu
IHRyYW5zbGF0YWJsZSBzdHJpbmdzLgogRXJyb3JzR3RrLmNwcAotR3RrQXV0aGVudGljYXRpb25E
aWFsb2cuY3BwCiBMb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcAorV2ViS2l0QXV0aGVudGljYXRpb25X
aWRnZXQuY3BwCiAuLi9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5j
cHAKIC4uLy4uLy4uL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNw
cAogLi4vLi4vLi4vV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0
ay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAxMzA1MWRmLi5hMmVhYTZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTMtMDMtMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFNwbGl0IEd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nIGluIHR3byB3aWRnZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDM2NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBp
bGF0aW9uLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgVXNlIGhlbHBlciBjcmVhdGVBdXRo
ZW50aWNhdGlvbkRpYWxvZygpIHRvIGNyZWF0ZSBhbmQgc2hvdyB0aGUKKyAgICAgICAgYXV0aCBk
aWFsb2cuCisgICAgICAgICogd2Via2l0L3dlYmtpdGF1dGhlbnRpY2F0aW9uZGlhbG9nLmNwcDog
QWRkZWQuCisgICAgICAgIChhdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2spOgor
ICAgICAgICAoY3JlYXRlQXV0aGVudGljYXRpb25EaWFsb2cpOgorICAgICAgICAqIHdlYmtpdC93
ZWJraXRhdXRoZW50aWNhdGlvbmRpYWxvZy5oOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJraXQvd2Vi
a2l0c291cGF1dGhkaWFsb2cuY3BwOgorICAgICAgICAoc2Vzc2lvbkF1dGhlbnRpY2F0ZSk6IERp
dHRvLgorCiAyMDEzLTAzLTEzICBUb21hcyBQb3BlbGEgIDx0cG9wZWxhQHJlZGhhdC5jb20+CiAK
ICAgICAgICAgW0dUS11bSW50cm9zcGVjdGlvbl0gRml4IG9mIGd0ayBkb2MgYW5ub3RhdGlvbiB3
YXJuaW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9T
b3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCBhMmU0ODA1Li4xNzIyZmY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMjI1LDYgKzIyNSw4IEBAIHdlYmtpdGd0a19z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3SW5w
dXRNZXRob2RGaWx0ZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9X
ZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXIuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGFwcGxpY2F0aW9uY2FjaGUuY3BwIFwKKwlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0YXV0aGVudGljYXRpb25kaWFsb2cuY3BwIFwKKwlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0YXV0aGVudGljYXRpb25kaWFsb2cuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGRvd25sb2FkLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRv
d25sb2FkcHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZXJyb3Iu
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCBjZjlhYzRiLi42MjBlODE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29u
dGV4dEd0ay5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgotI2luY2x1ZGUgIkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCiAjaW5jbHVkZSAiR3RrUGx1
Z2luV2lkZ2V0LmgiCiAjaW5jbHVkZSAiR3RrVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSFRNTEFw
cGxldEVsZW1lbnQuaCIKQEAgLTY2LDYgKzY1LDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKKyNpbmNsdWRlICJ3ZWJraXRhdXRoZW50aWNhdGlvbmRpYWxvZy5oIgogI2luY2x1ZGUgIndl
YmtpdGVycm9yLmgiCiAjaW5jbHVkZSAid2Via2l0ZmF2aWNvbmRhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAid2Via2l0ZmF2aWNvbmRhdGFiYXNlcHJpdmF0ZS5oIgpAQCAtMjA2LDE3ICsyMDYsMTYgQEAg
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoV2ViQ29yZTo6RG9jdW0KICAgICB9CiAKICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3
ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobV9mcmFtZSk7Ci0gICAgR3RrQXV0aGVu
dGljYXRpb25EaWFsb2c6OkNyZWRlbnRpYWxTdG9yYWdlTW9kZSBjcmVkZW50aWFsU3RvcmFnZU1v
ZGU7CiAKKyAgICBDcmVkZW50aWFsU3RvcmFnZU1vZGUgY3JlZGVudGlhbFN0b3JhZ2VNb2RlOwog
ICAgIGlmIChjb3JlKHZpZXcpLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkp
Ci0gICAgICAgIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
OjpEaXNhbGxvd1BlcnNpc3RlbnRTdG9yYWdlOworICAgICAgICBjcmVkZW50aWFsU3RvcmFnZU1v
ZGUgPSBEaXNhbGxvd1BlcnNpc3RlbnRTdG9yYWdlOwogICAgIGVsc2UKLSAgICAgICAgY3JlZGVu
dGlhbFN0b3JhZ2VNb2RlID0gR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OkFsbG93UGVyc2lzdGVu
dFN0b3JhZ2U7CisgICAgICAgIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IEFsbG93UGVyc2lzdGVu
dFN0b3JhZ2U7CiAKICAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9w
bGV2ZWwoR1RLX1dJREdFVCh2aWV3KSk7Ci0gICAgR3RrV2luZG93KiB0b3BsZXZlbFdpbmRvdyA9
IHdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyh0b3BsZXZlbCkgPyBHVEtfV0lORE9XKHRv
cGxldmVsKSA6IDA7Ci0gICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZyA9IG5ldyBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZyh0b3BsZXZlbFdpbmRvdywgY2hhbGxlbmdlLCBjcmVkZW50
aWFsU3RvcmFnZU1vZGUpOwotICAgIGRpYWxvZy0+c2hvdygpOworICAgIEd0a1dpZGdldCogYXV0
aERpYWxvZyA9IGNyZWF0ZUF1dGhlbnRpY2F0aW9uRGlhbG9nKHdpZGdldElzT25zY3JlZW5Ub3Bs
ZXZlbFdpbmRvdyh0b3BsZXZlbCkgPyBHVEtfV0lORE9XKHRvcGxldmVsKSA6IDAsIGNoYWxsZW5n
ZSwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coYXV0aERpYWxv
Zyk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
ICBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0YXV0aGVudGljYXRpb25kaWFsb2cuY3Bw
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGF1dGhlbnRpY2F0aW9uZGlhbG9nLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjZkZWZhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGF1dGhlbnRpY2F0aW9uZGlh
bG9nLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMyBJZ2Fs
aWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIndlYmtpdGF1dGhlbnRpY2F0aW9uZGlhbG9nLmgiCisKK3N0YXRpYyB2
b2lkIGF1dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtXaWRnZXQqIGF1dGhE
aWFsb2csIGdpbnQgcmVzcG9uc2VJRCwgV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQqIGF1dGhX
aWRnZXQpCit7CisgICAgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdl
ID0gd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRHZXRDaGFsbGVuZ2UoYXV0aFdpZGdldCk7Cisg
ICAgaWYgKHJlc3BvbnNlSUQgPT0gR1RLX1JFU1BPTlNFX09LKSB7CisgICAgICAgIFdlYkNvcmU6
OkNyZWRlbnRpYWwgY3JlZGVudGlhbCA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0Q3JlYXRl
Q3JlZGVudGlhbChhdXRoV2lkZ2V0KTsKKyAgICAgICAgY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9u
Q2xpZW50KCktPnJlY2VpdmVkQ3JlZGVudGlhbChjaGFsbGVuZ2UsIGNyZWRlbnRpYWwpOworICAg
IH0gZWxzZQorICAgICAgICBjaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKS0+cmVjZWl2
ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNoYWxsZW5nZSk7CisKKyAgICBn
dGtfd2lkZ2V0X2Rlc3Ryb3koYXV0aERpYWxvZyk7Cit9CisKK0d0a1dpZGdldCogY3JlYXRlQXV0
aGVudGljYXRpb25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5kb3csIGNvbnN0IFdlYkNvcmU6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdlTW9k
ZSBtb2RlKQoreworICAgIEd0a0RpYWxvZyogZGlhbG9nID0gR1RLX0RJQUxPRyhndGtfZGlhbG9n
X25ldygpKTsKKyAgICBndGtfZGlhbG9nX2FkZF9idXR0b25zKGRpYWxvZywgR1RLX1NUT0NLX0NB
TkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwgR1RLX1NUT0NLX09LLCBHVEtfUkVTUE9OU0VfT0ss
IE5VTEwpOworICAgIGd0a19kaWFsb2dfc2V0X2RlZmF1bHRfcmVzcG9uc2UoZGlhbG9nLCBHVEtf
UkVTUE9OU0VfT0spOworCisgICAgR3RrV2lkZ2V0KiBjb250ZW50QXJlYSA9IGd0a19kaWFsb2df
Z2V0X2NvbnRlbnRfYXJlYShkaWFsb2cpOworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93
aWR0aChHVEtfQ09OVEFJTkVSKGRpYWxvZyksIDUpOworICAgIGd0a19ib3hfc2V0X3NwYWNpbmco
R1RLX0JPWChjb250ZW50QXJlYSksIDIpOyAvKiAyICogNSArIDIgPSAxMiAqLworCisgICAgR3Rr
V2lkZ2V0KiBhdXRoV2lkZ2V0ID0gd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXROZXcoY2hhbGxl
bmdlLCBtb2RlKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChjb250ZW50QXJlYSks
IGF1dGhXaWRnZXQsIFRSVUUsIFRSVUUsIDApOworICAgIGd0a193aWRnZXRfc2hvdyhhdXRoV2lk
Z2V0KTsKKworICAgIEd0a1dpZGdldCogYWN0aW9uQXJlYSA9IGd0a19kaWFsb2dfZ2V0X2FjdGlv
bl9hcmVhKGRpYWxvZyk7CisgICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19D
T05UQUlORVIoYWN0aW9uQXJlYSksIDUpOworICAgIGd0a19ib3hfc2V0X3NwYWNpbmcoR1RLX0JP
WChhY3Rpb25BcmVhKSwgNik7CisKKyAgICBHdGtXaW5kb3cqIHdpbmRvdyA9IEdUS19XSU5ET1co
ZGlhbG9nKTsKKyAgICBndGtfd2luZG93X3NldF9yZXNpemFibGUod2luZG93LCBGQUxTRSk7Cisg
ICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUod2luZG93LCAiIik7CisgICAgZ3RrX3dpbmRvd19zZXRf
aWNvbl9uYW1lKHdpbmRvdywgR1RLX1NUT0NLX0RJQUxPR19BVVRIRU5USUNBVElPTik7CisgICAg
Z3RrX3dpbmRvd19zZXRfZGVzdHJveV93aXRoX3BhcmVudCAod2luZG93LCBUUlVFKTsKKyAgICBp
ZiAocGFyZW50V2luZG93KQorICAgICAgICBndGtfd2luZG93X3NldF90cmFuc2llbnRfZm9yKHdp
bmRvdywgcGFyZW50V2luZG93KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCAicmVz
cG9uc2UiLCBHX0NBTExCQUNLKGF1dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayks
IGF1dGhXaWRnZXQpOworCisgICAgcmV0dXJuIEdUS19XSURHRVQoZGlhbG9nKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRhdXRoZW50aWNhdGlvbmRpYWxv
Zy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGF1dGhlbnRpY2F0aW9uZGlhbG9n
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzYWM4NAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRhdXRoZW50aWNhdGlvbmRp
YWxvZy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxp
YSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIHdlYmtpdGF1
dGhlbnRpY2F0aW9uZGlhbG9nX2gKKyNkZWZpbmUgd2Via2l0YXV0aGVudGljYXRpb25kaWFsb2df
aAorCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQuaCIKKworR3RrV2lkZ2V0
KiBjcmVhdGVBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywgY29u
c3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDcmVkZW50aWFsU3RvcmFnZU1v
ZGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRzb3VwYXV0aGRpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291
cGF1dGhkaWFsb2cuY3BwCmluZGV4IDZlMjdmNzYuLmFmZTE2YmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcApAQCAtMjEsOSArMjEs
MTAgQEAKICNpbmNsdWRlICJ3ZWJraXRzb3VwYXV0aGRpYWxvZy5oIgogCiAjaW5jbHVkZSAiQXV0
aGVudGljYXRpb25DbGllbnQuaCIKLSNpbmNsdWRlICJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5o
IgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAid2Via2l0YXV0aGVudGlj
YXRpb25kaWFsb2cuaCIKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMTQyLDgg
KzE0Myw4IEBAIHN0YXRpYyB2b2lkIHNlc3Npb25BdXRoZW50aWNhdGUoU291cFNlc3Npb24qIHNl
c3Npb24sIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBTb3VwCiAgICAgLy8gaW1wb3NzaWJsZSB3aXRo
IGdjYywgZHVlIHRvIFdlYktpdFNvdXBBdXRoRGlhbG9nQXV0aGVudGljYXRpb25DbGllbnQncyB0
d28gc3VwZXJjbGFzc2VzLgogICAgIGNsaWVudC0+ZGVyZWZXZWJLaXRTb3VwQXV0aERpYWxvZ0F1
dGhlbnRpY2F0aW9uQ2xpZW50KCk7CiAKLSAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyogYXV0
aERpYWxvZyA9IG5ldyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyh0b3BsZXZlbCwgY2hhbGxlbmdl
LCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6RGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZSk7Ci0g
ICAgYXV0aERpYWxvZy0+c2hvdygpOworICAgIEd0a1dpZGdldCogYXV0aERpYWxvZyA9IGNyZWF0
ZUF1dGhlbnRpY2F0aW9uRGlhbG9nKHRvcGxldmVsLCBjaGFsbGVuZ2UsIERpc2FsbG93UGVyc2lz
dGVudFN0b3JhZ2UpOworICAgIGd0a193aWRnZXRfc2hvdyhhdXRoRGlhbG9nKTsKIH0KIAogc3Rh
dGljIHZvaWQgYXR0YWNoKFNvdXBTZXNzaW9uRmVhdHVyZSogbWFuYWdlciwgU291cFNlc3Npb24q
IHNlc3Npb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggN2Y5NDA2Zi4uOWRjMTgzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSw1ICsxLDUyIEBACiAyMDEzLTAzLTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBTcGxpdCBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZyBpbiB0d28gd2lkZ2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTAzNjQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0
aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlv
bkRpYWxvZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwOiBBZGRlZC4KKyAgICAgICAg
KHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQXV0aGVudGljYXRlKTogVXNlIHRoZQorICAgICAg
ICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5IHRvIGF1dGhlbnRpY2F0ZSBhbmQgZGVzdHJv
eSB0aGUgZGlhbG9nLgorICAgICAgICAob2tCdXR0b25DbGlja2VkKTogQ2FsbCB3ZWJraXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZSgpCisgICAgICAgIHdpdGggdGhlIGNyZWRlbnRp
YWwuCisgICAgICAgIChjYW5jZWxCdXR0b25DbGlja2VkKTogQ2FsbAorICAgICAgICB3ZWJraXRB
dXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZSgpIHdpdGggYSBOVUxMIGNyZWRlbnRpYWwg
dG8KKyAgICAgICAgY29udGludWUgd2l0aG91dCBjcmVkZW50aWFsLgorICAgICAgICAod2Via2l0
QXV0aGVudGljYXRpb25EaWFsb2dJbml0aWFsaXplKTogQnVpbGQgdGhlIFVJLgorICAgICAgICAo
d2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dEcmF3KTogRHJhdyBhIGJhY2tncm91bmQuCisgICAg
ICAgICh3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ01hcCk6IEdyYWIgZGVmYXVsdCBidXR0b24u
CisgICAgICAgICh3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NvbnN0cnVjdGVkKTogQ3JlYXRl
IGEgR3RrU3R5bGVDb250ZXh0CisgICAgICAgIHdpdGggdGhlIEd0a1dpbmRvdyBwYXRoIHRvIGRy
YXcgdGhlIHdpZGdldCBiYWNrZ3JvdW5kIGxpa2UgYSByZWFsCisgICAgICAgIGRpYWxvZy4KKyAg
ICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfY2xhc3NfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyk6IENyZWF0ZSBhIG5ldworICAgICAgICBX
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyB3aWRnZXQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaDogQWRkZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdIYW5k
bGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6IENyZWF0ZSBhCisgICAgICAgIFdlYktpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nIHdpZGdldCBhbmQgcGFzcyBhZGQgaXQgdG8gdGhlCisgICAgICAgIGNv
bnRhaW5lci4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5j
cHA6CisgICAgICAgIChfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKTogVXBkYXRlZCB0byB1c2Ug
dGhlIHdpZGdldCBkaXJlY3RseS4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDaGlsZElzSW50ZXJu
YWxXaWRnZXQpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQWRkQXV0aGVudGlj
YXRpb25EaWFsb2cpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQ2FuY2VsQXV0
aGVudGljYXRpb25EaWFsb2cpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQ29u
dGFpbmVyUmVtb3ZlKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5l
ckZvcmFsbCk6IERpdHRvLgorICAgICAgICAocmVzaXplV2ViS2l0V2ViVmlld0Jhc2VGcm9tQWxs
b2NhdGlvbik6IERpdHRvLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VGb2N1cyk6IERpdHRv
LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEZXN0cm95KTogRGVzdHJveSB0aGUgYXV0aCB3
aWRnZXQgaXMgcHJlc2VudC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2lu
aXQpOiBBZGQgaW1wbGVtZW50YXRpb24gZm9yCisgICAgICAgIEd0a1dpZGdldENsYXNzOjpkZXN0
cm95LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZS5oOgorCisyMDEzLTAzLTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKwogICAgICAgICBbR1RLXSBBZGQgV2ViS2l0V2ViUGFnZTo6c2VuZC1yZXF1ZXN0IHNp
Z25hbCB0byBXZWJLaXQyIEdUSysgQVBJCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MzY4MQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQppbmRl
eCA4YmEwZjc4Li45YjU4YjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTY0
NSw4ICs2NDUsOCBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvY3BwL1dLUmV0YWluUHRyLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBcCi0JU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggXAorCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9n
LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGlj
YXRpb25EaWFsb2cuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QmFja0ZvcndhcmRMaXN0LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEJhY2tGb3J3YXJkTGlzdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkZDY1NC4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0
aGVudGljYXRpb25EaWFsb2cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCi0KLSNpbmNsdWRlICJB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCi0jaW5jbHVkZSAiQXV0aGVudGljYXRpb25E
ZWNpc2lvbkxpc3RlbmVyLmgiCi0jaW5jbHVkZSAiV2ViQ3JlZGVudGlhbC5oIgotI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2
YXRlLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotLy8g
VGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBHdGtFdmVudEJveCBkb2VzIG5vdCBkcmF3IGEgYmFj
a2dyb3VuZCBieSBkZWZhdWx0LAotLy8gYnV0IHdlIHdhbnQgaXQgdG8gaGF2ZSBhIG5vcm1hbCBH
dGtXaW5kb3cgYmFja2dyb3VuZC4KLXN0YXRpYyBnYm9vbGVhbiBkcmF3U2lnbmFsKEd0a1dpZGdl
dCogd2lkZ2V0LCBjYWlyb190KiBjciwgR3RrU3R5bGVDb250ZXh0KiBzdHlsZUNvbnRleHQpCi17
Ci0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKHN0eWxlQ29udGV4dCwgY3IsIDAsIDAsCi0gICAg
ICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRlZF93aWR0aCh3aWRnZXQpLCBndGtfd2lkZ2V0X2dl
dF9hbGxvY2F0ZWRfaGVpZ2h0KHdpZGdldCkpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotV2Vi
S2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFs
b2coQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2Us
IENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2RlKQotICAgIDogR3RrQXV0aGVudGljYXRpb25EaWFs
b2coYXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmNvcmUoKSwgbW9kZSkKLSAgICAsIG1fYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCi0gICAgLCBtX3N0eWxl
Q29udGV4dChhZG9wdEdSZWYoZ3RrX3N0eWxlX2NvbnRleHRfbmV3KCkpKQotewotICAgIG1fZGlh
bG9nID0gZ3RrX2V2ZW50X2JveF9uZXcoKTsKLQotICAgIEd0a1dpZGdldCogZnJhbWUgPSBndGtf
ZnJhbWVfbmV3KDApOwotICAgIGd0a19mcmFtZV9zZXRfc2hhZG93X3R5cGUoR1RLX0ZSQU1FKGZy
YW1lKSwgR1RLX1NIQURPV19JTik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
UihtX2RpYWxvZyksIGZyYW1lKTsKLSAgICBjcmVhdGVDb250ZW50c0luQ29udGFpbmVyKGZyYW1l
KTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhtX3N0eWxlQ29udGV4dC5nZXQo
KSwgR1RLX1NUWUxFX0NMQVNTX0JBQ0tHUk9VTkQpOwotICAgIEd0a1dpZGdldFBhdGgqIHBhdGgg
PSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBl
KHBhdGgsIEdUS19UWVBFX1dJTkRPVyk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhdGgo
bV9zdHlsZUNvbnRleHQuZ2V0KCksIHBhdGgpOwotICAgIGd0a193aWRnZXRfcGF0aF9mcmVlKHBh
dGgpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChtX2RpYWxvZywgImRyYXciLCBHX0NBTExCQUNL
KGRyYXdTaWduYWwpLCBtX3N0eWxlQ29udGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViS2l0Mkd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjphdXRoZW50aWNhdGUoY29uc3QgV2ViQ29yZTo6Q3JlZGVu
dGlhbCYgY3JlZGVudGlhbCkKLXsKLSAgICBSZWZQdHI8V2ViQ3JlZGVudGlhbD4gd2ViQ3JlZGVu
dGlhbCA9IFdlYkNyZWRlbnRpYWw6OmNyZWF0ZShjcmVkZW50aWFsKTsKLSAgICBtX2F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5lcigpLT51c2VDcmVkZW50aWFsKHdlYkNyZWRlbnRpYWwu
Z2V0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZjIxNGUuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0Mkd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nX2gKLSNkZWZpbmUgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gK
LQotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKLSNpbmNsdWRlICJX
S1JldGFpblB0ci5oIgotI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9DcmVkZW50aWFsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtBdXRoZW50aWNhdGlv
bkRpYWxvZy5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIFdlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyA6IHB1Ymxp
YyBXZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB7Ci1wdWJsaWM6Ci0gICAgV2ViS2l0
Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqLCBD
cmVkZW50aWFsU3RvcmFnZU1vZGUpOwotICAgIHZpcnR1YWwgfldlYktpdDJHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZygpIHsgfQotICAgIEd0a1dpZGdldCogd2lkZ2V0KCkgeyByZXR1cm4gbV9kaWFs
b2c7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBhdXRoZW50aWNhdGUoY29uc3Qg
V2ViQ29yZTo6Q3JlZGVudGlhbCYpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5PiBtX2F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotICAgIEdSZWZQ
dHI8R3RrU3R5bGVDb250ZXh0PiBtX3N0eWxlQ29udGV4dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wNjk5ZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwCkBAIC0wLDAgKzEsMTQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgorCisjaW5jbHVkZSAi
QXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2ViQ3JlZGVudGlh
bC5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUgeworICAgIFJl
ZlB0cjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiBhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZTsKKworICAgIEd0a1dpZGdldCogYXV0aFdpZGdldDsKKyAgICBHdGtXaWRnZXQqIGRlZmF1bHRC
dXR0b247CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dDsKK307CisK
K1dFQktJVF9ERUZJTkVfVFlQRShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZywgd2Via2l0X2F1
dGhlbnRpY2F0aW9uX2RpYWxvZywgR1RLX1RZUEVfRVZFTlRfQk9YKQorCitzdGF0aWMgdm9pZCB3
ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShXZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZyogYXV0aERpYWxvZywgV2ViQ3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBX
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUqIHByaXYgPSBhdXRoRGlhbG9nLT5wcml2
OworICAgIHByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5lcigpLT51c2VDcmVk
ZW50aWFsKGNyZWRlbnRpYWwpOworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGF1
dGhEaWFsb2cpKTsKK30KKworc3RhdGljIHZvaWQgb2tCdXR0b25DbGlja2VkKEd0a0J1dHRvbios
IFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nKQoreworICAgIFdlYktpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSogcHJpdiA9IGF1dGhEaWFsb2ctPnByaXY7CisgICAg
UmVmUHRyPFdlYkNyZWRlbnRpYWw+IHdlYkNyZWRlbnRpYWwgPSBXZWJDcmVkZW50aWFsOjpjcmVh
dGUod2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFsKFdFQktJVF9BVVRI
RU5USUNBVElPTl9XSURHRVQocHJpdi0+YXV0aFdpZGdldCkpKTsKKyAgICB3ZWJraXRBdXRoZW50
aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCB3ZWJDcmVkZW50aWFsLmdldCgp
KTsKK30KKworc3RhdGljIHZvaWQgY2FuY2VsQnV0dG9uQ2xpY2tlZChHdGtCdXR0b24qLCBXZWJL
aXRBdXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZykKK3sKKyAgICB3ZWJraXRBdXRoZW50
aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCAwKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0aWFsaXplKFdlYktpdEF1dGhlbnRpY2F0
aW9uRGlhbG9nKiBhdXRoRGlhbG9nLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgY3JlZGVudGlhbFN0
b3JhZ2VNb2RlKQoreworICAgIEd0a1dpZGdldCogZnJhbWUgPSBndGtfZnJhbWVfbmV3KDApOwor
ICAgIGd0a19mcmFtZV9zZXRfc2hhZG93X3R5cGUoR1RLX0ZSQU1FKGZyYW1lKSwgR1RLX1NIQURP
V19JTik7CisKKyAgICBHdGtXaWRnZXQqIHZCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJ
T05fVkVSVElDQUwsIDYpOworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtf
Q09OVEFJTkVSKHZCb3gpLCA1KTsKKworICAgIEd0a1dpZGdldCogYnV0dG9uQm94ID0gZ3RrX2J1
dHRvbl9ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKTsKKyAgICBndGtfYnV0dG9u
X2JveF9zZXRfbGF5b3V0KEdUS19CVVRUT05fQk9YKGJ1dHRvbkJveCksIEdUS19CVVRUT05CT1hf
RU5EKTsKKyAgICBndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihi
dXR0b25Cb3gpLCA1KTsKKyAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goYnV0dG9uQm94
KSwgNik7CisKKyAgICBHdGtXaWRnZXQqIGJ1dHRvbiA9IGd0a19idXR0b25fbmV3X2Zyb21fc3Rv
Y2soR1RLX1NUT0NLX0NBTkNFTCk7CisgICAgZ19zaWduYWxfY29ubmVjdChidXR0b24sICJjbGlj
a2VkIiwgR19DQUxMQkFDSyhjYW5jZWxCdXR0b25DbGlja2VkKSwgYXV0aERpYWxvZyk7CisgICAg
Z3RrX2JveF9wYWNrX2VuZChHVEtfQk9YKGJ1dHRvbkJveCksIGJ1dHRvbiwgRkFMU0UsIFRSVUUs
IDApOworICAgIGd0a193aWRnZXRfc2hvdyhidXR0b24pOworCisgICAgYnV0dG9uID0gZ3RrX2J1
dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfT0spOworICAgIGF1dGhEaWFsb2ctPnByaXYt
PmRlZmF1bHRCdXR0b24gPSBidXR0b247CisgICAgZ19zaWduYWxfY29ubmVjdChidXR0b24sICJj
bGlja2VkIiwgR19DQUxMQkFDSyhva0J1dHRvbkNsaWNrZWQpLCBhdXRoRGlhbG9nKTsKKyAgICBn
dGtfd2lkZ2V0X3NldF9jYW5fZGVmYXVsdChidXR0b24sIFRSVUUpOworICAgIGd0a19ib3hfcGFj
a19lbmQoR1RLX0JPWChidXR0b25Cb3gpLCBidXR0b24sIEZBTFNFLCBUUlVFLCAwKTsKKyAgICBn
dGtfd2lkZ2V0X3Nob3coYnV0dG9uKTsKKworICAgIGF1dGhEaWFsb2ctPnByaXYtPmF1dGhXaWRn
ZXQgPSB3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldE5ldyhhdXRoRGlhbG9nLT5wcml2LT5hdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS0+Y29yZSgpLCBjcmVkZW50aWFsU3RvcmFnZU1vZGUpOworICAg
IGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZCb3gpLCBhdXRoRGlhbG9nLT5wcml2LT5hdXRo
V2lkZ2V0LCBUUlVFLCBUUlVFLCAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coYXV0aERpYWxvZy0+
cHJpdi0+YXV0aFdpZGdldCk7CisKKyAgICBndGtfYm94X3BhY2tfZW5kKEdUS19CT1godkJveCks
IGJ1dHRvbkJveCwgRkFMU0UsIFRSVUUsIDApOworICAgIGd0a193aWRnZXRfc2hvdyhidXR0b25C
b3gpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmcmFtZSksIHZCb3gp
OworICAgIGd0a193aWRnZXRfc2hvdyh2Qm94KTsKKworICAgIGd0a19jb250YWluZXJfYWRkKEdU
S19DT05UQUlORVIoYXV0aERpYWxvZyksIGZyYW1lKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZnJh
bWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dEcmF3
KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBjcikKK3sKKyAgICBXZWJLaXRBdXRoZW50aWNh
dGlvbkRpYWxvZ1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElBTE9HKHdp
ZGdldCktPnByaXY7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKHByaXYtPnN0eWxlQ29u
dGV4dC5nZXQoKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKHByaXYtPnN0eWxl
Q29udGV4dC5nZXQoKSwgR1RLX1NUWUxFX0NMQVNTX0JBQ0tHUk9VTkQpOworICAgIGd0a19yZW5k
ZXJfYmFja2dyb3VuZChwcml2LT5zdHlsZUNvbnRleHQuZ2V0KCksIGNyLCAwLCAwLCBndGtfd2lk
Z2V0X2dldF9hbGxvY2F0ZWRfd2lkdGgod2lkZ2V0KSwgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVk
X2hlaWdodCh3aWRnZXQpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKHByaXYtPnN0
eWxlQ29udGV4dC5nZXQoKSk7CisKKyAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9kaWFsb2dfcGFyZW50X2NsYXNzKS0+ZHJhdyh3aWRnZXQsIGNyKTsKKworICAgIHJl
dHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dN
YXAoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX0RJQUxPRyh3aWRnZXQpLT5wcml2
OworICAgIGd0a193aWRnZXRfZ3JhYl9kZWZhdWx0KHByaXYtPmRlZmF1bHRCdXR0b24pOworCisg
ICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX3BhcmVudF9j
bGFzcyktPm1hcCh3aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlv
bkRpYWxvZ0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVk
KG9iamVjdCk7CisKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUqIHByaXYg
PSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElBTE9HKG9iamVjdCktPnByaXY7CisgICAgcHJpdi0+
c3R5bGVDb250ZXh0ID0gYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKTsKKyAgICBH
dGtXaWRnZXRQYXRoKiBwYXRoID0gZ3RrX3dpZGdldF9wYXRoX25ldygpOworICAgIGd0a193aWRn
ZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLCBHVEtfVFlQRV9XSU5ET1cpOworICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9wYXRoKHByaXYtPnN0eWxlQ29udGV4dC5nZXQoKSwgcGF0aCk7CisgICAg
Z3RrX3dpZGdldF9wYXRoX2ZyZWUocGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9kaWFsb2dfY2xhc3NfaW5pdChXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0Ns
YXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1Moa2xhc3MpOworICAgIG9iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nQ29uc3RydWN0ZWQ7CisKKyAgICBHdGtXaWRnZXRDbGFzcyogd2lkZ2V0
Q2xhc3MgPSBHVEtfV0lER0VUX0NMQVNTKGtsYXNzKTsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhdyA9
IHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nRHJhdzsKKyAgICB3aWRnZXRDbGFzcy0+bWFwID0g
d2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dNYXA7Cit9CisKK0d0a1dpZGdldCogd2Via2l0QXV0
aGVudGljYXRpb25EaWFsb2dOZXcoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2RlKQoreworICAgIFdl
YktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nID0gV0VCS0lUX0FVVEhFTlRJQ0FU
SU9OX0RJQUxPRyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fRElBTE9H
LCBOVUxMKSk7CisgICAgYXV0aERpYWxvZy0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2Ug
PSBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKKyAgICB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxv
Z0luaXRpYWxpemUoYXV0aERpYWxvZywgbW9kZSk7CisgICAgcmV0dXJuIEdUS19XSURHRVQoYXV0
aERpYWxvZyk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43ZDRkZTJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaApAQCAtMCww
ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dfaAorI2RlZmluZSBXZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZ19oCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCisj
aW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQuaCIKKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElP
Tl9ESUFMT0cgICAgICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZ19nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElBTE9HKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0FVVEhFTlRJ
Q0FUSU9OX0RJQUxPRywgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cpKQorI2RlZmluZSBXRUJL
SVRfSVNfQVVUSEVOVElDQVRJT05fRElBTE9HKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX0RJQUxPRykpCisj
ZGVmaW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9ESUFMT0dfQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05f
RElBTE9HLCBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNzKSkKKyNkZWZpbmUgV0VCS0lU
X0lTX0FVVEhFTlRJQ0FUSU9OX0RJQUxPR19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9ESUFMT0cpKQorI2Rl
ZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElBTE9HX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX0RJ
QUxPRywgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25E
aWFsb2c7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dDbGFzcyAg
IFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2dQcml2YXRlIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJp
dmF0ZTsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyB7CisgICAgR3RrRXZl
bnRCb3ggcGFyZW50OworCisgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dQcml2YXRlKiBw
cml2OworfTsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNzIHsKKyAg
ICBHdGtFdmVudEJveENsYXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUgd2Via2l0X2F1dGhl
bnRpY2F0aW9uX2RpYWxvZ19nZXRfdHlwZSgpOworR3RrV2lkZ2V0KiB3ZWJraXRBdXRoZW50aWNh
dGlvbkRpYWxvZ05ldyhXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqLCBDcmVk
ZW50aWFsU3RvcmFnZU1vZGUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5jcHAKaW5kZXggMzMyNmQxMi4uMDUwYzcxZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVy
Q2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRM
b2FkZXJDbGllbnQuY3BwCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiV2ViS2l0TG9hZGVyQ2xpZW50LmgiCiAKLSNpbmNsdWRlICJXZWJLaXQyR3RrQXV0
aGVudGljYXRpb25EaWFsb2cuaCIKICNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0VVJJUmVzcG9uc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAi
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDhkNTRiNWYuLjlkZjg2NzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtLmgiCiAj
aW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgogI2luY2x1ZGUgIldlYkRhdGEuaCIK
KyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgogI2luY2x1ZGUgIldlYktp
dEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRDb250ZXh0TWVudUNs
aWVudC5oIgogI2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUuaCIKQEAgLTE2
NjYsMTcgKzE2NjcsMTMgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U3VibWl0Rm9ybVJlcXVlc3QoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Rm9ybVN1Ym1pc3Npb24KIAogdm9pZCB3ZWJraXRX
ZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
CiB7Ci0gICAgV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2c7Ci0gICAgR3Rr
QXV0aGVudGljYXRpb25EaWFsb2c6OkNyZWRlbnRpYWxTdG9yYWdlTW9kZSBjcmVkZW50aWFsU3Rv
cmFnZU1vZGU7Ci0KKyAgICBDcmVkZW50aWFsU3RvcmFnZU1vZGUgY3JlZGVudGlhbFN0b3JhZ2VN
b2RlOwogICAgIGlmICh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5n
KHdlYlZpZXctPnByaXYtPnNldHRpbmdzLmdldCgpKSkKLSAgICAgICAgY3JlZGVudGlhbFN0b3Jh
Z2VNb2RlID0gR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OkRpc2FsbG93UGVyc2lzdGVudFN0b3Jh
Z2U7CisgICAgICAgIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IERpc2FsbG93UGVyc2lzdGVudFN0
b3JhZ2U7CiAgICAgZWxzZQotICAgICAgICBjcmVkZW50aWFsU3RvcmFnZU1vZGUgPSBHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZzo6QWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKKyAgICAgICAgY3JlZGVu
dGlhbFN0b3JhZ2VNb2RlID0gQWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKIAotICAgIGRpYWxvZyA9
IG5ldyBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2coYXV0aGVudGljYXRpb25DaGFsbGVu
Z2UsIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSk7Ci0gICAgd2Via2l0V2ViVmlld0Jhc2VBZGRBdXRo
ZW50aWNhdGlvbkRpYWxvZyhXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgZGlhbG9nKTsK
LSAgICBkaWFsb2ctPnNob3coKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0
aW9uRGlhbG9nKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpLCB3ZWJraXRBdXRoZW50aWNh
dGlvbkRpYWxvZ05ldyhhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgY3JlZGVudGlhbFN0b3JhZ2VN
b2RlKSk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0luc2VjdXJlQ29udGVudERldGVjdGVkKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEluc2VjdXJlQ29udGVudEV2ZW50IHR5cGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZS5jcHAKaW5kZXggYmE3MmRkYy4uMjk1ZTRmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIldlYkZ1bGxT
Y3JlZW5DbGllbnRHdGsuaCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1
ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0
ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlQWNjZXNzaWJsZS5oIgogI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgpAQCAtMTA0LDcgKzEwNSw3IEBAIHN0cnVjdCBf
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBJbnRTaXplIHJlc2l6ZXJTaXplOwogICAg
IEdSZWZQdHI8QXRrT2JqZWN0PiBhY2Nlc3NpYmxlOwogICAgIGJvb2wgbmVlZHNSZXNpemVPbk1h
cDsKLSAgICBXZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhlbnRpY2F0aW9uRGlh
bG9nOworICAgIEd0a1dpZGdldCogYXV0aGVudGljYXRpb25EaWFsb2c7CiAgICAgR3RrV2lkZ2V0
KiBpbnNwZWN0b3JWaWV3OwogICAgIHVuc2lnbmVkIGluc3BlY3RvclZpZXdIZWlnaHQ7CiAgICAg
R093blB0cjxHZGtFdmVudD4gY29udGV4dE1lbnVFdmVudDsKQEAgLTI3Miw3ICsyNzMsNyBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCiBz
dGF0aWMgYm9vbCB3ZWJraXRXZWJWaWV3Q2hpbGRJc0ludGVybmFsV2lkZ2V0KFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSwgR3RrV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7Ci0gICAgcmV0dXJuIHdp
ZGdldCA9PSBwcml2LT5pbnNwZWN0b3JWaWV3IHx8IChwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxv
ZyAmJiBwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZy0+d2lkZ2V0KCkgPT0gd2lkZ2V0KTsKKyAg
ICByZXR1cm4gd2lkZ2V0ID09IHByaXYtPmluc3BlY3RvclZpZXcgfHwgd2lkZ2V0ID09IHByaXYt
PmF1dGhlbnRpY2F0aW9uRGlhbG9nOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFz
ZUNvbnRhaW5lckFkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KiB3aWRnZXQp
CkBAIC0yOTEsMTggKzI5MiwyMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRh
aW5lckFkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KiB3aQogICAgIGd0a193
aWRnZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7CiB9CiAKLXZv
aWQgd2Via2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNhdGlvbkRpYWxvZyhXZWJLaXRXZWJWaWV3
QmFzZSogd2ViVmlld0Jhc2UsIFdlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyogZGlhbG9n
KQordm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgR3RrV2lkZ2V0KiBkaWFsb2cpCiB7Ci0gICAgd2ViVmll
d0Jhc2UtPnByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nID0gZGlhbG9nOwotICAgIGd0a19jb250
YWluZXJfYWRkKEdUS19DT05UQUlORVIod2ViVmlld0Jhc2UpLCBkaWFsb2ctPndpZGdldCgpKTsK
LSAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSkpOyAvLyBX
ZSBuZWVkIHRvIGRyYXcgdGhlIHNoYWRvdyBvdmVyIHRoZSB3aWRnZXQuCisgICAgV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CisgICAgcHJpdi0+YXV0
aGVudGljYXRpb25EaWFsb2cgPSBkaWFsb2c7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUih3ZWJWaWV3QmFzZSksIGRpYWxvZyk7CisgICAgZ3RrX3dpZGdldF9zaG93KGRpYWxv
Zyk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGRyYXcgdGhlIHNoYWRvdyBvdmVyIHRoZSB3aWRnZXQu
CisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsKIH0K
IAogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNhbmNlbEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdlYktp
dFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKICAgICBpZiAocHJpdi0+YXV0aGVudGljYXRp
b25EaWFsb2cpCi0gICAgICAgIHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nLT5kZXN0cm95KCk7
CisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZyk7
CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VBZGRXZWJJbnNwZWN0b3IoV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYlZpZXdCYXNlLCBHdGtXaWRnZXQqIGluc3BlY3RvcikKQEAgLTMyMyw3ICszMjgs
NyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRhaW5lclJlbW92ZShHdGtDb250
YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KgogICAgIGlmIChwcml2LT5pbnNwZWN0b3JWaWV3
ID09IHdpZGdldCkgewogICAgICAgICBwcml2LT5pbnNwZWN0b3JWaWV3ID0gMDsKICAgICAgICAg
cHJpdi0+aW5zcGVjdG9yVmlld0hlaWdodCA9IDA7Ci0gICAgfSBlbHNlIGlmIChwcml2LT5hdXRo
ZW50aWNhdGlvbkRpYWxvZyAmJiBwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZy0+d2lkZ2V0KCkg
PT0gd2lkZ2V0KSB7CisgICAgfSBlbHNlIGlmIChwcml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZyA9
PSB3aWRnZXQpIHsKICAgICAgICAgcHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cgPSAwOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChwcml2LT5jaGlsZHJlbi5jb250YWlucyh3aWRnZXQp
KTsKQEAgLTM0Nyw3ICszNTIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNvbnRh
aW5lckZvcmFsbChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgZ2Jvb2xlYW4gaQogICAgICAgICAo
KmNhbGxiYWNrKShwcml2LT5pbnNwZWN0b3JWaWV3LCBjYWxsYmFja0RhdGEpOwogCiAgICAgaWYg
KGluY2x1ZGVJbnRlcm5hbHMgJiYgcHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cpCi0gICAgICAg
ICgqY2FsbGJhY2spKHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nLT53aWRnZXQoKSwgY2FsbGJh
Y2tEYXRhKTsKKyAgICAgICAgKCpjYWxsYmFjaykocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cs
IGNhbGxiYWNrRGF0YSk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDaGlsZE1vdmVSZXNp
emUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXcsIEd0a1dpZGdldCogY2hpbGQsIGNvbnN0IElu
dFJlY3QmIGNoaWxkUmVjdCkKQEAgLTQ3Myw3ICs0NzgsNyBAQCBzdGF0aWMgdm9pZCByZXNpemVX
ZWJLaXRXZWJWaWV3QmFzZUZyb21BbGxvY2F0aW9uKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3
QmFzZQogICAgIC8vIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSBpbnNwZWN0b3IgYWxsb2NhdGlvbi4K
ICAgICBpZiAocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cpIHsKICAgICAgICAgR3RrUmVxdWlz
aXRpb24gbmF0dXJhbFNpemU7Ci0gICAgICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXpl
KHByaXYtPmF1dGhlbnRpY2F0aW9uRGlhbG9nLT53aWRnZXQoKSwgMCwgJm5hdHVyYWxTaXplKTsK
KyAgICAgICAgZ3RrX3dpZGdldF9nZXRfcHJlZmVycmVkX3NpemUocHJpdi0+YXV0aGVudGljYXRp
b25EaWFsb2csIDAsICZuYXR1cmFsU2l6ZSk7CiAKICAgICAgICAgR3RrQWxsb2NhdGlvbiBjaGls
ZEFsbG9jYXRpb24gPSB7CiAgICAgICAgICAgICAodmlld1JlY3Qud2lkdGgoKSAtIG5hdHVyYWxT
aXplLndpZHRoKSAvIDIsCkBAIC00ODEsNyArNDg2LDcgQEAgc3RhdGljIHZvaWQgcmVzaXplV2Vi
S2l0V2ViVmlld0Jhc2VGcm9tQWxsb2NhdGlvbihXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jh
c2UKICAgICAgICAgICAgIG5hdHVyYWxTaXplLndpZHRoLAogICAgICAgICAgICAgbmF0dXJhbFNp
emUuaGVpZ2h0CiAgICAgICAgIH07Ci0gICAgICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShw
cml2LT5hdXRoZW50aWNhdGlvbkRpYWxvZy0+d2lkZ2V0KCksICZjaGlsZEFsbG9jYXRpb24pOwor
ICAgICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocHJpdi0+YXV0aGVudGljYXRpb25EaWFs
b2csICZjaGlsZEFsbG9jYXRpb24pOwogICAgIH0KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9H
TCkKQEAgLTgxNywxMyArODIyLDIyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFz
ZUZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtEaXJlY3Rpb25UeXBlIGRpcmVjCiAgICAgV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0
KS0+cHJpdjsKICAgICBpZiAocHJpdi0+YXV0aGVudGljYXRpb25EaWFsb2cpIHsKICAgICAgICAg
Z2Jvb2xlYW4gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShwcml2
LT5hdXRoZW50aWNhdGlvbkRpYWxvZy0+d2lkZ2V0KCksICJmb2N1cyIsIGRpcmVjdGlvbiwgJnJl
dHVyblZhbHVlKTsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHByaXYtPmF1dGhlbnRp
Y2F0aW9uRGlhbG9nLCAiZm9jdXMiLCBkaXJlY3Rpb24sICZyZXR1cm5WYWx1ZSk7CiAgICAgICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9CiAKICAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFT
Uyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5mb2N1cyh3aWRnZXQsIGRpcmVj
dGlvbik7CiB9CiAKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGVzdHJveShHdGtXaWRn
ZXQqIHdpZGdldCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSBXRUJL
SVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2OworICAgIGlmIChwcml2LT5hdXRoZW50aWNh
dGlvbkRpYWxvZykKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KHByaXYtPmF1dGhlbnRpY2F0
aW9uRGlhbG9nKTsKKworICAgIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2Vf
cGFyZW50X2NsYXNzKS0+ZGVzdHJveSh3aWRnZXQpOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX3ZpZXdfYmFzZV9jbGFzc19pbml0KFdlYktpdFdlYlZpZXdCYXNlQ2xhc3MqIHdlYmtpdFdl
YlZpZXdCYXNlQ2xhc3MpCiB7CiAgICAgR3RrV2lkZ2V0Q2xhc3MqIHdpZGdldENsYXNzID0gR1RL
X1dJREdFVF9DTEFTUyh3ZWJraXRXZWJWaWV3QmFzZUNsYXNzKTsKQEAgLTg1MCw2ICs4NjQsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9jbGFzc19pbml0KFdlYktpdFdlYlZp
ZXdCYXNlQ2xhc3MqIHdlYmtpdFdlYlZpZQogICAgIHdpZGdldENsYXNzLT5kcmFnX2RhdGFfcmVj
ZWl2ZWQgPSB3ZWJraXRXZWJWaWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQ7CiAgICAgd2lkZ2V0Q2xh
c3MtPmdldF9hY2Nlc3NpYmxlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlOwogICAg
IHdpZGdldENsYXNzLT5wYXJlbnRfc2V0ID0gd2Via2l0V2ViVmlld0Jhc2VQYXJlbnRTZXQ7Cisg
ICAgd2lkZ2V0Q2xhc3MtPmRlc3Ryb3kgPSB3ZWJraXRXZWJWaWV3QmFzZURlc3Ryb3k7CiAKICAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdFdlYlZp
ZXdCYXNlQ2xhc3MpOwogICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRXZWJW
aWV3QmFzZUNvbnN0cnVjdGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAppbmRleCAzZDg4NjQxLi5l
MzBmZDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaApAQCAtMjksNyArMjksNiBAQAogI2RlZmlu
ZSBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVfaAogCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQ
cm94eUd0ay5oIgotI2luY2x1ZGUgIldlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgog
I2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZS5o
IgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgpAQCAtNjcsNyArNjYsNyBAQCB0eXBlZGVmIHZv
aWQgKCpXZWJLaXRXZWJWaWV3QmFzZURvd25sb2FkUmVxdWVzdEhhbmRsZXIpIChXZWJLaXRXZWJW
aWV3QmFzZSosIFdlYgogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldERvd25sb2FkUmVxdWVzdEhh
bmRsZXIoV2ViS2l0V2ViVmlld0Jhc2UqLCBXZWJLaXRXZWJWaWV3QmFzZURvd25sb2FkUmVxdWVz
dEhhbmRsZXIpOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUhhbmRsZURvd25sb2FkUmVxdWVzdChX
ZWJLaXRXZWJWaWV3QmFzZSosIFdlYktpdDo6RG93bmxvYWRQcm94eSopOwogCi12b2lkIHdlYmtp
dFdlYlZpZXdCYXNlQWRkQXV0aGVudGljYXRpb25EaWFsb2coV2ViS2l0V2ViVmlld0Jhc2UqLCBX
ZWJLaXQ6OldlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyopOwordm9pZCB3ZWJraXRXZWJW
aWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdlYktpdFdlYlZpZXdCYXNlKiwgR3RrV2lk
Z2V0KiBhdXRoRGlhbG9nKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDYW5jZWxBdXRoZW50aWNh
dGlvbkRpYWxvZyhXZWJLaXRXZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUFk
ZFdlYkluc3BlY3RvcihXZWJLaXRXZWJWaWV3QmFzZSosIEd0a1dpZGdldCogaW5zcGVjdG9yKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL2F1dG90b29scy9WZXJzaW9ucy5tNCBiL1NvdXJjZS9hdXRv
dG9vbHMvVmVyc2lvbnMubTQKaW5kZXggYjc2ODJmNC4uNGJjMGY1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL2F1dG90b29scy9WZXJzaW9ucy5tNAorKysgYi9Tb3VyY2UvYXV0b3Rvb2xzL1ZlcnNpb25z
Lm00CkBAIC0xNSw3ICsxNSw3IEBAIG00X2RlZmluZShbbGlid2Via2l0Z3RrX3ZlcnNpb25dLCBb
MTg6MToxOF0pCiBtNF9kZWZpbmUoW2xpYmphdmFzY3JpcHRjb3JlZ3RrX3ZlcnNpb25dLCBbMTM6
ODoxM10pCiBtNF9kZWZpbmUoW2xpYndlYmtpdDJndGtfdmVyc2lvbl0sIFsyMTowOjIxXSkKIAot
bTRfZGVmaW5lKFtndGsyX3JlcXVpcmVkX3ZlcnNpb25dLCBbMi4xMF0pCittNF9kZWZpbmUoW2d0
azJfcmVxdWlyZWRfdmVyc2lvbl0sIFsyLjE2XSkKIG00X2RlZmluZShbZ2FpbDJfcmVxdWlyZWRf
dmVyc2lvbl0sIFsxLjhdKQogbTRfZGVmaW5lKFtndGszX3JlcXVpcmVkX3ZlcnNpb25dLCBbMy40
LjBdKQogbTRfZGVmaW5lKFtnYWlsM19yZXF1aXJlZF92ZXJzaW9uXSwgWzMuMF0pCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmQ5MjAxNS4uYmVm
MDVhOSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2IEBACisyMDEzLTAzLTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBTcGxpdCBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZyBpbiB0d28gd2lkZ2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAzNjQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBndGsvZ2VuZXJhdGUtZ3RrZG9jOgorICAgICAgICAoZ2V0X3dlYmtpdDJf
b3B0aW9ucyk6IERvIG5vdCBnZW5lcmF0ZSBhcGkgZG9jcyBmb3IKKyAgICAgICAgV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2cgd2hpY2ggaXMgcHJpdmF0ZSBpbiBXZWJLaXQyLgorICAgICAgICAo
Z2V0X3dlYmtpdDFfb3B0aW9ucyk6IERvIG5vdCBnZW5lcmF0ZSBhcGkgZG9jcyBmb3IKKyAgICAg
ICAgd2Via2l0YXV0aGVudGljYXRpb25kaWFsb2cgd2hpY2ggaXMgcHJpdmF0ZSBpbiBXZWJLaXQx
LgorCiAyMDEzLTAzLTE0ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNv
bT4KIAogICAgICAgICBbUXRdIERpc2FibGUgRFJUIG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1Rv
b2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MgYi9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCmluZGV4
IGExZDUxMDkuLjdiOTgxNzIgMTAwNzU1Ci0tLSBhL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MK
KysrIGIvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYwpAQCAtMTAwLDkgKzEwMCw5IEBAIGRlZiBn
ZXRfd2Via2l0Ml9vcHRpb25zKCk6CiAgICAgICAgICdpZ25vcmVkX2ZpbGVzJzogZ2xvYi5nbG9i
KHNyY19wYXRoKCcqUHJpdmF0ZS5oJykpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGds
b2IuZ2xvYihpbmplY3RlZF9idW5kbGVfc3JjX3BhdGgoJypQcml2YXRlLmgnKSkgKyBcCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCcqQ2xpZW50KicpKSArIFwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ1dlYktpdDJHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZy4qJykpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGds
b2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0R2VvbG9jYXRpb25Qcm92aWRlci4qJykpICsgXAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0VGV4dENoZWNr
ZXIuKicpKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgo
J1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuKicp
KSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ1dlYlZp
ZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuKicpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbG9iLmdsb2IoZGVyaXZlZF9zb3VyY2VzX3BhdGgoJ3dlYmtpdDJndGsnLCAnd2Via2l0Mics
ICdXZWJLaXRNYXJzaGFsLionKSkgKyBcCkBAIC0xMzgsNiArMTM4LDcgQEAgZGVmIGdldF93ZWJr
aXQxX29wdGlvbnMoZ3RrX3ZlcnNpb24pOgogICAgICAgICAgICAgICAgICAgICcgLUknICsgY29t
bW9uLnRvcF9sZXZlbF9wYXRoKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnRm9yd2FyZGlu
Z0hlYWRlcnMnKSwKICAgICAgICAgJ2Nyb3NzX3JlZmVyZW5jZV9kZXBzJyA6IGdldF9ndGtkb2Nf
bW9kdWxlX3BhdGhzKHhyZWZfZGVwcyksCiAgICAgICAgICdpZ25vcmVkX2ZpbGVzJzogZ2xvYi5n
bG9iKHNyY19wYXRoKCd3ZWJraXQnLCAnKnByaXZhdGUuKicpKSArIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ3dlYmtpdCcsICd3ZWJraXRhdXRoZW50aWNh
dGlvbmRpYWxvZy4qJykpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihz
cmNfcGF0aCgnd2Via2l0JywgJ3dlYmtpdHNwZWxsY2hlY2tlcmVuY2hhbnQuKicpKQogICAgIH0p
CiAgICAgcmV0dXJuIG9wdGlvbnMK
</data>
<flag name="review"
          id="214563"
          type_id="1"
          status="+"
          setter="xan.lopez"
    />
          </attachment>
      

    </bug>

</bugzilla>