<?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>70592</bug_id>
          
          <creation_ts>2011-10-21 03:04:47 -0700</creation_ts>
          <short_desc>[EFL][GTK] Share plugin&apos;s implementation between EFL and Gtk ports.</short_desc>
          <delta_ts>2014-02-05 19:30:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Plug-ins</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>44505</dependson>
          <blocked>96881</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Mariusz Grzegorczyk">mariusz.g</reporter>
          <assigned_to name="Ryuan Choi">ryuan.choi</assigned_to>
          <cc>abarth</cc>
    
    <cc>bunhere</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>leandro</cc>
    
    <cc>mrobinson</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>488286</commentid>
    <comment_count>0</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-10-21 03:04:47 -0700</bug_when>
    <thetext>Windowless plugins implementation for EFL port(based on GTK). Tested with flashplugin-nonfree package(gtk) after invoking gtk_init in EWebLauncher.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488334</commentid>
    <comment_count>1</comment_count>
      <attachid>111952</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-10-21 05:28:11 -0700</bug_when>
    <thetext>Created attachment 111952
EFL windowless plugins implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488493</commentid>
    <comment_count>2</comment_count>
      <attachid>111952</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-10-21 10:57:57 -0700</bug_when>
    <thetext>Comment on attachment 111952
EFL windowless plugins implementation

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

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:51
&gt; +#include &lt;PlatformContextCairo.h&gt;
&gt; +#include &lt;X11/Xlib.h&gt;
&gt; +#include &lt;cairo/cairo-xlib.h&gt;

Be aware that even though Ecore_X is present during compilation, it might not be during runtime. For instance, DumpRenderTree won&apos;t be able to run plugin tests because it uses Ecore_Evas_Buffer (which performs all operations in memory, without a connection to a X server). It would be nice if either the plugin subsystem were disabled if it&apos;s not running under X, or provide an implementation independent of the graphical backend.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:60
&gt; +    // sanity check

Unneeded comment.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:216
&gt; +    const bool syncX = m_pluginDisplay &amp;&amp; m_pluginDisplay != display;

Please precede ``syncX&apos;&apos; by ``should&apos;&apos;: shouldSyncWithX.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:233
&gt; +        RefPtr&lt;cairo_t&gt; cr = adoptRef(cairo_create(drawableSurface.get()));

``cr&apos;&apos; doesn&apos;t look like a good variable name.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:261
&gt; +    exposeEvent.width = exposedRect.x() + exposedRect.width(); // flash bug? it thinks width is the right in transparent mode
&gt; +    exposeEvent.height = exposedRect.y() + exposedRect.height(); // flash bug? it thinks height is the bottom in transparent mode

Please use proper sentences in comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502887</commentid>
    <comment_count>3</comment_count>
      <attachid>115161</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-11-15 07:09:43 -0800</bug_when>
    <thetext>Created attachment 115161
EFL windowless plugins implementation

Rebased, and applied Leonardo&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502890</commentid>
    <comment_count>4</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-11-15 07:12:41 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 111952 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111952&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:51
&gt; &gt; +#include &lt;PlatformContextCairo.h&gt;
&gt; &gt; +#include &lt;X11/Xlib.h&gt;
&gt; &gt; +#include &lt;cairo/cairo-xlib.h&gt;
&gt; 
&gt; Be aware that even though Ecore_X is present during compilation, it might not be during runtime. For instance, DumpRenderTree won&apos;t be able to run plugin tests because it uses Ecore_Evas_Buffer (which performs all operations in memory, without a connection to a X server). It would be nice if either the plugin subsystem were disabled if it&apos;s not running under X, or provide an implementation independent of the graphical backend.

I&apos;ve added ecore_x_init to DumpRendererTree. Webkit library is linked with ecore_x for efl port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527298</commentid>
    <comment_count>5</comment_count>
      <attachid>115161</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-12-27 00:20:25 -0800</bug_when>
    <thetext>Comment on attachment 115161
EFL windowless plugins implementation

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

You need to rebase this patch again.

&gt; Source/WebCore/ChangeLog:3
&gt; +        Bug 70592 - [EFL] Windowless plugins implementation

Bug 70592 is unneeded.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:522
&gt; +    // TODO: optimize

Do not use TODO. According to webkit conding style guide line, we should use &quot;FIXME&quot;. It looks &quot;optimize&quot; is too insufficient description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528490</commentid>
    <comment_count>6</comment_count>
      <attachid>120877</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2012-01-02 06:17:57 -0800</bug_when>
    <thetext>Created attachment 120877
EFL windowless plugins implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563133</commentid>
    <comment_count>7</comment_count>
      <attachid>128482</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2012-02-23 08:39:45 -0800</bug_when>
    <thetext>Created attachment 128482
EFL windowless plugins implementation

Rebased version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563142</commentid>
    <comment_count>8</comment_count>
      <attachid>128485</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2012-02-23 08:55:36 -0800</bug_when>
    <thetext>Created attachment 128485
Source of sample windowless plugin based on XPixmap</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563147</commentid>
    <comment_count>9</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2012-02-23 09:07:13 -0800</bug_when>
    <thetext>I&apos;ve tested newest patch with created sample plugin: just drawing rectangle in place of plugin. Source is attached as TestPlugin.tar. After compiling TestPlugin.cpp output library should be moved to one of the plugins location e.g.: /usr/lib/mozilla/plugins/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563149</commentid>
    <comment_count>10</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2012-02-23 09:08:35 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I&apos;ve tested newest patch with created sample plugin: just drawing rectangle in place of plugin. Source is attached as TestPlugin.tar. After compiling TestPlugin.cpp output library should be moved to one of the plugins location e.g.: /usr/lib/mozilla/plugins/.
Plugin has &quot;application/plugtest&quot; mime type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614312</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-02 08:21:53 -0700</bug_when>
    <thetext>I think it&apos;s really time to consider adding a shared X11 plugin implementation for WebKit1, rather than adding yet another X11 plugin implementation with a tiny bit of glue code not shared in common. In WebKit2 we are able to share the implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736480</commentid>
    <comment_count>12</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-07 20:57:28 -0700</bug_when>
    <thetext>Any update ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774776</commentid>
    <comment_count>13</comment_count>
      <attachid>128482</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-23 22:27:43 -0800</bug_when>
    <thetext>Comment on attachment 128482
EFL windowless plugins implementation



Cleared review? from attachment 128482 [details] so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842995</commentid>
    <comment_count>14</comment_count>
      <attachid>190506</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2013-02-27 06:21:42 -0800</bug_when>
    <thetext>Created attachment 190506
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842999</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-27 06:24:33 -0800</bug_when>
    <thetext>Attachment 190506 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.am&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/PlatformEfl.cmake&apos;, u&apos;Source/WebCore/plugins/efl/PluginViewEfl.cpp&apos;, u&apos;Source/WebCore/plugins/gtk/PluginViewGtk.cpp&apos;, u&apos;Source/WebCore/plugins/x11/PluginViewX11.cpp&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/efl/CMakeLists.txt&apos;, u&apos;Tools/DumpRenderTree/efl/DumpRenderTree.cpp&apos;]&quot; exit_code: 1
Source/WebCore/plugins/x11/PluginViewX11.cpp:257:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/plugins/x11/PluginViewX11.cpp:283:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/plugins/x11/PluginViewX11.cpp:860:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3 in 8 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>843009</commentid>
    <comment_count>16</comment_count>
      <attachid>190511</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2013-02-27 06:43:27 -0800</bug_when>
    <thetext>Created attachment 190511
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874910</commentid>
    <comment_count>17</comment_count>
      <attachid>190511</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-04-12 12:45:31 -0700</bug_when>
    <thetext>Comment on attachment 190511
updated patch

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

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:78
&gt; +#else

#elif PLATFORM(EFL)

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:145
&gt; +#else

Ditto

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:680
&gt; +#if PLATFORM(GTK)
&gt; +        *static_cast&lt;uint32_t*&gt;(value) = 2;
&gt; +#else
&gt; +        *static_cast&lt;uint32_t*&gt;(value) = 0;
&gt; +#endif

I don&apos;t understand this, I guess it&apos;s inherited from the previous PluginView implementation but a comment would be good to have here. Also, mind turning the #else to and #elif ?

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:687
&gt; +#else

#elif PLATFORM(EFL)

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:994
&gt; +#else

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875262</commentid>
    <comment_count>18</comment_count>
      <attachid>190511</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-04-13 19:03:58 -0700</bug_when>
    <thetext>Comment on attachment 190511
updated patch

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

&gt; Tools/DumpRenderTree/efl/DumpRenderTree.cpp:385
&gt; +        ewk_shutdown();

Shouldn&apos;t ewk_shutdown() is called first ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875871</commentid>
    <comment_count>19</comment_count>
      <attachid>198129</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2013-04-15 09:02:17 -0700</bug_when>
    <thetext>Created attachment 198129
updated, rebased, applied Philippe&apos;s and Gyuyoung&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876516</commentid>
    <comment_count>20</comment_count>
      <attachid>198129</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-04-16 05:06:40 -0700</bug_when>
    <thetext>Comment on attachment 198129
updated, rebased, applied Philippe&apos;s and Gyuyoung&apos;s comments

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

&gt; Tools/DumpRenderTree/efl/DumpRenderTree.cpp:374
&gt; +    if (!ecore_x_init(0)) {

Missing #ifdef HAVE_ECORE_X. BTW, is it better to move ecore_x_init(0) to ecore initializations ? I mean it would be good if you place this before edje_init().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876561</commentid>
    <comment_count>21</comment_count>
      <attachid>198332</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2013-04-16 08:43:07 -0700</bug_when>
    <thetext>Created attachment 198332
applied comments, remove ecore_x initialization from DumpRenderTree because it is done in ewk_init</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956810</commentid>
    <comment_count>22</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2013-12-05 01:52:19 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Created an attachment (id=198332) [details]
&gt; applied comments, remove ecore_x initialization from DumpRenderTree because it is done in ewk_init

Is this still valid?

At least, we need to rebase this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966292</commentid>
    <comment_count>23</comment_count>
      <attachid>220823</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-10 01:54:22 -0800</bug_when>
    <thetext>Created attachment 220823
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966352</commentid>
    <comment_count>24</comment_count>
      <attachid>220823</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-01-10 07:00:00 -0800</bug_when>
    <thetext>Comment on attachment 220823
rebased

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

I added some nits.

Said that, I am not entirely sure that this change really pays off. I thought the refactoring could be a good idea, but the outcome doesn&apos;t look better than two separate files because in exchange of moving the implementation to a single file, we get a file full of #ifdefs which is difficult to read is several parts.

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:89
&gt; +#define Status int // ditto

I know they come from the removed files, but what do we need these two defines for? Looks like they&apos;re totally unused

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:106
&gt; +    // sanity check

This comment looks useless

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:141
&gt; +    // later.

Put this inside the GTK ifdef as it is not valid for EFL

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:236
&gt; +        m_windowRect.height()));

You can write this in a single line

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:309
&gt; +    xEvent.type = (event-&gt;type() == eventNames().keydownEvent) ? 2 : 3; // KeyPress/Release get unset somewhere

That comment looks suspicious. Time to research a bit why we are using those magic numbers?

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:478
&gt; +    event.type = 9; // FocusIn gets unset somewhere

Again another magic number

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:494
&gt; +    event.type = 10; // FocusOut gets unset somewhere

Ditto.

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:604
&gt; +    // Don&apos;t do anything if the allocation has not changed.

This comment doesn&apos;t add up, better to remove it.

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:610
&gt; +    // Don&apos;t do anything if both the old and the new allocations are outside the frame.

Ditto. The code is self-explanatory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966734</commentid>
    <comment_count>25</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-10 20:01:34 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 220823 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=220823&amp;action=review
&gt; 
&gt; I added some nits.
&gt; 
&gt; Said that, I am not entirely sure that this change really pays off. I thought the refactoring could be a good idea, but the outcome doesn&apos;t look better than two separate files because in exchange of moving the implementation to a single file, we get a file full of #ifdefs which is difficult to read is several parts.
&gt; 

First, thank you for your quick feedback.
I had similar concerns while rebasing this patch.

I can refactor more but I think that we still have some differences.
So, how about just resolving this invalid and fixing only EFL side?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967176</commentid>
    <comment_count>26</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-01-12 23:47:17 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; (From update of attachment 220823 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=220823&amp;action=review
&gt; &gt; 
&gt; &gt; I added some nits.
&gt; &gt; 
&gt; &gt; Said that, I am not entirely sure that this change really pays off. I thought the refactoring could be a good idea, but the outcome doesn&apos;t look better than two separate files because in exchange of moving the implementation to a single file, we get a file full of #ifdefs which is difficult to read is several parts.
&gt; &gt; 
&gt; 
&gt; First, thank you for your quick feedback.
&gt; I had similar concerns while rebasing this patch.
&gt; 
&gt; I can refactor more but I think that we still have some differences.
&gt; So, how about just resolving this invalid and fixing only EFL side?

Yeah I think the best thing you could do is to fill the gaps in EFL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967178</commentid>
    <comment_count>27</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-01-13 00:00:26 -0800</bug_when>
    <thetext>I&apos;m not sure I like this idea of sharing the implementation to add a &quot;common&quot; file with a lot of #ifdefs. Would it be possible to add a PluginViewX11 file with the implementation of the methods that are actually common, and leave PluginViewGtk and PluginViewEfl with the platform specific methods?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967683</commentid>
    <comment_count>28</comment_count>
      <attachid>221109</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-13 23:47:01 -0800</bug_when>
    <thetext>Created attachment 221109
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967687</commentid>
    <comment_count>29</comment_count>
      <attachid>221111</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-14 00:02:45 -0800</bug_when>
    <thetext>Created attachment 221111
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969388</commentid>
    <comment_count>30</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-01-17 21:48:09 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; Created an attachment (id=221111) [details]
&gt; Patch

I tried to separate the common logic from the GTK&apos;s code like KaL said.

Could you let me know what should I do for the next step?
Should I cook it more?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970195</commentid>
    <comment_count>31</comment_count>
      <attachid>221111</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-01-21 00:40:29 -0800</bug_when>
    <thetext>Comment on attachment 221111
Patch

Thanks for the updated patch, the GTK+ part looks good to me, it simply moves the code but someone from EFL should review that part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977173</commentid>
    <comment_count>32</comment_count>
      <attachid>221111</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2014-02-05 17:58:09 -0800</bug_when>
    <thetext>Comment on attachment 221111
Patch

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

I believe this is a way to go between efl and gtk. r+ed by me on behalf of gtk reviewer. Please fix trivial nits before landing.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:309
&gt; +    // TODO remove in favor of null events, like mac port?

TODO -&gt; FIXME: ?

&gt; Source/WebCore/plugins/x11/PluginViewX11.cpp:135
&gt; +    // TODO: optimize

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977180</commentid>
    <comment_count>33</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-02-05 18:25:27 -0800</bug_when>
    <thetext>Committed r163505: &lt;http://trac.webkit.org/changeset/163505&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977197</commentid>
    <comment_count>34</comment_count>
      <attachid>221111</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-02-05 19:30:12 -0800</bug_when>
    <thetext>Comment on attachment 221111
Patch

clearing flags after landed</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111952</attachid>
            <date>2011-10-21 05:28:11 -0700</date>
            <delta_ts>2011-11-15 07:09:43 -0800</delta_ts>
            <desc>EFL windowless plugins implementation</desc>
            <filename>efl_windowless_plugins.patch</filename>
            <type>text/plain</type>
            <size>14920</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhNDlhZTJjLi4wN2YxMGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTEtMTAtMDYgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5j
b20+CisKKyAgICAgICAgW0VGTF0gV2luZG93bGVzcyBwbHVnaW5zIGltcGxlbWVudGF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGF0
aW9uIG9mIHdpbmRvd2xlc3MgcGx1Z2lucyBpbiBFRkwgcG9ydC4gQWRkcyBwbHVnaW4gaW5pdGlh
bGl6aW5nLCBYUGl4bWFwIGNyZWF0aW5nIGFuZCBwYWludGluZy4KKyAgICAgICAgVGVzdGVkIG9u
IFVidW50dSB3aXRoIGZsYXNocGx1Z2luLW5vbmZyZWUgcGFja2FnZSB3aXRoIGFkZGl0aW9uYWwg
Z3RrIGluaXRpYWxpemF0aW9uLgorCisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luVmlld0Vm
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0Um9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWVTdGF0aWMp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
cGxhdGZvcm1EZXN0cm95KToKKwogMjAxMS0wOS0xNiAgTWFyaXVzeiBHcnplZ29yY3p5ayAgPG1h
cml1c3ouZ0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBCdWcgNDQ1MDUgLSBbRUZMXSBNaXNzaW5n
IHBsdWdpbnMgc3VwcG9ydCBmb3IgZWZsIHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9l
ZmwvUGx1Z2luVmlld0VmbC5jcHAKaW5kZXggMjA4NmYyYS4uZDUzZjhmNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKQEAgLTQ1LDIwICs0NSwyNyBA
QAogI2luY2x1ZGUgPEVjb3JlX1guaD4KICNpbmNsdWRlIDxFdmFzLmg+CiAKKyNpZiBkZWZpbmVk
KFhQX1VOSVgpCisjaW5jbHVkZSA8UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KKyNpbmNsdWRlIDxY
MTEvWGxpYi5oPgorI2luY2x1ZGUgPGNhaXJvL2NhaXJvLXhsaWIuaD4KKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGJvb2wgUGx1
Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQogeworICAgIC8vIHNhbml0
eSBjaGVjawogICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7
CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKLSAgICBib29s
IGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZl
dmVudCk7CisgICAgYm9vbCBhY2NlcHRlZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZl
bnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKIAogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwog
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwpAQCAtNzUsNiArODIsMTQg
QEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQorCitzdGF0aWMgV2luZG93IGdldFJvb3RXaW5kb3coRnJhbWUqIHBhcmVu
dEZyYW1lKQoreworICAgIEV2YXNfT2JqZWN0KiB3aWRnZXQgPSBwYXJlbnRGcmFtZS0+dmlldygp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIEV2YXMqIGV2YXMgPSBl
dmFzX29iamVjdF9ldmFzX2dldCh3aWRnZXQpOworICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9
IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdpbmRvdz4oZWNvcmVfZXZhc193aW5kb3dfZ2V0KGVjb3JlRXZhcykpOworfQogI2VuZGlmCiAK
IHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikKQEAg
LTExNiwxMSArMTMxLDQ0IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3Vz
ZUV2ZW50KiBldmVudCkKIAogdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKworICAg
IEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENs
aXBSZWN0ID0gbV9jbGlwUmVjdDsKKworICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVW
aWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3Qo
KS5zaXplKCkpOworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xp
cFJlY3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAg
aWYgKG1fd2luZG93UmVjdCA9PSBvbGRXaW5kb3dSZWN0ICYmIG1fY2xpcFJlY3QgPT0gb2xkQ2xp
cFJlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybjsKKworI2lmIGRlZmluZWQoWFBf
VU5JWCkKKyAgICBpZiAoIW1faXNXaW5kb3dlZCAmJiAhbV93aW5kb3dSZWN0LmlzRW1wdHkoKSkg
eworICAgICAgICBpZiAobV9kcmF3YWJsZSkKKyAgICAgICAgICAgIGVjb3JlX3hfcGl4bWFwX2Zy
ZWUobV9kcmF3YWJsZSk7CisKKyAgICAgICAgbV9kcmF3YWJsZSA9IGVjb3JlX3hfcGl4bWFwX25l
dyhnZXRSb290V2luZG93KG1fcGFyZW50RnJhbWUuZ2V0KCkpLCAgbV93aW5kb3dSZWN0LndpZHRo
KCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT5k
ZXB0aCk7CisKKyAgICAgICAgZWNvcmVfeF9zeW5jKCk7IC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBz
ZXJ2ZXIga25vd3MgYWJvdXQgdGhlIERyYXdhYmxlCisgICAgfQorI2VuZGlmCisKKyAgICBzZXRO
UFdpbmRvd0lmTmVlZGVkKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBm
b2N1c2VkKQogeworICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpID09IHBsYXRmb3Jt
V2lkZ2V0KCkpOworCiAgICAgaWYgKGZvY3VzZWQpCiAgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9lbGVtZW50KTsKIApAQCAtMTI5LDYgKzE3Nyw4IEBAIHZv
aWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQogCiB2b2lkIFBsdWdpblZpZXc6
OnNob3coKQogeworICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpID09IHBsYXRmb3Jt
V2lkZ2V0KCkpOworCiAgICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7CiAKICAgICBXaWRnZXQ6OnNo
b3coKTsKQEAgLTEzNiw2ICsxODYsOCBAQCB2b2lkIFBsdWdpblZpZXc6OnNob3coKQogCiB2b2lk
IFBsdWdpblZpZXc6OmhpZGUoKQogeworICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgp
ID09IHBsYXRmb3JtV2lkZ2V0KCkpOworCiAgICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOwogCiAg
ICAgV2lkZ2V0OjpoaWRlKCk7CkBAIC0xNDMsOCArMTk1LDkzIEBAIHZvaWQgUGx1Z2luVmlldzo6
aGlkZSgpCiAKIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgaWYg
KCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVs
bHkpIHsKICAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKKworICAg
IGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworI2lmIGRlZmluZWQoWFBfVU5J
WCkKKyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsKKworICAgIERpc3BsYXkq
IGRpc3BsYXkgPSBzdGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNvcmVfeF9kaXNwbGF5X2dldCgpKTsK
KyAgICBjb25zdCBib29sIHN5bmNYID0gbV9wbHVnaW5EaXNwbGF5ICYmIG1fcGx1Z2luRGlzcGxh
eSAhPSBkaXNwbGF5OworCisgICAgSW50UmVjdCBleHBvc2VkUmVjdChyZWN0KTsKKyAgICBleHBv
c2VkUmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOworICAgIGV4cG9zZWRSZWN0Lm1vdmUoLWZy
YW1lUmVjdCgpLngoKSwgLWZyYW1lUmVjdCgpLnkoKSk7CisKKyAgICBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiBkcmF3YWJsZVN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb194bGliX3N1cmZhY2VfY3Jl
YXRlKGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9kcmF3YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3Zpc3VhbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRvd1JlY3Qud2lkdGgoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dp
bmRvd1JlY3QuaGVpZ2h0KCkpKTsKKworICAgIGlmIChtX2lzVHJhbnNwYXJlbnQpIHsKKyAgICAg
ICAgLy8gSWYgd2UgaGF2ZSBhIDMyIGJpdCBkcmF3YWJsZSBhbmQgdGhlIHBsdWdpbiB3YW50cyB0
cmFuc3BhcmVuY3ksCisgICAgICAgIC8vIHdlJ2xsIGNsZWFyIHRoZSBleHBvc2VkIGFyZWEgdG8g
dHJhbnNwYXJlbnQgZmlyc3QuIE90aGVyd2lzZSwKKyAgICAgICAgLy8gd2UnZCBlbmQgdXAgd2l0
aCBqdW5rIGluIHRoZXJlIGZyb20gdGhlIGxhc3QgcGFpbnQsIG9yLCB3b3JzZSwKKyAgICAgICAg
Ly8gdW5pbml0aWFsaXplZCBkYXRhLgorICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9w
dFJlZihjYWlyb19jcmVhdGUoZHJhd2FibGVTdXJmYWNlLmdldCgpKSk7CisKKyAgICAgICAgaWYg
KCEoY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChkcmF3YWJsZVN1cmZhY2UuZ2V0KCkpICYgQ0FJ
Uk9fQ09OVEVOVF9BTFBIQSkpIHsKKyAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZmFrZSBpdCB3
aGVuIHdlIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCBvbiBvdXIKKyAgICAgICAgICAgIC8v
IHBpeG1hcC4gSWYgdGhhdCdzIG5vdCBwb3NzaWJsZSwgYXQgbGVhc3QgY2xlYXIgdGhlIHdpbmRv
dyB0bworICAgICAgICAgICAgLy8gYXZvaWQgZHJhd2luZyBhcnRpZmFjdHMuCisKKyAgICAgICAg
ICAgIC8vIFRoaXMgV291bGQgbm90IHdvcmsgd2l0aG91dCBkb3VibGUgYnVmZmVyaW5nLCBidXQg
d2UgYWx3YXlzIHVzZSBpdC4KKyAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShj
ci5nZXQoKSwgY2Fpcm9fZ2V0X2dyb3VwX3RhcmdldChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y3IoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1fd2luZG93
UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NM
RUFSKTsKKworICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IuZ2V0KCksIGV4cG9zZWRSZWN0Lngo
KSwgZXhwb3NlZFJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3Qu
d2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBjYWlyb19maWxsKGNyLmdl
dCgpKTsKKyAgICB9CisKKyAgICBYRXZlbnQgeGV2ZW50OworICAgIG1lbXNldCgmeGV2ZW50LCAw
LCBzaXplb2YoWEV2ZW50KSk7CisgICAgWEdyYXBoaWNzRXhwb3NlRXZlbnQmIGV4cG9zZUV2ZW50
ID0geGV2ZW50LnhncmFwaGljc2V4cG9zZTsKKyAgICBleHBvc2VFdmVudC50eXBlID0gR3JhcGhp
Y3NFeHBvc2U7CisgICAgZXhwb3NlRXZlbnQuZGlzcGxheSA9IGRpc3BsYXk7CisgICAgZXhwb3Nl
RXZlbnQuZHJhd2FibGUgPSBtX2RyYXdhYmxlOworICAgIGV4cG9zZUV2ZW50LnggPSBleHBvc2Vk
UmVjdC54KCk7CisgICAgZXhwb3NlRXZlbnQueSA9IGV4cG9zZWRSZWN0LnkoKTsKKyAgICBleHBv
c2VFdmVudC53aWR0aCA9IGV4cG9zZWRSZWN0LngoKSArIGV4cG9zZWRSZWN0LndpZHRoKCk7IC8v
IGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIHdpZHRoIGlzIHRoZSByaWdodCBpbiB0cmFuc3BhcmVudCBt
b2RlCisgICAgZXhwb3NlRXZlbnQuaGVpZ2h0ID0gZXhwb3NlZFJlY3QueSgpICsgZXhwb3NlZFJl
Y3QuaGVpZ2h0KCk7IC8vIGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIGhlaWdodCBpcyB0aGUgYm90dG9t
IGluIHRyYW5zcGFyZW50IG1vZGUKKyAgICBkaXNwYXRjaE5QRXZlbnQoeGV2ZW50KTsKKyAgICBp
ZiAoc3luY1gpCisgICAgICAgIGVjb3JlX3hfc3luYygpOyAvLyBzeW5jIGNoYW5nZXMgYnkgcGx1
Z2luCisKKyAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
OworICAgIGNhaXJvX3NhdmUoY3IpOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNy
LCBkcmF3YWJsZVN1cmZhY2UuZ2V0KCksIGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgp
KTsKKworICAgIGNhaXJvX3JlY3RhbmdsZShjciwKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVS
ZWN0KCkueCgpICsgZXhwb3NlZFJlY3QueCgpLCBmcmFtZVJlY3QoKS55KCkgKyBleHBvc2VkUmVj
dC55KCksCisgICAgICAgICAgICAgICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRS
ZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19jbGlwKGNyKTsKKworICAgIGlmIChtX2lzVHJhbnNw
YXJlbnQpCisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfT1ZF
Uik7CisgICAgZWxzZQorICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJB
VE9SX1NPVVJDRSk7CisKKyAgICBjYWlyb19wYWludChjcik7CisKKyAgICBjYWlyb19yZXN0b3Jl
KGNyKTsKKyNlbmRpZiAvLyBkZWZpbmVkKFhQX1VOSVgpCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6
c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKQEAgLTE1NSwxMyArMjkyLDU4IEBAIHZvaWQg
UGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKICAgICAgICAgaW5pdCgp
OwogfQogCi12b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAg
c2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93
SWZOZWVkZWQoKQogeworICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgIXBhcmVudCgpIHx8ICFtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBJZiB0aGUgcGx1Z2luIGRpZG4ndCBsb2FkIHN1Y2Vzc2Z1bGx5LCBubyBwb2ludCBpbiBjYWxs
aW5nIHNldHdpbmRvdworICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNj
ZXNzZnVsbHkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE9uIFVuaXgsIG9ubHkgY2FsbCBw
bHVnaW4ncyBzZXR3aW5kb3cgaWYgaXQncyBmdWxsLXBhZ2Ugb3Igd2luZG93ZWQKKyAgICBpZiAo
bV9tb2RlICE9IE5QX0ZVTEwgJiYgbV9tb2RlICE9IE5QX0VNQkVEKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm1QbHVnaW5XaWRnZXQgc3RpbGwgZXhpc3Rz
CisgICAgaWYgKG1faXNXaW5kb3dlZCAmJiAhcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gSWYgd2lkdGggb3IgaGVpZ2h0IGFyZSBudWxsLCBzZXQgdGhl
IGNsaXBSZWN0IHRvIG51bGwsIGluZGljYXRpbmcgdGhhdAorICAgIC8vIHRoZSBwbHVnaW4gaXMg
bm90IHZpc2libGUvc2Nyb2xsZWQgb3V0LgorICAgIGlmICghbV9jbGlwUmVjdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgbV9ucFdp
bmRvdy5jbGlwUmVjdC5yaWdodCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9w
ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSAwOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIENsaXBwaW5nIHJlY3RhbmdsZSBvZiB0aGUgcGx1Zy1pbjsgdGhlIG9y
aWdpbiBpcyB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBkcmF3YWJsZSBvciB3aW5kb3cuCisg
ICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fbnBXaW5kb3cueCArIG1fY2xpcFJl
Y3QueCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IG1fbnBXaW5kb3cueSAr
IG1fY2xpcFJlY3QueSgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9u
cFdpbmRvdy54ICsgbV9jbGlwUmVjdC54KCkgKyBtX2NsaXBSZWN0LndpZHRoKCk7CisgICAgICAg
IG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gbV9ucFdpbmRvdy55ICsgbV9jbGlwUmVjdC55
KCkgKyBtX2NsaXBSZWN0LmhlaWdodCgpOworICAgIH0KKworICAgIC8vIEZMQVNIIFdPUktBUk9V
TkQ6IE9ubHkgc2V0IGluaXRpYWxseS4gTXVsdGlwbGUgY2FsbHMgdG8KKyAgICAvLyBzZXROUFdp
bmRvdygpIGNhdXNlIHRoZSBwbHVnaW4gdG8gY3Jhc2ggaW4gd2luZG93ZWQgbW9kZS4KKyAgICBp
ZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDYWxsU2V0V2lu
ZG93TW9yZVRoYW5PbmNlKSB8fCAhbV9pc1dpbmRvd2VkCisgICAgICAgIHx8IG1fbnBXaW5kb3cu
d2lkdGggPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0xKSB8fCBtX25wV2luZG93LmhlaWdodCA9
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEpKSB7CisgICAgICAgIG1fbnBXaW5kb3cud2lkdGgg
PSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dp
bmRvd1JlY3QuaGVpZ2h0KCk7CisgICAgfQorCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBs
dWdpblZpZXcodGhpcyk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1
ZSk7CisgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAm
bV9ucFdpbmRvdyk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmll
dzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFy
ZW50VmlzaWJsZShib29sIHZpc2libGUpCkBAIC0yMDEsMTQgKzM4MywyNSBAQCBOUEVycm9yIFBs
dWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMy
X3QgbGVuLCBjb25zdAogCiBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWVTdGF0aWMo
TlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCiB7Cisg
ICAgaWYgKCF2YWx1ZSB8fCAhcmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBz
d2l0Y2ggKHZhcmlhYmxlKSB7CiAgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyNpZiBkZWZpbmVkKFhQ
X1VOSVgpCisgICAgICAgICpzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9IDI7CisjZWxz
ZQogICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkgPSAwOworI2VuZGlmCiAg
ICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6CisjaWYgZGVmaW5lZChYUF9VTklYKQor
ICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyNlbHNlCiAgICAg
ICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxzZTsKKyNlbmRpZgogICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0y
MTgsNyArNDExLDExIEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhO
UE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgorI2lmIGRlZmluZWQoWFBf
VU5JWCkKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisjZWxz
ZQogICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisjZW5kaWYK
ICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
IApAQCAtMjM0LDggKzQzMSwxMiBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUo
TlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZQogCiAgICAgc3dp
dGNoICh2YXJpYWJsZSkgewogICAgIGNhc2UgTlBOVnhEaXNwbGF5OgorI2lmIGRlZmluZWQoWFBf
VU5JWCkKICAgICAgICAgKnN0YXRpY19jYXN0PHZvaWQqKj4odmFsdWUpID0gc3RhdGljX2Nhc3Q8
RGlzcGxheSo+KGVjb3JlX3hfZGlzcGxheV9nZXQoKSk7CiAgICAgICAgICpyZXN1bHQgPSBOUEVS
Ul9OT19FUlJPUjsKKyNlbHNlCisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9S
OworI2VuZGlmCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBOUE5WeHRBcHBDb250
ZXh0OgpAQCAtMzE0LDEyICs1MTUsMTMgQEAgdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVj
dChOUFJlY3QqIHJlY3QpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnZhbGlkYXRl
UmVjdChJbnRSZWN0KHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5s
ZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApKTsKKyAgICBpbnZhbGlkYXRlV2luZG93bGVz
c1BsdWdpblJlY3QoSW50UmVjdChyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0g
cmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKSk7CiB9CiAKLXZvaWQgUGx1Z2lu
Vmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCit2b2lkIFBsdWdpblZpZXc6
OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAvLyBUT0RPOiBvcHRpbWl6ZQorICAgIGludmFsaWRhdGUoKTsKIH0KIAogdm9pZCBQbHVnaW5W
aWV3Ojpmb3JjZVJlZHJhdygpCkBAIC0zMzIsMTIgKzUzNCw3MSBAQCBib29sIFBsdWdpblZpZXc6
OnBsYXRmb3JtU3RhcnQoKQogICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7CiAgICAgQVNTRVJUKG1f
c3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7CiAKKyNpZiBkZWZpbmVk
KFhQX1VOSVgpCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkgewor
ICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRz
WEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OworICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKyAgICB9Cisj
ZW5kaWYKKworICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOworI2lmIGRlZmluZWQoWFBfVU5JWCkK
KyAgICBtX3BsdWdpbkRpc3BsYXkgPSBzdGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNvcmVfeF9kaXNw
bGF5X2dldCgpKTsKKyNlbmRpZgorCisgICAgc2hvdygpOworCisjaWYgZGVmaW5lZChYUF9VTklY
KQorICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzID0gbmV3IE5QU2V0V2luZG93Q2Fs
bGJhY2tTdHJ1Y3QoKTsKKyAgICB3cy0+dHlwZSA9IDA7CisjZW5kaWYKKworICAgIG1fbnBXaW5k
b3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgIG1fbnBXaW5kb3cud2luZG93ID0g
MDsgLy8gTm90IHVzZWQ/CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgU2NyZWVuKiBzY3Jl
ZW4gPSBzdGF0aWNfY2FzdDxTY3JlZW4qPihlY29yZV94X2RlZmF1bHRfc2NyZWVuX2dldCgpKTsK
KyAgICBtX3Zpc3VhbCA9IHN0YXRpY19jYXN0PFZpc3VhbCo+KGVjb3JlX3hfZGVmYXVsdF92aXN1
YWxfZ2V0KG1fcGx1Z2luRGlzcGxheSwgc2NyZWVuKSk7CisgICAgbV9jb2xvcm1hcCA9IGVjb3Jl
X3hfZGVmYXVsdF9jb2xvcm1hcF9nZXQobV9wbHVnaW5EaXNwbGF5LCBzY3JlZW4pOworCisgICAg
d3MtPmRlcHRoID0gZWNvcmVfeF9kZWZhdWx0X2RlcHRoX2dldChtX3BsdWdpbkRpc3BsYXksIHNj
cmVlbik7CisgICAgd3MtPmRpc3BsYXkgPSBtX3BsdWdpbkRpc3BsYXk7CisgICAgd3MtPnZpc3Vh
bCA9IG1fdmlzdWFsOworICAgIHdzLT5jb2xvcm1hcCA9IG1fY29sb3JtYXA7CisKKyAgICBtX25w
V2luZG93LnggPSAwOworICAgIG1fbnBXaW5kb3cueSA9IDA7CisgICAgbV9ucFdpbmRvdy53aWR0
aCA9IC0xOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gLTE7CisjZWxzZQogICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIG1f
bnBXaW5kb3cud3NfaW5mbyA9IHdzOworI2VuZGlmCisKKyAgICAvLyBUT0RPIHJlbW92ZSBpbiBm
YXZvciBvZiBudWxsIGV2ZW50cywgbGlrZSBtYWMgcG9ydD8KKyAgICBpZiAoIShtX3BsdWdpbi0+
cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKQor
ICAgICAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsgLy8gd2FzOiBzZXROUFdpbmRvd0lmTmVlZGVk
KCksIGJ1dCB0aGlzIGRvZXNuJ3QgcHJvZHVjZSAweDAgcmVjdHMgYXQgZmlyc3QgZ28KKwogICAg
IHJldHVybiB0cnVlOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCiB7
CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIGlmIChtX2RyYXdhYmxlKSB7CisgICAgICAgIGVj
b3JlX3hfcGl4bWFwX2ZyZWUobV9kcmF3YWJsZSk7CisgICAgICAgIG1fZHJhd2FibGUgPSAwOwor
ICAgIH0KKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="109901"
          type_id="1"
          status="-"
          setter="leandro"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115161</attachid>
            <date>2011-11-15 07:09:43 -0800</date>
            <delta_ts>2012-01-02 06:17:57 -0800</delta_ts>
            <desc>EFL windowless plugins implementation</desc>
            <filename>efl_windowless_plugins.patch</filename>
            <type>text/plain</type>
            <size>16665</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">Y29tbWl0IDZlZDMxMTJhNTg4OGEzNzA0MmIyN2Q3NTBjZWVlNWJmYjU4ZjQxMjQKQXV0aG9yOiBN
YXJpdXN6IEdyemVnb3JjenlrIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CkRhdGU6ICAgVHVlIE5v
diAxNSAxNjowNjo1NSAyMDExICswMTAwCgogICAgW0VGTF0gV2luZG93bGVzcyBwbHVnaW5zIGlt
cGxlbWVudGF0aW9uCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDFlZTMzMmYuLjRkZTZlNGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMCBAQAorMjAxMS0xMS0xNSAgTWFyaXVzeiBHcnplZ29yY3p5ayAgPG1hcml1
c3ouZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBCdWcgNzA1OTIgLSBbRUZMXSBXaW5kb3dsZXNz
IHBsdWdpbnMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcwNTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gb2Ygd2luZG93bGVzcyBwbHVnaW5zIGluIEVG
TCBwb3J0LiBBZGRzIHBsdWdpbiBpbml0aWFsaXppbmcsIFhQaXhtYXAgY3JlYXRpbmcgYW5kIHBh
aW50aW5nLgorICAgICAgICBUZXN0ZWQgb24gVWJ1bnR1IHdpdGggZmxhc2hwbHVnaW4tbm9uZnJl
ZSBwYWNrYWdlIHdpdGggYWRkaXRpb25hbCBndGsgaW5pdGlhbGl6YXRpb24uCisKKyAgICAgICAg
KiBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRSb290V2luZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRGb2N1cyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhpZGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpwbGF0Zm9ybUdldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFs
aWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3kpOgorCiAyMDExLTExLTE0
ICBNYXJpdXN6IEdyemVnb3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgogCiAgICAgICAg
IEJ1ZyA0NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBlZmwgcG9ydApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAppbmRleCA1ODY4
MDJjLi4zNDE3MGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVn
aW5WaWV3RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3
RWZsLmNwcApAQCAtNDUsNiArNDUsMTIgQEAKICNpbmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVk
ZSA8RXZhcy5oPgogCisjaWYgZGVmaW5lZChYUF9VTklYKQorI2luY2x1ZGUgPFBsYXRmb3JtQ29u
dGV4dENhaXJvLmg+CisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxjYWlyby9jYWly
by14bGliLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwpAQCAtNTUsMTAgKzYxLDEwIEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0
Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIHNl
dENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKLSAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CisgICAgYm9vbCBhY2NlcHRl
ZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsK
IAogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwogICAgIFBsdWdpblZpZXc6OnNldEN1cnJl
bnRQbHVnaW5WaWV3KDApOwpAQCAtNzUsNiArODEsMTQgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5k
bGVGb2N1c091dEV2ZW50KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQorCitzdGF0aWMg
V2luZG93IGdldFJvb3RXaW5kb3coRnJhbWUqIHBhcmVudEZyYW1lKQoreworICAgIEV2YXNfT2Jq
ZWN0KiB3aWRnZXQgPSBwYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpOworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldCh3aWRn
ZXQpOworICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19n
ZXQoZXZhcyk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdpbmRvdz4oZWNvcmVfZXZhc193aW5k
b3dfZ2V0KGVjb3JlRXZhcykpOworfQogI2VuZGlmCiAKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
S2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikKQEAgLTExNiwxMSArMTMwLDQ0IEBAIHZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKIAogdm9pZCBQ
bHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBhcmVu
dCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19j
YXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKworICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9
IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKKwor
ICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZy
YW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXplKCkpOworICAgIG1fY2xpcFJl
Y3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dSZWN0
LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYgKG1fd2luZG93UmVjdCA9PSBvbGRX
aW5kb3dSZWN0ICYmIG1fY2xpcFJlY3QgPT0gb2xkQ2xpcFJlY3QpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisg
ICAgICAgIHJldHVybjsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBpZiAoIW1faXNXaW5k
b3dlZCAmJiAhbV93aW5kb3dSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9kcmF3YWJs
ZSkKKyAgICAgICAgICAgIGVjb3JlX3hfcGl4bWFwX2ZyZWUobV9kcmF3YWJsZSk7CisKKyAgICAg
ICAgbV9kcmF3YWJsZSA9IGVjb3JlX3hfcGl4bWFwX25ldyhnZXRSb290V2luZG93KG1fcGFyZW50
RnJhbWUuZ2V0KCkpLCAgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChOUFNldFdpbmRvd0NhbGxi
YWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT5kZXB0aCk7CisKKyAgICAgICAgZWNvcmVf
eF9zeW5jKCk7IC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXJ2ZXIga25vd3MgYWJvdXQgdGhlIERy
YXdhYmxlCisgICAgfQorI2VuZGlmCisKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CiB9CiAK
IHZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQogeworICAgIEFTU0VSVChw
bGF0Zm9ybVBsdWdpbldpZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOworCiAgICAgaWYgKGZv
Y3VzZWQpCiAgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9l
bGVtZW50KTsKIApAQCAtMTI5LDYgKzE3Niw4IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMo
Ym9vbCBmb2N1c2VkKQogCiB2b2lkIFBsdWdpblZpZXc6OnNob3coKQogeworICAgIEFTU0VSVChw
bGF0Zm9ybVBsdWdpbldpZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOworCiAgICAgc2V0U2Vs
ZlZpc2libGUodHJ1ZSk7CiAKICAgICBXaWRnZXQ6OnNob3coKTsKQEAgLTEzNiw2ICsxODUsOCBA
QCB2b2lkIFBsdWdpblZpZXc6OnNob3coKQogCiB2b2lkIFBsdWdpblZpZXc6OmhpZGUoKQogewor
ICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOwor
CiAgICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOwogCiAgICAgV2lkZ2V0OjpoaWRlKCk7CkBAIC0x
NDMsOCArMTk0LDkzIEBAIHZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCiAKIHZvaWQgUGx1Z2luVmll
dzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ewotICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1
cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpIHsKICAgICAgICAgcGFpbnRNaXNz
aW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKKworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAg
ICAgIHJldHVybjsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBpZiAoIW1fZHJhd2FibGUp
CisgICAgICAgIHJldHVybjsKKworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBzdGF0aWNfY2FzdDxE
aXNwbGF5Kj4oZWNvcmVfeF9kaXNwbGF5X2dldCgpKTsKKyAgICBjb25zdCBib29sIHNob3VsZFN5
bmNXaXRoWCA9IG1fcGx1Z2luRGlzcGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0gZGlzcGxheTsK
KworICAgIEludFJlY3QgZXhwb3NlZFJlY3QocmVjdCk7CisgICAgZXhwb3NlZFJlY3QuaW50ZXJz
ZWN0KGZyYW1lUmVjdCgpKTsKKyAgICBleHBvc2VkUmVjdC5tb3ZlKC1mcmFtZVJlY3QoKS54KCks
IC1mcmFtZVJlY3QoKS55KCkpOworCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZHJhd2Fi
bGVTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShkaXNwbGF5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZHJhd2FibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV92aXN1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV93aW5kb3dSZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93aW5kb3dSZWN0LmhlaWdo
dCgpKSk7CisKKyAgICBpZiAobV9pc1RyYW5zcGFyZW50KSB7CisgICAgICAgIC8vIElmIHdlIGhh
dmUgYSAzMiBiaXQgZHJhd2FibGUgYW5kIHRoZSBwbHVnaW4gd2FudHMgdHJhbnNwYXJlbmN5LAor
ICAgICAgICAvLyB3ZSdsbCBjbGVhciB0aGUgZXhwb3NlZCBhcmVhIHRvIHRyYW5zcGFyZW50IGZp
cnN0LiBPdGhlcndpc2UsCisgICAgICAgIC8vIHdlJ2QgZW5kIHVwIHdpdGgganVuayBpbiB0aGVy
ZSBmcm9tIHRoZSBsYXN0IHBhaW50LCBvciwgd29yc2UsCisgICAgICAgIC8vIHVuaW5pdGlhbGl6
ZWQgZGF0YS4KKyAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3Jl
YXRlKGRyYXdhYmxlU3VyZmFjZS5nZXQoKSkpOworCisgICAgICAgIGlmICghKGNhaXJvX3N1cmZh
Y2VfZ2V0X2NvbnRlbnQoZHJhd2FibGVTdXJmYWNlLmdldCgpKSAmIENBSVJPX0NPTlRFTlRfQUxQ
SEEpKSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGZha2UgaXQgd2hlbiB3ZSBkb24ndCBo
YXZlIGFuIGFscGhhIGNoYW5uZWwgb24gb3VyCisgICAgICAgICAgICAvLyBwaXhtYXAuIElmIHRo
YXQncyBub3QgcG9zc2libGUsIGF0IGxlYXN0IGNsZWFyIHRoZSB3aW5kb3cgdG8KKyAgICAgICAg
ICAgIC8vIGF2b2lkIGRyYXdpbmcgYXJ0aWZhY3RzLgorCisgICAgICAgICAgICAvLyBUaGlzIFdv
dWxkIG5vdCB3b3JrIHdpdGhvdXQgZG91YmxlIGJ1ZmZlcmluZywgYnV0IHdlIGFsd2F5cyB1c2Ug
aXQuCisgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIGNhaXJv
X2dldF9ncm91cF90YXJnZXQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tX3dpbmRvd1JlY3QueCgpLCAtbV93
aW5kb3dSZWN0LnkoKSk7CisgICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCks
IENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2Fp
cm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7CisKKyAgICAg
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLmdldCgpLCBleHBvc2VkUmVjdC54KCksIGV4cG9zZWRSZWN0
LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9z
ZWRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgY2Fpcm9fZmlsbChjci5nZXQoKSk7CisgICAgfQor
CisgICAgWEV2ZW50IHhldmVudDsKKyAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhFdmVu
dCkpOworICAgIFhHcmFwaGljc0V4cG9zZUV2ZW50JiBleHBvc2VFdmVudCA9IHhldmVudC54Z3Jh
cGhpY3NleHBvc2U7CisgICAgZXhwb3NlRXZlbnQudHlwZSA9IEdyYXBoaWNzRXhwb3NlOworICAg
IGV4cG9zZUV2ZW50LmRpc3BsYXkgPSBkaXNwbGF5OworICAgIGV4cG9zZUV2ZW50LmRyYXdhYmxl
ID0gbV9kcmF3YWJsZTsKKyAgICBleHBvc2VFdmVudC54ID0gZXhwb3NlZFJlY3QueCgpOworICAg
IGV4cG9zZUV2ZW50LnkgPSBleHBvc2VkUmVjdC55KCk7CisgICAgZXhwb3NlRXZlbnQud2lkdGgg
PSBleHBvc2VkUmVjdC54KCkgKyBleHBvc2VkUmVjdC53aWR0aCgpOyAvLyBmbGFzaCBidWc/IGl0
IHRoaW5rcyB3aWR0aCBpcyB0aGUgcmlnaHQgaW4gdHJhbnNwYXJlbnQgbW9kZQorICAgIGV4cG9z
ZUV2ZW50LmhlaWdodCA9IGV4cG9zZWRSZWN0LnkoKSArIGV4cG9zZWRSZWN0LmhlaWdodCgpOyAv
LyBmbGFzaCBidWc/IGl0IHRoaW5rcyBoZWlnaHQgaXMgdGhlIGJvdHRvbSBpbiB0cmFuc3BhcmVu
dCBtb2RlCisgICAgZGlzcGF0Y2hOUEV2ZW50KHhldmVudCk7CisgICAgaWYgKHNob3VsZFN5bmNX
aXRoWCkKKyAgICAgICAgZWNvcmVfeF9zeW5jKCk7IC8vIHN5bmMgY2hhbmdlcyBieSBwbHVnaW4K
KworICAgIGNhaXJvX3QqIGNhaXJvQ29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpOworICAgIGNhaXJvX3NhdmUoY2Fpcm9Db250ZXh0KTsKKworICAgIGNhaXJvX3NldF9z
b3VyY2Vfc3VyZmFjZShjYWlyb0NvbnRleHQsIGRyYXdhYmxlU3VyZmFjZS5nZXQoKSwgZnJhbWVS
ZWN0KCkueCgpLCBmcmFtZVJlY3QoKS55KCkpOworCisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhaXJv
Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVSZWN0KCkueCgpICsgZXhwb3NlZFJl
Y3QueCgpLCBmcmFtZVJlY3QoKS55KCkgKyBleHBvc2VkUmVjdC55KCksCisgICAgICAgICAgICAg
ICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICBj
YWlyb19jbGlwKGNhaXJvQ29udGV4dCk7CisKKyAgICBpZiAobV9pc1RyYW5zcGFyZW50KQorICAg
ICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY2Fpcm9Db250ZXh0LCBDQUlST19PUEVSQVRPUl9PVkVS
KTsKKyAgICBlbHNlCisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjYWlyb0NvbnRleHQsIENB
SVJPX09QRVJBVE9SX1NPVVJDRSk7CisKKyAgICBjYWlyb19wYWludChjYWlyb0NvbnRleHQpOwor
CisgICAgY2Fpcm9fcmVzdG9yZShjYWlyb0NvbnRleHQpOworI2VuZGlmIC8vIGRlZmluZWQoWFBf
VU5JWCkKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50
KQpAQCAtMTU1LDEzICsyOTEsNTggQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xs
VmlldyogcGFyZW50KQogICAgICAgICBpbml0KCk7CiB9CiAKLXZvaWQgUGx1Z2luVmlldzo6c2V0
TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFBsdWdpblZpZXc6OnNldE5Q
V2luZG93UmVjdChjb25zdCBJbnRSZWN0JikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IGlmICghbV9pc1dpbmRvd2VkKQorICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CiB9CiAK
IHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiB7CisgICAgaWYgKCFtX2lz
U3RhcnRlZCB8fCAhcGFyZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5k
b3cpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBwbHVnaW4gZGlkbid0IGxvYWQg
c3VjZXNzZnVsbHksIG5vIHBvaW50IGluIGNhbGxpbmcgc2V0d2luZG93CisgICAgaWYgKG1fc3Rh
dHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gT24gVW5peCwgb25seSBjYWxsIHBsdWdpbidzIHNldHdpbmRvdyBpZiBpdCdzIGZ1
bGwtcGFnZSBvciB3aW5kb3dlZAorICAgIGlmIChtX21vZGUgIT0gTlBfRlVMTCAmJiBtX21vZGUg
IT0gTlBfRU1CRUQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENoZWNrIGlmIHRoZSBwbGF0
Zm9ybVBsdWdpbldpZGdldCBzdGlsbCBleGlzdHMKKyAgICBpZiAobV9pc1dpbmRvd2VkICYmICFw
bGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3aWR0
aCBvciBoZWlnaHQgYXJlIG51bGwsIHNldCB0aGUgY2xpcFJlY3QgdG8gbnVsbCwgaW5kaWNhdGlu
ZyB0aGF0CisgICAgLy8gdGhlIHBsdWdpbiBpcyBub3QgdmlzaWJsZS9zY3JvbGxlZCBvdXQuCisg
ICAgaWYgKCFtX2NsaXBSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBtX25wV2luZG93LmNsaXBS
ZWN0LmxlZnQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gMDsKKyAg
ICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOworICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LmJvdHRvbSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2xpcHBpbmcgcmVj
dGFuZ2xlIG9mIHRoZSBwbHVnLWluOyB0aGUgb3JpZ2luIGlzIHRoZSB0b3AgbGVmdCBjb3JuZXIg
b2YgdGhlIGRyYXdhYmxlIG9yIHdpbmRvdy4KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5s
ZWZ0ID0gbV9ucFdpbmRvdy54ICsgbV9jbGlwUmVjdC54KCk7CisgICAgICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QudG9wID0gbV9ucFdpbmRvdy55ICsgbV9jbGlwUmVjdC55KCk7CisgICAgICAgIG1f
bnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX25wV2luZG93LnggKyBtX2NsaXBSZWN0LngoKSAr
IG1fY2xpcFJlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20g
PSBtX25wV2luZG93LnkgKyBtX2NsaXBSZWN0LnkoKSArIG1fY2xpcFJlY3QuaGVpZ2h0KCk7Cisg
ICAgfQorCisgICAgLy8gRkxBU0ggV09SS0FST1VORDogT25seSBzZXQgaW5pdGlhbGx5LiBNdWx0
aXBsZSBjYWxscyB0bworICAgIC8vIHNldE5QV2luZG93KCkgY2F1c2UgdGhlIHBsdWdpbiB0byBj
cmFzaCBpbiB3aW5kb3dlZCBtb2RlLgorICAgIGlmICghbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRh
aW5zKFBsdWdpblF1aXJrRG9udENhbGxTZXRXaW5kb3dNb3JlVGhhbk9uY2UpIHx8ICFtX2lzV2lu
ZG93ZWQKKyAgICAgICAgfHwgbV9ucFdpbmRvdy53aWR0aCA9PSBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oLTEpIHx8IG1fbnBXaW5kb3cuaGVpZ2h0ID09IHN0YXRpY19jYXN0PHVpbnQzMl90PigtMSkp
IHsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IG1fd2luZG93UmVjdC53aWR0aCgpOworICAg
ICAgICBtX25wV2luZG93LmhlaWdodCA9IG1fd2luZG93UmVjdC5oZWlnaHQoKTsKKyAgICB9CisK
KyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICBtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKyAgICBzZXRDYWxsaW5n
UGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsK
IH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAg
LTIwMSwxNCArMzgyLDI1IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxl
KFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0CiAKIGJvb2wgUGx1Z2lu
Vmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKIHsKKyAgICBpZiAoIXZhbHVlIHx8ICFyZXN1bHQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHN3aXRjaCAodmFyaWFibGUpIHsKICAgICBjYXNl
IE5QTlZUb29sa2l0OgorI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAgICAgKnN0YXRpY19jYXN0
PHVpbnQzMl90Kj4odmFsdWUpID0gMjsKKyNlbHNlCiAgICAgICAgICpzdGF0aWNfY2FzdDx1aW50
MzJfdCo+KHZhbHVlKSA9IDA7CisjZW5kaWYKICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VS
Uk9SOwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVk
Qm9vbDoKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wq
Pih2YWx1ZSkgPSB0cnVlOworI2Vsc2UKICAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZh
bHVlKSA9IGZhbHNlOworI2VuZGlmCiAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTIxOCw3ICs0MTAsMTEgQEAgYm9vbCBQbHVnaW5W
aWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSwgTlBFcnIKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIE5QTlZTdXBwb3J0
c1dpbmRvd2xlc3M6CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgICAgICAqc3RhdGljX2Nhc3Q8
TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyNlbHNlCiAgICAgICAgICpzdGF0aWNfY2FzdDxOUEJv
b2wqPih2YWx1ZSkgPSBmYWxzZTsKKyNlbmRpZgogICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9f
RVJST1I7CiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0yMzQsOCArNDMwLDEyIEBAIGJvb2wg
UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUsIE5QRXJyb3IqIHJlCiAKICAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CiAgICAgY2FzZSBO
UE5WeERpc3BsYXk6CisjaWYgZGVmaW5lZChYUF9VTklYKQogICAgICAgICAqc3RhdGljX2Nhc3Q8
dm9pZCoqPih2YWx1ZSkgPSBzdGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNvcmVfeF9kaXNwbGF5X2dl
dCgpKTsKICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworI2Vsc2UKKyAgICAgICAg
KnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisjZW5kaWYKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6CkBAIC0zMTQsMTIgKzUxNCwxMyBAQCB2
b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGludmFsaWRhdGVSZWN0KEludFJlY3QocmVjdC0+bGVmdCwgcmVj
dC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRv
cCkpOworICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChJbnRSZWN0KHJlY3QtPmxl
ZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSBy
ZWN0LT50b3ApKTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVn
aW9uIHJlZ2lvbikKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbikK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFRPRE86IG9wdGltaXplCisgICAgaW52
YWxpZGF0ZSgpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKQEAgLTMzMiwx
MiArNTMzLDcxIEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAgICAgQVNTRVJU
KG1faXNTdGFydGVkKTsKICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVk
U3VjY2Vzc2Z1bGx5KTsKIAorI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBpZiAobV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJl
bnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIHNldENhbGxp
bmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1
ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKKyAg
ICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KDApOworICAgIH0KKyNlbmRpZgorCisgICAgc2V0UGxhdGZvcm1XaWRn
ZXQoMCk7CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIG1fcGx1Z2luRGlzcGxheSA9IHN0YXRp
Y19jYXN0PERpc3BsYXkqPihlY29yZV94X2Rpc3BsYXlfZ2V0KCkpOworI2VuZGlmCisKKyAgICBz
aG93KCk7CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0
cnVjdCogd3MgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOworICAgIHdzLT50eXBl
ID0gMDsKKyNlbmRpZgorCisgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2Fi
bGU7CisgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOyAvLyBOb3QgdXNlZD8KKworI2lmIGRlZmlu
ZWQoWFBfVU5JWCkKKyAgICBTY3JlZW4qIHNjcmVlbiA9IHN0YXRpY19jYXN0PFNjcmVlbio+KGVj
b3JlX3hfZGVmYXVsdF9zY3JlZW5fZ2V0KCkpOworICAgIG1fdmlzdWFsID0gc3RhdGljX2Nhc3Q8
VmlzdWFsKj4oZWNvcmVfeF9kZWZhdWx0X3Zpc3VhbF9nZXQobV9wbHVnaW5EaXNwbGF5LCBzY3Jl
ZW4pKTsKKyAgICBtX2NvbG9ybWFwID0gZWNvcmVfeF9kZWZhdWx0X2NvbG9ybWFwX2dldChtX3Bs
dWdpbkRpc3BsYXksIHNjcmVlbik7CisKKyAgICB3cy0+ZGVwdGggPSBlY29yZV94X2RlZmF1bHRf
ZGVwdGhfZ2V0KG1fcGx1Z2luRGlzcGxheSwgc2NyZWVuKTsKKyAgICB3cy0+ZGlzcGxheSA9IG1f
cGx1Z2luRGlzcGxheTsKKyAgICB3cy0+dmlzdWFsID0gbV92aXN1YWw7CisgICAgd3MtPmNvbG9y
bWFwID0gbV9jb2xvcm1hcDsKKworICAgIG1fbnBXaW5kb3cueCA9IDA7CisgICAgbV9ucFdpbmRv
dy55ID0gMDsKKyAgICBtX25wV2luZG93LndpZHRoID0gLTE7CisgICAgbV9ucFdpbmRvdy5oZWln
aHQgPSAtMTsKKyNlbHNlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3N0YXR1cyA9IFBs
dWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisK
KyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CisjZW5k
aWYKKworICAgIC8vIFRPRE8gcmVtb3ZlIGluIGZhdm9yIG9mIG51bGwgZXZlbnRzLCBsaWtlIG1h
YyBwb3J0PworICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCisgICAgICAgIHVwZGF0ZVBsdWdpbldpZGdldCgp
OyAvLyB3YXM6IHNldE5QV2luZG93SWZOZWVkZWQoKSwgYnV0IHRoaXMgZG9lc24ndCBwcm9kdWNl
IDB4MCByZWN0cyBhdCBmaXJzdCBnbworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgUGx1
Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKIHsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAg
aWYgKG1fZHJhd2FibGUpIHsKKyAgICAgICAgZWNvcmVfeF9waXhtYXBfZnJlZShtX2RyYXdhYmxl
KTsKKyAgICAgICAgbV9kcmF3YWJsZSA9IDA7CisgICAgfQorI2VuZGlmCiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCBjM2Q0YTg0Li4xNzRjNzFhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMTEtMTUgIE1hcml1
c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0g
V2luZG93bGVzcyBwbHVnaW5zIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBlY29yZV94X2luaXQvc2h1dGRvd24gZG8gRHVt
cFJlbmRlcmVyVHJlZSB0byBzdXBwb3J0IHBsdWdpbnMgaW5pdGlhbGl6YXRpb24uCisKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAoaW5p
dEVmbCk6CisgICAgICAgIChzaHV0ZG93bkVmbCk6CisKIDIwMTEtMTEtMTQgIFRvciBBcm5lIFZl
c3Riw7ggIDx0b3IuYXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gTW92ZSB0
aGUgUXRXZWJLaXQgbW9kdWxlIGZpbGUgdG8gbWF0Y2ggdGhlIGxheW91dCBvZiBRdCdzIG1rc3Bl
Y3MKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IGJi
OGY3ZDIuLjZjOGUwY2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1w
UmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJU
cmVlLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPEVjb3JlLmg+CiAjaW5jbHVkZSA8
RWNvcmVfRXZhcy5oPgogI2luY2x1ZGUgPEVjb3JlX0ZpbGUuaD4KKyNpbmNsdWRlIDxFY29yZV9Y
Lmg+CiAjaW5jbHVkZSA8RWRqZS5oPgogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxmb250
Y29uZmlnL2ZvbnRjb25maWcuaD4KQEAgLTMyNSwxMSArMzI2LDE5IEBAIHN0YXRpYyBib29sIGlu
aXRFZmwoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgaWYgKCFlY29yZV94
X2luaXQoMCkpIHsKKyAgICAgICAgZWRqZV9zaHV0ZG93bigpOworICAgICAgICBlY29yZV9maWxl
X3NodXRkb3duKCk7CisgICAgICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKKyAgICAgICAgZXdr
X3NodXRkb3duKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHN0YXRpYyB2b2lkIHNodXRkb3duRWZsKCkKIHsKKyAgICBlY29yZV94X3NodXRk
b3duKCk7CiAgICAgZXdrX3NodXRkb3duKCk7CiAgICAgZWRqZV9zaHV0ZG93bigpOwogICAgIGVj
b3JlX2ZpbGVfc2h1dGRvd24oKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120877</attachid>
            <date>2012-01-02 06:17:57 -0800</date>
            <delta_ts>2012-02-23 08:39:45 -0800</delta_ts>
            <desc>EFL windowless plugins implementation</desc>
            <filename>efl_windowless_plugins.patch</filename>
            <type>text/plain</type>
            <size>16498</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNmViODMwLi43Y2U5YWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTItMDEtMDIgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5j
b20+CisKKyAgICAgICAgW0VGTF0gV2luZG93bGVzcyBwbHVnaW5zIGltcGxlbWVudGF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGF0
aW9uIG9mIHdpbmRvd2xlc3MgcGx1Z2lucyBpbiBFRkwgcG9ydC4gQWRkcyBwbHVnaW4gaW5pdGlh
bGl6aW5nLCBYUGl4bWFwIGNyZWF0aW5nIGFuZCBwYWludGluZy4KKyAgICAgICAgVGVzdGVkIG9u
IFVidW50dSB3aXRoIGZsYXNocGx1Z2luLW5vbmZyZWUgcGFja2FnZSB3aXRoIGFkZGl0aW9uYWwg
Z3RrIGluaXRpYWxpemF0aW9uLgorCisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luVmlld0Vm
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0Um9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWVTdGF0aWMp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
cGxhdGZvcm1EZXN0cm95KToKKwogMjAxMi0wMS0wMSAgQW5kcmVhcyBLbGluZyAgPGF3ZXNvbWVr
bGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQ2xlYXIgSFRNTENvbGxlY3Rpb24ncyBpbnRlcm5h
bCBjYWNoZSBvbiBjb25zdHJ1Y3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1Bs
dWdpblZpZXdFZmwuY3BwCmluZGV4IDU4NjgwMmMuLmEzNDYwZGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCkBAIC00NSw2ICs0NSwxMiBAQAogI2lu
Y2x1ZGUgPEVjb3JlX1guaD4KICNpbmNsdWRlIDxFdmFzLmg+CiAKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpCisjaW5jbHVkZSA8UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KKyNpbmNsdWRlIDxYMTEvWGxp
Yi5oPgorI2luY2x1ZGUgPGNhaXJvL2NhaXJvLXhsaWIuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC01NSwxMCArNjEsMTAg
QEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3
KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNl
KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAotICAgIGJv
b2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwg
JmV2ZW50KTsKKyAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5l
dmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwogCiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7
CiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CkBAIC03NSw2ICs4MSwx
NCBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CisKK3N0YXRpYyBXaW5kb3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFy
ZW50RnJhbWUpCit7CisgICAgRXZhc19PYmplY3QqIHdpZGdldCA9IHBhcmVudEZyYW1lLT52aWV3
KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisgICAgRXZhcyogZXZhcyA9
IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHdpZGdldCk7CisgICAgRWNvcmVfRXZhcyogZWNvcmVFdmFz
ID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V2luZG93PihlY29yZV9ldmFzX3dpbmRvd19nZXQoZWNvcmVFdmFzKSk7Cit9CiAjZW5kaWYK
IAogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKQpA
QCAtMTE2LDExICsxMzAsNDQgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1v
dXNlRXZlbnQqIGV2ZW50KQogCiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisg
ICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xk
Q2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFt
ZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSksIGZyYW1lUmVj
dCgpLnNpemUoKSk7CisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9j
bGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CisKKyAg
ICBpZiAobV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3QgJiYgbV9jbGlwUmVjdCA9PSBvbGRD
bGlwUmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0
YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgZGVmaW5lZChY
UF9VTklYKQorICAgIGlmICghbV9pc1dpbmRvd2VkICYmICFtX3dpbmRvd1JlY3QuaXNFbXB0eSgp
KSB7CisgICAgICAgIGlmIChtX2RyYXdhYmxlKQorICAgICAgICAgICAgZWNvcmVfeF9waXhtYXBf
ZnJlZShtX2RyYXdhYmxlKTsKKworICAgICAgICBtX2RyYXdhYmxlID0gZWNvcmVfeF9waXhtYXBf
bmV3KGdldFJvb3RXaW5kb3cobV9wYXJlbnRGcmFtZS5nZXQoKSksICBtX3dpbmRvd1JlY3Qud2lk
dGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbykt
PmRlcHRoKTsKKworICAgICAgICBlY29yZV94X3N5bmMoKTsgLy8gbWFrZSBzdXJlIHRoYXQgdGhl
IHNlcnZlciBrbm93cyBhYm91dCB0aGUgRHJhd2FibGUKKyAgICB9CisjZW5kaWYKKworICAgIHNl
dE5QV2luZG93SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29s
IGZvY3VzZWQpCiB7CisgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gcGxhdGZv
cm1XaWRnZXQoKSk7CisKICAgICBpZiAoZm9jdXNlZCkKICAgICAgICAgbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5zZXRGb2N1c2VkTm9kZShtX2VsZW1lbnQpOwogCkBAIC0xMjksNiArMTc2LDggQEAg
dm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCiAKIHZvaWQgUGx1Z2luVmll
dzo6c2hvdygpCiB7CisgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gcGxhdGZv
cm1XaWRnZXQoKSk7CisKICAgICBzZXRTZWxmVmlzaWJsZSh0cnVlKTsKIAogICAgIFdpZGdldDo6
c2hvdygpOwpAQCAtMTM2LDYgKzE4NSw4IEBAIHZvaWQgUGx1Z2luVmlldzo6c2hvdygpCiAKIHZv
aWQgUGx1Z2luVmlldzo6aGlkZSgpCiB7CisgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkgPT0gcGxhdGZvcm1XaWRnZXQoKSk7CisKICAgICBzZXRTZWxmVmlzaWJsZShmYWxzZSk7CiAK
ICAgICBXaWRnZXQ6OmhpZGUoKTsKQEAgLTE0Myw4ICsxOTQsOTMgQEAgdm9pZCBQbHVnaW5WaWV3
OjpoaWRlKCkKIAogdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICBp
ZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3Nm
dWxseSkgewogICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworCisg
ICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgZGVmaW5lZChYUF9V
TklYKQorICAgIGlmICghbV9kcmF3YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGlzcGxh
eSogZGlzcGxheSA9IHN0YXRpY19jYXN0PERpc3BsYXkqPihlY29yZV94X2Rpc3BsYXlfZ2V0KCkp
OworICAgIGNvbnN0IGJvb2wgc2hvdWxkU3luY1dpdGhYID0gbV9wbHVnaW5EaXNwbGF5ICYmIG1f
cGx1Z2luRGlzcGxheSAhPSBkaXNwbGF5OworCisgICAgSW50UmVjdCBleHBvc2VkUmVjdChyZWN0
KTsKKyAgICBleHBvc2VkUmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOworICAgIGV4cG9zZWRS
ZWN0Lm1vdmUoLWZyYW1lUmVjdCgpLngoKSwgLWZyYW1lUmVjdCgpLnkoKSk7CisKKyAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBkcmF3YWJsZVN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb194bGli
X3N1cmZhY2VfY3JlYXRlKGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kcmF3YWJsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Zpc3VhbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRvd1JlY3Qu
d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpKTsKKworICAgIGlmIChtX2lzVHJhbnNwYXJl
bnQpIHsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIDMyIGJpdCBkcmF3YWJsZSBhbmQgdGhlIHBs
dWdpbiB3YW50cyB0cmFuc3BhcmVuY3ksCisgICAgICAgIC8vIHdlJ2xsIGNsZWFyIHRoZSBleHBv
c2VkIGFyZWEgdG8gdHJhbnNwYXJlbnQgZmlyc3QuIE90aGVyd2lzZSwKKyAgICAgICAgLy8gd2Un
ZCBlbmQgdXAgd2l0aCBqdW5rIGluIHRoZXJlIGZyb20gdGhlIGxhc3QgcGFpbnQsIG9yLCB3b3Jz
ZSwKKyAgICAgICAgLy8gdW5pbml0aWFsaXplZCBkYXRhLgorICAgICAgICBSZWZQdHI8Y2Fpcm9f
dD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoZHJhd2FibGVTdXJmYWNlLmdldCgpKSk7CisK
KyAgICAgICAgaWYgKCEoY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChkcmF3YWJsZVN1cmZhY2Uu
Z2V0KCkpICYgQ0FJUk9fQ09OVEVOVF9BTFBIQSkpIHsKKyAgICAgICAgICAgIC8vIEF0dGVtcHQg
dG8gZmFrZSBpdCB3aGVuIHdlIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCBvbiBvdXIKKyAg
ICAgICAgICAgIC8vIHBpeG1hcC4gSWYgdGhhdCdzIG5vdCBwb3NzaWJsZSwgYXQgbGVhc3QgY2xl
YXIgdGhlIHdpbmRvdyB0bworICAgICAgICAgICAgLy8gYXZvaWQgZHJhd2luZyBhcnRpZmFjdHMu
CisKKyAgICAgICAgICAgIC8vIFRoaXMgV291bGQgbm90IHdvcmsgd2l0aG91dCBkb3VibGUgYnVm
ZmVyaW5nLCBidXQgd2UgYWx3YXlzIHVzZSBpdC4KKyAgICAgICAgICAgIGNhaXJvX3NldF9zb3Vy
Y2Vfc3VyZmFjZShjci5nZXQoKSwgY2Fpcm9fZ2V0X2dyb3VwX3RhcmdldChjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKyAgICAgICAgICAgIGNh
aXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJP
X09QRVJBVE9SX0NMRUFSKTsKKworICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IuZ2V0KCksIGV4
cG9zZWRSZWN0LngoKSwgZXhwb3NlZFJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBjYWly
b19maWxsKGNyLmdldCgpKTsKKyAgICB9CisKKyAgICBYRXZlbnQgeGV2ZW50OworICAgIG1lbXNl
dCgmeGV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7CisgICAgWEdyYXBoaWNzRXhwb3NlRXZlbnQm
IGV4cG9zZUV2ZW50ID0geGV2ZW50LnhncmFwaGljc2V4cG9zZTsKKyAgICBleHBvc2VFdmVudC50
eXBlID0gR3JhcGhpY3NFeHBvc2U7CisgICAgZXhwb3NlRXZlbnQuZGlzcGxheSA9IGRpc3BsYXk7
CisgICAgZXhwb3NlRXZlbnQuZHJhd2FibGUgPSBtX2RyYXdhYmxlOworICAgIGV4cG9zZUV2ZW50
LnggPSBleHBvc2VkUmVjdC54KCk7CisgICAgZXhwb3NlRXZlbnQueSA9IGV4cG9zZWRSZWN0Lnko
KTsKKyAgICBleHBvc2VFdmVudC53aWR0aCA9IGV4cG9zZWRSZWN0LngoKSArIGV4cG9zZWRSZWN0
LndpZHRoKCk7IC8vIGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIHdpZHRoIGlzIHRoZSByaWdodCBpbiB0
cmFuc3BhcmVudCBtb2RlCisgICAgZXhwb3NlRXZlbnQuaGVpZ2h0ID0gZXhwb3NlZFJlY3QueSgp
ICsgZXhwb3NlZFJlY3QuaGVpZ2h0KCk7IC8vIGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIGhlaWdodCBp
cyB0aGUgYm90dG9tIGluIHRyYW5zcGFyZW50IG1vZGUKKyAgICBkaXNwYXRjaE5QRXZlbnQoeGV2
ZW50KTsKKyAgICBpZiAoc2hvdWxkU3luY1dpdGhYKQorICAgICAgICBlY29yZV94X3N5bmMoKTsg
Ly8gc3luYyBjaGFuZ2VzIGJ5IHBsdWdpbgorCisgICAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0ID0g
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CisgICAgY2Fpcm9fc2F2ZShjYWlyb0Nv
bnRleHQpOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNhaXJvQ29udGV4dCwgZHJh
d2FibGVTdXJmYWNlLmdldCgpLCBmcmFtZVJlY3QoKS54KCksIGZyYW1lUmVjdCgpLnkoKSk7CisK
KyAgICBjYWlyb19yZWN0YW5nbGUoY2Fpcm9Db250ZXh0LAorICAgICAgICAgICAgICAgICAgICBm
cmFtZVJlY3QoKS54KCkgKyBleHBvc2VkUmVjdC54KCksIGZyYW1lUmVjdCgpLnkoKSArIGV4cG9z
ZWRSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhw
b3NlZFJlY3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX2NsaXAoY2Fpcm9Db250ZXh0KTsKKworICAg
IGlmIChtX2lzVHJhbnNwYXJlbnQpCisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjYWlyb0Nv
bnRleHQsIENBSVJPX09QRVJBVE9SX09WRVIpOworICAgIGVsc2UKKyAgICAgICAgY2Fpcm9fc2V0
X29wZXJhdG9yKGNhaXJvQ29udGV4dCwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKworICAgIGNh
aXJvX3BhaW50KGNhaXJvQ29udGV4dCk7CisKKyAgICBjYWlyb19yZXN0b3JlKGNhaXJvQ29udGV4
dCk7CisjZW5kaWYgLy8gZGVmaW5lZChYUF9VTklYKQogfQogCiB2b2lkIFBsdWdpblZpZXc6OnNl
dFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCkBAIC0xNTUsMTMgKzI5MSw1OCBAQCB2b2lkIFBs
dWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCiAgICAgICAgIGluaXQoKTsK
IH0KIAotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKK3ZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgIHNl
dE5QV2luZG93SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lm
TmVlZGVkKCkKIHsKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8ICFwYXJlbnQoKSB8fCAhbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
SWYgdGhlIHBsdWdpbiBkaWRuJ3QgbG9hZCBzdWNlc3NmdWxseSwgbm8gcG9pbnQgaW4gY2FsbGlu
ZyBzZXR3aW5kb3cKKyAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vz
c2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1
Z2luJ3Mgc2V0d2luZG93IGlmIGl0J3MgZnVsbC1wYWdlIG9yIHdpbmRvd2VkCisgICAgaWYgKG1f
bW9kZSAhPSBOUF9GVUxMICYmIG1fbW9kZSAhPSBOUF9FTUJFRCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gQ2hlY2sgaWYgdGhlIHBsYXRmb3JtUGx1Z2luV2lkZ2V0IHN0aWxsIGV4aXN0cwor
ICAgIGlmIChtX2lzV2luZG93ZWQgJiYgIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIElmIHdpZHRoIG9yIGhlaWdodCBhcmUgbnVsbCwgc2V0IHRoZSBj
bGlwUmVjdCB0byBudWxsLCBpbmRpY2F0aW5nIHRoYXQKKyAgICAvLyB0aGUgcGx1Z2luIGlzIG5v
dCB2aXNpYmxlL3Njcm9sbGVkIG91dC4KKyAgICBpZiAoIW1fY2xpcFJlY3QuaXNFbXB0eSgpKSB7
CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAgICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QucmlnaHQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9
IDA7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gMDsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBDbGlwcGluZyByZWN0YW5nbGUgb2YgdGhlIHBsdWctaW47IHRoZSBvcmln
aW4gaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZHJhd2FibGUgb3Igd2luZG93LgorICAg
ICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSBtX25wV2luZG93LnggKyBtX2NsaXBSZWN0
LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSBtX25wV2luZG93LnkgKyBt
X2NsaXBSZWN0LnkoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fbnBX
aW5kb3cueCArIG1fY2xpcFJlY3QueCgpICsgbV9jbGlwUmVjdC53aWR0aCgpOworICAgICAgICBt
X25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fbnBXaW5kb3cueSArIG1fY2xpcFJlY3QueSgp
ICsgbV9jbGlwUmVjdC5oZWlnaHQoKTsKKyAgICB9CisKKyAgICAvLyBGTEFTSCBXT1JLQVJPVU5E
OiBPbmx5IHNldCBpbml0aWFsbHkuIE11bHRpcGxlIGNhbGxzIHRvCisgICAgLy8gc2V0TlBXaW5k
b3coKSBjYXVzZSB0aGUgcGx1Z2luIHRvIGNyYXNoIGluIHdpbmRvd2VkIG1vZGUuCisgICAgaWYg
KCFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250Q2FsbFNldFdpbmRv
d01vcmVUaGFuT25jZSkgfHwgIW1faXNXaW5kb3dlZAorICAgICAgICB8fCBtX25wV2luZG93Lndp
ZHRoID09IHN0YXRpY19jYXN0PHVpbnQzMl90PigtMSkgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPT0g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0xKSkgeworICAgICAgICBtX25wV2luZG93LndpZHRoID0g
bV93aW5kb3dSZWN0LndpZHRoKCk7CisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5k
b3dSZWN0LmhlaWdodCgpOworICAgIH0KKworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUp
OworICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1f
bnBXaW5kb3cpOworICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVu
dFZpc2libGUoYm9vbCB2aXNpYmxlKQpAQCAtMjAxLDE0ICszODIsMjUgQEAgTlBFcnJvciBQbHVn
aW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90
IGxlbiwgY29uc3QKIAogYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5Q
TlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQogeworICAg
IGlmICghdmFsdWUgfHwgIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgc3dp
dGNoICh2YXJpYWJsZSkgewogICAgIGNhc2UgTlBOVlRvb2xraXQ6CisjaWYgZGVmaW5lZChYUF9V
TklYKQorICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkgPSAyOworI2Vsc2UK
ICAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gMDsKKyNlbmRpZgogICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOgorI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAg
ICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisjZWxzZQogICAgICAg
ICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisjZW5kaWYKICAgICAgICAg
KnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMjE4
LDcgKzQxMCwxMSBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWVTdGF0aWMoTlBO
VmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycgogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpCisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworI2Vsc2UK
ICAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworI2VuZGlmCiAg
ICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
QEAgLTIzNCw4ICs0MzAsMTIgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKE5Q
TlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmUKIAogICAgIHN3aXRj
aCAodmFyaWFibGUpIHsKICAgICBjYXNlIE5QTlZ4RGlzcGxheToKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpCiAgICAgICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVlKSA9IHN0YXRpY19jYXN0PERp
c3BsYXkqPihlY29yZV94X2Rpc3BsYXlfZ2V0KCkpOwogICAgICAgICAqcmVzdWx0ID0gTlBFUlJf
Tk9fRVJST1I7CisjZWxzZQorICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsK
KyNlbmRpZgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4
dDoKQEAgLTMxNCwxMiArNTE0LDEzIEBAIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3Qo
TlBSZWN0KiByZWN0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW52YWxpZGF0ZVJl
Y3QoSW50UmVjdChyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVm
dCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKSk7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQ
bHVnaW5SZWN0KEludFJlY3QocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJl
Y3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCkpOwogfQogCi12b2lkIFBsdWdpblZp
ZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQordm9pZCBQbHVnaW5WaWV3Ojpp
bnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
Ly8gRklYTUU6IE9wdGltaXphdGlvbiBuZWVkZWQgdG8gaW52YWxpZGF0ZSBvbmx5IGdpdmVuIHJl
Z2lvbiwgaW5zdGVhZCBvZiB3aG9sZSBwbHVnaW4uCisgICAgaW52YWxpZGF0ZSgpOwogfQogCiB2
b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKQEAgLTMzMiwxMiArNTMzLDcxIEBAIGJvb2wg
UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAgICAgQVNTRVJUKG1faXNTdGFydGVkKTsKICAg
ICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKIAor
I2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdl
dHZhbHVlKSB7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Cisg
ICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBW
cGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKKyAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbihmYWxzZSk7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDAp
OworICAgIH0KKyNlbmRpZgorCisgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7CisjaWYgZGVmaW5l
ZChYUF9VTklYKQorICAgIG1fcGx1Z2luRGlzcGxheSA9IHN0YXRpY19jYXN0PERpc3BsYXkqPihl
Y29yZV94X2Rpc3BsYXlfZ2V0KCkpOworI2VuZGlmCisKKyAgICBzaG93KCk7CisKKyNpZiBkZWZp
bmVkKFhQX1VOSVgpCisgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBuZXcgTlBT
ZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOworICAgIHdzLT50eXBlID0gMDsKKyNlbmRpZgorCisg
ICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgbV9ucFdpbmRv
dy53aW5kb3cgPSAwOyAvLyBOb3QgdXNlZD8KKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBT
Y3JlZW4qIHNjcmVlbiA9IHN0YXRpY19jYXN0PFNjcmVlbio+KGVjb3JlX3hfZGVmYXVsdF9zY3Jl
ZW5fZ2V0KCkpOworICAgIG1fdmlzdWFsID0gc3RhdGljX2Nhc3Q8VmlzdWFsKj4oZWNvcmVfeF9k
ZWZhdWx0X3Zpc3VhbF9nZXQobV9wbHVnaW5EaXNwbGF5LCBzY3JlZW4pKTsKKyAgICBtX2NvbG9y
bWFwID0gZWNvcmVfeF9kZWZhdWx0X2NvbG9ybWFwX2dldChtX3BsdWdpbkRpc3BsYXksIHNjcmVl
bik7CisKKyAgICB3cy0+ZGVwdGggPSBlY29yZV94X2RlZmF1bHRfZGVwdGhfZ2V0KG1fcGx1Z2lu
RGlzcGxheSwgc2NyZWVuKTsKKyAgICB3cy0+ZGlzcGxheSA9IG1fcGx1Z2luRGlzcGxheTsKKyAg
ICB3cy0+dmlzdWFsID0gbV92aXN1YWw7CisgICAgd3MtPmNvbG9ybWFwID0gbV9jb2xvcm1hcDsK
KworICAgIG1fbnBXaW5kb3cueCA9IDA7CisgICAgbV9ucFdpbmRvdy55ID0gMDsKKyAgICBtX25w
V2luZG93LndpZHRoID0gLTE7CisgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKKyNlbHNlCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExv
YWRQbHVnaW47CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpCisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CisjZW5kaWYKKworICAgIC8vIFRPRE8g
cmVtb3ZlIGluIGZhdm9yIG9mIG51bGwgZXZlbnRzLCBsaWtlIG1hYyBwb3J0PworICAgIGlmICgh
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5k
b3dDYWxsKSkpCisgICAgICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOyAvLyB3YXM6IHNldE5QV2lu
ZG93SWZOZWVkZWQoKSwgYnV0IHRoaXMgZG9lc24ndCBwcm9kdWNlIDB4MCByZWN0cyBhdCBmaXJz
dCBnbworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1E
ZXN0cm95KCkKIHsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgaWYgKG1fZHJhd2FibGUpIHsK
KyAgICAgICAgZWNvcmVfeF9waXhtYXBfZnJlZShtX2RyYXdhYmxlKTsKKyAgICAgICAgbV9kcmF3
YWJsZSA9IDA7CisgICAgfQorI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1ODdkMjk0
Li5mZmQ5ZWE1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDEtMDIgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxt
YXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0gV2luZG93bGVzcyBwbHVnaW5z
IGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MDU5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBlY29yZV94X2luaXQvc2h1dGRvd24gZG8gRHVtcFJlbmRlcmVyVHJlZSB0byBz
dXBwb3J0IHBsdWdpbnMgaW5pdGlhbGl6YXRpb24uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAoaW5pdEVmbCk6CisgICAgICAgIChz
aHV0ZG93bkVmbCk6CisKIDIwMTEtMTItMzEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KIAogICAgICAgICBNaW5pQnJvd3NlciBzZXRzIHRoZSBXS1ZpZXfigJlzIGZyYW1lIGluY29y
cmVjdGx5CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRy
ZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRl
eCBiYjhmN2QyLi42YzhlMGNjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
RHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVu
ZGVyVHJlZS5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxFY29yZS5oPgogI2luY2x1
ZGUgPEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxFY29yZV9GaWxlLmg+CisjaW5jbHVkZSA8RWNv
cmVfWC5oPgogI2luY2x1ZGUgPEVkamUuaD4KICNpbmNsdWRlIDxFdmFzLmg+CiAjaW5jbHVkZSA8
Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+CkBAIC0zMjUsMTEgKzMyNiwxOSBAQCBzdGF0aWMgYm9v
bCBpbml0RWZsKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIGlmICghZWNv
cmVfeF9pbml0KDApKSB7CisgICAgICAgIGVkamVfc2h1dGRvd24oKTsKKyAgICAgICAgZWNvcmVf
ZmlsZV9zaHV0ZG93bigpOworICAgICAgICBlY29yZV9ldmFzX3NodXRkb3duKCk7CisgICAgICAg
IGV3a19zaHV0ZG93bigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVy
biB0cnVlOwogfQogCiBzdGF0aWMgdm9pZCBzaHV0ZG93bkVmbCgpCiB7CisgICAgZWNvcmVfeF9z
aHV0ZG93bigpOwogICAgIGV3a19zaHV0ZG93bigpOwogICAgIGVkamVfc2h1dGRvd24oKTsKICAg
ICBlY29yZV9maWxlX3NodXRkb3duKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128482</attachid>
            <date>2012-02-23 08:39:45 -0800</date>
            <delta_ts>2013-02-27 06:21:42 -0800</delta_ts>
            <desc>EFL windowless plugins implementation</desc>
            <filename>efl_windowless_plugins.patch</filename>
            <type>text/plain</type>
            <size>16554</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1N2Q0NjhkLi5hYjgyZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEg
QEAKKzIwMTItMDItMjMgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5j
b20+CisKKyAgICAgICAgW0VGTF0gV2luZG93bGVzcyBwbHVnaW5zIGltcGxlbWVudGF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGF0
aW9uIG9mIHdpbmRvd2xlc3MgcGx1Z2lucyBpbiBFRkwgcG9ydC4gQWRkcyBwbHVnaW4gaW5pdGlh
bGl6aW5nLCBYUGl4bWFwIGNyZWF0aW5nIGFuZCBwYWludGluZy4KKyAgICAgICAgVGVzdGVkIHdp
dGggc2FtcGxlIHBsdWdpbiBhZGRlZCBhcyBhbiBhdHRhY2htZW50IHRvIHRoaXMgYnVnJ3Mgc2l0
ZSBvbiBidWd6aWxsYS4KKworICAgICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Um9vdFdpbmRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRO
UFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3Jt
R2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1H
ZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KToKKwogMjAxMi0wMi0yMiAgSWdvciBPbGl2
ZWlyYSAgPGlnb3Iub0BzaXNhLnNhbXN1bmcuY29tPgogCiAgICAgICAgIEV2ZXJ5IGNhbGwgdG8g
UmVuZGVyT2JqZWN0OjpzZXRBbmltYXRhYmxlU3R5bGUoKSBpdGVyYXRlcyB0aHJvdWdoIGFsbCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnM6IHBvdGVudGlhbGx5IE8oTl4yKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAppbmRleCA1ODY4MDJjLi5hMzQ2MGRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcApAQCAtNDUs
NiArNDUsMTIgQEAKICNpbmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVkZSA8RXZhcy5oPgogCisj
aWYgZGVmaW5lZChYUF9VTklYKQorI2luY2x1ZGUgPFBsYXRmb3JtQ29udGV4dENhaXJvLmg+Cisj
aW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxjYWlyby9jYWlyby14bGliLmg+CisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpA
QCAtNTUsMTAgKzYxLDEwIEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZl
bnQmIGV2ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIHNldENhbGxpbmdQbHVnaW4o
dHJ1ZSk7CiAKLSAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2
ZW50KG1faW5zdGFuY2UsICZldmVudCk7CisgICAgYm9vbCBhY2NlcHRlZCA9ICFtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKIAogICAgIHNldENhbGxp
bmdQbHVnaW4oZmFsc2UpOwogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDAp
OwpAQCAtNzUsNiArODEsMTQgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50
KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQorCitzdGF0aWMgV2luZG93IGdldFJvb3RX
aW5kb3coRnJhbWUqIHBhcmVudEZyYW1lKQoreworICAgIEV2YXNfT2JqZWN0KiB3aWRnZXQgPSBw
YXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwor
ICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldCh3aWRnZXQpOworICAgIEVjb3Jl
X0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdpbmRvdz4oZWNvcmVfZXZhc193aW5kb3dfZ2V0KGVjb3JlRXZh
cykpOworfQogI2VuZGlmCiAKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChL
ZXlib2FyZEV2ZW50KikKQEAgLTExNiwxMSArMTMwLDQ0IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKIAogdm9pZCBQbHVnaW5WaWV3Ojp1cGRh
dGVQbHVnaW5XaWRnZXQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFwYXJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmll
dygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+
KHBhcmVudCgpKTsKKworICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsK
KyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKKworICAgIG1fd2luZG93UmVj
dCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0
aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXplKCkpOworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlw
UmVjdCgpOworICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93
UmVjdC55KCkpOworCisgICAgaWYgKG1fd2luZG93UmVjdCA9PSBvbGRXaW5kb3dSZWN0ICYmIG1f
Y2xpcFJlY3QgPT0gb2xkQ2xpcFJlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0
YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybjsK
KworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBpZiAoIW1faXNXaW5kb3dlZCAmJiAhbV93aW5k
b3dSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9kcmF3YWJsZSkKKyAgICAgICAgICAg
IGVjb3JlX3hfcGl4bWFwX2ZyZWUobV9kcmF3YWJsZSk7CisKKyAgICAgICAgbV9kcmF3YWJsZSA9
IGVjb3JlX3hfcGl4bWFwX25ldyhnZXRSb290V2luZG93KG1fcGFyZW50RnJhbWUuZ2V0KCkpLCAg
bV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25w
V2luZG93LndzX2luZm8pLT5kZXB0aCk7CisKKyAgICAgICAgZWNvcmVfeF9zeW5jKCk7IC8vIG1h
a2Ugc3VyZSB0aGF0IHRoZSBzZXJ2ZXIga25vd3MgYWJvdXQgdGhlIERyYXdhYmxlCisgICAgfQor
I2VuZGlmCisKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmll
dzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQogeworICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOworCiAgICAgaWYgKGZvY3VzZWQpCiAgICAgICAg
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9lbGVtZW50KTsKIApAQCAt
MTI5LDYgKzE3Niw4IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQog
CiB2b2lkIFBsdWdpblZpZXc6OnNob3coKQogeworICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOworCiAgICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7
CiAKICAgICBXaWRnZXQ6OnNob3coKTsKQEAgLTEzNiw2ICsxODUsOCBAQCB2b2lkIFBsdWdpblZp
ZXc6OnNob3coKQogCiB2b2lkIFBsdWdpblZpZXc6OmhpZGUoKQogeworICAgIEFTU0VSVChwbGF0
Zm9ybVBsdWdpbldpZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOworCiAgICAgc2V0U2VsZlZp
c2libGUoZmFsc2UpOwogCiAgICAgV2lkZ2V0OjpoaWRlKCk7CkBAIC0xNDMsOCArMTk0LDkzIEBA
IHZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCiAKIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghbV9p
c1N0YXJ0ZWQpCisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpIHsKICAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihj
b250ZXh0LCByZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldE5QV2luZG93
SWZOZWVkZWQoKTsKKworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKwor
I2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBzdGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNvcmVf
eF9kaXNwbGF5X2dldCgpKTsKKyAgICBjb25zdCBib29sIHNob3VsZFN5bmNXaXRoWCA9IG1fcGx1
Z2luRGlzcGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0gZGlzcGxheTsKKworICAgIEludFJlY3Qg
ZXhwb3NlZFJlY3QocmVjdCk7CisgICAgZXhwb3NlZFJlY3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgp
KTsKKyAgICBleHBvc2VkUmVjdC5tb3ZlKC1mcmFtZVJlY3QoKS54KCksIC1mcmFtZVJlY3QoKS55
KCkpOworCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZHJhd2FibGVTdXJmYWNlID0gYWRv
cHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShkaXNwbGF5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZHJhd2FibGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92aXN1
YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV93aW5kb3dSZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV93aW5kb3dSZWN0LmhlaWdodCgpKSk7CisKKyAgICBp
ZiAobV9pc1RyYW5zcGFyZW50KSB7CisgICAgICAgIC8vIElmIHdlIGhhdmUgYSAzMiBiaXQgZHJh
d2FibGUgYW5kIHRoZSBwbHVnaW4gd2FudHMgdHJhbnNwYXJlbmN5LAorICAgICAgICAvLyB3ZSds
bCBjbGVhciB0aGUgZXhwb3NlZCBhcmVhIHRvIHRyYW5zcGFyZW50IGZpcnN0LiBPdGhlcndpc2Us
CisgICAgICAgIC8vIHdlJ2QgZW5kIHVwIHdpdGgganVuayBpbiB0aGVyZSBmcm9tIHRoZSBsYXN0
IHBhaW50LCBvciwgd29yc2UsCisgICAgICAgIC8vIHVuaW5pdGlhbGl6ZWQgZGF0YS4KKyAgICAg
ICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGRyYXdhYmxlU3Vy
ZmFjZS5nZXQoKSkpOworCisgICAgICAgIGlmICghKGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQo
ZHJhd2FibGVTdXJmYWNlLmdldCgpKSAmIENBSVJPX0NPTlRFTlRfQUxQSEEpKSB7CisgICAgICAg
ICAgICAvLyBBdHRlbXB0IHRvIGZha2UgaXQgd2hlbiB3ZSBkb24ndCBoYXZlIGFuIGFscGhhIGNo
YW5uZWwgb24gb3VyCisgICAgICAgICAgICAvLyBwaXhtYXAuIElmIHRoYXQncyBub3QgcG9zc2li
bGUsIGF0IGxlYXN0IGNsZWFyIHRoZSB3aW5kb3cgdG8KKyAgICAgICAgICAgIC8vIGF2b2lkIGRy
YXdpbmcgYXJ0aWZhY3RzLgorCisgICAgICAgICAgICAvLyBUaGlzIFdvdWxkIG5vdCB3b3JrIHdp
dGhvdXQgZG91YmxlIGJ1ZmZlcmluZywgYnV0IHdlIGFsd2F5cyB1c2UgaXQuCisgICAgICAgICAg
ICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIGNhaXJvX2dldF9ncm91cF90YXJn
ZXQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7
CisgICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9S
X1NPVVJDRSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7CisKKyAgICAgICAgY2Fpcm9fcmVjdGFu
Z2xlKGNyLmdldCgpLCBleHBvc2VkUmVjdC54KCksIGV4cG9zZWRSZWN0LnkoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgp
KTsKKyAgICAgICAgY2Fpcm9fZmlsbChjci5nZXQoKSk7CisgICAgfQorCisgICAgWEV2ZW50IHhl
dmVudDsKKyAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOworICAgIFhHcmFw
aGljc0V4cG9zZUV2ZW50JiBleHBvc2VFdmVudCA9IHhldmVudC54Z3JhcGhpY3NleHBvc2U7Cisg
ICAgZXhwb3NlRXZlbnQudHlwZSA9IEdyYXBoaWNzRXhwb3NlOworICAgIGV4cG9zZUV2ZW50LmRp
c3BsYXkgPSBkaXNwbGF5OworICAgIGV4cG9zZUV2ZW50LmRyYXdhYmxlID0gbV9kcmF3YWJsZTsK
KyAgICBleHBvc2VFdmVudC54ID0gZXhwb3NlZFJlY3QueCgpOworICAgIGV4cG9zZUV2ZW50Lnkg
PSBleHBvc2VkUmVjdC55KCk7CisgICAgZXhwb3NlRXZlbnQud2lkdGggPSBleHBvc2VkUmVjdC54
KCkgKyBleHBvc2VkUmVjdC53aWR0aCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyB3aWR0aCBp
cyB0aGUgcmlnaHQgaW4gdHJhbnNwYXJlbnQgbW9kZQorICAgIGV4cG9zZUV2ZW50LmhlaWdodCA9
IGV4cG9zZWRSZWN0LnkoKSArIGV4cG9zZWRSZWN0LmhlaWdodCgpOyAvLyBmbGFzaCBidWc/IGl0
IHRoaW5rcyBoZWlnaHQgaXMgdGhlIGJvdHRvbSBpbiB0cmFuc3BhcmVudCBtb2RlCisgICAgZGlz
cGF0Y2hOUEV2ZW50KHhldmVudCk7CisgICAgaWYgKHNob3VsZFN5bmNXaXRoWCkKKyAgICAgICAg
ZWNvcmVfeF9zeW5jKCk7IC8vIHN5bmMgY2hhbmdlcyBieSBwbHVnaW4KKworICAgIGNhaXJvX3Qq
IGNhaXJvQ29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgIGNh
aXJvX3NhdmUoY2Fpcm9Db250ZXh0KTsKKworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShj
YWlyb0NvbnRleHQsIGRyYXdhYmxlU3VyZmFjZS5nZXQoKSwgZnJhbWVSZWN0KCkueCgpLCBmcmFt
ZVJlY3QoKS55KCkpOworCisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhaXJvQ29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgZnJhbWVSZWN0KCkueCgpICsgZXhwb3NlZFJlY3QueCgpLCBmcmFtZVJl
Y3QoKS55KCkgKyBleHBvc2VkUmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgIGV4cG9zZWRS
ZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19jbGlwKGNhaXJv
Q29udGV4dCk7CisKKyAgICBpZiAobV9pc1RyYW5zcGFyZW50KQorICAgICAgICBjYWlyb19zZXRf
b3BlcmF0b3IoY2Fpcm9Db250ZXh0LCBDQUlST19PUEVSQVRPUl9PVkVSKTsKKyAgICBlbHNlCisg
ICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjYWlyb0NvbnRleHQsIENBSVJPX09QRVJBVE9SX1NP
VVJDRSk7CisKKyAgICBjYWlyb19wYWludChjYWlyb0NvbnRleHQpOworCisgICAgY2Fpcm9fcmVz
dG9yZShjYWlyb0NvbnRleHQpOworI2VuZGlmIC8vIGRlZmluZWQoWFBfVU5JWCkKIH0KIAogdm9p
ZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQpAQCAtMTU1LDEzICsy
OTEsNTggQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQog
ICAgICAgICBpbml0KCk7CiB9CiAKLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25z
dCBJbnRSZWN0JikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICghbV9pc1dpbmRv
d2VkKQorICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmll
dzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiB7CisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCAhcGFy
ZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIElmIHRoZSBwbHVnaW4gZGlkbid0IGxvYWQgc3VjZXNzZnVsbHksIG5v
IHBvaW50IGluIGNhbGxpbmcgc2V0d2luZG93CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0
YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT24gVW5p
eCwgb25seSBjYWxsIHBsdWdpbidzIHNldHdpbmRvdyBpZiBpdCdzIGZ1bGwtcGFnZSBvciB3aW5k
b3dlZAorICAgIGlmIChtX21vZGUgIT0gTlBfRlVMTCAmJiBtX21vZGUgIT0gTlBfRU1CRUQpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIENoZWNrIGlmIHRoZSBwbGF0Zm9ybVBsdWdpbldpZGdl
dCBzdGlsbCBleGlzdHMKKyAgICBpZiAobV9pc1dpbmRvd2VkICYmICFwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3aWR0aCBvciBoZWlnaHQgYXJl
IG51bGwsIHNldCB0aGUgY2xpcFJlY3QgdG8gbnVsbCwgaW5kaWNhdGluZyB0aGF0CisgICAgLy8g
dGhlIHBsdWdpbiBpcyBub3QgdmlzaWJsZS9zY3JvbGxlZCBvdXQuCisgICAgaWYgKCFtX2NsaXBS
ZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOwor
ICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gMDsKKyAgICAgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC50b3AgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9
IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2xpcHBpbmcgcmVjdGFuZ2xlIG9mIHRoZSBw
bHVnLWluOyB0aGUgb3JpZ2luIGlzIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGRyYXdhYmxl
IG9yIHdpbmRvdy4KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gbV9ucFdpbmRv
dy54ICsgbV9jbGlwUmVjdC54KCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0g
bV9ucFdpbmRvdy55ICsgbV9jbGlwUmVjdC55KCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJl
Y3QucmlnaHQgPSBtX25wV2luZG93LnggKyBtX2NsaXBSZWN0LngoKSArIG1fY2xpcFJlY3Qud2lk
dGgoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX25wV2luZG93Lnkg
KyBtX2NsaXBSZWN0LnkoKSArIG1fY2xpcFJlY3QuaGVpZ2h0KCk7CisgICAgfQorCisgICAgLy8g
RkxBU0ggV09SS0FST1VORDogT25seSBzZXQgaW5pdGlhbGx5LiBNdWx0aXBsZSBjYWxscyB0bwor
ICAgIC8vIHNldE5QV2luZG93KCkgY2F1c2UgdGhlIHBsdWdpbiB0byBjcmFzaCBpbiB3aW5kb3dl
ZCBtb2RlLgorICAgIGlmICghbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJr
RG9udENhbGxTZXRXaW5kb3dNb3JlVGhhbk9uY2UpIHx8ICFtX2lzV2luZG93ZWQKKyAgICAgICAg
fHwgbV9ucFdpbmRvdy53aWR0aCA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEpIHx8IG1fbnBX
aW5kb3cuaGVpZ2h0ID09IHN0YXRpY19jYXN0PHVpbnQzMl90PigtMSkpIHsKKyAgICAgICAgbV9u
cFdpbmRvdy53aWR0aCA9IG1fd2luZG93UmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93
LmhlaWdodCA9IG1fd2luZG93UmVjdC5oZWlnaHQoKTsKKyAgICB9CisKKyAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKKyAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93
KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
KyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKIH0KIAogdm9pZCBQbHVn
aW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKQEAgLTIwMSwxNCArMzgyLDI1
IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYg
YnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0CiAKIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1H
ZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3Iq
IHJlc3VsdCkKIHsKKyAgICBpZiAoIXZhbHVlIHx8ICFyZXN1bHQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKwogICAgIHN3aXRjaCAodmFyaWFibGUpIHsKICAgICBjYXNlIE5QTlZUb29sa2l0Ogor
I2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFs
dWUpID0gMjsKKyNlbHNlCiAgICAgICAgICpzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9
IDA7CisjZW5kaWYKICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKKyNpZiBkZWZp
bmVkKFhQX1VOSVgpCisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVl
OworI2Vsc2UKICAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOwor
I2VuZGlmCiAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKQEAgLTIxOCw3ICs0MTAsMTEgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdl
dFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnIKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6Cisj
aWYgZGVmaW5lZChYUF9VTklYKQorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUp
ID0gdHJ1ZTsKKyNlbHNlCiAgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBm
YWxzZTsKKyNlbmRpZgogICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CiAgICAgICAg
IHJldHVybiB0cnVlOwogCkBAIC0yMzQsOCArNDMwLDEyIEBAIGJvb2wgUGx1Z2luVmlldzo6cGxh
dGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3Iq
IHJlCiAKICAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CiAgICAgY2FzZSBOUE5WeERpc3BsYXk6Cisj
aWYgZGVmaW5lZChYUF9VTklYKQogICAgICAgICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkg
PSBzdGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNvcmVfeF9kaXNwbGF5X2dldCgpKTsKICAgICAgICAg
KnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworI2Vsc2UKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJS
X0dFTkVSSUNfRVJST1I7CisjZW5kaWYKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNl
IE5QTlZ4dEFwcENvbnRleHQ6CkBAIC0zMTQsMTIgKzUxNCwxMyBAQCB2b2lkIFBsdWdpblZpZXc6
OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGludmFsaWRhdGVSZWN0KEludFJlY3QocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5y
aWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCkpOworICAgIGludmFs
aWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChJbnRSZWN0KHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwg
cmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApKTsKIH0K
IAotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKK3Zv
aWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbikKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIC8vIEZJWE1FOiBPcHRpbWl6YXRpb24gbmVlZGVkIHRvIGludmFsaWRh
dGUgb25seSBnaXZlbiByZWdpb24sIGluc3RlYWQgb2Ygd2hvbGUgcGx1Z2luLgorICAgIGludmFs
aWRhdGUoKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCkBAIC0zMzIsMTIg
KzUzMyw3MSBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQogICAgIEFTU0VSVCht
X2lzU3RhcnRlZCk7CiAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1
Y2Nlc3NmdWxseSk7CiAKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgaWYgKG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkgeworICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50
UGx1Z2luVmlldyh0aGlzKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBzZXRDYWxsaW5n
UGx1Z2luKHRydWUpOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUo
bV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CisgICAg
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJy
ZW50UGx1Z2luVmlldygwKTsKKyAgICB9CisjZW5kaWYKKworICAgIHNldFBsYXRmb3JtV2lkZ2V0
KDApOworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBtX3BsdWdpbkRpc3BsYXkgPSBzdGF0aWNf
Y2FzdDxEaXNwbGF5Kj4oZWNvcmVfeF9kaXNwbGF5X2dldCgpKTsKKyNlbmRpZgorCisgICAgc2hv
dygpOworCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1
Y3QqIHdzID0gbmV3IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKKyAgICB3cy0+dHlwZSA9
IDA7CisjZW5kaWYKKworICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxl
OworICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/CisKKyNpZiBkZWZpbmVk
KFhQX1VOSVgpCisgICAgU2NyZWVuKiBzY3JlZW4gPSBzdGF0aWNfY2FzdDxTY3JlZW4qPihlY29y
ZV94X2RlZmF1bHRfc2NyZWVuX2dldCgpKTsKKyAgICBtX3Zpc3VhbCA9IHN0YXRpY19jYXN0PFZp
c3VhbCo+KGVjb3JlX3hfZGVmYXVsdF92aXN1YWxfZ2V0KG1fcGx1Z2luRGlzcGxheSwgc2NyZWVu
KSk7CisgICAgbV9jb2xvcm1hcCA9IGVjb3JlX3hfZGVmYXVsdF9jb2xvcm1hcF9nZXQobV9wbHVn
aW5EaXNwbGF5LCBzY3JlZW4pOworCisgICAgd3MtPmRlcHRoID0gZWNvcmVfeF9kZWZhdWx0X2Rl
cHRoX2dldChtX3BsdWdpbkRpc3BsYXksIHNjcmVlbik7CisgICAgd3MtPmRpc3BsYXkgPSBtX3Bs
dWdpbkRpc3BsYXk7CisgICAgd3MtPnZpc3VhbCA9IG1fdmlzdWFsOworICAgIHdzLT5jb2xvcm1h
cCA9IG1fY29sb3JtYXA7CisKKyAgICBtX25wV2luZG93LnggPSAwOworICAgIG1fbnBXaW5kb3cu
eSA9IDA7CisgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0
ID0gLTE7CisjZWxzZQogICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9zdGF0dXMgPSBQbHVn
aW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCisj
aWYgZGVmaW5lZChYUF9VTklYKQorICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzOworI2VuZGlm
CisKKyAgICAvLyBUT0RPIHJlbW92ZSBpbiBmYXZvciBvZiBudWxsIGV2ZW50cywgbGlrZSBtYWMg
cG9ydD8KKyAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtE
ZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKQorICAgICAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsg
Ly8gd2FzOiBzZXROUFdpbmRvd0lmTmVlZGVkKCksIGJ1dCB0aGlzIGRvZXNuJ3QgcHJvZHVjZSAw
eDAgcmVjdHMgYXQgZmlyc3QgZ28KKwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFBsdWdp
blZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCiB7CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIGlm
IChtX2RyYXdhYmxlKSB7CisgICAgICAgIGVjb3JlX3hfcGl4bWFwX2ZyZWUobV9kcmF3YWJsZSk7
CisgICAgICAgIG1fZHJhd2FibGUgPSAwOworICAgIH0KKyNlbmRpZgogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggZmUzNDcyMC4uZDA5ZWY4YSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTAyLTIzICBNYXJpdXN6
IEdyemVnb3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIFdp
bmRvd2xlc3MgcGx1Z2lucyBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZWNvcmVfeF9pbml0L3NodXRkb3duIGRvIER1bXBS
ZW5kZXJlclRyZWUgdG8gc3VwcG9ydCBwbHVnaW5zIGluaXRpYWxpemF0aW9uLgorCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKGluaXRF
ZmwpOgorICAgICAgICAoc2h1dGRvd25FZmwpOgorCiAyMDEyLTAyLTIzICBQaGlsaXBwZSBOb3Jt
YW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBGdWxsU2NyZWVuIHNp
Z25hbHMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJl
ZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4
IGJiOGY3ZDIuLjZjOGUwY2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9E
dW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5k
ZXJUcmVlLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPEVjb3JlLmg+CiAjaW5jbHVk
ZSA8RWNvcmVfRXZhcy5oPgogI2luY2x1ZGUgPEVjb3JlX0ZpbGUuaD4KKyNpbmNsdWRlIDxFY29y
ZV9YLmg+CiAjaW5jbHVkZSA8RWRqZS5oPgogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxm
b250Y29uZmlnL2ZvbnRjb25maWcuaD4KQEAgLTMyNSwxMSArMzI2LDE5IEBAIHN0YXRpYyBib29s
IGluaXRFZmwoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgaWYgKCFlY29y
ZV94X2luaXQoMCkpIHsKKyAgICAgICAgZWRqZV9zaHV0ZG93bigpOworICAgICAgICBlY29yZV9m
aWxlX3NodXRkb3duKCk7CisgICAgICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKKyAgICAgICAg
ZXdrX3NodXRkb3duKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIHNodXRkb3duRWZsKCkKIHsKKyAgICBlY29yZV94X3No
dXRkb3duKCk7CiAgICAgZXdrX3NodXRkb3duKCk7CiAgICAgZWRqZV9zaHV0ZG93bigpOwogICAg
IGVjb3JlX2ZpbGVfc2h1dGRvd24oKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>128485</attachid>
            <date>2012-02-23 08:55:36 -0800</date>
            <delta_ts>2012-02-23 08:55:36 -0800</delta_ts>
            <desc>Source of sample windowless plugin based on XPixmap</desc>
            <filename>TestPlugin.tar</filename>
            <type>application/x-tar</type>
            <size>102400</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">bnBhcGkuaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1
MAAwMDAxNzUwADAwMDAwMTQ0MDAwADExNzIxNDY3MzcxADAxMTM0NgAgMAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAG1hcmlvAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAbWFyaW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABu
cGZ1bmN0aW9ucy5oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUw
ADAwMDE3NTAAMDAwMDAwMjcyMDEAMTE3MjE0NTcxMTMAMDEyNjAxACAwAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAbWFyaW8AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABtYXJpbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8q
CiAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
KgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgog
KgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgogKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCiAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCiAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQogKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICovCiNpZm5kZWYgTlBGVU5DVElP
TlNfSAojZGVmaW5lIE5QRlVOQ1RJT05TX0gKCgojaW5jbHVkZSAibnBydW50aW1lLmgiCiNpbmNs
dWRlICJucGFwaS5oIgoKI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIgewojZW5kaWYKCiNp
ZiBkZWZpbmVkKFhQX1dJTikKI2RlZmluZSBFWFBPUlRFRF9DQUxMQkFDSyhfdHlwZSwgX25hbWUp
IF90eXBlIChfX3N0ZGNhbGwgKiBfbmFtZSkKI2Vsc2UKI2RlZmluZSBFWFBPUlRFRF9DQUxMQkFD
SyhfdHlwZSwgX25hbWUpIF90eXBlICgqIF9uYW1lKQojZW5kaWYKCnR5cGVkZWYgTlBFcnJvciAo
Kk5QTl9HZXRVUkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwg
Y29uc3QgY2hhciogd2luZG93LCB2b2lkKiBub3RpZnlEYXRhKTsKdHlwZWRlZiBOUEVycm9yICgq
TlBOX1Bvc3RVUkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwg
Y29uc3QgY2hhciogd2luZG93LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29s
IGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpOwp0eXBlZGVmIE5QRXJyb3IgKCpOUE5fUmVxdWVzdFJl
YWRQcm9jUHRyKShOUFN0cmVhbSogc3RyZWFtLCBOUEJ5dGVSYW5nZSogcmFuZ2VMaXN0KTsKdHlw
ZWRlZiBOUEVycm9yICgqTlBOX05ld1N0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBNSU1F
VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB3aW5kb3csIE5QU3RyZWFtKiogc3RyZWFtKTsKdHlwZWRl
ZiBpbnQzMl90ICgqTlBOX1dyaXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3Ry
ZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKTsKdHlwZWRlZiBOUEVycm9yICgqTlBOX0Rl
c3Ryb3lTdHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVh
c29uIHJlYXNvbik7CnR5cGVkZWYgdm9pZCAoKk5QTl9TdGF0dXNQcm9jUHRyKShOUFAgaW5zdGFu
Y2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwp0eXBlZGVmIGNvbnN0IGNoYXIqKCpOUE5fVXNlckFn
ZW50UHJvY1B0cikoTlBQIGluc3RhbmNlKTsKdHlwZWRlZiB2b2lkKiAoKk5QTl9NZW1BbGxvY1By
b2NQdHIpKHVpbnQzMl90IHNpemUpOwp0eXBlZGVmIHZvaWQgKCpOUE5fTWVtRnJlZVByb2NQdHIp
KHZvaWQqIHB0cik7CnR5cGVkZWYgdWludDMyX3QgKCpOUE5fTWVtRmx1c2hQcm9jUHRyKSh1aW50
MzJfdCBzaXplKTsKdHlwZWRlZiB2b2lkICgqTlBOX1JlbG9hZFBsdWdpbnNQcm9jUHRyKShOUEJv
b2wgcmVsb2FkUGFnZXMpOwp0eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VmFsdWVQcm9jUHRyKShO
UFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICpyZXRfdmFsdWUpOwp0eXBl
ZGVmIE5QRXJyb3IgKCpOUE5fU2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUFZhcmlh
YmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSk7CnR5cGVkZWYgdm9pZCAoKk5QTl9JbnZhbGlkYXRl
UmVjdFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBSZWN0ICpyZWN0KTsKdHlwZWRlZiB2b2lkICgq
TlBOX0ludmFsaWRhdGVSZWdpb25Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUmVnaW9uIHJlZ2lv
bik7CnR5cGVkZWYgdm9pZCAoKk5QTl9Gb3JjZVJlZHJhd1Byb2NQdHIpKE5QUCBpbnN0YW5jZSk7
CnR5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRVUkxQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93KTsKdHlwZWRlZiBOUEVycm9yICgqTlBOX1Bv
c3RVUkxQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciog
d2luZG93LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpOwp0eXBl
ZGVmIHZvaWQqICgqTlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKdHlwZWRlZiB2b2lkKiAo
Kk5QTl9HZXRKYXZhUGVlclByb2NQdHIpKE5QUCBpbnN0YW5jZSk7CnR5cGVkZWYgdm9pZCAgKCpO
UE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVu
YWJsZWQpOwp0eXBlZGVmIHZvaWQgICgqTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIp
KE5QUCBpbnN0YW5jZSk7CnR5cGVkZWYgdm9pZCAoKk5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGxQ
cm9jUHRyKShOUFAgbnBwLCB2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqdXNlckRhdGEpOwp0
eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VmFsdWVGb3JVUkxQcm9jUHRyKShOUFAgbnBwLCBOUE5V
UkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQz
Ml90KiBsZW4pOwp0eXBlZGVmIE5QRXJyb3IgKCpOUE5fU2V0VmFsdWVGb3JVUkxQcm9jUHRyKShO
UFAgbnBwLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB2YWx1ZSwgdWludDMyX3QgbGVuKTsKdHlwZWRlZiBOUEVycm9yICgqTlBOX0dldEF1dGhl
bnRpY2F0aW9uSW5mb1Byb2NQdHIpKE5QUCBucHAsIGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25z
dCBjaGFyKiBob3N0LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hh
ciAqcmVhbG0sIGNoYXIqKiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4sIGNoYXIqKiBwYXNzd29y
ZCwgdWludDMyX3QqIHBsZW4pOwoKdHlwZWRlZiB1aW50MzJfdCAoKk5QTl9TY2hlZHVsZVRpbWVy
UHJvY1B0cikoTlBQIG5wcCwgdWludDMyX3QgaW50ZXJ2YWwsIE5QQm9vbCByZXBlYXQsIHZvaWQg
KCp0aW1lckZ1bmMpKE5QUCBucHAsIHVpbnQzMl90IHRpbWVySUQpKTsKdHlwZWRlZiB2b2lkICgq
TlBOX1Vuc2NoZWR1bGVUaW1lclByb2NQdHIpKE5QUCBucHAsIHVpbnQzMl90IHRpbWVySUQpOwp0
eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9wVXBDb250ZXh0TWVudVByb2NQdHIpKE5QUCBpbnN0YW5j
ZSwgTlBNZW51KiBtZW51KTsKdHlwZWRlZiBOUEJvb2wgKCpOUE5fQ29udmVydFBvaW50UHJvY1B0
cikoTlBQIG5wcCwgZG91YmxlIHNvdXJjZVgsIGRvdWJsZSBzb3VyY2VZLCBOUENvb3JkaW5hdGVT
cGFjZSBzb3VyY2VTcGFjZSwgZG91YmxlICpkZXN0WCwgZG91YmxlICpkZXN0WSwgTlBDb29yZGlu
YXRlU3BhY2UgZGVzdFNwYWNlKTsKCnR5cGVkZWYgdm9pZCAoKk5QTl9SZWxlYXNlVmFyaWFudFZh
bHVlUHJvY1B0cikgKE5QVmFyaWFudCAqdmFyaWFudCk7Cgp0eXBlZGVmIE5QSWRlbnRpZmllciAo
Kk5QTl9HZXRTdHJpbmdJZGVudGlmaWVyUHJvY1B0cikgKGNvbnN0IE5QVVRGOCAqbmFtZSk7CnR5
cGVkZWYgdm9pZCAoKk5QTl9HZXRTdHJpbmdJZGVudGlmaWVyc1Byb2NQdHIpIChjb25zdCBOUFVU
RjggKipuYW1lcywgaW50MzJfdCBuYW1lQ291bnQsIE5QSWRlbnRpZmllciAqaWRlbnRpZmllcnMp
Owp0eXBlZGVmIE5QSWRlbnRpZmllciAoKk5QTl9HZXRJbnRJZGVudGlmaWVyUHJvY1B0cikgKGlu
dDMyX3QgaW50aWQpOwp0eXBlZGVmIGludDMyX3QgKCpOUE5fSW50RnJvbUlkZW50aWZpZXJQcm9j
UHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwp0eXBlZGVmIGJvb2wgKCpOUE5fSWRlbnRp
ZmllcklzU3RyaW5nUHJvY1B0cikgKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKdHlwZWRlZiBO
UFVURjggKigqTlBOX1VURjhGcm9tSWRlbnRpZmllclByb2NQdHIpIChOUElkZW50aWZpZXIgaWRl
bnRpZmllcik7Cgp0eXBlZGVmIE5QT2JqZWN0KiAoKk5QTl9DcmVhdGVPYmplY3RQcm9jUHRyKSAo
TlBQLCBOUENsYXNzICphQ2xhc3MpOwp0eXBlZGVmIE5QT2JqZWN0KiAoKk5QTl9SZXRhaW5PYmpl
Y3RQcm9jUHRyKSAoTlBPYmplY3QgKm9iaik7CnR5cGVkZWYgdm9pZCAoKk5QTl9SZWxlYXNlT2Jq
ZWN0UHJvY1B0cikgKE5QT2JqZWN0ICpvYmopOwp0eXBlZGVmIGJvb2wgKCpOUE5fSW52b2tlUHJv
Y1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBj
b25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3Vs
dCk7CnR5cGVkZWYgYm9vbCAoKk5QTl9JbnZva2VEZWZhdWx0UHJvY1B0cikgKE5QUCBucHAsIE5Q
T2JqZWN0ICpvYmosIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdW5zaWduZWQgYXJnQ291bnQsIE5Q
VmFyaWFudCAqcmVzdWx0KTsKdHlwZWRlZiBib29sICgqTlBOX0V2YWx1YXRlUHJvY1B0cikgKE5Q
UCBucHAsIE5QT2JqZWN0ICpvYmosIE5QU3RyaW5nICpzY3JpcHQsIE5QVmFyaWFudCAqcmVzdWx0
KTsKdHlwZWRlZiBib29sICgqTlBOX0dldFByb3BlcnR5UHJvY1B0cikgKE5QUCBucHAsIE5QT2Jq
ZWN0ICpvYmosIE5QSWRlbnRpZmllciAgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQgKnJlc3VsdCk7
CnR5cGVkZWYgYm9vbCAoKk5QTl9TZXRQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVj
dCAqb2JqLCBOUElkZW50aWZpZXIgIHByb3BlcnR5TmFtZSwgY29uc3QgTlBWYXJpYW50ICp2YWx1
ZSk7CnR5cGVkZWYgYm9vbCAoKk5QTl9IYXNQcm9wZXJ0eVByb2NQdHIpIChOUFAsIE5QT2JqZWN0
ICpucG9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7CnR5cGVkZWYgYm9vbCAoKk5QTl9I
YXNNZXRob2RQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIg
bWV0aG9kTmFtZSk7CnR5cGVkZWYgYm9vbCAoKk5QTl9SZW1vdmVQcm9wZXJ0eVByb2NQdHIpIChO
UFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKdHlwZWRl
ZiB2b2lkICgqTlBOX1NldEV4Y2VwdGlvblByb2NQdHIpIChOUE9iamVjdCAqb2JqLCBjb25zdCBO
UFVURjggKm1lc3NhZ2UpOwp0eXBlZGVmIGJvb2wgKCpOUE5fRW51bWVyYXRlUHJvY1B0cikgKE5Q
UCBucHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyICoqaWRlbnRpZmllciwgdWludDMy
X3QgKmNvdW50KTsKdHlwZWRlZiBib29sICgqTlBOX0NvbnN0cnVjdFByb2NQdHIpKE5QUCBucHAs
IE5QT2JqZWN0KiBvYmosIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdWludDMyX3QgYXJnQ291bnQs
IE5QVmFyaWFudCAqcmVzdWx0KTsgICAgCgp0eXBlZGVmIE5QRXJyb3IgKCpOUFBfTmV3UHJvY1B0
cikoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAgaW5zdGFuY2UsIHVpbnQxNl90IG1vZGUsIGlu
dDE2X3QgYXJnYywgY2hhciogYXJnbltdLCBjaGFyKiBhcmd2W10sIE5QU2F2ZWREYXRhKiBzYXZl
ZCk7CnR5cGVkZWYgTlBFcnJvciAoKk5QUF9EZXN0cm95UHJvY1B0cikoTlBQIGluc3RhbmNlLCBO
UFNhdmVkRGF0YSoqIHNhdmUpOwp0eXBlZGVmIE5QRXJyb3IgKCpOUFBfU2V0V2luZG93UHJvY1B0
cikoTlBQIGluc3RhbmNlLCBOUFdpbmRvdyogd2luZG93KTsKdHlwZWRlZiBOUEVycm9yICgqTlBQ
X05ld1N0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBOUFN0cmVh
bSogc3RyZWFtLCBOUEJvb2wgc2Vla2FibGUsIHVpbnQxNl90KiBzdHlwZSk7CnR5cGVkZWYgTlBF
cnJvciAoKk5QUF9EZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSog
c3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwp0eXBlZGVmIHZvaWQgKCpOUFBfU3RyZWFtQXNGaWxl
UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiBmbmFt
ZSk7CnR5cGVkZWYgaW50MzJfdCAoKk5QUF9Xcml0ZVJlYWR5UHJvY1B0cikoTlBQIGluc3RhbmNl
LCBOUFN0cmVhbSogc3RyZWFtKTsKdHlwZWRlZiBpbnQzMl90ICgqTlBQX1dyaXRlUHJvY1B0ciko
TlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBs
ZW4sIHZvaWQqIGJ1ZmZlcik7CnR5cGVkZWYgdm9pZCAoKk5QUF9QcmludFByb2NQdHIpKE5QUCBp
bnN0YW5jZSwgTlBQcmludCogcGxhdGZvcm1QcmludCk7CnR5cGVkZWYgaW50MTZfdCAoKk5QUF9I
YW5kbGVFdmVudFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOwp0eXBlZGVmIHZv
aWQgKCpOUFBfVVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkws
IE5QUmVhc29uIHJlYXNvbiwgdm9pZCogbm90aWZ5RGF0YSk7CnR5cGVkZWYgTlBFcnJvciAoKk5Q
UF9HZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZv
aWQgKnJldF92YWx1ZSk7CnR5cGVkZWYgTlBFcnJvciAoKk5QUF9TZXRWYWx1ZVByb2NQdHIpKE5Q
UCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKdHlwZWRlZiBO
UEJvb2wgKCpOUFBfR290Rm9jdXNQdHIpKE5QUCBpbnN0YW5jZSwgTlBGb2N1c0RpcmVjdGlvbiBk
aXJlY3Rpb24pOwp0eXBlZGVmIHZvaWQgKCpOUFBfTG9zdEZvY3VzUHRyKShOUFAgaW5zdGFuY2Up
Owp0eXBlZGVmIHZvaWQgKCpOUFBfVVJMUmVkaXJlY3ROb3RpZnlQdHIpKE5QUCBpbnN0YW5jZSwg
Y29uc3QgY2hhciogdXJsLCBpbnQzMl90IHN0YXR1cywgdm9pZCogbm90aWZ5RGF0YSk7CnR5cGVk
ZWYgTlBFcnJvciAoKk5QUF9DbGVhclNpdGVEYXRhUHRyKShjb25zdCBjaGFyKiBzaXRlLCB1aW50
NjRfdCBmbGFncywgdWludDY0X3QgbWF4QWdlKTsKdHlwZWRlZiBjaGFyKiogKCpOUFBfR2V0U2l0
ZXNXaXRoRGF0YVB0cikodm9pZCk7Cgp0eXBlZGVmIHZvaWQgKigqTlBQX0dldEphdmFDbGFzc1By
b2NQdHIpKHZvaWQpOwp0eXBlZGVmIHZvaWQqIEpSSUdsb2JhbFJlZjsgLy9ub3QgdXNpbmcgdGhp
cyByaWdodCBub3cKCnR5cGVkZWYgc3RydWN0IF9OUE5ldHNjYXBlRnVuY3MgewogICAgdWludDE2
X3Qgc2l6ZTsKICAgIHVpbnQxNl90IHZlcnNpb247CiAgICAKICAgIE5QTl9HZXRVUkxQcm9jUHRy
IGdldHVybDsKICAgIE5QTl9Qb3N0VVJMUHJvY1B0ciBwb3N0dXJsOwogICAgTlBOX1JlcXVlc3RS
ZWFkUHJvY1B0ciByZXF1ZXN0cmVhZDsKICAgIE5QTl9OZXdTdHJlYW1Qcm9jUHRyIG5ld3N0cmVh
bTsKICAgIE5QTl9Xcml0ZVByb2NQdHIgd3JpdGU7CiAgICBOUE5fRGVzdHJveVN0cmVhbVByb2NQ
dHIgZGVzdHJveXN0cmVhbTsKICAgIE5QTl9TdGF0dXNQcm9jUHRyIHN0YXR1czsKICAgIE5QTl9V
c2VyQWdlbnRQcm9jUHRyIHVhZ2VudDsKICAgIE5QTl9NZW1BbGxvY1Byb2NQdHIgbWVtYWxsb2M7
CiAgICBOUE5fTWVtRnJlZVByb2NQdHIgbWVtZnJlZTsKICAgIE5QTl9NZW1GbHVzaFByb2NQdHIg
bWVtZmx1c2g7CiAgICBOUE5fUmVsb2FkUGx1Z2luc1Byb2NQdHIgcmVsb2FkcGx1Z2luczsKICAg
IE5QTl9HZXRKYXZhRW52UHJvY1B0ciBnZXRKYXZhRW52OwogICAgTlBOX0dldEphdmFQZWVyUHJv
Y1B0ciBnZXRKYXZhUGVlcjsKICAgIE5QTl9HZXRVUkxOb3RpZnlQcm9jUHRyIGdldHVybG5vdGlm
eTsKICAgIE5QTl9Qb3N0VVJMTm90aWZ5UHJvY1B0ciBwb3N0dXJsbm90aWZ5OwogICAgTlBOX0dl
dFZhbHVlUHJvY1B0ciBnZXR2YWx1ZTsKICAgIE5QTl9TZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7
CiAgICBOUE5fSW52YWxpZGF0ZVJlY3RQcm9jUHRyIGludmFsaWRhdGVyZWN0OwogICAgTlBOX0lu
dmFsaWRhdGVSZWdpb25Qcm9jUHRyIGludmFsaWRhdGVyZWdpb247CiAgICBOUE5fRm9yY2VSZWRy
YXdQcm9jUHRyIGZvcmNlcmVkcmF3OwogICAgCiAgICBOUE5fR2V0U3RyaW5nSWRlbnRpZmllclBy
b2NQdHIgZ2V0c3RyaW5naWRlbnRpZmllcjsKICAgIE5QTl9HZXRTdHJpbmdJZGVudGlmaWVyc1By
b2NQdHIgZ2V0c3RyaW5naWRlbnRpZmllcnM7CiAgICBOUE5fR2V0SW50SWRlbnRpZmllclByb2NQ
dHIgZ2V0aW50aWRlbnRpZmllcjsKICAgIE5QTl9JZGVudGlmaWVySXNTdHJpbmdQcm9jUHRyIGlk
ZW50aWZpZXJpc3N0cmluZzsKICAgIE5QTl9VVEY4RnJvbUlkZW50aWZpZXJQcm9jUHRyIHV0Zjhm
cm9taWRlbnRpZmllcjsKICAgIE5QTl9JbnRGcm9tSWRlbnRpZmllclByb2NQdHIgaW50ZnJvbWlk
ZW50aWZpZXI7CiAgICBOUE5fQ3JlYXRlT2JqZWN0UHJvY1B0ciBjcmVhdGVvYmplY3Q7CiAgICBO
UE5fUmV0YWluT2JqZWN0UHJvY1B0ciByZXRhaW5vYmplY3Q7CiAgICBOUE5fUmVsZWFzZU9iamVj
dFByb2NQdHIgcmVsZWFzZW9iamVjdDsKICAgIE5QTl9JbnZva2VQcm9jUHRyIGludm9rZTsKICAg
IE5QTl9JbnZva2VEZWZhdWx0UHJvY1B0ciBpbnZva2VEZWZhdWx0OwogICAgTlBOX0V2YWx1YXRl
UHJvY1B0ciBldmFsdWF0ZTsKICAgIE5QTl9HZXRQcm9wZXJ0eVByb2NQdHIgZ2V0cHJvcGVydHk7
CiAgICBOUE5fU2V0UHJvcGVydHlQcm9jUHRyIHNldHByb3BlcnR5OwogICAgTlBOX1JlbW92ZVBy
b3BlcnR5UHJvY1B0ciByZW1vdmVwcm9wZXJ0eTsKICAgIE5QTl9IYXNQcm9wZXJ0eVByb2NQdHIg
aGFzcHJvcGVydHk7CiAgICBOUE5fSGFzTWV0aG9kUHJvY1B0ciBoYXNtZXRob2Q7CiAgICBOUE5f
UmVsZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIgcmVsZWFzZXZhcmlhbnR2YWx1ZTsKICAgIE5QTl9T
ZXRFeGNlcHRpb25Qcm9jUHRyIHNldGV4Y2VwdGlvbjsKICAgIE5QTl9QdXNoUG9wdXBzRW5hYmxl
ZFN0YXRlUHJvY1B0ciBwdXNocG9wdXBzZW5hYmxlZHN0YXRlOwogICAgTlBOX1BvcFBvcHVwc0Vu
YWJsZWRTdGF0ZVByb2NQdHIgcG9wcG9wdXBzZW5hYmxlZHN0YXRlOwogICAgTlBOX0VudW1lcmF0
ZVByb2NQdHIgZW51bWVyYXRlOwogICAgTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbFByb2NQdHIg
cGx1Z2ludGhyZWFkYXN5bmNjYWxsOwogICAgTlBOX0NvbnN0cnVjdFByb2NQdHIgY29uc3RydWN0
OwogICAgTlBOX0dldFZhbHVlRm9yVVJMUHJvY1B0ciBnZXR2YWx1ZWZvcnVybDsKICAgIE5QTl9T
ZXRWYWx1ZUZvclVSTFByb2NQdHIgc2V0dmFsdWVmb3J1cmw7CiAgICBOUE5fR2V0QXV0aGVudGlj
YXRpb25JbmZvUHJvY1B0ciBnZXRhdXRoZW50aWNhdGlvbmluZm87CiAgICBOUE5fU2NoZWR1bGVU
aW1lclByb2NQdHIgc2NoZWR1bGV0aW1lcjsKICAgIE5QTl9VbnNjaGVkdWxlVGltZXJQcm9jUHRy
IHVuc2NoZWR1bGV0aW1lcjsKICAgIE5QTl9Qb3BVcENvbnRleHRNZW51UHJvY1B0ciBwb3B1cGNv
bnRleHRtZW51OwogICAgTlBOX0NvbnZlcnRQb2ludFByb2NQdHIgY29udmVydHBvaW50Owp9IE5Q
TmV0c2NhcGVGdW5jczsKCnR5cGVkZWYgc3RydWN0IF9OUFBsdWdpbkZ1bmNzIHsKICAgIHVpbnQx
Nl90IHNpemU7CiAgICB1aW50MTZfdCB2ZXJzaW9uOwogICAgTlBQX05ld1Byb2NQdHIgbmV3cDsK
ICAgIE5QUF9EZXN0cm95UHJvY1B0ciBkZXN0cm95OwogICAgTlBQX1NldFdpbmRvd1Byb2NQdHIg
c2V0d2luZG93OwogICAgTlBQX05ld1N0cmVhbVByb2NQdHIgbmV3c3RyZWFtOwogICAgTlBQX0Rl
c3Ryb3lTdHJlYW1Qcm9jUHRyIGRlc3Ryb3lzdHJlYW07CiAgICBOUFBfU3RyZWFtQXNGaWxlUHJv
Y1B0ciBhc2ZpbGU7CiAgICBOUFBfV3JpdGVSZWFkeVByb2NQdHIgd3JpdGVyZWFkeTsKICAgIE5Q
UF9Xcml0ZVByb2NQdHIgd3JpdGU7CiAgICBOUFBfUHJpbnRQcm9jUHRyIHByaW50OwogICAgTlBQ
X0hhbmRsZUV2ZW50UHJvY1B0ciBldmVudDsKICAgIE5QUF9VUkxOb3RpZnlQcm9jUHRyIHVybG5v
dGlmeTsKICAgIEpSSUdsb2JhbFJlZiBqYXZhQ2xhc3M7CiAgICBOUFBfR2V0VmFsdWVQcm9jUHRy
IGdldHZhbHVlOwogICAgTlBQX1NldFZhbHVlUHJvY1B0ciBzZXR2YWx1ZTsKICAgIE5QUF9Hb3RG
b2N1c1B0ciBnb3Rmb2N1czsKICAgIE5QUF9Mb3N0Rm9jdXNQdHIgbG9zdGZvY3VzOwogICAgTlBQ
X1VSTFJlZGlyZWN0Tm90aWZ5UHRyIHVybHJlZGlyZWN0bm90aWZ5OwogICAgTlBQX0NsZWFyU2l0
ZURhdGFQdHIgY2xlYXJzaXRlZGF0YTsKICAgIE5QUF9HZXRTaXRlc1dpdGhEYXRhUHRyIGdldHNp
dGVzd2l0aGRhdGE7Cn0gTlBQbHVnaW5GdW5jczsKCnR5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0so
TlBFcnJvciwgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKShOUFBsdWdpbkZ1bmNzKik7CnR5cGVk
ZWYgRVhQT1JURURfQ0FMTEJBQ0sodm9pZCwgTlBQX1NodXRkb3duUHJvY1B0cikodm9pZCk7ICAg
IAoKI2lmIGRlZmluZWQoWFBfTUFDT1NYKQp0eXBlZGVmIHZvaWQgKCpCUF9DcmVhdGVQbHVnaW5N
SU1FVHlwZXNQcmVmZXJlbmNlc0Z1bmNQdHIpKHZvaWQpOwp0eXBlZGVmIE5QRXJyb3IgKCpNYWlu
RnVuY1B0cikoTlBOZXRzY2FwZUZ1bmNzKiwgTlBQbHVnaW5GdW5jcyosIE5QUF9TaHV0ZG93blBy
b2NQdHIqKTsKI2VuZGlmCgojaWYgZGVmaW5lZChYUF9VTklYKQp0eXBlZGVmIEVYUE9SVEVEX0NB
TExCQUNLKE5QRXJyb3IsIE5QX0luaXRpYWxpemVGdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqLCBO
UFBsdWdpbkZ1bmNzKik7CnR5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soY29uc3QgY2hhciosIE5Q
X0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIpKHZvaWQpOwojZWxzZQp0eXBlZGVmIEVYUE9SVEVE
X0NBTExCQUNLKE5QRXJyb3IsIE5QX0luaXRpYWxpemVGdW5jUHRyKShOUE5ldHNjYXBlRnVuY3Mq
KTsKI2VuZGlmCgojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYKCiNlbmRpZgoAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5wcnVudGltZS5oAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDA0MDAxMAAxMTcy
MTQ1NzExMwAwMTIyNDUAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAdXN0YXIgIABtYXJpbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1hcmlvAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDog
NDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogNCAtKi0gKi8KLyoKICog
Q29weXJpZ2h0IChjKSAyMDA0LCBBcHBsZSBDb21wdXRlciwgSW5jLiBhbmQgVGhlIE1vemlsbGEg
Rm91bmRhdGlvbi4gCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIAogKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQogKiBtZXQ6CiAqIAogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CiAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICogMy4gTmVpdGhlciB0aGUgbmFtZXMg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG9yIFRoZSBNb3ppbGxhCiAqIEZvdW5k
YXRpb24gKCJNb3ppbGxhIikgbm9yIHRoZSBuYW1lcyBvZiB0aGVpciBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQKICogdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQKICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgogKiAKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSwgTU9aSUxMQSBBTkQg
VEhFSVIgQ09OVFJJQlVUT1JTICJBUwogKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKICogVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCiAqIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUsIE1P
WklMTEEgT1IKICogVEhFSVIgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAogKiBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CiAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YKICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKICogTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCiAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgog
Ki8KI2lmbmRlZiBfTlBfUlVOVElNRV9IXwojZGVmaW5lIF9OUF9SVU5USU1FX0hfCgojaW5jbHVk
ZSAibnBhcGkuaCIKCiNpZmRlZiBfX2NwbHVzcGx1cwpleHRlcm4gIkMiIHsKI2VuZGlmCgovKgog
ICAgVGhpcyBBUEkgaXMgdXNlZCB0byBmYWNpbGl0YXRlIGJpbmRpbmcgY29kZSB3cml0dGVuIGlu
IEMgdG8gc2NyaXB0CiAgICBvYmplY3RzLiAgVGhlIEFQSSBpbiB0aGlzIGhlYWRlciBkb2VzIG5v
dCBhc3N1bWUgdGhlIHByZXNlbmNlIG9mIGEKICAgIHVzZXIgYWdlbnQuICBUaGF0IGlzLCBpdCBj
YW4gYmUgdXNlZCB0byBiaW5kIEMgY29kZSB0byBzY3JpcHRpbmcKICAgIGVudmlyb25tZW50cyBv
dXRzaWRlIG9mIHRoZSBjb250ZXh0IG9mIGEgdXNlciBhZ2VudC4KICAgIAogICAgSG93ZXZlciwg
dGhlIG5vcm1hbCB1c2Ugb2YgdGhlIHRoaXMgQVBJIGlzIGluIHRoZSBjb250ZXh0IG9mIGEKICAg
IHNjcmlwdGluZyBlbnZpcm9ubWVudCBydW5uaW5nIGluIGEgYnJvd3NlciBvciBvdGhlciB1c2Vy
IGFnZW50LgogICAgSW4gcGFydGljdWxhciBpdCBpcyB1c2VkIHRvIHN1cHBvcnQgdGhlIGV4dGVu
ZGVkIE5ldHNjYXBlCiAgICBzY3JpcHQtYWJpbGl0eSBBUEkgZm9yIHBsdWdpbnMgKE5QLVNBUCku
ICBOUC1TQVAgaXMgYW4gZXh0ZW5zaW9uCiAgICBvZiB0aGUgTmV0c2NhcGUgcGx1Z2luIEFQSS4g
IEFzIHN1Y2ggd2UgaGF2ZSBhZG9wdGVkIHRoZSB1c2Ugb2YKICAgIHRoZSAiTlAiIHByZWZpeCBm
b3IgdGhpcyBBUEkuCgogICAgVGhlIGZvbGxvd2luZyBOUHtOfFB9VmFyaWFibGVzIHdlcmUgYWRk
ZWQgdG8gdGhlIE5ldHNjYXBlIHBsdWdpbgogICAgQVBJIChpbiBucGFwaS5oKToKCiAgICBOUE5W
V2luZG93TlBPYmplY3QKICAgIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3QKICAgIE5QUFZwbHVn
aW5TY3JpcHRhYmxlTlBPYmplY3QKCiAgICBUaGVzZSB2YXJpYWJsZXMgYXJlIGV4cG9zZWQgdGhy
b3VnaCBOUE5fR2V0VmFsdWUoKSBhbmQKICAgIE5QUF9HZXRWYWx1ZSgpIChyZXNwZWN0aXZlbHkp
IGFuZCBhcmUgdXNlZCB0byBlc3RhYmxpc2ggdGhlCiAgICBpbml0aWFsIGJpbmRpbmcgYmV0d2Vl
biB0aGUgdXNlciBhZ2VudCBhbmQgbmF0aXZlIGNvZGUuICBUaGUgRE9NCiAgICBvYmplY3RzIGlu
IHRoZSB1c2VyIGFnZW50IGNhbiBiZSBleGFtaW5lZCBhbmQgbWFuaXB1bGF0ZWQgdXNpbmcKICAg
IHRoZSBOUE5fIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24gTlBPYmplY3RzIGRlc2NyaWJlZCBp
biB0aGlzCiAgICBoZWFkZXIuCgogICAgVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB0aGUgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHNjcmlwdGluZwogICAgbGFuZ3VhZ2UgdXNlZCBieSB0aGUgc2NyaXB0
aW5nIGVudmlyb25tZW50IGhhdmUgYmVlbiBtaW5pbWl6ZWQuCiovCgojZGVmaW5lIE5QX0JFR0lO
X01BQ1JPICBkbyB7CiNkZWZpbmUgTlBfRU5EX01BQ1JPICAgIH0gd2hpbGUgKDApCgovKgogICAg
T2JqZWN0cyAobm9uLXByaW1pdGl2ZSBkYXRhKSBwYXNzZWQgYmV0d2VlbiAnQycgYW5kIHNjcmlw
dCBpcwogICAgYWx3YXlzIHdyYXBwZWQgaW4gYW4gTlBPYmplY3QuICBUaGUgJ2ludGVyZmFjZScg
b2YgYW4gTlBPYmplY3QgaXMKICAgIGRlc2NyaWJlZCBieSBhbiBOUENsYXNzLgoqLwp0eXBlZGVm
IHN0cnVjdCBOUE9iamVjdCBOUE9iamVjdDsKdHlwZWRlZiBzdHJ1Y3QgTlBDbGFzcyBOUENsYXNz
OwoKdHlwZWRlZiBjaGFyIE5QVVRGODsKdHlwZWRlZiBzdHJ1Y3QgX05QU3RyaW5nIHsKICAgIGNv
bnN0IE5QVVRGOCAqVVRGOENoYXJhY3RlcnM7CiAgICB1aW50MzJfdCBVVEY4TGVuZ3RoOwp9IE5Q
U3RyaW5nOwoKdHlwZWRlZiBlbnVtIHsKICAgIE5QVmFyaWFudFR5cGVfVm9pZCwKICAgIE5QVmFy
aWFudFR5cGVfTnVsbCwKICAgIE5QVmFyaWFudFR5cGVfQm9vbCwKICAgIE5QVmFyaWFudFR5cGVf
SW50MzIsCiAgICBOUFZhcmlhbnRUeXBlX0RvdWJsZSwKICAgIE5QVmFyaWFudFR5cGVfU3RyaW5n
LAogICAgTlBWYXJpYW50VHlwZV9PYmplY3QKfSBOUFZhcmlhbnRUeXBlOwoKdHlwZWRlZiBzdHJ1
Y3QgX05QVmFyaWFudCB7CiAgICBOUFZhcmlhbnRUeXBlIHR5cGU7CiAgICB1bmlvbiB7CiAgICAg
ICAgYm9vbCBib29sVmFsdWU7CiAgICAgICAgaW50MzJfdCBpbnRWYWx1ZTsKICAgICAgICBkb3Vi
bGUgZG91YmxlVmFsdWU7CiAgICAgICAgTlBTdHJpbmcgc3RyaW5nVmFsdWU7CiAgICAgICAgTlBP
YmplY3QgKm9iamVjdFZhbHVlOwogICAgfSB2YWx1ZTsKfSBOUFZhcmlhbnQ7CgovKgogICAgTlBO
X1JlbGVhc2VWYXJpYW50VmFsdWUgaXMgY2FsbGVkIG9uIGFsbCAnb3V0JyBwYXJhbWV0ZXJzCiAg
ICByZWZlcmVuY2VzLiAgU3BlY2lmaWNhbGx5IGl0IGlzIHRvIGJlIGNhbGxlZCBvbiB2YXJpYW50
cyB0aGF0IG93bgogICAgdGhlaXIgdmFsdWUsIGFzIGlzIHRoZSBjYXNlIHdpdGggYWxsIG5vbi1j
b25zdCBOUFZhcmlhbnQqCiAgICBhcmd1bWVudHMgYWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgdG8g
YW55IG1ldGhvZHMgKGV4Y2VwdCB0aGlzIG9uZSkKICAgIGluIHRoaXMgQVBJLgoKICAgIEFmdGVy
IGNhbGxpbmcgTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUsIHRoZSB0eXBlIG9mIHRoZSB2YXJpYW50
CiAgICB3aWxsIGJlIE5QVmFyaWFudFR5cGVfVm9pZC4KKi8Kdm9pZCBOUE5fUmVsZWFzZVZhcmlh
bnRWYWx1ZShOUFZhcmlhbnQgKnZhcmlhbnQpOwoKI2RlZmluZSBOUFZBUklBTlRfSVNfVk9JRChf
dikgICAgKChfdikudHlwZSA9PSBOUFZhcmlhbnRUeXBlX1ZvaWQpCiNkZWZpbmUgTlBWQVJJQU5U
X0lTX05VTEwoX3YpICAgICgoX3YpLnR5cGUgPT0gTlBWYXJpYW50VHlwZV9OdWxsKQojZGVmaW5l
IE5QVkFSSUFOVF9JU19CT09MRUFOKF92KSAoKF92KS50eXBlID09IE5QVmFyaWFudFR5cGVfQm9v
bCkKI2RlZmluZSBOUFZBUklBTlRfSVNfSU5UMzIoX3YpICAgKChfdikudHlwZSA9PSBOUFZhcmlh
bnRUeXBlX0ludDMyKQojZGVmaW5lIE5QVkFSSUFOVF9JU19ET1VCTEUoX3YpICAoKF92KS50eXBl
ID09IE5QVmFyaWFudFR5cGVfRG91YmxlKQojZGVmaW5lIE5QVkFSSUFOVF9JU19TVFJJTkcoX3Yp
ICAoKF92KS50eXBlID09IE5QVmFyaWFudFR5cGVfU3RyaW5nKQojZGVmaW5lIE5QVkFSSUFOVF9J
U19PQkpFQ1QoX3YpICAoKF92KS50eXBlID09IE5QVmFyaWFudFR5cGVfT2JqZWN0KQoKI2RlZmlu
ZSBOUFZBUklBTlRfVE9fQk9PTEVBTihfdikgKChfdikudmFsdWUuYm9vbFZhbHVlKQojZGVmaW5l
IE5QVkFSSUFOVF9UT19JTlQzMihfdikgICAoKF92KS52YWx1ZS5pbnRWYWx1ZSkKI2RlZmluZSBO
UFZBUklBTlRfVE9fRE9VQkxFKF92KSAgKChfdikudmFsdWUuZG91YmxlVmFsdWUpCiNkZWZpbmUg
TlBWQVJJQU5UX1RPX1NUUklORyhfdikgICgoX3YpLnZhbHVlLnN0cmluZ1ZhbHVlKQojZGVmaW5l
IE5QVkFSSUFOVF9UT19PQkpFQ1QoX3YpICAoKF92KS52YWx1ZS5vYmplY3RWYWx1ZSkKCiNkZWZp
bmUgVk9JRF9UT19OUFZBUklBTlQoX3YpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKTlBfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKF92KS50eXBlID0g
TlBWYXJpYW50VHlwZV9Wb2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAoX3YpLnZhbHVlLm9iamVjdFZhbHVlID0gTlVMTDsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKTlBfRU5EX01BQ1JPCgojZGVmaW5lIE5VTExf
VE9fTlBWQVJJQU5UKF92KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCk5QX0JFR0lOX01BQ1JPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChfdikudHlwZSA9IE5QVmFyaWFu
dFR5cGVfTnVsbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgKF92KS52YWx1ZS5vYmplY3RWYWx1ZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCk5QX0VORF9NQUNSTwoKI2RlZmluZSBCT09MRUFOX1RPX05Q
VkFSSUFOVChfdmFsLCBfdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XApOUF9CRUdJTl9NQUNSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAoX3YpLnR5cGUgPSBOUFZhcmlhbnRUeXBlX0Jv
b2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChfdiku
dmFsdWUuYm9vbFZhbHVlID0gISEoX3ZhbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXApOUF9FTkRfTUFDUk8KCiNkZWZpbmUgSU5UMzJfVE9fTlBWQVJJQU5UKF92
YWwsIF92KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKTlBfQkVH
SU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgKF92KS50eXBlID0gTlBWYXJpYW50VHlwZV9JbnQzMjsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAoX3YpLnZhbHVlLmlu
dFZhbHVlID0gX3ZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKTlBfRU5EX01BQ1JPCgojZGVmaW5lIERPVUJMRV9UT19OUFZBUklBTlQoX3ZhbCwgX3Yp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCk5QX0JFR0lOX01BQ1JP
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgIChfdikudHlwZSA9IE5QVmFyaWFudFR5cGVfRG91YmxlOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKF92KS52YWx1ZS5kb3VibGVWYWx1
ZSA9IF92YWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCk5Q
X0VORF9NQUNSTwoKI2RlZmluZSBTVFJJTkdaX1RPX05QVkFSSUFOVChfdmFsLCBfdikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApOUF9CRUdJTl9NQUNSTyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAoX3YpLnR5cGUgPSBOUFZhcmlhbnRUeXBlX1N0cmluZzsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgIE5QU3RyaW5nIHN0ciA9IHsgX3ZhbCwgdWludDMy
X3Qoc3RybGVuKF92YWwpKSB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKF92KS52
YWx1ZS5zdHJpbmdWYWx1ZSA9IHN0cjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCk5QX0VORF9NQUNSTwoKI2RlZmluZSBTVFJJTkdOX1RPX05QVkFSSUFOVChf
dmFsLCBfbGVuLCBfdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApOUF9CRUdJ
Tl9NQUNSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAoX3YpLnR5cGUgPSBOUFZhcmlhbnRUeXBlX1N0cmluZzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIE5QU3RyaW5nIHN0ciA9
IHsgX3ZhbCwgdWludDMyX3QoX2xlbikgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgKF92KS52YWx1ZS5zdHJpbmdWYWx1ZSA9IHN0cjsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCk5QX0VORF9NQUNSTwoKI2RlZmluZSBPQkpFQ1Rf
VE9fTlBWQVJJQU5UKF92YWwsIF92KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXApOUF9CRUdJTl9NQUNSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAoX3YpLnR5cGUgPSBOUFZhcmlhbnRU
eXBlX09iamVjdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
IChfdikudmFsdWUub2JqZWN0VmFsdWUgPSBfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXApOUF9FTkRfTUFDUk8KCgovKgogIFR5cGUgbWFwcGluZ3MgKEph
dmFTY3JpcHQgdHlwZXMgaGF2ZSBiZWVuIHVzZWQgZm9yIGlsbHVzdHJhdGlvbgogICAgcHVycG9z
ZXMpOgoKICBKYXZhU2NyaXB0ICAgICAgIHRvICAgICAgICAgICAgIEMgKE5QVmFyaWFudCB3aXRo
IHR5cGU6KQogIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50VHlwZV9W
b2lkCiAgbnVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFZhcmlhbnRUeXBlX051bGwK
ICBCb29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudFR5cGVfQm9vbAogIE51
bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50VHlwZV9Eb3VibGUgb3IgTlBW
YXJpYW50VHlwZV9JbnQzMgogIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJp
YW50VHlwZV9TdHJpbmcKICBPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFu
dFR5cGVfT2JqZWN0CgogIEMgKE5QVmFyaWFudCB3aXRoIHR5cGU6KSAgIHRvICAgSmF2YVNjcmlw
dAogIE5QVmFyaWFudFR5cGVfVm9pZCAgICAgICAgICAgICAgdW5kZWZpbmVkCiAgTlBWYXJpYW50
VHlwZV9OdWxsICAgICAgICAgICAgICBudWxsCiAgTlBWYXJpYW50VHlwZV9Cb29sICAgICAgICAg
ICAgICBCb29sZWFuCiAgTlBWYXJpYW50VHlwZV9JbnQzMiAgICAgICAgICAgICBOdW1iZXIKICBO
UFZhcmlhbnRUeXBlX0RvdWJsZSAgICAgICAgICAgIE51bWJlcgogIE5QVmFyaWFudFR5cGVfU3Ry
aW5nICAgICAgICAgICAgU3RyaW5nCiAgTlBWYXJpYW50VHlwZV9PYmplY3QgICAgICAgICAgICBP
YmplY3QKKi8KCnR5cGVkZWYgdm9pZCAqTlBJZGVudGlmaWVyOwoKLyoKICAgIE5QT2JqZWN0cyBo
YXZlIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMuICBNZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGFyZQog
ICAgaWRlbnRpZmllZCB3aXRoIE5QSWRlbnRpZmllcnMuICBUaGVzZSBpZGVudGlmaWVycyBtYXkg
YmUgcmVmbGVjdGVkCiAgICBpbiBzY3JpcHQuICBOUElkZW50aWZpZXJzIGNhbiBiZSBlaXRoZXIg
c3RyaW5ncyBvciBpbnRlZ2VycywgSU9XLAogICAgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBjYW4g
YmUgaWRlbnRpZmllZCBieSBlaXRoZXIgc3RyaW5ncyBvcgogICAgaW50ZWdlcnMgKGkuZS4gZm9v
WyJiYXIiXSB2cyBmb29bMV0pLiBOUElkZW50aWZpZXJzIGNhbiBiZQogICAgY29tcGFyZWQgdXNp
bmcgPT0uICBJbiBjYXNlIG9mIGFueSBlcnJvcnMsIHRoZSByZXF1ZXN0ZWQKICAgIE5QSWRlbnRp
ZmllcihzKSB3aWxsIGJlIE5VTEwuIE5QSWRlbnRpZmllciBsaWZldGltZSBpcyBjb250cm9sbGVk
CiAgICBieSB0aGUgYnJvd3Nlci4gUGx1Z2lucyBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBt
ZW1vcnkgbWFuYWdlbWVudAogICAgd2l0aCByZWdhcmRzIHRvIE5QSWRlbnRpZmllcnMuCiovCk5Q
SWRlbnRpZmllciBOUE5fR2V0U3RyaW5nSWRlbnRpZmllcihjb25zdCBOUFVURjggKm5hbWUpOwp2
b2lkIE5QTl9HZXRTdHJpbmdJZGVudGlmaWVycyhjb25zdCBOUFVURjggKipuYW1lcywgaW50MzJf
dCBuYW1lQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5QSWRlbnRpZmllciAq
aWRlbnRpZmllcnMpOwpOUElkZW50aWZpZXIgTlBOX0dldEludElkZW50aWZpZXIoaW50MzJfdCBp
bnRpZCk7CmJvb2wgTlBOX0lkZW50aWZpZXJJc1N0cmluZyhOUElkZW50aWZpZXIgaWRlbnRpZmll
cik7CgovKgogICAgVGhlIE5QVVRGOCByZXR1cm5lZCBmcm9tIE5QTl9VVEY4RnJvbUlkZW50aWZp
ZXIgU0hPVUxEIGJlIGZyZWVkLgoqLwpOUFVURjggKk5QTl9VVEY4RnJvbUlkZW50aWZpZXIoTlBJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpOwoKLyoKICAgIEdldCB0aGUgaW50ZWdlciByZXByZXNlbnRl
ZCBieSBpZGVudGlmaWVyLiBJZiBpZGVudGlmaWVyIGlzIG5vdCBhbgogICAgaW50ZWdlciBpZGVu
dGlmaWVyLCB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZC4KKi8KaW50MzJfdCBOUE5fSW50RnJv
bUlkZW50aWZpZXIoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwoKLyoKICAgIE5QT2JqZWN0IGJl
aGF2aW9yIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgc2V0IG9mCiAgICBjYWxs
YmFjayBmdW5jdGlvbnMuCgogICAgVGhlIE5QVmFyaWFudCAqcmVzdWx0IGFyZ3VtZW50IG9mIHRo
ZXNlIGZ1bmN0aW9ucyAod2hlcmUKICAgIGFwcGxpY2FibGUpIHNob3VsZCBiZSByZWxlYXNlZCB1
c2luZyBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgpLgoqLwp0eXBlZGVmIE5QT2JqZWN0ICooKk5Q
QWxsb2NhdGVGdW5jdGlvblB0cikoTlBQIG5wcCwgTlBDbGFzcyAqYUNsYXNzKTsKdHlwZWRlZiB2
b2lkICgqTlBEZWFsbG9jYXRlRnVuY3Rpb25QdHIpKE5QT2JqZWN0ICpucG9iaik7CnR5cGVkZWYg
dm9pZCAoKk5QSW52YWxpZGF0ZUZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmopOwp0eXBlZGVm
IGJvb2wgKCpOUEhhc01ldGhvZEZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRp
ZmllciBuYW1lKTsKdHlwZWRlZiBib29sICgqTlBJbnZva2VGdW5jdGlvblB0cikoTlBPYmplY3Qg
Km5wb2JqLCBOUElkZW50aWZpZXIgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1aW50MzJfdCBhcmdDb3VudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50ICpyZXN1bHQpOwp0eXBlZGVmIGJv
b2wgKCpOUEludm9rZURlZmF1bHRGdW5jdGlvblB0cikoTlBPYmplY3QgKm5wb2JqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTlBWYXJpYW50ICphcmdz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXJn
Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFZhcmlh
bnQgKnJlc3VsdCk7CnR5cGVkZWYgYm9vbCAoKk5QSGFzUHJvcGVydHlGdW5jdGlvblB0cikoTlBP
YmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgbmFtZSk7CnR5cGVkZWYgYm9vbCAoKk5QR2V0UHJv
cGVydHlGdW5jdGlvblB0cikoTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgbmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFZhcmlhbnQgKnJlc3VsdCk7
CnR5cGVkZWYgYm9vbCAoKk5QU2V0UHJvcGVydHlGdW5jdGlvblB0cikoTlBPYmplY3QgKm5wb2Jq
LCBOUElkZW50aWZpZXIgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBOUFZhcmlhbnQgKnZhbHVlKTsKdHlwZWRlZiBib29sICgqTlBSZW1vdmVQcm9w
ZXJ0eUZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlBJZGVudGlmaWVyIG5hbWUpOwp0eXBlZGVmIGJvb2wgKCpO
UEVudW1lcmF0aW9uRnVuY3Rpb25QdHIpKE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyICoq
dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
KmNvdW50KTsKdHlwZWRlZiBib29sICgqTlBDb25zdHJ1Y3RGdW5jdGlvblB0cikoTlBPYmplY3Qg
Km5wb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOUFZh
cmlhbnQgKmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGFyZ0NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFZh
cmlhbnQgKnJlc3VsdCk7CgovKgogICAgTlBPYmplY3RzIHJldHVybmVkIGJ5IGNyZWF0ZSwgcmV0
YWluLCBpbnZva2UsIGFuZCBnZXRQcm9wZXJ0eSBwYXNzCiAgICBhIHJlZmVyZW5jZSBjb3VudCB0
byB0aGUgY2FsbGVyLiAgVGhhdCBpcywgdGhlIGNhbGxlZSBhZGRzIGEKICAgIHJlZmVyZW5jZSBj
b3VudCB3aGljaCBwYXNzZXMgdG8gdGhlIGNhbGxlci4gIEl0IGlzIHRoZSBjYWxsZXIncwogICAg
cmVzcG9uc2liaWxpdHkgdG8gcmVsZWFzZSB0aGUgcmV0dXJuZWQgb2JqZWN0LgoKICAgIE5QSW52
b2tlRnVuY3Rpb25QdHIgZnVuY3Rpb24gbWF5IHJldHVybiAwIHRvIGluZGljYXRlIGEgdm9pZAog
ICAgcmVzdWx0LgoKICAgIE5QSW52YWxpZGF0ZUZ1bmN0aW9uUHRyIGlzIGNhbGxlZCBieSB0aGUg
c2NyaXB0aW5nIGVudmlyb25tZW50CiAgICB3aGVuIHRoZSBuYXRpdmUgY29kZSBpcyBzaHV0ZG93
bi4gIEFueSBhdHRlbXB0IHRvIG1lc3NhZ2UgYQogICAgTlBPYmplY3QgaW5zdGFuY2UgYWZ0ZXIg
dGhlIGludmFsaWRhdGUgY2FsbGJhY2sgaGFzIGJlZW4KICAgIGNhbGxlZCB3aWxsIHJlc3VsdCBp
biB1bmRlZmluZWQgYmVoYXZpb3IsIGV2ZW4gaWYgdGhlIG5hdGl2ZSBjb2RlCiAgICBpcyBzdGls
bCByZXRhaW5pbmcgdGhvc2UgTlBPYmplY3QgaW5zdGFuY2VzLiAgKFRoZSBydW50aW1lCiAgICB3
aWxsIHR5cGljYWxseSByZXR1cm4gaW1tZWRpYXRlbHksIHdpdGggMCBvciBOVUxMLCBmcm9tIGFu
IGF0dGVtcHQKICAgIHRvIGRpc3BhdGNoIHRvIGEgTlBPYmplY3QsIGJ1dCB0aGlzIGJlaGF2aW9y
IHNob3VsZCBub3QgYmUKICAgIGRlcGVuZGVkIHVwb24uKQoKICAgIFRoZSBOUEVudW1lcmF0aW9u
RnVuY3Rpb25QdHIgZnVuY3Rpb24gbWF5IHBhc3MgYW4gYXJyYXkgb2YKICAgIE5QSWRlbnRpZmll
cnMgYmFjayB0byB0aGUgY2FsbGVyLiBUaGUgY2FsbGVlIGFsbG9jcyB0aGUgbWVtb3J5IG9mCiAg
ICB0aGUgYXJyYXkgdXNpbmcgTlBOX01lbUFsbG9jKCksIGFuZCBpdCdzIHRoZSBjYWxsZXIncyBy
ZXNwb25zaWJpbGl0eQogICAgdG8gcmVsZWFzZSBpdCB1c2luZyBOUE5fTWVtRnJlZSgpLgoqLwpz
dHJ1Y3QgTlBDbGFzcwp7CiAgICB1aW50MzJfdCBzdHJ1Y3RWZXJzaW9uOwogICAgTlBBbGxvY2F0
ZUZ1bmN0aW9uUHRyIGFsbG9jYXRlOwogICAgTlBEZWFsbG9jYXRlRnVuY3Rpb25QdHIgZGVhbGxv
Y2F0ZTsKICAgIE5QSW52YWxpZGF0ZUZ1bmN0aW9uUHRyIGludmFsaWRhdGU7CiAgICBOUEhhc01l
dGhvZEZ1bmN0aW9uUHRyIGhhc01ldGhvZDsKICAgIE5QSW52b2tlRnVuY3Rpb25QdHIgaW52b2tl
OwogICAgTlBJbnZva2VEZWZhdWx0RnVuY3Rpb25QdHIgaW52b2tlRGVmYXVsdDsKICAgIE5QSGFz
UHJvcGVydHlGdW5jdGlvblB0ciBoYXNQcm9wZXJ0eTsKICAgIE5QR2V0UHJvcGVydHlGdW5jdGlv
blB0ciBnZXRQcm9wZXJ0eTsKICAgIE5QU2V0UHJvcGVydHlGdW5jdGlvblB0ciBzZXRQcm9wZXJ0
eTsKICAgIE5QUmVtb3ZlUHJvcGVydHlGdW5jdGlvblB0ciByZW1vdmVQcm9wZXJ0eTsKICAgIE5Q
RW51bWVyYXRpb25GdW5jdGlvblB0ciBlbnVtZXJhdGU7CiAgICBOUENvbnN0cnVjdEZ1bmN0aW9u
UHRyIGNvbnN0cnVjdDsKfTsKCiNkZWZpbmUgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT04gICAgICAz
CgojZGVmaW5lIE5QX0NMQVNTX1NUUlVDVF9WRVJTSU9OX0VOVU0gMgojZGVmaW5lIE5QX0NMQVNT
X1NUUlVDVF9WRVJTSU9OX0NUT1IgMwoKI2RlZmluZSBOUF9DTEFTU19TVFJVQ1RfVkVSU0lPTl9I
QVNfRU5VTShucGNsYXNzKSAgIFwKICAgICAgICAoKG5wY2xhc3MpLT5zdHJ1Y3RWZXJzaW9uID49
IE5QX0NMQVNTX1NUUlVDVF9WRVJTSU9OX0VOVU0pCgojZGVmaW5lIE5QX0NMQVNTX1NUUlVDVF9W
RVJTSU9OX0hBU19DVE9SKG5wY2xhc3MpICAgXAogICAgICAgICgobnBjbGFzcyktPnN0cnVjdFZl
cnNpb24gPj0gTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fQ1RPUikKCnN0cnVjdCBOUE9iamVjdCB7
CiAgICBOUENsYXNzICpfY2xhc3M7CiAgICB1aW50MzJfdCByZWZlcmVuY2VDb3VudDsKICAgIC8q
CiAgICAgKiBBZGRpdGlvbmFsIHNwYWNlIG1heSBiZSBhbGxvY2F0ZWQgaGVyZSBieSB0eXBlcyBv
ZiBOUE9iamVjdHMKICAgICAqLwp9OwoKLyoKICAgIElmIHRoZSBjbGFzcyBoYXMgYW4gYWxsb2Nh
dGUgZnVuY3Rpb24sIE5QTl9DcmVhdGVPYmplY3QgaW52b2tlcwogICAgdGhhdCBmdW5jdGlvbiwg
b3RoZXJ3aXNlIGEgTlBPYmplY3QgaXMgYWxsb2NhdGVkIGFuZAogICAgcmV0dXJuZWQuIFRoaXMg
bWV0aG9kIHdpbGwgaW5pdGlhbGl6ZSB0aGUgcmVmZXJlbmNlQ291bnQgbWVtYmVyIG9mCiAgICB0
aGUgTlBPYmplY3QgdG8gMS4KKi8KTlBPYmplY3QgKk5QTl9DcmVhdGVPYmplY3QoTlBQIG5wcCwg
TlBDbGFzcyAqYUNsYXNzKTsKCi8qCiAgICBJbmNyZW1lbnQgdGhlIE5QT2JqZWN0J3MgcmVmZXJl
bmNlIGNvdW50LgoqLwpOUE9iamVjdCAqTlBOX1JldGFpbk9iamVjdChOUE9iamVjdCAqbnBvYmop
OwoKLyoKICAgIERlY3JlbWVudGVkIHRoZSBOUE9iamVjdCdzIHJlZmVyZW5jZSBjb3VudC4gIElm
IHRoZSByZWZlcmVuY2UKICAgIGNvdW50IGdvZXMgdG8gemVybywgdGhlIGNsYXNzJ3MgZGVzdHJv
eSBmdW5jdGlvbiBpcyBpbnZva2UgaWYKICAgIHNwZWNpZmllZCwgb3RoZXJ3aXNlIHRoZSBvYmpl
Y3QgaXMgZnJlZWQgZGlyZWN0bHkuCiovCnZvaWQgTlBOX1JlbGVhc2VPYmplY3QoTlBPYmplY3Qg
Km5wb2JqKTsKCi8qCiAgICBGdW5jdGlvbnMgdG8gYWNjZXNzIHNjcmlwdCBvYmplY3RzIHJlcHJl
c2VudGVkIGJ5IE5QT2JqZWN0LgoKICAgIENhbGxzIHRvIHNjcmlwdCBvYmplY3RzIGFyZSBzeW5j
aHJvbm91cy4gIElmIGEgZnVuY3Rpb24gcmV0dXJucyBhCiAgICB2YWx1ZSwgaXQgd2lsbCBiZSBz
dXBwbGllZCB2aWEgdGhlIHJlc3VsdCBOUFZhcmlhbnQKICAgIGFyZ3VtZW50LiBTdWNjZXNzZnVs
IGNhbGxzIHdpbGwgcmV0dXJuIHRydWUsIGZhbHNlIHdpbGwgYmUKICAgIHJldHVybmVkIGluIGNh
c2Ugb2YgYW4gZXJyb3IuCiAgICAKICAgIENhbGxzIG1hZGUgZnJvbSBwbHVnaW4gY29kZSB0byBz
Y3JpcHQgbXVzdCBiZSBtYWRlIGZyb20gdGhlIHRocmVhZAogICAgb24gd2hpY2ggdGhlIHBsdWdp
biB3YXMgaW5pdGlhbGl6ZWQuCiovCgpib29sIE5QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3Qg
Km5wb2JqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwKICAgICAgICAgICAgICAgIGNvbnN0IE5Q
VmFyaWFudCAqYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCAqcmVzdWx0KTsKYm9v
bCBOUE5fSW52b2tlRGVmYXVsdChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIGNvbnN0IE5QVmFy
aWFudCAqYXJncywKICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcmdDb3VudCwgTlBW
YXJpYW50ICpyZXN1bHQpOwpib29sIE5QTl9FdmFsdWF0ZShOUFAgbnBwLCBOUE9iamVjdCAqbnBv
YmosIE5QU3RyaW5nICpzY3JpcHQsCiAgICAgICAgICAgICAgICAgIE5QVmFyaWFudCAqcmVzdWx0
KTsKYm9vbCBOUE5fR2V0UHJvcGVydHkoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50
aWZpZXIgcHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgICBOUFZhcmlhbnQgKnJlc3Vs
dCk7CmJvb2wgTlBOX1NldFByb3BlcnR5KE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgTlBWYXJpYW50
ICp2YWx1ZSk7CmJvb2wgTlBOX1JlbW92ZVByb3BlcnR5KE5QUCBucHAsIE5QT2JqZWN0ICpucG9i
aiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7CmJvb2wgTlBOX0hhc1Byb3BlcnR5KE5QUCBu
cHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7CmJvb2wgTlBO
X0hhc01ldGhvZChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBtZXRob2RO
YW1lKTsKYm9vbCBOUE5fRW51bWVyYXRlKE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVu
dGlmaWVyICoqaWRlbnRpZmllciwKICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpjb3VudCk7
CmJvb2wgTlBOX0NvbnN0cnVjdChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIGNvbnN0IE5QVmFy
aWFudCAqYXJncywKICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlh
bnQgKnJlc3VsdCk7CgovKgogICAgTlBOX1NldEV4Y2VwdGlvbiBtYXkgYmUgY2FsbGVkIHRvIHRy
aWdnZXIgYSBzY3JpcHQgZXhjZXB0aW9uIHVwb24KICAgIHJldHVybiBmcm9tIGVudHJ5IHBvaW50
cyBpbnRvIE5QT2JqZWN0cy4gIFR5cGljYWwgdXNhZ2U6CgogICAgTlBOX1NldEV4Y2VwdGlvbiAo
bnBvYmosIG1lc3NhZ2UpOwoqLwp2b2lkIE5QTl9TZXRFeGNlcHRpb24oTlBPYmplY3QgKm5wb2Jq
LCBjb25zdCBOUFVURjggKm1lc3NhZ2UpOwoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCgoj
ZW5kaWYKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbnB0
eXBlcy5oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1MAAw
MDAxNzUwADAwMDAwMDA3NDA2ADExNzIxNDU3MTEzADAxMTc0MgAgMAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAG1hcmlvAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAbWFyaW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKiAt
Ki0gTW9kZTogQzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMt
b2Zmc2V0OiAyIC0qLSAqLwovKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCiAqIFZl
cnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQogKgogKiBUaGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24K
ICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoCiAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCiAqCiAqIFNv
ZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgYmFzaXMsCiAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQogKiBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQogKiBMaWNl
bnNlLgogKgogKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgogKgogKiBU
aGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKICogbW96aWxsYS5v
cmcuCiAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5
cmlnaHQgKEMpIDIwMDQKICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogKgogKiBDb250cmlidXRvcihzKToKICogICBKb2hubnkgU3RlbmJhY2sgPGpzdEBtb3pp
bGxhLm9yZz4gKE9yaWdpbmFsIGF1dGhvcikKICoKICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRl
bnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKICogZWl0aGVy
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAi
R1BMIiksIG9yCiAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAogKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNp
b25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAogKiBvZiB0
aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0
aGlzIGZpbGUgb25seQogKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhl
IExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCiAqIHVzZSB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCiAqIGRl
Y2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0g
d2l0aCB0aGUgbm90aWNlCiAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBH
UEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCiAqIHRoZSBwcm92aXNpb25zIGFi
b3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIK
ICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4K
ICoKICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KCiNpZm5kZWYgbnB0eXBlc19o
XwojZGVmaW5lIG5wdHlwZXNfaF8KCi8qCiAqIEhlYWRlciBmaWxlIGZvciBlbnN1cmluZyB0aGF0
IEM5OSB0eXBlcyAoW3VdaW50MzJfdCwgW3VdaW50NjRfdCBhbmQgYm9vbCkgYW5kCiAqIHRydWUv
ZmFsc2UgbWFjcm9zIGFyZSBhdmFpbGFibGUuCiAqLwoKI2lmIGRlZmluZWQoV0lOMzIpIHx8IGRl
ZmluZWQoT1MyKQogIC8qCiAgICogV2luMzIgYW5kIE9TLzIgZG9uJ3Qga25vdyBDOTksIHNvIGRl
ZmluZSBbdV1pbnRfMTYvMzIvNjQgaGVyZS4gVGhlIGJvb2wKICAgKiBpcyBwcmVkZWZpbmVkIHRo
bywgYm90aCBpbiBDIGFuZCBDKysuCiAgICovCiAgdHlwZWRlZiBzaG9ydCBpbnQxNl90OwogIHR5
cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7CiAgdHlwZWRlZiBpbnQgaW50MzJfdDsKICB0
eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKICB0eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90
OwogIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90OwojZWxpZiBkZWZpbmVkKF9B
SVgpIHx8IGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoX19vc2ZfXykgfHwgZGVmaW5lZChJUklY
KSB8fCBkZWZpbmVkKEhQVVgpCiAgLyoKICAgKiBBSVggYW5kIFN1bk9TIHNoaXAgYSBpbnR0eXBl
cy5oIGhlYWRlciB0aGF0IGRlZmluZXMgW3VdaW50MzJfdCwKICAgKiBidXQgbm90IGJvb2wgZm9y
IEMuCiAgICovCiAgI2luY2x1ZGUgPGludHR5cGVzLmg+CgogICNpZm5kZWYgX19jcGx1c3BsdXMK
ICAgIHR5cGVkZWYgaW50IGJvb2w7CiAgICAjZGVmaW5lIHRydWUgICAxCiAgICAjZGVmaW5lIGZh
bHNlICAwCiAgI2VuZGlmCiNlbGlmIGRlZmluZWQoYnNkaSkgfHwgZGVmaW5lZChGUkVFQlNEKSB8
fCBkZWZpbmVkKE9QRU5CU0QpCiAgLyoKICAgKiBCU0QvT1MsIEZyZWVCU0QsIGFuZCBPcGVuQlNE
IHNoaXAgc3lzL3R5cGVzLmggdGhhdCBkZWZpbmUgaW50MzJfdCBhbmQgCiAgICogdV9pbnQzMl90
LgogICAqLwogICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KCiAgLyoKICAgKiBCU0QvT1Mgc2hpcHMg
bm8gaGVhZGVyIHRoYXQgZGVmaW5lcyB1aW50MzJfdCwgbm9yIGJvb2wgKGZvciBDKQogICAqLwog
ICNpZiBkZWZpbmVkKGJzZGkpCiAgdHlwZWRlZiB1X2ludDMyX3QgdWludDMyX3Q7CiAgdHlwZWRl
ZiB1X2ludDY0X3QgdWludDY0X3Q7CgogICNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykKICAgIHR5
cGVkZWYgaW50IGJvb2w7CiAgICAjZGVmaW5lIHRydWUgICAxCiAgICAjZGVmaW5lIGZhbHNlICAw
CiAgI2VuZGlmCiAgI2Vsc2UKICAvKgogICAqIEZyZWVCU0QgYW5kIE9wZW5CU0QgZGVmaW5lIHVp
bnQzMl90IGFuZCBib29sLgogICAqLwogICAgI2luY2x1ZGUgPGludHR5cGVzLmg+CiAgICAjaW5j
bHVkZSA8c3RkYm9vbC5oPgogICNlbmRpZgojZWxpZiBkZWZpbmVkKEJFT1MpCiAgI2luY2x1ZGUg
PGludHR5cGVzLmg+CiNlbHNlCiAgLyoKICAgKiBGb3IgdGhvc2UgdGhhdCBzaGlwIGEgc3RhbmRh
cmQgQzk5IHN0ZGludC5oIGhlYWRlciBmaWxlLCBpbmNsdWRlCiAgICogaXQuIENhbid0IGRvIHRo
ZSBzYW1lIGZvciBzdGRib29sLmggdGhvLCBzaW5jZSBzb21lIHN5c3RlbXMgc2hpcAogICAqIHdp
dGggYSBzdGRib29sLmggZmlsZSB0aGF0IGRvZXNuJ3QgY29tcGlsZSEKICAgKi8KICAjaW5jbHVk
ZSA8c3RkaW50Lmg+CgogICNpZm5kZWYgX19jcGx1c3BsdXMKICAgICNpZiAhZGVmaW5lZChfX0dO
VUNfXykgfHwgKF9fR05VQ19fID4gMiB8fCBfX0dOVUNfTUlOT1JfXyA+IDk1KQogICAgICAjaW5j
bHVkZSA8c3RkYm9vbC5oPgogICAgI2Vsc2UKICAgICAgLyoKICAgICAgICogR0NDIDIuOTEgY2Fu
J3QgZGVhbCB3aXRoIGEgdHlwZWRlZiBmb3IgYm9vbCwgYnV0IGEgI2RlZmluZQogICAgICAgKiB3
b3Jrcy4KICAgICAgICovCiAgICAgICNkZWZpbmUgYm9vbCBpbnQKICAgICAgI2RlZmluZSB0cnVl
ICAgMQogICAgICAjZGVmaW5lIGZhbHNlICAwCiAgICAjZW5kaWYKICAjZW5kaWYKI2VuZGlmCgoj
ZW5kaWYgLyogbnB0eXBlc19oXyAqLwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVGVzdFBsdWdpbi5j
cHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NjQAMDAwMTc1MAAwMDAxNzUwADAw
MDAwMDA1MzY2ADExNzIxNDU3NDE3ADAxMjcwNQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAG1hcmlvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
bWFyaW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjaW5jbHVkZSAiVGVz
dFBsdWdpbi5oIgoKc3RhdGljIGNvbnN0IGNoYXIqIHN0clBsdWdpbk5hbWUgPSAiVGVzdCBwbHVn
aW4iOwpzdGF0aWMgY29uc3QgY2hhciogc3RyUGx1Z2luRGVzY3JpcHRpb24gPSAiVGVzdCBwbHVn
aW4iOwpzdGF0aWMgY29uc3QgY2hhciogc3RyUGx1Z2luVmVyc2lvbiA9ICIxLjAiOwpzdGF0aWMg
Y29uc3QgY2hhciogc3RyUGx1Z2luTWltZVR5cGUgPSAiYXBwbGljYXRpb24vcGx1Z3Rlc3Q6dGVz
dHBsdWdpbjpUZXN0IHBsdWdpbiI7CgpOUE5ldHNjYXBlRnVuY3MqIFRlc3RQbHVnaW46OnNfcEJy
b3dzZXJGdW5jdGlvbnMgPSAwOwoKc3RhdGljIGNoYXIqIHN6VmVyc2lvbiA9ICIxLjAuMC4wIjsK
Ck5QRXJyb3IgTlBfSW5pdGlhbGl6ZShOUE5ldHNjYXBlRnVuY3MqIGJGdW5jcywgTlBQbHVnaW5G
dW5jcyogcEZ1bmNzKQp7CiAgICBUZXN0UGx1Z2luOjpzZXRCcm93c2VyRnVuY3Rpb25zKGJGdW5j
cyk7CgogICAgcEZ1bmNzLT5uZXdwID0gTlBQX05ldzsKICAgIHBGdW5jcy0+ZGVzdHJveSA9IE5Q
UF9EZXN0cm95OwogICAgcEZ1bmNzLT5ldmVudCA9IE5QUF9IYW5kbGVFdmVudDsKCiAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7Cn0KCmNoYXIqIE5QX0dldFBsdWdpblZlcnNpb24oKQp7CiAgICBy
ZXR1cm4gc3pWZXJzaW9uOwp9Cgpjb25zdCBjaGFyKiBOUF9HZXRNSU1FRGVzY3JpcHRpb24oKQp7
CiAgICByZXR1cm4gc3RyUGx1Z2luTWltZVR5cGU7Cn0KCk5QRXJyb3IgTlBfR2V0VmFsdWUodm9p
ZCogZnV0dXJlLCBOUFBWYXJpYWJsZSBhVmFyaWFibGUsIHZvaWQqIGFWYWx1ZSkKewogICAgc3dp
dGNoIChhVmFyaWFibGUpIHsKICAgIGNhc2UgTlBQVnBsdWdpbk5hbWVTdHJpbmc6CiAgICAgICAg
KnN0YXRpY19jYXN0PGNvbnN0IGNoYXIqKj4oYVZhbHVlKSA9IHN0clBsdWdpbk5hbWU7CiAgICAg
ICAgYnJlYWs7CgogICAgY2FzZSBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmc6CiAgICAgICAg
KnN0YXRpY19jYXN0PGNvbnN0IGNoYXIqKj4oYVZhbHVlKSA9IHN0clBsdWdpbkRlc2NyaXB0aW9u
OwogICAgICAgIGJyZWFrOwoKICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFM
SURfUEFSQU07CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
Owp9CgpOUEVycm9yIE5QX1NodXRkb3duKCkKewogICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwp9
CgpOUEVycm9yIE5QUF9OZXcoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAgaW5zdGFuY2UsIHVp
bnQxNl90IG1vZGUsIGludDE2X3QgYXJnYywgY2hhciogYXJnbltdLCBjaGFyKiBhcmd2W10sIE5Q
U2F2ZWREYXRhKiBzYXZlZCkKewogICAgVGVzdFBsdWdpbiogcFBsdWdpbiA9IG5ldyBUZXN0UGx1
Z2luKGluc3RhbmNlLCBtb2RlKTsKICAgIGluc3RhbmNlLT5wZGF0YSA9IHBQbHVnaW47CiAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Cn0KCk5QRXJyb3IgTlBQX0Rlc3Ryb3koTlBQIGluc3RhbmNl
LCBOUFNhdmVkRGF0YSoqIHNhdmUpCnsKICAgIFRlc3RQbHVnaW4qIHBQbHVnaW4gPSBzdGF0aWNf
Y2FzdDxUZXN0UGx1Z2luKj4oaW5zdGFuY2UtPnBkYXRhKTsKICAgIGRlbGV0ZSBwUGx1Z2luOwoK
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKfQoKaW50MTZfdCBOUFBfSGFuZGxlRXZlbnQoTlBQ
IGluc3RhbmNlLCB2b2lkKiBldmVudCkKewogICAgVGVzdFBsdWdpbiogcFBsdWdpbiA9IHN0YXRp
Y19jYXN0PFRlc3RQbHVnaW4qPihpbnN0YW5jZS0+cGRhdGEpOwogICAgcmV0dXJuIHBQbHVnaW4t
PmhhbmRsZUV2ZW50KGV2ZW50KTsKfQoKdm9pZCBUZXN0UGx1Z2luOjpzZXRCcm93c2VyRnVuY3Rp
b25zKE5QTmV0c2NhcGVGdW5jcyogY29uc3QgcEJyb3dzZXJGdW5jdGlvbnMpCnsKICAgIHNfcEJy
b3dzZXJGdW5jdGlvbnMgPSBwQnJvd3NlckZ1bmN0aW9uczsKfQoKVGVzdFBsdWdpbjo6VGVzdFBs
dWdpbihjb25zdCBOUFAgaW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IG1vZGUpCnsKICAgIE5QQm9v
bCBicm93c2VyU3VwcG9ydHNXaW5kb3dsZXNzID0gZmFsc2U7CiAgICBzX3BCcm93c2VyRnVuY3Rp
b25zLT5zZXR2YWx1ZShpbnN0YW5jZSwgTlBQVnBsdWdpbldpbmRvd0Jvb2wsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGZhbHNlKSk7CiAgICBzX3BCcm93c2VyRnVuY3Rpb25zLT5zZXR2YWx1ZShp
bnN0YW5jZSwgTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4odHJ1ZSkpOwp9CgpUZXN0UGx1Z2luOjp+VGVzdFBsdWdpbigpCnsKfQoKaW50MTZfdCBUZXN0
UGx1Z2luOjpoYW5kbGVFdmVudCh2b2lkKiBwRXZlbnQpCnsKICAgIFhFdmVudCogeEV2ZW50ID0g
c3RhdGljX2Nhc3Q8WEV2ZW50Kj4ocEV2ZW50KTsKICAgIGlmICh4RXZlbnQtPnR5cGUgPT0gR3Jh
cGhpY3NFeHBvc2UpIHsKCQlYR3JhcGhpY3NFeHBvc2VFdmVudCogZXhwb3NlID0gJih4RXZlbnQt
PnhncmFwaGljc2V4cG9zZSk7CgoJCWlmIChleHBvc2UtPndpZHRoID09IDAgfHwgZXhwb3NlLT5o
ZWlnaHQgPT0gMCkgewoJCQlyZXR1cm4gTlBFUlJfTk9fRVJST1I7CgkJfQoKCQlHQyBnYyA9IFhD
cmVhdGVHQyhleHBvc2UtPmRpc3BsYXksIGV4cG9zZS0+ZHJhd2FibGUsIDAsIDApOwoJCVhTZXRG
b3JlZ3JvdW5kKGV4cG9zZS0+ZGlzcGxheSwgZ2MsIDB4MDBjMGMwKTsKCQlYRmlsbFJlY3Rhbmds
ZShleHBvc2UtPmRpc3BsYXksIGV4cG9zZS0+ZHJhd2FibGUsIGdjLCBleHBvc2UtPngsIGV4cG9z
ZS0+eSwgZXhwb3NlLT53aWR0aCwgZXhwb3NlLT5oZWlnaHQpOwoJfQogICAgcmV0dXJuIDE7Cn0K
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUZXN0UGx1Z2luLmgAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY2NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMDIw
MTQAMTE3MjE0NTIyMTIAMDEyMzIxACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHVzdGFyICAAbWFyaW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtYXJpbwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNpZm5kZWYgVGVzdFBsdWdpbl9o
CiNkZWZpbmUgVGVzdFBsdWdpbl9oCgojaW5jbHVkZSA8bnBhcGkuaD4KI2luY2x1ZGUgPG5wZnVu
Y3Rpb25zLmg+CgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgogICAgTlBF
cnJvciBOUF9Jbml0aWFsaXplKE5QTmV0c2NhcGVGdW5jcyogYkZ1bmNzLCBOUFBsdWdpbkZ1bmNz
KiBwRnVuY3MpOwogICAgTlBFcnJvciBOUF9TaHV0ZG93bigpOwoKICAgIE5QRXJyb3IgTlBQX05l
dyhOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5QUCBpbnN0YW5jZSwgdWludDE2X3QgbW9kZSwgaW50
MTZfdCBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIqIGFyZ3ZbXSwgTlBTYXZlZERhdGEqKTsKICAg
IE5QRXJyb3IgTlBQX0Rlc3Ryb3koTlBQIGluc3RhbmNlLCBOUFNhdmVkRGF0YSoqKTsKCiAgICBO
UEVycm9yIE5QUF9TZXRXaW5kb3coTlBQIGluc3RhbmNlLCBOUFdpbmRvdyogd2luZG93KTsKICAg
IGludDE2X3QgTlBQX0hhbmRsZUV2ZW50KE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOwoKICAg
IE5QRXJyb3IgTlBfR2V0VmFsdWUodm9pZCogZnV0dXJlLCBOUFBWYXJpYWJsZSBhVmFyaWFibGUs
IHZvaWQqIGFWYWx1ZSk7CiAgICBjb25zdCBjaGFyKiBOUF9HZXRNSU1FRGVzY3JpcHRpb24oKTsK
ICAgIE5QRXJyb3IgTlBfU2h1dGRvd24oKTsKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCgpj
bGFzcyBUZXN0UGx1Z2luIHsKICAgIHB1YmxpYzogLy8gRnVuY3Rpb25zCiAgICAgICAgVGVzdFBs
dWdpbihjb25zdCBOUFAgaW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IG1vZGUpOwogICAgICAgIH5U
ZXN0UGx1Z2luKCk7CgogICAgICAgIHN0YXRpYyB2b2lkIHNldEJyb3dzZXJGdW5jdGlvbnMoTlBO
ZXRzY2FwZUZ1bmNzKiBjb25zdCBwQnJvd3NlckZ1bmN0aW9ucyk7CgogICAgICAgIGludDE2X3Qg
aGFuZGxlRXZlbnQodm9pZCogZXZlbnQpOwoKICAgIHByaXZhdGU6CiAgICAgICAgc3RhdGljIE5Q
TmV0c2NhcGVGdW5jcyogc19wQnJvd3NlckZ1bmN0aW9uczsKfTsKCiNlbmRpZgoAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAG5wZnVuY3Rpb25zLmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw
MDAwNjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAyNzIwMQAxMTcyMTQ1NzExMwAwMTI2MDEAIDAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABtYXJpbwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1hcmlvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAALyoKICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgogKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCiAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgogKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQogKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogKi8KI2lm
bmRlZiBOUEZVTkNUSU9OU19ICiNkZWZpbmUgTlBGVU5DVElPTlNfSAoKCiNpbmNsdWRlICJucHJ1
bnRpbWUuaCIKI2luY2x1ZGUgIm5wYXBpLmgiCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJD
IiB7CiNlbmRpZgoKI2lmIGRlZmluZWQoWFBfV0lOKQojZGVmaW5lIEVYUE9SVEVEX0NBTExCQUNL
KF90eXBlLCBfbmFtZSkgX3R5cGUgKF9fc3RkY2FsbCAqIF9uYW1lKQojZWxzZQojZGVmaW5lIEVY
UE9SVEVEX0NBTExCQUNLKF90eXBlLCBfbmFtZSkgX3R5cGUgKCogX25hbWUpCiNlbmRpZgoKdHlw
ZWRlZiBOUEVycm9yICgqTlBOX0dldFVSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29u
c3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHZvaWQqIG5vdGlmeURhdGEpOwp0eXBl
ZGVmIE5QRXJyb3IgKCpOUE5fUG9zdFVSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29u
c3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHVpbnQzMl90IGxlbiwgY29uc3QgY2hh
ciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSk7CnR5cGVkZWYgTlBFcnJvciAo
Kk5QTl9SZXF1ZXN0UmVhZFByb2NQdHIpKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdlKiBy
YW5nZUxpc3QpOwp0eXBlZGVmIE5QRXJyb3IgKCpOUE5fTmV3U3RyZWFtUHJvY1B0cikoTlBQIGlu
c3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHdpbmRvdywgTlBTdHJlYW0qKiBz
dHJlYW0pOwp0eXBlZGVmIGludDMyX3QgKCpOUE5fV3JpdGVQcm9jUHRyKShOUFAgaW5zdGFuY2Us
IE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwp0eXBlZGVmIE5Q
RXJyb3IgKCpOUE5fRGVzdHJveVN0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0q
IHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKdHlwZWRlZiB2b2lkICgqTlBOX1N0YXR1c1Byb2NQ
dHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSk7CnR5cGVkZWYgY29uc3QgY2hh
ciooKk5QTl9Vc2VyQWdlbnRQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwp0eXBlZGVmIHZvaWQqICgq
TlBOX01lbUFsbG9jUHJvY1B0cikodWludDMyX3Qgc2l6ZSk7CnR5cGVkZWYgdm9pZCAoKk5QTl9N
ZW1GcmVlUHJvY1B0cikodm9pZCogcHRyKTsKdHlwZWRlZiB1aW50MzJfdCAoKk5QTl9NZW1GbHVz
aFByb2NQdHIpKHVpbnQzMl90IHNpemUpOwp0eXBlZGVmIHZvaWQgKCpOUE5fUmVsb2FkUGx1Z2lu
c1Byb2NQdHIpKE5QQm9vbCByZWxvYWRQYWdlcyk7CnR5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRW
YWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnJl
dF92YWx1ZSk7CnR5cGVkZWYgTlBFcnJvciAoKk5QTl9TZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0
YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKdHlwZWRlZiB2b2lkICgq
TlBOX0ludmFsaWRhdGVSZWN0UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFJlY3QgKnJlY3QpOwp0
eXBlZGVmIHZvaWQgKCpOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQdHIpKE5QUCBpbnN0YW5jZSwg
TlBSZWdpb24gcmVnaW9uKTsKdHlwZWRlZiB2b2lkICgqTlBOX0ZvcmNlUmVkcmF3UHJvY1B0ciko
TlBQIGluc3RhbmNlKTsKdHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFVSTFByb2NQdHIpKE5QUCBp
bnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3cpOwp0eXBlZGVmIE5Q
RXJyb3IgKCpOUE5fUG9zdFVSTFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJM
LCBjb25zdCBjaGFyKiB3aW5kb3csIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJv
b2wgZmlsZSk7CnR5cGVkZWYgdm9pZCogKCpOUE5fR2V0SmF2YUVudlByb2NQdHIpKHZvaWQpOwp0
eXBlZGVmIHZvaWQqICgqTlBOX0dldEphdmFQZWVyUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKdHlw
ZWRlZiB2b2lkICAoKk5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQIGluc3Rh
bmNlLCBOUEJvb2wgZW5hYmxlZCk7CnR5cGVkZWYgdm9pZCAgKCpOUE5fUG9wUG9wdXBzRW5hYmxl
ZFN0YXRlUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKdHlwZWRlZiB2b2lkICgqTlBOX1BsdWdpblRo
cmVhZEFzeW5jQ2FsbFByb2NQdHIpKE5QUCBucHAsIHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lk
ICp1c2VyRGF0YSk7CnR5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRWYWx1ZUZvclVSTFByb2NQdHIp
KE5QUCBucHAsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNoYXIq
KiB2YWx1ZSwgdWludDMyX3QqIGxlbik7CnR5cGVkZWYgTlBFcnJvciAoKk5QTl9TZXRWYWx1ZUZv
clVSTFByb2NQdHIpKE5QUCBucHAsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50MzJfdCBsZW4pOwp0eXBlZGVmIE5QRXJyb3Ig
KCpOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvUHJvY1B0cikoTlBQIG5wcCwgY29uc3QgY2hhciog
cHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2No
ZW1lLCBjb25zdCBjaGFyICpyZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxlbiwg
Y2hhcioqIHBhc3N3b3JkLCB1aW50MzJfdCogcGxlbik7Cgp0eXBlZGVmIHVpbnQzMl90ICgqTlBO
X1NjaGVkdWxlVGltZXJQcm9jUHRyKShOUFAgbnBwLCB1aW50MzJfdCBpbnRlcnZhbCwgTlBCb29s
IHJlcGVhdCwgdm9pZCAoKnRpbWVyRnVuYykoTlBQIG5wcCwgdWludDMyX3QgdGltZXJJRCkpOwp0
eXBlZGVmIHZvaWQgKCpOUE5fVW5zY2hlZHVsZVRpbWVyUHJvY1B0cikoTlBQIG5wcCwgdWludDMy
X3QgdGltZXJJRCk7CnR5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3BVcENvbnRleHRNZW51UHJvY1B0
cikoTlBQIGluc3RhbmNlLCBOUE1lbnUqIG1lbnUpOwp0eXBlZGVmIE5QQm9vbCAoKk5QTl9Db252
ZXJ0UG9pbnRQcm9jUHRyKShOUFAgbnBwLCBkb3VibGUgc291cmNlWCwgZG91YmxlIHNvdXJjZVks
IE5QQ29vcmRpbmF0ZVNwYWNlIHNvdXJjZVNwYWNlLCBkb3VibGUgKmRlc3RYLCBkb3VibGUgKmRl
c3RZLCBOUENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2UpOwoKdHlwZWRlZiB2b2lkICgqTlBOX1Jl
bGVhc2VWYXJpYW50VmFsdWVQcm9jUHRyKSAoTlBWYXJpYW50ICp2YXJpYW50KTsKCnR5cGVkZWYg
TlBJZGVudGlmaWVyICgqTlBOX0dldFN0cmluZ0lkZW50aWZpZXJQcm9jUHRyKSAoY29uc3QgTlBV
VEY4ICpuYW1lKTsKdHlwZWRlZiB2b2lkICgqTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzUHJvY1B0
cikgKGNvbnN0IE5QVVRGOCAqKm5hbWVzLCBpbnQzMl90IG5hbWVDb3VudCwgTlBJZGVudGlmaWVy
ICppZGVudGlmaWVycyk7CnR5cGVkZWYgTlBJZGVudGlmaWVyICgqTlBOX0dldEludElkZW50aWZp
ZXJQcm9jUHRyKSAoaW50MzJfdCBpbnRpZCk7CnR5cGVkZWYgaW50MzJfdCAoKk5QTl9JbnRGcm9t
SWRlbnRpZmllclByb2NQdHIpIChOUElkZW50aWZpZXIgaWRlbnRpZmllcik7CnR5cGVkZWYgYm9v
bCAoKk5QTl9JZGVudGlmaWVySXNTdHJpbmdQcm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZp
ZXIpOwp0eXBlZGVmIE5QVVRGOCAqKCpOUE5fVVRGOEZyb21JZGVudGlmaWVyUHJvY1B0cikgKE5Q
SWRlbnRpZmllciBpZGVudGlmaWVyKTsKCnR5cGVkZWYgTlBPYmplY3QqICgqTlBOX0NyZWF0ZU9i
amVjdFByb2NQdHIpIChOUFAsIE5QQ2xhc3MgKmFDbGFzcyk7CnR5cGVkZWYgTlBPYmplY3QqICgq
TlBOX1JldGFpbk9iamVjdFByb2NQdHIpIChOUE9iamVjdCAqb2JqKTsKdHlwZWRlZiB2b2lkICgq
TlBOX1JlbGVhc2VPYmplY3RQcm9jUHRyKSAoTlBPYmplY3QgKm9iaik7CnR5cGVkZWYgYm9vbCAo
Kk5QTl9JbnZva2VQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVy
IG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdW5zaWduZWQgYXJnQ291bnQsIE5Q
VmFyaWFudCAqcmVzdWx0KTsKdHlwZWRlZiBib29sICgqTlBOX0ludm9rZURlZmF1bHRQcm9jUHRy
KSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1bnNpZ25l
ZCBhcmdDb3VudCwgTlBWYXJpYW50ICpyZXN1bHQpOwp0eXBlZGVmIGJvb2wgKCpOUE5fRXZhbHVh
dGVQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBTdHJpbmcgKnNjcmlwdCwgTlBW
YXJpYW50ICpyZXN1bHQpOwp0eXBlZGVmIGJvb2wgKCpOUE5fR2V0UHJvcGVydHlQcm9jUHRyKSAo
TlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyICBwcm9wZXJ0eU5hbWUsIE5QVmFy
aWFudCAqcmVzdWx0KTsKdHlwZWRlZiBib29sICgqTlBOX1NldFByb3BlcnR5UHJvY1B0cikgKE5Q
UCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciAgcHJvcGVydHlOYW1lLCBjb25zdCBO
UFZhcmlhbnQgKnZhbHVlKTsKdHlwZWRlZiBib29sICgqTlBOX0hhc1Byb3BlcnR5UHJvY1B0cikg
KE5QUCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKdHlwZWRl
ZiBib29sICgqTlBOX0hhc01ldGhvZFByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmos
IE5QSWRlbnRpZmllciBtZXRob2ROYW1lKTsKdHlwZWRlZiBib29sICgqTlBOX1JlbW92ZVByb3Bl
cnR5UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUpOwp0eXBlZGVmIHZvaWQgKCpOUE5fU2V0RXhjZXB0aW9uUHJvY1B0cikgKE5QT2JqZWN0
ICpvYmosIGNvbnN0IE5QVVRGOCAqbWVzc2FnZSk7CnR5cGVkZWYgYm9vbCAoKk5QTl9FbnVtZXJh
dGVQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgKippZGVu
dGlmaWVyLCB1aW50MzJfdCAqY291bnQpOwp0eXBlZGVmIGJvb2wgKCpOUE5fQ29uc3RydWN0UHJv
Y1B0cikoTlBQIG5wcCwgTlBPYmplY3QqIG9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1aW50
MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50ICpyZXN1bHQpOyAgICAKCnR5cGVkZWYgTlBFcnJvciAo
Kk5QUF9OZXdQcm9jUHRyKShOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5QUCBpbnN0YW5jZSwgdWlu
dDE2X3QgbW9kZSwgaW50MTZfdCBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIqIGFyZ3ZbXSwgTlBT
YXZlZERhdGEqIHNhdmVkKTsKdHlwZWRlZiBOUEVycm9yICgqTlBQX0Rlc3Ryb3lQcm9jUHRyKShO
UFAgaW5zdGFuY2UsIE5QU2F2ZWREYXRhKiogc2F2ZSk7CnR5cGVkZWYgTlBFcnJvciAoKk5QUF9T
ZXRXaW5kb3dQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QV2luZG93KiB3aW5kb3cpOwp0eXBlZGVm
IE5QRXJyb3IgKCpOUFBfTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBl
IHR5cGUsIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwgdWludDE2X3QqIHN0eXBl
KTsKdHlwZWRlZiBOUEVycm9yICgqTlBQX0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFu
Y2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7CnR5cGVkZWYgdm9pZCAoKk5Q
UF9TdHJlYW1Bc0ZpbGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGNv
bnN0IGNoYXIqIGZuYW1lKTsKdHlwZWRlZiBpbnQzMl90ICgqTlBQX1dyaXRlUmVhZHlQcm9jUHRy
KShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0pOwp0eXBlZGVmIGludDMyX3QgKCpOUFBf
V3JpdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3Qgb2Zm
c2V0LCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKTsKdHlwZWRlZiB2b2lkICgqTlBQX1ByaW50
UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFByaW50KiBwbGF0Zm9ybVByaW50KTsKdHlwZWRlZiBp
bnQxNl90ICgqTlBQX0hhbmRsZUV2ZW50UHJvY1B0cikoTlBQIGluc3RhbmNlLCB2b2lkKiBldmVu
dCk7CnR5cGVkZWYgdm9pZCAoKk5QUF9VUkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNv
bnN0IGNoYXIqIFVSTCwgTlBSZWFzb24gcmVhc29uLCB2b2lkKiBub3RpZnlEYXRhKTsKdHlwZWRl
ZiBOUEVycm9yICgqTlBQX0dldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsKdHlwZWRlZiBOUEVycm9yICgqTlBQX1NldFZh
bHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFs
dWUpOwp0eXBlZGVmIE5QQm9vbCAoKk5QUF9Hb3RGb2N1c1B0cikoTlBQIGluc3RhbmNlLCBOUEZv
Y3VzRGlyZWN0aW9uIGRpcmVjdGlvbik7CnR5cGVkZWYgdm9pZCAoKk5QUF9Mb3N0Rm9jdXNQdHIp
KE5QUCBpbnN0YW5jZSk7CnR5cGVkZWYgdm9pZCAoKk5QUF9VUkxSZWRpcmVjdE5vdGlmeVB0ciko
TlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGludDMyX3Qgc3RhdHVzLCB2b2lkKiBub3Rp
ZnlEYXRhKTsKdHlwZWRlZiBOUEVycm9yICgqTlBQX0NsZWFyU2l0ZURhdGFQdHIpKGNvbnN0IGNo
YXIqIHNpdGUsIHVpbnQ2NF90IGZsYWdzLCB1aW50NjRfdCBtYXhBZ2UpOwp0eXBlZGVmIGNoYXIq
KiAoKk5QUF9HZXRTaXRlc1dpdGhEYXRhUHRyKSh2b2lkKTsKCnR5cGVkZWYgdm9pZCAqKCpOUFBf
R2V0SmF2YUNsYXNzUHJvY1B0cikodm9pZCk7CnR5cGVkZWYgdm9pZCogSlJJR2xvYmFsUmVmOyAv
L25vdCB1c2luZyB0aGlzIHJpZ2h0IG5vdwoKdHlwZWRlZiBzdHJ1Y3QgX05QTmV0c2NhcGVGdW5j
cyB7CiAgICB1aW50MTZfdCBzaXplOwogICAgdWludDE2X3QgdmVyc2lvbjsKICAgIAogICAgTlBO
X0dldFVSTFByb2NQdHIgZ2V0dXJsOwogICAgTlBOX1Bvc3RVUkxQcm9jUHRyIHBvc3R1cmw7CiAg
ICBOUE5fUmVxdWVzdFJlYWRQcm9jUHRyIHJlcXVlc3RyZWFkOwogICAgTlBOX05ld1N0cmVhbVBy
b2NQdHIgbmV3c3RyZWFtOwogICAgTlBOX1dyaXRlUHJvY1B0ciB3cml0ZTsKICAgIE5QTl9EZXN0
cm95U3RyZWFtUHJvY1B0ciBkZXN0cm95c3RyZWFtOwogICAgTlBOX1N0YXR1c1Byb2NQdHIgc3Rh
dHVzOwogICAgTlBOX1VzZXJBZ2VudFByb2NQdHIgdWFnZW50OwogICAgTlBOX01lbUFsbG9jUHJv
Y1B0ciBtZW1hbGxvYzsKICAgIE5QTl9NZW1GcmVlUHJvY1B0ciBtZW1mcmVlOwogICAgTlBOX01l
bUZsdXNoUHJvY1B0ciBtZW1mbHVzaDsKICAgIE5QTl9SZWxvYWRQbHVnaW5zUHJvY1B0ciByZWxv
YWRwbHVnaW5zOwogICAgTlBOX0dldEphdmFFbnZQcm9jUHRyIGdldEphdmFFbnY7CiAgICBOUE5f
R2V0SmF2YVBlZXJQcm9jUHRyIGdldEphdmFQZWVyOwogICAgTlBOX0dldFVSTE5vdGlmeVByb2NQ
dHIgZ2V0dXJsbm90aWZ5OwogICAgTlBOX1Bvc3RVUkxOb3RpZnlQcm9jUHRyIHBvc3R1cmxub3Rp
Znk7CiAgICBOUE5fR2V0VmFsdWVQcm9jUHRyIGdldHZhbHVlOwogICAgTlBOX1NldFZhbHVlUHJv
Y1B0ciBzZXR2YWx1ZTsKICAgIE5QTl9JbnZhbGlkYXRlUmVjdFByb2NQdHIgaW52YWxpZGF0ZXJl
Y3Q7CiAgICBOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQdHIgaW52YWxpZGF0ZXJlZ2lvbjsKICAg
IE5QTl9Gb3JjZVJlZHJhd1Byb2NQdHIgZm9yY2VyZWRyYXc7CiAgICAKICAgIE5QTl9HZXRTdHJp
bmdJZGVudGlmaWVyUHJvY1B0ciBnZXRzdHJpbmdpZGVudGlmaWVyOwogICAgTlBOX0dldFN0cmlu
Z0lkZW50aWZpZXJzUHJvY1B0ciBnZXRzdHJpbmdpZGVudGlmaWVyczsKICAgIE5QTl9HZXRJbnRJ
ZGVudGlmaWVyUHJvY1B0ciBnZXRpbnRpZGVudGlmaWVyOwogICAgTlBOX0lkZW50aWZpZXJJc1N0
cmluZ1Byb2NQdHIgaWRlbnRpZmllcmlzc3RyaW5nOwogICAgTlBOX1VURjhGcm9tSWRlbnRpZmll
clByb2NQdHIgdXRmOGZyb21pZGVudGlmaWVyOwogICAgTlBOX0ludEZyb21JZGVudGlmaWVyUHJv
Y1B0ciBpbnRmcm9taWRlbnRpZmllcjsKICAgIE5QTl9DcmVhdGVPYmplY3RQcm9jUHRyIGNyZWF0
ZW9iamVjdDsKICAgIE5QTl9SZXRhaW5PYmplY3RQcm9jUHRyIHJldGFpbm9iamVjdDsKICAgIE5Q
Tl9SZWxlYXNlT2JqZWN0UHJvY1B0ciByZWxlYXNlb2JqZWN0OwogICAgTlBOX0ludm9rZVByb2NQ
dHIgaW52b2tlOwogICAgTlBOX0ludm9rZURlZmF1bHRQcm9jUHRyIGludm9rZURlZmF1bHQ7CiAg
ICBOUE5fRXZhbHVhdGVQcm9jUHRyIGV2YWx1YXRlOwogICAgTlBOX0dldFByb3BlcnR5UHJvY1B0
ciBnZXRwcm9wZXJ0eTsKICAgIE5QTl9TZXRQcm9wZXJ0eVByb2NQdHIgc2V0cHJvcGVydHk7CiAg
ICBOUE5fUmVtb3ZlUHJvcGVydHlQcm9jUHRyIHJlbW92ZXByb3BlcnR5OwogICAgTlBOX0hhc1By
b3BlcnR5UHJvY1B0ciBoYXNwcm9wZXJ0eTsKICAgIE5QTl9IYXNNZXRob2RQcm9jUHRyIGhhc21l
dGhvZDsKICAgIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0ciByZWxlYXNldmFyaWFudHZh
bHVlOwogICAgTlBOX1NldEV4Y2VwdGlvblByb2NQdHIgc2V0ZXhjZXB0aW9uOwogICAgTlBOX1B1
c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHB1c2hwb3B1cHNlbmFibGVkc3RhdGU7CiAgICBO
UE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwb3Bwb3B1cHNlbmFibGVkc3RhdGU7CiAg
ICBOUE5fRW51bWVyYXRlUHJvY1B0ciBlbnVtZXJhdGU7CiAgICBOUE5fUGx1Z2luVGhyZWFkQXN5
bmNDYWxsUHJvY1B0ciBwbHVnaW50aHJlYWRhc3luY2NhbGw7CiAgICBOUE5fQ29uc3RydWN0UHJv
Y1B0ciBjb25zdHJ1Y3Q7CiAgICBOUE5fR2V0VmFsdWVGb3JVUkxQcm9jUHRyIGdldHZhbHVlZm9y
dXJsOwogICAgTlBOX1NldFZhbHVlRm9yVVJMUHJvY1B0ciBzZXR2YWx1ZWZvcnVybDsKICAgIE5Q
Tl9HZXRBdXRoZW50aWNhdGlvbkluZm9Qcm9jUHRyIGdldGF1dGhlbnRpY2F0aW9uaW5mbzsKICAg
IE5QTl9TY2hlZHVsZVRpbWVyUHJvY1B0ciBzY2hlZHVsZXRpbWVyOwogICAgTlBOX1Vuc2NoZWR1
bGVUaW1lclByb2NQdHIgdW5zY2hlZHVsZXRpbWVyOwogICAgTlBOX1BvcFVwQ29udGV4dE1lbnVQ
cm9jUHRyIHBvcHVwY29udGV4dG1lbnU7CiAgICBOUE5fQ29udmVydFBvaW50UHJvY1B0ciBjb252
ZXJ0cG9pbnQ7Cn0gTlBOZXRzY2FwZUZ1bmNzOwoKdHlwZWRlZiBzdHJ1Y3QgX05QUGx1Z2luRnVu
Y3MgewogICAgdWludDE2X3Qgc2l6ZTsKICAgIHVpbnQxNl90IHZlcnNpb247CiAgICBOUFBfTmV3
UHJvY1B0ciBuZXdwOwogICAgTlBQX0Rlc3Ryb3lQcm9jUHRyIGRlc3Ryb3k7CiAgICBOUFBfU2V0
V2luZG93UHJvY1B0ciBzZXR3aW5kb3c7CiAgICBOUFBfTmV3U3RyZWFtUHJvY1B0ciBuZXdzdHJl
YW07CiAgICBOUFBfRGVzdHJveVN0cmVhbVByb2NQdHIgZGVzdHJveXN0cmVhbTsKICAgIE5QUF9T
dHJlYW1Bc0ZpbGVQcm9jUHRyIGFzZmlsZTsKICAgIE5QUF9Xcml0ZVJlYWR5UHJvY1B0ciB3cml0
ZXJlYWR5OwogICAgTlBQX1dyaXRlUHJvY1B0ciB3cml0ZTsKICAgIE5QUF9QcmludFByb2NQdHIg
cHJpbnQ7CiAgICBOUFBfSGFuZGxlRXZlbnRQcm9jUHRyIGV2ZW50OwogICAgTlBQX1VSTE5vdGlm
eVByb2NQdHIgdXJsbm90aWZ5OwogICAgSlJJR2xvYmFsUmVmIGphdmFDbGFzczsKICAgIE5QUF9H
ZXRWYWx1ZVByb2NQdHIgZ2V0dmFsdWU7CiAgICBOUFBfU2V0VmFsdWVQcm9jUHRyIHNldHZhbHVl
OwogICAgTlBQX0dvdEZvY3VzUHRyIGdvdGZvY3VzOwogICAgTlBQX0xvc3RGb2N1c1B0ciBsb3N0
Zm9jdXM7CiAgICBOUFBfVVJMUmVkaXJlY3ROb3RpZnlQdHIgdXJscmVkaXJlY3Rub3RpZnk7CiAg
ICBOUFBfQ2xlYXJTaXRlRGF0YVB0ciBjbGVhcnNpdGVkYXRhOwogICAgTlBQX0dldFNpdGVzV2l0
aERhdGFQdHIgZ2V0c2l0ZXN3aXRoZGF0YTsKfSBOUFBsdWdpbkZ1bmNzOwoKdHlwZWRlZiBFWFBP
UlRFRF9DQUxMQkFDSyhOUEVycm9yLCBOUF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIpKE5QUGx1Z2lu
RnVuY3MqKTsKdHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyh2b2lkLCBOUFBfU2h1dGRvd25Qcm9j
UHRyKSh2b2lkKTsgICAgCgojaWYgZGVmaW5lZChYUF9NQUNPU1gpCnR5cGVkZWYgdm9pZCAoKkJQ
X0NyZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZlcmVuY2VzRnVuY1B0cikodm9pZCk7CnR5cGVkZWYg
TlBFcnJvciAoKk1haW5GdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNzKiwg
TlBQX1NodXRkb3duUHJvY1B0ciopOwojZW5kaWYKCiNpZiBkZWZpbmVkKFhQX1VOSVgpCnR5cGVk
ZWYgRVhQT1JURURfQ0FMTEJBQ0soTlBFcnJvciwgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpKE5QTmV0
c2NhcGVGdW5jcyosIE5QUGx1Z2luRnVuY3MqKTsKdHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyhj
b25zdCBjaGFyKiwgTlBfR2V0TUlNRURlc2NyaXB0aW9uRnVuY1B0cikodm9pZCk7CiNlbHNlCnR5
cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soTlBFcnJvciwgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpKE5Q
TmV0c2NhcGVGdW5jcyopOwojZW5kaWYKCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZgoKI2Vu
ZGlmCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbnBydW50aW1lLmgA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUwADAw
MDAwMDQwMDEwADExNzIxNDU3MTEzADAxMjI0NQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAG1hcmlvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
bWFyaW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKiAtKi0gTW9kZTog
QzsgdGFiLXdpZHRoOiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0
IC0qLSAqLwovKgogKiBDb3B5cmlnaHQgKGMpIDIwMDQsIEFwcGxlIENvbXB1dGVyLCBJbmMuIGFu
ZCBUaGUgTW96aWxsYSBGb3VuZGF0aW9uLiAKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogCiAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAqIG1ldDoKICogCiAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAzLiBOZWl0
aGVyIHRoZSBuYW1lcyBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgb3IgVGhlIE1v
emlsbGEKICogRm91bmRhdGlvbiAoIk1vemlsbGEiKSBub3IgdGhlIG5hbWVzIG9mIHRoZWlyIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAogKiB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAogKiBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCiAqIAogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
LCBNT1pJTExBIEFORCBUSEVJUiBDT05UUklCVVRPUlMgIkFTCiAqIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAogKiBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEKICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSwgTU9aSUxMQSBPUgogKiBUSEVJUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECiAq
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwogKiBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAqCiAqLwojaWZuZGVmIF9OUF9SVU5USU1FX0hfCiNkZWZpbmUgX05QX1JVTlRJ
TUVfSF8KCiNpbmNsdWRlICJucGFwaS5oIgoKI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIg
ewojZW5kaWYKCi8qCiAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGZhY2lsaXRhdGUgYmluZGluZyBj
b2RlIHdyaXR0ZW4gaW4gQyB0byBzY3JpcHQKICAgIG9iamVjdHMuICBUaGUgQVBJIGluIHRoaXMg
aGVhZGVyIGRvZXMgbm90IGFzc3VtZSB0aGUgcHJlc2VuY2Ugb2YgYQogICAgdXNlciBhZ2VudC4g
IFRoYXQgaXMsIGl0IGNhbiBiZSB1c2VkIHRvIGJpbmQgQyBjb2RlIHRvIHNjcmlwdGluZwogICAg
ZW52aXJvbm1lbnRzIG91dHNpZGUgb2YgdGhlIGNvbnRleHQgb2YgYSB1c2VyIGFnZW50LgogICAg
CiAgICBIb3dldmVyLCB0aGUgbm9ybWFsIHVzZSBvZiB0aGUgdGhpcyBBUEkgaXMgaW4gdGhlIGNv
bnRleHQgb2YgYQogICAgc2NyaXB0aW5nIGVudmlyb25tZW50IHJ1bm5pbmcgaW4gYSBicm93c2Vy
IG9yIG90aGVyIHVzZXIgYWdlbnQuCiAgICBJbiBwYXJ0aWN1bGFyIGl0IGlzIHVzZWQgdG8gc3Vw
cG9ydCB0aGUgZXh0ZW5kZWQgTmV0c2NhcGUKICAgIHNjcmlwdC1hYmlsaXR5IEFQSSBmb3IgcGx1
Z2lucyAoTlAtU0FQKS4gIE5QLVNBUCBpcyBhbiBleHRlbnNpb24KICAgIG9mIHRoZSBOZXRzY2Fw
ZSBwbHVnaW4gQVBJLiAgQXMgc3VjaCB3ZSBoYXZlIGFkb3B0ZWQgdGhlIHVzZSBvZgogICAgdGhl
ICJOUCIgcHJlZml4IGZvciB0aGlzIEFQSS4KCiAgICBUaGUgZm9sbG93aW5nIE5Qe058UH1WYXJp
YWJsZXMgd2VyZSBhZGRlZCB0byB0aGUgTmV0c2NhcGUgcGx1Z2luCiAgICBBUEkgKGluIG5wYXBp
LmgpOgoKICAgIE5QTlZXaW5kb3dOUE9iamVjdAogICAgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVj
dAogICAgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdAoKICAgIFRoZXNlIHZhcmlhYmxlcyBh
cmUgZXhwb3NlZCB0aHJvdWdoIE5QTl9HZXRWYWx1ZSgpIGFuZAogICAgTlBQX0dldFZhbHVlKCkg
KHJlc3BlY3RpdmVseSkgYW5kIGFyZSB1c2VkIHRvIGVzdGFibGlzaCB0aGUKICAgIGluaXRpYWwg
YmluZGluZyBiZXR3ZWVuIHRoZSB1c2VyIGFnZW50IGFuZCBuYXRpdmUgY29kZS4gIFRoZSBET00K
ICAgIG9iamVjdHMgaW4gdGhlIHVzZXIgYWdlbnQgY2FuIGJlIGV4YW1pbmVkIGFuZCBtYW5pcHVs
YXRlZCB1c2luZwogICAgdGhlIE5QTl8gZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiBOUE9iamVj
dHMgZGVzY3JpYmVkIGluIHRoaXMKICAgIGhlYWRlci4KCiAgICBUbyB0aGUgZXh0ZW50IHBvc3Np
YmxlIHRoZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc2NyaXB0aW5nCiAgICBsYW5ndWFnZSB1c2Vk
IGJ5IHRoZSBzY3JpcHRpbmcgZW52aXJvbm1lbnQgaGF2ZSBiZWVuIG1pbmltaXplZC4KKi8KCiNk
ZWZpbmUgTlBfQkVHSU5fTUFDUk8gIGRvIHsKI2RlZmluZSBOUF9FTkRfTUFDUk8gICAgfSB3aGls
ZSAoMCkKCi8qCiAgICBPYmplY3RzIChub24tcHJpbWl0aXZlIGRhdGEpIHBhc3NlZCBiZXR3ZWVu
ICdDJyBhbmQgc2NyaXB0IGlzCiAgICBhbHdheXMgd3JhcHBlZCBpbiBhbiBOUE9iamVjdC4gIFRo
ZSAnaW50ZXJmYWNlJyBvZiBhbiBOUE9iamVjdCBpcwogICAgZGVzY3JpYmVkIGJ5IGFuIE5QQ2xh
c3MuCiovCnR5cGVkZWYgc3RydWN0IE5QT2JqZWN0IE5QT2JqZWN0Owp0eXBlZGVmIHN0cnVjdCBO
UENsYXNzIE5QQ2xhc3M7Cgp0eXBlZGVmIGNoYXIgTlBVVEY4Owp0eXBlZGVmIHN0cnVjdCBfTlBT
dHJpbmcgewogICAgY29uc3QgTlBVVEY4ICpVVEY4Q2hhcmFjdGVyczsKICAgIHVpbnQzMl90IFVU
RjhMZW5ndGg7Cn0gTlBTdHJpbmc7Cgp0eXBlZGVmIGVudW0gewogICAgTlBWYXJpYW50VHlwZV9W
b2lkLAogICAgTlBWYXJpYW50VHlwZV9OdWxsLAogICAgTlBWYXJpYW50VHlwZV9Cb29sLAogICAg
TlBWYXJpYW50VHlwZV9JbnQzMiwKICAgIE5QVmFyaWFudFR5cGVfRG91YmxlLAogICAgTlBWYXJp
YW50VHlwZV9TdHJpbmcsCiAgICBOUFZhcmlhbnRUeXBlX09iamVjdAp9IE5QVmFyaWFudFR5cGU7
Cgp0eXBlZGVmIHN0cnVjdCBfTlBWYXJpYW50IHsKICAgIE5QVmFyaWFudFR5cGUgdHlwZTsKICAg
IHVuaW9uIHsKICAgICAgICBib29sIGJvb2xWYWx1ZTsKICAgICAgICBpbnQzMl90IGludFZhbHVl
OwogICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKICAgICAgICBOUFN0cmluZyBzdHJpbmdWYWx1
ZTsKICAgICAgICBOUE9iamVjdCAqb2JqZWN0VmFsdWU7CiAgICB9IHZhbHVlOwp9IE5QVmFyaWFu
dDsKCi8qCiAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSBpcyBjYWxsZWQgb24gYWxsICdvdXQn
IHBhcmFtZXRlcnMKICAgIHJlZmVyZW5jZXMuICBTcGVjaWZpY2FsbHkgaXQgaXMgdG8gYmUgY2Fs
bGVkIG9uIHZhcmlhbnRzIHRoYXQgb3duCiAgICB0aGVpciB2YWx1ZSwgYXMgaXMgdGhlIGNhc2Ug
d2l0aCBhbGwgbm9uLWNvbnN0IE5QVmFyaWFudCoKICAgIGFyZ3VtZW50cyBhZnRlciBhIHN1Y2Nl
c3NmdWwgY2FsbCB0byBhbnkgbWV0aG9kcyAoZXhjZXB0IHRoaXMgb25lKQogICAgaW4gdGhpcyBB
UEkuCgogICAgQWZ0ZXIgY2FsbGluZyBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSwgdGhlIHR5cGUg
b2YgdGhlIHZhcmlhbnQKICAgIHdpbGwgYmUgTlBWYXJpYW50VHlwZV9Wb2lkLgoqLwp2b2lkIE5Q
Tl9SZWxlYXNlVmFyaWFudFZhbHVlKE5QVmFyaWFudCAqdmFyaWFudCk7CgojZGVmaW5lIE5QVkFS
SUFOVF9JU19WT0lEKF92KSAgICAoKF92KS50eXBlID09IE5QVmFyaWFudFR5cGVfVm9pZCkKI2Rl
ZmluZSBOUFZBUklBTlRfSVNfTlVMTChfdikgICAgKChfdikudHlwZSA9PSBOUFZhcmlhbnRUeXBl
X051bGwpCiNkZWZpbmUgTlBWQVJJQU5UX0lTX0JPT0xFQU4oX3YpICgoX3YpLnR5cGUgPT0gTlBW
YXJpYW50VHlwZV9Cb29sKQojZGVmaW5lIE5QVkFSSUFOVF9JU19JTlQzMihfdikgICAoKF92KS50
eXBlID09IE5QVmFyaWFudFR5cGVfSW50MzIpCiNkZWZpbmUgTlBWQVJJQU5UX0lTX0RPVUJMRShf
dikgICgoX3YpLnR5cGUgPT0gTlBWYXJpYW50VHlwZV9Eb3VibGUpCiNkZWZpbmUgTlBWQVJJQU5U
X0lTX1NUUklORyhfdikgICgoX3YpLnR5cGUgPT0gTlBWYXJpYW50VHlwZV9TdHJpbmcpCiNkZWZp
bmUgTlBWQVJJQU5UX0lTX09CSkVDVChfdikgICgoX3YpLnR5cGUgPT0gTlBWYXJpYW50VHlwZV9P
YmplY3QpCgojZGVmaW5lIE5QVkFSSUFOVF9UT19CT09MRUFOKF92KSAoKF92KS52YWx1ZS5ib29s
VmFsdWUpCiNkZWZpbmUgTlBWQVJJQU5UX1RPX0lOVDMyKF92KSAgICgoX3YpLnZhbHVlLmludFZh
bHVlKQojZGVmaW5lIE5QVkFSSUFOVF9UT19ET1VCTEUoX3YpICAoKF92KS52YWx1ZS5kb3VibGVW
YWx1ZSkKI2RlZmluZSBOUFZBUklBTlRfVE9fU1RSSU5HKF92KSAgKChfdikudmFsdWUuc3RyaW5n
VmFsdWUpCiNkZWZpbmUgTlBWQVJJQU5UX1RPX09CSkVDVChfdikgICgoX3YpLnZhbHVlLm9iamVj
dFZhbHVlKQoKI2RlZmluZSBWT0lEX1RPX05QVkFSSUFOVChfdikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApOUF9CRUdJTl9NQUNSTyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAoX3YpLnR5cGUgPSBOUFZhcmlhbnRUeXBlX1ZvaWQ7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgIChfdikudmFsdWUub2JqZWN0VmFsdWUgPSBOVUxMOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApOUF9FTkRfTUFDUk8K
CiNkZWZpbmUgTlVMTF9UT19OUFZBUklBTlQoX3YpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKTlBfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKF92KS50
eXBlID0gTlBWYXJpYW50VHlwZV9OdWxsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAoX3YpLnZhbHVlLm9iamVjdFZhbHVlID0gTlVMTDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKTlBfRU5EX01BQ1JPCgojZGVmaW5l
IEJPT0xFQU5fVE9fTlBWQVJJQU5UKF92YWwsIF92KSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCk5QX0JFR0lOX01BQ1JPICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChfdikudHlwZSA9IE5Q
VmFyaWFudFR5cGVfQm9vbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgKF92KS52YWx1ZS5ib29sVmFsdWUgPSAhIShfdmFsKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCk5QX0VORF9NQUNSTwoKI2RlZmluZSBJTlQzMl9U
T19OUFZBUklBTlQoX3ZhbCwgX3YpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXApOUF9CRUdJTl9NQUNSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAoX3YpLnR5cGUgPSBOUFZhcmlhbnRU
eXBlX0ludDMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
IChfdikudmFsdWUuaW50VmFsdWUgPSBfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXApOUF9FTkRfTUFDUk8KCiNkZWZpbmUgRE9VQkxFX1RPX05QVkFS
SUFOVChfdmFsLCBfdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
TlBfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgKF92KS50eXBlID0gTlBWYXJpYW50VHlwZV9Eb3Vi
bGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAoX3YpLnZh
bHVlLmRvdWJsZVZhbHVlID0gX3ZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKTlBfRU5EX01BQ1JPCgojZGVmaW5lIFNUUklOR1pfVE9fTlBWQVJJQU5UKF92
YWwsIF92KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCk5QX0JFR0lO
X01BQ1JPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgIChfdikudHlwZSA9IE5QVmFyaWFudFR5cGVfU3RyaW5nOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgTlBTdHJpbmcgc3RyID0g
eyBfdmFsLCB1aW50MzJfdChzdHJsZW4oX3ZhbCkpIH07ICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAoX3YpLnZhbHVlLnN0cmluZ1ZhbHVlID0gc3RyOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKTlBfRU5EX01BQ1JPCgojZGVmaW5lIFNUUklOR05f
VE9fTlBWQVJJQU5UKF92YWwsIF9sZW4sIF92KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCk5QX0JFR0lOX01BQ1JPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChfdikudHlwZSA9IE5QVmFyaWFudFR5
cGVfU3RyaW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
TlBTdHJpbmcgc3RyID0geyBfdmFsLCB1aW50MzJfdChfbGVuKSB9OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAoX3YpLnZhbHVlLnN0cmluZ1ZhbHVlID0gc3RyOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKTlBfRU5EX01BQ1JPCgoj
ZGVmaW5lIE9CSkVDVF9UT19OUFZBUklBTlQoX3ZhbCwgX3YpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCk5QX0JFR0lOX01BQ1JPICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChfdikudHlw
ZSA9IE5QVmFyaWFudFR5cGVfT2JqZWN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgKF92KS52YWx1ZS5vYmplY3RWYWx1ZSA9IF92YWw7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCk5QX0VORF9NQUNSTwoKCi8qCiAgVHlw
ZSBtYXBwaW5ncyAoSmF2YVNjcmlwdCB0eXBlcyBoYXZlIGJlZW4gdXNlZCBmb3IgaWxsdXN0cmF0
aW9uCiAgICBwdXJwb3Nlcyk6CgogIEphdmFTY3JpcHQgICAgICAgdG8gICAgICAgICAgICAgQyAo
TlBWYXJpYW50IHdpdGggdHlwZTopCiAgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICBO
UFZhcmlhbnRUeXBlX1ZvaWQKICBudWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFy
aWFudFR5cGVfTnVsbAogIEJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50
VHlwZV9Cb29sCiAgTnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICBOUFZhcmlhbnRUeXBl
X0RvdWJsZSBvciBOUFZhcmlhbnRUeXBlX0ludDMyCiAgU3RyaW5nICAgICAgICAgICAgICAgICAg
ICAgICAgICBOUFZhcmlhbnRUeXBlX1N0cmluZwogIE9iamVjdCAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlBWYXJpYW50VHlwZV9PYmplY3QKCiAgQyAoTlBWYXJpYW50IHdpdGggdHlwZTopICAg
dG8gICBKYXZhU2NyaXB0CiAgTlBWYXJpYW50VHlwZV9Wb2lkICAgICAgICAgICAgICB1bmRlZmlu
ZWQKICBOUFZhcmlhbnRUeXBlX051bGwgICAgICAgICAgICAgIG51bGwKICBOUFZhcmlhbnRUeXBl
X0Jvb2wgICAgICAgICAgICAgIEJvb2xlYW4KICBOUFZhcmlhbnRUeXBlX0ludDMyICAgICAgICAg
ICAgIE51bWJlcgogIE5QVmFyaWFudFR5cGVfRG91YmxlICAgICAgICAgICAgTnVtYmVyCiAgTlBW
YXJpYW50VHlwZV9TdHJpbmcgICAgICAgICAgICBTdHJpbmcKICBOUFZhcmlhbnRUeXBlX09iamVj
dCAgICAgICAgICAgIE9iamVjdAoqLwoKdHlwZWRlZiB2b2lkICpOUElkZW50aWZpZXI7CgovKgog
ICAgTlBPYmplY3RzIGhhdmUgbWV0aG9kcyBhbmQgcHJvcGVydGllcy4gIE1ldGhvZHMgYW5kIHBy
b3BlcnRpZXMgYXJlCiAgICBpZGVudGlmaWVkIHdpdGggTlBJZGVudGlmaWVycy4gIFRoZXNlIGlk
ZW50aWZpZXJzIG1heSBiZSByZWZsZWN0ZWQKICAgIGluIHNjcmlwdC4gIE5QSWRlbnRpZmllcnMg
Y2FuIGJlIGVpdGhlciBzdHJpbmdzIG9yIGludGVnZXJzLCBJT1csCiAgICBtZXRob2RzIGFuZCBw
cm9wZXJ0aWVzIGNhbiBiZSBpZGVudGlmaWVkIGJ5IGVpdGhlciBzdHJpbmdzIG9yCiAgICBpbnRl
Z2VycyAoaS5lLiBmb29bImJhciJdIHZzIGZvb1sxXSkuIE5QSWRlbnRpZmllcnMgY2FuIGJlCiAg
ICBjb21wYXJlZCB1c2luZyA9PS4gIEluIGNhc2Ugb2YgYW55IGVycm9ycywgdGhlIHJlcXVlc3Rl
ZAogICAgTlBJZGVudGlmaWVyKHMpIHdpbGwgYmUgTlVMTC4gTlBJZGVudGlmaWVyIGxpZmV0aW1l
IGlzIGNvbnRyb2xsZWQKICAgIGJ5IHRoZSBicm93c2VyLiBQbHVnaW5zIGRvIG5vdCBuZWVkIHRv
IHdvcnJ5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50CiAgICB3aXRoIHJlZ2FyZHMgdG8gTlBJZGVu
dGlmaWVycy4KKi8KTlBJZGVudGlmaWVyIE5QTl9HZXRTdHJpbmdJZGVudGlmaWVyKGNvbnN0IE5Q
VVRGOCAqbmFtZSk7CnZvaWQgTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzKGNvbnN0IE5QVVRGOCAq
Km5hbWVzLCBpbnQzMl90IG5hbWVDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlBJZGVudGlmaWVyICppZGVudGlmaWVycyk7Ck5QSWRlbnRpZmllciBOUE5fR2V0SW50SWRlbnRp
ZmllcihpbnQzMl90IGludGlkKTsKYm9vbCBOUE5fSWRlbnRpZmllcklzU3RyaW5nKE5QSWRlbnRp
ZmllciBpZGVudGlmaWVyKTsKCi8qCiAgICBUaGUgTlBVVEY4IHJldHVybmVkIGZyb20gTlBOX1VU
RjhGcm9tSWRlbnRpZmllciBTSE9VTEQgYmUgZnJlZWQuCiovCk5QVVRGOCAqTlBOX1VURjhGcm9t
SWRlbnRpZmllcihOUElkZW50aWZpZXIgaWRlbnRpZmllcik7CgovKgogICAgR2V0IHRoZSBpbnRl
Z2VyIHJlcHJlc2VudGVkIGJ5IGlkZW50aWZpZXIuIElmIGlkZW50aWZpZXIgaXMgbm90IGFuCiAg
ICBpbnRlZ2VyIGlkZW50aWZpZXIsIHRoZSBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkLgoqLwppbnQz
Ml90IE5QTl9JbnRGcm9tSWRlbnRpZmllcihOUElkZW50aWZpZXIgaWRlbnRpZmllcik7CgovKgog
ICAgTlBPYmplY3QgYmVoYXZpb3IgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBz
ZXQgb2YKICAgIGNhbGxiYWNrIGZ1bmN0aW9ucy4KCiAgICBUaGUgTlBWYXJpYW50ICpyZXN1bHQg
YXJndW1lbnQgb2YgdGhlc2UgZnVuY3Rpb25zICh3aGVyZQogICAgYXBwbGljYWJsZSkgc2hvdWxk
IGJlIHJlbGVhc2VkIHVzaW5nIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCkuCiovCnR5cGVkZWYg
TlBPYmplY3QgKigqTlBBbGxvY2F0ZUZ1bmN0aW9uUHRyKShOUFAgbnBwLCBOUENsYXNzICphQ2xh
c3MpOwp0eXBlZGVmIHZvaWQgKCpOUERlYWxsb2NhdGVGdW5jdGlvblB0cikoTlBPYmplY3QgKm5w
b2JqKTsKdHlwZWRlZiB2b2lkICgqTlBJbnZhbGlkYXRlRnVuY3Rpb25QdHIpKE5QT2JqZWN0ICpu
cG9iaik7CnR5cGVkZWYgYm9vbCAoKk5QSGFzTWV0aG9kRnVuY3Rpb25QdHIpKE5QT2JqZWN0ICpu
cG9iaiwgTlBJZGVudGlmaWVyIG5hbWUpOwp0eXBlZGVmIGJvb2wgKCpOUEludm9rZUZ1bmN0aW9u
UHRyKShOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBuYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVpbnQzMl90IGFyZ0Nv
dW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFZhcmlhbnQgKnJlc3Vs
dCk7CnR5cGVkZWYgYm9vbCAoKk5QSW52b2tlRGVmYXVsdEZ1bmN0aW9uUHRyKShOUE9iamVjdCAq
bnBvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBO
UFZhcmlhbnQgKmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCBhcmdDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5QVmFyaWFudCAqcmVzdWx0KTsKdHlwZWRlZiBib29sICgqTlBIYXNQcm9wZXJ0eUZ1
bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBuYW1lKTsKdHlwZWRlZiBi
b29sICgqTlBHZXRQcm9wZXJ0eUZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRp
ZmllciBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFy
aWFudCAqcmVzdWx0KTsKdHlwZWRlZiBib29sICgqTlBTZXRQcm9wZXJ0eUZ1bmN0aW9uUHRyKShO
UE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBuYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IE5QVmFyaWFudCAqdmFsdWUpOwp0eXBlZGVmIGJvb2wg
KCpOUFJlbW92ZVByb3BlcnR5RnVuY3Rpb25QdHIpKE5QT2JqZWN0ICpucG9iaiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUElkZW50aWZpZXIgbmFtZSk7CnR5
cGVkZWYgYm9vbCAoKk5QRW51bWVyYXRpb25GdW5jdGlvblB0cikoTlBPYmplY3QgKm5wb2JqLCBO
UElkZW50aWZpZXIgKip2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCAqY291bnQpOwp0eXBlZGVmIGJvb2wgKCpOUENvbnN0cnVjdEZ1bmN0aW9u
UHRyKShOUE9iamVjdCAqbnBvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IE5QVmFyaWFudCAqYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgYXJnQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5QVmFyaWFudCAqcmVzdWx0KTsKCi8qCiAgICBOUE9iamVjdHMgcmV0dXJuZWQg
YnkgY3JlYXRlLCByZXRhaW4sIGludm9rZSwgYW5kIGdldFByb3BlcnR5IHBhc3MKICAgIGEgcmVm
ZXJlbmNlIGNvdW50IHRvIHRoZSBjYWxsZXIuICBUaGF0IGlzLCB0aGUgY2FsbGVlIGFkZHMgYQog
ICAgcmVmZXJlbmNlIGNvdW50IHdoaWNoIHBhc3NlcyB0byB0aGUgY2FsbGVyLiAgSXQgaXMgdGhl
IGNhbGxlcidzCiAgICByZXNwb25zaWJpbGl0eSB0byByZWxlYXNlIHRoZSByZXR1cm5lZCBvYmpl
Y3QuCgogICAgTlBJbnZva2VGdW5jdGlvblB0ciBmdW5jdGlvbiBtYXkgcmV0dXJuIDAgdG8gaW5k
aWNhdGUgYSB2b2lkCiAgICByZXN1bHQuCgogICAgTlBJbnZhbGlkYXRlRnVuY3Rpb25QdHIgaXMg
Y2FsbGVkIGJ5IHRoZSBzY3JpcHRpbmcgZW52aXJvbm1lbnQKICAgIHdoZW4gdGhlIG5hdGl2ZSBj
b2RlIGlzIHNodXRkb3duLiAgQW55IGF0dGVtcHQgdG8gbWVzc2FnZSBhCiAgICBOUE9iamVjdCBp
bnN0YW5jZSBhZnRlciB0aGUgaW52YWxpZGF0ZSBjYWxsYmFjayBoYXMgYmVlbgogICAgY2FsbGVk
IHdpbGwgcmVzdWx0IGluIHVuZGVmaW5lZCBiZWhhdmlvciwgZXZlbiBpZiB0aGUgbmF0aXZlIGNv
ZGUKICAgIGlzIHN0aWxsIHJldGFpbmluZyB0aG9zZSBOUE9iamVjdCBpbnN0YW5jZXMuICAoVGhl
IHJ1bnRpbWUKICAgIHdpbGwgdHlwaWNhbGx5IHJldHVybiBpbW1lZGlhdGVseSwgd2l0aCAwIG9y
IE5VTEwsIGZyb20gYW4gYXR0ZW1wdAogICAgdG8gZGlzcGF0Y2ggdG8gYSBOUE9iamVjdCwgYnV0
IHRoaXMgYmVoYXZpb3Igc2hvdWxkIG5vdCBiZQogICAgZGVwZW5kZWQgdXBvbi4pCgogICAgVGhl
IE5QRW51bWVyYXRpb25GdW5jdGlvblB0ciBmdW5jdGlvbiBtYXkgcGFzcyBhbiBhcnJheSBvZgog
ICAgTlBJZGVudGlmaWVycyBiYWNrIHRvIHRoZSBjYWxsZXIuIFRoZSBjYWxsZWUgYWxsb2NzIHRo
ZSBtZW1vcnkgb2YKICAgIHRoZSBhcnJheSB1c2luZyBOUE5fTWVtQWxsb2MoKSwgYW5kIGl0J3Mg
dGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5CiAgICB0byByZWxlYXNlIGl0IHVzaW5nIE5QTl9N
ZW1GcmVlKCkuCiovCnN0cnVjdCBOUENsYXNzCnsKICAgIHVpbnQzMl90IHN0cnVjdFZlcnNpb247
CiAgICBOUEFsbG9jYXRlRnVuY3Rpb25QdHIgYWxsb2NhdGU7CiAgICBOUERlYWxsb2NhdGVGdW5j
dGlvblB0ciBkZWFsbG9jYXRlOwogICAgTlBJbnZhbGlkYXRlRnVuY3Rpb25QdHIgaW52YWxpZGF0
ZTsKICAgIE5QSGFzTWV0aG9kRnVuY3Rpb25QdHIgaGFzTWV0aG9kOwogICAgTlBJbnZva2VGdW5j
dGlvblB0ciBpbnZva2U7CiAgICBOUEludm9rZURlZmF1bHRGdW5jdGlvblB0ciBpbnZva2VEZWZh
dWx0OwogICAgTlBIYXNQcm9wZXJ0eUZ1bmN0aW9uUHRyIGhhc1Byb3BlcnR5OwogICAgTlBHZXRQ
cm9wZXJ0eUZ1bmN0aW9uUHRyIGdldFByb3BlcnR5OwogICAgTlBTZXRQcm9wZXJ0eUZ1bmN0aW9u
UHRyIHNldFByb3BlcnR5OwogICAgTlBSZW1vdmVQcm9wZXJ0eUZ1bmN0aW9uUHRyIHJlbW92ZVBy
b3BlcnR5OwogICAgTlBFbnVtZXJhdGlvbkZ1bmN0aW9uUHRyIGVudW1lcmF0ZTsKICAgIE5QQ29u
c3RydWN0RnVuY3Rpb25QdHIgY29uc3RydWN0Owp9OwoKI2RlZmluZSBOUF9DTEFTU19TVFJVQ1Rf
VkVSU0lPTiAgICAgIDMKCiNkZWZpbmUgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fRU5VTSAyCiNk
ZWZpbmUgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fQ1RPUiAzCgojZGVmaW5lIE5QX0NMQVNTX1NU
UlVDVF9WRVJTSU9OX0hBU19FTlVNKG5wY2xhc3MpICAgXAogICAgICAgICgobnBjbGFzcyktPnN0
cnVjdFZlcnNpb24gPj0gTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fRU5VTSkKCiNkZWZpbmUgTlBf
Q0xBU1NfU1RSVUNUX1ZFUlNJT05fSEFTX0NUT1IobnBjbGFzcykgICBcCiAgICAgICAgKChucGNs
YXNzKS0+c3RydWN0VmVyc2lvbiA+PSBOUF9DTEFTU19TVFJVQ1RfVkVSU0lPTl9DVE9SKQoKc3Ry
dWN0IE5QT2JqZWN0IHsKICAgIE5QQ2xhc3MgKl9jbGFzczsKICAgIHVpbnQzMl90IHJlZmVyZW5j
ZUNvdW50OwogICAgLyoKICAgICAqIEFkZGl0aW9uYWwgc3BhY2UgbWF5IGJlIGFsbG9jYXRlZCBo
ZXJlIGJ5IHR5cGVzIG9mIE5QT2JqZWN0cwogICAgICovCn07CgovKgogICAgSWYgdGhlIGNsYXNz
IGhhcyBhbiBhbGxvY2F0ZSBmdW5jdGlvbiwgTlBOX0NyZWF0ZU9iamVjdCBpbnZva2VzCiAgICB0
aGF0IGZ1bmN0aW9uLCBvdGhlcndpc2UgYSBOUE9iamVjdCBpcyBhbGxvY2F0ZWQgYW5kCiAgICBy
ZXR1cm5lZC4gVGhpcyBtZXRob2Qgd2lsbCBpbml0aWFsaXplIHRoZSByZWZlcmVuY2VDb3VudCBt
ZW1iZXIgb2YKICAgIHRoZSBOUE9iamVjdCB0byAxLgoqLwpOUE9iamVjdCAqTlBOX0NyZWF0ZU9i
amVjdChOUFAgbnBwLCBOUENsYXNzICphQ2xhc3MpOwoKLyoKICAgIEluY3JlbWVudCB0aGUgTlBP
YmplY3QncyByZWZlcmVuY2UgY291bnQuCiovCk5QT2JqZWN0ICpOUE5fUmV0YWluT2JqZWN0KE5Q
T2JqZWN0ICpucG9iaik7CgovKgogICAgRGVjcmVtZW50ZWQgdGhlIE5QT2JqZWN0J3MgcmVmZXJl
bmNlIGNvdW50LiAgSWYgdGhlIHJlZmVyZW5jZQogICAgY291bnQgZ29lcyB0byB6ZXJvLCB0aGUg
Y2xhc3MncyBkZXN0cm95IGZ1bmN0aW9uIGlzIGludm9rZSBpZgogICAgc3BlY2lmaWVkLCBvdGhl
cndpc2UgdGhlIG9iamVjdCBpcyBmcmVlZCBkaXJlY3RseS4KKi8Kdm9pZCBOUE5fUmVsZWFzZU9i
amVjdChOUE9iamVjdCAqbnBvYmopOwoKLyoKICAgIEZ1bmN0aW9ucyB0byBhY2Nlc3Mgc2NyaXB0
IG9iamVjdHMgcmVwcmVzZW50ZWQgYnkgTlBPYmplY3QuCgogICAgQ2FsbHMgdG8gc2NyaXB0IG9i
amVjdHMgYXJlIHN5bmNocm9ub3VzLiAgSWYgYSBmdW5jdGlvbiByZXR1cm5zIGEKICAgIHZhbHVl
LCBpdCB3aWxsIGJlIHN1cHBsaWVkIHZpYSB0aGUgcmVzdWx0IE5QVmFyaWFudAogICAgYXJndW1l
bnQuIFN1Y2Nlc3NmdWwgY2FsbHMgd2lsbCByZXR1cm4gdHJ1ZSwgZmFsc2Ugd2lsbCBiZQogICAg
cmV0dXJuZWQgaW4gY2FzZSBvZiBhbiBlcnJvci4KICAgIAogICAgQ2FsbHMgbWFkZSBmcm9tIHBs
dWdpbiBjb2RlIHRvIHNjcmlwdCBtdXN0IGJlIG1hZGUgZnJvbSB0aGUgdGhyZWFkCiAgICBvbiB3
aGljaCB0aGUgcGx1Z2luIHdhcyBpbml0aWFsaXplZC4KKi8KCmJvb2wgTlBOX0ludm9rZShOUFAg
bnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLAogICAgICAgICAg
ICAgICAgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50
ICpyZXN1bHQpOwpib29sIE5QTl9JbnZva2VEZWZhdWx0KE5QUCBucHAsIE5QT2JqZWN0ICpucG9i
aiwgY29uc3QgTlBWYXJpYW50ICphcmdzLAogICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7CmJvb2wgTlBOX0V2YWx1YXRlKE5QUCBucHAs
IE5QT2JqZWN0ICpucG9iaiwgTlBTdHJpbmcgKnNjcmlwdCwKICAgICAgICAgICAgICAgICAgTlBW
YXJpYW50ICpyZXN1bHQpOwpib29sIE5QTl9HZXRQcm9wZXJ0eShOUFAgbnBwLCBOUE9iamVjdCAq
bnBvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCiAgICAgICAgICAgICAgICAgICAgIE5Q
VmFyaWFudCAqcmVzdWx0KTsKYm9vbCBOUE5fU2V0UHJvcGVydHkoTlBQIG5wcCwgTlBPYmplY3Qg
Km5wb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgICBj
b25zdCBOUFZhcmlhbnQgKnZhbHVlKTsKYm9vbCBOUE5fUmVtb3ZlUHJvcGVydHkoTlBQIG5wcCwg
TlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKYm9vbCBOUE5fSGFz
UHJvcGVydHkoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlO
YW1lKTsKYm9vbCBOUE5fSGFzTWV0aG9kKE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVu
dGlmaWVyIG1ldGhvZE5hbWUpOwpib29sIE5QTl9FbnVtZXJhdGUoTlBQIG5wcCwgTlBPYmplY3Qg
Km5wb2JqLCBOUElkZW50aWZpZXIgKippZGVudGlmaWVyLAogICAgICAgICAgICAgICAgICAgdWlu
dDMyX3QgKmNvdW50KTsKYm9vbCBOUE5fQ29uc3RydWN0KE5QUCBucHAsIE5QT2JqZWN0ICpucG9i
aiwgY29uc3QgTlBWYXJpYW50ICphcmdzLAogICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXJn
Q291bnQsIE5QVmFyaWFudCAqcmVzdWx0KTsKCi8qCiAgICBOUE5fU2V0RXhjZXB0aW9uIG1heSBi
ZSBjYWxsZWQgdG8gdHJpZ2dlciBhIHNjcmlwdCBleGNlcHRpb24gdXBvbgogICAgcmV0dXJuIGZy
b20gZW50cnkgcG9pbnRzIGludG8gTlBPYmplY3RzLiAgVHlwaWNhbCB1c2FnZToKCiAgICBOUE5f
U2V0RXhjZXB0aW9uIChucG9iaiwgbWVzc2FnZSk7CiovCnZvaWQgTlBOX1NldEV4Y2VwdGlvbihO
UE9iamVjdCAqbnBvYmosIGNvbnN0IE5QVVRGOCAqbWVzc2FnZSk7CgojaWZkZWYgX19jcGx1c3Bs
dXMKfQojZW5kaWYKCiNlbmRpZgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABucHR5cGVzLmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAw
MDY0NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMDc0MDYAMTE3MjE0NTcxMTMAMDExNzQyACAwAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAbWFyaW8AAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtYXJpbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAC8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6
IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCi8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxP
Q0sgKioqKioKICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCiAqCiAqIFRoZSBj
b250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExp
Y2Vuc2UgVmVyc2lvbgogKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKICogdGhlIExpY2Vuc2UuIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKiBodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L01QTC8KICoKICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCiAqIGZvciB0
aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5k
ZXIgdGhlCiAqIExpY2Vuc2UuCiAqCiAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3Jn
IGNvZGUuCiAqCiAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBp
cwogKiBtb3ppbGxhLm9yZy4KICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZl
bG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwNAogKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIENvbnRyaWJ1dG9yKHMpOgogKiAgIEpvaG5ueSBTdGVu
YmFjayA8anN0QG1vemlsbGEub3JnPiAoT3JpZ2luYWwgYXV0aG9yKQogKgogKiBBbHRlcm5hdGl2
ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJt
cyBvZgogKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBv
ciBsYXRlciAodGhlICJHUEwiKSwgb3IKICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCiAqIGluIHdoaWNoIGNh
c2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBp
bnN0ZWFkCiAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91
ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIg
dGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KICogdXNlIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGlj
YXRlIHlvdXIKICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5k
IHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVx
dWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKICogdGhl
IHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSB1bmRlcgogKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BM
IG9yIHRoZSBMR1BMLgogKgogKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwoKI2lm
bmRlZiBucHR5cGVzX2hfCiNkZWZpbmUgbnB0eXBlc19oXwoKLyoKICogSGVhZGVyIGZpbGUgZm9y
IGVuc3VyaW5nIHRoYXQgQzk5IHR5cGVzIChbdV1pbnQzMl90LCBbdV1pbnQ2NF90IGFuZCBib29s
KSBhbmQKICogdHJ1ZS9mYWxzZSBtYWNyb3MgYXJlIGF2YWlsYWJsZS4KICovCgojaWYgZGVmaW5l
ZChXSU4zMikgfHwgZGVmaW5lZChPUzIpCiAgLyoKICAgKiBXaW4zMiBhbmQgT1MvMiBkb24ndCBr
bm93IEM5OSwgc28gZGVmaW5lIFt1XWludF8xNi8zMi82NCBoZXJlLiBUaGUgYm9vbAogICAqIGlz
IHByZWRlZmluZWQgdGhvLCBib3RoIGluIEMgYW5kIEMrKy4KICAgKi8KICB0eXBlZGVmIHNob3J0
IGludDE2X3Q7CiAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsKICB0eXBlZGVmIGlu
dCBpbnQzMl90OwogIHR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwogIHR5cGVkZWYgbG9u
ZyBsb25nIGludDY0X3Q7CiAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7CiNl
bGlmIGRlZmluZWQoX0FJWCkgfHwgZGVmaW5lZChfX3N1bikgfHwgZGVmaW5lZChfX29zZl9fKSB8
fCBkZWZpbmVkKElSSVgpIHx8IGRlZmluZWQoSFBVWCkKICAvKgogICAqIEFJWCBhbmQgU3VuT1Mg
c2hpcCBhIGludHR5cGVzLmggaGVhZGVyIHRoYXQgZGVmaW5lcyBbdV1pbnQzMl90LAogICAqIGJ1
dCBub3QgYm9vbCBmb3IgQy4KICAgKi8KICAjaW5jbHVkZSA8aW50dHlwZXMuaD4KCiAgI2lmbmRl
ZiBfX2NwbHVzcGx1cwogICAgdHlwZWRlZiBpbnQgYm9vbDsKICAgICNkZWZpbmUgdHJ1ZSAgIDEK
ICAgICNkZWZpbmUgZmFsc2UgIDAKICAjZW5kaWYKI2VsaWYgZGVmaW5lZChic2RpKSB8fCBkZWZp
bmVkKEZSRUVCU0QpIHx8IGRlZmluZWQoT1BFTkJTRCkKICAvKgogICAqIEJTRC9PUywgRnJlZUJT
RCwgYW5kIE9wZW5CU0Qgc2hpcCBzeXMvdHlwZXMuaCB0aGF0IGRlZmluZSBpbnQzMl90IGFuZCAK
ICAgKiB1X2ludDMyX3QuCiAgICovCiAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoKICAvKgogICAq
IEJTRC9PUyBzaGlwcyBubyBoZWFkZXIgdGhhdCBkZWZpbmVzIHVpbnQzMl90LCBub3IgYm9vbCAo
Zm9yIEMpCiAgICovCiAgI2lmIGRlZmluZWQoYnNkaSkKICB0eXBlZGVmIHVfaW50MzJfdCB1aW50
MzJfdDsKICB0eXBlZGVmIHVfaW50NjRfdCB1aW50NjRfdDsKCiAgI2lmICFkZWZpbmVkKF9fY3Bs
dXNwbHVzKQogICAgdHlwZWRlZiBpbnQgYm9vbDsKICAgICNkZWZpbmUgdHJ1ZSAgIDEKICAgICNk
ZWZpbmUgZmFsc2UgIDAKICAjZW5kaWYKICAjZWxzZQogIC8qCiAgICogRnJlZUJTRCBhbmQgT3Bl
bkJTRCBkZWZpbmUgdWludDMyX3QgYW5kIGJvb2wuCiAgICovCiAgICAjaW5jbHVkZSA8aW50dHlw
ZXMuaD4KICAgICNpbmNsdWRlIDxzdGRib29sLmg+CiAgI2VuZGlmCiNlbGlmIGRlZmluZWQoQkVP
UykKICAjaW5jbHVkZSA8aW50dHlwZXMuaD4KI2Vsc2UKICAvKgogICAqIEZvciB0aG9zZSB0aGF0
IHNoaXAgYSBzdGFuZGFyZCBDOTkgc3RkaW50LmggaGVhZGVyIGZpbGUsIGluY2x1ZGUKICAgKiBp
dC4gQ2FuJ3QgZG8gdGhlIHNhbWUgZm9yIHN0ZGJvb2wuaCB0aG8sIHNpbmNlIHNvbWUgc3lzdGVt
cyBzaGlwCiAgICogd2l0aCBhIHN0ZGJvb2wuaCBmaWxlIHRoYXQgZG9lc24ndCBjb21waWxlIQog
ICAqLwogICNpbmNsdWRlIDxzdGRpbnQuaD4KCiAgI2lmbmRlZiBfX2NwbHVzcGx1cwogICAgI2lm
ICFkZWZpbmVkKF9fR05VQ19fKSB8fCAoX19HTlVDX18gPiAyIHx8IF9fR05VQ19NSU5PUl9fID4g
OTUpCiAgICAgICNpbmNsdWRlIDxzdGRib29sLmg+CiAgICAjZWxzZQogICAgICAvKgogICAgICAg
KiBHQ0MgMi45MSBjYW4ndCBkZWFsIHdpdGggYSB0eXBlZGVmIGZvciBib29sLCBidXQgYSAjZGVm
aW5lCiAgICAgICAqIHdvcmtzLgogICAgICAgKi8KICAgICAgI2RlZmluZSBib29sIGludAogICAg
ICAjZGVmaW5lIHRydWUgICAxCiAgICAgICNkZWZpbmUgZmFsc2UgIDAKICAgICNlbmRpZgogICNl
bmRpZgojZW5kaWYKCiNlbmRpZiAvKiBucHR5cGVzX2hfICovCgAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABUZXN0UGx1Z2luLmNwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY2NAAwMDAx
NzUwADAwMDE3NTAAMDAwMDAwMDUzNjYAMTE3MjE0NTc0MTcAMDEyNzA1ACAwAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAbWFyaW8AAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABtYXJpbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ACNpbmNsdWRlICJUZXN0UGx1Z2luLmgiCgpzdGF0aWMgY29uc3QgY2hhciogc3RyUGx1Z2luTmFt
ZSA9ICJUZXN0IHBsdWdpbiI7CnN0YXRpYyBjb25zdCBjaGFyKiBzdHJQbHVnaW5EZXNjcmlwdGlv
biA9ICJUZXN0IHBsdWdpbiI7CnN0YXRpYyBjb25zdCBjaGFyKiBzdHJQbHVnaW5WZXJzaW9uID0g
IjEuMCI7CnN0YXRpYyBjb25zdCBjaGFyKiBzdHJQbHVnaW5NaW1lVHlwZSA9ICJhcHBsaWNhdGlv
bi9wbHVndGVzdDp0ZXN0cGx1Z2luOlRlc3QgcGx1Z2luIjsKCk5QTmV0c2NhcGVGdW5jcyogVGVz
dFBsdWdpbjo6c19wQnJvd3NlckZ1bmN0aW9ucyA9IDA7CgpzdGF0aWMgY2hhciogc3pWZXJzaW9u
ID0gIjEuMC4wLjAiOwoKTlBFcnJvciBOUF9Jbml0aWFsaXplKE5QTmV0c2NhcGVGdW5jcyogYkZ1
bmNzLCBOUFBsdWdpbkZ1bmNzKiBwRnVuY3MpCnsKICAgIFRlc3RQbHVnaW46OnNldEJyb3dzZXJG
dW5jdGlvbnMoYkZ1bmNzKTsKCiAgICBwRnVuY3MtPm5ld3AgPSBOUFBfTmV3OwogICAgcEZ1bmNz
LT5kZXN0cm95ID0gTlBQX0Rlc3Ryb3k7CiAgICBwRnVuY3MtPmV2ZW50ID0gTlBQX0hhbmRsZUV2
ZW50OwoKICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKfQoKY2hhciogTlBfR2V0UGx1Z2luVmVy
c2lvbigpCnsKICAgIHJldHVybiBzelZlcnNpb247Cn0KCmNvbnN0IGNoYXIqIE5QX0dldE1JTUVE
ZXNjcmlwdGlvbigpCnsKICAgIHJldHVybiBzdHJQbHVnaW5NaW1lVHlwZTsKfQoKTlBFcnJvciBO
UF9HZXRWYWx1ZSh2b2lkKiBmdXR1cmUsIE5QUFZhcmlhYmxlIGFWYXJpYWJsZSwgdm9pZCogYVZh
bHVlKQp7CiAgICBzd2l0Y2ggKGFWYXJpYWJsZSkgewogICAgY2FzZSBOUFBWcGx1Z2luTmFtZVN0
cmluZzoKICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcioqPihhVmFsdWUpID0gc3RyUGx1
Z2luTmFtZTsKICAgICAgICBicmVhazsKCiAgICBjYXNlIE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0
cmluZzoKICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcioqPihhVmFsdWUpID0gc3RyUGx1
Z2luRGVzY3JpcHRpb247CiAgICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgICByZXR1
cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKICAgICAgICBicmVhazsKICAgIH0KCiAgICByZXR1cm4g
TlBFUlJfTk9fRVJST1I7Cn0KCk5QRXJyb3IgTlBfU2h1dGRvd24oKQp7CiAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7Cn0KCk5QRXJyb3IgTlBQX05ldyhOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5Q
UCBpbnN0YW5jZSwgdWludDE2X3QgbW9kZSwgaW50MTZfdCBhcmdjLCBjaGFyKiBhcmduW10sIGNo
YXIqIGFyZ3ZbXSwgTlBTYXZlZERhdGEqIHNhdmVkKQp7CiAgICBUZXN0UGx1Z2luKiBwUGx1Z2lu
ID0gbmV3IFRlc3RQbHVnaW4oaW5zdGFuY2UsIG1vZGUpOwogICAgaW5zdGFuY2UtPnBkYXRhID0g
cFBsdWdpbjsKICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKfQoKTlBFcnJvciBOUFBfRGVzdHJv
eShOUFAgaW5zdGFuY2UsIE5QU2F2ZWREYXRhKiogc2F2ZSkKewogICAgVGVzdFBsdWdpbiogcFBs
dWdpbiA9IHN0YXRpY19jYXN0PFRlc3RQbHVnaW4qPihpbnN0YW5jZS0+cGRhdGEpOwogICAgZGVs
ZXRlIHBQbHVnaW47CgogICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwp9CgppbnQxNl90IE5QUF9I
YW5kbGVFdmVudChOUFAgaW5zdGFuY2UsIHZvaWQqIGV2ZW50KQp7CiAgICBUZXN0UGx1Z2luKiBw
UGx1Z2luID0gc3RhdGljX2Nhc3Q8VGVzdFBsdWdpbio+KGluc3RhbmNlLT5wZGF0YSk7CiAgICBy
ZXR1cm4gcFBsdWdpbi0+aGFuZGxlRXZlbnQoZXZlbnQpOwp9Cgp2b2lkIFRlc3RQbHVnaW46OnNl
dEJyb3dzZXJGdW5jdGlvbnMoTlBOZXRzY2FwZUZ1bmNzKiBjb25zdCBwQnJvd3NlckZ1bmN0aW9u
cykKewogICAgc19wQnJvd3NlckZ1bmN0aW9ucyA9IHBCcm93c2VyRnVuY3Rpb25zOwp9CgpUZXN0
UGx1Z2luOjpUZXN0UGx1Z2luKGNvbnN0IE5QUCBpbnN0YW5jZSwgY29uc3QgdWludDE2X3QgbW9k
ZSkKewogICAgTlBCb29sIGJyb3dzZXJTdXBwb3J0c1dpbmRvd2xlc3MgPSBmYWxzZTsKICAgIHNf
cEJyb3dzZXJGdW5jdGlvbnMtPnNldHZhbHVlKGluc3RhbmNlLCBOUFBWcGx1Z2luV2luZG93Qm9v
bCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmFsc2UpKTsKICAgIHNfcEJyb3dzZXJGdW5jdGlv
bnMtPnNldHZhbHVlKGluc3RhbmNlLCBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPih0cnVlKSk7Cn0KClRlc3RQbHVnaW46On5UZXN0UGx1Z2luKCkKewp9
CgppbnQxNl90IFRlc3RQbHVnaW46OmhhbmRsZUV2ZW50KHZvaWQqIHBFdmVudCkKewogICAgWEV2
ZW50KiB4RXZlbnQgPSBzdGF0aWNfY2FzdDxYRXZlbnQqPihwRXZlbnQpOwogICAgaWYgKHhFdmVu
dC0+dHlwZSA9PSBHcmFwaGljc0V4cG9zZSkgewoJCVhHcmFwaGljc0V4cG9zZUV2ZW50KiBleHBv
c2UgPSAmKHhFdmVudC0+eGdyYXBoaWNzZXhwb3NlKTsKCgkJaWYgKGV4cG9zZS0+d2lkdGggPT0g
MCB8fCBleHBvc2UtPmhlaWdodCA9PSAwKSB7CgkJCXJldHVybiBOUEVSUl9OT19FUlJPUjsKCQl9
CgoJCUdDIGdjID0gWENyZWF0ZUdDKGV4cG9zZS0+ZGlzcGxheSwgZXhwb3NlLT5kcmF3YWJsZSwg
MCwgMCk7CgkJWFNldEZvcmVncm91bmQoZXhwb3NlLT5kaXNwbGF5LCBnYywgMHgwMGMwYzApOwoJ
CVhGaWxsUmVjdGFuZ2xlKGV4cG9zZS0+ZGlzcGxheSwgZXhwb3NlLT5kcmF3YWJsZSwgZ2MsIGV4
cG9zZS0+eCwgZXhwb3NlLT55LCBleHBvc2UtPndpZHRoLCBleHBvc2UtPmhlaWdodCk7Cgl9CiAg
ICByZXR1cm4gMTsKfQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRlc3RQ
bHVnaW4uaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjY0ADAwMDE3NTAAMDAw
MTc1MAAwMDAwMDAwMjAxNAAxMTcyMTQ1MjIxMgAwMTIzMjEAIDAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABtYXJpbwAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAG1hcmlvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI2lmbmRl
ZiBUZXN0UGx1Z2luX2gKI2RlZmluZSBUZXN0UGx1Z2luX2gKCiNpbmNsdWRlIDxucGFwaS5oPgoj
aW5jbHVkZSA8bnBmdW5jdGlvbnMuaD4KCiNpZmRlZiBfX2NwbHVzcGx1cwpleHRlcm4gIkMiIHsK
I2VuZGlmCiAgICBOUEVycm9yIE5QX0luaXRpYWxpemUoTlBOZXRzY2FwZUZ1bmNzKiBiRnVuY3Ms
IE5QUGx1Z2luRnVuY3MqIHBGdW5jcyk7CiAgICBOUEVycm9yIE5QX1NodXRkb3duKCk7CgogICAg
TlBFcnJvciBOUFBfTmV3KE5QTUlNRVR5cGUgcGx1Z2luVHlwZSwgTlBQIGluc3RhbmNlLCB1aW50
MTZfdCBtb2RlLCBpbnQxNl90IGFyZ2MsIGNoYXIqIGFyZ25bXSwgY2hhciogYXJndltdLCBOUFNh
dmVkRGF0YSopOwogICAgTlBFcnJvciBOUFBfRGVzdHJveShOUFAgaW5zdGFuY2UsIE5QU2F2ZWRE
YXRhKiopOwoKICAgIE5QRXJyb3IgTlBQX1NldFdpbmRvdyhOUFAgaW5zdGFuY2UsIE5QV2luZG93
KiB3aW5kb3cpOwogICAgaW50MTZfdCBOUFBfSGFuZGxlRXZlbnQoTlBQIGluc3RhbmNlLCB2b2lk
KiBldmVudCk7CgogICAgTlBFcnJvciBOUF9HZXRWYWx1ZSh2b2lkKiBmdXR1cmUsIE5QUFZhcmlh
YmxlIGFWYXJpYWJsZSwgdm9pZCogYVZhbHVlKTsKICAgIGNvbnN0IGNoYXIqIE5QX0dldE1JTUVE
ZXNjcmlwdGlvbigpOwogICAgTlBFcnJvciBOUF9TaHV0ZG93bigpOwojaWZkZWYgX19jcGx1c3Bs
dXMKfQojZW5kaWYKCmNsYXNzIFRlc3RQbHVnaW4gewogICAgcHVibGljOiAvLyBGdW5jdGlvbnMK
ICAgICAgICBUZXN0UGx1Z2luKGNvbnN0IE5QUCBpbnN0YW5jZSwgY29uc3QgdWludDE2X3QgbW9k
ZSk7CiAgICAgICAgflRlc3RQbHVnaW4oKTsKCiAgICAgICAgc3RhdGljIHZvaWQgc2V0QnJvd3Nl
ckZ1bmN0aW9ucyhOUE5ldHNjYXBlRnVuY3MqIGNvbnN0IHBCcm93c2VyRnVuY3Rpb25zKTsKCiAg
ICAgICAgaW50MTZfdCBoYW5kbGVFdmVudCh2b2lkKiBldmVudCk7CgogICAgcHJpdmF0ZToKICAg
ICAgICBzdGF0aWMgTlBOZXRzY2FwZUZ1bmNzKiBzX3BCcm93c2VyRnVuY3Rpb25zOwp9OwoKI2Vu
ZGlmCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190506</attachid>
            <date>2013-02-27 06:21:42 -0800</date>
            <delta_ts>2013-02-27 06:43:27 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bug70592.patch</filename>
            <type>text/plain</type>
            <size>84716</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlM2ZmZGI3Li5kZjM5OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTMtMDItMjcgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5j
b20+CisKKyAgICAgICAgW0VGTF1bR1RLXSBTaGFyZSBwbHVnaW4ncyBpbXBsZW1lbnRhdGlvbiBi
ZXR3ZWVuIEVGTCBhbmQgR3RrIHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzA1OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNZXJnZSBQbHVnaW5WaWV3R3RrLmNwcCBhbmQgUGx1Z2luVmlld0Vm
bC5jcHAgdG8gUGx1Z2luVmlld1gxMS5jcHAuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTog
QWRkIGluY2x1ZGUgcGF0aCB0byBndGsyeHRiaW4uaCBoZWFkZXIgZmlsZS4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOiBDaGFuZ2UgUGx1Z2luVmlld0d0ay5jcHAgdG8gUGx1Z2luVmll
d1gxMS5jcHAgc291cmNlLgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBDaGFuZ2UgUGx1
Z2luVmlld0VmbC5jcHAgdG8gUGx1Z2luVmlld0VmbC5jcHAgc291cmNlLgorICAgICAgICAqIHBs
dWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsdWdpbnMv
eDExL1BsdWdpblZpZXdYMTEuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luVmlld0d0ay5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRSb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBsdWdpbkRpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldEZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGlkZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlucHV0RXZl
bnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppbml0WEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpoYW5kbGVGb2N1c0luRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
aGFuZGxlRm9jdXNPdXRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQ
YXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlV2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmludmFsaWRhdGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9y
Y2VSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmlzdWFsQW5kQ29sb3JtYXApOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGx1Z1JlbW92ZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisKIDIwMTMtMDItMjUgIEFuZHJlYXMgS2xpbmcgIDxh
a2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBhbW91bnQgb2YgY29kZSB0aGF0IGlu
Y2x1ZGVzIFN0eWxlUHJvcGVydHlTZXQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA2NWJkMDNj
Li5kYmUwZmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtODUsNiArODUsNyBAQCB3ZWJjb3Jl
X2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L3RyYW5zY29kZXIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbiBc
CiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGx1Z2lucyBcCisJLUkkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvd2luIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcgXAogCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KaW5kZXggNGRhYzU4ZS4uYTE1ZDEyZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC02MjI4LDggKzYyMjgsOCBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblZpZXdHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAor
CVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL3gxMS9QbHVnaW5WaWV3WDExLmNwcAogaWYgVVNFX09QRU5HTAogd2ViY29yZWd0a19z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENv
bnRleHQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggZDFkNDYzZi4uMzdhNDJi
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEyLDYgKzEyLDcgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lZmwi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsdWdpbnMvZWZsIgorICAgICIke1dFQkNPUkVfRElSfS9w
bHVnaW5zL3gxMSIKICkKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCkBAIC0xODUsNyAr
MTg2LDcgQEAgaWYgKEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgICAgICBwbHVnaW5z
L1BsdWdpblZpZXcuY3BwCiAKICAgICAgICAgcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5j
cHAKLSAgICAgICAgcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKKyAgICAgICAgcGx1Z2lu
cy94MTEvUGx1Z2luVmlld1gxMS5jcHAKICAgICApCiBlbHNlICgpCiAgICAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9Q
bHVnaW5WaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdF
ZmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzdhMDc0Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMzQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4
IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQotICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKLSAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgotI2luY2x1ZGUgIkhvc3RX
aW5kb3cuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2lt
cGwuaCIKLSNpbmNsdWRlICJydW50aW1lL0pTTG9jay5oIgotI2luY2x1ZGUgInJ1bnRpbWUvT3Bl
cmF0aW9ucy5oIgotI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KLSNpbmNsdWRlIDxFY29yZV9YLmg+
Ci0jaW5jbHVkZSA8RXZhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7Ci0KLWJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZl
bnQmIGV2ZW50KQotewotICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1
Z2luKHRydWUpOwotCi0gICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwotCi0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0gICAgcmV0dXJu
IGFjY2VwdGVkOwotfQotCi0jaWYgZGVmaW5lZChYUF9VTklYKQotdm9pZCBQbHVnaW5WaWV3Ojpo
YW5kbGVGb2N1c0luRXZlbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLSNlbmRpZgotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5
Ym9hcmRFdmVudCopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIE5QRXZlbnQg
eEV2ZW50OwotCi0jaWYgZGVmaW5lZChYUF9VTklYKQotICAgIGNvbnN0IEludFJlY3QgcmVjdCA9
IHBhcmVudCgpLT5jb250ZW50c1RvU2NyZWVuKEludFJlY3QoMCwgMCwgZXZlbnQtPm9mZnNldFgo
KSwgZXZlbnQtPm9mZnNldFkoKSkpOwotICAgIGNvbnN0IGludCBldmVudFggPSByZWN0LndpZHRo
KCk7Ci0gICAgY29uc3QgaW50IGV2ZW50WSA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50Ci0gICAgICAgICAgICB8fCBl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50Ci0gICAgICAgICAgICB8
fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgewotICAgICAg
ICB4RXZlbnQudHlwZSA9IE1vdGlvbk5vdGlmeTsKLSAgICAgICAgeEV2ZW50Lnhtb3Rpb24ueCA9
IGV2ZW50WDsKLSAgICAgICAgeEV2ZW50Lnhtb3Rpb24ueSA9IGV2ZW50WTsKLSAgICB9IGVsc2Ug
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7Ci0gICAg
ICAgIHhFdmVudC50eXBlID0gQnV0dG9uUHJlc3M7Ci0gICAgICAgIHhFdmVudC54YnV0dG9uLngg
PSBldmVudFg7Ci0gICAgICAgIHhFdmVudC54YnV0dG9uLnkgPSBldmVudFk7Ci0gICAgICAgIHhF
dmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0b24oKSArIDE7IC8vIERPTSBNb3VzZUV2
ZW50IGNvdW50cyBmcm9tIDAsIGFuZCBYQnV0dG9uRXZlbnQgZnJvbSAxLgotICAgIH0gZWxzZSBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSB7Ci0gICAgICAg
IHhFdmVudC50eXBlID0gQnV0dG9uUmVsZWFzZTsKLSAgICAgICAgeEV2ZW50LnhidXR0b24ueCA9
IGV2ZW50WDsKLSAgICAgICAgeEV2ZW50LnhidXR0b24ueSA9IGV2ZW50WTsKLSAgICAgICAgeEV2
ZW50LnhidXR0b24uYnV0dG9uID0gZXZlbnQtPmJ1dHRvbigpICsgMTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KHhFdmVudCkp
Ci0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotfQotCi12b2lkIFBsdWdpblZp
ZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCi17Ci0gICAgaWYgKGZvY3Vz
ZWQpCi0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9lbGVt
ZW50KTsKLQotICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6c2hvdygpCi17Ci0gICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7Ci0KLSAgICBXaWRnZXQ6
OnNob3coKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkKLXsKLSAgICBzZXRTZWxmVmlz
aWJsZShmYWxzZSk7Ci0KLSAgICBXaWRnZXQ6OmhpZGUoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihj
b250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmll
dyogcGFyZW50KQotewotICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7Ci0KLSAgICBpZiAo
cGFyZW50KQotICAgICAgICBpbml0KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5k
b3dSZWN0KGNvbnN0IEludFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCi17Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCi17Ci0gICAgV2lkZ2V0OjpzZXRQ
YXJlbnRWaXNpYmxlKHZpc2libGUpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBv
c3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFy
KiBidWYpCi17Ci0gICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKLQotICAgIGlmIChmaWxl
bmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAg
ICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoNyk7Ci0jZWxzZQotICAgICAgICBmaWxl
bmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKLSNlbmRpZgotCi0gICAgbG9uZyBsb25nIHNp
emU7Ci0gICAgaWYgKCFnZXRGaWxlU2l6ZShmaWxlbmFtZSwgc2l6ZSkpCi0gICAgICAgIHJldHVy
biBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3Blbihm
aWxlbmFtZS51dGY4KCkuZGF0YSgpLCAiciIpOwotICAgIGlmICghZmlsZUhhbmRsZSkKLSAgICAg
ICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgYnVmZmVyLnJlc2l6ZShzaXpl
KTsKLSAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgc2l6ZSwgZmls
ZUhhbmRsZSk7Ci0KLSAgICBmY2xvc2UoZmlsZUhhbmRsZSk7Ci0KLSAgICBpZiAoYnl0ZXNSZWFk
IDw9IDApCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVl
U3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0
KQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlZUb29sa2l0OgotICAg
ICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkgPSAwOwotICAgICAgICAqcmVzdWx0
ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5W
U3VwcG9ydHNYRW1iZWRCb29sOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUp
ID0gZmFsc2U7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6Ci0gICAgICAg
ICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0g
TlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5WU3Vw
cG9ydHNXaW5kb3dsZXNzOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0g
ZmFsc2U7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci1ib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCi17Ci0gICAgaWYgKCF2YWx1ZSB8fCAhcmVz
dWx0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0g
ICAgY2FzZSBOUE5WeERpc3BsYXk6Ci0gICAgICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVl
KSA9IHN0YXRpY19jYXN0PERpc3BsYXkqPihlY29yZV94X2Rpc3BsYXlfZ2V0KCkpOwotICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
Y2FzZSBOUE5WeHRBcHBDb250ZXh0OgotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19F
UlJPUjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVj
dDogewotICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKLSAgICAgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJl
bnRGcmFtZS0+c2NyaXB0KCktPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7Ci0KLSAgICAgICAgLy8g
UmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVy
ZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1s
PgotICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQotICAgICAgICAgICAgX05QTl9SZXRh
aW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKLQotICAgICAgICAqc3RhdGljX2Nhc3Q8dm9p
ZCoqPih2YWx1ZSkgPSB3aW5kb3dTY3JpcHRPYmplY3Q7Ci0KLSAgICAgICAgKnJlc3VsdCA9IE5Q
RVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjYXNlIE5Q
TlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKLSAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1
c2VkKSB7Ci0gICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgTlBPYmplY3QqIHBsdWdp
blNjcmlwdE9iamVjdCA9IDA7Ci0KLSAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShh
cHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50
LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0
KCk7Ci0KLSAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVk
LCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1
Z2luL25wcnVudGltZS5odG1sPgotICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQotICAg
ICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKLQotICAgICAg
ICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSBwbHVnaW5TY3JpcHRPYmplY3Q7Ci0KLSAg
ICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewotICAgICAgICBFdmFzKiBldmFz
ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ldmFzKCk7Ci0gICAgICAgIGlmICghZXZhcykKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBFY29yZV9FdmFzKiBlY29yZUV2YXMg
PSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOwotICAgICAgICAqc3RhdGljX2Nhc3Q8
WElEKj4odmFsdWUpID0gc3RhdGljX2Nhc3Q8V2luZG93PihlY29yZV9ldmFzX3dpbmRvd19nZXQo
ZWNvcmVFdmFzKSk7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WVG9vbGtpdDoKLSAgICAgICAgaWYg
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtp
dCkpIHsKLSAgICAgICAgICAgICpzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9IDI7Ci0g
ICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlk
YXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGludmFsaWRhdGVXaW5kb3dsZXNz
UGx1Z2luUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChO
UFJlY3QqIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0KSB7Ci0gICAgICAgIGludmFsaWRhdGUoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludmFsaWRhdGVSZWN0KEludFJlY3QocmVj
dC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRv
bSAtIHJlY3QtPnRvcCkpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24o
TlBSZWdpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
Ojpmb3JjZVJlZHJhdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBQbHVn
aW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAg
IEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOwotCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpwbGF0Zm9ybURlc3Ryb3koKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiZTQ1ZDA1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODk1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEtha2FpLCBJbmMu
IDxicmlhbkBrYWthaS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLQotI2lu
Y2x1ZGUgIkJyaWRnZUpTQy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRS
ZXF1ZXN0LmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCi0jaW5jbHVkZSAi
SG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0jaW5jbHVkZSAiUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNwYXRp
YWxOYXZpZ2F0aW9uLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNpbmNsdWRlIDxydW50
aW1lL0pTQ0pTVmFsdWUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotCi0jaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKLSNpbmNsdWRlIDxnZGtjb25maWcuaD4KLSNlbmRpZgotI2luY2x1
ZGUgPGd0ay9ndGsuaD4KLQotI2RlZmluZSBTdHJpbmcgWHRTdHJpbmdUeXBlCi0jaW5jbHVkZSAi
UmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlICJndGsyeHRiaW4uaCIKLSNkZWZpbmUgQm9vbCBpbnQg
Ly8gdGhpcyBnb3QgdW5kZWZpbmVkIHNvbWV3aGVyZQotI2RlZmluZSBTdGF0dXMgaW50IC8vIGRp
dHRvCi0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgotI2luY2x1ZGUgPGNhaXJv
LXhsaWIuaD4KLSNpbmNsdWRlIDxnZGsvZ2RreC5oPgotCi11c2luZyBKU0M6OkV4ZWNTdGF0ZTsK
LXVzaW5nIEpTQzo6SW50ZXJwcmV0ZXI7Ci11c2luZyBKU0M6OkpTTG9jazsKLXVzaW5nIEpTQzo6
SlNPYmplY3Q7Ci0KLXVzaW5nIHN0ZDo6bWluOwotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWJvb2wg
UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQotewotICAgIC8vIHNh
bml0eSBjaGVjawotICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOwotCi0gICAgYm9vbCBhY2NlcHRlZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKLQotICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwotICAgIHJldHVybiBh
Y2NlcHRlZDsKLX0KLQotc3RhdGljIFdpbmRvdyBnZXRSb290V2luZG93KEZyYW1lKiBwYXJlbnRG
cmFtZSkKLXsKLSAgICBHdGtXaWRnZXQqIHBhcmVudFdpZGdldCA9IHBhcmVudEZyYW1lLT52aWV3
KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgR2RrU2NyZWVuKiBn
c2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHBhcmVudFdpZGdldCk7Ci0gICAgcmV0dXJu
IEdES19XSU5ET1dfWFdJTkRPVyhnZGtfc2NyZWVuX2dldF9yb290X3dpbmRvdyhnc2NyZWVuKSk7
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKLXsKLSAgICBpZiAo
IXBhcmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocGFyZW50KCktPmlzRnJh
bWVWaWV3KCkpOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVW
aWV3Kj4ocGFyZW50KCkpOwotCi0gICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dS
ZWN0OwotICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OwotCi0gICAgbV93aW5k
b3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCku
bG9jYXRpb24oKSksIGZyYW1lUmVjdCgpLnNpemUoKSk7Ci0gICAgbV9jbGlwUmVjdCA9IHdpbmRv
d0NsaXBSZWN0KCk7Ci0gICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93
aW5kb3dSZWN0LnkoKSk7Ci0KLSAgICBpZiAobV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3Qg
JiYgbV9jbGlwUmVjdCA9PSBvbGRDbGlwUmVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFtX2lzV2luZG93ZWQgJiYgIW1fd2luZG93UmVjdC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19k
aXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgICAgICBpZiAobV9kcmF3YWJsZSkKLSAgICAgICAg
ICAgIFhGcmVlUGl4bWFwKGRpc3BsYXksIG1fZHJhd2FibGUpOwotICAgICAgICAgICAgCi0gICAg
ICAgIG1fZHJhd2FibGUgPSBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksIGdldFJvb3RXaW5kb3cobV9w
YXJlbnRGcmFtZS5nZXQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
d2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCopbV9ucFdp
bmRvdy53c19pbmZvKS0+ZGVwdGgpOwotICAgICAgICBYU3luYyhkaXNwbGF5LCBmYWxzZSk7IC8v
IG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXJ2ZXIga25vd3MgYWJvdXQgdGhlIERyYXdhYmxlCi0gICAg
fQotCi0gICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNl
dEZvY3VzKGJvb2wgZm9jdXNlZCkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSA9PSBwbGF0Zm9ybVdpZGdldCgpKTsKLSAgICBpZiAoZm9jdXNlZCAmJiBwbGF0Zm9ybVdpZGdl
dCgpKQotICAgICAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMocGxhdGZvcm1XaWRnZXQoKSk7Ci0g
ICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzaG93
KCkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBwbGF0Zm9ybVdpZGdl
dCgpKTsKLSAgICBXaWRnZXQ6OnNob3coKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkK
LXsKLSAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBwbGF0Zm9ybVdpZGdldCgp
KTsKLSAgICBXaWRnZXQ6OmhpZGUoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFt
X2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkp
IHsKLSAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKLQotICAgIGlm
IChtX2lzV2luZG93ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9kcmF3YWJsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hE
SVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgIGNvbnN0IGJvb2wgc3luY1gg
PSBtX3BsdWdpbkRpc3BsYXkgJiYgbV9wbHVnaW5EaXNwbGF5ICE9IGRpc3BsYXk7Ci0KLSAgICBJ
bnRSZWN0IGV4cG9zZWRSZWN0KHJlY3QpOwotICAgIGV4cG9zZWRSZWN0LmludGVyc2VjdChmcmFt
ZVJlY3QoKSk7Ci0gICAgZXhwb3NlZFJlY3QubW92ZSgtZnJhbWVSZWN0KCkueCgpLCAtZnJhbWVS
ZWN0KCkueSgpKTsKLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGRyYXdhYmxlU3VyZmFj
ZSA9IGFkb3B0UmVmKGNhaXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUoZGlzcGxheSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RyYXdhYmxl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fdmlzdWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fd2luZG93UmVjdC53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd2luZG93UmVjdC5oZWlnaHQoKSkpOwot
Ci0gICAgaWYgKG1faXNUcmFuc3BhcmVudCkgewotICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgMzIg
Yml0IGRyYXdhYmxlIGFuZCB0aGUgcGx1Z2luIHdhbnRzIHRyYW5zcGFyZW5jeSwKLSAgICAgICAg
Ly8gd2UnbGwgY2xlYXIgdGhlIGV4cG9zZWQgYXJlYSB0byB0cmFuc3BhcmVudCBmaXJzdC4gIE90
aGVyd2lzZSwKLSAgICAgICAgLy8gd2UnZCBlbmQgdXAgd2l0aCBqdW5rIGluIHRoZXJlIGZyb20g
dGhlIGxhc3QgcGFpbnQsIG9yLCB3b3JzZSwKLSAgICAgICAgLy8gdW5pbml0aWFsaXplZCBkYXRh
LgotICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoZHJh
d2FibGVTdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAgICAgaWYgKCEoY2Fpcm9fc3VyZmFjZV9nZXRf
Y29udGVudChkcmF3YWJsZVN1cmZhY2UuZ2V0KCkpICYgQ0FJUk9fQ09OVEVOVF9BTFBIQSkpIHsK
LSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZmFrZSBpdCB3aGVuIHdlIGRvbid0IGhhdmUgYW4g
YWxwaGEgY2hhbm5lbCBvbiBvdXIKLSAgICAgICAgICAgIC8vIHBpeG1hcC4gIElmIHRoYXQncyBu
b3QgcG9zc2libGUsIGF0IGxlYXN0IGNsZWFyIHRoZSB3aW5kb3cgdG8KLSAgICAgICAgICAgIC8v
IGF2b2lkIGRyYXdpbmcgYXJ0aWZhY3RzLgotCi0gICAgICAgICAgICAvLyBUaGlzIFdvdWxkIG5v
dCB3b3JrIHdpdGhvdXQgZG91YmxlIGJ1ZmZlcmluZywgYnV0IHdlIGFsd2F5cyB1c2UgaXQuCi0g
ICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIGNhaXJvX2dldF9n
cm91cF90YXJnZXQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dS
ZWN0LnkoKSk7Ci0gICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJP
X09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2Fpcm9fc2V0
X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0KLSAgICAgICAgY2Fp
cm9fcmVjdGFuZ2xlKGNyLmdldCgpLCBleHBvc2VkUmVjdC54KCksIGV4cG9zZWRSZWN0LnkoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0
LmhlaWdodCgpKTsKLSAgICAgICAgY2Fpcm9fZmlsbChjci5nZXQoKSk7Ci0gICAgfQotCi0gICAg
WEV2ZW50IHhldmVudDsKLSAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOwot
ICAgIFhHcmFwaGljc0V4cG9zZUV2ZW50JiBleHBvc2VFdmVudCA9IHhldmVudC54Z3JhcGhpY3Nl
eHBvc2U7Ci0gICAgZXhwb3NlRXZlbnQudHlwZSA9IEdyYXBoaWNzRXhwb3NlOwotICAgIGV4cG9z
ZUV2ZW50LmRpc3BsYXkgPSBkaXNwbGF5OwotICAgIGV4cG9zZUV2ZW50LmRyYXdhYmxlID0gbV9k
cmF3YWJsZTsKLSAgICBleHBvc2VFdmVudC54ID0gZXhwb3NlZFJlY3QueCgpOwotICAgIGV4cG9z
ZUV2ZW50LnkgPSBleHBvc2VkUmVjdC55KCk7Ci0gICAgZXhwb3NlRXZlbnQud2lkdGggPSBleHBv
c2VkUmVjdC54KCkgKyBleHBvc2VkUmVjdC53aWR0aCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5r
cyB3aWR0aCBpcyB0aGUgcmlnaHQgaW4gdHJhbnNwYXJlbnQgbW9kZQotICAgIGV4cG9zZUV2ZW50
LmhlaWdodCA9IGV4cG9zZWRSZWN0LnkoKSArIGV4cG9zZWRSZWN0LmhlaWdodCgpOyAvLyBmbGFz
aCBidWc/IGl0IHRoaW5rcyBoZWlnaHQgaXMgdGhlIGJvdHRvbSBpbiB0cmFuc3BhcmVudCBtb2Rl
Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQoeGV2ZW50KTsKLQotICAgIGlmIChzeW5jWCkKLSAgICAg
ICAgWFN5bmMobV9wbHVnaW5EaXNwbGF5LCBmYWxzZSk7IC8vIHN5bmMgY2hhbmdlcyBieSBwbHVn
aW4KLQotICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7
Ci0gICAgY2Fpcm9fc2F2ZShjcik7Ci0KLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3Is
IGRyYXdhYmxlU3VyZmFjZS5nZXQoKSwgZnJhbWVSZWN0KCkueCgpLCBmcmFtZVJlY3QoKS55KCkp
OwotCi0gICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLAotICAgICAgICAgICAgICAgICAgICBmcmFtZVJl
Y3QoKS54KCkgKyBleHBvc2VkUmVjdC54KCksIGZyYW1lUmVjdCgpLnkoKSArIGV4cG9zZWRSZWN0
LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJl
Y3QuaGVpZ2h0KCkpOwotICAgIGNhaXJvX2NsaXAoY3IpOwotCi0gICAgaWYgKG1faXNUcmFuc3Bh
cmVudCkKLSAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9PVkVS
KTsKLSAgICBlbHNlCi0gICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFU
T1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWludChjcik7Ci0KLSAgICBjYWlyb19yZXN0b3JlKGNy
KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZl
bnQqIGV2ZW50KQotewotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotCi0gICAgaWYgKCFtX2lz
U3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQgJiYgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgTlBFdmVudCB4RXZlbnQ7Ci0gICAgaW5pdFhFdmVudCgm
eEV2ZW50KTsKLSAgICBHZGtFdmVudEtleSogZ2RrRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKS0+
Z2RrRXZlbnRLZXkoKTsKLQotICAgIHhFdmVudC50eXBlID0gKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCkgPyAyIDogMzsgLy8gS2V5UHJlc3MvUmVsZWFzZSBnZXQg
dW5zZXQgc29tZXdoZXJlCi0gICAgeEV2ZW50LnhrZXkucm9vdCA9IGdldFJvb3RXaW5kb3cobV9w
YXJlbnRGcmFtZS5nZXQoKSk7Ci0gICAgeEV2ZW50LnhrZXkuc3Vid2luZG93ID0gMDsgLy8gd2Ug
aGF2ZSBubyBjaGlsZCB3aW5kb3cKLSAgICB4RXZlbnQueGtleS50aW1lID0gZXZlbnQtPnRpbWVT
dGFtcCgpOwotICAgIHhFdmVudC54a2V5LnN0YXRlID0gZ2RrRXZlbnQtPnN0YXRlOyAvLyBHZGtN
b2RpZmllclR5cGUgbWlycm9ycyB4bGliIHN0YXRlIG1hc2tzCi0gICAgeEV2ZW50LnhrZXkua2V5
Y29kZSA9IGdka0V2ZW50LT5oYXJkd2FyZV9rZXljb2RlOwotICAgIHhFdmVudC54a2V5LnNhbWVf
c2NyZWVuID0gdHJ1ZTsKLQotICAgIC8vIE5PVEU6IEFzIHRoZSBYRXZlbnRzIHNlbnQgdG8gdGhl
IHBsdWctaW4gYXJlIHN5bnRoZXNpemVkIGFuZCB0aGVyZSBpcyBub3QgYSBuYXRpdmUgd2luZG93
Ci0gICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgcGx1Zy1pbiByZWN0YW5nbGUsIHNvbWUgb2Yg
dGhlIG1lbWJlcnMgb2YgdGhlIFhFdmVudCBzdHJ1Y3R1cmVzIGFyZSBub3QKLSAgICAvLyBzZXQg
dG8gdGhlaXIgbm9ybWFsIFhzZXJ2ZXIgdmFsdWVzLiBlLmcuIEtleSBldmVudHMgZG9uJ3QgaGF2
ZSBhIHBvc2l0aW9uLgotICAgIC8vIHNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5v
cmcvZW4vTlBFdmVudAotICAgIHhFdmVudC54a2V5LnggPSAwOwotICAgIHhFdmVudC54a2V5Lnkg
PSAwOwotICAgIHhFdmVudC54a2V5Lnhfcm9vdCA9IDA7Ci0gICAgeEV2ZW50LnhrZXkueV9yb290
ID0gMDsKLQotICAgIGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKLSAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRFdmVu
dFN0YXRlKE1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIHVuc2lnbmVkIGludCBzdGF0ZSA9IDA7
Ci0gICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCi0gICAgICAgIHN0YXRlIHw9IENvbnRyb2xNYXNr
OwotICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKLSAgICAgICAgc3RhdGUgfD0gU2hpZnRNYXNr
OwotICAgIGlmIChldmVudC0+YWx0S2V5KCkpCi0gICAgICAgIHN0YXRlIHw9IE1vZDFNYXNrOwot
ICAgIGlmIChldmVudC0+bWV0YUtleSgpKQotICAgICAgICBzdGF0ZSB8PSBNb2Q0TWFzazsKLSAg
ICByZXR1cm4gc3RhdGU7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW5pdFhFdmVudChYRXZlbnQq
IHhFdmVudCkKLXsKLSAgICBtZW1zZXQoeEV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7Ci0KLSAg
ICB4RXZlbnQtPnhhbnkuc2VyaWFsID0gMDsgLy8gd2UgYXJlIHVuYXdhcmUgb2YgdGhlIGxhc3Qg
cmVxdWVzdCBwcm9jZXNzZWQgYnkgWCBTZXJ2ZXIKLSAgICB4RXZlbnQtPnhhbnkuc2VuZF9ldmVu
dCA9IGZhbHNlOwotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgIHhFdmVudC0+eGFueS5k
aXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRn
ZXQpKTsKLQotICAgIC8vIE1vemlsbGEgYWxzbyBzZW5kcyBOb25lIGhlcmUgZm9yIHdpbmRvd2xl
c3MgcGx1Z2lucy4gU2VlIG5zT2JqZWN0RnJhbWUuY3BwIGluIHRoZSBNb3ppbGxhIHNvdXJjZXMu
Ci0gICAgLy8gVGhpcyBtZXRob2QgYWxzbyBzZXRzIHVwIEZvY3VzSW4gYW5kIEZvY3VzT3V0IGV2
ZW50cyBmb3Igd2luZG93cyBwbHVnaW5zLCBidXQgTW96aWxsYSBkb2Vzbid0Ci0gICAgLy8gZXZl
biBzZW5kIHRoZXNlIHR5cGVzIG9mIGV2ZW50cyB0byB3aW5kb3dlZCBwbHVnaW5zLiBJbiB0aGUg
ZnV0dXJlLCBpdCBtYXkgYmUgZ29vZCB0byBvbmx5Ci0gICAgLy8gc2VuZCB0aGVtIHRvIHdpbmRv
d2xlc3MgcGx1Z2lucy4KLSAgICB4RXZlbnQtPnhhbnkud2luZG93ID0gTm9uZTsKLX0KLQotc3Rh
dGljIHZvaWQgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1v
dXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJl
bnRGcmFtZSkKLXsKLSAgICBYQnV0dG9uRXZlbnQmIHhidXR0b24gPSB4RXZlbnQtPnhidXR0b247
Ci0gICAgeGJ1dHRvbi50eXBlID0gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQgPyBCdXR0b25QcmVzcyA6IEJ1dHRvblJlbGVhc2U7Ci0gICAgeGJ1dHRvbi5yb290
ID0gZ2V0Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7Ci0gICAgeGJ1dHRvbi5zdWJ3aW5kb3cgPSAw
OwotICAgIHhidXR0b24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKLSAgICB4YnV0dG9uLngg
PSBwb3N0Wm9vbVBvcy54KCk7Ci0gICAgeGJ1dHRvbi55ID0gcG9zdFpvb21Qb3MueSgpOwotICAg
IHhidXR0b24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKLSAgICB4YnV0dG9uLnlfcm9vdCA9
IGV2ZW50LT5zY3JlZW5ZKCk7Ci0gICAgeGJ1dHRvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShl
dmVudCk7Ci0gICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKLSAgICBjYXNlIE1pZGRsZUJ1
dHRvbjoKLSAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24yOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFJpZ2h0QnV0dG9uOgotICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjM7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGVmdEJ1dHRvbjoKLSAgICBkZWZhdWx0OgotICAg
ICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjE7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICB4YnV0dG9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgc2V0WE1vdGlv
bkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBj
b25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKLXsKLSAgICBY
TW90aW9uRXZlbnQmIHhtb3Rpb24gPSB4RXZlbnQtPnhtb3Rpb247Ci0gICAgeG1vdGlvbi50eXBl
ID0gTW90aW9uTm90aWZ5OwotICAgIHhtb3Rpb24ucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50
RnJhbWUpOwotICAgIHhtb3Rpb24uc3Vid2luZG93ID0gMDsKLSAgICB4bW90aW9uLnRpbWUgPSBl
dmVudC0+dGltZVN0YW1wKCk7Ci0gICAgeG1vdGlvbi54ID0gcG9zdFpvb21Qb3MueCgpOwotICAg
IHhtb3Rpb24ueSA9IHBvc3Rab29tUG9zLnkoKTsKLSAgICB4bW90aW9uLnhfcm9vdCA9IGV2ZW50
LT5zY3JlZW5YKCk7Ci0gICAgeG1vdGlvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOwotICAg
IHhtb3Rpb24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOwotICAgIHhtb3Rpb24uaXNf
aGludCA9IE5vdGlmeU5vcm1hbDsKLSAgICB4bW90aW9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKLX0K
LQotc3RhdGljIHZvaWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhF
dmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywgRnJh
bWUqIHBhcmVudEZyYW1lKQotewotICAgIFhDcm9zc2luZ0V2ZW50JiB4Y3Jvc3NpbmcgPSB4RXZl
bnQtPnhjcm9zc2luZzsKLSAgICB4Y3Jvc3NpbmcudHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50ID8gRW50ZXJOb3RpZnkgOiBMZWF2ZU5vdGlmeTsKLSAg
ICB4Y3Jvc3Npbmcucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUpOwotICAgIHhjcm9z
c2luZy5zdWJ3aW5kb3cgPSAwOwotICAgIHhjcm9zc2luZy50aW1lID0gZXZlbnQtPnRpbWVTdGFt
cCgpOwotICAgIHhjcm9zc2luZy54ID0gcG9zdFpvb21Qb3MueSgpOwotICAgIHhjcm9zc2luZy55
ID0gcG9zdFpvb21Qb3MueCgpOwotICAgIHhjcm9zc2luZy54X3Jvb3QgPSBldmVudC0+c2NyZWVu
WCgpOwotICAgIHhjcm9zc2luZy55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOwotICAgIHhjcm9z
c2luZy5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7Ci0gICAgeGNyb3NzaW5nLm1vZGUg
PSBOb3RpZnlOb3JtYWw7Ci0gICAgeGNyb3NzaW5nLmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7
Ci0gICAgeGNyb3NzaW5nLnNhbWVfc2NyZWVuID0gdHJ1ZTsKLSAgICB4Y3Jvc3NpbmcuZm9jdXMg
PSBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZl
bnQqIGV2ZW50KQotewotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotCi0gICAgaWYgKCFtX2lz
U3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChldmVudC0+YnV0dG9uKCkgPT0gUmlnaHRCdXR0b24g
JiYgbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrSWdub3JlUmlnaHRDbGlj
a0luV2luZG93bGVzc01vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKLSAgICAgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICBwYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS0+c2V0QWN0aXZlKHRydWUpOwotICAgICAgICBmb2N1c1BsdWdpbkVsZW1lbnQo
KTsKLSAgICB9Ci0KLSAgICBOUEV2ZW50IHhFdmVudDsKLSAgICBpbml0WEV2ZW50KCZ4RXZlbnQp
OwotCi0gICAgSW50UG9pbnQgcG9zdFpvb21Qb3MgPSByb3VuZGVkSW50UG9pbnQobV9lbGVtZW50
LT5yZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwoZXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSkp
OwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKLSAgICAgICAg
c2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9z
LCBtX3BhcmVudEZyYW1lLmdldCgpKTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKLSAgICAgICAgc2V0WE1vdGlvbkV2ZW50U3BlY2lm
aWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVudEZyYW1lLmdldCgp
KTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2
ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7Ci0g
ICAgICAgIHNldFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBv
c3Rab29tUG9zLCBtX3BhcmVudEZyYW1lLmdldCgpKTsKLQotICAgICAgICAvLyBUaGlzIGlzIGEg
d29yay1hcm91bmQgZm9yIHBsdWdpbnMgd2hpY2ggY2hhbmdlIHRoZSBjdXJzb3IuIFdoZW4gdGhh
dCBoYXBwZW5zIHdlCi0gICAgICAgIC8vIGdldCBvdXQgb2Ygc3luYyB3aXRoIEdESyBzb21laG93
LiBSZXNldHRpbmcgdGhlIGN1cnNvciBoZXJlIHNlZW1zIHRvIGZpeCB0aGUgaXNzdWUuCi0gICAg
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQotICAg
ICAgICAgICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3Bh
cmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpLCAw
KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZGlzcGF0Y2hO
UEV2ZW50KHhFdmVudCkpCi0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotfQot
Ci12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCgpCi17Ci0gICAgaWYgKCFtX2lz
U3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFhFdmVudCBucEV2ZW50OwotICAgIGluaXRYRXZlbnQoJm5w
RXZlbnQpOwotCi0gICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7
Ci0gICAgZXZlbnQudHlwZSA9IDk7IC8vIEZvY3VzSW4gZ2V0cyB1bnNldCBzb21ld2hlcmUKLSAg
ICBldmVudC5tb2RlID0gTm90aWZ5Tm9ybWFsOwotICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURl
dGFpbE5vbmU7Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCgpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCB8
fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFhFdmVudCBucEV2ZW50OwotICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOwot
Ci0gICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7Ci0gICAgZXZl
bnQudHlwZSA9IDEwOyAvLyBGb2N1c091dCBnZXRzIHVuc2V0IHNvbWV3aGVyZQotICAgIGV2ZW50
Lm1vZGUgPSBOb3RpZnlOb3JtYWw7Ci0gICAgZXZlbnQuZGV0YWlsID0gTm90aWZ5RGV0YWlsTm9u
ZTsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQotewotICAgIFdpZGdldDo6c2V0UGFyZW50
KHBhcmVudCk7Ci0KLSAgICBpZiAocGFyZW50KQotICAgICAgICBpbml0KCk7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQotewotICAgIGlmICgh
bV9pc1dpbmRvd2VkKQotICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRl
ZCB8fCAhcGFyZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBwbHVnaW4gZGlkbid0IGxvYWQgc3VjZXNz
ZnVsbHksIG5vIHBvaW50IGluIGNhbGxpbmcgc2V0d2luZG93Ci0gICAgaWYgKG1fc3RhdHVzICE9
IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gT24gVW5peCwgb25seSBjYWxsIHBsdWdpbidzIHNldHdpbmRvdyBpZiBpdCdzIGZ1bGwtcGFn
ZSBvciB3aW5kb3dlZAotICAgIGlmIChtX21vZGUgIT0gTlBfRlVMTCAmJiBtX21vZGUgIT0gTlBf
RU1CRUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENoZWNrIGlmIHRoZSBwbGF0Zm9ybVBs
dWdpbldpZGdldCBzdGlsbCBleGlzdHMKLSAgICBpZiAobV9pc1dpbmRvd2VkICYmICFwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jbGlwUmVjdC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSWYgd2lkdGggb3IgaGVpZ2h0IGFyZSBudWxsLCBzZXQg
dGhlIGNsaXBSZWN0IHRvIG51bGwsCi0gICAgICAgIC8vIGluZGljYXRpbmcgdGhhdCB0aGUgcGx1
Z2luIGlzIG5vdCB2aXNpYmxlL3Njcm9sbGVkIG91dC4KLSAgICAgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IDA7Ci0g
ICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKLSAgICAgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5ib3R0b20gPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIENsaXBwaW5nIHJl
Y3RhbmdsZSBvZiB0aGUgcGx1Zy1pbjsgdGhlIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnQgY29ybmVy
IG9mIHRoZSBkcmF3YWJsZSBvciB3aW5kb3cuIAotICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0
LmxlZnQgPSBtX25wV2luZG93LnggKyBtX2NsaXBSZWN0LngoKTsKLSAgICAgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC50b3AgPSBtX25wV2luZG93LnkgKyBtX2NsaXBSZWN0LnkoKTsKLSAgICAgICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fbnBXaW5kb3cueCArIG1fY2xpcFJlY3QueCgp
ICsgbV9jbGlwUmVjdC53aWR0aCgpOwotICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRv
bSA9IG1fbnBXaW5kb3cueSArIG1fY2xpcFJlY3QueSgpICsgbV9jbGlwUmVjdC5oZWlnaHQoKTsK
LSAgICB9Ci0KLSAgICAvLyBGTEFTSCBXT1JLQVJPVU5EOiBPbmx5IHNldCBpbml0aWFsbHkuIE11
bHRpcGxlIGNhbGxzIHRvCi0gICAgLy8gc2V0TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRv
IGNyYXNoIGluIHdpbmRvd2VkIG1vZGUuCi0gICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtzKCkuY29u
dGFpbnMoUGx1Z2luUXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVUaGFuT25jZSkgfHwgIW1faXNX
aW5kb3dlZAotICAgICAgICB8fCBtX25wV2luZG93LndpZHRoID09IHN0YXRpY19jYXN0PHVpbnQz
Ml90PigtMSkgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0x
KSkgewotICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7Ci0g
ICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOwotICAgIH0K
LQotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwotICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7Ci0g
ICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBs
dWdpblZpZXcoMCk7Ci0KLSAgICBpZiAoIW1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gR3RrWHRCaW4gd2lsbCBjYWxsIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSwgc28g
d2UgZG9uJ3QgbmVlZCB0byBkbyBpdCBoZXJlLgotICAgIGlmICghbV9uZWVkc1hFbWJlZCkgewot
ICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7Ci0gICAgICAgIGd0
a194dGJpbl9yZXNpemUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dSZWN0LndpZHRo
KCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX2RlbGF5ZWRBbGxvY2F0aW9uID0gbV93aW5kb3dSZWN0OwotICAgIHVwZGF0ZVdpZGdldEFs
bG9jYXRpb25BbmRDbGlwKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6dXBkYXRlV2lkZ2V0QWxs
b2NhdGlvbkFuZENsaXAoKQotewotICAgIC8vIElmIHRoZSB3aW5kb3cgaGFzIG5vdCBiZWVuIGVt
YmVkZGVkIHlldCAodGhlIHBsdWcgYWRkZWQpLCB3ZSBkZWxheSBzZXR0aW5nIGl0cyBhbGxvY2F0
aW9uIHVudGlsIAotICAgIC8vIHRoYXQgcG9pbnQuIFRoaXMgZml4ZXMgaXNzdWVzIHdpdGggc29t
ZSBKYXZhIHBsdWdpbiBpbnN0YW5jZXMgbm90IHJlbmRlcmluZyBpbW1lZGlhdGVseS4KLSAgICBp
ZiAoIW1fcGx1Z0FkZGVkIHx8IG1fZGVsYXllZEFsbG9jYXRpb24uaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCk7Ci0gICAgaWYgKGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkpIHsKLSAgICAgICAg
R2RrUmVjdGFuZ2xlIGNsaXBSZWN0ID0gbV9jbGlwUmVjdDsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgotICAgICAgICBHZGtSZWdpb24qIGNsaXBSZWdpb24gPSBnZGtfcmVnaW9uX3JlY3Rhbmds
ZSgmY2xpcFJlY3QpOwotICAgICAgICBnZGtfd2luZG93X3NoYXBlX2NvbWJpbmVfcmVnaW9uKGd0
a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpLCBjbGlwUmVnaW9uLCAwLCAwKTsKLSAgICAgICAg
Z2RrX3JlZ2lvbl9kZXN0cm95KGNsaXBSZWdpb24pOwotI2Vsc2UKLSAgICAgICAgY2Fpcm9fcmVn
aW9uX3QqIGNsaXBSZWdpb24gPSBjYWlyb19yZWdpb25fY3JlYXRlX3JlY3RhbmdsZSgmY2xpcFJl
Y3QpOwotICAgICAgICBnZGtfd2luZG93X3NoYXBlX2NvbWJpbmVfcmVnaW9uKGd0a193aWRnZXRf
Z2V0X3dpbmRvdyh3aWRnZXQpLCBjbGlwUmVnaW9uLCAwLCAwKTsKLSAgICAgICAgY2Fpcm9fcmVn
aW9uX2Rlc3Ryb3koY2xpcFJlZ2lvbik7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBUaGUgZ29h
bCBpcyB0byB0cnkgdG8gYXZvaWQgY2FsbGluZyBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgaW4g
dGhlIFdlYlZpZXcncwotICAgIC8vIHNpemUtYWxsb2NhdGUgbWV0aG9kLiBJdCBibG9ja3MgdGhl
IG1haW4gbG9vcCBhbmQgaWYgdGhlIHdpZGdldCBpcyBvZmZzY3JlZW4KLSAgICAvLyBvciBoYXNu
J3QgbW92ZWQgaXQgaXNuJ3QgcmVxdWlyZWQuCi0KLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBp
ZiB0aGUgYWxsb2NhdGlvbiBoYXMgbm90IGNoYW5nZWQuCi0gICAgR3RrQWxsb2NhdGlvbiBjdXJy
ZW50QWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmN1
cnJlbnRBbGxvY2F0aW9uKTsKLSAgICBpZiAoY3VycmVudEFsbG9jYXRpb24gPT0gbV9kZWxheWVk
QWxsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcg
aWYgYm90aCB0aGUgb2xkIGFuZCB0aGUgbmV3IGFsbG9jYXRpb25zIGFyZSBvdXRzaWRlIHRoZSBm
cmFtZS4KLSAgICBJbnRSZWN0IGN1cnJlbnRBbGxvY2F0aW9uUmVjdChjdXJyZW50QWxsb2NhdGlv
bik7Ci0gICAgY3VycmVudEFsbG9jYXRpb25SZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7Ci0g
ICAgaWYgKGN1cnJlbnRBbGxvY2F0aW9uUmVjdC5pc0VtcHR5KCkgJiYgbV9jbGlwUmVjdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNU
KHdpZGdldCksICJkZWxheWVkLWFsbG9jYXRpb24iLCAmbV9kZWxheWVkQWxsb2NhdGlvbik7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCi17Ci0g
ICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKLQotICAgIGlmIChpc1NlbGZW
aXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgewotICAgICAgICBpZiAodmlzaWJs
ZSkKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ3RrX3dpZGdldF9oaWRlKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpOwotICAgIH0KLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVh
ZEZpbGUoVmVjdG9yPGNoYXI+JiBvdXRwdXRCdWZmZXIsIHVpbnQzMl90IGZpbGVuYW1lTGVuZ3Ro
LCBjb25zdCBjaGFyKiBmaWxlbmFtZUJ1ZmZlcikKLXsKLSAgICAvLyBUaGVyZSBkb2Vzbid0IHNl
ZW0gdG8gYmUgYW55IGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBlbmNvZGluZyB0aGUgZmlsZW5h
bWUKLSAgICAvLyBpcyBpbiwgYnV0IG1vc3QgcG9ydHMgc2VlbSB0byBhc3N1bWUgVVRGLTggaGVy
ZSBhbmQgdGhlIHRlc3QgcGx1Z2luIGlzIGRlZmluaXRlbHkKLSAgICAvLyBzZW5kaW5nIHRoZSBw
YXRoIGluIFVURi04IGVuY29kaW5nLgotICAgIENTdHJpbmcgZmlsZW5hbWUoZmlsZW5hbWVCdWZm
ZXIsIGZpbGVuYW1lTGVuZ3RoKTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdS
ZWYoZ19maWxlX25ld19mb3JfY29tbWFuZGxpbmVfYXJnKGZpbGVuYW1lLmRhdGEoKSkpOwotICAg
IGlmIChnX2ZpbGVfcXVlcnlfZmlsZV90eXBlKGZpbGUuZ2V0KCksIEdfRklMRV9RVUVSWV9JTkZP
X05PTkUsIDApICE9IEdfRklMRV9UWVBFX1JFR1VMQVIpCi0gICAgICAgIHJldHVybiBOUEVSUl9G
SUxFX05PVF9GT1VORDsKLQotICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0
R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhmaWxlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRF
X1NUQU5EQVJEX1NJWkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAp
KTsKLSAgICBpZiAoIWZpbGVJbmZvKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9V
TkQ7Ci0KLSAgICBHUmVmUHRyPEdGaWxlSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRH
UmVmKGdfZmlsZV9yZWFkKGZpbGUuZ2V0KCksIDAsIDApKTsKLSAgICBpZiAoIWlucHV0U3RyZWFt
KQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBvdXRwdXRCdWZm
ZXIucmVzaXplKGdfZmlsZV9pbmZvX2dldF9zaXplKGZpbGVJbmZvLmdldCgpKSk7Ci0gICAgZ3Np
emUgYnl0ZXNSZWFkID0gMDsKLSAgICBpZiAoIWdfaW5wdXRfc3RyZWFtX3JlYWRfYWxsKEdfSU5Q
VVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dEJ1ZmZlci5kYXRhKCksIG91dHB1dEJ1ZmZlci5zaXplKCksICZieXRlc1Jl
YWQsIDAsIDApKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRW
YWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJl
c3VsdCkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5WVG9vbGtpdDoK
LSAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gMjsKLSAgICAgICAgKnJl
c3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2Ug
TlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKLSAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZh
bHVlKSA9IHRydWU7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6Ci0gICAg
ICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwotICAgICAgICAqcmVzdWx0
ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5W
U3VwcG9ydHNXaW5kb3dsZXNzOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUp
ID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJs
ZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxl
KSB7Ci0gICAgY2FzZSBOUE5WeERpc3BsYXk6Ci0gICAgICAgIGlmIChtX25lZWRzWEVtYmVkKQot
ICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gKHZvaWQgKilHREtfRElTUExBWV9YRElTUExB
WShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Kih2b2lkICoqKXZhbHVlID0gKHZvaWQgKilHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSktPnh0Y2xpZW50Lnh0ZGlzcGxheTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9S
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDoKLSAg
ICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7Ci0gICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUg
PSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCAoR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpLT54dGNsaWVudC54dGRpc3BsYXkpOwotCi0gICAgICAgICAgICAqcmVzdWx0ID0g
TlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgKnJlc3VsdCA9IE5Q
RVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGNhc2Ug
TlBOVm5ldHNjYXBlV2luZG93OiB7Ci0gICAgICAgICAgICBHZGtXaW5kb3cqIGdka1dpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3co
KS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOwotICAgICAgICAgICAgR2RrV2luZG93KiB0b3BsZXZl
bFdpbmRvdyA9IGdka193aW5kb3dfZ2V0X3RvcGxldmVsKGdka1dpbmRvdyk7Ci0gICAgICAgICAg
ICBpZiAoIXRvcGxldmVsV2luZG93KSB7Ci0gICAgICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJS
X0dFTkVSSUNfRVJST1I7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAqc3RhdGljX2Nhc3Q8V2luZG93Kj4odmFsdWUpID0gR0RLX1dJTkRP
V19YV0lORE9XKHRvcGxldmVsV2luZG93KTsKLSAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6
OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKG1faXNXaW5k
b3dlZCkgewotICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnZhbGlkYXRl
V2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxp
ZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQotewotICAgIGlmICghcmVjdCkgewotICAgICAgICBpbnZh
bGlkYXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IHIocmVjdC0+
bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAt
IHJlY3QtPnRvcCk7Ci0gICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHIpOwotfQot
Ci12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pCi17Ci0gICAgLy8g
VE9ETzogb3B0aW1pemUKLSAgICBpbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6
Zm9yY2VSZWRyYXcoKQotewotICAgIGlmIChtX2lzV2luZG93ZWQpCi0gICAgICAgIGd0a193aWRn
ZXRfcXVldWVfZHJhdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGd0a193aWRnZXRfcXVldWVfZHJhdyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3co
KS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOwotfQotCi1zdGF0aWMgRGlzcGxheSogZ2V0UGx1Z2lu
RGlzcGxheSgpCi17Ci0gICAgLy8gVGhlIHBsdWdpbiB0b29sa2l0IG1pZ2h0IGhhdmUgYSBkaWZm
ZXJlbnQgWCBjb25uZWN0aW9uIG9wZW4uICBTaW5jZSB3ZSdyZQotICAgIC8vIGEgZ2RrL2d0ayBh
cHAsIHdlJ2xsIChwcm9iYWJseT8pIGhhdmUgdGhlIHNhbWUgWCBjb25uZWN0aW9uIGFzIGFueSBn
ZGstYmFzZWQKLSAgICAvLyBwbHVnaW5zLCBzbyB3ZSBjYW4gcmV0dXJuIHRoYXQuICBXZSBtaWdo
dCB3YW50IHRvIGFkZCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgaGVyZQotICAgIC8vIGxhdGVyLgot
Ci0gICAgcmV0dXJuIEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0
KCkpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRWaXN1YWxBbmRDb2xvcm1hcChpbnQgZGVwdGgsIFZp
c3VhbCoqIHZpc3VhbCwgQ29sb3JtYXAqIGNvbG9ybWFwKQotewotICAgICp2aXN1YWwgPSAwOwot
ICAgICpjb2xvcm1hcCA9IDA7Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlf
WERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgaW50IHJtYWosIHJtaW47
Ci0gICAgaWYgKGRlcHRoID09IDMyICYmICghWFJlbmRlclF1ZXJ5VmVyc2lvbihkaXNwbGF5LCAm
cm1haiwgJnJtaW4pIHx8IChybWFqID09IDAgJiYgcm1pbiA8IDUpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgWFZpc3VhbEluZm8gdGVtcGw7Ci0gICAgdGVtcGwuc2NyZWVuICA9IGdka19zY3Jl
ZW5fZ2V0X251bWJlcihnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOwotICAgIHRlbXBsLmRlcHRo
ICAgPSBkZXB0aDsKLSAgICB0ZW1wbC5jX2NsYXNzID0gVHJ1ZUNvbG9yOwotICAgIGludCBuVmlz
dWFsczsKLSAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbyA9IFhHZXRWaXN1YWxJbmZvKGRpc3Bs
YXksIFZpc3VhbFNjcmVlbk1hc2sgfCBWaXN1YWxEZXB0aE1hc2sgfCBWaXN1YWxDbGFzc01hc2ss
ICZ0ZW1wbCwgJm5WaXN1YWxzKTsKLQotICAgIGlmICghblZpc3VhbHMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChkZXB0aCA9PSAzMikgewotICAgICAgICBmb3IgKGludCBpZHggPSAwOyBp
ZHggPCBuVmlzdWFsczsgKytpZHgpIHsKLSAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBm
b3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChkaXNwbGF5LCB2aXN1YWxJbmZvW2lkeF0u
dmlzdWFsKTsKLSAgICAgICAgICAgIGlmIChmb3JtYXQtPnR5cGUgPT0gUGljdFR5cGVEaXJlY3Qg
JiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrKSB7Ci0gICAgICAgICAgICAgICAgICp2aXN1YWwg
PSB2aXN1YWxJbmZvW2lkeF0udmlzdWFsOwotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgKnZpc3VhbCA9IHZpc3Vh
bEluZm9bMF0udmlzdWFsOwotCi0gICAgWEZyZWUodmlzdWFsSW5mbyk7Ci0KLSAgICBpZiAoKnZp
c3VhbCkKLSAgICAgICAgKmNvbG9ybWFwID0gWENyZWF0ZUNvbG9ybWFwKGRpc3BsYXksIEdES19S
T09UX1dJTkRPVygpLCAqdmlzdWFsLCBBbGxvY05vbmUpOwotfQotCi1nYm9vbGVhbiBQbHVnaW5W
aWV3OjpwbHVnUmVtb3ZlZENhbGxiYWNrKEd0a1NvY2tldCogc29ja2V0LCBQbHVnaW5WaWV3KiB2
aWV3KQotewotICAgIHZpZXctPm1fcGx1Z0FkZGVkID0gZmFsc2U7Ci0gICAgcmV0dXJuIFRSVUU7
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGx1Z0FkZGVkQ2FsbGJhY2soR3RrU29ja2V0KiBzb2Nr
ZXQsIFBsdWdpblZpZXcqIHZpZXcpCi17Ci0gICAgQVNTRVJUKHNvY2tldCk7Ci0gICAgQVNTRVJU
KHZpZXcpOwotICAgIHZpZXctPm1fcGx1Z0FkZGVkID0gdHJ1ZTsKLSAgICB2aWV3LT51cGRhdGVX
aWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOwotfQotCi1ib29sIFBsdWdpblZpZXc6OnBsYXRmb3Jt
U3RhcnQoKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAgQVNTRVJUKG1fc3RhdHVz
ID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7Ci0KLSAgICBpZiAobV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJl
bnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNY
RW1iZWQpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0gICAgfQotCi0gICAgaWYgKG1faXNXaW5k
b3dlZCkgewotICAgICAgICBHdGtXaWRnZXQqIHBhZ2VDbGllbnQgPSBtX3BhcmVudEZyYW1lLT52
aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgICAgIGlmICht
X25lZWRzWEVtYmVkKSB7Ci0gICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IGlzIG5vdCBhbmNo
b3JlZCB0aGUgc3RhcnR1cCBwcm9jZXNzIHdpbGwKLSAgICAgICAgICAgIC8vIGZhaWwgbWlzZXJh
Ymx5IGZvciBYRW1iZWQgcGx1Z2lucyBhIGJpdCBsYXRlciBvbiB3aGVuCi0gICAgICAgICAgICAv
LyB3ZSB0cnkgdG8gZ2V0IHRoZSBJRCBvZiBvdXIgd2luZG93IChzaW5jZSByZWFsaXplIHdpbGwK
LSAgICAgICAgICAgIC8vIGZhaWwpLCBzbyBsZXQncyBqdXN0IGFib3J0IGhlcmUuCi0gICAgICAg
ICAgICBpZiAoIWd0a193aWRnZXRfZ2V0X3BhcmVudChwYWdlQ2xpZW50KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIG1fcGx1Z0FkZGVkID0gZmFsc2U7Ci0g
ICAgICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfc29ja2V0X25ldygpKTsKLSAgICAgICAg
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIocGFnZUNsaWVudCksIHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpOwotICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLCAicGx1Zy1hZGRlZCIsIEdfQ0FMTEJBQ0soUGx1Z2luVmlldzo6cGx1Z0Fk
ZGVkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSwgInBsdWctcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soUGx1Z2luVmlldzo6
cGx1Z1JlbW92ZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IHNldFBsYXRmb3JtV2lkZ2V0KGd0a194dGJpbl9uZXcocGFnZUNsaWVudCwgMCkpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOwotICAgICAgICBtX3BsdWdpbkRp
c3BsYXkgPSBnZXRQbHVnaW5EaXNwbGF5KCk7Ci0gICAgfQotCi0gICAgc2hvdygpOwotCi0gICAg
ICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzID0gbmV3IE5QU2V0V2luZG93Q2FsbGJh
Y2tTdHJ1Y3QoKTsKLSAgICAgICAgd3MtPnR5cGUgPSAwOwotCi0gICAgaWYgKG1faXNXaW5kb3dl
ZCkgewotICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7Ci0gICAg
ICAgIGlmIChtX25lZWRzWEVtYmVkKSB7Ci0gICAgICAgICAgICBHdGtXaWRnZXQqIHdpZGdldCA9
IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCk7Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUo
d2lkZ2V0KTsKLSAgICAgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oZ3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tFVChwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKSkpOwotICAgICAgICAgICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93
aW5kb3cod2lkZ2V0KTsKLSAgICAgICAgICAgIHdzLT5kaXNwbGF5ID0gR0RLX1dJTkRPV19YRElT
UExBWSh3aW5kb3cpOwotICAgICAgICAgICAgd3MtPnZpc3VhbCA9IEdES19WSVNVQUxfWFZJU1VB
TChnZGtfd2luZG93X2dldF92aXN1YWwod2luZG93KSk7Ci0gICAgICAgICAgICB3cy0+ZGVwdGgg
PSBnZGtfdmlzdWFsX2dldF9kZXB0aChnZGtfd2luZG93X2dldF92aXN1YWwod2luZG93KSk7Ci0g
ICAgICAgICAgICB3cy0+Y29sb3JtYXAgPSBYQ3JlYXRlQ29sb3JtYXAod3MtPmRpc3BsYXksIEdE
S19ST09UX1dJTkRPVygpLCB3cy0+dmlzdWFsLCBBbGxvY05vbmUpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PigoR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dHdpbmRvdykpOwotICAgICAg
ICAgICAgd3MtPmRpc3BsYXkgPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0
ZGlzcGxheTsKLSAgICAgICAgICAgIHdzLT52aXN1YWwgPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0dmlzdWFsOwotICAgICAgICAgICAgd3MtPmRlcHRoID0g
R1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGRlcHRoOwotICAg
ICAgICAgICAgd3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkp
LT54dGNsaWVudC54dGNvbG9ybWFwOwotICAgICAgICB9Ci0gICAgICAgIFhGbHVzaCAod3MtPmRp
c3BsYXkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZURyYXdhYmxlOwotICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7IC8vIE5vdCB1c2Vk
PwotCi0gICAgICAgIEdka1NjcmVlbiogZ3NjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQo
KTsKLSAgICAgICAgR2RrVmlzdWFsKiBndmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfc3lzdGVtX3Zp
c3VhbChnc2NyZWVuKTsKLQotICAgICAgICBpZiAoZ2RrX3Zpc3VhbF9nZXRfZGVwdGgoZ3Zpc3Vh
bCkgPT0gMzIgfHwgIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVp
cmVzRGVmYXVsdFNjcmVlbkRlcHRoKSkgewotICAgICAgICAgICAgZ2V0VmlzdWFsQW5kQ29sb3Jt
YXAoMzIsICZtX3Zpc3VhbCwgJm1fY29sb3JtYXApOwotICAgICAgICAgICAgd3MtPmRlcHRoID0g
MzI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1fdmlzdWFsKSB7Ci0gICAgICAgICAgICBn
ZXRWaXN1YWxBbmRDb2xvcm1hcChnZGtfdmlzdWFsX2dldF9kZXB0aChndmlzdWFsKSwgJm1fdmlz
dWFsLCAmbV9jb2xvcm1hcCk7Ci0gICAgICAgICAgICB3cy0+ZGVwdGggPSBnZGtfdmlzdWFsX2dl
dF9kZXB0aChndmlzdWFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHdzLT5kaXNwbGF5ID0gR0RL
X0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgICAgIHdz
LT52aXN1YWwgPSBtX3Zpc3VhbDsKLSAgICAgICAgd3MtPmNvbG9ybWFwID0gbV9jb2xvcm1hcDsK
LQotICAgICAgICBtX25wV2luZG93LnggPSAwOwotICAgICAgICBtX25wV2luZG93LnkgPSAwOwot
ICAgICAgICBtX25wV2luZG93LndpZHRoID0gLTE7Ci0gICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0
ID0gLTE7Ci0gICAgfQotCi0gICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7Ci0KLSAgICAvLyBU
T0RPIHJlbW92ZSBpbiBmYXZvciBvZiBudWxsIGV2ZW50cywgbGlrZSBtYWMgcG9ydD8KLSAgICBp
ZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0
V2luZG93Q2FsbCkpKQotICAgICAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsgLy8gd2FzOiBzZXRO
UFdpbmRvd0lmTmVlZGVkKCksIGJ1dCB0aGlzIGRvZXNuJ3QgcHJvZHVjZSAweDAgcmVjdHMgYXQg
Zmlyc3QgZ28KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBsYXRm
b3JtRGVzdHJveSgpCi17Ci0gICAgaWYgKG1fZHJhd2FibGUpIHsKLSAgICAgICAgWEZyZWVQaXht
YXAoR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSksIG1fZHJh
d2FibGUpOwotICAgICAgICBtX2RyYXdhYmxlID0gMDsKLSAgICB9Ci0KLSAgICBHdGtXaWRnZXQq
IHdpZGdldCA9IHBsYXRmb3JtV2lkZ2V0KCk7Ci0gICAgaWYgKHdpZGdldCkgewotICAgICAgICBH
dGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudCh3aWRnZXQpOwotICAgICAg
ICBBU1NFUlQocGFyZW50KTsKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRB
SU5FUihwYXJlbnQpLCB3aWRnZXQpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy94MTEvUGx1Z2luVmlld1gxMS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3gxMS9QbHVnaW5WaWV3WDExLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzUxMzI3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy94MTEvUGx1Z2luVmlld1gxMS5jcHAKQEAgLTAsMCArMSwx
MDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRv
IE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBLYWthaSwg
SW5jLiA8YnJpYW5Aa2FrYWkuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSAi
QnJpZGdlSlNDLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSG9z
dFdpbmRvdy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVn
LmgiCisjaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTZXR0
aW5ncy5oIgorI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAibnBydW50
aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlIDxydW50aW1l
L0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorCisjaWZkZWYgR1RL
X0FQSV9WRVJTSU9OXzIKKyNpbmNsdWRlIDxnZGtjb25maWcuaD4KKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oR1RLKQorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9u
aW5nLmgiCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisjZWxzZQorI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNs
dWRlIDxFY29yZV9YLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorI2VuZGlmCisKKyNkZWZpbmUgU3Ry
aW5nIFh0U3RyaW5nVHlwZQorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjZGVmaW5lIEJvb2wg
aW50IC8vIHRoaXMgZ290IHVuZGVmaW5lZCBzb21ld2hlcmUKKyNkZWZpbmUgU3RhdHVzIGludCAv
LyBkaXR0bworI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KKyNpbmNsdWRlIDxj
YWlyby14bGliLmg+CisKK3VzaW5nIEpTQzo6RXhlY1N0YXRlOwordXNpbmcgSlNDOjpJbnRlcnBy
ZXRlcjsKK3VzaW5nIEpTQzo6SlNMb2NrOwordXNpbmcgSlNDOjpKU09iamVjdDsKKwordXNpbmcg
bmFtZXNwYWNlIHN0ZDsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitib29sIFBsdWdpblZpZXc6OmRp
c3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5ldmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUGx1Z2luVmll
dzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CisKKyAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
VmlldygwKTsKKyAgICByZXR1cm4gYWNjZXB0ZWQ7Cit9CisKK3N0YXRpYyBXaW5kb3cgZ2V0Um9v
dFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUpCit7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIEd0
a1dpZGdldCogcGFyZW50V2lkZ2V0ID0gcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygp
LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBHZGtTY3JlZW4qIGdzY3JlZW4gPSBndGtfd2lk
Z2V0X2dldF9zY3JlZW4ocGFyZW50V2lkZ2V0KTsKKyAgICByZXR1cm4gR0RLX1dJTkRPV19YV0lO
RE9XKGdka19zY3JlZW5fZ2V0X3Jvb3Rfd2luZG93KGdzY3JlZW4pKTsKKyNlbGlmIFBMQVRGT1JN
KEVGTCkKKyAgICBFdmFzKiBldmFzID0gcGFyZW50RnJhbWUtPnZpZXcoKS0+ZXZhcygpOworICAg
IEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdpbmRvdz4oZWNvcmVfZXZhc193aW5kb3dfZ2V0KGVj
b3JlRXZhcykpOworI2VuZGlmCit9CisKK3N0YXRpYyBEaXNwbGF5KiBnZXRQbHVnaW5EaXNwbGF5
KCkKK3sKKyNpZiBQTEFURk9STShHVEspCisgICAgLy8gVGhlIHBsdWdpbiB0b29sa2l0IG1pZ2h0
IGhhdmUgYSBkaWZmZXJlbnQgWCBjb25uZWN0aW9uIG9wZW4uIFNpbmNlIHdlJ3JlCisgICAgLy8g
YSBnZGsvZ3RrIGFwcCwgd2UnbGwgKHByb2JhYmx5PykgaGF2ZSB0aGUgc2FtZSBYIGNvbm5lY3Rp
b24gYXMgYW55IGdkay1iYXNlZAorICAgIC8vIHBsdWdpbnMsIHNvIHdlIGNhbiByZXR1cm4gdGhh
dC4gV2UgbWlnaHQgd2FudCB0byBhZGQgb3RoZXIgaW1wbGVtZW50YXRpb25zIGhlcmUKKyAgICAv
LyBsYXRlci4KKworICAgIHJldHVybiBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9n
ZXRfZGVmYXVsdCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERpc3BsYXkqPihl
Y29yZV94X2Rpc3BsYXlfZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2luVmlldzo6dXBk
YXRlUGx1Z2luV2lkZ2V0KCkKK3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50
UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJl
Y3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXct
PmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSksIGZyYW1lUmVjdCgpLnNp
emUoKSk7CisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVj
dC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CisKKyAgICBpZiAo
bV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3QgJiYgbV9jbGlwUmVjdCA9PSBvbGRDbGlwUmVj
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xv
YWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2lzV2luZG93
ZWQgJiYgIW1fd2luZG93UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgRGlzcGxheSogZGlzcGxh
eSA9IGdldFBsdWdpbkRpc3BsYXkoKTsKKworICAgICAgICBpZiAobV9kcmF3YWJsZSkKKyAgICAg
ICAgICAgIFhGcmVlUGl4bWFwKGRpc3BsYXksIG1fZHJhd2FibGUpOworCisgICAgICAgIG1fZHJh
d2FibGUgPSBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksIGdldFJvb3RXaW5kb3cobV9wYXJlbnRGcmFt
ZS5nZXQoKSksCisgICAgICAgICAgICBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0
LmhlaWdodCgpLAorICAgICAgICAgICAgKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25w
V2luZG93LndzX2luZm8pLT5kZXB0aCk7CisgICAgICAgIFhTeW5jKGRpc3BsYXksIGZhbHNlKTsg
Ly8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZlciBrbm93cyBhYm91dCB0aGUgRHJhd2FibGUKKyAg
ICB9CisKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBpZiAoZm9j
dXNlZCAmJiBwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMo
cGxhdGZvcm1XaWRnZXQoKSk7CisjZW5kaWYKKyAgICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQp
OworfQorCit2b2lkIFBsdWdpblZpZXc6OnNob3coKQoreworICAgIEFTU0VSVChwbGF0Zm9ybVBs
dWdpbldpZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOworICAgIFdpZGdldDo6c2hvdygpOwor
fQorCit2b2lkIFBsdWdpblZpZXc6OmhpZGUoKQoreworICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdp
bldpZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOworICAgIFdpZGdldDo6aGlkZSgpOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBs
dWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkgeworICAgICAgICBwYWludE1pc3NpbmdQbHVn
aW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0
TlBXaW5kb3dJZk5lZWRlZCgpOworCisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFtX2RyYXdhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBEaXNw
bGF5KiBkaXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxheSgpOworICAgIGNvbnN0IGJvb2wgc2hvdWxk
U3luY1dpdGhYID0gbV9wbHVnaW5EaXNwbGF5ICYmIG1fcGx1Z2luRGlzcGxheSAhPSBkaXNwbGF5
OworCisgICAgSW50UmVjdCBleHBvc2VkUmVjdChyZWN0KTsKKyAgICBleHBvc2VkUmVjdC5pbnRl
cnNlY3QoZnJhbWVSZWN0KCkpOworICAgIGV4cG9zZWRSZWN0Lm1vdmUoLWZyYW1lUmVjdCgpLngo
KSwgLWZyYW1lUmVjdCgpLnkoKSk7CisKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBkcmF3
YWJsZVN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb194bGliX3N1cmZhY2VfY3JlYXRlKGRpc3BsYXks
CisgICAgICAgIG1fZHJhd2FibGUsCisgICAgICAgIG1fdmlzdWFsLAorICAgICAgICBtX3dpbmRv
d1JlY3Qud2lkdGgoKSwKKyAgICAgICAgbV93aW5kb3dSZWN0LmhlaWdodCgpKSk7CisKKyAgICBp
ZiAobV9pc1RyYW5zcGFyZW50KSB7CisgICAgICAgIC8vIElmIHdlIGhhdmUgYSAzMiBiaXQgZHJh
d2FibGUgYW5kIHRoZSBwbHVnaW4gd2FudHMgdHJhbnNwYXJlbmN5LAorICAgICAgICAvLyB3ZSds
bCBjbGVhciB0aGUgZXhwb3NlZCBhcmVhIHRvIHRyYW5zcGFyZW50IGZpcnN0LiBPdGhlcndpc2Us
CisgICAgICAgIC8vIHdlJ2QgZW5kIHVwIHdpdGgganVuayBpbiB0aGVyZSBmcm9tIHRoZSBsYXN0
IHBhaW50LCBvciwgd29yc2UsCisgICAgICAgIC8vIHVuaW5pdGlhbGl6ZWQgZGF0YS4KKyAgICAg
ICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGRyYXdhYmxlU3Vy
ZmFjZS5nZXQoKSkpOworCisgICAgICAgIGlmICghKGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQo
ZHJhd2FibGVTdXJmYWNlLmdldCgpKSAmIENBSVJPX0NPTlRFTlRfQUxQSEEpKSB7CisgICAgICAg
ICAgICAvLyBBdHRlbXB0IHRvIGZha2UgaXQgd2hlbiB3ZSBkb24ndCBoYXZlIGFuIGFscGhhIGNo
YW5uZWwgb24gb3VyCisgICAgICAgICAgICAvLyBwaXhtYXAuIElmIHRoYXQncyBub3QgcG9zc2li
bGUsIGF0IGxlYXN0IGNsZWFyIHRoZSB3aW5kb3cgdG8KKyAgICAgICAgICAgIC8vIGF2b2lkIGRy
YXdpbmcgYXJ0aWZhY3RzLgorCisgICAgICAgICAgICAvLyBUaGlzIFdvdWxkIG5vdCB3b3JrIHdp
dGhvdXQgZG91YmxlIGJ1ZmZlcmluZywgYnV0IHdlIGFsd2F5cyB1c2UgaXQuCisgICAgICAgICAg
ICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIGNhaXJvX2dldF9ncm91cF90YXJn
ZXQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCkpLAorICAgICAgICAgICAgICAgIC1t
X3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CisgICAgICAgICAgICBjYWlyb19z
ZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVS
QVRPUl9DTEVBUik7CisKKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLmdldCgpLCBleHBvc2Vk
UmVjdC54KCksIGV4cG9zZWRSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9z
ZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgY2Fpcm9fZmls
bChjci5nZXQoKSk7CisgICAgfQorCisgICAgWEV2ZW50IHhldmVudDsKKyAgICBtZW1zZXQoJnhl
dmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOworICAgIFhHcmFwaGljc0V4cG9zZUV2ZW50JiBleHBv
c2VFdmVudCA9IHhldmVudC54Z3JhcGhpY3NleHBvc2U7CisgICAgZXhwb3NlRXZlbnQudHlwZSA9
IEdyYXBoaWNzRXhwb3NlOworICAgIGV4cG9zZUV2ZW50LmRpc3BsYXkgPSBkaXNwbGF5OworICAg
IGV4cG9zZUV2ZW50LmRyYXdhYmxlID0gbV9kcmF3YWJsZTsKKyAgICBleHBvc2VFdmVudC54ID0g
ZXhwb3NlZFJlY3QueCgpOworICAgIGV4cG9zZUV2ZW50LnkgPSBleHBvc2VkUmVjdC55KCk7Cisg
ICAgZXhwb3NlRXZlbnQud2lkdGggPSBleHBvc2VkUmVjdC54KCkgKyBleHBvc2VkUmVjdC53aWR0
aCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyB3aWR0aCBpcyB0aGUgcmlnaHQgaW4gdHJhbnNw
YXJlbnQgbW9kZQorICAgIGV4cG9zZUV2ZW50LmhlaWdodCA9IGV4cG9zZWRSZWN0LnkoKSArIGV4
cG9zZWRSZWN0LmhlaWdodCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyBoZWlnaHQgaXMgdGhl
IGJvdHRvbSBpbiB0cmFuc3BhcmVudCBtb2RlCisKKyAgICBkaXNwYXRjaE5QRXZlbnQoeGV2ZW50
KTsKKworICAgIGlmIChzaG91bGRTeW5jV2l0aFgpCisgICAgICAgIFhTeW5jKG1fcGx1Z2luRGlz
cGxheSwgZmFsc2UpOyAvLyBzeW5jIGNoYW5nZXMgYnkgcGx1Z2luCisKKyAgICBjYWlyb190KiBj
ciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgIGNhaXJvX3NhdmUoY3Ip
OworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBkcmF3YWJsZVN1cmZhY2UuZ2V0
KCksIGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpKTsKKworICAgIGNhaXJvX3JlY3Rh
bmdsZShjciwKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVSZWN0KCkueCgpICsgZXhwb3NlZFJl
Y3QueCgpLCBmcmFtZVJlY3QoKS55KCkgKyBleHBvc2VkUmVjdC55KCksCisgICAgICAgICAgICAg
ICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICBj
YWlyb19jbGlwKGNyKTsKKworICAgIGlmIChtX2lzVHJhbnNwYXJlbnQpCisgICAgICAgIGNhaXJv
X3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfT1ZFUik7CisgICAgZWxzZQorICAgICAg
ICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fp
cm9fcGFpbnQoY3IpOworCisgICAgY2Fpcm9fcmVzdG9yZShjcik7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyNpZiBQ
TEFURk9STShHVEspCisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisKKyAgICBpZiAoIW1faXNT
dGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtl
eWRvd25FdmVudCAmJiBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBOUEV2ZW50IHhFdmVudDsKKyAgICBpbml0WEV2ZW50KCZ4
RXZlbnQpOworICAgIEdka0V2ZW50S2V5KiBnZGtFdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpLT5n
ZGtFdmVudEtleSgpOworCisgICAgeEV2ZW50LnR5cGUgPSAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50KSA/IDIgOiAzOyAvLyBLZXlQcmVzcy9SZWxlYXNlIGdldCB1
bnNldCBzb21ld2hlcmUKKyAgICB4RXZlbnQueGtleS5yb290ID0gZ2V0Um9vdFdpbmRvdyhtX3Bh
cmVudEZyYW1lLmdldCgpKTsKKyAgICB4RXZlbnQueGtleS5zdWJ3aW5kb3cgPSAwOyAvLyB3ZSBo
YXZlIG5vIGNoaWxkIHdpbmRvdworICAgIHhFdmVudC54a2V5LnRpbWUgPSBldmVudC0+dGltZVN0
YW1wKCk7CisgICAgeEV2ZW50LnhrZXkuc3RhdGUgPSBnZGtFdmVudC0+c3RhdGU7IC8vIEdka01v
ZGlmaWVyVHlwZSBtaXJyb3JzIHhsaWIgc3RhdGUgbWFza3MKKyAgICB4RXZlbnQueGtleS5rZXlj
b2RlID0gZ2RrRXZlbnQtPmhhcmR3YXJlX2tleWNvZGU7CisgICAgeEV2ZW50LnhrZXkuc2FtZV9z
Y3JlZW4gPSB0cnVlOworCisgICAgLy8gTk9URTogQXMgdGhlIFhFdmVudHMgc2VudCB0byB0aGUg
cGx1Zy1pbiBhcmUgc3ludGhlc2l6ZWQgYW5kIHRoZXJlIGlzIG5vdCBhIG5hdGl2ZSB3aW5kb3cK
KyAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwbHVnLWluIHJlY3RhbmdsZSwgc29tZSBvZiB0
aGUgbWVtYmVycyBvZiB0aGUgWEV2ZW50IHN0cnVjdHVyZXMgYXJlIG5vdAorICAgIC8vIHNldCB0
byB0aGVpciBub3JtYWwgWHNlcnZlciB2YWx1ZXMuIGUuZy4gS2V5IGV2ZW50cyBkb24ndCBoYXZl
IGEgcG9zaXRpb24uCisgICAgLy8gc291cmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9y
Zy9lbi9OUEV2ZW50CisgICAgeEV2ZW50LnhrZXkueCA9IDA7CisgICAgeEV2ZW50LnhrZXkueSA9
IDA7CisgICAgeEV2ZW50LnhrZXkueF9yb290ID0gMDsKKyAgICB4RXZlbnQueGtleS55X3Jvb3Qg
PSAwOworCisgICAgaWYgKGRpc3BhdGNoTlBFdmVudCh4RXZlbnQpKQorICAgICAgICBldmVudC0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnB1dEV2
ZW50U3RhdGUoTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgdW5zaWduZWQgc3RhdGUgPSAwOwor
ICAgIGlmIChldmVudC0+Y3RybEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBDb250cm9sTWFzazsK
KyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCisgICAgICAgIHN0YXRlIHw9IFNoaWZ0TWFzazsK
KyAgICBpZiAoZXZlbnQtPmFsdEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBNb2QxTWFzazsKKyAg
ICBpZiAoZXZlbnQtPm1ldGFLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gTW9kNE1hc2s7CisgICAg
cmV0dXJuIHN0YXRlOworfQorCit2b2lkIFBsdWdpblZpZXc6OmluaXRYRXZlbnQoWEV2ZW50KiB4
RXZlbnQpCit7CisgICAgbWVtc2V0KHhFdmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOworCisgICAg
eEV2ZW50LT54YW55LnNlcmlhbCA9IDA7IC8vIHdlIGFyZSB1bmF3YXJlIG9mIHRoZSBsYXN0IHJl
cXVlc3QgcHJvY2Vzc2VkIGJ5IFggU2VydmVyCisgICAgeEV2ZW50LT54YW55LnNlbmRfZXZlbnQg
PSBmYWxzZTsKKyNpZiBQTEFURk9STShHVEspCisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBtX3Bh
cmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Cisg
ICAgeEV2ZW50LT54YW55LmRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShndGtfd2lkZ2V0
X2dldF9kaXNwbGF5KHdpZGdldCkpOworI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIHhFdmVudC0+
eGFueS5kaXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxheSgpOworI2VuZGlmCisKKyAgICAvLyBNb3pp
bGxhIGFsc28gc2VuZHMgTm9uZSBoZXJlIGZvciB3aW5kb3dsZXNzIHBsdWdpbnMuIFNlZSBuc09i
amVjdEZyYW1lLmNwcCBpbiB0aGUgTW96aWxsYSBzb3VyY2VzLgorICAgIC8vIFRoaXMgbWV0aG9k
IGFsc28gc2V0cyB1cCBGb2N1c0luIGFuZCBGb2N1c091dCBldmVudHMgZm9yIHdpbmRvd3MgcGx1
Z2lucywgYnV0IE1vemlsbGEgZG9lc24ndAorICAgIC8vIGV2ZW4gc2VuZCB0aGVzZSB0eXBlcyBv
ZiBldmVudHMgdG8gd2luZG93ZWQgcGx1Z2lucy4gSW4gdGhlIGZ1dHVyZSwgaXQgbWF5IGJlIGdv
b2QgdG8gb25seQorICAgIC8vIHNlbmQgdGhlbSB0byB3aW5kb3dsZXNzIHBsdWdpbnMuCisgICAg
eEV2ZW50LT54YW55LndpbmRvdyA9IE5vbmU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFhCdXR0b25F
dmVudFNwZWNpZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29u
c3QgSW50UG9pbnQmIHBvc3Rab29tUG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCit7CisgICAgWEJ1
dHRvbkV2ZW50JiB4YnV0dG9uID0geEV2ZW50LT54YnV0dG9uOworICAgIHhidXR0b24udHlwZSA9
IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ID8gQnV0dG9uUHJl
c3MgOiBCdXR0b25SZWxlYXNlOworICAgIHhidXR0b24ucm9vdCA9IGdldFJvb3RXaW5kb3cocGFy
ZW50RnJhbWUpOworICAgIHhidXR0b24uc3Vid2luZG93ID0gMDsKKyAgICB4YnV0dG9uLnRpbWUg
PSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeGJ1dHRvbi54ID0gcG9zdFpvb21Qb3MueCgpOwor
ICAgIHhidXR0b24ueSA9IHBvc3Rab29tUG9zLnkoKTsKKyAgICB4YnV0dG9uLnhfcm9vdCA9IGV2
ZW50LT5zY3JlZW5YKCk7CisgICAgeGJ1dHRvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOwor
ICAgIHhidXR0b24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOworICAgIHN3aXRjaCAo
ZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAgICAgIHhidXR0
b24uYnV0dG9uID0gQnV0dG9uMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSaWdodEJ1dHRv
bjoKKyAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24zOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIExlZnRCdXR0b246CisgICAgZGVmYXVsdDoKKyAgICAgICAgeGJ1dHRvbi5idXR0b24g
PSBCdXR0b24xOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgeGJ1dHRvbi5zYW1lX3NjcmVl
biA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRz
KFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9pbnQmIHBvc3Ra
b29tUG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCit7CisgICAgWE1vdGlvbkV2ZW50JiB4bW90aW9u
ID0geEV2ZW50LT54bW90aW9uOworICAgIHhtb3Rpb24udHlwZSA9IE1vdGlvbk5vdGlmeTsKKyAg
ICB4bW90aW9uLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKKyAgICB4bW90aW9u
LnN1YndpbmRvdyA9IDA7CisgICAgeG1vdGlvbi50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOwor
ICAgIHhtb3Rpb24ueCA9IHBvc3Rab29tUG9zLngoKTsKKyAgICB4bW90aW9uLnkgPSBwb3N0Wm9v
bVBvcy55KCk7CisgICAgeG1vdGlvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOworICAgIHht
b3Rpb24ueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKKyAgICB4bW90aW9uLnN0YXRlID0gaW5w
dXRFdmVudFN0YXRlKGV2ZW50KTsKKyAgICB4bW90aW9uLmlzX2hpbnQgPSBOb3RpZnlOb3JtYWw7
CisgICAgeG1vdGlvbi5zYW1lX3NjcmVlbiA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFhD
cm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2
ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKK3sK
KyAgICBYQ3Jvc3NpbmdFdmVudCYgeGNyb3NzaW5nID0geEV2ZW50LT54Y3Jvc3Npbmc7CisgICAg
eGNyb3NzaW5nLnR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJF
dmVudCA/IEVudGVyTm90aWZ5IDogTGVhdmVOb3RpZnk7CisgICAgeGNyb3NzaW5nLnJvb3QgPSBn
ZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKKyAgICB4Y3Jvc3Npbmcuc3Vid2luZG93ID0gMDsK
KyAgICB4Y3Jvc3NpbmcudGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4Y3Jvc3Npbmcu
eCA9IHBvc3Rab29tUG9zLnkoKTsKKyAgICB4Y3Jvc3NpbmcueSA9IHBvc3Rab29tUG9zLngoKTsK
KyAgICB4Y3Jvc3NpbmcueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4Y3Jvc3Npbmcu
eV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKKyAgICB4Y3Jvc3Npbmcuc3RhdGUgPSBpbnB1dEV2
ZW50U3RhdGUoZXZlbnQpOworICAgIHhjcm9zc2luZy5tb2RlID0gTm90aWZ5Tm9ybWFsOworICAg
IHhjcm9zc2luZy5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOworICAgIHhjcm9zc2luZy5zYW1l
X3NjcmVlbiA9IHRydWU7CisgICAgeGNyb3NzaW5nLmZvY3VzID0gZmFsc2U7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKKworICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMg
IT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoZXZlbnQtPmJ1dHRvbigpID09IFJpZ2h0QnV0dG9uICYmIG1fcGx1Z2luLT5xdWlya3Mo
KS5jb250YWlucyhQbHVnaW5RdWlya0lnbm9yZVJpZ2h0Q2xpY2tJbldpbmRvd2xlc3NNb2RlKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFt
ZS0+cGFnZSgpKQorICAgICAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2
ZSh0cnVlKTsKKyAgICAgICAgZm9jdXNQbHVnaW5FbGVtZW50KCk7CisgICAgfQorCisgICAgTlBF
dmVudCB4RXZlbnQ7CisgICAgaW5pdFhFdmVudCgmeEV2ZW50KTsKKworICAgIEludFBvaW50IHBv
c3Rab29tUG9zID0gcm91bmRlZEludFBvaW50KG1fZWxlbWVudC0+cmVuZGVyZXIoKS0+YWJzb2x1
dGVUb0xvY2FsKGV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpKTsKKworICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCB8fCBldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCisgICAgICAgIHNldFhCdXR0b25FdmVudFNwZWNp
ZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZS5nZXQo
KSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3Zl
RXZlbnQpCisgICAgICAgIHNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2
ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZS5nZXQoKSk7CisgICAgZWxzZSBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgeworICAgICAgICBzZXRYQ3Jvc3NpbmdF
dmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRG
cmFtZS5nZXQoKSk7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAvLyBUaGlzIGlzIGEgd29y
ay1hcm91bmQgZm9yIHBsdWdpbnMgd2hpY2ggY2hhbmdlIHRoZSBjdXJzb3IuIFdoZW4gdGhhdCBo
YXBwZW5zIHdlCisgICAgICAgIC8vIGdldCBvdXQgb2Ygc3luYyB3aXRoIEdESyBzb21laG93LiBS
ZXNldHRpbmcgdGhlIGN1cnNvciBoZXJlIHNlZW1zIHRvIGZpeCB0aGUgaXNzdWUuCisgICAgICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQorICAgICAg
ICAgICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3BhcmVu
dEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpLCAwKTsK
KyNlbmRpZgorICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGlzcGF0Y2hO
UEV2ZW50KHhFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCgpCit7CisgICAgaWYgKCFtX2lz
U3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5w
RXZlbnQpOworCisgICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7
CisgICAgZXZlbnQudHlwZSA9IDk7IC8vIEZvY3VzSW4gZ2V0cyB1bnNldCBzb21ld2hlcmUKKyAg
ICBldmVudC5tb2RlID0gTm90aWZ5Tm9ybWFsOworICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURl
dGFpbE5vbmU7CisKKyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCB8
fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOwor
CisgICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZl
bnQudHlwZSA9IDEwOyAvLyBGb2N1c091dCBnZXRzIHVuc2V0IHNvbWV3aGVyZQorICAgIGV2ZW50
Lm1vZGUgPSBOb3RpZnlOb3JtYWw7CisgICAgZXZlbnQuZGV0YWlsID0gTm90aWZ5RGV0YWlsTm9u
ZTsKKworICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50
KHBhcmVudCk7CisKKyAgICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQoreworICAgIGlmICgh
bV9pc1dpbmRvd2VkKQorICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRl
ZCB8fCAhcGFyZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBwbHVnaW4gZGlkbid0IGxvYWQgc3VjZXNz
ZnVsbHksIG5vIHBvaW50IGluIGNhbGxpbmcgc2V0d2luZG93CisgICAgaWYgKG1fc3RhdHVzICE9
IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gT24gVW5peCwgb25seSBjYWxsIHBsdWdpbidzIHNldHdpbmRvdyBpZiBpdCdzIGZ1bGwtcGFn
ZSBvciB3aW5kb3dlZAorICAgIGlmIChtX21vZGUgIT0gTlBfRlVMTCAmJiBtX21vZGUgIT0gTlBf
RU1CRUQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENoZWNrIGlmIHRoZSBwbGF0Zm9ybVBs
dWdpbldpZGdldCBzdGlsbCBleGlzdHMKKyAgICBpZiAobV9pc1dpbmRvd2VkICYmICFwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jbGlwUmVjdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSWYgd2lkdGggb3IgaGVpZ2h0IGFyZSBudWxsLCBzZXQg
dGhlIGNsaXBSZWN0IHRvIG51bGwsCisgICAgICAgIC8vIGluZGljYXRpbmcgdGhhdCB0aGUgcGx1
Z2luIGlzIG5vdCB2aXNpYmxlL3Njcm9sbGVkIG91dC4KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IDA7Cisg
ICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5ib3R0b20gPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENsaXBwaW5nIHJl
Y3RhbmdsZSBvZiB0aGUgcGx1Zy1pbjsgdGhlIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnQgY29ybmVy
IG9mIHRoZSBkcmF3YWJsZSBvciB3aW5kb3cuIAorICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0
LmxlZnQgPSBtX25wV2luZG93LnggKyBtX2NsaXBSZWN0LngoKTsKKyAgICAgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC50b3AgPSBtX25wV2luZG93LnkgKyBtX2NsaXBSZWN0LnkoKTsKKyAgICAgICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fbnBXaW5kb3cueCArIG1fY2xpcFJlY3QueCgp
ICsgbV9jbGlwUmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRv
bSA9IG1fbnBXaW5kb3cueSArIG1fY2xpcFJlY3QueSgpICsgbV9jbGlwUmVjdC5oZWlnaHQoKTsK
KyAgICB9CisKKyAgICAvLyBGTEFTSCBXT1JLQVJPVU5EOiBPbmx5IHNldCBpbml0aWFsbHkuIE11
bHRpcGxlIGNhbGxzIHRvCisgICAgLy8gc2V0TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRv
IGNyYXNoIGluIHdpbmRvd2VkIG1vZGUuCisgICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtzKCkuY29u
dGFpbnMoUGx1Z2luUXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVUaGFuT25jZSkgfHwgIW1faXNX
aW5kb3dlZAorICAgICAgICB8fCBtX25wV2luZG93LndpZHRoID09IHN0YXRpY19jYXN0PHVpbnQz
Ml90PigtMSkgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0x
KSkgeworICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7Cisg
ICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOworICAgIH0K
KworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7Cisg
ICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBs
dWdpblZpZXcoMCk7CisKKyNpZiBQTEFURk9STShHVEspCisgICAgaWYgKCFtX2lzV2luZG93ZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEd0a1h0QmluIHdpbGwgY2FsbCBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gaXQgaGVyZS4KKyAgICBpZiAo
IW1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRC
SU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVj
dC55KCkpOworICAgICAgICBndGtfeHRiaW5fcmVzaXplKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9kZWxheWVkQWxsb2NhdGlvbiA9IG1fd2luZG93UmVjdDsK
KyAgICB1cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOworI2VuZGlmCit9CisKKyNpZiBQ
TEFURk9STShHVEspCit2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRD
bGlwKCkKK3sKKyAgICAvLyBJZiB0aGUgd2luZG93IGhhcyBub3QgYmVlbiBlbWJlZGRlZCB5ZXQg
KHRoZSBwbHVnIGFkZGVkKSwgd2UgZGVsYXkgc2V0dGluZyBpdHMgYWxsb2NhdGlvbiB1bnRpbCAK
KyAgICAvLyB0aGF0IHBvaW50LiBUaGlzIGZpeGVzIGlzc3VlcyB3aXRoIHNvbWUgSmF2YSBwbHVn
aW4gaW5zdGFuY2VzIG5vdCByZW5kZXJpbmcgaW1tZWRpYXRlbHkuCisgICAgaWYgKCFtX3BsdWdB
ZGRlZCB8fCBtX2RlbGF5ZWRBbGxvY2F0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpOworICAgIGlm
IChndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh3aWRnZXQpKSB7CisgICAgICAgIEdka1JlY3Rhbmds
ZSBjbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICAg
ICAgR2RrUmVnaW9uKiBjbGlwUmVnaW9uID0gZ2RrX3JlZ2lvbl9yZWN0YW5nbGUoJmNsaXBSZWN0
KTsKKyAgICAgICAgZ2RrX3dpbmRvd19zaGFwZV9jb21iaW5lX3JlZ2lvbihndGtfd2lkZ2V0X2dl
dF93aW5kb3cod2lkZ2V0KSwgY2xpcFJlZ2lvbiwgMCwgMCk7CisgICAgICAgIGdka19yZWdpb25f
ZGVzdHJveShjbGlwUmVnaW9uKTsKKyNlbHNlCisgICAgICAgIGNhaXJvX3JlZ2lvbl90KiBjbGlw
UmVnaW9uID0gY2Fpcm9fcmVnaW9uX2NyZWF0ZV9yZWN0YW5nbGUoJmNsaXBSZWN0KTsKKyAgICAg
ICAgZ2RrX3dpbmRvd19zaGFwZV9jb21iaW5lX3JlZ2lvbihndGtfd2lkZ2V0X2dldF93aW5kb3co
d2lkZ2V0KSwgY2xpcFJlZ2lvbiwgMCwgMCk7CisgICAgICAgIGNhaXJvX3JlZ2lvbl9kZXN0cm95
KGNsaXBSZWdpb24pOworI2VuZGlmCisgICAgfQorCisgICAgLy8gVGhlIGdvYWwgaXMgdG8gdHJ5
IHRvIGF2b2lkIGNhbGxpbmcgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlIGluIHRoZSBXZWJWaWV3
J3MKKyAgICAvLyBzaXplLWFsbG9jYXRlIG1ldGhvZC4gSXQgYmxvY2tzIHRoZSBtYWluIGxvb3Ag
YW5kIGlmIHRoZSB3aWRnZXQgaXMgb2Zmc2NyZWVuCisgICAgLy8gb3IgaGFzbid0IG1vdmVkIGl0
IGlzbid0IHJlcXVpcmVkLgorCisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGFsbG9j
YXRpb24gaGFzIG5vdCBjaGFuZ2VkLgorICAgIEd0a0FsbG9jYXRpb24gY3VycmVudEFsbG9jYXRp
b247CisgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZjdXJyZW50QWxsb2Nh
dGlvbik7CisgICAgaWYgKGN1cnJlbnRBbGxvY2F0aW9uID09IG1fZGVsYXllZEFsbG9jYXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGJvdGggdGhl
IG9sZCBhbmQgdGhlIG5ldyBhbGxvY2F0aW9ucyBhcmUgb3V0c2lkZSB0aGUgZnJhbWUuCisgICAg
SW50UmVjdCBjdXJyZW50QWxsb2NhdGlvblJlY3QoY3VycmVudEFsbG9jYXRpb24pOworICAgIGN1
cnJlbnRBbGxvY2F0aW9uUmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOworICAgIGlmIChjdXJy
ZW50QWxsb2NhdGlvblJlY3QuaXNFbXB0eSgpICYmIG1fY2xpcFJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh3aWRnZXQpLCAi
ZGVsYXllZC1hbGxvY2F0aW9uIiwgJm1fZGVsYXllZEFsbG9jYXRpb24pOworfQorI2VuZGlmCisK
K3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAg
aWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAg
IFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKKworI2lmIFBMQVRGT1JNKEdUSykK
KyAgICBpZiAoaXNTZWxmVmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAg
ICAgICAgaWYgKHZpc2libGUpCisgICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3cocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGd0a193aWRnZXRfaGlk
ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKyAgICB9CisjZW5kaWYKK30KKworTlBFcnJvciBQ
bHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBvdXRwdXRCdWZmZXIs
IHVpbnQzMl90IGZpbGVuYW1lTGVuZ3RoLCBjb25zdCBjaGFyKiBmaWxlbmFtZUJ1ZmZlcikKK3sK
KyAgICAvLyBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW55IGRvY3VtZW50YXRpb24gYWJvdXQg
d2hhdCBlbmNvZGluZyB0aGUgZmlsZW5hbWUKKyAgICAvLyBpcyBpbiwgYnV0IG1vc3QgcG9ydHMg
c2VlbSB0byBhc3N1bWUgVVRGLTggaGVyZSBhbmQgdGhlIHRlc3QgcGx1Z2luIGlzIGRlZmluaXRl
bHkKKyAgICAvLyBzZW5kaW5nIHRoZSBwYXRoIGluIFVURi04IGVuY29kaW5nLgorICAgIENTdHJp
bmcgZmlsZW5hbWUoZmlsZW5hbWVCdWZmZXIsIGZpbGVuYW1lTGVuZ3RoKTsKKworICAgIEdSZWZQ
dHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfY29tbWFuZGxpbmVfYXJn
KGZpbGVuYW1lLmRhdGEoKSkpOworICAgIGlmIChnX2ZpbGVfcXVlcnlfZmlsZV90eXBlKGZpbGUu
Z2V0KCksIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsIDApICE9IEdfRklMRV9UWVBFX1JFR1VMQVIp
CisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIEdSZWZQdHI8R0Zp
bGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhmaWxlLmdldCgp
LAorICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCisgICAgICAgIEdfRklM
RV9RVUVSWV9JTkZPX05PTkUsCisgICAgICAgIDAsIDApKTsKKyAgICBpZiAoIWZpbGVJbmZvKQor
ICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBHUmVmUHRyPEdGaWxl
SW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9yZWFkKGZpbGUuZ2V0
KCksIDAsIDApKTsKKyAgICBpZiAoIWlucHV0U3RyZWFtKQorICAgICAgICByZXR1cm4gTlBFUlJf
RklMRV9OT1RfRk9VTkQ7CisKKyAgICBvdXRwdXRCdWZmZXIucmVzaXplKGdfZmlsZV9pbmZvX2dl
dF9zaXplKGZpbGVJbmZvLmdldCgpKSk7CisgICAgZ3NpemUgYnl0ZXNSZWFkID0gMDsKKyAgICBp
ZiAoIWdfaW5wdXRfc3RyZWFtX3JlYWRfYWxsKEdfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdl
dCgpKSwKKyAgICAgICAgb3V0cHV0QnVmZmVyLmRhdGEoKSwgb3V0cHV0QnVmZmVyLnNpemUoKSwg
JmJ5dGVzUmVhZCwgMCwgMCkpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsK
KworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0
Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBF
cnJvciogcmVzdWx0KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZU
b29sa2l0OgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90
Kj4odmFsdWUpID0gMjsKKyNlbHNlCisgICAgICAgICpzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHZh
bHVlKSA9IDA7CisjZW5kaWYKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKKyNp
ZiBQTEFURk9STShHVEspCisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0
cnVlOworI2Vsc2UKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNl
OworI2VuZGlmCisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6CisgICAgICAg
ICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworICAgICAgICAqcmVzdWx0ID0g
TlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WU3Vw
cG9ydHNXaW5kb3dsZXNzOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0g
dHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7
CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGNhc2UgTlBOVnhEaXNwbGF5OgorICAgICAgICBpZiAo
bV9uZWVkc1hFbWJlZCkKKyAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9ICh2b2lkICopR0RL
X0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9ICh2b2lkICopR1RLX1hUQklOKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGRpc3BsYXk7CisgICAgICAgICpyZXN1bHQg
PSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZ4
dEFwcENvbnRleHQ6CisgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAg
Kih2b2lkICoqKXZhbHVlID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoR1RLX1hUQklO
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGRpc3BsYXkpOworCisgICAgICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgR2RrV2luZG93KiBnZGtX
aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0
V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsKKyAgICAgICAgR2RrV2luZG93KiB0b3Bs
ZXZlbFdpbmRvdyA9IGdka193aW5kb3dfZ2V0X3RvcGxldmVsKGdka1dpbmRvdyk7CisgICAgICAg
IGlmICghdG9wbGV2ZWxXaW5kb3cpIHsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5F
UklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
KnN0YXRpY19jYXN0PFdpbmRvdyo+KHZhbHVlKSA9IEdES19XSU5ET1dfWFdJTkRPVyh0b3BsZXZl
bFdpbmRvdyk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIGNhc2UgTlBOVnhEaXNw
bGF5OgorICAgICAgICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSBnZXRQbHVnaW5EaXNw
bGF5KCk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6CisgICAgICAgICpyZXN1bHQgPSBO
UEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBO
VldpbmRvd05QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkgewor
ICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRP
YmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsK
KworICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFz
IGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4v
bnBydW50aW1lLmh0bWw+CisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAg
ICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOworCisgICAgICAgICpz
dGF0aWNfY2FzdDx2b2lkKio+KHZhbHVlKSA9IHdpbmRvd1NjcmlwdE9iamVjdDsKKworICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworICAgICAgICBpZiAobV9p
c0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklD
X0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBO
UE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICBpZiAobV9lbGVtZW50
LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFn
KSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgIHBsdWdp
blNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50
KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQg
dG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9y
Zy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgIGlmIChwbHVnaW5TY3Jp
cHRPYmplY3QpCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmpl
Y3QpOworCisgICAgICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVlKSA9IHBsdWdpblNjcmlw
dE9iamVjdDsKKworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAg
ICAgIEV2YXMqIGV2YXMgPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmV2YXMoKTsKKyAgICAgICAg
aWYgKCFldmFzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEVjb3JlX0V2
YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7CisgICAgICAg
ICpzdGF0aWNfY2FzdDxYSUQqPih2YWx1ZSkgPSBzdGF0aWNfY2FzdDxXaW5kb3c+KGVjb3JlX2V2
YXNfd2luZG93X2dldChlY29yZUV2YXMpKTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VS
Uk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZUb29sa2l0
OgorICAgICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVx
dWlyZXNHdGtUb29sS2l0KSkgeworICAgICAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4o
dmFsdWUpID0gMjsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyNp
ZiBQTEFURk9STShHVEspCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBndGtfd2lk
Z2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCBy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2lu
UmVjdChyZWN0KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3Qq
IHJlY3QpCit7CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3As
IHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKKyAg
ICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbikKK3sKKyAgICAvLyBUT0RPOiBvcHRpbWl6ZQor
ICAgIGludmFsaWRhdGUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCit7
CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIGd0a193
aWRnZXRfcXVldWVfZHJhdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKyAgICBlbHNlCisgICAg
ICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5k
b3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOworI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworI2VuZGlmCit9CisKKyNpZiBQTEFURk9STShHVEspCitzdGF0aWMgdm9pZCBnZXRWaXN1YWxB
bmRDb2xvcm1hcChpbnQgZGVwdGgsIFZpc3VhbCoqIHZpc3VhbCwgQ29sb3JtYXAqIGNvbG9ybWFw
KQoreworICAgICp2aXN1YWwgPSAwOworICAgICpjb2xvcm1hcCA9IDA7CisKKyAgICBEaXNwbGF5
KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQo
KSk7CisgICAgaW50IHJtYWosIHJtaW47CisgICAgaWYgKGRlcHRoID09IDMyICYmICghWFJlbmRl
clF1ZXJ5VmVyc2lvbihkaXNwbGF5LCAmcm1haiwgJnJtaW4pIHx8IChybWFqID09IDAgJiYgcm1p
biA8IDUpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgWFZpc3VhbEluZm8gdGVtcGw7CisgICAg
dGVtcGwuc2NyZWVuICA9IGdka19zY3JlZW5fZ2V0X251bWJlcihnZGtfc2NyZWVuX2dldF9kZWZh
dWx0KCkpOworICAgIHRlbXBsLmRlcHRoICAgPSBkZXB0aDsKKyAgICB0ZW1wbC5jX2NsYXNzID0g
VHJ1ZUNvbG9yOworICAgIGludCBuVmlzdWFsczsKKyAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5m
byA9IFhHZXRWaXN1YWxJbmZvKGRpc3BsYXksIFZpc3VhbFNjcmVlbk1hc2sgfCBWaXN1YWxEZXB0
aE1hc2sgfCBWaXN1YWxDbGFzc01hc2ssICZ0ZW1wbCwgJm5WaXN1YWxzKTsKKworICAgIGlmICgh
blZpc3VhbHMpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkZXB0aCA9PSAzMikgeworICAg
ICAgICBmb3IgKGludCBpZHggPSAwOyBpZHggPCBuVmlzdWFsczsgKytpZHgpIHsKKyAgICAgICAg
ICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChk
aXNwbGF5LCB2aXN1YWxJbmZvW2lkeF0udmlzdWFsKTsKKyAgICAgICAgICAgIGlmIChmb3JtYXQt
PnR5cGUgPT0gUGljdFR5cGVEaXJlY3QgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrKSB7Cisg
ICAgICAgICAgICAgICAgKnZpc3VhbCA9IHZpc3VhbEluZm9baWR4XS52aXN1YWw7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgKnZpc3VhbCA9IHZpc3VhbEluZm9bMF0udmlzdWFsOworCisgICAgWEZyZWUodmlzdWFs
SW5mbyk7CisKKyAgICBpZiAoKnZpc3VhbCkKKyAgICAgICAgKmNvbG9ybWFwID0gWENyZWF0ZUNv
bG9ybWFwKGRpc3BsYXksIEdES19ST09UX1dJTkRPVygpLCAqdmlzdWFsLCBBbGxvY05vbmUpOwor
fQorCitnYm9vbGVhbiBQbHVnaW5WaWV3OjpwbHVnUmVtb3ZlZENhbGxiYWNrKEd0a1NvY2tldCog
c29ja2V0LCBQbHVnaW5WaWV3KiB2aWV3KQoreworICAgIHZpZXctPm1fcGx1Z0FkZGVkID0gZmFs
c2U7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGx1Z0FkZGVkQ2Fs
bGJhY2soR3RrU29ja2V0KiBzb2NrZXQsIFBsdWdpblZpZXcqIHZpZXcpCit7CisgICAgQVNTRVJU
KHNvY2tldCk7CisgICAgQVNTRVJUKHZpZXcpOworICAgIHZpZXctPm1fcGx1Z0FkZGVkID0gdHJ1
ZTsKKyAgICB2aWV3LT51cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOworfQorI2VuZGlm
CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCit7CisgICAgQVNTRVJUKG1faXNT
dGFydGVkKTsKKyAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vz
c2Z1bGx5KTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsK
KyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwor
ICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQ
VnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CisgICAgICAgIHNldENhbGxpbmdQ
bHVnaW4oZmFsc2UpOworICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygw
KTsKKyAgICB9CisKKyNpZiBQTEFURk9STShHVEspCisgICAgaWYgKG1faXNXaW5kb3dlZCkgewor
ICAgICAgICBHdGtXaWRnZXQqIHBhZ2VDbGllbnQgPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhv
c3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisgICAgICAgIGlmIChtX25lZWRzWEVt
YmVkKSB7CisgICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IGlzIG5vdCBhbmNob3JlZCB0aGUg
c3RhcnR1cCBwcm9jZXNzIHdpbGwKKyAgICAgICAgICAgIC8vIGZhaWwgbWlzZXJhYmx5IGZvciBY
RW1iZWQgcGx1Z2lucyBhIGJpdCBsYXRlciBvbiB3aGVuCisgICAgICAgICAgICAvLyB3ZSB0cnkg
dG8gZ2V0IHRoZSBJRCBvZiBvdXIgd2luZG93IChzaW5jZSByZWFsaXplIHdpbGwKKyAgICAgICAg
ICAgIC8vIGZhaWwpLCBzbyBsZXQncyBqdXN0IGFib3J0IGhlcmUuCisgICAgICAgICAgICBpZiAo
IWd0a193aWRnZXRfZ2V0X3BhcmVudChwYWdlQ2xpZW50KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIG1fcGx1Z0FkZGVkID0gZmFsc2U7CisgICAgICAgICAg
ICBzZXRQbGF0Zm9ybVdpZGdldChndGtfc29ja2V0X25ldygpKTsKKyAgICAgICAgICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIocGFnZUNsaWVudCksIHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCkpOworICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLCAicGx1Zy1hZGRlZCIsIEdfQ0FMTEJBQ0soUGx1Z2luVmlldzo6cGx1Z0FkZGVkQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgInBsdWctcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soUGx1Z2luVmlldzo6cGx1Z1JlbW92
ZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNldFBsYXRm
b3JtV2lkZ2V0KGd0a194dGJpbl9uZXcocGFnZUNsaWVudCwgMCkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOworICAgICAgICBtX3BsdWdpbkRpc3BsYXkgPSBn
ZXRQbHVnaW5EaXNwbGF5KCk7CisgICAgfQorCisgICAgc2hvdygpOworCisgICAgICAgIE5QU2V0
V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzID0gbmV3IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3Qo
KTsKKyAgICAgICAgd3MtPnR5cGUgPSAwOworCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAg
ICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisgICAgICAgIGlmICht
X25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUod2lkZ2V0KTsK
KyAgICAgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Z3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tFVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSkpOwor
ICAgICAgICAgICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lk
Z2V0KTsKKyAgICAgICAgICAgIHdzLT5kaXNwbGF5ID0gR0RLX1dJTkRPV19YRElTUExBWSh3aW5k
b3cpOworICAgICAgICAgICAgd3MtPnZpc3VhbCA9IEdES19WSVNVQUxfWFZJU1VBTChnZGtfd2lu
ZG93X2dldF92aXN1YWwod2luZG93KSk7CisgICAgICAgICAgICB3cy0+ZGVwdGggPSBnZGtfdmlz
dWFsX2dldF9kZXB0aChnZGtfd2luZG93X2dldF92aXN1YWwod2luZG93KSk7CisgICAgICAgICAg
ICB3cy0+Y29sb3JtYXAgPSBYQ3JlYXRlQ29sb3JtYXAod3MtPmRpc3BsYXksIEdES19ST09UX1dJ
TkRPVygpLCB3cy0+dmlzdWFsLCBBbGxvY05vbmUpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigoR1RLX1hU
QklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dHdpbmRvdykpOworICAgICAgICAgICAgd3Mt
PmRpc3BsYXkgPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0ZGlzcGxheTsK
KyAgICAgICAgICAgIHdzLT52aXN1YWwgPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSktPnh0Y2xpZW50Lnh0dmlzdWFsOworICAgICAgICAgICAgd3MtPmRlcHRoID0gR1RLX1hUQklO
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGRlcHRoOworICAgICAgICAgICAg
d3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVu
dC54dGNvbG9ybWFwOworICAgICAgICB9CisgICAgICAgIFhGbHVzaCh3cy0+ZGlzcGxheSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2Fi
bGU7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/CisKKyAgICAg
ICAgR2RrU2NyZWVuKiBnc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOworICAgICAg
ICBHZGtWaXN1YWwqIGd2aXN1YWwgPSBnZGtfc2NyZWVuX2dldF9zeXN0ZW1fdmlzdWFsKGdzY3Jl
ZW4pOworCisgICAgICAgIGlmIChnZGtfdmlzdWFsX2dldF9kZXB0aChndmlzdWFsKSA9PSAzMiB8
fCAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0
U2NyZWVuRGVwdGgpKSB7CisgICAgICAgICAgICBnZXRWaXN1YWxBbmRDb2xvcm1hcCgzMiwgJm1f
dmlzdWFsLCAmbV9jb2xvcm1hcCk7CisgICAgICAgICAgICB3cy0+ZGVwdGggPSAzMjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghbV92aXN1YWwpIHsKKyAgICAgICAgICAgIGdldFZpc3VhbEFu
ZENvbG9ybWFwKGdka192aXN1YWxfZ2V0X2RlcHRoKGd2aXN1YWwpLCAmbV92aXN1YWwsICZtX2Nv
bG9ybWFwKTsKKyAgICAgICAgICAgIHdzLT5kZXB0aCA9IGdka192aXN1YWxfZ2V0X2RlcHRoKGd2
aXN1YWwpOworICAgICAgICB9CisKKyAgICAgICAgd3MtPmRpc3BsYXkgPSBHREtfRElTUExBWV9Y
RElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICAgICAgd3MtPnZpc3VhbCA9
IG1fdmlzdWFsOworICAgICAgICB3cy0+Y29sb3JtYXAgPSBtX2NvbG9ybWFwOworCisgICAgICAg
IG1fbnBXaW5kb3cueCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IDA7CisgICAgICAgIG1f
bnBXaW5kb3cud2lkdGggPSAtMTsKKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKKyAg
ICB9CisjZWxzZQorICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOworICAgIG1fcGx1Z2luRGlzcGxh
eSA9IGdldFBsdWdpbkRpc3BsYXkoKTsKKworICAgIHNob3coKTsKKworICAgIE5QU2V0V2luZG93
Q2FsbGJhY2tTdHJ1Y3QqIHdzID0gbmV3IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKKyAg
ICB3cy0+dHlwZSA9IDA7CisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3
YWJsZTsKKyAgICBtX25wV2luZG93LndpbmRvdyA9IDA7IC8vIE5vdCB1c2VkPworCisgICAgU2Ny
ZWVuKiBzY3JlZW4gPSBzdGF0aWNfY2FzdDxTY3JlZW4qPihlY29yZV94X2RlZmF1bHRfc2NyZWVu
X2dldCgpKTsKKyAgICBtX3Zpc3VhbCA9IHN0YXRpY19jYXN0PFZpc3VhbCo+KGVjb3JlX3hfZGVm
YXVsdF92aXN1YWxfZ2V0KG1fcGx1Z2luRGlzcGxheSwgc2NyZWVuKSk7CisgICAgbV9jb2xvcm1h
cCA9IGVjb3JlX3hfZGVmYXVsdF9jb2xvcm1hcF9nZXQobV9wbHVnaW5EaXNwbGF5LCBzY3JlZW4p
OworCisgICAgd3MtPmRlcHRoID0gZWNvcmVfeF9kZWZhdWx0X2RlcHRoX2dldChtX3BsdWdpbkRp
c3BsYXksIHNjcmVlbik7CisgICAgd3MtPmRpc3BsYXkgPSBtX3BsdWdpbkRpc3BsYXk7CisgICAg
d3MtPnZpc3VhbCA9IG1fdmlzdWFsOworICAgIHdzLT5jb2xvcm1hcCA9IG1fY29sb3JtYXA7CisK
KyAgICBtX25wV2luZG93LnggPSAwOworICAgIG1fbnBXaW5kb3cueSA9IDA7CisgICAgbV9ucFdp
bmRvdy53aWR0aCA9IC0xOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gLTE7CisjZW5kaWYKKwor
ICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzOworCisgICAgLy8gVE9ETyByZW1vdmUgaW4gZmF2
b3Igb2YgbnVsbCBldmVudHMsIGxpa2UgbWFjIHBvcnQ/CisgICAgaWYgKCEobV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkKKyAg
ICAgICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7IC8vIHdhczogc2V0TlBXaW5kb3dJZk5lZWRlZCgp
LCBidXQgdGhpcyBkb2Vzbid0IHByb2R1Y2UgMHgwIHJlY3RzIGF0IGZpcnN0IGdvCisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3koKQorewor
ICAgIGlmIChtX2RyYXdhYmxlKSB7CisgICAgICAgIFhGcmVlUGl4bWFwKGdldFBsdWdpbkRpc3Bs
YXkoKSwgbV9kcmF3YWJsZSk7CisgICAgICAgIG1fZHJhd2FibGUgPSAwOworICAgIH0KKworI2lm
IFBMQVRGT1JNKEdUSykKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHBsYXRmb3JtV2lkZ2V0KCk7
CisgICAgaWYgKHdpZGdldCkgeworICAgICAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRn
ZXRfZ2V0X3BhcmVudCh3aWRnZXQpOworICAgICAgICBBU1NFUlQocGFyZW50KTsKKyAgICAgICAg
Z3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYXJlbnQpLCB3aWRnZXQpOworICAg
IH0KKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzc1MDY1NS4uNTg4OTMxMCAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDEzLTAyLTI3ICBNYXJpdXN6IEdyemVnb3JjenlrICA8bWFyaXVzei5nQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFtFRkxdW0dUS10gU2hhcmUgcGx1Z2luJ3MgaW1wbGVtZW50YXRp
b24gYmV0d2VlbiBFRkwgYW5kIEd0ayBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQ6
IEFkZCBlY29yZV94IGluY2x1ZGVzIGFuZCBsaWJyYXJpZXMuCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcDogQWRkIGVjb3JlX3hfaW5pdC9zaHV0ZG93biBk
byBEdW1wUmVuZGVyZXJUcmVlIHRvIHN1cHBvcnQgcGx1Z2lucyBpbml0aWFsaXphdGlvbi4KKyAg
ICAgICAgKGluaXRFZmwpOgorICAgICAgICAoc2h1dGRvd25FZmwpOgorCiAyMDEzLTAyLTI1ICBT
aGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTQzODk1LgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZWZsL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtl
TGlzdHMudHh0CmluZGV4IDY3ZjkwNWQuLjZkOGM1ZTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9l
ZmwvQ01ha2VMaXN0cy50eHQKQEAgLTMzLDYgKzMzLDcgQEAgc2V0KER1bXBSZW5kZXJUcmVlX0xJ
QlJBUklFUwogICAgICR7RUNPUkVfRVZBU19MSUJSQVJJRVN9CiAgICAgJHtFQ09SRV9GSUxFX0xJ
QlJBUklFU30KICAgICAke0VDT1JFX0lOUFVUX0xJQlJBUklFU30KKyAgICAke0VDT1JFX1hfTElC
UkFSSUVTfQogICAgICR7RURKRV9MSUJSQVJJRVN9CiAgICAgJHtFSU5BX0xJQlJBUklFU30KICAg
ICAke0VPX0xJQlJBUklFU30KQEAgLTEwNCw2ICsxMDUsNyBAQCBzZXQoRHVtcFJlbmRlclRyZWVf
SU5DTFVERV9ESVJFQ1RPUklFUwogICAgICR7RUNPUkVfRVZBU19JTkNMVURFX0RJUlN9CiAgICAg
JHtFQ09SRV9GSUxFX0lOQ0xVREVfRElSU30KICAgICAke0VDT1JFX0lOUFVUX0lOQ0xVREVfRElS
U30KKyAgICAke0VDT1JFX1hfSU5DTFVERV9ESVJTfQogICAgICR7RURKRV9JTkNMVURFX0RJUlN9
CiAgICAgJHtFSU5BX0lOQ0xVREVfRElSU30KICAgICAke0VPX0lOQ0xVREVfRElSU30KZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IDZkZTJkNGEuLjJj
MWFmNDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJl
ZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcApA
QCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPEVjb3JlLmg+CiAjaW5jbHVkZSA8RWNvcmVfRXZh
cy5oPgogI2luY2x1ZGUgPEVjb3JlX0ZpbGUuaD4KKyNpbmNsdWRlIDxFY29yZV9YLmg+CiAjaW5j
bHVkZSA8RWRqZS5oPgogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxmb250Y29uZmlnL2Zv
bnRjb25maWcuaD4KQEAgLTM3NywxMSArMzc4LDIwIEBAIHN0YXRpYyBib29sIGluaXRFZmwoKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgaWYgKCFlY29yZV94X2luaXQoMCkp
IHsKKyAgICAgICAgZWRqZV9zaHV0ZG93bigpOworICAgICAgICBlY29yZV9maWxlX3NodXRkb3du
KCk7CisgICAgICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKKyAgICAgICAgZXdrX3NodXRkb3du
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogc3RhdGljIHZvaWQgc2h1dGRvd25FZmwoKQogeworICAgIGVjb3JlX3hfc2h1dGRvd24oKTsK
ICAgICBld2tfc2h1dGRvd24oKTsKICAgICBlZGplX3NodXRkb3duKCk7CiAgICAgZWNvcmVfZmls
ZV9zaHV0ZG93bigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190511</attachid>
            <date>2013-02-27 06:43:27 -0800</date>
            <delta_ts>2013-04-15 09:02:17 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>bug70592.patch</filename>
            <type>text/plain</type>
            <size>84703</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlM2ZmZGI3Li5kZjM5OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTMtMDItMjcgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5j
b20+CisKKyAgICAgICAgW0VGTF1bR1RLXSBTaGFyZSBwbHVnaW4ncyBpbXBsZW1lbnRhdGlvbiBi
ZXR3ZWVuIEVGTCBhbmQgR3RrIHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzA1OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNZXJnZSBQbHVnaW5WaWV3R3RrLmNwcCBhbmQgUGx1Z2luVmlld0Vm
bC5jcHAgdG8gUGx1Z2luVmlld1gxMS5jcHAuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTog
QWRkIGluY2x1ZGUgcGF0aCB0byBndGsyeHRiaW4uaCBoZWFkZXIgZmlsZS4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOiBDaGFuZ2UgUGx1Z2luVmlld0d0ay5jcHAgdG8gUGx1Z2luVmll
d1gxMS5jcHAgc291cmNlLgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBDaGFuZ2UgUGx1
Z2luVmlld0VmbC5jcHAgdG8gUGx1Z2luVmlld0VmbC5jcHAgc291cmNlLgorICAgICAgICAqIHBs
dWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsdWdpbnMv
eDExL1BsdWdpblZpZXdYMTEuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luVmlld0d0ay5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRSb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBsdWdpbkRpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldEZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGlkZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlucHV0RXZl
bnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppbml0WEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpoYW5kbGVGb2N1c0luRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
aGFuZGxlRm9jdXNPdXRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQ
YXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlV2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmludmFsaWRhdGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9y
Y2VSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmlzdWFsQW5kQ29sb3JtYXApOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGx1Z1JlbW92ZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisKIDIwMTMtMDItMjUgIEFuZHJlYXMgS2xpbmcgIDxh
a2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBhbW91bnQgb2YgY29kZSB0aGF0IGlu
Y2x1ZGVzIFN0eWxlUHJvcGVydHlTZXQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA2NWJkMDNj
Li5kYmUwZmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtODUsNiArODUsNyBAQCB3ZWJjb3Jl
X2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L3RyYW5zY29kZXIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbiBc
CiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGx1Z2lucyBcCisJLUkkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvd2luIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcgXAogCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KaW5kZXggNGRhYzU4ZS4uYTE1ZDEyZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC02MjI4LDggKzYyMjgsOCBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblZpZXdHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAor
CVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL3gxMS9QbHVnaW5WaWV3WDExLmNwcAogaWYgVVNFX09QRU5HTAogd2ViY29yZWd0a19z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENv
bnRleHQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggZDFkNDYzZi4uMzdhNDJi
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEyLDYgKzEyLDcgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lZmwi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsdWdpbnMvZWZsIgorICAgICIke1dFQkNPUkVfRElSfS9w
bHVnaW5zL3gxMSIKICkKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCkBAIC0xODUsNyAr
MTg2LDcgQEAgaWYgKEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgICAgICBwbHVnaW5z
L1BsdWdpblZpZXcuY3BwCiAKICAgICAgICAgcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5j
cHAKLSAgICAgICAgcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKKyAgICAgICAgcGx1Z2lu
cy94MTEvUGx1Z2luVmlld1gxMS5jcHAKICAgICApCiBlbHNlICgpCiAgICAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9Q
bHVnaW5WaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdF
ZmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzdhMDc0Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMzQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4
IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQotICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKLSAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgotI2luY2x1ZGUgIkhvc3RX
aW5kb3cuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2lt
cGwuaCIKLSNpbmNsdWRlICJydW50aW1lL0pTTG9jay5oIgotI2luY2x1ZGUgInJ1bnRpbWUvT3Bl
cmF0aW9ucy5oIgotI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KLSNpbmNsdWRlIDxFY29yZV9YLmg+
Ci0jaW5jbHVkZSA8RXZhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7Ci0KLWJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZl
bnQmIGV2ZW50KQotewotICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1
Z2luKHRydWUpOwotCi0gICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwotCi0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0gICAgcmV0dXJu
IGFjY2VwdGVkOwotfQotCi0jaWYgZGVmaW5lZChYUF9VTklYKQotdm9pZCBQbHVnaW5WaWV3Ojpo
YW5kbGVGb2N1c0luRXZlbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLSNlbmRpZgotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5
Ym9hcmRFdmVudCopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIE5QRXZlbnQg
eEV2ZW50OwotCi0jaWYgZGVmaW5lZChYUF9VTklYKQotICAgIGNvbnN0IEludFJlY3QgcmVjdCA9
IHBhcmVudCgpLT5jb250ZW50c1RvU2NyZWVuKEludFJlY3QoMCwgMCwgZXZlbnQtPm9mZnNldFgo
KSwgZXZlbnQtPm9mZnNldFkoKSkpOwotICAgIGNvbnN0IGludCBldmVudFggPSByZWN0LndpZHRo
KCk7Ci0gICAgY29uc3QgaW50IGV2ZW50WSA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50Ci0gICAgICAgICAgICB8fCBl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50Ci0gICAgICAgICAgICB8
fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgewotICAgICAg
ICB4RXZlbnQudHlwZSA9IE1vdGlvbk5vdGlmeTsKLSAgICAgICAgeEV2ZW50Lnhtb3Rpb24ueCA9
IGV2ZW50WDsKLSAgICAgICAgeEV2ZW50Lnhtb3Rpb24ueSA9IGV2ZW50WTsKLSAgICB9IGVsc2Ug
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7Ci0gICAg
ICAgIHhFdmVudC50eXBlID0gQnV0dG9uUHJlc3M7Ci0gICAgICAgIHhFdmVudC54YnV0dG9uLngg
PSBldmVudFg7Ci0gICAgICAgIHhFdmVudC54YnV0dG9uLnkgPSBldmVudFk7Ci0gICAgICAgIHhF
dmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0b24oKSArIDE7IC8vIERPTSBNb3VzZUV2
ZW50IGNvdW50cyBmcm9tIDAsIGFuZCBYQnV0dG9uRXZlbnQgZnJvbSAxLgotICAgIH0gZWxzZSBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSB7Ci0gICAgICAg
IHhFdmVudC50eXBlID0gQnV0dG9uUmVsZWFzZTsKLSAgICAgICAgeEV2ZW50LnhidXR0b24ueCA9
IGV2ZW50WDsKLSAgICAgICAgeEV2ZW50LnhidXR0b24ueSA9IGV2ZW50WTsKLSAgICAgICAgeEV2
ZW50LnhidXR0b24uYnV0dG9uID0gZXZlbnQtPmJ1dHRvbigpICsgMTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KHhFdmVudCkp
Ci0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotfQotCi12b2lkIFBsdWdpblZp
ZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCi17Ci0gICAgaWYgKGZvY3Vz
ZWQpCi0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9lbGVt
ZW50KTsKLQotICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6c2hvdygpCi17Ci0gICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7Ci0KLSAgICBXaWRnZXQ6
OnNob3coKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkKLXsKLSAgICBzZXRTZWxmVmlz
aWJsZShmYWxzZSk7Ci0KLSAgICBXaWRnZXQ6OmhpZGUoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihj
b250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmll
dyogcGFyZW50KQotewotICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7Ci0KLSAgICBpZiAo
cGFyZW50KQotICAgICAgICBpbml0KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5k
b3dSZWN0KGNvbnN0IEludFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCi17Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCi17Ci0gICAgV2lkZ2V0OjpzZXRQ
YXJlbnRWaXNpYmxlKHZpc2libGUpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBv
c3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFy
KiBidWYpCi17Ci0gICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKLQotICAgIGlmIChmaWxl
bmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAg
ICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoNyk7Ci0jZWxzZQotICAgICAgICBmaWxl
bmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKLSNlbmRpZgotCi0gICAgbG9uZyBsb25nIHNp
emU7Ci0gICAgaWYgKCFnZXRGaWxlU2l6ZShmaWxlbmFtZSwgc2l6ZSkpCi0gICAgICAgIHJldHVy
biBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3Blbihm
aWxlbmFtZS51dGY4KCkuZGF0YSgpLCAiciIpOwotICAgIGlmICghZmlsZUhhbmRsZSkKLSAgICAg
ICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgYnVmZmVyLnJlc2l6ZShzaXpl
KTsKLSAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgc2l6ZSwgZmls
ZUhhbmRsZSk7Ci0KLSAgICBmY2xvc2UoZmlsZUhhbmRsZSk7Ci0KLSAgICBpZiAoYnl0ZXNSZWFk
IDw9IDApCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVl
U3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0
KQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlZUb29sa2l0OgotICAg
ICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkgPSAwOwotICAgICAgICAqcmVzdWx0
ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5W
U3VwcG9ydHNYRW1iZWRCb29sOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUp
ID0gZmFsc2U7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6Ci0gICAgICAg
ICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0g
TlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5WU3Vw
cG9ydHNXaW5kb3dsZXNzOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0g
ZmFsc2U7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci1ib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCi17Ci0gICAgaWYgKCF2YWx1ZSB8fCAhcmVz
dWx0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0g
ICAgY2FzZSBOUE5WeERpc3BsYXk6Ci0gICAgICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVl
KSA9IHN0YXRpY19jYXN0PERpc3BsYXkqPihlY29yZV94X2Rpc3BsYXlfZ2V0KCkpOwotICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
Y2FzZSBOUE5WeHRBcHBDb250ZXh0OgotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19F
UlJPUjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVj
dDogewotICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKLSAgICAgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJl
bnRGcmFtZS0+c2NyaXB0KCktPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7Ci0KLSAgICAgICAgLy8g
UmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVy
ZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1s
PgotICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQotICAgICAgICAgICAgX05QTl9SZXRh
aW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKLQotICAgICAgICAqc3RhdGljX2Nhc3Q8dm9p
ZCoqPih2YWx1ZSkgPSB3aW5kb3dTY3JpcHRPYmplY3Q7Ci0KLSAgICAgICAgKnJlc3VsdCA9IE5Q
RVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjYXNlIE5Q
TlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKLSAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1
c2VkKSB7Ci0gICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgTlBPYmplY3QqIHBsdWdp
blNjcmlwdE9iamVjdCA9IDA7Ci0KLSAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShh
cHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50
LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0
KCk7Ci0KLSAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVk
LCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1
Z2luL25wcnVudGltZS5odG1sPgotICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQotICAg
ICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKLQotICAgICAg
ICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSBwbHVnaW5TY3JpcHRPYmplY3Q7Ci0KLSAg
ICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewotICAgICAgICBFdmFzKiBldmFz
ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ldmFzKCk7Ci0gICAgICAgIGlmICghZXZhcykKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBFY29yZV9FdmFzKiBlY29yZUV2YXMg
PSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOwotICAgICAgICAqc3RhdGljX2Nhc3Q8
WElEKj4odmFsdWUpID0gc3RhdGljX2Nhc3Q8V2luZG93PihlY29yZV9ldmFzX3dpbmRvd19nZXQo
ZWNvcmVFdmFzKSk7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WVG9vbGtpdDoKLSAgICAgICAgaWYg
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtp
dCkpIHsKLSAgICAgICAgICAgICpzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9IDI7Ci0g
ICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlk
YXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGludmFsaWRhdGVXaW5kb3dsZXNz
UGx1Z2luUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChO
UFJlY3QqIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0KSB7Ci0gICAgICAgIGludmFsaWRhdGUoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludmFsaWRhdGVSZWN0KEludFJlY3QocmVj
dC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRv
bSAtIHJlY3QtPnRvcCkpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24o
TlBSZWdpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
Ojpmb3JjZVJlZHJhdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBQbHVn
aW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAg
IEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOwotCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpwbGF0Zm9ybURlc3Ryb3koKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiZTQ1ZDA1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODk1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEtha2FpLCBJbmMu
IDxicmlhbkBrYWthaS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLQotI2lu
Y2x1ZGUgIkJyaWRnZUpTQy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRS
ZXF1ZXN0LmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCi0jaW5jbHVkZSAi
SG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0jaW5jbHVkZSAiUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNwYXRp
YWxOYXZpZ2F0aW9uLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNpbmNsdWRlIDxydW50
aW1lL0pTQ0pTVmFsdWUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotCi0jaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKLSNpbmNsdWRlIDxnZGtjb25maWcuaD4KLSNlbmRpZgotI2luY2x1
ZGUgPGd0ay9ndGsuaD4KLQotI2RlZmluZSBTdHJpbmcgWHRTdHJpbmdUeXBlCi0jaW5jbHVkZSAi
UmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlICJndGsyeHRiaW4uaCIKLSNkZWZpbmUgQm9vbCBpbnQg
Ly8gdGhpcyBnb3QgdW5kZWZpbmVkIHNvbWV3aGVyZQotI2RlZmluZSBTdGF0dXMgaW50IC8vIGRp
dHRvCi0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgotI2luY2x1ZGUgPGNhaXJv
LXhsaWIuaD4KLSNpbmNsdWRlIDxnZGsvZ2RreC5oPgotCi11c2luZyBKU0M6OkV4ZWNTdGF0ZTsK
LXVzaW5nIEpTQzo6SW50ZXJwcmV0ZXI7Ci11c2luZyBKU0M6OkpTTG9jazsKLXVzaW5nIEpTQzo6
SlNPYmplY3Q7Ci0KLXVzaW5nIHN0ZDo6bWluOwotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWJvb2wg
UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQotewotICAgIC8vIHNh
bml0eSBjaGVjawotICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOwotCi0gICAgYm9vbCBhY2NlcHRlZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKLQotICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwotICAgIHJldHVybiBh
Y2NlcHRlZDsKLX0KLQotc3RhdGljIFdpbmRvdyBnZXRSb290V2luZG93KEZyYW1lKiBwYXJlbnRG
cmFtZSkKLXsKLSAgICBHdGtXaWRnZXQqIHBhcmVudFdpZGdldCA9IHBhcmVudEZyYW1lLT52aWV3
KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgR2RrU2NyZWVuKiBn
c2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHBhcmVudFdpZGdldCk7Ci0gICAgcmV0dXJu
IEdES19XSU5ET1dfWFdJTkRPVyhnZGtfc2NyZWVuX2dldF9yb290X3dpbmRvdyhnc2NyZWVuKSk7
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKLXsKLSAgICBpZiAo
IXBhcmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocGFyZW50KCktPmlzRnJh
bWVWaWV3KCkpOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVW
aWV3Kj4ocGFyZW50KCkpOwotCi0gICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dS
ZWN0OwotICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OwotCi0gICAgbV93aW5k
b3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCku
bG9jYXRpb24oKSksIGZyYW1lUmVjdCgpLnNpemUoKSk7Ci0gICAgbV9jbGlwUmVjdCA9IHdpbmRv
d0NsaXBSZWN0KCk7Ci0gICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93
aW5kb3dSZWN0LnkoKSk7Ci0KLSAgICBpZiAobV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3Qg
JiYgbV9jbGlwUmVjdCA9PSBvbGRDbGlwUmVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFtX2lzV2luZG93ZWQgJiYgIW1fd2luZG93UmVjdC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19k
aXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgICAgICBpZiAobV9kcmF3YWJsZSkKLSAgICAgICAg
ICAgIFhGcmVlUGl4bWFwKGRpc3BsYXksIG1fZHJhd2FibGUpOwotICAgICAgICAgICAgCi0gICAg
ICAgIG1fZHJhd2FibGUgPSBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksIGdldFJvb3RXaW5kb3cobV9w
YXJlbnRGcmFtZS5nZXQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
d2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCopbV9ucFdp
bmRvdy53c19pbmZvKS0+ZGVwdGgpOwotICAgICAgICBYU3luYyhkaXNwbGF5LCBmYWxzZSk7IC8v
IG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXJ2ZXIga25vd3MgYWJvdXQgdGhlIERyYXdhYmxlCi0gICAg
fQotCi0gICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNl
dEZvY3VzKGJvb2wgZm9jdXNlZCkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSA9PSBwbGF0Zm9ybVdpZGdldCgpKTsKLSAgICBpZiAoZm9jdXNlZCAmJiBwbGF0Zm9ybVdpZGdl
dCgpKQotICAgICAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMocGxhdGZvcm1XaWRnZXQoKSk7Ci0g
ICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzaG93
KCkKLXsKLSAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBwbGF0Zm9ybVdpZGdl
dCgpKTsKLSAgICBXaWRnZXQ6OnNob3coKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkK
LXsKLSAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBwbGF0Zm9ybVdpZGdldCgp
KTsKLSAgICBXaWRnZXQ6OmhpZGUoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFt
X2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkp
IHsKLSAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKLQotICAgIGlm
IChtX2lzV2luZG93ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9kcmF3YWJsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hE
SVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgIGNvbnN0IGJvb2wgc3luY1gg
PSBtX3BsdWdpbkRpc3BsYXkgJiYgbV9wbHVnaW5EaXNwbGF5ICE9IGRpc3BsYXk7Ci0KLSAgICBJ
bnRSZWN0IGV4cG9zZWRSZWN0KHJlY3QpOwotICAgIGV4cG9zZWRSZWN0LmludGVyc2VjdChmcmFt
ZVJlY3QoKSk7Ci0gICAgZXhwb3NlZFJlY3QubW92ZSgtZnJhbWVSZWN0KCkueCgpLCAtZnJhbWVS
ZWN0KCkueSgpKTsKLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGRyYXdhYmxlU3VyZmFj
ZSA9IGFkb3B0UmVmKGNhaXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUoZGlzcGxheSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RyYXdhYmxl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fdmlzdWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fd2luZG93UmVjdC53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd2luZG93UmVjdC5oZWlnaHQoKSkpOwot
Ci0gICAgaWYgKG1faXNUcmFuc3BhcmVudCkgewotICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgMzIg
Yml0IGRyYXdhYmxlIGFuZCB0aGUgcGx1Z2luIHdhbnRzIHRyYW5zcGFyZW5jeSwKLSAgICAgICAg
Ly8gd2UnbGwgY2xlYXIgdGhlIGV4cG9zZWQgYXJlYSB0byB0cmFuc3BhcmVudCBmaXJzdC4gIE90
aGVyd2lzZSwKLSAgICAgICAgLy8gd2UnZCBlbmQgdXAgd2l0aCBqdW5rIGluIHRoZXJlIGZyb20g
dGhlIGxhc3QgcGFpbnQsIG9yLCB3b3JzZSwKLSAgICAgICAgLy8gdW5pbml0aWFsaXplZCBkYXRh
LgotICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoZHJh
d2FibGVTdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAgICAgaWYgKCEoY2Fpcm9fc3VyZmFjZV9nZXRf
Y29udGVudChkcmF3YWJsZVN1cmZhY2UuZ2V0KCkpICYgQ0FJUk9fQ09OVEVOVF9BTFBIQSkpIHsK
LSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZmFrZSBpdCB3aGVuIHdlIGRvbid0IGhhdmUgYW4g
YWxwaGEgY2hhbm5lbCBvbiBvdXIKLSAgICAgICAgICAgIC8vIHBpeG1hcC4gIElmIHRoYXQncyBu
b3QgcG9zc2libGUsIGF0IGxlYXN0IGNsZWFyIHRoZSB3aW5kb3cgdG8KLSAgICAgICAgICAgIC8v
IGF2b2lkIGRyYXdpbmcgYXJ0aWZhY3RzLgotCi0gICAgICAgICAgICAvLyBUaGlzIFdvdWxkIG5v
dCB3b3JrIHdpdGhvdXQgZG91YmxlIGJ1ZmZlcmluZywgYnV0IHdlIGFsd2F5cyB1c2UgaXQuCi0g
ICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIGNhaXJvX2dldF9n
cm91cF90YXJnZXQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dS
ZWN0LnkoKSk7Ci0gICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJP
X09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2Fpcm9fc2V0
X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0KLSAgICAgICAgY2Fp
cm9fcmVjdGFuZ2xlKGNyLmdldCgpLCBleHBvc2VkUmVjdC54KCksIGV4cG9zZWRSZWN0LnkoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0
LmhlaWdodCgpKTsKLSAgICAgICAgY2Fpcm9fZmlsbChjci5nZXQoKSk7Ci0gICAgfQotCi0gICAg
WEV2ZW50IHhldmVudDsKLSAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOwot
ICAgIFhHcmFwaGljc0V4cG9zZUV2ZW50JiBleHBvc2VFdmVudCA9IHhldmVudC54Z3JhcGhpY3Nl
eHBvc2U7Ci0gICAgZXhwb3NlRXZlbnQudHlwZSA9IEdyYXBoaWNzRXhwb3NlOwotICAgIGV4cG9z
ZUV2ZW50LmRpc3BsYXkgPSBkaXNwbGF5OwotICAgIGV4cG9zZUV2ZW50LmRyYXdhYmxlID0gbV9k
cmF3YWJsZTsKLSAgICBleHBvc2VFdmVudC54ID0gZXhwb3NlZFJlY3QueCgpOwotICAgIGV4cG9z
ZUV2ZW50LnkgPSBleHBvc2VkUmVjdC55KCk7Ci0gICAgZXhwb3NlRXZlbnQud2lkdGggPSBleHBv
c2VkUmVjdC54KCkgKyBleHBvc2VkUmVjdC53aWR0aCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5r
cyB3aWR0aCBpcyB0aGUgcmlnaHQgaW4gdHJhbnNwYXJlbnQgbW9kZQotICAgIGV4cG9zZUV2ZW50
LmhlaWdodCA9IGV4cG9zZWRSZWN0LnkoKSArIGV4cG9zZWRSZWN0LmhlaWdodCgpOyAvLyBmbGFz
aCBidWc/IGl0IHRoaW5rcyBoZWlnaHQgaXMgdGhlIGJvdHRvbSBpbiB0cmFuc3BhcmVudCBtb2Rl
Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQoeGV2ZW50KTsKLQotICAgIGlmIChzeW5jWCkKLSAgICAg
ICAgWFN5bmMobV9wbHVnaW5EaXNwbGF5LCBmYWxzZSk7IC8vIHN5bmMgY2hhbmdlcyBieSBwbHVn
aW4KLQotICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7
Ci0gICAgY2Fpcm9fc2F2ZShjcik7Ci0KLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3Is
IGRyYXdhYmxlU3VyZmFjZS5nZXQoKSwgZnJhbWVSZWN0KCkueCgpLCBmcmFtZVJlY3QoKS55KCkp
OwotCi0gICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLAotICAgICAgICAgICAgICAgICAgICBmcmFtZVJl
Y3QoKS54KCkgKyBleHBvc2VkUmVjdC54KCksIGZyYW1lUmVjdCgpLnkoKSArIGV4cG9zZWRSZWN0
LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJl
Y3QuaGVpZ2h0KCkpOwotICAgIGNhaXJvX2NsaXAoY3IpOwotCi0gICAgaWYgKG1faXNUcmFuc3Bh
cmVudCkKLSAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9PVkVS
KTsKLSAgICBlbHNlCi0gICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFU
T1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWludChjcik7Ci0KLSAgICBjYWlyb19yZXN0b3JlKGNy
KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZl
bnQqIGV2ZW50KQotewotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotCi0gICAgaWYgKCFtX2lz
U3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQgJiYgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgTlBFdmVudCB4RXZlbnQ7Ci0gICAgaW5pdFhFdmVudCgm
eEV2ZW50KTsKLSAgICBHZGtFdmVudEtleSogZ2RrRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKS0+
Z2RrRXZlbnRLZXkoKTsKLQotICAgIHhFdmVudC50eXBlID0gKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCkgPyAyIDogMzsgLy8gS2V5UHJlc3MvUmVsZWFzZSBnZXQg
dW5zZXQgc29tZXdoZXJlCi0gICAgeEV2ZW50LnhrZXkucm9vdCA9IGdldFJvb3RXaW5kb3cobV9w
YXJlbnRGcmFtZS5nZXQoKSk7Ci0gICAgeEV2ZW50LnhrZXkuc3Vid2luZG93ID0gMDsgLy8gd2Ug
aGF2ZSBubyBjaGlsZCB3aW5kb3cKLSAgICB4RXZlbnQueGtleS50aW1lID0gZXZlbnQtPnRpbWVT
dGFtcCgpOwotICAgIHhFdmVudC54a2V5LnN0YXRlID0gZ2RrRXZlbnQtPnN0YXRlOyAvLyBHZGtN
b2RpZmllclR5cGUgbWlycm9ycyB4bGliIHN0YXRlIG1hc2tzCi0gICAgeEV2ZW50LnhrZXkua2V5
Y29kZSA9IGdka0V2ZW50LT5oYXJkd2FyZV9rZXljb2RlOwotICAgIHhFdmVudC54a2V5LnNhbWVf
c2NyZWVuID0gdHJ1ZTsKLQotICAgIC8vIE5PVEU6IEFzIHRoZSBYRXZlbnRzIHNlbnQgdG8gdGhl
IHBsdWctaW4gYXJlIHN5bnRoZXNpemVkIGFuZCB0aGVyZSBpcyBub3QgYSBuYXRpdmUgd2luZG93
Ci0gICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgcGx1Zy1pbiByZWN0YW5nbGUsIHNvbWUgb2Yg
dGhlIG1lbWJlcnMgb2YgdGhlIFhFdmVudCBzdHJ1Y3R1cmVzIGFyZSBub3QKLSAgICAvLyBzZXQg
dG8gdGhlaXIgbm9ybWFsIFhzZXJ2ZXIgdmFsdWVzLiBlLmcuIEtleSBldmVudHMgZG9uJ3QgaGF2
ZSBhIHBvc2l0aW9uLgotICAgIC8vIHNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5v
cmcvZW4vTlBFdmVudAotICAgIHhFdmVudC54a2V5LnggPSAwOwotICAgIHhFdmVudC54a2V5Lnkg
PSAwOwotICAgIHhFdmVudC54a2V5Lnhfcm9vdCA9IDA7Ci0gICAgeEV2ZW50LnhrZXkueV9yb290
ID0gMDsKLQotICAgIGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKLSAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRFdmVu
dFN0YXRlKE1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIHVuc2lnbmVkIGludCBzdGF0ZSA9IDA7
Ci0gICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCi0gICAgICAgIHN0YXRlIHw9IENvbnRyb2xNYXNr
OwotICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKLSAgICAgICAgc3RhdGUgfD0gU2hpZnRNYXNr
OwotICAgIGlmIChldmVudC0+YWx0S2V5KCkpCi0gICAgICAgIHN0YXRlIHw9IE1vZDFNYXNrOwot
ICAgIGlmIChldmVudC0+bWV0YUtleSgpKQotICAgICAgICBzdGF0ZSB8PSBNb2Q0TWFzazsKLSAg
ICByZXR1cm4gc3RhdGU7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW5pdFhFdmVudChYRXZlbnQq
IHhFdmVudCkKLXsKLSAgICBtZW1zZXQoeEV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7Ci0KLSAg
ICB4RXZlbnQtPnhhbnkuc2VyaWFsID0gMDsgLy8gd2UgYXJlIHVuYXdhcmUgb2YgdGhlIGxhc3Qg
cmVxdWVzdCBwcm9jZXNzZWQgYnkgWCBTZXJ2ZXIKLSAgICB4RXZlbnQtPnhhbnkuc2VuZF9ldmVu
dCA9IGZhbHNlOwotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgIHhFdmVudC0+eGFueS5k
aXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRn
ZXQpKTsKLQotICAgIC8vIE1vemlsbGEgYWxzbyBzZW5kcyBOb25lIGhlcmUgZm9yIHdpbmRvd2xl
c3MgcGx1Z2lucy4gU2VlIG5zT2JqZWN0RnJhbWUuY3BwIGluIHRoZSBNb3ppbGxhIHNvdXJjZXMu
Ci0gICAgLy8gVGhpcyBtZXRob2QgYWxzbyBzZXRzIHVwIEZvY3VzSW4gYW5kIEZvY3VzT3V0IGV2
ZW50cyBmb3Igd2luZG93cyBwbHVnaW5zLCBidXQgTW96aWxsYSBkb2Vzbid0Ci0gICAgLy8gZXZl
biBzZW5kIHRoZXNlIHR5cGVzIG9mIGV2ZW50cyB0byB3aW5kb3dlZCBwbHVnaW5zLiBJbiB0aGUg
ZnV0dXJlLCBpdCBtYXkgYmUgZ29vZCB0byBvbmx5Ci0gICAgLy8gc2VuZCB0aGVtIHRvIHdpbmRv
d2xlc3MgcGx1Z2lucy4KLSAgICB4RXZlbnQtPnhhbnkud2luZG93ID0gTm9uZTsKLX0KLQotc3Rh
dGljIHZvaWQgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1v
dXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJl
bnRGcmFtZSkKLXsKLSAgICBYQnV0dG9uRXZlbnQmIHhidXR0b24gPSB4RXZlbnQtPnhidXR0b247
Ci0gICAgeGJ1dHRvbi50eXBlID0gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQgPyBCdXR0b25QcmVzcyA6IEJ1dHRvblJlbGVhc2U7Ci0gICAgeGJ1dHRvbi5yb290
ID0gZ2V0Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7Ci0gICAgeGJ1dHRvbi5zdWJ3aW5kb3cgPSAw
OwotICAgIHhidXR0b24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKLSAgICB4YnV0dG9uLngg
PSBwb3N0Wm9vbVBvcy54KCk7Ci0gICAgeGJ1dHRvbi55ID0gcG9zdFpvb21Qb3MueSgpOwotICAg
IHhidXR0b24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKLSAgICB4YnV0dG9uLnlfcm9vdCA9
IGV2ZW50LT5zY3JlZW5ZKCk7Ci0gICAgeGJ1dHRvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShl
dmVudCk7Ci0gICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKLSAgICBjYXNlIE1pZGRsZUJ1
dHRvbjoKLSAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24yOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFJpZ2h0QnV0dG9uOgotICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjM7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGVmdEJ1dHRvbjoKLSAgICBkZWZhdWx0OgotICAg
ICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjE7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICB4YnV0dG9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgc2V0WE1vdGlv
bkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBj
b25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKLXsKLSAgICBY
TW90aW9uRXZlbnQmIHhtb3Rpb24gPSB4RXZlbnQtPnhtb3Rpb247Ci0gICAgeG1vdGlvbi50eXBl
ID0gTW90aW9uTm90aWZ5OwotICAgIHhtb3Rpb24ucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50
RnJhbWUpOwotICAgIHhtb3Rpb24uc3Vid2luZG93ID0gMDsKLSAgICB4bW90aW9uLnRpbWUgPSBl
dmVudC0+dGltZVN0YW1wKCk7Ci0gICAgeG1vdGlvbi54ID0gcG9zdFpvb21Qb3MueCgpOwotICAg
IHhtb3Rpb24ueSA9IHBvc3Rab29tUG9zLnkoKTsKLSAgICB4bW90aW9uLnhfcm9vdCA9IGV2ZW50
LT5zY3JlZW5YKCk7Ci0gICAgeG1vdGlvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOwotICAg
IHhtb3Rpb24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOwotICAgIHhtb3Rpb24uaXNf
aGludCA9IE5vdGlmeU5vcm1hbDsKLSAgICB4bW90aW9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKLX0K
LQotc3RhdGljIHZvaWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhF
dmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywgRnJh
bWUqIHBhcmVudEZyYW1lKQotewotICAgIFhDcm9zc2luZ0V2ZW50JiB4Y3Jvc3NpbmcgPSB4RXZl
bnQtPnhjcm9zc2luZzsKLSAgICB4Y3Jvc3NpbmcudHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50ID8gRW50ZXJOb3RpZnkgOiBMZWF2ZU5vdGlmeTsKLSAg
ICB4Y3Jvc3Npbmcucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUpOwotICAgIHhjcm9z
c2luZy5zdWJ3aW5kb3cgPSAwOwotICAgIHhjcm9zc2luZy50aW1lID0gZXZlbnQtPnRpbWVTdGFt
cCgpOwotICAgIHhjcm9zc2luZy54ID0gcG9zdFpvb21Qb3MueSgpOwotICAgIHhjcm9zc2luZy55
ID0gcG9zdFpvb21Qb3MueCgpOwotICAgIHhjcm9zc2luZy54X3Jvb3QgPSBldmVudC0+c2NyZWVu
WCgpOwotICAgIHhjcm9zc2luZy55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOwotICAgIHhjcm9z
c2luZy5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7Ci0gICAgeGNyb3NzaW5nLm1vZGUg
PSBOb3RpZnlOb3JtYWw7Ci0gICAgeGNyb3NzaW5nLmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7
Ci0gICAgeGNyb3NzaW5nLnNhbWVfc2NyZWVuID0gdHJ1ZTsKLSAgICB4Y3Jvc3NpbmcuZm9jdXMg
PSBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZl
bnQqIGV2ZW50KQotewotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwotCi0gICAgaWYgKCFtX2lz
U3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChldmVudC0+YnV0dG9uKCkgPT0gUmlnaHRCdXR0b24g
JiYgbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrSWdub3JlUmlnaHRDbGlj
a0luV2luZG93bGVzc01vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKLSAgICAgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICBwYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS0+c2V0QWN0aXZlKHRydWUpOwotICAgICAgICBmb2N1c1BsdWdpbkVsZW1lbnQo
KTsKLSAgICB9Ci0KLSAgICBOUEV2ZW50IHhFdmVudDsKLSAgICBpbml0WEV2ZW50KCZ4RXZlbnQp
OwotCi0gICAgSW50UG9pbnQgcG9zdFpvb21Qb3MgPSByb3VuZGVkSW50UG9pbnQobV9lbGVtZW50
LT5yZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwoZXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSkp
OwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKLSAgICAgICAg
c2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9z
LCBtX3BhcmVudEZyYW1lLmdldCgpKTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKLSAgICAgICAgc2V0WE1vdGlvbkV2ZW50U3BlY2lm
aWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVudEZyYW1lLmdldCgp
KTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2
ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7Ci0g
ICAgICAgIHNldFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBv
c3Rab29tUG9zLCBtX3BhcmVudEZyYW1lLmdldCgpKTsKLQotICAgICAgICAvLyBUaGlzIGlzIGEg
d29yay1hcm91bmQgZm9yIHBsdWdpbnMgd2hpY2ggY2hhbmdlIHRoZSBjdXJzb3IuIFdoZW4gdGhh
dCBoYXBwZW5zIHdlCi0gICAgICAgIC8vIGdldCBvdXQgb2Ygc3luYyB3aXRoIEdESyBzb21laG93
LiBSZXNldHRpbmcgdGhlIGN1cnNvciBoZXJlIHNlZW1zIHRvIGZpeCB0aGUgaXNzdWUuCi0gICAg
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQotICAg
ICAgICAgICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3Bh
cmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpLCAw
KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZGlzcGF0Y2hO
UEV2ZW50KHhFdmVudCkpCi0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotfQot
Ci12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCgpCi17Ci0gICAgaWYgKCFtX2lz
U3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFhFdmVudCBucEV2ZW50OwotICAgIGluaXRYRXZlbnQoJm5w
RXZlbnQpOwotCi0gICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7
Ci0gICAgZXZlbnQudHlwZSA9IDk7IC8vIEZvY3VzSW4gZ2V0cyB1bnNldCBzb21ld2hlcmUKLSAg
ICBldmVudC5tb2RlID0gTm90aWZ5Tm9ybWFsOwotICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURl
dGFpbE5vbmU7Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCgpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCB8
fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFhFdmVudCBucEV2ZW50OwotICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOwot
Ci0gICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7Ci0gICAgZXZl
bnQudHlwZSA9IDEwOyAvLyBGb2N1c091dCBnZXRzIHVuc2V0IHNvbWV3aGVyZQotICAgIGV2ZW50
Lm1vZGUgPSBOb3RpZnlOb3JtYWw7Ci0gICAgZXZlbnQuZGV0YWlsID0gTm90aWZ5RGV0YWlsTm9u
ZTsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQotewotICAgIFdpZGdldDo6c2V0UGFyZW50
KHBhcmVudCk7Ci0KLSAgICBpZiAocGFyZW50KQotICAgICAgICBpbml0KCk7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQotewotICAgIGlmICgh
bV9pc1dpbmRvd2VkKQotICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRl
ZCB8fCAhcGFyZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBwbHVnaW4gZGlkbid0IGxvYWQgc3VjZXNz
ZnVsbHksIG5vIHBvaW50IGluIGNhbGxpbmcgc2V0d2luZG93Ci0gICAgaWYgKG1fc3RhdHVzICE9
IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gT24gVW5peCwgb25seSBjYWxsIHBsdWdpbidzIHNldHdpbmRvdyBpZiBpdCdzIGZ1bGwtcGFn
ZSBvciB3aW5kb3dlZAotICAgIGlmIChtX21vZGUgIT0gTlBfRlVMTCAmJiBtX21vZGUgIT0gTlBf
RU1CRUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENoZWNrIGlmIHRoZSBwbGF0Zm9ybVBs
dWdpbldpZGdldCBzdGlsbCBleGlzdHMKLSAgICBpZiAobV9pc1dpbmRvd2VkICYmICFwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jbGlwUmVjdC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSWYgd2lkdGggb3IgaGVpZ2h0IGFyZSBudWxsLCBzZXQg
dGhlIGNsaXBSZWN0IHRvIG51bGwsCi0gICAgICAgIC8vIGluZGljYXRpbmcgdGhhdCB0aGUgcGx1
Z2luIGlzIG5vdCB2aXNpYmxlL3Njcm9sbGVkIG91dC4KLSAgICAgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IDA7Ci0g
ICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKLSAgICAgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5ib3R0b20gPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIENsaXBwaW5nIHJl
Y3RhbmdsZSBvZiB0aGUgcGx1Zy1pbjsgdGhlIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnQgY29ybmVy
IG9mIHRoZSBkcmF3YWJsZSBvciB3aW5kb3cuIAotICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0
LmxlZnQgPSBtX25wV2luZG93LnggKyBtX2NsaXBSZWN0LngoKTsKLSAgICAgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC50b3AgPSBtX25wV2luZG93LnkgKyBtX2NsaXBSZWN0LnkoKTsKLSAgICAgICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fbnBXaW5kb3cueCArIG1fY2xpcFJlY3QueCgp
ICsgbV9jbGlwUmVjdC53aWR0aCgpOwotICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRv
bSA9IG1fbnBXaW5kb3cueSArIG1fY2xpcFJlY3QueSgpICsgbV9jbGlwUmVjdC5oZWlnaHQoKTsK
LSAgICB9Ci0KLSAgICAvLyBGTEFTSCBXT1JLQVJPVU5EOiBPbmx5IHNldCBpbml0aWFsbHkuIE11
bHRpcGxlIGNhbGxzIHRvCi0gICAgLy8gc2V0TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRv
IGNyYXNoIGluIHdpbmRvd2VkIG1vZGUuCi0gICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtzKCkuY29u
dGFpbnMoUGx1Z2luUXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVUaGFuT25jZSkgfHwgIW1faXNX
aW5kb3dlZAotICAgICAgICB8fCBtX25wV2luZG93LndpZHRoID09IHN0YXRpY19jYXN0PHVpbnQz
Ml90PigtMSkgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0x
KSkgewotICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7Ci0g
ICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOwotICAgIH0K
LQotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwotICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7Ci0g
ICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBs
dWdpblZpZXcoMCk7Ci0KLSAgICBpZiAoIW1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gR3RrWHRCaW4gd2lsbCBjYWxsIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSwgc28g
d2UgZG9uJ3QgbmVlZCB0byBkbyBpdCBoZXJlLgotICAgIGlmICghbV9uZWVkc1hFbWJlZCkgewot
ICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7Ci0gICAgICAgIGd0
a194dGJpbl9yZXNpemUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dSZWN0LndpZHRo
KCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX2RlbGF5ZWRBbGxvY2F0aW9uID0gbV93aW5kb3dSZWN0OwotICAgIHVwZGF0ZVdpZGdldEFs
bG9jYXRpb25BbmRDbGlwKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6dXBkYXRlV2lkZ2V0QWxs
b2NhdGlvbkFuZENsaXAoKQotewotICAgIC8vIElmIHRoZSB3aW5kb3cgaGFzIG5vdCBiZWVuIGVt
YmVkZGVkIHlldCAodGhlIHBsdWcgYWRkZWQpLCB3ZSBkZWxheSBzZXR0aW5nIGl0cyBhbGxvY2F0
aW9uIHVudGlsIAotICAgIC8vIHRoYXQgcG9pbnQuIFRoaXMgZml4ZXMgaXNzdWVzIHdpdGggc29t
ZSBKYXZhIHBsdWdpbiBpbnN0YW5jZXMgbm90IHJlbmRlcmluZyBpbW1lZGlhdGVseS4KLSAgICBp
ZiAoIW1fcGx1Z0FkZGVkIHx8IG1fZGVsYXllZEFsbG9jYXRpb24uaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCk7Ci0gICAgaWYgKGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkpIHsKLSAgICAgICAg
R2RrUmVjdGFuZ2xlIGNsaXBSZWN0ID0gbV9jbGlwUmVjdDsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgotICAgICAgICBHZGtSZWdpb24qIGNsaXBSZWdpb24gPSBnZGtfcmVnaW9uX3JlY3Rhbmds
ZSgmY2xpcFJlY3QpOwotICAgICAgICBnZGtfd2luZG93X3NoYXBlX2NvbWJpbmVfcmVnaW9uKGd0
a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpLCBjbGlwUmVnaW9uLCAwLCAwKTsKLSAgICAgICAg
Z2RrX3JlZ2lvbl9kZXN0cm95KGNsaXBSZWdpb24pOwotI2Vsc2UKLSAgICAgICAgY2Fpcm9fcmVn
aW9uX3QqIGNsaXBSZWdpb24gPSBjYWlyb19yZWdpb25fY3JlYXRlX3JlY3RhbmdsZSgmY2xpcFJl
Y3QpOwotICAgICAgICBnZGtfd2luZG93X3NoYXBlX2NvbWJpbmVfcmVnaW9uKGd0a193aWRnZXRf
Z2V0X3dpbmRvdyh3aWRnZXQpLCBjbGlwUmVnaW9uLCAwLCAwKTsKLSAgICAgICAgY2Fpcm9fcmVn
aW9uX2Rlc3Ryb3koY2xpcFJlZ2lvbik7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBUaGUgZ29h
bCBpcyB0byB0cnkgdG8gYXZvaWQgY2FsbGluZyBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgaW4g
dGhlIFdlYlZpZXcncwotICAgIC8vIHNpemUtYWxsb2NhdGUgbWV0aG9kLiBJdCBibG9ja3MgdGhl
IG1haW4gbG9vcCBhbmQgaWYgdGhlIHdpZGdldCBpcyBvZmZzY3JlZW4KLSAgICAvLyBvciBoYXNu
J3QgbW92ZWQgaXQgaXNuJ3QgcmVxdWlyZWQuCi0KLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBp
ZiB0aGUgYWxsb2NhdGlvbiBoYXMgbm90IGNoYW5nZWQuCi0gICAgR3RrQWxsb2NhdGlvbiBjdXJy
ZW50QWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmN1
cnJlbnRBbGxvY2F0aW9uKTsKLSAgICBpZiAoY3VycmVudEFsbG9jYXRpb24gPT0gbV9kZWxheWVk
QWxsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcg
aWYgYm90aCB0aGUgb2xkIGFuZCB0aGUgbmV3IGFsbG9jYXRpb25zIGFyZSBvdXRzaWRlIHRoZSBm
cmFtZS4KLSAgICBJbnRSZWN0IGN1cnJlbnRBbGxvY2F0aW9uUmVjdChjdXJyZW50QWxsb2NhdGlv
bik7Ci0gICAgY3VycmVudEFsbG9jYXRpb25SZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7Ci0g
ICAgaWYgKGN1cnJlbnRBbGxvY2F0aW9uUmVjdC5pc0VtcHR5KCkgJiYgbV9jbGlwUmVjdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNU
KHdpZGdldCksICJkZWxheWVkLWFsbG9jYXRpb24iLCAmbV9kZWxheWVkQWxsb2NhdGlvbik7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCi17Ci0g
ICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKLQotICAgIGlmIChpc1NlbGZW
aXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgewotICAgICAgICBpZiAodmlzaWJs
ZSkKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ3RrX3dpZGdldF9oaWRlKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpOwotICAgIH0KLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVh
ZEZpbGUoVmVjdG9yPGNoYXI+JiBvdXRwdXRCdWZmZXIsIHVpbnQzMl90IGZpbGVuYW1lTGVuZ3Ro
LCBjb25zdCBjaGFyKiBmaWxlbmFtZUJ1ZmZlcikKLXsKLSAgICAvLyBUaGVyZSBkb2Vzbid0IHNl
ZW0gdG8gYmUgYW55IGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBlbmNvZGluZyB0aGUgZmlsZW5h
bWUKLSAgICAvLyBpcyBpbiwgYnV0IG1vc3QgcG9ydHMgc2VlbSB0byBhc3N1bWUgVVRGLTggaGVy
ZSBhbmQgdGhlIHRlc3QgcGx1Z2luIGlzIGRlZmluaXRlbHkKLSAgICAvLyBzZW5kaW5nIHRoZSBw
YXRoIGluIFVURi04IGVuY29kaW5nLgotICAgIENTdHJpbmcgZmlsZW5hbWUoZmlsZW5hbWVCdWZm
ZXIsIGZpbGVuYW1lTGVuZ3RoKTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdS
ZWYoZ19maWxlX25ld19mb3JfY29tbWFuZGxpbmVfYXJnKGZpbGVuYW1lLmRhdGEoKSkpOwotICAg
IGlmIChnX2ZpbGVfcXVlcnlfZmlsZV90eXBlKGZpbGUuZ2V0KCksIEdfRklMRV9RVUVSWV9JTkZP
X05PTkUsIDApICE9IEdfRklMRV9UWVBFX1JFR1VMQVIpCi0gICAgICAgIHJldHVybiBOUEVSUl9G
SUxFX05PVF9GT1VORDsKLQotICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0
R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhmaWxlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRF
X1NUQU5EQVJEX1NJWkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAp
KTsKLSAgICBpZiAoIWZpbGVJbmZvKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9V
TkQ7Ci0KLSAgICBHUmVmUHRyPEdGaWxlSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRH
UmVmKGdfZmlsZV9yZWFkKGZpbGUuZ2V0KCksIDAsIDApKTsKLSAgICBpZiAoIWlucHV0U3RyZWFt
KQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBvdXRwdXRCdWZm
ZXIucmVzaXplKGdfZmlsZV9pbmZvX2dldF9zaXplKGZpbGVJbmZvLmdldCgpKSk7Ci0gICAgZ3Np
emUgYnl0ZXNSZWFkID0gMDsKLSAgICBpZiAoIWdfaW5wdXRfc3RyZWFtX3JlYWRfYWxsKEdfSU5Q
VVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dEJ1ZmZlci5kYXRhKCksIG91dHB1dEJ1ZmZlci5zaXplKCksICZieXRlc1Jl
YWQsIDAsIDApKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRW
YWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJl
c3VsdCkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5WVG9vbGtpdDoK
LSAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gMjsKLSAgICAgICAgKnJl
c3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2Ug
TlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKLSAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZh
bHVlKSA9IHRydWU7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6Ci0gICAg
ICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwotICAgICAgICAqcmVzdWx0
ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5W
U3VwcG9ydHNXaW5kb3dsZXNzOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUp
ID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJs
ZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxl
KSB7Ci0gICAgY2FzZSBOUE5WeERpc3BsYXk6Ci0gICAgICAgIGlmIChtX25lZWRzWEVtYmVkKQot
ICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gKHZvaWQgKilHREtfRElTUExBWV9YRElTUExB
WShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Kih2b2lkICoqKXZhbHVlID0gKHZvaWQgKilHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSktPnh0Y2xpZW50Lnh0ZGlzcGxheTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9S
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDoKLSAg
ICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7Ci0gICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUg
PSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCAoR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpLT54dGNsaWVudC54dGRpc3BsYXkpOwotCi0gICAgICAgICAgICAqcmVzdWx0ID0g
TlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgKnJlc3VsdCA9IE5Q
RVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGNhc2Ug
TlBOVm5ldHNjYXBlV2luZG93OiB7Ci0gICAgICAgICAgICBHZGtXaW5kb3cqIGdka1dpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3co
KS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOwotICAgICAgICAgICAgR2RrV2luZG93KiB0b3BsZXZl
bFdpbmRvdyA9IGdka193aW5kb3dfZ2V0X3RvcGxldmVsKGdka1dpbmRvdyk7Ci0gICAgICAgICAg
ICBpZiAoIXRvcGxldmVsV2luZG93KSB7Ci0gICAgICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJS
X0dFTkVSSUNfRVJST1I7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAqc3RhdGljX2Nhc3Q8V2luZG93Kj4odmFsdWUpID0gR0RLX1dJTkRP
V19YV0lORE9XKHRvcGxldmVsV2luZG93KTsKLSAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6
OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKG1faXNXaW5k
b3dlZCkgewotICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnZhbGlkYXRl
V2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxp
ZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQotewotICAgIGlmICghcmVjdCkgewotICAgICAgICBpbnZh
bGlkYXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IHIocmVjdC0+
bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAt
IHJlY3QtPnRvcCk7Ci0gICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHIpOwotfQot
Ci12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pCi17Ci0gICAgLy8g
VE9ETzogb3B0aW1pemUKLSAgICBpbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6
Zm9yY2VSZWRyYXcoKQotewotICAgIGlmIChtX2lzV2luZG93ZWQpCi0gICAgICAgIGd0a193aWRn
ZXRfcXVldWVfZHJhdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGd0a193aWRnZXRfcXVldWVfZHJhdyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3co
KS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOwotfQotCi1zdGF0aWMgRGlzcGxheSogZ2V0UGx1Z2lu
RGlzcGxheSgpCi17Ci0gICAgLy8gVGhlIHBsdWdpbiB0b29sa2l0IG1pZ2h0IGhhdmUgYSBkaWZm
ZXJlbnQgWCBjb25uZWN0aW9uIG9wZW4uICBTaW5jZSB3ZSdyZQotICAgIC8vIGEgZ2RrL2d0ayBh
cHAsIHdlJ2xsIChwcm9iYWJseT8pIGhhdmUgdGhlIHNhbWUgWCBjb25uZWN0aW9uIGFzIGFueSBn
ZGstYmFzZWQKLSAgICAvLyBwbHVnaW5zLCBzbyB3ZSBjYW4gcmV0dXJuIHRoYXQuICBXZSBtaWdo
dCB3YW50IHRvIGFkZCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgaGVyZQotICAgIC8vIGxhdGVyLgot
Ci0gICAgcmV0dXJuIEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0
KCkpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRWaXN1YWxBbmRDb2xvcm1hcChpbnQgZGVwdGgsIFZp
c3VhbCoqIHZpc3VhbCwgQ29sb3JtYXAqIGNvbG9ybWFwKQotewotICAgICp2aXN1YWwgPSAwOwot
ICAgICpjb2xvcm1hcCA9IDA7Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlf
WERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgaW50IHJtYWosIHJtaW47
Ci0gICAgaWYgKGRlcHRoID09IDMyICYmICghWFJlbmRlclF1ZXJ5VmVyc2lvbihkaXNwbGF5LCAm
cm1haiwgJnJtaW4pIHx8IChybWFqID09IDAgJiYgcm1pbiA8IDUpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgWFZpc3VhbEluZm8gdGVtcGw7Ci0gICAgdGVtcGwuc2NyZWVuICA9IGdka19zY3Jl
ZW5fZ2V0X251bWJlcihnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOwotICAgIHRlbXBsLmRlcHRo
ICAgPSBkZXB0aDsKLSAgICB0ZW1wbC5jX2NsYXNzID0gVHJ1ZUNvbG9yOwotICAgIGludCBuVmlz
dWFsczsKLSAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbyA9IFhHZXRWaXN1YWxJbmZvKGRpc3Bs
YXksIFZpc3VhbFNjcmVlbk1hc2sgfCBWaXN1YWxEZXB0aE1hc2sgfCBWaXN1YWxDbGFzc01hc2ss
ICZ0ZW1wbCwgJm5WaXN1YWxzKTsKLQotICAgIGlmICghblZpc3VhbHMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChkZXB0aCA9PSAzMikgewotICAgICAgICBmb3IgKGludCBpZHggPSAwOyBp
ZHggPCBuVmlzdWFsczsgKytpZHgpIHsKLSAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBm
b3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChkaXNwbGF5LCB2aXN1YWxJbmZvW2lkeF0u
dmlzdWFsKTsKLSAgICAgICAgICAgIGlmIChmb3JtYXQtPnR5cGUgPT0gUGljdFR5cGVEaXJlY3Qg
JiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrKSB7Ci0gICAgICAgICAgICAgICAgICp2aXN1YWwg
PSB2aXN1YWxJbmZvW2lkeF0udmlzdWFsOwotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgKnZpc3VhbCA9IHZpc3Vh
bEluZm9bMF0udmlzdWFsOwotCi0gICAgWEZyZWUodmlzdWFsSW5mbyk7Ci0KLSAgICBpZiAoKnZp
c3VhbCkKLSAgICAgICAgKmNvbG9ybWFwID0gWENyZWF0ZUNvbG9ybWFwKGRpc3BsYXksIEdES19S
T09UX1dJTkRPVygpLCAqdmlzdWFsLCBBbGxvY05vbmUpOwotfQotCi1nYm9vbGVhbiBQbHVnaW5W
aWV3OjpwbHVnUmVtb3ZlZENhbGxiYWNrKEd0a1NvY2tldCogc29ja2V0LCBQbHVnaW5WaWV3KiB2
aWV3KQotewotICAgIHZpZXctPm1fcGx1Z0FkZGVkID0gZmFsc2U7Ci0gICAgcmV0dXJuIFRSVUU7
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGx1Z0FkZGVkQ2FsbGJhY2soR3RrU29ja2V0KiBzb2Nr
ZXQsIFBsdWdpblZpZXcqIHZpZXcpCi17Ci0gICAgQVNTRVJUKHNvY2tldCk7Ci0gICAgQVNTRVJU
KHZpZXcpOwotICAgIHZpZXctPm1fcGx1Z0FkZGVkID0gdHJ1ZTsKLSAgICB2aWV3LT51cGRhdGVX
aWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOwotfQotCi1ib29sIFBsdWdpblZpZXc6OnBsYXRmb3Jt
U3RhcnQoKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAgQVNTRVJUKG1fc3RhdHVz
ID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7Ci0KLSAgICBpZiAobV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJl
bnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNY
RW1iZWQpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0gICAgfQotCi0gICAgaWYgKG1faXNXaW5k
b3dlZCkgewotICAgICAgICBHdGtXaWRnZXQqIHBhZ2VDbGllbnQgPSBtX3BhcmVudEZyYW1lLT52
aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgICAgIGlmICht
X25lZWRzWEVtYmVkKSB7Ci0gICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IGlzIG5vdCBhbmNo
b3JlZCB0aGUgc3RhcnR1cCBwcm9jZXNzIHdpbGwKLSAgICAgICAgICAgIC8vIGZhaWwgbWlzZXJh
Ymx5IGZvciBYRW1iZWQgcGx1Z2lucyBhIGJpdCBsYXRlciBvbiB3aGVuCi0gICAgICAgICAgICAv
LyB3ZSB0cnkgdG8gZ2V0IHRoZSBJRCBvZiBvdXIgd2luZG93IChzaW5jZSByZWFsaXplIHdpbGwK
LSAgICAgICAgICAgIC8vIGZhaWwpLCBzbyBsZXQncyBqdXN0IGFib3J0IGhlcmUuCi0gICAgICAg
ICAgICBpZiAoIWd0a193aWRnZXRfZ2V0X3BhcmVudChwYWdlQ2xpZW50KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIG1fcGx1Z0FkZGVkID0gZmFsc2U7Ci0g
ICAgICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfc29ja2V0X25ldygpKTsKLSAgICAgICAg
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIocGFnZUNsaWVudCksIHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpOwotICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLCAicGx1Zy1hZGRlZCIsIEdfQ0FMTEJBQ0soUGx1Z2luVmlldzo6cGx1Z0Fk
ZGVkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSwgInBsdWctcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soUGx1Z2luVmlldzo6
cGx1Z1JlbW92ZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IHNldFBsYXRmb3JtV2lkZ2V0KGd0a194dGJpbl9uZXcocGFnZUNsaWVudCwgMCkpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOwotICAgICAgICBtX3BsdWdpbkRp
c3BsYXkgPSBnZXRQbHVnaW5EaXNwbGF5KCk7Ci0gICAgfQotCi0gICAgc2hvdygpOwotCi0gICAg
ICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzID0gbmV3IE5QU2V0V2luZG93Q2FsbGJh
Y2tTdHJ1Y3QoKTsKLSAgICAgICAgd3MtPnR5cGUgPSAwOwotCi0gICAgaWYgKG1faXNXaW5kb3dl
ZCkgewotICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7Ci0gICAg
ICAgIGlmIChtX25lZWRzWEVtYmVkKSB7Ci0gICAgICAgICAgICBHdGtXaWRnZXQqIHdpZGdldCA9
IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCk7Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUo
d2lkZ2V0KTsKLSAgICAgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oZ3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tFVChwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKSkpOwotICAgICAgICAgICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93
aW5kb3cod2lkZ2V0KTsKLSAgICAgICAgICAgIHdzLT5kaXNwbGF5ID0gR0RLX1dJTkRPV19YRElT
UExBWSh3aW5kb3cpOwotICAgICAgICAgICAgd3MtPnZpc3VhbCA9IEdES19WSVNVQUxfWFZJU1VB
TChnZGtfd2luZG93X2dldF92aXN1YWwod2luZG93KSk7Ci0gICAgICAgICAgICB3cy0+ZGVwdGgg
PSBnZGtfdmlzdWFsX2dldF9kZXB0aChnZGtfd2luZG93X2dldF92aXN1YWwod2luZG93KSk7Ci0g
ICAgICAgICAgICB3cy0+Y29sb3JtYXAgPSBYQ3JlYXRlQ29sb3JtYXAod3MtPmRpc3BsYXksIEdE
S19ST09UX1dJTkRPVygpLCB3cy0+dmlzdWFsLCBBbGxvY05vbmUpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PigoR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dHdpbmRvdykpOwotICAgICAg
ICAgICAgd3MtPmRpc3BsYXkgPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0
ZGlzcGxheTsKLSAgICAgICAgICAgIHdzLT52aXN1YWwgPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0dmlzdWFsOwotICAgICAgICAgICAgd3MtPmRlcHRoID0g
R1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGRlcHRoOwotICAg
ICAgICAgICAgd3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkp
LT54dGNsaWVudC54dGNvbG9ybWFwOwotICAgICAgICB9Ci0gICAgICAgIFhGbHVzaCAod3MtPmRp
c3BsYXkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZURyYXdhYmxlOwotICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7IC8vIE5vdCB1c2Vk
PwotCi0gICAgICAgIEdka1NjcmVlbiogZ3NjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQo
KTsKLSAgICAgICAgR2RrVmlzdWFsKiBndmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfc3lzdGVtX3Zp
c3VhbChnc2NyZWVuKTsKLQotICAgICAgICBpZiAoZ2RrX3Zpc3VhbF9nZXRfZGVwdGgoZ3Zpc3Vh
bCkgPT0gMzIgfHwgIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVp
cmVzRGVmYXVsdFNjcmVlbkRlcHRoKSkgewotICAgICAgICAgICAgZ2V0VmlzdWFsQW5kQ29sb3Jt
YXAoMzIsICZtX3Zpc3VhbCwgJm1fY29sb3JtYXApOwotICAgICAgICAgICAgd3MtPmRlcHRoID0g
MzI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1fdmlzdWFsKSB7Ci0gICAgICAgICAgICBn
ZXRWaXN1YWxBbmRDb2xvcm1hcChnZGtfdmlzdWFsX2dldF9kZXB0aChndmlzdWFsKSwgJm1fdmlz
dWFsLCAmbV9jb2xvcm1hcCk7Ci0gICAgICAgICAgICB3cy0+ZGVwdGggPSBnZGtfdmlzdWFsX2dl
dF9kZXB0aChndmlzdWFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHdzLT5kaXNwbGF5ID0gR0RL
X0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgICAgIHdz
LT52aXN1YWwgPSBtX3Zpc3VhbDsKLSAgICAgICAgd3MtPmNvbG9ybWFwID0gbV9jb2xvcm1hcDsK
LQotICAgICAgICBtX25wV2luZG93LnggPSAwOwotICAgICAgICBtX25wV2luZG93LnkgPSAwOwot
ICAgICAgICBtX25wV2luZG93LndpZHRoID0gLTE7Ci0gICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0
ID0gLTE7Ci0gICAgfQotCi0gICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7Ci0KLSAgICAvLyBU
T0RPIHJlbW92ZSBpbiBmYXZvciBvZiBudWxsIGV2ZW50cywgbGlrZSBtYWMgcG9ydD8KLSAgICBp
ZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0
V2luZG93Q2FsbCkpKQotICAgICAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsgLy8gd2FzOiBzZXRO
UFdpbmRvd0lmTmVlZGVkKCksIGJ1dCB0aGlzIGRvZXNuJ3QgcHJvZHVjZSAweDAgcmVjdHMgYXQg
Zmlyc3QgZ28KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBsYXRm
b3JtRGVzdHJveSgpCi17Ci0gICAgaWYgKG1fZHJhd2FibGUpIHsKLSAgICAgICAgWEZyZWVQaXht
YXAoR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSksIG1fZHJh
d2FibGUpOwotICAgICAgICBtX2RyYXdhYmxlID0gMDsKLSAgICB9Ci0KLSAgICBHdGtXaWRnZXQq
IHdpZGdldCA9IHBsYXRmb3JtV2lkZ2V0KCk7Ci0gICAgaWYgKHdpZGdldCkgewotICAgICAgICBH
dGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudCh3aWRnZXQpOwotICAgICAg
ICBBU1NFUlQocGFyZW50KTsKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRB
SU5FUihwYXJlbnQpLCB3aWRnZXQpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy94MTEvUGx1Z2luVmlld1gxMS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3gxMS9QbHVnaW5WaWV3WDExLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzI3ZjU2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy94MTEvUGx1Z2luVmlld1gxMS5jcHAKQEAgLTAsMCArMSwx
MDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRv
IE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBLYWthaSwg
SW5jLiA8YnJpYW5Aa2FrYWkuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSAi
QnJpZGdlSlNDLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSG9z
dFdpbmRvdy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVn
LmgiCisjaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTZXR0
aW5ncy5oIgorI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAibnBydW50
aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlIDxydW50aW1l
L0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorCisjaWZkZWYgR1RL
X0FQSV9WRVJTSU9OXzIKKyNpbmNsdWRlIDxnZGtjb25maWcuaD4KKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oR1RLKQorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9u
aW5nLmgiCisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjZWxz
ZQorI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFY29yZV9YLmg+CisjaW5jbHVk
ZSA8RXZhcy5oPgorI2VuZGlmCisKKyNkZWZpbmUgU3RyaW5nIFh0U3RyaW5nVHlwZQorI2luY2x1
ZGUgIlJlZlB0ckNhaXJvLmgiCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgImd0azJ4dGJp
bi5oIgorI2VuZGlmCisjZGVmaW5lIEJvb2wgaW50IC8vIHRoaXMgZ290IHVuZGVmaW5lZCBzb21l
d2hlcmUKKyNkZWZpbmUgU3RhdHVzIGludCAvLyBkaXR0bworI2luY2x1ZGUgPFgxMS9leHRlbnNp
b25zL1hyZW5kZXIuaD4KKyNpbmNsdWRlIDxjYWlyby14bGliLmg+CisKK3VzaW5nIEpTQzo6RXhl
Y1N0YXRlOwordXNpbmcgSlNDOjpJbnRlcnByZXRlcjsKK3VzaW5nIEpTQzo6SlNMb2NrOwordXNp
bmcgSlNDOjpKU09iamVjdDsKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwordXNpbmcgbmFtZXNw
YWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOworCitib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkK
K3sKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7
CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsK
KworICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1f
aW5zdGFuY2UsICZldmVudCk7CisKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKyAgICByZXR1cm4gYWNjZXB0ZWQ7
Cit9CisKK3N0YXRpYyBXaW5kb3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUpCit7
CisjaWYgUExBVEZPUk0oR1RLKQorICAgIEd0a1dpZGdldCogcGFyZW50V2lkZ2V0ID0gcGFyZW50
RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBH
ZGtTY3JlZW4qIGdzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4ocGFyZW50V2lkZ2V0KTsK
KyAgICByZXR1cm4gR0RLX1dJTkRPV19YV0lORE9XKGdka19zY3JlZW5fZ2V0X3Jvb3Rfd2luZG93
KGdzY3JlZW4pKTsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyAgICBFdmFzKiBldmFzID0gcGFyZW50
RnJhbWUtPnZpZXcoKS0+ZXZhcygpOworICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3Jl
X2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdpbmRv
dz4oZWNvcmVfZXZhc193aW5kb3dfZ2V0KGVjb3JlRXZhcykpOworI2VuZGlmCit9CisKK3N0YXRp
YyBEaXNwbGF5KiBnZXRQbHVnaW5EaXNwbGF5KCkKK3sKKyNpZiBQTEFURk9STShHVEspCisgICAg
Ly8gVGhlIHBsdWdpbiB0b29sa2l0IG1pZ2h0IGhhdmUgYSBkaWZmZXJlbnQgWCBjb25uZWN0aW9u
IG9wZW4uIFNpbmNlIHdlJ3JlCisgICAgLy8gYSBnZGsvZ3RrIGFwcCwgd2UnbGwgKHByb2JhYmx5
PykgaGF2ZSB0aGUgc2FtZSBYIGNvbm5lY3Rpb24gYXMgYW55IGdkay1iYXNlZAorICAgIC8vIHBs
dWdpbnMsIHNvIHdlIGNhbiByZXR1cm4gdGhhdC4gV2UgbWlnaHQgd2FudCB0byBhZGQgb3RoZXIg
aW1wbGVtZW50YXRpb25zIGhlcmUKKyAgICAvLyBsYXRlci4KKworICAgIHJldHVybiBHREtfRElT
UExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyNlbHNlCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PERpc3BsYXkqPihlY29yZV94X2Rpc3BsYXlfZ2V0KCkpOworI2VuZGlm
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKK3sKKyAgICBpZiAo
IXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJh
bWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVW
aWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dS
ZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5k
b3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCku
bG9jYXRpb24oKSksIGZyYW1lUmVjdCgpLnNpemUoKSk7CisgICAgbV9jbGlwUmVjdCA9IHdpbmRv
d0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93
aW5kb3dSZWN0LnkoKSk7CisKKyAgICBpZiAobV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3Qg
JiYgbV9jbGlwUmVjdCA9PSBvbGRDbGlwUmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFtX2lzV2luZG93ZWQgJiYgIW1fd2luZG93UmVjdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgRGlzcGxheSogZGlzcGxheSA9IGdldFBsdWdpbkRpc3BsYXkoKTsKKworICAg
ICAgICBpZiAobV9kcmF3YWJsZSkKKyAgICAgICAgICAgIFhGcmVlUGl4bWFwKGRpc3BsYXksIG1f
ZHJhd2FibGUpOworCisgICAgICAgIG1fZHJhd2FibGUgPSBYQ3JlYXRlUGl4bWFwKGRpc3BsYXks
IGdldFJvb3RXaW5kb3cobV9wYXJlbnRGcmFtZS5nZXQoKSksCisgICAgICAgICAgICBtX3dpbmRv
d1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgKChOUFNl
dFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT5kZXB0aCk7CisgICAg
ICAgIFhTeW5jKGRpc3BsYXksIGZhbHNlKTsgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZlciBr
bm93cyBhYm91dCB0aGUgRHJhd2FibGUKKyAgICB9CisKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVk
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworICAg
IEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOworI2lm
IFBMQVRGT1JNKEdUSykKKyAgICBpZiAoZm9jdXNlZCAmJiBwbGF0Zm9ybVdpZGdldCgpKQorICAg
ICAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMocGxhdGZvcm1XaWRnZXQoKSk7CisjZW5kaWYKKyAg
ICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNob3co
KQoreworICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0
KCkpOworICAgIFdpZGdldDo6c2hvdygpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhpZGUoKQor
eworICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkp
OworICAgIFdpZGdldDo6aGlkZSgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1f
aXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkg
eworICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworCisgICAgaWYg
KG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2RyYXdhYmxlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxh
eSgpOworICAgIGNvbnN0IGJvb2wgc2hvdWxkU3luY1dpdGhYID0gbV9wbHVnaW5EaXNwbGF5ICYm
IG1fcGx1Z2luRGlzcGxheSAhPSBkaXNwbGF5OworCisgICAgSW50UmVjdCBleHBvc2VkUmVjdChy
ZWN0KTsKKyAgICBleHBvc2VkUmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOworICAgIGV4cG9z
ZWRSZWN0Lm1vdmUoLWZyYW1lUmVjdCgpLngoKSwgLWZyYW1lUmVjdCgpLnkoKSk7CisKKyAgICBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBkcmF3YWJsZVN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb194
bGliX3N1cmZhY2VfY3JlYXRlKGRpc3BsYXksCisgICAgICAgIG1fZHJhd2FibGUsCisgICAgICAg
IG1fdmlzdWFsLAorICAgICAgICBtX3dpbmRvd1JlY3Qud2lkdGgoKSwKKyAgICAgICAgbV93aW5k
b3dSZWN0LmhlaWdodCgpKSk7CisKKyAgICBpZiAobV9pc1RyYW5zcGFyZW50KSB7CisgICAgICAg
IC8vIElmIHdlIGhhdmUgYSAzMiBiaXQgZHJhd2FibGUgYW5kIHRoZSBwbHVnaW4gd2FudHMgdHJh
bnNwYXJlbmN5LAorICAgICAgICAvLyB3ZSdsbCBjbGVhciB0aGUgZXhwb3NlZCBhcmVhIHRvIHRy
YW5zcGFyZW50IGZpcnN0LiBPdGhlcndpc2UsCisgICAgICAgIC8vIHdlJ2QgZW5kIHVwIHdpdGgg
anVuayBpbiB0aGVyZSBmcm9tIHRoZSBsYXN0IHBhaW50LCBvciwgd29yc2UsCisgICAgICAgIC8v
IHVuaW5pdGlhbGl6ZWQgZGF0YS4KKyAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKGRyYXdhYmxlU3VyZmFjZS5nZXQoKSkpOworCisgICAgICAgIGlmICgh
KGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoZHJhd2FibGVTdXJmYWNlLmdldCgpKSAmIENBSVJP
X0NPTlRFTlRfQUxQSEEpKSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGZha2UgaXQgd2hl
biB3ZSBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwgb24gb3VyCisgICAgICAgICAgICAvLyBw
aXhtYXAuIElmIHRoYXQncyBub3QgcG9zc2libGUsIGF0IGxlYXN0IGNsZWFyIHRoZSB3aW5kb3cg
dG8KKyAgICAgICAgICAgIC8vIGF2b2lkIGRyYXdpbmcgYXJ0aWZhY3RzLgorCisgICAgICAgICAg
ICAvLyBUaGlzIFdvdWxkIG5vdCB3b3JrIHdpdGhvdXQgZG91YmxlIGJ1ZmZlcmluZywgYnV0IHdl
IGFsd2F5cyB1c2UgaXQuCisgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3Iu
Z2V0KCksIGNhaXJvX2dldF9ncm91cF90YXJnZXQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNyKCkpLAorICAgICAgICAgICAgICAgIC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0
LnkoKSk7CisgICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09Q
RVJBVE9SX1NPVVJDRSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2Fpcm9fc2V0X29w
ZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7CisKKyAgICAgICAgY2Fpcm9f
cmVjdGFuZ2xlKGNyLmdldCgpLCBleHBvc2VkUmVjdC54KCksIGV4cG9zZWRSZWN0LnkoKSwKKyAg
ICAgICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgY2Fpcm9fZmlsbChjci5nZXQoKSk7CisgICAgfQorCisgICAgWEV2ZW50IHhldmVudDsK
KyAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOworICAgIFhHcmFwaGljc0V4
cG9zZUV2ZW50JiBleHBvc2VFdmVudCA9IHhldmVudC54Z3JhcGhpY3NleHBvc2U7CisgICAgZXhw
b3NlRXZlbnQudHlwZSA9IEdyYXBoaWNzRXhwb3NlOworICAgIGV4cG9zZUV2ZW50LmRpc3BsYXkg
PSBkaXNwbGF5OworICAgIGV4cG9zZUV2ZW50LmRyYXdhYmxlID0gbV9kcmF3YWJsZTsKKyAgICBl
eHBvc2VFdmVudC54ID0gZXhwb3NlZFJlY3QueCgpOworICAgIGV4cG9zZUV2ZW50LnkgPSBleHBv
c2VkUmVjdC55KCk7CisgICAgZXhwb3NlRXZlbnQud2lkdGggPSBleHBvc2VkUmVjdC54KCkgKyBl
eHBvc2VkUmVjdC53aWR0aCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyB3aWR0aCBpcyB0aGUg
cmlnaHQgaW4gdHJhbnNwYXJlbnQgbW9kZQorICAgIGV4cG9zZUV2ZW50LmhlaWdodCA9IGV4cG9z
ZWRSZWN0LnkoKSArIGV4cG9zZWRSZWN0LmhlaWdodCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5r
cyBoZWlnaHQgaXMgdGhlIGJvdHRvbSBpbiB0cmFuc3BhcmVudCBtb2RlCisKKyAgICBkaXNwYXRj
aE5QRXZlbnQoeGV2ZW50KTsKKworICAgIGlmIChzaG91bGRTeW5jV2l0aFgpCisgICAgICAgIFhT
eW5jKG1fcGx1Z2luRGlzcGxheSwgZmFsc2UpOyAvLyBzeW5jIGNoYW5nZXMgYnkgcGx1Z2luCisK
KyAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAg
IGNhaXJvX3NhdmUoY3IpOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBkcmF3
YWJsZVN1cmZhY2UuZ2V0KCksIGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpKTsKKwor
ICAgIGNhaXJvX3JlY3RhbmdsZShjciwKKyAgICAgICAgZnJhbWVSZWN0KCkueCgpICsgZXhwb3Nl
ZFJlY3QueCgpLCBmcmFtZVJlY3QoKS55KCkgKyBleHBvc2VkUmVjdC55KCksCisgICAgICAgIGV4
cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19jbGlw
KGNyKTsKKworICAgIGlmIChtX2lzVHJhbnNwYXJlbnQpCisgICAgICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfT1ZFUik7CisgICAgZWxzZQorICAgICAgICBjYWlyb19z
ZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQo
Y3IpOworCisgICAgY2Fpcm9fcmVzdG9yZShjcik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyNpZiBQTEFURk9STShH
VEspCisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8
IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVu
dCAmJiBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBOUEV2ZW50IHhFdmVudDsKKyAgICBpbml0WEV2ZW50KCZ4RXZlbnQpOwor
ICAgIEdka0V2ZW50S2V5KiBnZGtFdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpLT5nZGtFdmVudEtl
eSgpOworCisgICAgeEV2ZW50LnR5cGUgPSAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
a2V5ZG93bkV2ZW50KSA/IDIgOiAzOyAvLyBLZXlQcmVzcy9SZWxlYXNlIGdldCB1bnNldCBzb21l
d2hlcmUKKyAgICB4RXZlbnQueGtleS5yb290ID0gZ2V0Um9vdFdpbmRvdyhtX3BhcmVudEZyYW1l
LmdldCgpKTsKKyAgICB4RXZlbnQueGtleS5zdWJ3aW5kb3cgPSAwOyAvLyB3ZSBoYXZlIG5vIGNo
aWxkIHdpbmRvdworICAgIHhFdmVudC54a2V5LnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7Cisg
ICAgeEV2ZW50LnhrZXkuc3RhdGUgPSBnZGtFdmVudC0+c3RhdGU7IC8vIEdka01vZGlmaWVyVHlw
ZSBtaXJyb3JzIHhsaWIgc3RhdGUgbWFza3MKKyAgICB4RXZlbnQueGtleS5rZXljb2RlID0gZ2Rr
RXZlbnQtPmhhcmR3YXJlX2tleWNvZGU7CisgICAgeEV2ZW50LnhrZXkuc2FtZV9zY3JlZW4gPSB0
cnVlOworCisgICAgLy8gTk9URTogQXMgdGhlIFhFdmVudHMgc2VudCB0byB0aGUgcGx1Zy1pbiBh
cmUgc3ludGhlc2l6ZWQgYW5kIHRoZXJlIGlzIG5vdCBhIG5hdGl2ZSB3aW5kb3cKKyAgICAvLyBj
b3JyZXNwb25kaW5nIHRvIHRoZSBwbHVnLWluIHJlY3RhbmdsZSwgc29tZSBvZiB0aGUgbWVtYmVy
cyBvZiB0aGUgWEV2ZW50IHN0cnVjdHVyZXMgYXJlIG5vdAorICAgIC8vIHNldCB0byB0aGVpciBu
b3JtYWwgWHNlcnZlciB2YWx1ZXMuIGUuZy4gS2V5IGV2ZW50cyBkb24ndCBoYXZlIGEgcG9zaXRp
b24uCisgICAgLy8gc291cmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9OUEV2
ZW50CisgICAgeEV2ZW50LnhrZXkueCA9IDA7CisgICAgeEV2ZW50LnhrZXkueSA9IDA7CisgICAg
eEV2ZW50LnhrZXkueF9yb290ID0gMDsKKyAgICB4RXZlbnQueGtleS55X3Jvb3QgPSAwOworCisg
ICAgaWYgKGRpc3BhdGNoTlBFdmVudCh4RXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworI2VuZGlmCit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnB1dEV2ZW50U3RhdGUo
TW91c2VFdmVudCogZXZlbnQpCit7CisgICAgdW5zaWduZWQgc3RhdGUgPSAwOworICAgIGlmIChl
dmVudC0+Y3RybEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBDb250cm9sTWFzazsKKyAgICBpZiAo
ZXZlbnQtPnNoaWZ0S2V5KCkpCisgICAgICAgIHN0YXRlIHw9IFNoaWZ0TWFzazsKKyAgICBpZiAo
ZXZlbnQtPmFsdEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBNb2QxTWFzazsKKyAgICBpZiAoZXZl
bnQtPm1ldGFLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gTW9kNE1hc2s7CisgICAgcmV0dXJuIHN0
YXRlOworfQorCit2b2lkIFBsdWdpblZpZXc6OmluaXRYRXZlbnQoWEV2ZW50KiB4RXZlbnQpCit7
CisgICAgbWVtc2V0KHhFdmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOworCisgICAgeEV2ZW50LT54
YW55LnNlcmlhbCA9IDA7IC8vIHdlIGFyZSB1bmF3YXJlIG9mIHRoZSBsYXN0IHJlcXVlc3QgcHJv
Y2Vzc2VkIGJ5IFggU2VydmVyCisgICAgeEV2ZW50LT54YW55LnNlbmRfZXZlbnQgPSBmYWxzZTsK
KyNpZiBQTEFURk9STShHVEspCisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBtX3BhcmVudEZyYW1l
LT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisgICAgeEV2ZW50
LT54YW55LmRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShndGtfd2lkZ2V0X2dldF9kaXNw
bGF5KHdpZGdldCkpOworI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIHhFdmVudC0+eGFueS5kaXNw
bGF5ID0gZ2V0UGx1Z2luRGlzcGxheSgpOworI2VuZGlmCisKKyAgICAvLyBNb3ppbGxhIGFsc28g
c2VuZHMgTm9uZSBoZXJlIGZvciB3aW5kb3dsZXNzIHBsdWdpbnMuIFNlZSBuc09iamVjdEZyYW1l
LmNwcCBpbiB0aGUgTW96aWxsYSBzb3VyY2VzLgorICAgIC8vIFRoaXMgbWV0aG9kIGFsc28gc2V0
cyB1cCBGb2N1c0luIGFuZCBGb2N1c091dCBldmVudHMgZm9yIHdpbmRvd3MgcGx1Z2lucywgYnV0
IE1vemlsbGEgZG9lc24ndAorICAgIC8vIGV2ZW4gc2VuZCB0aGVzZSB0eXBlcyBvZiBldmVudHMg
dG8gd2luZG93ZWQgcGx1Z2lucy4gSW4gdGhlIGZ1dHVyZSwgaXQgbWF5IGJlIGdvb2QgdG8gb25s
eQorICAgIC8vIHNlbmQgdGhlbSB0byB3aW5kb3dsZXNzIHBsdWdpbnMuCisgICAgeEV2ZW50LT54
YW55LndpbmRvdyA9IE5vbmU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFhCdXR0b25FdmVudFNwZWNp
ZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9p
bnQmIHBvc3Rab29tUG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCit7CisgICAgWEJ1dHRvbkV2ZW50
JiB4YnV0dG9uID0geEV2ZW50LT54YnV0dG9uOworICAgIHhidXR0b24udHlwZSA9IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ID8gQnV0dG9uUHJlc3MgOiBCdXR0
b25SZWxlYXNlOworICAgIHhidXR0b24ucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUp
OworICAgIHhidXR0b24uc3Vid2luZG93ID0gMDsKKyAgICB4YnV0dG9uLnRpbWUgPSBldmVudC0+
dGltZVN0YW1wKCk7CisgICAgeGJ1dHRvbi54ID0gcG9zdFpvb21Qb3MueCgpOworICAgIHhidXR0
b24ueSA9IHBvc3Rab29tUG9zLnkoKTsKKyAgICB4YnV0dG9uLnhfcm9vdCA9IGV2ZW50LT5zY3Jl
ZW5YKCk7CisgICAgeGJ1dHRvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOworICAgIHhidXR0
b24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOworICAgIHN3aXRjaCAoZXZlbnQtPmJ1
dHRvbigpKSB7CisgICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAgICAgIHhidXR0b24uYnV0dG9u
ID0gQnV0dG9uMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSaWdodEJ1dHRvbjoKKyAgICAg
ICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24zOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExl
ZnRCdXR0b246CisgICAgZGVmYXVsdDoKKyAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24x
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgeGJ1dHRvbi5zYW1lX3NjcmVlbiA9IHRydWU7
Cit9CisKK3N0YXRpYyB2b2lkIHNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKFhFdmVudCog
eEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9pbnQmIHBvc3Rab29tUG9zLCBG
cmFtZSogcGFyZW50RnJhbWUpCit7CisgICAgWE1vdGlvbkV2ZW50JiB4bW90aW9uID0geEV2ZW50
LT54bW90aW9uOworICAgIHhtb3Rpb24udHlwZSA9IE1vdGlvbk5vdGlmeTsKKyAgICB4bW90aW9u
LnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKKyAgICB4bW90aW9uLnN1YndpbmRv
dyA9IDA7CisgICAgeG1vdGlvbi50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAgIHhtb3Rp
b24ueCA9IHBvc3Rab29tUG9zLngoKTsKKyAgICB4bW90aW9uLnkgPSBwb3N0Wm9vbVBvcy55KCk7
CisgICAgeG1vdGlvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOworICAgIHhtb3Rpb24ueV9y
b290ID0gZXZlbnQtPnNjcmVlblkoKTsKKyAgICB4bW90aW9uLnN0YXRlID0gaW5wdXRFdmVudFN0
YXRlKGV2ZW50KTsKKyAgICB4bW90aW9uLmlzX2hpbnQgPSBOb3RpZnlOb3JtYWw7CisgICAgeG1v
dGlvbi5zYW1lX3NjcmVlbiA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFhDcm9zc2luZ0V2
ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25z
dCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKK3sKKyAgICBYQ3Jv
c3NpbmdFdmVudCYgeGNyb3NzaW5nID0geEV2ZW50LT54Y3Jvc3Npbmc7CisgICAgeGNyb3NzaW5n
LnR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCA/IEVu
dGVyTm90aWZ5IDogTGVhdmVOb3RpZnk7CisgICAgeGNyb3NzaW5nLnJvb3QgPSBnZXRSb290V2lu
ZG93KHBhcmVudEZyYW1lKTsKKyAgICB4Y3Jvc3Npbmcuc3Vid2luZG93ID0gMDsKKyAgICB4Y3Jv
c3NpbmcudGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4Y3Jvc3NpbmcueCA9IHBvc3Ra
b29tUG9zLnkoKTsKKyAgICB4Y3Jvc3NpbmcueSA9IHBvc3Rab29tUG9zLngoKTsKKyAgICB4Y3Jv
c3NpbmcueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4Y3Jvc3NpbmcueV9yb290ID0g
ZXZlbnQtPnNjcmVlblkoKTsKKyAgICB4Y3Jvc3Npbmcuc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUo
ZXZlbnQpOworICAgIHhjcm9zc2luZy5tb2RlID0gTm90aWZ5Tm9ybWFsOworICAgIHhjcm9zc2lu
Zy5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOworICAgIHhjcm9zc2luZy5zYW1lX3NjcmVlbiA9
IHRydWU7CisgICAgeGNyb3NzaW5nLmZvY3VzID0gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKKworICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZXZl
bnQtPmJ1dHRvbigpID09IFJpZ2h0QnV0dG9uICYmIG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlu
cyhQbHVnaW5RdWlya0lnbm9yZVJpZ2h0Q2xpY2tJbldpbmRvd2xlc3NNb2RlKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93
bkV2ZW50KSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgp
KQorICAgICAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZSh0cnVlKTsK
KyAgICAgICAgZm9jdXNQbHVnaW5FbGVtZW50KCk7CisgICAgfQorCisgICAgTlBFdmVudCB4RXZl
bnQ7CisgICAgaW5pdFhFdmVudCgmeEV2ZW50KTsKKworICAgIEludFBvaW50IHBvc3Rab29tUG9z
ID0gcm91bmRlZEludFBvaW50KG1fZWxlbWVudC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2Fs
KGV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpKTsKKworICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZXVwRXZlbnQpCisgICAgICAgIHNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRz
KCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZS5nZXQoKSk7CisgICAg
ZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpCisg
ICAgICAgIHNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0
Wm9vbVBvcywgbV9wYXJlbnRGcmFtZS5nZXQoKSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgeworICAgICAgICBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNp
ZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZS5nZXQo
KSk7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAvLyBUaGlzIGlzIGEgd29yay1hcm91bmQg
Zm9yIHBsdWdpbnMgd2hpY2ggY2hhbmdlIHRoZSBjdXJzb3IuIFdoZW4gdGhhdCBoYXBwZW5zIHdl
CisgICAgICAgIC8vIGdldCBvdXQgb2Ygc3luYyB3aXRoIEdESyBzb21laG93LiBSZXNldHRpbmcg
dGhlIGN1cnNvciBoZXJlIHNlZW1zIHRvIGZpeCB0aGUgaXNzdWUuCisgICAgICAgIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQorICAgICAgICAgICAgZ2Rr
X3dpbmRvd19zZXRfY3Vyc29yKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3BhcmVudEZyYW1lLT52
aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpLCAwKTsKKyNlbmRpZgor
ICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KHhF
dmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCB8
fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOwor
CisgICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZl
bnQudHlwZSA9IDk7IC8vIEZvY3VzSW4gZ2V0cyB1bnNldCBzb21ld2hlcmUKKyAgICBldmVudC5t
b2RlID0gTm90aWZ5Tm9ybWFsOworICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7
CisKKyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlRm9jdXNPdXRFdmVudCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1
cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAgWEZv
Y3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZlbnQudHlwZSA9
IDEwOyAvLyBGb2N1c091dCBnZXRzIHVuc2V0IHNvbWV3aGVyZQorICAgIGV2ZW50Lm1vZGUgPSBO
b3RpZnlOb3JtYWw7CisgICAgZXZlbnQuZGV0YWlsID0gTm90aWZ5RGV0YWlsTm9uZTsKKworICAg
IGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJl
bnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7
CisKKyAgICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQoreworICAgIGlmICghbV9pc1dpbmRv
d2VkKQorICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCAhcGFy
ZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIElmIHRoZSBwbHVnaW4gZGlkbid0IGxvYWQgc3VjZXNzZnVsbHksIG5v
IHBvaW50IGluIGNhbGxpbmcgc2V0d2luZG93CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0
YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT24gVW5p
eCwgb25seSBjYWxsIHBsdWdpbidzIHNldHdpbmRvdyBpZiBpdCdzIGZ1bGwtcGFnZSBvciB3aW5k
b3dlZAorICAgIGlmIChtX21vZGUgIT0gTlBfRlVMTCAmJiBtX21vZGUgIT0gTlBfRU1CRUQpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIENoZWNrIGlmIHRoZSBwbGF0Zm9ybVBsdWdpbldpZGdl
dCBzdGlsbCBleGlzdHMKKyAgICBpZiAobV9pc1dpbmRvd2VkICYmICFwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jbGlwUmVjdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgLy8gSWYgd2lkdGggb3IgaGVpZ2h0IGFyZSBudWxsLCBzZXQgdGhlIGNsaXBS
ZWN0IHRvIG51bGwsCisgICAgICAgIC8vIGluZGljYXRpbmcgdGhhdCB0aGUgcGx1Z2luIGlzIG5v
dCB2aXNpYmxlL3Njcm9sbGVkIG91dC4KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0
ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IDA7CisgICAgICAgIG1f
bnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5i
b3R0b20gPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENsaXBwaW5nIHJlY3RhbmdsZSBv
ZiB0aGUgcGx1Zy1pbjsgdGhlIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBk
cmF3YWJsZSBvciB3aW5kb3cuIAorICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSBt
X25wV2luZG93LnggKyBtX2NsaXBSZWN0LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC50b3AgPSBtX25wV2luZG93LnkgKyBtX2NsaXBSZWN0LnkoKTsKKyAgICAgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC5yaWdodCA9IG1fbnBXaW5kb3cueCArIG1fY2xpcFJlY3QueCgpICsgbV9jbGlw
UmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fbnBX
aW5kb3cueSArIG1fY2xpcFJlY3QueSgpICsgbV9jbGlwUmVjdC5oZWlnaHQoKTsKKyAgICB9CisK
KyAgICAvLyBGTEFTSCBXT1JLQVJPVU5EOiBPbmx5IHNldCBpbml0aWFsbHkuIE11bHRpcGxlIGNh
bGxzIHRvCisgICAgLy8gc2V0TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRvIGNyYXNoIGlu
IHdpbmRvd2VkIG1vZGUuCisgICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1
Z2luUXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVUaGFuT25jZSkgfHwgIW1faXNXaW5kb3dlZAor
ICAgICAgICB8fCBtX25wV2luZG93LndpZHRoID09IHN0YXRpY19jYXN0PHVpbnQzMl90PigtMSkg
fHwgbV9ucFdpbmRvdy5oZWlnaHQgPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0xKSkgeworICAg
ICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7CisgICAgICAgIG1f
bnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOworICAgIH0KKworICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CisgICAgc2V0Q2Fs
bGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
MCk7CisKKyNpZiBQTEFURk9STShHVEspCisgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIEd0a1h0QmluIHdpbGwgY2FsbCBndGtfd2lkZ2V0X3NpemVfYWxs
b2NhdGUsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gaXQgaGVyZS4KKyAgICBpZiAoIW1fbmVlZHNY
RW1iZWQpIHsKKyAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4ocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOwor
ICAgICAgICBndGtfeHRiaW5fcmVzaXplKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIG1fd2luZG93
UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9kZWxheWVkQWxsb2NhdGlvbiA9IG1fd2luZG93UmVjdDsKKyAgICB1cGRh
dGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOworI2VuZGlmCit9CisKKyNpZiBQTEFURk9STShH
VEspCit2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRDbGlwKCkKK3sK
KyAgICAvLyBJZiB0aGUgd2luZG93IGhhcyBub3QgYmVlbiBlbWJlZGRlZCB5ZXQgKHRoZSBwbHVn
IGFkZGVkKSwgd2UgZGVsYXkgc2V0dGluZyBpdHMgYWxsb2NhdGlvbiB1bnRpbCAKKyAgICAvLyB0
aGF0IHBvaW50LiBUaGlzIGZpeGVzIGlzc3VlcyB3aXRoIHNvbWUgSmF2YSBwbHVnaW4gaW5zdGFu
Y2VzIG5vdCByZW5kZXJpbmcgaW1tZWRpYXRlbHkuCisgICAgaWYgKCFtX3BsdWdBZGRlZCB8fCBt
X2RlbGF5ZWRBbGxvY2F0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3Rr
V2lkZ2V0KiB3aWRnZXQgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpOworICAgIGlmIChndGtfd2lk
Z2V0X2dldF9yZWFsaXplZCh3aWRnZXQpKSB7CisgICAgICAgIEdka1JlY3RhbmdsZSBjbGlwUmVj
dCA9IG1fY2xpcFJlY3Q7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICAgICAgR2RrUmVn
aW9uKiBjbGlwUmVnaW9uID0gZ2RrX3JlZ2lvbl9yZWN0YW5nbGUoJmNsaXBSZWN0KTsKKyAgICAg
ICAgZ2RrX3dpbmRvd19zaGFwZV9jb21iaW5lX3JlZ2lvbihndGtfd2lkZ2V0X2dldF93aW5kb3co
d2lkZ2V0KSwgY2xpcFJlZ2lvbiwgMCwgMCk7CisgICAgICAgIGdka19yZWdpb25fZGVzdHJveShj
bGlwUmVnaW9uKTsKKyNlbHNlCisgICAgICAgIGNhaXJvX3JlZ2lvbl90KiBjbGlwUmVnaW9uID0g
Y2Fpcm9fcmVnaW9uX2NyZWF0ZV9yZWN0YW5nbGUoJmNsaXBSZWN0KTsKKyAgICAgICAgZ2RrX3dp
bmRvd19zaGFwZV9jb21iaW5lX3JlZ2lvbihndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSwg
Y2xpcFJlZ2lvbiwgMCwgMCk7CisgICAgICAgIGNhaXJvX3JlZ2lvbl9kZXN0cm95KGNsaXBSZWdp
b24pOworI2VuZGlmCisgICAgfQorCisgICAgLy8gVGhlIGdvYWwgaXMgdG8gdHJ5IHRvIGF2b2lk
IGNhbGxpbmcgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlIGluIHRoZSBXZWJWaWV3J3MKKyAgICAv
LyBzaXplLWFsbG9jYXRlIG1ldGhvZC4gSXQgYmxvY2tzIHRoZSBtYWluIGxvb3AgYW5kIGlmIHRo
ZSB3aWRnZXQgaXMgb2Zmc2NyZWVuCisgICAgLy8gb3IgaGFzbid0IG1vdmVkIGl0IGlzbid0IHJl
cXVpcmVkLgorCisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGFsbG9jYXRpb24gaGFz
IG5vdCBjaGFuZ2VkLgorICAgIEd0a0FsbG9jYXRpb24gY3VycmVudEFsbG9jYXRpb247CisgICAg
Z3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZjdXJyZW50QWxsb2NhdGlvbik7Cisg
ICAgaWYgKGN1cnJlbnRBbGxvY2F0aW9uID09IG1fZGVsYXllZEFsbG9jYXRpb24pCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGJvdGggdGhlIG9sZCBhbmQg
dGhlIG5ldyBhbGxvY2F0aW9ucyBhcmUgb3V0c2lkZSB0aGUgZnJhbWUuCisgICAgSW50UmVjdCBj
dXJyZW50QWxsb2NhdGlvblJlY3QoY3VycmVudEFsbG9jYXRpb24pOworICAgIGN1cnJlbnRBbGxv
Y2F0aW9uUmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOworICAgIGlmIChjdXJyZW50QWxsb2Nh
dGlvblJlY3QuaXNFbXB0eSgpICYmIG1fY2xpcFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh3aWRnZXQpLCAiZGVsYXllZC1h
bGxvY2F0aW9uIiwgJm1fZGVsYXllZEFsbG9jYXRpb24pOworfQorI2VuZGlmCisKK3ZvaWQgUGx1
Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgaWYgKGlzUGFy
ZW50VmlzaWJsZSgpID09IHZpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIFdpZGdldDo6
c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBpZiAo
aXNTZWxmVmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAgICAgICAgaWYg
KHZpc2libGUpCisgICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3cocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGd0a193aWRnZXRfaGlkZShwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKTsKKyAgICB9CisjZW5kaWYKK30KKworTlBFcnJvciBQbHVnaW5WaWV3
OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBvdXRwdXRCdWZmZXIsIHVpbnQzMl90
IGZpbGVuYW1lTGVuZ3RoLCBjb25zdCBjaGFyKiBmaWxlbmFtZUJ1ZmZlcikKK3sKKyAgICAvLyBU
aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW55IGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBlbmNv
ZGluZyB0aGUgZmlsZW5hbWUKKyAgICAvLyBpcyBpbiwgYnV0IG1vc3QgcG9ydHMgc2VlbSB0byBh
c3N1bWUgVVRGLTggaGVyZSBhbmQgdGhlIHRlc3QgcGx1Z2luIGlzIGRlZmluaXRlbHkKKyAgICAv
LyBzZW5kaW5nIHRoZSBwYXRoIGluIFVURi04IGVuY29kaW5nLgorICAgIENTdHJpbmcgZmlsZW5h
bWUoZmlsZW5hbWVCdWZmZXIsIGZpbGVuYW1lTGVuZ3RoKTsKKworICAgIEdSZWZQdHI8R0ZpbGU+
IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfY29tbWFuZGxpbmVfYXJnKGZpbGVuYW1l
LmRhdGEoKSkpOworICAgIGlmIChnX2ZpbGVfcXVlcnlfZmlsZV90eXBlKGZpbGUuZ2V0KCksIEdf
RklMRV9RVUVSWV9JTkZPX05PTkUsIDApICE9IEdfRklMRV9UWVBFX1JFR1VMQVIpCisgICAgICAg
IHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBm
aWxlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhmaWxlLmdldCgpLAorICAgICAg
ICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCisgICAgICAgIEdfRklMRV9RVUVSWV9J
TkZPX05PTkUsCisgICAgICAgIDAsIDApKTsKKyAgICBpZiAoIWZpbGVJbmZvKQorICAgICAgICBy
ZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBHUmVmUHRyPEdGaWxlSW5wdXRTdHJl
YW0+IGlucHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9yZWFkKGZpbGUuZ2V0KCksIDAsIDAp
KTsKKyAgICBpZiAoIWlucHV0U3RyZWFtKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1Rf
Rk9VTkQ7CisKKyAgICBvdXRwdXRCdWZmZXIucmVzaXplKGdfZmlsZV9pbmZvX2dldF9zaXplKGZp
bGVJbmZvLmdldCgpKSk7CisgICAgZ3NpemUgYnl0ZXNSZWFkID0gMDsKKyAgICBpZiAoIWdfaW5w
dXRfc3RyZWFtX3JlYWRfYWxsKEdfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwKKyAg
ICAgICAgb3V0cHV0QnVmZmVyLmRhdGEoKSwgb3V0cHV0QnVmZmVyLnNpemUoKSwgJmJ5dGVzUmVh
ZCwgMCwgMCkpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZh
bHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVz
dWx0KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZUb29sa2l0Ogor
I2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUp
ID0gMjsKKyNlbHNlCisgICAgICAgICpzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9IDA7
CisjZW5kaWYKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKKyNpZiBQTEFURk9S
TShHVEspCisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworI2Vs
c2UKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworI2VuZGlm
CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6CisgICAgICAgICpzdGF0aWNf
Y2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9f
RVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5k
b3dsZXNzOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyAg
ICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1
Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFs
dWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisjaWYgUExB
VEZPUk0oR1RLKQorICAgIGNhc2UgTlBOVnhEaXNwbGF5OgorICAgICAgICBpZiAobV9uZWVkc1hF
bWJlZCkKKyAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9ICh2b2lkICopR0RLX0RJU1BMQVlf
WERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICoodm9pZCAqKil2YWx1ZSA9ICh2b2lkICopR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpLT54dGNsaWVudC54dGRpc3BsYXk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZ4dEFwcENvbnRl
eHQ6CisgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgKih2b2lkICoq
KXZhbHVlID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoR1RLX1hUQklOKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGRpc3BsYXkpOworCisgICAgICAgICAgICAqcmVz
dWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgKnJlc3Vs
dCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2Fz
ZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgR2RrV2luZG93KiBnZGtXaW5kb3cgPSBn
dGtfd2lkZ2V0X2dldF93aW5kb3cobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCkt
PnBsYXRmb3JtUGFnZUNsaWVudCgpKTsKKyAgICAgICAgR2RrV2luZG93KiB0b3BsZXZlbFdpbmRv
dyA9IGdka193aW5kb3dfZ2V0X3RvcGxldmVsKGdka1dpbmRvdyk7CisgICAgICAgIGlmICghdG9w
bGV2ZWxXaW5kb3cpIHsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9S
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgKnN0YXRpY19j
YXN0PFdpbmRvdyo+KHZhbHVlKSA9IEdES19XSU5ET1dfWFdJTkRPVyh0b3BsZXZlbFdpbmRvdyk7
CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIGNhc2UgTlBOVnhEaXNwbGF5OgorICAg
ICAgICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSBnZXRQbHVnaW5EaXNwbGF5KCk7Cisg
ICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5F
UklDX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVldpbmRvd05Q
T2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkgeworICAgICAgICAg
ICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBt
X3BhcmVudEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKKworICAgICAg
ICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJl
ZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1l
Lmh0bWw+CisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAgICAgICBfTlBO
X1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOworCisgICAgICAgICpzdGF0aWNfY2Fz
dDx2b2lkKio+KHZhbHVlKSA9IHdpbmRvd1NjcmlwdE9iamVjdDsKKworICAgICAgICAqcmVzdWx0
ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNh
c2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworICAgICAgICBpZiAobV9pc0phdmFTY3Jp
cHRQYXVzZWQpIHsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBOUE9iamVjdCog
cGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdO
YW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2Vs
ZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgIHBsdWdpblNjcmlwdE9i
amVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBP
YmplY3QoKTsKKworICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0
YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0
cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3Qp
CisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisg
ICAgICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVlKSA9IHBsdWdpblNjcmlwdE9iamVjdDsK
KworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAgICAgIEV2YXMq
IGV2YXMgPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmV2YXMoKTsKKyAgICAgICAgaWYgKCFldmFz
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEVjb3JlX0V2YXMqIGVjb3Jl
RXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7CisgICAgICAgICpzdGF0aWNf
Y2FzdDxYSUQqPih2YWx1ZSkgPSBzdGF0aWNfY2FzdDxXaW5kb3c+KGVjb3JlX2V2YXNfd2luZG93
X2dldChlY29yZUV2YXMpKTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZUb29sa2l0OgorICAgICAg
ICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVxdWlyZXNHdGtU
b29sS2l0KSkgeworICAgICAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0g
MjsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyNpZiBQTEFURk9S
TShHVEspCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBndGtfd2lkZ2V0X3F1ZXVl
X2RyYXdfYXJlYShHVEtfV0lER0VUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCByZWN0LngoKSwg
cmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKworICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7
CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJp
Z2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKKyAgICBpbnZhbGlk
YXRlV2luZG93bGVzc1BsdWdpblJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxp
ZGF0ZVJlZ2lvbihOUFJlZ2lvbikKK3sKKyAgICAvLyBUT0RPOiBvcHRpbWl6ZQorICAgIGludmFs
aWRhdGUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCit7CisjaWYgUExB
VEZPUk0oR1RLKQorICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIGd0a193aWRnZXRfcXVl
dWVfZHJhdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIGd0a193
aWRnZXRfcXVldWVfZHJhdyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCkpOworI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlm
Cit9CisKKyNpZiBQTEFURk9STShHVEspCitzdGF0aWMgdm9pZCBnZXRWaXN1YWxBbmRDb2xvcm1h
cChpbnQgZGVwdGgsIFZpc3VhbCoqIHZpc3VhbCwgQ29sb3JtYXAqIGNvbG9ybWFwKQoreworICAg
ICp2aXN1YWwgPSAwOworICAgICpjb2xvcm1hcCA9IDA7CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5
ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAg
aW50IHJtYWosIHJtaW47CisgICAgaWYgKGRlcHRoID09IDMyICYmICghWFJlbmRlclF1ZXJ5VmVy
c2lvbihkaXNwbGF5LCAmcm1haiwgJnJtaW4pIHx8ICghcm1haiAmJiBybWluIDwgNSkpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBYVmlzdWFsSW5mbyB0ZW1wbDsKKyAgICB0ZW1wbC5zY3JlZW4g
ID0gZ2RrX3NjcmVlbl9nZXRfbnVtYmVyKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CisgICAg
dGVtcGwuZGVwdGggICA9IGRlcHRoOworICAgIHRlbXBsLmNfY2xhc3MgPSBUcnVlQ29sb3I7Cisg
ICAgaW50IG5WaXN1YWxzOworICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvID0gWEdldFZpc3Vh
bEluZm8oZGlzcGxheSwgVmlzdWFsU2NyZWVuTWFzayB8IFZpc3VhbERlcHRoTWFzayB8IFZpc3Vh
bENsYXNzTWFzaywgJnRlbXBsLCAmblZpc3VhbHMpOworCisgICAgaWYgKCFuVmlzdWFscykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGRlcHRoID09IDMyKSB7CisgICAgICAgIGZvciAoaW50
IGlkeCA9IDA7IGlkeCA8IG5WaXN1YWxzOyArK2lkeCkgeworICAgICAgICAgICAgWFJlbmRlclBp
Y3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRpc3BsYXksIHZpc3Vh
bEluZm9baWR4XS52aXN1YWwpOworICAgICAgICAgICAgaWYgKGZvcm1hdC0+dHlwZSA9PSBQaWN0
VHlwZURpcmVjdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2spIHsKKyAgICAgICAgICAgICAg
ICAqdmlzdWFsID0gdmlzdWFsSW5mb1tpZHhdLnZpc3VhbDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICAqdmlzdWFs
ID0gdmlzdWFsSW5mb1swXS52aXN1YWw7CisKKyAgICBYRnJlZSh2aXN1YWxJbmZvKTsKKworICAg
IGlmICgqdmlzdWFsKQorICAgICAgICAqY29sb3JtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxh
eSwgR0RLX1JPT1RfV0lORE9XKCksICp2aXN1YWwsIEFsbG9jTm9uZSk7Cit9CisKK2dib29sZWFu
IFBsdWdpblZpZXc6OnBsdWdSZW1vdmVkQ2FsbGJhY2soR3RrU29ja2V0KiBzb2NrZXQsIFBsdWdp
blZpZXcqIHZpZXcpCit7CisgICAgdmlldy0+bV9wbHVnQWRkZWQgPSBmYWxzZTsKKyAgICByZXR1
cm4gVFJVRTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFjayhHdGtTb2Nr
ZXQqIHNvY2tldCwgUGx1Z2luVmlldyogdmlldykKK3sKKyAgICBBU1NFUlQoc29ja2V0KTsKKyAg
ICBBU1NFUlQodmlldyk7CisgICAgdmlldy0+bV9wbHVnQWRkZWQgPSB0cnVlOworICAgIHZpZXct
PnVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRDbGlwKCk7Cit9CisjZW5kaWYKKworYm9vbCBQbHVn
aW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKK3sKKyAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOworICAg
IEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOworCisg
ICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkgeworICAgICAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNY
RW1iZWQsICZtX25lZWRzWEVtYmVkKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7
CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgIH0KKwor
I2lmIFBMQVRGT1JNKEdUSykKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIEd0a1dp
ZGdldCogcGFnZUNsaWVudCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAg
ICAgICAgIC8vIElmIG91ciBwYXJlbnQgaXMgbm90IGFuY2hvcmVkIHRoZSBzdGFydHVwIHByb2Nl
c3Mgd2lsbAorICAgICAgICAgICAgLy8gZmFpbCBtaXNlcmFibHkgZm9yIFhFbWJlZCBwbHVnaW5z
IGEgYml0IGxhdGVyIG9uIHdoZW4KKyAgICAgICAgICAgIC8vIHdlIHRyeSB0byBnZXQgdGhlIElE
IG9mIG91ciB3aW5kb3cgKHNpbmNlIHJlYWxpemUgd2lsbAorICAgICAgICAgICAgLy8gZmFpbCks
IHNvIGxldCdzIGp1c3QgYWJvcnQgaGVyZS4KKyAgICAgICAgICAgIGlmICghZ3RrX3dpZGdldF9n
ZXRfcGFyZW50KHBhZ2VDbGllbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgbV9wbHVnQWRkZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHNldFBsYXRmb3Jt
V2lkZ2V0KGd0a19zb2NrZXRfbmV3KCkpOworICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUihwYWdlQ2xpZW50KSwgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAg
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICJwbHVnLWFk
ZGVkIiwgR19DQUxMQkFDSyhQbHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFjayksIHRoaXMpOwor
ICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAicGx1
Zy1yZW1vdmVkIiwgR19DQUxMQkFDSyhQbHVnaW5WaWV3OjpwbHVnUmVtb3ZlZENhbGxiYWNrKSwg
dGhpcyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoZ3Rr
X3h0YmluX25ldyhwYWdlQ2xpZW50LCAwKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0UGxh
dGZvcm1XaWRnZXQoMCk7CisgICAgICAgIG1fcGx1Z2luRGlzcGxheSA9IGdldFBsdWdpbkRpc3Bs
YXkoKTsKKyAgICB9CisKKyAgICBzaG93KCk7CisKKyAgICAgICAgTlBTZXRXaW5kb3dDYWxsYmFj
a1N0cnVjdCogd3MgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOworICAgICAgICB3
cy0+dHlwZSA9IDA7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5k
b3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKKyAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQp
IHsKKyAgICAgICAgICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQo
KTsKKyAgICAgICAgICAgIGd0a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOworICAgICAgICAgICAg
bV9ucFdpbmRvdy53aW5kb3cgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihndGtfc29ja2V0X2dl
dF9pZChHVEtfU09DS0VUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpKSk7CisgICAgICAgICAgICBH
ZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOworICAgICAg
ICAgICAgd3MtPmRpc3BsYXkgPSBHREtfV0lORE9XX1hESVNQTEFZKHdpbmRvdyk7CisgICAgICAg
ICAgICB3cy0+dmlzdWFsID0gR0RLX1ZJU1VBTF9YVklTVUFMKGdka193aW5kb3dfZ2V0X3Zpc3Vh
bCh3aW5kb3cpKTsKKyAgICAgICAgICAgIHdzLT5kZXB0aCA9IGdka192aXN1YWxfZ2V0X2RlcHRo
KGdka193aW5kb3dfZ2V0X3Zpc3VhbCh3aW5kb3cpKTsKKyAgICAgICAgICAgIHdzLT5jb2xvcm1h
cCA9IFhDcmVhdGVDb2xvcm1hcCh3cy0+ZGlzcGxheSwgR0RLX1JPT1RfV0lORE9XKCksIHdzLT52
aXN1YWwsIEFsbG9jTm9uZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX25wV2lu
ZG93LndpbmRvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChHVEtfWFRCSU4ocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSktPnh0d2luZG93KSk7CisgICAgICAgICAgICB3cy0+ZGlzcGxheSA9IEdU
S19YVEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+eHRkaXNwbGF5OworICAgICAgICAgICAg
d3MtPnZpc3VhbCA9IEdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+eHRjbGllbnQu
eHR2aXN1YWw7CisgICAgICAgICAgICB3cy0+ZGVwdGggPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0ZGVwdGg7CisgICAgICAgICAgICB3cy0+Y29sb3JtYXAg
PSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7
CisgICAgICAgIH0KKyAgICAgICAgWEZsdXNoKHdzLT5kaXNwbGF5KTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAg
bV9ucFdpbmRvdy53aW5kb3cgPSAwOyAvLyBOb3QgdXNlZD8KKworICAgICAgICBHZGtTY3JlZW4q
IGdzY3JlZW4gPSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7CisgICAgICAgIEdka1Zpc3VhbCog
Z3Zpc3VhbCA9IGdka19zY3JlZW5fZ2V0X3N5c3RlbV92aXN1YWwoZ3NjcmVlbik7CisKKyAgICAg
ICAgaWYgKGdka192aXN1YWxfZ2V0X2RlcHRoKGd2aXN1YWwpID09IDMyIHx8ICFtX3BsdWdpbi0+
cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtSZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCkp
IHsKKyAgICAgICAgICAgIGdldFZpc3VhbEFuZENvbG9ybWFwKDMyLCAmbV92aXN1YWwsICZtX2Nv
bG9ybWFwKTsKKyAgICAgICAgICAgIHdzLT5kZXB0aCA9IDMyOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFtX3Zpc3VhbCkgeworICAgICAgICAgICAgZ2V0VmlzdWFsQW5kQ29sb3JtYXAoZ2Rr
X3Zpc3VhbF9nZXRfZGVwdGgoZ3Zpc3VhbCksICZtX3Zpc3VhbCwgJm1fY29sb3JtYXApOworICAg
ICAgICAgICAgd3MtPmRlcHRoID0gZ2RrX3Zpc3VhbF9nZXRfZGVwdGgoZ3Zpc3VhbCk7CisgICAg
ICAgIH0KKworICAgICAgICB3cy0+ZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19k
aXNwbGF5X2dldF9kZWZhdWx0KCkpOworICAgICAgICB3cy0+dmlzdWFsID0gbV92aXN1YWw7Cisg
ICAgICAgIHdzLT5jb2xvcm1hcCA9IG1fY29sb3JtYXA7CisKKyAgICAgICAgbV9ucFdpbmRvdy54
ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy55ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0
aCA9IC0xOworICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IC0xOworICAgIH0KKyNlbHNlCisg
ICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7CisgICAgbV9wbHVnaW5EaXNwbGF5ID0gZ2V0UGx1Z2lu
RGlzcGxheSgpOworCisgICAgc2hvdygpOworCisgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVj
dCogd3MgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOworICAgIHdzLT50eXBlID0g
MDsKKworICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgIG1f
bnBXaW5kb3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/CisKKyAgICBTY3JlZW4qIHNjcmVlbiA9
IHN0YXRpY19jYXN0PFNjcmVlbio+KGVjb3JlX3hfZGVmYXVsdF9zY3JlZW5fZ2V0KCkpOworICAg
IG1fdmlzdWFsID0gc3RhdGljX2Nhc3Q8VmlzdWFsKj4oZWNvcmVfeF9kZWZhdWx0X3Zpc3VhbF9n
ZXQobV9wbHVnaW5EaXNwbGF5LCBzY3JlZW4pKTsKKyAgICBtX2NvbG9ybWFwID0gZWNvcmVfeF9k
ZWZhdWx0X2NvbG9ybWFwX2dldChtX3BsdWdpbkRpc3BsYXksIHNjcmVlbik7CisKKyAgICB3cy0+
ZGVwdGggPSBlY29yZV94X2RlZmF1bHRfZGVwdGhfZ2V0KG1fcGx1Z2luRGlzcGxheSwgc2NyZWVu
KTsKKyAgICB3cy0+ZGlzcGxheSA9IG1fcGx1Z2luRGlzcGxheTsKKyAgICB3cy0+dmlzdWFsID0g
bV92aXN1YWw7CisgICAgd3MtPmNvbG9ybWFwID0gbV9jb2xvcm1hcDsKKworICAgIG1fbnBXaW5k
b3cueCA9IDA7CisgICAgbV9ucFdpbmRvdy55ID0gMDsKKyAgICBtX25wV2luZG93LndpZHRoID0g
LTE7CisgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKKyNlbmRpZgorCisgICAgbV9ucFdpbmRv
dy53c19pbmZvID0gd3M7CisKKyAgICAvLyBUT0RPIHJlbW92ZSBpbiBmYXZvciBvZiBudWxsIGV2
ZW50cywgbGlrZSBtYWMgcG9ydD8KKyAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFp
bnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKQorICAgICAgICB1cGRhdGVQ
bHVnaW5XaWRnZXQoKTsgLy8gd2FzOiBzZXROUFdpbmRvd0lmTmVlZGVkKCksIGJ1dCB0aGlzIGRv
ZXNuJ3QgcHJvZHVjZSAweDAgcmVjdHMgYXQgZmlyc3QgZ28KKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgaWYgKG1fZHJh
d2FibGUpIHsKKyAgICAgICAgWEZyZWVQaXhtYXAoZ2V0UGx1Z2luRGlzcGxheSgpLCBtX2RyYXdh
YmxlKTsKKyAgICAgICAgbV9kcmF3YWJsZSA9IDA7CisgICAgfQorCisjaWYgUExBVEZPUk0oR1RL
KQorICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gcGxhdGZvcm1XaWRnZXQoKTsKKyAgICBpZiAod2lk
Z2V0KSB7CisgICAgICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50
KHdpZGdldCk7CisgICAgICAgIEFTU0VSVChwYXJlbnQpOworICAgICAgICBndGtfY29udGFpbmVy
X3JlbW92ZShHVEtfQ09OVEFJTkVSKHBhcmVudCksIHdpZGdldCk7CisgICAgfQorI2VuZGlmCit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3NzUwNjU1Li41ODg5MzEwIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMt
MDItMjcgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgW0VGTF1bR1RLXSBTaGFyZSBwbHVnaW4ncyBpbXBsZW1lbnRhdGlvbiBiZXR3ZWVuIEVG
TCBhbmQgR3RrIHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzA1OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dDogQWRkIGVjb3JlX3gg
aW5jbHVkZXMgYW5kIGxpYnJhcmllcy4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVt
cFJlbmRlclRyZWUuY3BwOiBBZGQgZWNvcmVfeF9pbml0L3NodXRkb3duIGRvIER1bXBSZW5kZXJl
clRyZWUgdG8gc3VwcG9ydCBwbHVnaW5zIGluaXRpYWxpemF0aW9uLgorICAgICAgICAoaW5pdEVm
bCk6CisgICAgICAgIChzaHV0ZG93bkVmbCk6CisKIDIwMTMtMDItMjUgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxNDM4OTUuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01h
a2VMaXN0cy50eHQgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKaW5k
ZXggNjdmOTA1ZC4uNmQ4YzVlNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZs
L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3Rz
LnR4dApAQCAtMzMsNiArMzMsNyBAQCBzZXQoRHVtcFJlbmRlclRyZWVfTElCUkFSSUVTCiAgICAg
JHtFQ09SRV9FVkFTX0xJQlJBUklFU30KICAgICAke0VDT1JFX0ZJTEVfTElCUkFSSUVTfQogICAg
ICR7RUNPUkVfSU5QVVRfTElCUkFSSUVTfQorICAgICR7RUNPUkVfWF9MSUJSQVJJRVN9CiAgICAg
JHtFREpFX0xJQlJBUklFU30KICAgICAke0VJTkFfTElCUkFSSUVTfQogICAgICR7RU9fTElCUkFS
SUVTfQpAQCAtMTA0LDYgKzEwNSw3IEBAIHNldChEdW1wUmVuZGVyVHJlZV9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgJHtFQ09SRV9FVkFTX0lOQ0xVREVfRElSU30KICAgICAke0VDT1JFX0ZJTEVf
SU5DTFVERV9ESVJTfQogICAgICR7RUNPUkVfSU5QVVRfSU5DTFVERV9ESVJTfQorICAgICR7RUNP
UkVfWF9JTkNMVURFX0RJUlN9CiAgICAgJHtFREpFX0lOQ0xVREVfRElSU30KICAgICAke0VJTkFf
SU5DTFVERV9ESVJTfQogICAgICR7RU9fSU5DTFVERV9ESVJTfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggNmRlMmQ0YS4uMmMxYWY0MyAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC00Miw2ICs0Miw3
IEBACiAjaW5jbHVkZSA8RWNvcmUuaD4KICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVk
ZSA8RWNvcmVfRmlsZS5oPgorI2luY2x1ZGUgPEVjb3JlX1guaD4KICNpbmNsdWRlIDxFZGplLmg+
CiAjaW5jbHVkZSA8RXZhcy5oPgogI2luY2x1ZGUgPGZvbnRjb25maWcvZm9udGNvbmZpZy5oPgpA
QCAtMzc3LDExICszNzgsMjAgQEAgc3RhdGljIGJvb2wgaW5pdEVmbCgpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKKyAgICBpZiAoIWVjb3JlX3hfaW5pdCgwKSkgeworICAgICAgICBl
ZGplX3NodXRkb3duKCk7CisgICAgICAgIGVjb3JlX2ZpbGVfc2h1dGRvd24oKTsKKyAgICAgICAg
ZWNvcmVfZXZhc19zaHV0ZG93bigpOworICAgICAgICBld2tfc2h1dGRvd24oKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgdm9p
ZCBzaHV0ZG93bkVmbCgpCiB7CisgICAgZWNvcmVfeF9zaHV0ZG93bigpOwogICAgIGV3a19zaHV0
ZG93bigpOwogICAgIGVkamVfc2h1dGRvd24oKTsKICAgICBlY29yZV9maWxlX3NodXRkb3duKCk7
Cg==
</data>
<flag name="review"
          id="211193"
          type_id="1"
          status="-"
          setter="pnormand"
    />
    <flag name="commit-queue"
          id="211194"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198129</attachid>
            <date>2013-04-15 09:02:17 -0700</date>
            <delta_ts>2013-04-16 08:43:07 -0700</delta_ts>
            <desc>updated, rebased, applied Philippe&apos;s and Gyuyoung&apos;s comments</desc>
            <filename>bug70592.patch</filename>
            <type>text/plain</type>
            <size>85260</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkMmRkZGQ2Li43MTAxMjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTMtMDQtMTUgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5j
b20+CisKKyAgICAgICAgW0VGTF1bR1RLXSBTaGFyZSBwbHVnaW4ncyBpbXBsZW1lbnRhdGlvbiBi
ZXR3ZWVuIEVGTCBhbmQgR3RrIHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzA1OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNZXJnZSBQbHVnaW5WaWV3R3RrLmNwcCBhbmQgUGx1Z2luVmlld0Vm
bC5jcHAgdG8gUGx1Z2luVmlld1gxMS5jcHAuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTog
QWRkIGluY2x1ZGUgcGF0aCB0byBndGsyeHRiaW4uaCBoZWFkZXIgZmlsZS4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOiBDaGFuZ2UgUGx1Z2luVmlld0d0ay5jcHAgdG8gUGx1Z2luVmll
d1gxMS5jcHAgc291cmNlLgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBDaGFuZ2UgUGx1
Z2luVmlld0VmbC5jcHAgdG8gUGx1Z2luVmlld0VmbC5jcHAgc291cmNlLgorICAgICAgICAqIHBs
dWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsdWdpbnMv
eDExL1BsdWdpblZpZXdYMTEuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luVmlld0d0ay5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRSb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBsdWdpbkRpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldEZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGlkZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlucHV0RXZl
bnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppbml0WEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpoYW5kbGVGb2N1c0luRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
aGFuZGxlRm9jdXNPdXRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQ
YXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlV2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmludmFsaWRhdGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9y
Y2VSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmlzdWFsQW5kQ29sb3JtYXApOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGx1Z1JlbW92ZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisKIDIwMTMtMDQtMTUgIEFydmlkIE5pbHNzb24gIDxh
bmlsc3NvbkByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XVtDU1MgRmlsdGVyc10gTm9u
LWltYWdlIGNvbnRlbnQgZGlzYXBwZWFycyB3aGVuIGZpbHRlciBhcHBsaWVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IGEzYjhmNGEuLjU1YzdmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC04
NSw2ICs4NSw3IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2RlciBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
IFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ayBcCiAJLUkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA1Yjc3MjM5MS4uMjJhYjJl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC02Mjc0LDggKzYyNzQsOCBAQCB3
ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4
dGJpbi5jIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCiAJU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL2d0ay94ZW1iZWQuaAorCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3gxMS9QbHVnaW5WaWV3WDExLmNwcAogcGxhdGZv
cm1ndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdl
dEJhY2tpbmdTdG9yZVgxMS5jcHAKIGlmIFVTRV9PUEVOR0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggYmQ0MDM2OC4uMjNiNWQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTEzLDYgKzEzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vdGV4dC9lZmwiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsdWdpbnMvZWZs
IgorICAgICIke1dFQkNPUkVfRElSfS9wbHVnaW5zL3gxMSIKICkKIAogbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCkBAIC0xODUsNyArMTg2LDcgQEAgaWYgKEVOQUJMRV9ORVRTQ0FQRV9QTFVH
SU5fQVBJKQogICAgICAgICBwbHVnaW5zL1BsdWdpblZpZXcuY3BwCiAKICAgICAgICAgcGx1Z2lu
cy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKLSAgICAgICAgcGx1Z2lucy9lZmwvUGx1Z2luVmll
d0VmbC5jcHAKKyAgICAgICAgcGx1Z2lucy94MTEvUGx1Z2luVmlld1gxMS5jcHAKICAgICApCiBl
bHNlICgpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhZTg3YmZkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1Bs
dWdpblZpZXdFZmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQ4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9s
b2dpYQotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3Rl
bXMKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MUGx1Z0luRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0Jh
c2UuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSAicnVudGltZS9KU0xv
Y2suaCIKLSNpbmNsdWRlICJydW50aW1lL09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlIDxFY29yZV9F
dmFzLmg+Ci0jaW5jbHVkZSA8RWNvcmVfWC5oPgotI2luY2x1ZGUgPEV2YXMuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1ib29sIFBsdWdp
blZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIW1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLQotICAgIGJvb2wgYWNjZXB0
ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsK
LQotICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgIFBsdWdpblZpZXc6OnNldEN1cnJl
bnRQbHVnaW5WaWV3KDApOwotICAgIHJldHVybiBhY2NlcHRlZDsKLX0KLQotI2lmIGRlZmluZWQo
WFBfVU5JWCkKLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZl
bnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2
ZW50KiBldmVudCkKLXsKLSAgICBOUEV2ZW50IHhFdmVudDsKLQotI2lmIGRlZmluZWQoWFBfVU5J
WCkKLSAgICBjb25zdCBJbnRSZWN0IHJlY3QgPSBwYXJlbnQoKS0+Y29udGVudHNUb1NjcmVlbihJ
bnRSZWN0KDAsIDAsIGV2ZW50LT5vZmZzZXRYKCksIGV2ZW50LT5vZmZzZXRZKCkpKTsKLSAgICBj
b25zdCBpbnQgZXZlbnRYID0gcmVjdC53aWR0aCgpOwotICAgIGNvbnN0IGludCBldmVudFkgPSBy
ZWN0LmhlaWdodCgpOwotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZW1vdmVFdmVudAotICAgICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2VvdXRFdmVudAotICAgICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgeEV2ZW50LnR5cGUgPSBNb3Rpb25Ob3RpZnk7
Ci0gICAgICAgIHhFdmVudC54bW90aW9uLnggPSBldmVudFg7Ci0gICAgICAgIHhFdmVudC54bW90
aW9uLnkgPSBldmVudFk7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCkgewotICAgICAgICB4RXZlbnQudHlwZSA9IEJ1dHRvblByZXNz
OwotICAgICAgICB4RXZlbnQueGJ1dHRvbi54ID0gZXZlbnRYOwotICAgICAgICB4RXZlbnQueGJ1
dHRvbi55ID0gZXZlbnRZOwotICAgICAgICB4RXZlbnQueGJ1dHRvbi5idXR0b24gPSBldmVudC0+
YnV0dG9uKCkgKyAxOyAvLyBET00gTW91c2VFdmVudCBjb3VudHMgZnJvbSAwLCBhbmQgWEJ1dHRv
bkV2ZW50IGZyb20gMS4KLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNldXBFdmVudCkgewotICAgICAgICB4RXZlbnQudHlwZSA9IEJ1dHRvblJlbGVhc2U7
Ci0gICAgICAgIHhFdmVudC54YnV0dG9uLnggPSBldmVudFg7Ci0gICAgICAgIHhFdmVudC54YnV0
dG9uLnkgPSBldmVudFk7Ci0gICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5i
dXR0b24oKSArIDE7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAg
aWYgKGRpc3BhdGNoTlBFdmVudCh4RXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9v
bCBmb2N1c2VkKQotewotICAgIGlmIChmb2N1c2VkKQotICAgICAgICBtX2VsZW1lbnQtPmRvY3Vt
ZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7Ci0KLSAgICBXaWRnZXQ6OnNldEZvY3Vz
KGZvY3VzZWQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNob3coKQotewotICAgIHNldFNlbGZW
aXNpYmxlKHRydWUpOwotCi0gICAgV2lkZ2V0OjpzaG93KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmll
dzo6aGlkZSgpCi17Ci0gICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOwotCi0gICAgV2lkZ2V0Ojpo
aWRlKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghbV9pc1N0YXJ0ZWQpCi0gICAg
ICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKLXsKLSAgICBXaWRnZXQ6OnNl
dFBhcmVudChwYXJlbnQpOwotCi0gICAgaWYgKHBhcmVudCkKLSAgICAgICAgaW5pdCgpOwotfQot
Ci12b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZO
ZWVkZWQoKQotewotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudFZpc2libGUoYm9vbCB2
aXNpYmxlKQotewotICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKLX0KLQot
TlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZm
ZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmKQotewotICAgIFN0cmluZyBmaWxlbmFt
ZShidWYsIGxlbik7Ci0KLSAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkK
LSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3Ry
aW5nKDcpOwotI2Vsc2UKLSAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7
Ci0jZW5kaWYKLQotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmICghZ2V0RmlsZVNpemUoZmls
ZW5hbWUsIHNpemUpKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAg
ICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oZmlsZW5hbWUudXRmOCgpLmRhdGEoKSwgInIiKTsK
LSAgICBpZiAoIWZpbGVIYW5kbGUpCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VO
RDsKLQotICAgIGJ1ZmZlci5yZXNpemUoc2l6ZSk7Ci0gICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFk
KGJ1ZmZlci5kYXRhKCksIDEsIHNpemUsIGZpbGVIYW5kbGUpOwotCi0gICAgZmNsb3NlKGZpbGVI
YW5kbGUpOwotCi0gICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQotICAgICAgICByZXR1cm4gTlBFUlJf
RklMRV9OT1RfRk9VTkQ7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLWJvb2wg
UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7
Ci0gICAgY2FzZSBOUE5WVG9vbGtpdDoKLSAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4o
dmFsdWUpID0gMDsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKLSAgICAgICAg
KnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOwotICAgICAgICAqcmVzdWx0ID0g
TlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5WamF2
YXNjcmlwdEVuYWJsZWRCb29sOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUp
ID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKLSAgICAgICAgKnN0
YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOwotICAgICAgICAqcmVzdWx0ID0gTlBF
UlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdl
dFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0
KQotewotICAgIGlmICghdmFsdWUgfHwgIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgIGNhc2UgTlBOVnhEaXNwbGF5OgotICAgICAg
ICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSBzdGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNv
cmVfeF9kaXNwbGF5X2dldCgpKTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDoKLSAgICAg
ICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKLSAgICAgICAgaWYgKG1faXNKYXZhU2Ny
aXB0UGF1c2VkKSB7Ci0gICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgTlBPYmplY3Qq
IHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3Jp
cHROUE9iamVjdCgpOwotCi0gICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9i
amVjdCkKLSAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7
Ci0KLSAgICAgICAgKnN0YXRpY19jYXN0PHZvaWQqKj4odmFsdWUpID0gd2luZG93U2NyaXB0T2Jq
ZWN0OwotCi0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7Ci0g
ICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkgewotICAgICAgICAgICAgKnJlc3VsdCA9
IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOwotCi0gICAgICAg
IGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1Rh
Z05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAg
ICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1l
bnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOwotCi0gICAgICAgIC8vIFJldHVybiB2YWx1
ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8v
d3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAg
aWYgKHBsdWdpblNjcmlwdE9iamVjdCkKLSAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBs
dWdpblNjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAgKnN0YXRpY19jYXN0PHZvaWQqKj4odmFsdWUp
ID0gcGx1Z2luU2NyaXB0T2JqZWN0OwotCi0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJP
UjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WbmV0c2NhcGVX
aW5kb3c6IHsKLSAgICAgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fcGFy
ZW50RnJhbWUtPnZpZXcoKS0+ZXZhc09iamVjdCgpKTsKLSAgICAgICAgaWYgKCFldmFzKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9
IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7Ci0gICAgICAgICpzdGF0aWNfY2FzdDxY
SUQqPih2YWx1ZSkgPSBzdGF0aWNfY2FzdDxXaW5kb3c+KGVjb3JlX2V2YXNfd2luZG93X2dldChl
Y29yZUV2YXMpKTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjYXNlIE5QTlZUb29sa2l0OgotICAgICAgICBpZiAo
bV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVxdWlyZXNHdGtUb29sS2l0
KSkgewotICAgICAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gMjsKLSAg
ICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6OmludmFsaWRh
dGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQ
bHVnaW5SZWN0KHJlY3QpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5Q
UmVjdCogcmVjdCkKLXsKLSAgICBpZiAoIXJlY3QpIHsKLSAgICAgICAgaW52YWxpZGF0ZSgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW52YWxpZGF0ZVJlY3QoSW50UmVjdChyZWN0
LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9t
IC0gcmVjdC0+dG9wKSk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihO
UFJlZ2lvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OmZvcmNlUmVkcmF3KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFBsdWdp
blZpZXc6OnBsYXRmb3JtU3RhcnQoKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAg
QVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7Ci0KLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpblZp
ZXc6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM1YmNiNzIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4OTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgS2FrYWksIEluYy4g
PGJyaWFuQGtha2FpLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5j
bHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGb2N1c0NvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3Qu
aCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
b3N0V2luZG93LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2ZW50
LmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3Vz
ZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5NYWlu
VGhyZWFkU2NoZWR1bGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3BhdGlh
bE5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgInJ1
bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvSlNMb2NrLmg+Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotI2luY2x1ZGUg
PGdka2NvbmZpZy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi0jZGVmaW5lIFN0
cmluZyBYdFN0cmluZ1R5cGUKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgImd0
azJ4dGJpbi5oIgotI2RlZmluZSBCb29sIGludCAvLyB0aGlzIGdvdCB1bmRlZmluZWQgc29tZXdo
ZXJlCi0jZGVmaW5lIFN0YXR1cyBpbnQgLy8gZGl0dG8KLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9u
cy9YcmVuZGVyLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8teGxpYi5oPgotI2luY2x1ZGUgPGdkay9nZGt4
Lmg+Ci0KLXVzaW5nIEpTQzo6RXhlY1N0YXRlOwotdXNpbmcgSlNDOjpJbnRlcnByZXRlcjsKLXVz
aW5nIEpTQzo6SlNMb2NrOwotdXNpbmcgSlNDOjpKU09iamVjdDsKLQotdXNpbmcgc3RkOjptaW47
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKLQotYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQo
TlBFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gc2FuaXR5IGNoZWNrCi0gICAgaWYgKCFtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwotICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0KLSAgICBib29sIGFjY2VwdGVk
ID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwot
Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcoMCk7Ci0gICAgcmV0dXJuIGFjY2VwdGVkOwotfQotCi1zdGF0aWMgV2luZG93
IGdldFJvb3RXaW5kb3coRnJhbWUqIHBhcmVudEZyYW1lKQotewotICAgIEd0a1dpZGdldCogcGFy
ZW50V2lkZ2V0ID0gcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBh
Z2VDbGllbnQoKTsKLSAgICBHZGtTY3JlZW4qIGdzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3Jl
ZW4ocGFyZW50V2lkZ2V0KTsKLSAgICByZXR1cm4gR0RLX1dJTkRPV19YV0lORE9XKGdka19zY3Jl
ZW5fZ2V0X3Jvb3Rfd2luZG93KGdzY3JlZW4pKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojp1cGRh
dGVQbHVnaW5XaWRnZXQoKQotewotICAgIGlmICghcGFyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7Ci0gICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSB0b0ZyYW1lVmlldyhwYXJlbnQoKSk7Ci0KLSAgICBJbnRSZWN0IG9sZFdpbmRv
d1JlY3QgPSBtX3dpbmRvd1JlY3Q7Ci0gICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJl
Y3Q7Ci0KLSAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dp
bmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKTsKLSAgICBt
X2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKLSAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2lu
ZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKLQotICAgIGlmIChtX3dpbmRvd1JlY3Qg
PT0gb2xkV2luZG93UmVjdCAmJiBtX2NsaXBSZWN0ID09IG9sZENsaXBSZWN0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1
bGx5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faXNXaW5kb3dlZCAmJiAhbV93aW5k
b3dSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BM
QVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgICAgIGlmIChtX2Ry
YXdhYmxlKQotICAgICAgICAgICAgWEZyZWVQaXhtYXAoZGlzcGxheSwgbV9kcmF3YWJsZSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgbV9kcmF3YWJsZSA9IFhDcmVhdGVQaXhtYXAoZGlzcGxheSwg
Z2V0Um9vdFdpbmRvdyhtX3BhcmVudEZyYW1lLmdldCgpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChOUFNldFdpbmRvd0NhbGxi
YWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT5kZXB0aCk7Ci0gICAgICAgIFhTeW5jKGRp
c3BsYXksIGZhbHNlKTsgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZlciBrbm93cyBhYm91dCB0
aGUgRHJhd2FibGUKLSAgICB9Ci0KLSAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQotewotICAgIEFTU0VSVChwbGF0
Zm9ybVBsdWdpbldpZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOwotICAgIGlmIChmb2N1c2Vk
ICYmIHBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhwbGF0
Zm9ybVdpZGdldCgpKTsKLSAgICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQpOwotfQotCi12b2lk
IFBsdWdpblZpZXc6OnNob3coKQotewotICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgp
ID09IHBsYXRmb3JtV2lkZ2V0KCkpOwotICAgIFdpZGdldDo6c2hvdygpOwotfQotCi12b2lkIFBs
dWdpblZpZXc6OmhpZGUoKQotewotICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpID09
IHBsYXRmb3JtV2lkZ2V0KCkpOwotICAgIFdpZGdldDo6aGlkZSgpOwotfQotCi12b2lkIFBsdWdp
blZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xv
YWRlZFN1Y2Nlc3NmdWxseSkgewotICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRl
eHQsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0TlBXaW5kb3dJZk5l
ZWRlZCgpOwotCi0gICAgaWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFtX2RyYXdhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5
ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAg
Y29uc3QgYm9vbCBzeW5jWCA9IG1fcGx1Z2luRGlzcGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0g
ZGlzcGxheTsKLQotICAgIEludFJlY3QgZXhwb3NlZFJlY3QocmVjdCk7Ci0gICAgZXhwb3NlZFJl
Y3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKLSAgICBleHBvc2VkUmVjdC5tb3ZlKC1mcmFtZVJl
Y3QoKS54KCksIC1mcmFtZVJlY3QoKS55KCkpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gZHJhd2FibGVTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShk
aXNwbGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZHJhd2FibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV92aXN1YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93aW5kb3dSZWN0LndpZHRoKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93aW5kb3dS
ZWN0LmhlaWdodCgpKSk7Ci0KLSAgICBpZiAobV9pc1RyYW5zcGFyZW50KSB7Ci0gICAgICAgIC8v
IElmIHdlIGhhdmUgYSAzMiBiaXQgZHJhd2FibGUgYW5kIHRoZSBwbHVnaW4gd2FudHMgdHJhbnNw
YXJlbmN5LAotICAgICAgICAvLyB3ZSdsbCBjbGVhciB0aGUgZXhwb3NlZCBhcmVhIHRvIHRyYW5z
cGFyZW50IGZpcnN0LiAgT3RoZXJ3aXNlLAotICAgICAgICAvLyB3ZSdkIGVuZCB1cCB3aXRoIGp1
bmsgaW4gdGhlcmUgZnJvbSB0aGUgbGFzdCBwYWludCwgb3IsIHdvcnNlLAotICAgICAgICAvLyB1
bmluaXRpYWxpemVkIGRhdGEuCi0gICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShkcmF3YWJsZVN1cmZhY2UuZ2V0KCkpKTsKLQotICAgICAgICBpZiAoIShj
YWlyb19zdXJmYWNlX2dldF9jb250ZW50KGRyYXdhYmxlU3VyZmFjZS5nZXQoKSkgJiBDQUlST19D
T05URU5UX0FMUEhBKSkgewotICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBmYWtlIGl0IHdoZW4g
d2UgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIG9uIG91cgotICAgICAgICAgICAgLy8gcGl4
bWFwLiAgSWYgdGhhdCdzIG5vdCBwb3NzaWJsZSwgYXQgbGVhc3QgY2xlYXIgdGhlIHdpbmRvdyB0
bwotICAgICAgICAgICAgLy8gYXZvaWQgZHJhd2luZyBhcnRpZmFjdHMuCi0KLSAgICAgICAgICAg
IC8vIFRoaXMgV291bGQgbm90IHdvcmsgd2l0aG91dCBkb3VibGUgYnVmZmVyaW5nLCBidXQgd2Ug
YWx3YXlzIHVzZSBpdC4KLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5n
ZXQoKSwgY2Fpcm9fZ2V0X2dyb3VwX3RhcmdldChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1fd2luZG93UmVj
dC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRv
cihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFS
KTsKLQotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IuZ2V0KCksIGV4cG9zZWRSZWN0LngoKSwg
ZXhwb3NlZFJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3Qud2lk
dGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBjYWlyb19maWxsKGNyLmdldCgp
KTsKLSAgICB9Ci0KLSAgICBYRXZlbnQgeGV2ZW50OwotICAgIG1lbXNldCgmeGV2ZW50LCAwLCBz
aXplb2YoWEV2ZW50KSk7Ci0gICAgWEdyYXBoaWNzRXhwb3NlRXZlbnQmIGV4cG9zZUV2ZW50ID0g
eGV2ZW50LnhncmFwaGljc2V4cG9zZTsKLSAgICBleHBvc2VFdmVudC50eXBlID0gR3JhcGhpY3NF
eHBvc2U7Ci0gICAgZXhwb3NlRXZlbnQuZGlzcGxheSA9IGRpc3BsYXk7Ci0gICAgZXhwb3NlRXZl
bnQuZHJhd2FibGUgPSBtX2RyYXdhYmxlOwotICAgIGV4cG9zZUV2ZW50LnggPSBleHBvc2VkUmVj
dC54KCk7Ci0gICAgZXhwb3NlRXZlbnQueSA9IGV4cG9zZWRSZWN0LnkoKTsKLSAgICBleHBvc2VF
dmVudC53aWR0aCA9IGV4cG9zZWRSZWN0LngoKSArIGV4cG9zZWRSZWN0LndpZHRoKCk7IC8vIGZs
YXNoIGJ1Zz8gaXQgdGhpbmtzIHdpZHRoIGlzIHRoZSByaWdodCBpbiB0cmFuc3BhcmVudCBtb2Rl
Ci0gICAgZXhwb3NlRXZlbnQuaGVpZ2h0ID0gZXhwb3NlZFJlY3QueSgpICsgZXhwb3NlZFJlY3Qu
aGVpZ2h0KCk7IC8vIGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIGhlaWdodCBpcyB0aGUgYm90dG9tIGlu
IHRyYW5zcGFyZW50IG1vZGUKLQotICAgIGRpc3BhdGNoTlBFdmVudCh4ZXZlbnQpOwotCi0gICAg
aWYgKHN5bmNYKQotICAgICAgICBYU3luYyhtX3BsdWdpbkRpc3BsYXksIGZhbHNlKTsgLy8gc3lu
YyBjaGFuZ2VzIGJ5IHBsdWdpbgotCi0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKTsKLSAgICBjYWlyb19zYXZlKGNyKTsKLQotICAgIGNhaXJvX3NldF9z
b3VyY2Vfc3VyZmFjZShjciwgZHJhd2FibGVTdXJmYWNlLmdldCgpLCBmcmFtZVJlY3QoKS54KCks
IGZyYW1lUmVjdCgpLnkoKSk7Ci0KLSAgICBjYWlyb19yZWN0YW5nbGUoY3IsCi0gICAgICAgICAg
ICAgICAgICAgIGZyYW1lUmVjdCgpLngoKSArIGV4cG9zZWRSZWN0LngoKSwgZnJhbWVSZWN0KCku
eSgpICsgZXhwb3NlZFJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICBleHBvc2VkUmVjdC53
aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSk7Ci0gICAgY2Fpcm9fY2xpcChjcik7Ci0KLSAg
ICBpZiAobV9pc1RyYW5zcGFyZW50KQotICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENB
SVJPX09QRVJBVE9SX09WRVIpOwotICAgIGVsc2UKLSAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3BhaW50KGNyKTsKLQotICAg
IGNhaXJvX3Jlc3RvcmUoY3IpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJk
RXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
Ci0KLSAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkg
IT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFt
ZXMoKS5rZXl1cEV2ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOUEV2ZW50IHhFdmVudDsK
LSAgICBpbml0WEV2ZW50KCZ4RXZlbnQpOwotICAgIEdka0V2ZW50S2V5KiBnZGtFdmVudCA9IGV2
ZW50LT5rZXlFdmVudCgpLT5nZGtFdmVudEtleSgpOwotCi0gICAgeEV2ZW50LnR5cGUgPSAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSA/IDIgOiAzOyAvLyBLZXlQ
cmVzcy9SZWxlYXNlIGdldCB1bnNldCBzb21ld2hlcmUKLSAgICB4RXZlbnQueGtleS5yb290ID0g
Z2V0Um9vdFdpbmRvdyhtX3BhcmVudEZyYW1lLmdldCgpKTsKLSAgICB4RXZlbnQueGtleS5zdWJ3
aW5kb3cgPSAwOyAvLyB3ZSBoYXZlIG5vIGNoaWxkIHdpbmRvdwotICAgIHhFdmVudC54a2V5LnRp
bWUgPSBldmVudC0+dGltZVN0YW1wKCk7Ci0gICAgeEV2ZW50LnhrZXkuc3RhdGUgPSBnZGtFdmVu
dC0+c3RhdGU7IC8vIEdka01vZGlmaWVyVHlwZSBtaXJyb3JzIHhsaWIgc3RhdGUgbWFza3MKLSAg
ICB4RXZlbnQueGtleS5rZXljb2RlID0gZ2RrRXZlbnQtPmhhcmR3YXJlX2tleWNvZGU7Ci0gICAg
eEV2ZW50LnhrZXkuc2FtZV9zY3JlZW4gPSB0cnVlOwotCi0gICAgLy8gTk9URTogQXMgdGhlIFhF
dmVudHMgc2VudCB0byB0aGUgcGx1Zy1pbiBhcmUgc3ludGhlc2l6ZWQgYW5kIHRoZXJlIGlzIG5v
dCBhIG5hdGl2ZSB3aW5kb3cKLSAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwbHVnLWluIHJl
Y3RhbmdsZSwgc29tZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgWEV2ZW50IHN0cnVjdHVyZXMgYXJl
IG5vdAotICAgIC8vIHNldCB0byB0aGVpciBub3JtYWwgWHNlcnZlciB2YWx1ZXMuIGUuZy4gS2V5
IGV2ZW50cyBkb24ndCBoYXZlIGEgcG9zaXRpb24uCi0gICAgLy8gc291cmNlOiBodHRwczovL2Rl
dmVsb3Blci5tb3ppbGxhLm9yZy9lbi9OUEV2ZW50Ci0gICAgeEV2ZW50LnhrZXkueCA9IDA7Ci0g
ICAgeEV2ZW50LnhrZXkueSA9IDA7Ci0gICAgeEV2ZW50LnhrZXkueF9yb290ID0gMDsKLSAgICB4
RXZlbnQueGtleS55X3Jvb3QgPSAwOwotCi0gICAgaWYgKGRpc3BhdGNoTlBFdmVudCh4RXZlbnQp
KQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotc3RhdGljIHVuc2ln
bmVkIGludCBpbnB1dEV2ZW50U3RhdGUoTW91c2VFdmVudCogZXZlbnQpCi17Ci0gICAgdW5zaWdu
ZWQgaW50IHN0YXRlID0gMDsKLSAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKLSAgICAgICAgc3Rh
dGUgfD0gQ29udHJvbE1hc2s7Ci0gICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQotICAgICAgICBz
dGF0ZSB8PSBTaGlmdE1hc2s7Ci0gICAgaWYgKGV2ZW50LT5hbHRLZXkoKSkKLSAgICAgICAgc3Rh
dGUgfD0gTW9kMU1hc2s7Ci0gICAgaWYgKGV2ZW50LT5tZXRhS2V5KCkpCi0gICAgICAgIHN0YXRl
IHw9IE1vZDRNYXNrOwotICAgIHJldHVybiBzdGF0ZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpp
bml0WEV2ZW50KFhFdmVudCogeEV2ZW50KQotewotICAgIG1lbXNldCh4RXZlbnQsIDAsIHNpemVv
ZihYRXZlbnQpKTsKLQotICAgIHhFdmVudC0+eGFueS5zZXJpYWwgPSAwOyAvLyB3ZSBhcmUgdW5h
d2FyZSBvZiB0aGUgbGFzdCByZXF1ZXN0IHByb2Nlc3NlZCBieSBYIFNlcnZlcgotICAgIHhFdmVu
dC0+eGFueS5zZW5kX2V2ZW50ID0gZmFsc2U7Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBtX3Bh
cmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0g
ICAgeEV2ZW50LT54YW55LmRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShndGtfd2lkZ2V0
X2dldF9kaXNwbGF5KHdpZGdldCkpOwotCi0gICAgLy8gTW96aWxsYSBhbHNvIHNlbmRzIE5vbmUg
aGVyZSBmb3Igd2luZG93bGVzcyBwbHVnaW5zLiBTZWUgbnNPYmplY3RGcmFtZS5jcHAgaW4gdGhl
IE1vemlsbGEgc291cmNlcy4KLSAgICAvLyBUaGlzIG1ldGhvZCBhbHNvIHNldHMgdXAgRm9jdXNJ
biBhbmQgRm9jdXNPdXQgZXZlbnRzIGZvciB3aW5kb3dzIHBsdWdpbnMsIGJ1dCBNb3ppbGxhIGRv
ZXNuJ3QKLSAgICAvLyBldmVuIHNlbmQgdGhlc2UgdHlwZXMgb2YgZXZlbnRzIHRvIHdpbmRvd2Vk
IHBsdWdpbnMuIEluIHRoZSBmdXR1cmUsIGl0IG1heSBiZSBnb29kIHRvIG9ubHkKLSAgICAvLyBz
ZW5kIHRoZW0gdG8gd2luZG93bGVzcyBwbHVnaW5zLgotICAgIHhFdmVudC0+eGFueS53aW5kb3cg
PSBOb25lOwotfQotCi1zdGF0aWMgdm9pZCBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhY
RXZlbnQqIHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9v
bVBvcywgRnJhbWUqIHBhcmVudEZyYW1lKQotewotICAgIFhCdXR0b25FdmVudCYgeGJ1dHRvbiA9
IHhFdmVudC0+eGJ1dHRvbjsKLSAgICB4YnV0dG9uLnR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCA/IEJ1dHRvblByZXNzIDogQnV0dG9uUmVsZWFzZTsK
LSAgICB4YnV0dG9uLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKLSAgICB4YnV0
dG9uLnN1YndpbmRvdyA9IDA7Ci0gICAgeGJ1dHRvbi50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgp
OwotICAgIHhidXR0b24ueCA9IHBvc3Rab29tUG9zLngoKTsKLSAgICB4YnV0dG9uLnkgPSBwb3N0
Wm9vbVBvcy55KCk7Ci0gICAgeGJ1dHRvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOwotICAg
IHhidXR0b24ueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKLSAgICB4YnV0dG9uLnN0YXRlID0g
aW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKLSAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgewot
ICAgIGNhc2UgTWlkZGxlQnV0dG9uOgotICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmlnaHRCdXR0b246Ci0gICAgICAgIHhidXR0b24u
YnV0dG9uID0gQnV0dG9uMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMZWZ0QnV0dG9uOgot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHhidXR0b24uYnV0dG9uID0gQnV0dG9uMTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIHhidXR0b24uc2FtZV9zY3JlZW4gPSB0cnVlOwotfQotCi1zdGF0
aWMgdm9pZCBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91
c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywgRnJhbWUqIHBhcmVu
dEZyYW1lKQotewotICAgIFhNb3Rpb25FdmVudCYgeG1vdGlvbiA9IHhFdmVudC0+eG1vdGlvbjsK
LSAgICB4bW90aW9uLnR5cGUgPSBNb3Rpb25Ob3RpZnk7Ci0gICAgeG1vdGlvbi5yb290ID0gZ2V0
Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7Ci0gICAgeG1vdGlvbi5zdWJ3aW5kb3cgPSAwOwotICAg
IHhtb3Rpb24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKLSAgICB4bW90aW9uLnggPSBwb3N0
Wm9vbVBvcy54KCk7Ci0gICAgeG1vdGlvbi55ID0gcG9zdFpvb21Qb3MueSgpOwotICAgIHhtb3Rp
b24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKLSAgICB4bW90aW9uLnlfcm9vdCA9IGV2ZW50
LT5zY3JlZW5ZKCk7Ci0gICAgeG1vdGlvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7
Ci0gICAgeG1vdGlvbi5pc19oaW50ID0gTm90aWZ5Tm9ybWFsOwotICAgIHhtb3Rpb24uc2FtZV9z
Y3JlZW4gPSB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmlj
RmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9pbnQm
IHBvc3Rab29tUG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCi17Ci0gICAgWENyb3NzaW5nRXZlbnQm
IHhjcm9zc2luZyA9IHhFdmVudC0+eGNyb3NzaW5nOwotICAgIHhjcm9zc2luZy50eXBlID0gZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgPyBFbnRlck5vdGlmeSA6
IExlYXZlTm90aWZ5OwotICAgIHhjcm9zc2luZy5yb290ID0gZ2V0Um9vdFdpbmRvdyhwYXJlbnRG
cmFtZSk7Ci0gICAgeGNyb3NzaW5nLnN1YndpbmRvdyA9IDA7Ci0gICAgeGNyb3NzaW5nLnRpbWUg
PSBldmVudC0+dGltZVN0YW1wKCk7Ci0gICAgeGNyb3NzaW5nLnggPSBwb3N0Wm9vbVBvcy55KCk7
Ci0gICAgeGNyb3NzaW5nLnkgPSBwb3N0Wm9vbVBvcy54KCk7Ci0gICAgeGNyb3NzaW5nLnhfcm9v
dCA9IGV2ZW50LT5zY3JlZW5YKCk7Ci0gICAgeGNyb3NzaW5nLnlfcm9vdCA9IGV2ZW50LT5zY3Jl
ZW5ZKCk7Ci0gICAgeGNyb3NzaW5nLnN0YXRlID0gaW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKLSAg
ICB4Y3Jvc3NpbmcubW9kZSA9IE5vdGlmeU5vcm1hbDsKLSAgICB4Y3Jvc3NpbmcuZGV0YWlsID0g
Tm90aWZ5RGV0YWlsTm9uZTsKLSAgICB4Y3Jvc3Npbmcuc2FtZV9zY3JlZW4gPSB0cnVlOwotICAg
IHhjcm9zc2luZy5mb2N1cyA9IGZhbHNlOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCi17Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
Ci0KLSAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGV2ZW50LT5idXR0b24o
KSA9PSBSaWdodEJ1dHRvbiAmJiBtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtJZ25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewot
ICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAg
ICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIGZv
Y3VzUGx1Z2luRWxlbWVudCgpOwotICAgIH0KLQotICAgIE5QRXZlbnQgeEV2ZW50OwotICAgIGlu
aXRYRXZlbnQoJnhFdmVudCk7Ci0KLSAgICBJbnRQb2ludCBwb3N0Wm9vbVBvcyA9IHJvdW5kZWRJ
bnRQb2ludChtX2VsZW1lbnQtPnJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChldmVudC0+YWJz
b2x1dGVMb2NhdGlvbigpKSk7Ci0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1
cEV2ZW50KQotICAgICAgICBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcygmeEV2ZW50LCBl
dmVudCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJhbWUuZ2V0KCkpOwotICAgIGVsc2UgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQotICAgICAgICBzZXRY
TW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcygmeEV2ZW50LCBldmVudCwgcG9zdFpvb21Qb3MsIG1f
cGFyZW50RnJhbWUuZ2V0KCkpOwotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcygm
eEV2ZW50LCBldmVudCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJhbWUuZ2V0KCkpOwotCi0gICAg
ICAgIC8vIFRoaXMgaXMgYSB3b3JrLWFyb3VuZCBmb3IgcGx1Z2lucyB3aGljaCBjaGFuZ2UgdGhl
IGN1cnNvci4gV2hlbiB0aGF0IGhhcHBlbnMgd2UKLSAgICAgICAgLy8gZ2V0IG91dCBvZiBzeW5j
IHdpdGggR0RLIHNvbWVob3cuIFJlc2V0dGluZyB0aGUgY3Vyc29yIGhlcmUgc2VlbXMgdG8gZml4
IHRoZSBpc3N1ZS4KLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlb3V0RXZlbnQpCi0gICAgICAgICAgICBnZGtfd2luZG93X3NldF9jdXJzb3IoZ3RrX3dpZGdl
dF9nZXRfd2luZG93KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9y
bVBhZ2VDbGllbnQoKSksIDApOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkK
LXsKLSAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWEV2ZW50IG5wRXZlbnQ7Ci0g
ICAgaW5pdFhFdmVudCgmbnBFdmVudCk7Ci0KLSAgICBYRm9jdXNDaGFuZ2VFdmVudCYgZXZlbnQg
PSBucEV2ZW50Lnhmb2N1czsKLSAgICBldmVudC50eXBlID0gOTsgLy8gRm9jdXNJbiBnZXRzIHVu
c2V0IHNvbWV3aGVyZQotICAgIGV2ZW50Lm1vZGUgPSBOb3RpZnlOb3JtYWw7Ci0gICAgZXZlbnQu
ZGV0YWlsID0gTm90aWZ5RGV0YWlsTm9uZTsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50
KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKLXsKLSAgICBp
ZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3Nm
dWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWEV2ZW50IG5wRXZlbnQ7Ci0gICAgaW5pdFhF
dmVudCgmbnBFdmVudCk7Ci0KLSAgICBYRm9jdXNDaGFuZ2VFdmVudCYgZXZlbnQgPSBucEV2ZW50
Lnhmb2N1czsKLSAgICBldmVudC50eXBlID0gMTA7IC8vIEZvY3VzT3V0IGdldHMgdW5zZXQgc29t
ZXdoZXJlCi0gICAgZXZlbnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKLSAgICBldmVudC5kZXRhaWwg
PSBOb3RpZnlEZXRhaWxOb25lOwotCi0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQot
Ci12b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCi17Ci0gICAg
V2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKLQotICAgIGlmIChwYXJlbnQpCi0gICAgICAgIGlu
aXQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVj
dCYpCi17Ci0gICAgaWYgKCFtX2lzV2luZG93ZWQpCi0gICAgICAgIHNldE5QV2luZG93SWZOZWVk
ZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKLXsKLSAg
ICBpZiAoIW1faXNTdGFydGVkIHx8ICFwYXJlbnQoKSB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPnNldHdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIHBsdWdpbiBk
aWRuJ3QgbG9hZCBzdWNlc3NmdWxseSwgbm8gcG9pbnQgaW4gY2FsbGluZyBzZXR3aW5kb3cKLSAg
ICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1Z2luJ3Mgc2V0d2luZG93
IGlmIGl0J3MgZnVsbC1wYWdlIG9yIHdpbmRvd2VkCi0gICAgaWYgKG1fbW9kZSAhPSBOUF9GVUxM
ICYmIG1fbW9kZSAhPSBOUF9FTUJFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2hlY2sg
aWYgdGhlIHBsYXRmb3JtUGx1Z2luV2lkZ2V0IHN0aWxsIGV4aXN0cwotICAgIGlmIChtX2lzV2lu
ZG93ZWQgJiYgIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2NsaXBSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAvLyBJZiB3aWR0aCBvciBoZWln
aHQgYXJlIG51bGwsIHNldCB0aGUgY2xpcFJlY3QgdG8gbnVsbCwKLSAgICAgICAgLy8gaW5kaWNh
dGluZyB0aGF0IHRoZSBwbHVnaW4gaXMgbm90IHZpc2libGUvc2Nyb2xsZWQgb3V0LgotICAgICAg
ICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOwotICAgICAgICBtX25wV2luZG93LmNsaXBS
ZWN0LnJpZ2h0ID0gMDsKLSAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwotICAg
ICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gQ2xpcHBpbmcgcmVjdGFuZ2xlIG9mIHRoZSBwbHVnLWluOyB0aGUgb3JpZ2luIGlzIHRo
ZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGRyYXdhYmxlIG9yIHdpbmRvdy4gCi0gICAgICAgIG1f
bnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fbnBXaW5kb3cueCArIG1fY2xpcFJlY3QueCgpOwot
ICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IG1fbnBXaW5kb3cueSArIG1fY2xpcFJl
Y3QueSgpOwotICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9ucFdpbmRvdy54
ICsgbV9jbGlwUmVjdC54KCkgKyBtX2NsaXBSZWN0LndpZHRoKCk7Ci0gICAgICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QuYm90dG9tID0gbV9ucFdpbmRvdy55ICsgbV9jbGlwUmVjdC55KCkgKyBtX2Ns
aXBSZWN0LmhlaWdodCgpOwotICAgIH0KLQotICAgIC8vIEZMQVNIIFdPUktBUk9VTkQ6IE9ubHkg
c2V0IGluaXRpYWxseS4gTXVsdGlwbGUgY2FsbHMgdG8KLSAgICAvLyBzZXROUFdpbmRvdygpIGNh
dXNlIHRoZSBwbHVnaW4gdG8gY3Jhc2ggaW4gd2luZG93ZWQgbW9kZS4KLSAgICBpZiAoIW1fcGx1
Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDYWxsU2V0V2luZG93TW9yZVRo
YW5PbmNlKSB8fCAhbV9pc1dpbmRvd2VkCi0gICAgICAgIHx8IG1fbnBXaW5kb3cud2lkdGggPT0g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0xKSB8fCBtX25wV2luZG93LmhlaWdodCA9PSBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oLTEpKSB7Ci0gICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSBtX3dpbmRv
d1JlY3Qud2lkdGgoKTsKLSAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dpbmRvd1JlY3Qu
aGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKLSAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2Us
ICZtX25wV2luZG93KTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLQotICAgIGlmICghbV9pc1dpbmRvd2VkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHdGtYdEJpbiB3aWxsIGNhbGwgZ3RrX3dpZGdldF9z
aXplX2FsbG9jYXRlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGl0IGhlcmUuCi0gICAgaWYgKCFt
X25lZWRzWEVtYmVkKSB7Ci0gICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklO
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3Qu
eSgpKTsKLSAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBt
X3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fZGVsYXllZEFsbG9jYXRpb24gPSBtX3dpbmRvd1JlY3Q7Ci0g
ICAgdXBkYXRlV2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
Ojp1cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpCi17Ci0gICAgLy8gSWYgdGhlIHdpbmRv
dyBoYXMgbm90IGJlZW4gZW1iZWRkZWQgeWV0ICh0aGUgcGx1ZyBhZGRlZCksIHdlIGRlbGF5IHNl
dHRpbmcgaXRzIGFsbG9jYXRpb24gdW50aWwgCi0gICAgLy8gdGhhdCBwb2ludC4gVGhpcyBmaXhl
cyBpc3N1ZXMgd2l0aCBzb21lIEphdmEgcGx1Z2luIGluc3RhbmNlcyBub3QgcmVuZGVyaW5nIGlt
bWVkaWF0ZWx5LgotICAgIGlmICghbV9wbHVnQWRkZWQgfHwgbV9kZWxheWVkQWxsb2NhdGlvbi5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKTsKLSAgICBpZiAoZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQod2lk
Z2V0KSkgewotICAgICAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3QgPSBtX2NsaXBSZWN0OwotI2lm
ZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgICAgIEdka1JlZ2lvbiogY2xpcFJlZ2lvbiA9IGdk
a19yZWdpb25fcmVjdGFuZ2xlKCZjbGlwUmVjdCk7Ci0gICAgICAgIGdka193aW5kb3dfc2hhcGVf
Y29tYmluZV9yZWdpb24oZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCksIGNsaXBSZWdpb24s
IDAsIDApOwotICAgICAgICBnZGtfcmVnaW9uX2Rlc3Ryb3koY2xpcFJlZ2lvbik7Ci0jZWxzZQot
ICAgICAgICBjYWlyb19yZWdpb25fdCogY2xpcFJlZ2lvbiA9IGNhaXJvX3JlZ2lvbl9jcmVhdGVf
cmVjdGFuZ2xlKCZjbGlwUmVjdCk7Ci0gICAgICAgIGdka193aW5kb3dfc2hhcGVfY29tYmluZV9y
ZWdpb24oZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCksIGNsaXBSZWdpb24sIDAsIDApOwot
ICAgICAgICBjYWlyb19yZWdpb25fZGVzdHJveShjbGlwUmVnaW9uKTsKLSNlbmRpZgotICAgIH0K
LQotICAgIC8vIFRoZSBnb2FsIGlzIHRvIHRyeSB0byBhdm9pZCBjYWxsaW5nIGd0a193aWRnZXRf
c2l6ZV9hbGxvY2F0ZSBpbiB0aGUgV2ViVmlldydzCi0gICAgLy8gc2l6ZS1hbGxvY2F0ZSBtZXRo
b2QuIEl0IGJsb2NrcyB0aGUgbWFpbiBsb29wIGFuZCBpZiB0aGUgd2lkZ2V0IGlzIG9mZnNjcmVl
bgotICAgIC8vIG9yIGhhc24ndCBtb3ZlZCBpdCBpc24ndCByZXF1aXJlZC4KLQotICAgIC8vIERv
bid0IGRvIGFueXRoaW5nIGlmIHRoZSBhbGxvY2F0aW9uIGhhcyBub3QgY2hhbmdlZC4KLSAgICBH
dGtBbGxvY2F0aW9uIGN1cnJlbnRBbGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9j
YXRpb24od2lkZ2V0LCAmY3VycmVudEFsbG9jYXRpb24pOwotICAgIGlmIChjdXJyZW50QWxsb2Nh
dGlvbiA9PSBtX2RlbGF5ZWRBbGxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBE
b24ndCBkbyBhbnl0aGluZyBpZiBib3RoIHRoZSBvbGQgYW5kIHRoZSBuZXcgYWxsb2NhdGlvbnMg
YXJlIG91dHNpZGUgdGhlIGZyYW1lLgotICAgIEludFJlY3QgY3VycmVudEFsbG9jYXRpb25SZWN0
KGN1cnJlbnRBbGxvY2F0aW9uKTsKLSAgICBjdXJyZW50QWxsb2NhdGlvblJlY3QuaW50ZXJzZWN0
KGZyYW1lUmVjdCgpKTsKLSAgICBpZiAoY3VycmVudEFsbG9jYXRpb25SZWN0LmlzRW1wdHkoKSAm
JiBtX2NsaXBSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19vYmplY3Rf
c2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgImRlbGF5ZWQtYWxsb2NhdGlvbiIsICZtX2RlbGF5
ZWRBbGxvY2F0aW9uKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJv
b2wgdmlzaWJsZSkKLXsKLSAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgPT0gdmlzaWJsZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOwot
Ci0gICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSB7Ci0g
ICAgICAgIGlmICh2aXNpYmxlKQotICAgICAgICAgICAgZ3RrX3dpZGdldF9zaG93KHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBndGtfd2lkZ2V0X2hp
ZGUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgfQotfQotCi1OUEVycm9yIFBsdWdpblZp
ZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIG91dHB1dEJ1ZmZlciwgdWludDMy
X3QgZmlsZW5hbWVMZW5ndGgsIGNvbnN0IGNoYXIqIGZpbGVuYW1lQnVmZmVyKQotewotICAgIC8v
IFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGVu
Y29kaW5nIHRoZSBmaWxlbmFtZQotICAgIC8vIGlzIGluLCBidXQgbW9zdCBwb3J0cyBzZWVtIHRv
IGFzc3VtZSBVVEYtOCBoZXJlIGFuZCB0aGUgdGVzdCBwbHVnaW4gaXMgZGVmaW5pdGVseQotICAg
IC8vIHNlbmRpbmcgdGhlIHBhdGggaW4gVVRGLTggZW5jb2RpbmcuCi0gICAgQ1N0cmluZyBmaWxl
bmFtZShmaWxlbmFtZUJ1ZmZlciwgZmlsZW5hbWVMZW5ndGgpOwotCi0gICAgR1JlZlB0cjxHRmls
ZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9jb21tYW5kbGluZV9hcmcoZmlsZW5h
bWUuZGF0YSgpKSk7Ci0gICAgaWYgKGdfZmlsZV9xdWVyeV9maWxlX3R5cGUoZmlsZS5nZXQoKSwg
R19GSUxFX1FVRVJZX0lORk9fTk9ORSwgMCkgIT0gR19GSUxFX1RZUEVfUkVHVUxBUikKLSAgICAg
ICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgR1JlZlB0cjxHRmlsZUluZm8+
IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKGZpbGUuZ2V0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX1FVRVJZX0lORk9f
Tk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgMCkpOwotICAgIGlmICghZmlsZUluZm8pCi0gICAgICAgIHJldHVybiBO
UEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIEdSZWZQdHI8R0ZpbGVJbnB1dFN0cmVhbT4gaW5w
dXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX3JlYWQoZmlsZS5nZXQoKSwgMCwgMCkpOwotICAg
IGlmICghaW5wdXRTdHJlYW0pCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsK
LQotICAgIG91dHB1dEJ1ZmZlci5yZXNpemUoZ19maWxlX2luZm9fZ2V0X3NpemUoZmlsZUluZm8u
Z2V0KCkpKTsKLSAgICBnc2l6ZSBieXRlc1JlYWQgPSAwOwotICAgIGlmICghZ19pbnB1dF9zdHJl
YW1fcmVhZF9hbGwoR19JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0uZ2V0KCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyLmRhdGEoKSwgb3V0cHV0QnVmZmVy
LnNpemUoKSwgJmJ5dGVzUmVhZCwgMCwgMCkpCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05P
VF9GT1VORDsKLQotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotYm9vbCBQbHVnaW5W
aWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSwgTlBFcnJvciogcmVzdWx0KQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBj
YXNlIE5QTlZUb29sa2l0OgotICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkg
PSAyOwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOgotICAgICAgICAqc3RhdGlj
X2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05P
X0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVmphdmFzY3JpcHRF
bmFibGVkQm9vbDoKLSAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7
Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6Ci0gICAgICAgICpzdGF0aWNfY2Fz
dDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJS
T1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKE5Q
TlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQotewotICAg
IHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlZ4RGlzcGxheToKLSAgICAgICAgaWYg
KG1fbmVlZHNYRW1iZWQpCi0gICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSAodm9pZCAqKUdE
S19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSAodm9pZCAqKUdUS19YVEJJTihwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKS0+eHRjbGllbnQueHRkaXNwbGF5OwotICAgICAgICAqcmVzdWx0
ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5W
eHRBcHBDb250ZXh0OgotICAgICAgICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsKLSAgICAgICAgICAg
ICoodm9pZCAqKil2YWx1ZSA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0IChHVEtfWFRC
SU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0ZGlzcGxheSk7Ci0KLSAgICAg
ICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKLSAgICAgICAgICAgIEdka1dp
bmRvdyogZ2RrV2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fcGFyZW50RnJhbWUtPnZp
ZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7Ci0gICAgICAgICAgICBH
ZGtXaW5kb3cqIHRvcGxldmVsV2luZG93ID0gZ2RrX3dpbmRvd19nZXRfdG9wbGV2ZWwoZ2RrV2lu
ZG93KTsKLSAgICAgICAgICAgIGlmICghdG9wbGV2ZWxXaW5kb3cpIHsKLSAgICAgICAgICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpzdGF0aWNfY2FzdDxXaW5kb3cqPih2
YWx1ZSkgPSBHREtfV0lORE9XX1hXSU5ET1codG9wbGV2ZWxXaW5kb3cpOwotICAgICAgICAgICAg
KnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0K
LXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19h
cmVhKEdUS19XSURHRVQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSksIHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQ
bHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0
KSB7Ci0gICAgICAgIGludmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVm
dCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKLSAgICBpbnZhbGlkYXRlV2luZG93bGVzc1Bs
dWdpblJlY3Qocik7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJl
Z2lvbikKLXsKLSAgICAvLyBUT0RPOiBvcHRpbWl6ZQotICAgIGludmFsaWRhdGUoKTsKLX0KLQot
dm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCi17Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkK
LSAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwot
ICAgIGVsc2UKLSAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KG1fcGFyZW50RnJhbWUtPnZp
ZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7Ci19Ci0KLXN0YXRpYyBE
aXNwbGF5KiBnZXRQbHVnaW5EaXNwbGF5KCkKLXsKLSAgICAvLyBUaGUgcGx1Z2luIHRvb2xraXQg
bWlnaHQgaGF2ZSBhIGRpZmZlcmVudCBYIGNvbm5lY3Rpb24gb3Blbi4gIFNpbmNlIHdlJ3JlCi0g
ICAgLy8gYSBnZGsvZ3RrIGFwcCwgd2UnbGwgKHByb2JhYmx5PykgaGF2ZSB0aGUgc2FtZSBYIGNv
bm5lY3Rpb24gYXMgYW55IGdkay1iYXNlZAotICAgIC8vIHBsdWdpbnMsIHNvIHdlIGNhbiByZXR1
cm4gdGhhdC4gIFdlIG1pZ2h0IHdhbnQgdG8gYWRkIG90aGVyIGltcGxlbWVudGF0aW9ucyBoZXJl
Ci0gICAgLy8gbGF0ZXIuCi0KLSAgICByZXR1cm4gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rp
c3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldFZpc3VhbEFuZENvbG9y
bWFwKGludCBkZXB0aCwgVmlzdWFsKiogdmlzdWFsLCBDb2xvcm1hcCogY29sb3JtYXApCi17Ci0g
ICAgKnZpc3VhbCA9IDA7Ci0gICAgKmNvbG9ybWFwID0gMDsKLQotICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAg
ICBpbnQgcm1haiwgcm1pbjsKLSAgICBpZiAoZGVwdGggPT0gMzIgJiYgKCFYUmVuZGVyUXVlcnlW
ZXJzaW9uKGRpc3BsYXksICZybWFqLCAmcm1pbikgfHwgKHJtYWogPT0gMCAmJiBybWluIDwgNSkp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBYVmlzdWFsSW5mbyB0ZW1wbDsKLSAgICB0ZW1wbC5z
Y3JlZW4gID0gZ2RrX3NjcmVlbl9nZXRfbnVtYmVyKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7
Ci0gICAgdGVtcGwuZGVwdGggICA9IGRlcHRoOwotICAgIHRlbXBsLmNfY2xhc3MgPSBUcnVlQ29s
b3I7Ci0gICAgaW50IG5WaXN1YWxzOwotICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvID0gWEdl
dFZpc3VhbEluZm8oZGlzcGxheSwgVmlzdWFsU2NyZWVuTWFzayB8IFZpc3VhbERlcHRoTWFzayB8
IFZpc3VhbENsYXNzTWFzaywgJnRlbXBsLCAmblZpc3VhbHMpOwotCi0gICAgaWYgKCFuVmlzdWFs
cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRlcHRoID09IDMyKSB7Ci0gICAgICAgIGZv
ciAoaW50IGlkeCA9IDA7IGlkeCA8IG5WaXN1YWxzOyArK2lkeCkgewotICAgICAgICAgICAgWFJl
bmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRpc3BsYXks
IHZpc3VhbEluZm9baWR4XS52aXN1YWwpOwotICAgICAgICAgICAgaWYgKGZvcm1hdC0+dHlwZSA9
PSBQaWN0VHlwZURpcmVjdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2spIHsKLSAgICAgICAg
ICAgICAgICAgKnZpc3VhbCA9IHZpc3VhbEluZm9baWR4XS52aXN1YWw7Ci0gICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAg
ICAqdmlzdWFsID0gdmlzdWFsSW5mb1swXS52aXN1YWw7Ci0KLSAgICBYRnJlZSh2aXN1YWxJbmZv
KTsKLQotICAgIGlmICgqdmlzdWFsKQotICAgICAgICAqY29sb3JtYXAgPSBYQ3JlYXRlQ29sb3Jt
YXAoZGlzcGxheSwgR0RLX1JPT1RfV0lORE9XKCksICp2aXN1YWwsIEFsbG9jTm9uZSk7Ci19Ci0K
LWdib29sZWFuIFBsdWdpblZpZXc6OnBsdWdSZW1vdmVkQ2FsbGJhY2soR3RrU29ja2V0KiBzb2Nr
ZXQsIFBsdWdpblZpZXcqIHZpZXcpCi17Ci0gICAgdmlldy0+bV9wbHVnQWRkZWQgPSBmYWxzZTsK
LSAgICByZXR1cm4gVFJVRTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFj
ayhHdGtTb2NrZXQqIHNvY2tldCwgUGx1Z2luVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQoc29j
a2V0KTsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgdmlldy0+bV9wbHVnQWRkZWQgPSB0cnVlOwot
ICAgIHZpZXctPnVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRDbGlwKCk7Ci19Ci0KLWJvb2wgUGx1
Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAg
ICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKLQot
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKLSAgICAgICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRz
WEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICB9Ci0K
LSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIEd0a1dpZGdldCogcGFnZUNsaWVudCA9
IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQo
KTsKLSAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKLSAgICAgICAgICAgIC8vIElmIG91ciBw
YXJlbnQgaXMgbm90IGFuY2hvcmVkIHRoZSBzdGFydHVwIHByb2Nlc3Mgd2lsbAotICAgICAgICAg
ICAgLy8gZmFpbCBtaXNlcmFibHkgZm9yIFhFbWJlZCBwbHVnaW5zIGEgYml0IGxhdGVyIG9uIHdo
ZW4KLSAgICAgICAgICAgIC8vIHdlIHRyeSB0byBnZXQgdGhlIElEIG9mIG91ciB3aW5kb3cgKHNp
bmNlIHJlYWxpemUgd2lsbAotICAgICAgICAgICAgLy8gZmFpbCksIHNvIGxldCdzIGp1c3QgYWJv
cnQgaGVyZS4KLSAgICAgICAgICAgIGlmICghZ3RrX3dpZGdldF9nZXRfcGFyZW50KHBhZ2VDbGll
bnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgbV9wbHVn
QWRkZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a19zb2NrZXRf
bmV3KCkpOwotICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihwYWdl
Q2xpZW50KSwgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICJwbHVnLWFkZGVkIiwgR19DQUxMQkFDSyhQ
bHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAicGx1Zy1yZW1vdmVkIiwgR19DQUxM
QkFDSyhQbHVnaW5WaWV3OjpwbHVnUmVtb3ZlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoZ3RrX3h0YmluX25ldyhwYWdlQ2xp
ZW50LCAwKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7Ci0g
ICAgICAgIG1fcGx1Z2luRGlzcGxheSA9IGdldFBsdWdpbkRpc3BsYXkoKTsKLSAgICB9Ci0KLSAg
ICBzaG93KCk7Ci0KLSAgICAgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBuZXcg
TlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOwotICAgICAgICB3cy0+dHlwZSA9IDA7Ci0KLSAg
ICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZVdpbmRvdzsKLSAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKLSAgICAgICAgICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKTsKLSAgICAgICAgICAgIGd0
a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOwotICAgICAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihndGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpKSk7Ci0gICAgICAgICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOwotICAgICAgICAgICAgd3MtPmRpc3BsYXkg
PSBHREtfV0lORE9XX1hESVNQTEFZKHdpbmRvdyk7Ci0gICAgICAgICAgICB3cy0+dmlzdWFsID0g
R0RLX1ZJU1VBTF9YVklTVUFMKGdka193aW5kb3dfZ2V0X3Zpc3VhbCh3aW5kb3cpKTsKLSAgICAg
ICAgICAgIHdzLT5kZXB0aCA9IGdka192aXN1YWxfZ2V0X2RlcHRoKGdka193aW5kb3dfZ2V0X3Zp
c3VhbCh3aW5kb3cpKTsKLSAgICAgICAgICAgIHdzLT5jb2xvcm1hcCA9IFhDcmVhdGVDb2xvcm1h
cCh3cy0+ZGlzcGxheSwgR0RLX1JPT1RfV0lORE9XKCksIHdzLT52aXN1YWwsIEFsbG9jTm9uZSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KChHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0
d2luZG93KSk7Ci0gICAgICAgICAgICB3cy0+ZGlzcGxheSA9IEdUS19YVEJJTihwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKS0+eHRkaXNwbGF5OwotICAgICAgICAgICAgd3MtPnZpc3VhbCA9IEdUS19Y
VEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+eHRjbGllbnQueHR2aXN1YWw7Ci0gICAgICAg
ICAgICB3cy0+ZGVwdGggPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xp
ZW50Lnh0ZGVwdGg7Ci0gICAgICAgICAgICB3cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4ocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7Ci0gICAgICAgIH0KLSAgICAg
ICAgWEZsdXNoICh3cy0+ZGlzcGxheSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9ucFdpbmRv
dy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7Ci0gICAgICAgIG1fbnBXaW5kb3cud2luZG93
ID0gMDsgLy8gTm90IHVzZWQ/Ci0KLSAgICAgICAgR2RrU2NyZWVuKiBnc2NyZWVuID0gZ2RrX3Nj
cmVlbl9nZXRfZGVmYXVsdCgpOwotICAgICAgICBHZGtWaXN1YWwqIGd2aXN1YWwgPSBnZGtfc2Ny
ZWVuX2dldF9zeXN0ZW1fdmlzdWFsKGdzY3JlZW4pOwotCi0gICAgICAgIGlmIChnZGtfdmlzdWFs
X2dldF9kZXB0aChndmlzdWFsKSA9PSAzMiB8fCAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5z
KFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgpKSB7Ci0gICAgICAgICAgICBn
ZXRWaXN1YWxBbmRDb2xvcm1hcCgzMiwgJm1fdmlzdWFsLCAmbV9jb2xvcm1hcCk7Ci0gICAgICAg
ICAgICB3cy0+ZGVwdGggPSAzMjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV92aXN1YWwp
IHsKLSAgICAgICAgICAgIGdldFZpc3VhbEFuZENvbG9ybWFwKGdka192aXN1YWxfZ2V0X2RlcHRo
KGd2aXN1YWwpLCAmbV92aXN1YWwsICZtX2NvbG9ybWFwKTsKLSAgICAgICAgICAgIHdzLT5kZXB0
aCA9IGdka192aXN1YWxfZ2V0X2RlcHRoKGd2aXN1YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAg
d3MtPmRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpKTsKLSAgICAgICAgd3MtPnZpc3VhbCA9IG1fdmlzdWFsOwotICAgICAgICB3cy0+Y29sb3Jt
YXAgPSBtX2NvbG9ybWFwOwotCi0gICAgICAgIG1fbnBXaW5kb3cueCA9IDA7Ci0gICAgICAgIG1f
bnBXaW5kb3cueSA9IDA7Ci0gICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsKLSAgICAgICAg
bV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKLSAgICB9Ci0KLSAgICBtX25wV2luZG93LndzX2luZm8g
PSB3czsKLQotICAgIC8vIFRPRE8gcmVtb3ZlIGluIGZhdm9yIG9mIG51bGwgZXZlbnRzLCBsaWtl
IG1hYyBwb3J0PwotICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5R
dWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCi0gICAgICAgIHVwZGF0ZVBsdWdpbldpZGdl
dCgpOyAvLyB3YXM6IHNldE5QV2luZG93SWZOZWVkZWQoKSwgYnV0IHRoaXMgZG9lc24ndCBwcm9k
dWNlIDB4MCByZWN0cyBhdCBmaXJzdCBnbwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBpZiAobV9kcmF3YWJsZSkgewot
ICAgICAgICBYRnJlZVBpeG1hcChHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRf
ZGVmYXVsdCgpKSwgbV9kcmF3YWJsZSk7Ci0gICAgICAgIG1fZHJhd2FibGUgPSAwOwotICAgIH0K
LQotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gcGxhdGZvcm1XaWRnZXQoKTsKLSAgICBpZiAod2lk
Z2V0KSB7Ci0gICAgICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50
KHdpZGdldCk7Ci0gICAgICAgIEFTU0VSVChwYXJlbnQpOwotICAgICAgICBndGtfY29udGFpbmVy
X3JlbW92ZShHVEtfQ09OVEFJTkVSKHBhcmVudCksIHdpZGdldCk7Ci0gICAgfQotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3gx
MS9QbHVnaW5WaWV3WDExLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMveDExL1BsdWdpblZp
ZXdYMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYjJhODIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3gxMS9QbHVnaW5WaWV3WDEx
LmNwcApAQCAtMCwwICsxLDEwNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwIEtha2FpLCBJbmMuIDxicmlhbkBrYWthaS5jb20+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcu
aCIKKworI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAi
Rm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVRy
ZWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgorI2luY2x1ZGUg
IktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1
ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNp
bmNsdWRlICJTcGF0aWFsTmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgi
CisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVl
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKworI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCisjaW5jbHVkZSA8Z2RrY29uZmlnLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykK
KyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2lu
Y2x1ZGUgPGdkay9nZGt4Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2VsaWYgUExBVEZPUk0o
RUZMKQorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlIDxFY29yZV9FdmFz
Lmg+CisjaW5jbHVkZSA8RWNvcmVfWC5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKyNlbmRpZgorCisj
ZGVmaW5lIFN0cmluZyBYdFN0cmluZ1R5cGUKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2lm
IFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJndGsyeHRiaW4uaCIKKyNlbmRpZgorI2RlZmluZSBC
b29sIGludCAvLyB0aGlzIGdvdCB1bmRlZmluZWQgc29tZXdoZXJlCisjZGVmaW5lIFN0YXR1cyBp
bnQgLy8gZGl0dG8KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+CisjaW5jbHVk
ZSA8Y2Fpcm8teGxpYi5oPgorCit1c2luZyBKU0M6OkV4ZWNTdGF0ZTsKK3VzaW5nIEpTQzo6SW50
ZXJwcmV0ZXI7Cit1c2luZyBKU0M6OkpTTG9jazsKK3VzaW5nIEpTQzo6SlNPYmplY3Q7CisKK3Vz
aW5nIG5hbWVzcGFjZSBzdGQ7CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworYm9vbCBQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisKKyAgICBib29sIGFjY2VwdGVkID0g
IW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOworCisg
ICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBs
dWdpblZpZXcoMCk7CisgICAgcmV0dXJuIGFjY2VwdGVkOworfQorCitzdGF0aWMgV2luZG93IGdl
dFJvb3RXaW5kb3coRnJhbWUqIHBhcmVudEZyYW1lKQoreworI2lmIFBMQVRGT1JNKEdUSykKKyAg
ICBHdGtXaWRnZXQqIHBhcmVudFdpZGdldCA9IHBhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5k
b3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisgICAgR2RrU2NyZWVuKiBnc2NyZWVuID0gZ3Rr
X3dpZGdldF9nZXRfc2NyZWVuKHBhcmVudFdpZGdldCk7CisgICAgcmV0dXJuIEdES19XSU5ET1df
WFdJTkRPVyhnZGtfc2NyZWVuX2dldF9yb290X3dpbmRvdyhnc2NyZWVuKSk7CisjZWxpZiBQTEFU
Rk9STShFRkwpCisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHBhcmVudEZy
YW1lLT52aWV3KCktPmV2YXNPYmplY3QoKSk7CisgICAgRWNvcmVfRXZhcyogZWNvcmVFdmFzID0g
ZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V2luZG93PihlY29yZV9ldmFzX3dpbmRvd19nZXQoZWNvcmVFdmFzKSk7CisjZW5kaWYKK30KKwor
c3RhdGljIERpc3BsYXkqIGdldFBsdWdpbkRpc3BsYXkoKQoreworI2lmIFBMQVRGT1JNKEdUSykK
KyAgICAvLyBUaGUgcGx1Z2luIHRvb2xraXQgbWlnaHQgaGF2ZSBhIGRpZmZlcmVudCBYIGNvbm5l
Y3Rpb24gb3Blbi4gU2luY2Ugd2UncmUKKyAgICAvLyBhIGdkay9ndGsgYXBwLCB3ZSdsbCAocHJv
YmFibHk/KSBoYXZlIHRoZSBzYW1lIFggY29ubmVjdGlvbiBhcyBhbnkgZ2RrLWJhc2VkCisgICAg
Ly8gcGx1Z2lucywgc28gd2UgY2FuIHJldHVybiB0aGF0LiBXZSBtaWdodCB3YW50IHRvIGFkZCBv
dGhlciBpbXBsZW1lbnRhdGlvbnMgaGVyZQorICAgIC8vIGxhdGVyLgorCisgICAgcmV0dXJuIEdE
S19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOworI2VsaWYgUExB
VEZPUk0oRUZMKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNvcmVfeF9kaXNw
bGF5X2dldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldp
ZGdldCgpCit7CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IHRvRnJhbWVWaWV3KHBhcmVudCgpKTsKKworICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1f
d2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKKworICAg
IG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1l
UmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXplKCkpOworICAgIG1fY2xpcFJlY3Qg
PSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dSZWN0Lngo
KSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYgKG1fd2luZG93UmVjdCA9PSBvbGRXaW5k
b3dSZWN0ICYmIG1fY2xpcFJlY3QgPT0gb2xkQ2xpcFJlY3QpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbV9pc1dpbmRvd2VkICYmICFtX3dpbmRvd1JlY3QuaXNF
bXB0eSgpKSB7CisgICAgICAgIERpc3BsYXkqIGRpc3BsYXkgPSBnZXRQbHVnaW5EaXNwbGF5KCk7
CisKKyAgICAgICAgaWYgKG1fZHJhd2FibGUpCisgICAgICAgICAgICBYRnJlZVBpeG1hcChkaXNw
bGF5LCBtX2RyYXdhYmxlKTsKKworICAgICAgICBtX2RyYXdhYmxlID0gWENyZWF0ZVBpeG1hcChk
aXNwbGF5LCBnZXRSb290V2luZG93KG1fcGFyZW50RnJhbWUuZ2V0KCkpLAorICAgICAgICAgICAg
bV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAg
ICgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+ZGVwdGgp
OworICAgICAgICBYU3luYyhkaXNwbGF5LCBmYWxzZSk7IC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBz
ZXJ2ZXIga25vd3MgYWJvdXQgdGhlIERyYXdhYmxlCisgICAgfQorCisgICAgc2V0TlBXaW5kb3dJ
Zk5lZWRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkK
K3sKKyAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBwbGF0Zm9ybVdpZGdldCgp
KTsKKyNpZiBQTEFURk9STShHVEspCisgICAgaWYgKGZvY3VzZWQgJiYgcGxhdGZvcm1XaWRnZXQo
KSkKKyAgICAgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHBsYXRmb3JtV2lkZ2V0KCkpOworI2Vu
ZGlmCisgICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpzaG93KCkKK3sKKyAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBwbGF0Zm9y
bVdpZGdldCgpKTsKKyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpo
aWRlKCkKK3sKKyAgICBBU1NFUlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBwbGF0Zm9ybVdp
ZGdldCgpKTsKKyAgICBXaWRnZXQ6OmhpZGUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwYWlu
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
aWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNz
ZnVsbHkpIHsKKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKKwor
ICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9kcmF3
YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGlzcGxheSogZGlzcGxheSA9IGdldFBsdWdp
bkRpc3BsYXkoKTsKKyAgICBjb25zdCBib29sIHNob3VsZFN5bmNXaXRoWCA9IG1fcGx1Z2luRGlz
cGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0gZGlzcGxheTsKKworICAgIEludFJlY3QgZXhwb3Nl
ZFJlY3QocmVjdCk7CisgICAgZXhwb3NlZFJlY3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKKyAg
ICBleHBvc2VkUmVjdC5tb3ZlKC1mcmFtZVJlY3QoKS54KCksIC1mcmFtZVJlY3QoKS55KCkpOwor
CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZHJhd2FibGVTdXJmYWNlID0gYWRvcHRSZWYo
Y2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShkaXNwbGF5LAorICAgICAgICBtX2RyYXdhYmxlLAor
ICAgICAgICBtX3Zpc3VhbCwKKyAgICAgICAgbV93aW5kb3dSZWN0LndpZHRoKCksCisgICAgICAg
IG1fd2luZG93UmVjdC5oZWlnaHQoKSkpOworCisgICAgaWYgKG1faXNUcmFuc3BhcmVudCkgewor
ICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgMzIgYml0IGRyYXdhYmxlIGFuZCB0aGUgcGx1Z2luIHdh
bnRzIHRyYW5zcGFyZW5jeSwKKyAgICAgICAgLy8gd2UnbGwgY2xlYXIgdGhlIGV4cG9zZWQgYXJl
YSB0byB0cmFuc3BhcmVudCBmaXJzdC4gT3RoZXJ3aXNlLAorICAgICAgICAvLyB3ZSdkIGVuZCB1
cCB3aXRoIGp1bmsgaW4gdGhlcmUgZnJvbSB0aGUgbGFzdCBwYWludCwgb3IsIHdvcnNlLAorICAg
ICAgICAvLyB1bmluaXRpYWxpemVkIGRhdGEuCisgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9
IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShkcmF3YWJsZVN1cmZhY2UuZ2V0KCkpKTsKKworICAgICAg
ICBpZiAoIShjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KGRyYXdhYmxlU3VyZmFjZS5nZXQoKSkg
JiBDQUlST19DT05URU5UX0FMUEhBKSkgeworICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBmYWtl
IGl0IHdoZW4gd2UgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIG9uIG91cgorICAgICAgICAg
ICAgLy8gcGl4bWFwLiBJZiB0aGF0J3Mgbm90IHBvc3NpYmxlLCBhdCBsZWFzdCBjbGVhciB0aGUg
d2luZG93IHRvCisgICAgICAgICAgICAvLyBhdm9pZCBkcmF3aW5nIGFydGlmYWN0cy4KKworICAg
ICAgICAgICAgLy8gVGhpcyBXb3VsZCBub3Qgd29yayB3aXRob3V0IGRvdWJsZSBidWZmZXJpbmcs
IGJ1dCB3ZSBhbHdheXMgdXNlIGl0LgorICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJm
YWNlKGNyLmdldCgpLCBjYWlyb19nZXRfZ3JvdXBfdGFyZ2V0KGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpKSwKKyAgICAgICAgICAgICAgICAtbV93aW5kb3dSZWN0LngoKSwgLW1fd2lu
ZG93UmVjdC55KCkpOworICAgICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBD
QUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhaXJv
X3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworCisgICAgICAg
IGNhaXJvX3JlY3RhbmdsZShjci5nZXQoKSwgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55
KCksCisgICAgICAgICAgICBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQo
KSk7CisgICAgICAgIGNhaXJvX2ZpbGwoY3IuZ2V0KCkpOworICAgIH0KKworICAgIFhFdmVudCB4
ZXZlbnQ7CisgICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZihYRXZlbnQpKTsKKyAgICBYR3Jh
cGhpY3NFeHBvc2VFdmVudCYgZXhwb3NlRXZlbnQgPSB4ZXZlbnQueGdyYXBoaWNzZXhwb3NlOwor
ICAgIGV4cG9zZUV2ZW50LnR5cGUgPSBHcmFwaGljc0V4cG9zZTsKKyAgICBleHBvc2VFdmVudC5k
aXNwbGF5ID0gZGlzcGxheTsKKyAgICBleHBvc2VFdmVudC5kcmF3YWJsZSA9IG1fZHJhd2FibGU7
CisgICAgZXhwb3NlRXZlbnQueCA9IGV4cG9zZWRSZWN0LngoKTsKKyAgICBleHBvc2VFdmVudC55
ID0gZXhwb3NlZFJlY3QueSgpOworICAgIGV4cG9zZUV2ZW50LndpZHRoID0gZXhwb3NlZFJlY3Qu
eCgpICsgZXhwb3NlZFJlY3Qud2lkdGgoKTsgLy8gZmxhc2ggYnVnPyBpdCB0aGlua3Mgd2lkdGgg
aXMgdGhlIHJpZ2h0IGluIHRyYW5zcGFyZW50IG1vZGUKKyAgICBleHBvc2VFdmVudC5oZWlnaHQg
PSBleHBvc2VkUmVjdC55KCkgKyBleHBvc2VkUmVjdC5oZWlnaHQoKTsgLy8gZmxhc2ggYnVnPyBp
dCB0aGlua3MgaGVpZ2h0IGlzIHRoZSBib3R0b20gaW4gdHJhbnNwYXJlbnQgbW9kZQorCisgICAg
ZGlzcGF0Y2hOUEV2ZW50KHhldmVudCk7CisKKyAgICBpZiAoc2hvdWxkU3luY1dpdGhYKQorICAg
ICAgICBYU3luYyhtX3BsdWdpbkRpc3BsYXksIGZhbHNlKTsgLy8gc3luYyBjaGFuZ2VzIGJ5IHBs
dWdpbgorCisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KTsKKyAgICBjYWlyb19zYXZlKGNyKTsKKworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShj
ciwgZHJhd2FibGVTdXJmYWNlLmdldCgpLCBmcmFtZVJlY3QoKS54KCksIGZyYW1lUmVjdCgpLnko
KSk7CisKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsCisgICAgICAgIGZyYW1lUmVjdCgpLngoKSAr
IGV4cG9zZWRSZWN0LngoKSwgZnJhbWVSZWN0KCkueSgpICsgZXhwb3NlZFJlY3QueSgpLAorICAg
ICAgICBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSk7CisgICAgY2Fp
cm9fY2xpcChjcik7CisKKyAgICBpZiAobV9pc1RyYW5zcGFyZW50KQorICAgICAgICBjYWlyb19z
ZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX09WRVIpOworICAgIGVsc2UKKyAgICAgICAg
Y2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJv
X3BhaW50KGNyKTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworfQorCit2b2lkIFBsdWdpblZp
ZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisjaWYgUExB
VEZPUk0oR1RLKQorICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworCisgICAgaWYgKCFtX2lzU3Rh
cnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlk
b3duRXZlbnQgJiYgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCB4RXZlbnQ7CisgICAgaW5pdFhFdmVudCgmeEV2
ZW50KTsKKyAgICBHZGtFdmVudEtleSogZ2RrRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKS0+Z2Rr
RXZlbnRLZXkoKTsKKworICAgIHhFdmVudC50eXBlID0gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmtleWRvd25FdmVudCkgPyAyIDogMzsgLy8gS2V5UHJlc3MvUmVsZWFzZSBnZXQgdW5z
ZXQgc29tZXdoZXJlCisgICAgeEV2ZW50LnhrZXkucm9vdCA9IGdldFJvb3RXaW5kb3cobV9wYXJl
bnRGcmFtZS5nZXQoKSk7CisgICAgeEV2ZW50LnhrZXkuc3Vid2luZG93ID0gMDsgLy8gd2UgaGF2
ZSBubyBjaGlsZCB3aW5kb3cKKyAgICB4RXZlbnQueGtleS50aW1lID0gZXZlbnQtPnRpbWVTdGFt
cCgpOworICAgIHhFdmVudC54a2V5LnN0YXRlID0gZ2RrRXZlbnQtPnN0YXRlOyAvLyBHZGtNb2Rp
ZmllclR5cGUgbWlycm9ycyB4bGliIHN0YXRlIG1hc2tzCisgICAgeEV2ZW50LnhrZXkua2V5Y29k
ZSA9IGdka0V2ZW50LT5oYXJkd2FyZV9rZXljb2RlOworICAgIHhFdmVudC54a2V5LnNhbWVfc2Ny
ZWVuID0gdHJ1ZTsKKworICAgIC8vIE5PVEU6IEFzIHRoZSBYRXZlbnRzIHNlbnQgdG8gdGhlIHBs
dWctaW4gYXJlIHN5bnRoZXNpemVkIGFuZCB0aGVyZSBpcyBub3QgYSBuYXRpdmUgd2luZG93Cisg
ICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgcGx1Zy1pbiByZWN0YW5nbGUsIHNvbWUgb2YgdGhl
IG1lbWJlcnMgb2YgdGhlIFhFdmVudCBzdHJ1Y3R1cmVzIGFyZSBub3QKKyAgICAvLyBzZXQgdG8g
dGhlaXIgbm9ybWFsIFhzZXJ2ZXIgdmFsdWVzLiBlLmcuIEtleSBldmVudHMgZG9uJ3QgaGF2ZSBh
IHBvc2l0aW9uLgorICAgIC8vIHNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcv
ZW4vTlBFdmVudAorICAgIHhFdmVudC54a2V5LnggPSAwOworICAgIHhFdmVudC54a2V5LnkgPSAw
OworICAgIHhFdmVudC54a2V5Lnhfcm9vdCA9IDA7CisgICAgeEV2ZW50LnhrZXkueV9yb290ID0g
MDsKKworICAgIGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShldmVudCk7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdW5zaWduZWQgaW5wdXRFdmVu
dFN0YXRlKE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIHVuc2lnbmVkIHN0YXRlID0gMDsKKyAg
ICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gQ29udHJvbE1hc2s7Cisg
ICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBTaGlmdE1hc2s7Cisg
ICAgaWYgKGV2ZW50LT5hbHRLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gTW9kMU1hc2s7CisgICAg
aWYgKGV2ZW50LT5tZXRhS2V5KCkpCisgICAgICAgIHN0YXRlIHw9IE1vZDRNYXNrOworICAgIHJl
dHVybiBzdGF0ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojppbml0WEV2ZW50KFhFdmVudCogeEV2
ZW50KQoreworICAgIG1lbXNldCh4RXZlbnQsIDAsIHNpemVvZihYRXZlbnQpKTsKKworICAgIHhF
dmVudC0+eGFueS5zZXJpYWwgPSAwOyAvLyB3ZSBhcmUgdW5hd2FyZSBvZiB0aGUgbGFzdCByZXF1
ZXN0IHByb2Nlc3NlZCBieSBYIFNlcnZlcgorICAgIHhFdmVudC0+eGFueS5zZW5kX2V2ZW50ID0g
ZmFsc2U7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gbV9wYXJl
bnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAg
IHhFdmVudC0+eGFueS5kaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ3RrX3dpZGdldF9n
ZXRfZGlzcGxheSh3aWRnZXQpKTsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyAgICB4RXZlbnQtPnhh
bnkuZGlzcGxheSA9IGdldFBsdWdpbkRpc3BsYXkoKTsKKyNlbmRpZgorCisgICAgLy8gTW96aWxs
YSBhbHNvIHNlbmRzIE5vbmUgaGVyZSBmb3Igd2luZG93bGVzcyBwbHVnaW5zLiBTZWUgbnNPYmpl
Y3RGcmFtZS5jcHAgaW4gdGhlIE1vemlsbGEgc291cmNlcy4KKyAgICAvLyBUaGlzIG1ldGhvZCBh
bHNvIHNldHMgdXAgRm9jdXNJbiBhbmQgRm9jdXNPdXQgZXZlbnRzIGZvciB3aW5kb3dzIHBsdWdp
bnMsIGJ1dCBNb3ppbGxhIGRvZXNuJ3QKKyAgICAvLyBldmVuIHNlbmQgdGhlc2UgdHlwZXMgb2Yg
ZXZlbnRzIHRvIHdpbmRvd2VkIHBsdWdpbnMuIEluIHRoZSBmdXR1cmUsIGl0IG1heSBiZSBnb29k
IHRvIG9ubHkKKyAgICAvLyBzZW5kIHRoZW0gdG8gd2luZG93bGVzcyBwbHVnaW5zLgorICAgIHhF
dmVudC0+eGFueS53aW5kb3cgPSBOb25lOworfQorCitzdGF0aWMgdm9pZCBzZXRYQnV0dG9uRXZl
bnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0
IEludFBvaW50JiBwb3N0Wm9vbVBvcywgRnJhbWUqIHBhcmVudEZyYW1lKQoreworICAgIFhCdXR0
b25FdmVudCYgeGJ1dHRvbiA9IHhFdmVudC0+eGJ1dHRvbjsKKyAgICB4YnV0dG9uLnR5cGUgPSBl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCA/IEJ1dHRvblByZXNz
IDogQnV0dG9uUmVsZWFzZTsKKyAgICB4YnV0dG9uLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVu
dEZyYW1lKTsKKyAgICB4YnV0dG9uLnN1YndpbmRvdyA9IDA7CisgICAgeGJ1dHRvbi50aW1lID0g
ZXZlbnQtPnRpbWVTdGFtcCgpOworICAgIHhidXR0b24ueCA9IHBvc3Rab29tUG9zLngoKTsKKyAg
ICB4YnV0dG9uLnkgPSBwb3N0Wm9vbVBvcy55KCk7CisgICAgeGJ1dHRvbi54X3Jvb3QgPSBldmVu
dC0+c2NyZWVuWCgpOworICAgIHhidXR0b24ueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKKyAg
ICB4YnV0dG9uLnN0YXRlID0gaW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKKyAgICBzd2l0Y2ggKGV2
ZW50LT5idXR0b24oKSkgeworICAgIGNhc2UgTWlkZGxlQnV0dG9uOgorICAgICAgICB4YnV0dG9u
LmJ1dHRvbiA9IEJ1dHRvbjI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmlnaHRCdXR0b246
CisgICAgICAgIHhidXR0b24uYnV0dG9uID0gQnV0dG9uMzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBMZWZ0QnV0dG9uOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHhidXR0b24uYnV0dG9uID0g
QnV0dG9uMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHhidXR0b24uc2FtZV9zY3JlZW4g
PSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhY
RXZlbnQqIHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9v
bVBvcywgRnJhbWUqIHBhcmVudEZyYW1lKQoreworICAgIFhNb3Rpb25FdmVudCYgeG1vdGlvbiA9
IHhFdmVudC0+eG1vdGlvbjsKKyAgICB4bW90aW9uLnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAg
eG1vdGlvbi5yb290ID0gZ2V0Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7CisgICAgeG1vdGlvbi5z
dWJ3aW5kb3cgPSAwOworICAgIHhtb3Rpb24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAg
ICB4bW90aW9uLnggPSBwb3N0Wm9vbVBvcy54KCk7CisgICAgeG1vdGlvbi55ID0gcG9zdFpvb21Q
b3MueSgpOworICAgIHhtb3Rpb24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4bW90
aW9uLnlfcm9vdCA9IGV2ZW50LT5zY3JlZW5ZKCk7CisgICAgeG1vdGlvbi5zdGF0ZSA9IGlucHV0
RXZlbnRTdGF0ZShldmVudCk7CisgICAgeG1vdGlvbi5pc19oaW50ID0gTm90aWZ5Tm9ybWFsOwor
ICAgIHhtb3Rpb24uc2FtZV9zY3JlZW4gPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBzZXRYQ3Jv
c3NpbmdFdmVudFNwZWNpZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVu
dCwgY29uc3QgSW50UG9pbnQmIHBvc3Rab29tUG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCit7Cisg
ICAgWENyb3NzaW5nRXZlbnQmIHhjcm9zc2luZyA9IHhFdmVudC0+eGNyb3NzaW5nOworICAgIHhj
cm9zc2luZy50eXBlID0gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZl
bnQgPyBFbnRlck5vdGlmeSA6IExlYXZlTm90aWZ5OworICAgIHhjcm9zc2luZy5yb290ID0gZ2V0
Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7CisgICAgeGNyb3NzaW5nLnN1YndpbmRvdyA9IDA7Cisg
ICAgeGNyb3NzaW5nLnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeGNyb3NzaW5nLngg
PSBwb3N0Wm9vbVBvcy55KCk7CisgICAgeGNyb3NzaW5nLnkgPSBwb3N0Wm9vbVBvcy54KCk7Cisg
ICAgeGNyb3NzaW5nLnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7CisgICAgeGNyb3NzaW5nLnlf
cm9vdCA9IGV2ZW50LT5zY3JlZW5ZKCk7CisgICAgeGNyb3NzaW5nLnN0YXRlID0gaW5wdXRFdmVu
dFN0YXRlKGV2ZW50KTsKKyAgICB4Y3Jvc3NpbmcubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICB4
Y3Jvc3NpbmcuZGV0YWlsID0gTm90aWZ5RGV0YWlsTm9uZTsKKyAgICB4Y3Jvc3Npbmcuc2FtZV9z
Y3JlZW4gPSB0cnVlOworICAgIHhjcm9zc2luZy5mb2N1cyA9IGZhbHNlOworfQorCit2b2lkIFBs
dWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CisKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9
IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGV2ZW50LT5idXR0b24oKSA9PSBSaWdodEJ1dHRvbiAmJiBtX3BsdWdpbi0+cXVpcmtzKCku
Y29udGFpbnMoUGx1Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZWRvd25FdmVudCkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUt
PnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUo
dHJ1ZSk7CisgICAgICAgIGZvY3VzUGx1Z2luRWxlbWVudCgpOworICAgIH0KKworICAgIE5QRXZl
bnQgeEV2ZW50OworICAgIGluaXRYRXZlbnQoJnhFdmVudCk7CisKKyAgICBJbnRQb2ludCBwb3N0
Wm9vbVBvcyA9IHJvdW5kZWRJbnRQb2ludChtX2VsZW1lbnQtPnJlbmRlcmVyKCktPmFic29sdXRl
VG9Mb2NhbChldmVudC0+YWJzb2x1dGVMb2NhdGlvbigpKSk7CisKKyAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQorICAgICAgICBzZXRYQnV0dG9uRXZlbnRTcGVjaWZp
Y0ZpZWxkcygmeEV2ZW50LCBldmVudCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJhbWUuZ2V0KCkp
OworICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2
ZW50KQorICAgICAgICBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcygmeEV2ZW50LCBldmVu
dCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJhbWUuZ2V0KCkpOworICAgIGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKKyAgICAgICAgc2V0WENyb3NzaW5nRXZl
bnRTcGVjaWZpY0ZpZWxkcygmeEV2ZW50LCBldmVudCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJh
bWUuZ2V0KCkpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmst
YXJvdW5kIGZvciBwbHVnaW5zIHdoaWNoIGNoYW5nZSB0aGUgY3Vyc29yLiBXaGVuIHRoYXQgaGFw
cGVucyB3ZQorICAgICAgICAvLyBnZXQgb3V0IG9mIHN5bmMgd2l0aCBHREsgc29tZWhvdy4gUmVz
ZXR0aW5nIHRoZSBjdXJzb3IgaGVyZSBzZWVtcyB0byBmaXggdGhlIGlzc3VlLgorICAgICAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkKKyAgICAgICAg
ICAgIGdka193aW5kb3dfc2V0X2N1cnNvcihndGtfd2lkZ2V0X2dldF93aW5kb3cobV9wYXJlbnRG
cmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSwgMCk7Cisj
ZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRpc3BhdGNoTlBF
dmVudCh4RXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQoreworICAgIGlmICghbV9pc1N0
YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAg
ICAgICByZXR1cm47CisKKyAgICBYRXZlbnQgbnBFdmVudDsKKyAgICBpbml0WEV2ZW50KCZucEV2
ZW50KTsKKworICAgIFhGb2N1c0NoYW5nZUV2ZW50JiBldmVudCA9IG5wRXZlbnQueGZvY3VzOwor
ICAgIGV2ZW50LnR5cGUgPSA5OyAvLyBGb2N1c0luIGdldHMgdW5zZXQgc29tZXdoZXJlCisgICAg
ZXZlbnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICBldmVudC5kZXRhaWwgPSBOb3RpZnlEZXRh
aWxOb25lOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOworfQorCit2b2lkIFBsdWdp
blZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwg
bV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1
cm47CisKKyAgICBYRXZlbnQgbnBFdmVudDsKKyAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsKKwor
ICAgIFhGb2N1c0NoYW5nZUV2ZW50JiBldmVudCA9IG5wRXZlbnQueGZvY3VzOworICAgIGV2ZW50
LnR5cGUgPSAxMDsgLy8gRm9jdXNPdXQgZ2V0cyB1bnNldCBzb21ld2hlcmUKKyAgICBldmVudC5t
b2RlID0gTm90aWZ5Tm9ybWFsOworICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7
CisKKyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChw
YXJlbnQpOworCisgICAgaWYgKHBhcmVudCkKKyAgICAgICAgaW5pdCgpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JikKK3sKKyAgICBpZiAoIW1f
aXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQg
fHwgIXBhcmVudCgpIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgcGx1Z2luIGRpZG4ndCBsb2FkIHN1Y2Vzc2Z1
bGx5LCBubyBwb2ludCBpbiBjYWxsaW5nIHNldHdpbmRvdworICAgIGlmIChtX3N0YXR1cyAhPSBQ
bHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IE9uIFVuaXgsIG9ubHkgY2FsbCBwbHVnaW4ncyBzZXR3aW5kb3cgaWYgaXQncyBmdWxsLXBhZ2Ug
b3Igd2luZG93ZWQKKyAgICBpZiAobV9tb2RlICE9IE5QX0ZVTEwgJiYgbV9tb2RlICE9IE5QX0VN
QkVEKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm1QbHVn
aW5XaWRnZXQgc3RpbGwgZXhpc3RzCisgICAgaWYgKG1faXNXaW5kb3dlZCAmJiAhcGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xpcFJlY3QuaXNF
bXB0eSgpKSB7CisgICAgICAgIC8vIElmIHdpZHRoIG9yIGhlaWdodCBhcmUgbnVsbCwgc2V0IHRo
ZSBjbGlwUmVjdCB0byBudWxsLAorICAgICAgICAvLyBpbmRpY2F0aW5nIHRoYXQgdGhlIHBsdWdp
biBpcyBub3QgdmlzaWJsZS9zY3JvbGxlZCBvdXQuCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJl
Y3QubGVmdCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSAwOworICAg
ICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cuY2xp
cFJlY3QuYm90dG9tID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDbGlwcGluZyByZWN0
YW5nbGUgb2YgdGhlIHBsdWctaW47IHRoZSBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBv
ZiB0aGUgZHJhd2FibGUgb3Igd2luZG93LgorICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0Lmxl
ZnQgPSBtX25wV2luZG93LnggKyBtX2NsaXBSZWN0LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC50b3AgPSBtX25wV2luZG93LnkgKyBtX2NsaXBSZWN0LnkoKTsKKyAgICAgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fbnBXaW5kb3cueCArIG1fY2xpcFJlY3QueCgpICsg
bV9jbGlwUmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9
IG1fbnBXaW5kb3cueSArIG1fY2xpcFJlY3QueSgpICsgbV9jbGlwUmVjdC5oZWlnaHQoKTsKKyAg
ICB9CisKKyAgICAvLyBGTEFTSCBXT1JLQVJPVU5EOiBPbmx5IHNldCBpbml0aWFsbHkuIE11bHRp
cGxlIGNhbGxzIHRvCisgICAgLy8gc2V0TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRvIGNy
YXNoIGluIHdpbmRvd2VkIG1vZGUuCisgICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFp
bnMoUGx1Z2luUXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVUaGFuT25jZSkgfHwgIW1faXNXaW5k
b3dlZAorICAgICAgICB8fCBtX25wV2luZG93LndpZHRoID09IHN0YXRpY19jYXN0PHVpbnQzMl90
PigtMSkgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0xKSkg
eworICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7CisgICAg
ICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOworICAgIH0KKwor
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CisgICAg
c2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcoMCk7CisKKyNpZiBQTEFURk9STShHVEspCisgICAgaWYgKCFtX2lzV2luZG93ZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIEd0a1h0QmluIHdpbGwgY2FsbCBndGtfd2lkZ2V0X3Np
emVfYWxsb2NhdGUsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gaXQgaGVyZS4KKyAgICBpZiAoIW1f
bmVlZHNYRW1iZWQpIHsKKyAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4o
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55
KCkpOworICAgICAgICBndGtfeHRiaW5fcmVzaXplKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIG1f
d2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9kZWxheWVkQWxsb2NhdGlvbiA9IG1fd2luZG93UmVjdDsKKyAg
ICB1cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOworI2VuZGlmCit9CisKKyNpZiBQTEFU
Rk9STShHVEspCit2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRDbGlw
KCkKK3sKKyAgICAvLyBJZiB0aGUgd2luZG93IGhhcyBub3QgYmVlbiBlbWJlZGRlZCB5ZXQgKHRo
ZSBwbHVnIGFkZGVkKSwgd2UgZGVsYXkgc2V0dGluZyBpdHMgYWxsb2NhdGlvbiB1bnRpbAorICAg
IC8vIHRoYXQgcG9pbnQuIFRoaXMgZml4ZXMgaXNzdWVzIHdpdGggc29tZSBKYXZhIHBsdWdpbiBp
bnN0YW5jZXMgbm90IHJlbmRlcmluZyBpbW1lZGlhdGVseS4KKyAgICBpZiAoIW1fcGx1Z0FkZGVk
IHx8IG1fZGVsYXllZEFsbG9jYXRpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBHdGtXaWRnZXQqIHdpZGdldCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCk7CisgICAgaWYgKGd0
a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkpIHsKKyAgICAgICAgR2RrUmVjdGFuZ2xlIGNs
aXBSZWN0ID0gbV9jbGlwUmVjdDsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgICAgICBH
ZGtSZWdpb24qIGNsaXBSZWdpb24gPSBnZGtfcmVnaW9uX3JlY3RhbmdsZSgmY2xpcFJlY3QpOwor
ICAgICAgICBnZGtfd2luZG93X3NoYXBlX2NvbWJpbmVfcmVnaW9uKGd0a193aWRnZXRfZ2V0X3dp
bmRvdyh3aWRnZXQpLCBjbGlwUmVnaW9uLCAwLCAwKTsKKyAgICAgICAgZ2RrX3JlZ2lvbl9kZXN0
cm95KGNsaXBSZWdpb24pOworI2Vsc2UKKyAgICAgICAgY2Fpcm9fcmVnaW9uX3QqIGNsaXBSZWdp
b24gPSBjYWlyb19yZWdpb25fY3JlYXRlX3JlY3RhbmdsZSgmY2xpcFJlY3QpOworICAgICAgICBn
ZGtfd2luZG93X3NoYXBlX2NvbWJpbmVfcmVnaW9uKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRn
ZXQpLCBjbGlwUmVnaW9uLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fcmVnaW9uX2Rlc3Ryb3koY2xp
cFJlZ2lvbik7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBUaGUgZ29hbCBpcyB0byB0cnkgdG8g
YXZvaWQgY2FsbGluZyBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgaW4gdGhlIFdlYlZpZXcncwor
ICAgIC8vIHNpemUtYWxsb2NhdGUgbWV0aG9kLiBJdCBibG9ja3MgdGhlIG1haW4gbG9vcCBhbmQg
aWYgdGhlIHdpZGdldCBpcyBvZmZzY3JlZW4KKyAgICAvLyBvciBoYXNuJ3QgbW92ZWQgaXQgaXNu
J3QgcmVxdWlyZWQuCisKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgYWxsb2NhdGlv
biBoYXMgbm90IGNoYW5nZWQuCisgICAgR3RrQWxsb2NhdGlvbiBjdXJyZW50QWxsb2NhdGlvbjsK
KyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmN1cnJlbnRBbGxvY2F0aW9u
KTsKKyAgICBpZiAoY3VycmVudEFsbG9jYXRpb24gPT0gbV9kZWxheWVkQWxsb2NhdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgYm90aCB0aGUgb2xk
IGFuZCB0aGUgbmV3IGFsbG9jYXRpb25zIGFyZSBvdXRzaWRlIHRoZSBmcmFtZS4KKyAgICBJbnRS
ZWN0IGN1cnJlbnRBbGxvY2F0aW9uUmVjdChjdXJyZW50QWxsb2NhdGlvbik7CisgICAgY3VycmVu
dEFsbG9jYXRpb25SZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7CisgICAgaWYgKGN1cnJlbnRB
bGxvY2F0aW9uUmVjdC5pc0VtcHR5KCkgJiYgbV9jbGlwUmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdpZGdldCksICJkZWxh
eWVkLWFsbG9jYXRpb24iLCAmbV9kZWxheWVkQWxsb2NhdGlvbik7Cit9CisjZW5kaWYKKwordm9p
ZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAo
aXNQYXJlbnRWaXNpYmxlKCkgPT0gdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2lk
Z2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOworCisjaWYgUExBVEZPUk0oR1RLKQorICAg
IGlmIChpc1NlbGZWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgeworICAgICAg
ICBpZiAodmlzaWJsZSkKKyAgICAgICAgICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybVBsdWdp
bldpZGdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ3RrX3dpZGdldF9oaWRlKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworICAgIH0KKyNlbmRpZgorfQorCitOUEVycm9yIFBsdWdp
blZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIG91dHB1dEJ1ZmZlciwgdWlu
dDMyX3QgZmlsZW5hbWVMZW5ndGgsIGNvbnN0IGNoYXIqIGZpbGVuYW1lQnVmZmVyKQoreworICAg
IC8vIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0
IGVuY29kaW5nIHRoZSBmaWxlbmFtZQorICAgIC8vIGlzIGluLCBidXQgbW9zdCBwb3J0cyBzZWVt
IHRvIGFzc3VtZSBVVEYtOCBoZXJlIGFuZCB0aGUgdGVzdCBwbHVnaW4gaXMgZGVmaW5pdGVseQor
ICAgIC8vIHNlbmRpbmcgdGhlIHBhdGggaW4gVVRGLTggZW5jb2RpbmcuCisgICAgQ1N0cmluZyBm
aWxlbmFtZShmaWxlbmFtZUJ1ZmZlciwgZmlsZW5hbWVMZW5ndGgpOworCisgICAgR1JlZlB0cjxH
RmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9jb21tYW5kbGluZV9hcmcoZmls
ZW5hbWUuZGF0YSgpKSk7CisgICAgaWYgKGdfZmlsZV9xdWVyeV9maWxlX3R5cGUoZmlsZS5nZXQo
KSwgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwgMCkgIT0gR19GSUxFX1RZUEVfUkVHVUxBUikKKyAg
ICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgR1JlZlB0cjxHRmlsZUlu
Zm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKGZpbGUuZ2V0KCksCisg
ICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwKKyAgICAgICAgR19GSUxFX1FV
RVJZX0lORk9fTk9ORSwKKyAgICAgICAgMCwgMCkpOworICAgIGlmICghZmlsZUluZm8pCisgICAg
ICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIEdSZWZQdHI8R0ZpbGVJbnB1
dFN0cmVhbT4gaW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX3JlYWQoZmlsZS5nZXQoKSwg
MCwgMCkpOworICAgIGlmICghaW5wdXRTdHJlYW0pCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxF
X05PVF9GT1VORDsKKworICAgIG91dHB1dEJ1ZmZlci5yZXNpemUoZ19maWxlX2luZm9fZ2V0X3Np
emUoZmlsZUluZm8uZ2V0KCkpKTsKKyAgICBnc2l6ZSBieXRlc1JlYWQgPSAwOworICAgIGlmICgh
Z19pbnB1dF9zdHJlYW1fcmVhZF9hbGwoR19JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0uZ2V0KCkp
LAorICAgICAgICBvdXRwdXRCdWZmZXIuZGF0YSgpLCBvdXRwdXRCdWZmZXIuc2l6ZSgpLCAmYnl0
ZXNSZWFkLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisg
ICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3Jt
R2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9y
KiByZXN1bHQpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVlRvb2xr
aXQ6CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2
YWx1ZSkgPSAyOyAvLyByZXR1cm4gcHJvcGVyIEdUSydzIE5QTlZUb29sa2l0CisjZWxpZiBQTEFU
Rk9STShFRkwpCisgICAgICAgICpzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9IDA7Cisj
ZW5kaWYKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKKyNpZiBQTEFURk9STShH
VEspCisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworI2VsaWYg
UExBVEZPUk0oRUZMKQorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gZmFs
c2U7CisjZW5kaWYKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDoKKyAgICAg
ICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgICpyZXN1bHQg
PSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZT
dXBwb3J0c1dpbmRvd2xlc3M6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkg
PSB0cnVlOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxl
LCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQoreworICAgIHN3aXRjaCAodmFyaWFibGUp
IHsKKyNpZiBQTEFURk9STShHVEspCisgICAgY2FzZSBOUE5WeERpc3BsYXk6CisgICAgICAgIGlm
IChtX25lZWRzWEVtYmVkKQorICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gKHZvaWQgKilH
REtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gKHZvaWQgKilHVEtfWFRCSU4ocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0ZGlzcGxheTsKKyAgICAgICAgKnJlc3Vs
dCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBO
Vnh0QXBwQ29udGV4dDoKKyAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAg
ICAqKHZvaWQgKiopdmFsdWUgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dChHVEtfWFRC
SU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0ZGlzcGxheSk7CisKKyAgICAg
ICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICBHZGtXaW5kb3cqIGdk
a1dpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhv
c3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOworICAgICAgICBHZGtXaW5kb3cqIHRv
cGxldmVsV2luZG93ID0gZ2RrX3dpbmRvd19nZXRfdG9wbGV2ZWwoZ2RrV2luZG93KTsKKyAgICAg
ICAgaWYgKCF0b3BsZXZlbFdpbmRvdykgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dF
TkVSSUNfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICAqc3RhdGljX2Nhc3Q8V2luZG93Kj4odmFsdWUpID0gR0RLX1dJTkRPV19YV0lORE9XKHRvcGxl
dmVsV2luZG93KTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgY2FzZSBOUE5WeERp
c3BsYXk6CisgICAgICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVlKSA9IGdldFBsdWdpbkRp
c3BsYXkoKTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDoKKyAgICAgICAgKnJlc3VsdCA9
IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBO
UE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKSB7
CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgTlBPYmplY3QqIHdpbmRvd1Njcmlw
dE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3JpcHROUE9iamVjdCgp
OworCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwg
YXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdp
bi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKKyAgICAg
ICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAg
KnN0YXRpY19jYXN0PHZvaWQqKj4odmFsdWUpID0gd2luZG93U2NyaXB0T2JqZWN0OworCisgICAg
ICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisgICAgICAgIGlmICht
X2lzSmF2YVNjcmlwdFBhdXNlZCkgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVS
SUNfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAgIGlmIChtX2VsZW1l
bnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRU
YWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgcGx1
Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1l
bnQpLT5nZXROUE9iamVjdCgpOworCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3Rl
ZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEu
b3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHBsdWdpblNj
cmlwdE9iamVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9i
amVjdCk7CisKKyAgICAgICAgKnN0YXRpY19jYXN0PHZvaWQqKj4odmFsdWUpID0gcGx1Z2luU2Ny
aXB0T2JqZWN0OworCisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAg
ICAgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fcGFyZW50RnJhbWUtPnZp
ZXcoKS0+ZXZhc09iamVjdCgpKTsKKyAgICAgICAgaWYgKCFldmFzKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNf
ZWNvcmVfZXZhc19nZXQoZXZhcyk7CisgICAgICAgICpzdGF0aWNfY2FzdDxYSUQqPih2YWx1ZSkg
PSBzdGF0aWNfY2FzdDxXaW5kb3c+KGVjb3JlX2V2YXNfd2luZG93X2dldChlY29yZUV2YXMpKTsK
KyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBjYXNlIE5QTlZUb29sa2l0OgorICAgICAgICBpZiAobV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVxdWlyZXNHdGtUb29sS2l0KSkgeworICAgICAg
ICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gMjsKKyAgICAgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyNpZiBQTEFURk9STShHVEspCisgICAgaWYgKG1f
aXNXaW5kb3dlZCkgeworICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lE
R0VUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKwor
ICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKK30KKwordm9pZCBQbHVn
aW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7CisgICAgaWYgKCFyZWN0KSB7
CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIElu
dFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwg
cmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdp
blJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lv
bikKK3sKKyAgICAvLyBUT0RPOiBvcHRpbWl6ZQorICAgIGludmFsaWRhdGUoKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCit7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlm
IChtX2lzV2luZG93ZWQpCisgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyht
X3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkp
OworI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCit9CisKKyNpZiBQTEFURk9S
TShHVEspCitzdGF0aWMgdm9pZCBnZXRWaXN1YWxBbmRDb2xvcm1hcChpbnQgZGVwdGgsIFZpc3Vh
bCoqIHZpc3VhbCwgQ29sb3JtYXAqIGNvbG9ybWFwKQoreworICAgICp2aXN1YWwgPSAwOworICAg
ICpjb2xvcm1hcCA9IDA7CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJ
U1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgaW50IHJtYWosIHJtaW47Cisg
ICAgaWYgKGRlcHRoID09IDMyICYmICghWFJlbmRlclF1ZXJ5VmVyc2lvbihkaXNwbGF5LCAmcm1h
aiwgJnJtaW4pIHx8ICghcm1haiAmJiBybWluIDwgNSkpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBYVmlzdWFsSW5mbyB0ZW1wbDsKKyAgICB0ZW1wbC5zY3JlZW4gID0gZ2RrX3NjcmVlbl9nZXRf
bnVtYmVyKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CisgICAgdGVtcGwuZGVwdGggICA9IGRl
cHRoOworICAgIHRlbXBsLmNfY2xhc3MgPSBUcnVlQ29sb3I7CisgICAgaW50IG5WaXN1YWxzOwor
ICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvID0gWEdldFZpc3VhbEluZm8oZGlzcGxheSwgVmlz
dWFsU2NyZWVuTWFzayB8IFZpc3VhbERlcHRoTWFzayB8IFZpc3VhbENsYXNzTWFzaywgJnRlbXBs
LCAmblZpc3VhbHMpOworCisgICAgaWYgKCFuVmlzdWFscykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGRlcHRoID09IDMyKSB7CisgICAgICAgIGZvciAoaW50IGlkeCA9IDA7IGlkeCA8IG5W
aXN1YWxzOyArK2lkeCkgeworICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9
IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRpc3BsYXksIHZpc3VhbEluZm9baWR4XS52aXN1YWwp
OworICAgICAgICAgICAgaWYgKGZvcm1hdC0+dHlwZSA9PSBQaWN0VHlwZURpcmVjdCAmJiBmb3Jt
YXQtPmRpcmVjdC5hbHBoYU1hc2spIHsKKyAgICAgICAgICAgICAgICAqdmlzdWFsID0gdmlzdWFs
SW5mb1tpZHhdLnZpc3VhbDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICAqdmlzdWFsID0gdmlzdWFsSW5mb1swXS52
aXN1YWw7CisKKyAgICBYRnJlZSh2aXN1YWxJbmZvKTsKKworICAgIGlmICgqdmlzdWFsKQorICAg
ICAgICAqY29sb3JtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSwgR0RLX1JPT1RfV0lORE9X
KCksICp2aXN1YWwsIEFsbG9jTm9uZSk7Cit9CisKK2dib29sZWFuIFBsdWdpblZpZXc6OnBsdWdS
ZW1vdmVkQ2FsbGJhY2soR3RrU29ja2V0KiBzb2NrZXQsIFBsdWdpblZpZXcqIHZpZXcpCit7Cisg
ICAgdmlldy0+bV9wbHVnQWRkZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFjayhHdGtTb2NrZXQqIHNvY2tldCwgUGx1Z2lu
VmlldyogdmlldykKK3sKKyAgICBBU1NFUlQoc29ja2V0KTsKKyAgICBBU1NFUlQodmlldyk7Cisg
ICAgdmlldy0+bV9wbHVnQWRkZWQgPSB0cnVlOworICAgIHZpZXctPnVwZGF0ZVdpZGdldEFsbG9j
YXRpb25BbmRDbGlwKCk7Cit9CisjZW5kaWYKKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0
YXJ0KCkKK3sKKyAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOworICAgIEFTU0VSVChtX3N0YXR1cyA9
PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOworCisgICAgaWYgKG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkgeworICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50
UGx1Z2luVmlldyh0aGlzKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVt
YmVkKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAgIFBsdWdpblZp
ZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgIH0KKworI2lmIFBMQVRGT1JNKEdUSykK
KyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIEd0a1dpZGdldCogcGFnZUNsaWVudCA9
IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQo
KTsKKyAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAgIC8vIElmIG91ciBw
YXJlbnQgaXMgbm90IGFuY2hvcmVkIHRoZSBzdGFydHVwIHByb2Nlc3Mgd2lsbAorICAgICAgICAg
ICAgLy8gZmFpbCBtaXNlcmFibHkgZm9yIFhFbWJlZCBwbHVnaW5zIGEgYml0IGxhdGVyIG9uIHdo
ZW4KKyAgICAgICAgICAgIC8vIHdlIHRyeSB0byBnZXQgdGhlIElEIG9mIG91ciB3aW5kb3cgKHNp
bmNlIHJlYWxpemUgd2lsbAorICAgICAgICAgICAgLy8gZmFpbCksIHNvIGxldCdzIGp1c3QgYWJv
cnQgaGVyZS4KKyAgICAgICAgICAgIGlmICghZ3RrX3dpZGdldF9nZXRfcGFyZW50KHBhZ2VDbGll
bnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgbV9wbHVn
QWRkZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a19zb2NrZXRf
bmV3KCkpOworICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihwYWdl
Q2xpZW50KSwgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAgICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICJwbHVnLWFkZGVkIiwgR19DQUxMQkFDSyhQ
bHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAicGx1Zy1yZW1vdmVkIiwgR19DQUxM
QkFDSyhQbHVnaW5WaWV3OjpwbHVnUmVtb3ZlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoZ3RrX3h0YmluX25ldyhwYWdlQ2xp
ZW50LCAwKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7Cisg
ICAgICAgIG1fcGx1Z2luRGlzcGxheSA9IGdldFBsdWdpbkRpc3BsYXkoKTsKKyAgICB9CisKKyAg
ICBzaG93KCk7CisKKyAgICAgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBuZXcg
TlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOworICAgICAgICB3cy0+dHlwZSA9IDA7CisKKyAg
ICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZVdpbmRvdzsKKyAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKTsKKyAgICAgICAgICAgIGd0
a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOworICAgICAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihndGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpKSk7CisgICAgICAgICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOworICAgICAgICAgICAgd3MtPmRpc3BsYXkg
PSBHREtfV0lORE9XX1hESVNQTEFZKHdpbmRvdyk7CisgICAgICAgICAgICB3cy0+dmlzdWFsID0g
R0RLX1ZJU1VBTF9YVklTVUFMKGdka193aW5kb3dfZ2V0X3Zpc3VhbCh3aW5kb3cpKTsKKyAgICAg
ICAgICAgIHdzLT5kZXB0aCA9IGdka192aXN1YWxfZ2V0X2RlcHRoKGdka193aW5kb3dfZ2V0X3Zp
c3VhbCh3aW5kb3cpKTsKKyAgICAgICAgICAgIHdzLT5jb2xvcm1hcCA9IFhDcmVhdGVDb2xvcm1h
cCh3cy0+ZGlzcGxheSwgR0RLX1JPT1RfV0lORE9XKCksIHdzLT52aXN1YWwsIEFsbG9jTm9uZSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KChHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0
d2luZG93KSk7CisgICAgICAgICAgICB3cy0+ZGlzcGxheSA9IEdUS19YVEJJTihwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKS0+eHRkaXNwbGF5OworICAgICAgICAgICAgd3MtPnZpc3VhbCA9IEdUS19Y
VEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+eHRjbGllbnQueHR2aXN1YWw7CisgICAgICAg
ICAgICB3cy0+ZGVwdGggPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xp
ZW50Lnh0ZGVwdGg7CisgICAgICAgICAgICB3cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4ocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7CisgICAgICAgIH0KKyAgICAg
ICAgWEZsdXNoKHdzLT5kaXNwbGF5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX25wV2luZG93
LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cg
PSAwOyAvLyBOb3QgdXNlZD8KKworICAgICAgICBHZGtTY3JlZW4qIGdzY3JlZW4gPSBnZGtfc2Ny
ZWVuX2dldF9kZWZhdWx0KCk7CisgICAgICAgIEdka1Zpc3VhbCogZ3Zpc3VhbCA9IGdka19zY3Jl
ZW5fZ2V0X3N5c3RlbV92aXN1YWwoZ3NjcmVlbik7CisKKyAgICAgICAgaWYgKGdka192aXN1YWxf
Z2V0X2RlcHRoKGd2aXN1YWwpID09IDMyIHx8ICFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMo
UGx1Z2luUXVpcmtSZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCkpIHsKKyAgICAgICAgICAgIGdl
dFZpc3VhbEFuZENvbG9ybWFwKDMyLCAmbV92aXN1YWwsICZtX2NvbG9ybWFwKTsKKyAgICAgICAg
ICAgIHdzLT5kZXB0aCA9IDMyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3Zpc3VhbCkg
eworICAgICAgICAgICAgZ2V0VmlzdWFsQW5kQ29sb3JtYXAoZ2RrX3Zpc3VhbF9nZXRfZGVwdGgo
Z3Zpc3VhbCksICZtX3Zpc3VhbCwgJm1fY29sb3JtYXApOworICAgICAgICAgICAgd3MtPmRlcHRo
ID0gZ2RrX3Zpc3VhbF9nZXRfZGVwdGgoZ3Zpc3VhbCk7CisgICAgICAgIH0KKworICAgICAgICB3
cy0+ZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0
KCkpOworICAgICAgICB3cy0+dmlzdWFsID0gbV92aXN1YWw7CisgICAgICAgIHdzLT5jb2xvcm1h
cCA9IG1fY29sb3JtYXA7CisKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICAgICAgbV9u
cFdpbmRvdy55ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOworICAgICAgICBt
X25wV2luZG93LmhlaWdodCA9IC0xOworICAgIH0KKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyAgICBz
ZXRQbGF0Zm9ybVdpZGdldCgwKTsKKyAgICBtX3BsdWdpbkRpc3BsYXkgPSBnZXRQbHVnaW5EaXNw
bGF5KCk7CisKKyAgICBzaG93KCk7CisKKyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3
cyA9IG5ldyBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KCk7CisgICAgd3MtPnR5cGUgPSAwOwor
CisgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgbV9ucFdp
bmRvdy53aW5kb3cgPSAwOyAvLyBOb3QgdXNlZD8KKworICAgIFNjcmVlbiogc2NyZWVuID0gc3Rh
dGljX2Nhc3Q8U2NyZWVuKj4oZWNvcmVfeF9kZWZhdWx0X3NjcmVlbl9nZXQoKSk7CisgICAgbV92
aXN1YWwgPSBzdGF0aWNfY2FzdDxWaXN1YWwqPihlY29yZV94X2RlZmF1bHRfdmlzdWFsX2dldCht
X3BsdWdpbkRpc3BsYXksIHNjcmVlbikpOworICAgIG1fY29sb3JtYXAgPSBlY29yZV94X2RlZmF1
bHRfY29sb3JtYXBfZ2V0KG1fcGx1Z2luRGlzcGxheSwgc2NyZWVuKTsKKworICAgIHdzLT5kZXB0
aCA9IGVjb3JlX3hfZGVmYXVsdF9kZXB0aF9nZXQobV9wbHVnaW5EaXNwbGF5LCBzY3JlZW4pOwor
ICAgIHdzLT5kaXNwbGF5ID0gbV9wbHVnaW5EaXNwbGF5OworICAgIHdzLT52aXN1YWwgPSBtX3Zp
c3VhbDsKKyAgICB3cy0+Y29sb3JtYXAgPSBtX2NvbG9ybWFwOworCisgICAgbV9ucFdpbmRvdy54
ID0gMDsKKyAgICBtX25wV2luZG93LnkgPSAwOworICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsK
KyAgICBtX25wV2luZG93LmhlaWdodCA9IC0xOworI2VuZGlmCisKKyAgICBtX25wV2luZG93Lndz
X2luZm8gPSB3czsKKworICAgIC8vIFRPRE8gcmVtb3ZlIGluIGZhdm9yIG9mIG51bGwgZXZlbnRz
LCBsaWtlIG1hYyBwb3J0PworICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQ
bHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCisgICAgICAgIHVwZGF0ZVBsdWdp
bldpZGdldCgpOyAvLyB3YXM6IHNldE5QV2luZG93SWZOZWVkZWQoKSwgYnV0IHRoaXMgZG9lc24n
dCBwcm9kdWNlIDB4MCByZWN0cyBhdCBmaXJzdCBnbworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBpZiAobV9kcmF3YWJs
ZSkgeworICAgICAgICBYRnJlZVBpeG1hcChnZXRQbHVnaW5EaXNwbGF5KCksIG1fZHJhd2FibGUp
OworICAgICAgICBtX2RyYXdhYmxlID0gMDsKKyAgICB9CisKKyNpZiBQTEFURk9STShHVEspCisg
ICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBwbGF0Zm9ybVdpZGdldCgpOworICAgIGlmICh3aWRnZXQp
IHsKKyAgICAgICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQod2lk
Z2V0KTsKKyAgICAgICAgQVNTRVJUKHBhcmVudCk7CisgICAgICAgIGd0a19jb250YWluZXJfcmVt
b3ZlKEdUS19DT05UQUlORVIocGFyZW50KSwgd2lkZ2V0KTsKKyAgICB9CisjZW5kaWYKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDlhNzI0MjcuLjQ1NTgxYWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wNC0x
NSAgTWFyaXVzeiBHcnplZ29yY3p5ayAgPG1hcml1c3ouZ0BzYW1zdW5nLmNvbT4KKworICAgICAg
ICBbRUZMXVtHVEtdIFNoYXJlIHBsdWdpbidzIGltcGxlbWVudGF0aW9uIGJldHdlZW4gRUZMIGFu
ZCBHdGsgcG9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MDU5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0OiBBZGQgZWNvcmVfeCBpbmNs
dWRlcyBhbmQgbGlicmFyaWVzLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVu
ZGVyVHJlZS5jcHA6IEFkZCBlY29yZV94X2luaXQvc2h1dGRvd24gZG8gRHVtcFJlbmRlcmVyVHJl
ZSB0byBzdXBwb3J0IHBsdWdpbnMgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIChpbml0RWZsKToK
KyAgICAgICAgKHNodXRkb3duRWZsKToKKwogMjAxMy0wNC0xNSAgQWxsYW4gU2FuZGZlbGQgSmVu
c2VuICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdIFF0TXVsdGltZWRp
YSBub3QgdXNlZCB3aGVuIEdTdHJlYW1lciBpcyBub3QgZm91bmQKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2VmbC9DTWFrZUxpc3RzLnR4dAppbmRleCA5OTRmY2NlLi5lYzlmYzQ5IDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0CkBAIC00MCw2ICs0MCw3IEBAIHNldChEdW1wUmVu
ZGVyVHJlZV9MSUJSQVJJRVMKICAgICAke0VDT1JFX0VWQVNfTElCUkFSSUVTfQogICAgICR7RUNP
UkVfRklMRV9MSUJSQVJJRVN9CiAgICAgJHtFQ09SRV9JTlBVVF9MSUJSQVJJRVN9CisgICAgJHtF
Q09SRV9YX0xJQlJBUklFU30KICAgICAke0VESkVfTElCUkFSSUVTfQogICAgICR7RUlOQV9MSUJS
QVJJRVN9CiAgICAgJHtFT19MSUJSQVJJRVN9CkBAIC0xMTEsNiArMTEyLDcgQEAgc2V0KER1bXBS
ZW5kZXJUcmVlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAke0VDT1JFX0VWQVNfSU5DTFVERV9E
SVJTfQogICAgICR7RUNPUkVfRklMRV9JTkNMVURFX0RJUlN9CiAgICAgJHtFQ09SRV9JTlBVVF9J
TkNMVURFX0RJUlN9CisgICAgJHtFQ09SRV9YX0lOQ0xVREVfRElSU30KICAgICAke0VESkVfSU5D
TFVERV9ESVJTfQogICAgICR7RUlOQV9JTkNMVURFX0RJUlN9CiAgICAgJHtFT19JTkNMVURFX0RJ
UlN9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCA2
ZGUyZDRhLi4wMTUzNGZiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVt
cFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxFY29yZS5oPgogI2luY2x1ZGUg
PEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxFY29yZV9GaWxlLmg+CisjaW5jbHVkZSA8RWNvcmVf
WC5oPgogI2luY2x1ZGUgPEVkamUuaD4KICNpbmNsdWRlIDxFdmFzLmg+CiAjaW5jbHVkZSA8Zm9u
dGNvbmZpZy9mb250Y29uZmlnLmg+CkBAIC0zNzAsNyArMzcxLDE0IEBAIHN0YXRpYyBib29sIGlu
aXRFZmwoKQogICAgICAgICBlY29yZV9ldmFzX3NodXRkb3duKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CisgICAgaWYgKCFlY29yZV94X2luaXQoMCkpIHsKKyAgICAgICAgZWRqZV9z
aHV0ZG93bigpOworICAgICAgICBlY29yZV9maWxlX3NodXRkb3duKCk7CisgICAgICAgIGVjb3Jl
X2V2YXNfc2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICBpZiAo
IWV3a19pbml0KCkpIHsKKyAgICAgICAgZWNvcmVfeF9zaHV0ZG93bigpOwogICAgICAgICBlZGpl
X3NodXRkb3duKCk7CiAgICAgICAgIGVjb3JlX2ZpbGVfc2h1dGRvd24oKTsKICAgICAgICAgZWNv
cmVfZXZhc19zaHV0ZG93bigpOwpAQCAtMzgzLDYgKzM5MSw3IEBAIHN0YXRpYyBib29sIGluaXRF
ZmwoKQogc3RhdGljIHZvaWQgc2h1dGRvd25FZmwoKQogewogICAgIGV3a19zaHV0ZG93bigpOwor
ICAgIGVjb3JlX3hfc2h1dGRvd24oKTsKICAgICBlZGplX3NodXRkb3duKCk7CiAgICAgZWNvcmVf
ZmlsZV9zaHV0ZG93bigpOwogICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198332</attachid>
            <date>2013-04-16 08:43:07 -0700</date>
            <delta_ts>2014-01-10 01:54:02 -0800</delta_ts>
            <desc>applied comments, remove ecore_x initialization from DumpRenderTree because it is done in ewk_init</desc>
            <filename>bug70592.patch</filename>
            <type>text/plain</type>
            <size>82936</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkMmRkZGQ2Li43MTAxMjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTMtMDQtMTUgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5j
b20+CisKKyAgICAgICAgW0VGTF1bR1RLXSBTaGFyZSBwbHVnaW4ncyBpbXBsZW1lbnRhdGlvbiBi
ZXR3ZWVuIEVGTCBhbmQgR3RrIHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzA1OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNZXJnZSBQbHVnaW5WaWV3R3RrLmNwcCBhbmQgUGx1Z2luVmlld0Vm
bC5jcHAgdG8gUGx1Z2luVmlld1gxMS5jcHAuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTog
QWRkIGluY2x1ZGUgcGF0aCB0byBndGsyeHRiaW4uaCBoZWFkZXIgZmlsZS4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOiBDaGFuZ2UgUGx1Z2luVmlld0d0ay5jcHAgdG8gUGx1Z2luVmll
d1gxMS5jcHAgc291cmNlLgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBDaGFuZ2UgUGx1
Z2luVmlld0VmbC5jcHAgdG8gUGx1Z2luVmlld0VmbC5jcHAgc291cmNlLgorICAgICAgICAqIHBs
dWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsdWdpbnMv
eDExL1BsdWdpblZpZXdYMTEuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luVmlld0d0ay5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRSb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBsdWdpbkRpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldEZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGlkZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlucHV0RXZl
bnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppbml0WEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpoYW5kbGVGb2N1c0luRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
aGFuZGxlRm9jdXNPdXRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQ
YXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlV2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmludmFsaWRhdGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9y
Y2VSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmlzdWFsQW5kQ29sb3JtYXApOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGx1Z1JlbW92ZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisKIDIwMTMtMDQtMTUgIEFydmlkIE5pbHNzb24gIDxh
bmlsc3NvbkByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XVtDU1MgRmlsdGVyc10gTm9u
LWltYWdlIGNvbnRlbnQgZGlzYXBwZWFycyB3aGVuIGZpbHRlciBhcHBsaWVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IGEzYjhmNGEuLjU1YzdmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC04
NSw2ICs4NSw3IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2RlciBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
IFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ayBcCiAJLUkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA1Yjc3MjM5MS4uMjJhYjJl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC02Mjc0LDggKzYyNzQsOCBAQCB3
ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4
dGJpbi5jIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCiAJU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL2d0ay94ZW1iZWQuaAorCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3gxMS9QbHVnaW5WaWV3WDExLmNwcAogcGxhdGZv
cm1ndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdl
dEJhY2tpbmdTdG9yZVgxMS5jcHAKIGlmIFVTRV9PUEVOR0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggYmQ0MDM2OC4uMjNiNWQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTEzLDYgKzEzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vdGV4dC9lZmwiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsdWdpbnMvZWZs
IgorICAgICIke1dFQkNPUkVfRElSfS9wbHVnaW5zL3gxMSIKICkKIAogbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCkBAIC0xODUsNyArMTg2LDcgQEAgaWYgKEVOQUJMRV9ORVRTQ0FQRV9QTFVH
SU5fQVBJKQogICAgICAgICBwbHVnaW5zL1BsdWdpblZpZXcuY3BwCiAKICAgICAgICAgcGx1Z2lu
cy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKLSAgICAgICAgcGx1Z2lucy9lZmwvUGx1Z2luVmll
d0VmbC5jcHAKKyAgICAgICAgcGx1Z2lucy94MTEvUGx1Z2luVmlld1gxMS5jcHAKICAgICApCiBl
bHNlICgpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhZTg3YmZkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1Bs
dWdpblZpZXdFZmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQ4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9s
b2dpYQotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3Rl
bXMKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MUGx1Z0luRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0Jh
c2UuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSAicnVudGltZS9KU0xv
Y2suaCIKLSNpbmNsdWRlICJydW50aW1lL09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlIDxFY29yZV9F
dmFzLmg+Ci0jaW5jbHVkZSA8RWNvcmVfWC5oPgotI2luY2x1ZGUgPEV2YXMuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1ib29sIFBsdWdp
blZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIW1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLQotICAgIGJvb2wgYWNjZXB0
ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsK
LQotICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgIFBsdWdpblZpZXc6OnNldEN1cnJl
bnRQbHVnaW5WaWV3KDApOwotICAgIHJldHVybiBhY2NlcHRlZDsKLX0KLQotI2lmIGRlZmluZWQo
WFBfVU5JWCkKLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZl
bnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2
ZW50KiBldmVudCkKLXsKLSAgICBOUEV2ZW50IHhFdmVudDsKLQotI2lmIGRlZmluZWQoWFBfVU5J
WCkKLSAgICBjb25zdCBJbnRSZWN0IHJlY3QgPSBwYXJlbnQoKS0+Y29udGVudHNUb1NjcmVlbihJ
bnRSZWN0KDAsIDAsIGV2ZW50LT5vZmZzZXRYKCksIGV2ZW50LT5vZmZzZXRZKCkpKTsKLSAgICBj
b25zdCBpbnQgZXZlbnRYID0gcmVjdC53aWR0aCgpOwotICAgIGNvbnN0IGludCBldmVudFkgPSBy
ZWN0LmhlaWdodCgpOwotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZW1vdmVFdmVudAotICAgICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2VvdXRFdmVudAotICAgICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgeEV2ZW50LnR5cGUgPSBNb3Rpb25Ob3RpZnk7
Ci0gICAgICAgIHhFdmVudC54bW90aW9uLnggPSBldmVudFg7Ci0gICAgICAgIHhFdmVudC54bW90
aW9uLnkgPSBldmVudFk7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCkgewotICAgICAgICB4RXZlbnQudHlwZSA9IEJ1dHRvblByZXNz
OwotICAgICAgICB4RXZlbnQueGJ1dHRvbi54ID0gZXZlbnRYOwotICAgICAgICB4RXZlbnQueGJ1
dHRvbi55ID0gZXZlbnRZOwotICAgICAgICB4RXZlbnQueGJ1dHRvbi5idXR0b24gPSBldmVudC0+
YnV0dG9uKCkgKyAxOyAvLyBET00gTW91c2VFdmVudCBjb3VudHMgZnJvbSAwLCBhbmQgWEJ1dHRv
bkV2ZW50IGZyb20gMS4KLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNldXBFdmVudCkgewotICAgICAgICB4RXZlbnQudHlwZSA9IEJ1dHRvblJlbGVhc2U7
Ci0gICAgICAgIHhFdmVudC54YnV0dG9uLnggPSBldmVudFg7Ci0gICAgICAgIHhFdmVudC54YnV0
dG9uLnkgPSBldmVudFk7Ci0gICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5i
dXR0b24oKSArIDE7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAg
aWYgKGRpc3BhdGNoTlBFdmVudCh4RXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9v
bCBmb2N1c2VkKQotewotICAgIGlmIChmb2N1c2VkKQotICAgICAgICBtX2VsZW1lbnQtPmRvY3Vt
ZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7Ci0KLSAgICBXaWRnZXQ6OnNldEZvY3Vz
KGZvY3VzZWQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNob3coKQotewotICAgIHNldFNlbGZW
aXNpYmxlKHRydWUpOwotCi0gICAgV2lkZ2V0OjpzaG93KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmll
dzo6aGlkZSgpCi17Ci0gICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOwotCi0gICAgV2lkZ2V0Ojpo
aWRlKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghbV9pc1N0YXJ0ZWQpCi0gICAg
ICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKLXsKLSAgICBXaWRnZXQ6OnNl
dFBhcmVudChwYXJlbnQpOwotCi0gICAgaWYgKHBhcmVudCkKLSAgICAgICAgaW5pdCgpOwotfQot
Ci12b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZO
ZWVkZWQoKQotewotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudFZpc2libGUoYm9vbCB2
aXNpYmxlKQotewotICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKLX0KLQot
TlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZm
ZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmKQotewotICAgIFN0cmluZyBmaWxlbmFt
ZShidWYsIGxlbik7Ci0KLSAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkK
LSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3Ry
aW5nKDcpOwotI2Vsc2UKLSAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7
Ci0jZW5kaWYKLQotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmICghZ2V0RmlsZVNpemUoZmls
ZW5hbWUsIHNpemUpKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAg
ICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oZmlsZW5hbWUudXRmOCgpLmRhdGEoKSwgInIiKTsK
LSAgICBpZiAoIWZpbGVIYW5kbGUpCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VO
RDsKLQotICAgIGJ1ZmZlci5yZXNpemUoc2l6ZSk7Ci0gICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFk
KGJ1ZmZlci5kYXRhKCksIDEsIHNpemUsIGZpbGVIYW5kbGUpOwotCi0gICAgZmNsb3NlKGZpbGVI
YW5kbGUpOwotCi0gICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQotICAgICAgICByZXR1cm4gTlBFUlJf
RklMRV9OT1RfRk9VTkQ7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLWJvb2wg
UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7
Ci0gICAgY2FzZSBOUE5WVG9vbGtpdDoKLSAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4o
dmFsdWUpID0gMDsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKLSAgICAgICAg
KnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOwotICAgICAgICAqcmVzdWx0ID0g
TlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5WamF2
YXNjcmlwdEVuYWJsZWRCb29sOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUp
ID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKLSAgICAgICAgKnN0
YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOwotICAgICAgICAqcmVzdWx0ID0gTlBF
UlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdl
dFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0
KQotewotICAgIGlmICghdmFsdWUgfHwgIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgIGNhc2UgTlBOVnhEaXNwbGF5OgotICAgICAg
ICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSBzdGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNv
cmVfeF9kaXNwbGF5X2dldCgpKTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDoKLSAgICAg
ICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKLSAgICAgICAgaWYgKG1faXNKYXZhU2Ny
aXB0UGF1c2VkKSB7Ci0gICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgTlBPYmplY3Qq
IHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3Jp
cHROUE9iamVjdCgpOwotCi0gICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9i
amVjdCkKLSAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7
Ci0KLSAgICAgICAgKnN0YXRpY19jYXN0PHZvaWQqKj4odmFsdWUpID0gd2luZG93U2NyaXB0T2Jq
ZWN0OwotCi0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7Ci0g
ICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkgewotICAgICAgICAgICAgKnJlc3VsdCA9
IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOwotCi0gICAgICAg
IGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1Rh
Z05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAg
ICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1l
bnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOwotCi0gICAgICAgIC8vIFJldHVybiB2YWx1
ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8v
d3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAg
aWYgKHBsdWdpblNjcmlwdE9iamVjdCkKLSAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBs
dWdpblNjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAgKnN0YXRpY19jYXN0PHZvaWQqKj4odmFsdWUp
ID0gcGx1Z2luU2NyaXB0T2JqZWN0OwotCi0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJP
UjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WbmV0c2NhcGVX
aW5kb3c6IHsKLSAgICAgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fcGFy
ZW50RnJhbWUtPnZpZXcoKS0+ZXZhc09iamVjdCgpKTsKLSAgICAgICAgaWYgKCFldmFzKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9
IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7Ci0gICAgICAgICpzdGF0aWNfY2FzdDxY
SUQqPih2YWx1ZSkgPSBzdGF0aWNfY2FzdDxXaW5kb3c+KGVjb3JlX2V2YXNfd2luZG93X2dldChl
Y29yZUV2YXMpKTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjYXNlIE5QTlZUb29sa2l0OgotICAgICAgICBpZiAo
bV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVxdWlyZXNHdGtUb29sS2l0
KSkgewotICAgICAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gMjsKLSAg
ICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6OmludmFsaWRh
dGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQ
bHVnaW5SZWN0KHJlY3QpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5Q
UmVjdCogcmVjdCkKLXsKLSAgICBpZiAoIXJlY3QpIHsKLSAgICAgICAgaW52YWxpZGF0ZSgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW52YWxpZGF0ZVJlY3QoSW50UmVjdChyZWN0
LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9t
IC0gcmVjdC0+dG9wKSk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihO
UFJlZ2lvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OmZvcmNlUmVkcmF3KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFBsdWdp
blZpZXc6OnBsYXRmb3JtU3RhcnQoKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAg
QVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7Ci0KLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpblZp
ZXc6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM1YmNiNzIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4OTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgS2FrYWksIEluYy4g
PGJyaWFuQGtha2FpLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5j
bHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGb2N1c0NvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3Qu
aCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
b3N0V2luZG93LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2ZW50
LmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3Vz
ZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5NYWlu
VGhyZWFkU2NoZWR1bGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3BhdGlh
bE5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgInJ1
bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvSlNMb2NrLmg+Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotI2luY2x1ZGUg
PGdka2NvbmZpZy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi0jZGVmaW5lIFN0
cmluZyBYdFN0cmluZ1R5cGUKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgImd0
azJ4dGJpbi5oIgotI2RlZmluZSBCb29sIGludCAvLyB0aGlzIGdvdCB1bmRlZmluZWQgc29tZXdo
ZXJlCi0jZGVmaW5lIFN0YXR1cyBpbnQgLy8gZGl0dG8KLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9u
cy9YcmVuZGVyLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8teGxpYi5oPgotI2luY2x1ZGUgPGdkay9nZGt4
Lmg+Ci0KLXVzaW5nIEpTQzo6RXhlY1N0YXRlOwotdXNpbmcgSlNDOjpJbnRlcnByZXRlcjsKLXVz
aW5nIEpTQzo6SlNMb2NrOwotdXNpbmcgSlNDOjpKU09iamVjdDsKLQotdXNpbmcgc3RkOjptaW47
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKLQotYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQo
TlBFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gc2FuaXR5IGNoZWNrCi0gICAgaWYgKCFtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwotICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0KLSAgICBib29sIGFjY2VwdGVk
ID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwot
Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcoMCk7Ci0gICAgcmV0dXJuIGFjY2VwdGVkOwotfQotCi1zdGF0aWMgV2luZG93
IGdldFJvb3RXaW5kb3coRnJhbWUqIHBhcmVudEZyYW1lKQotewotICAgIEd0a1dpZGdldCogcGFy
ZW50V2lkZ2V0ID0gcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBh
Z2VDbGllbnQoKTsKLSAgICBHZGtTY3JlZW4qIGdzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3Jl
ZW4ocGFyZW50V2lkZ2V0KTsKLSAgICByZXR1cm4gR0RLX1dJTkRPV19YV0lORE9XKGdka19zY3Jl
ZW5fZ2V0X3Jvb3Rfd2luZG93KGdzY3JlZW4pKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojp1cGRh
dGVQbHVnaW5XaWRnZXQoKQotewotICAgIGlmICghcGFyZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7Ci0gICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSB0b0ZyYW1lVmlldyhwYXJlbnQoKSk7Ci0KLSAgICBJbnRSZWN0IG9sZFdpbmRv
d1JlY3QgPSBtX3dpbmRvd1JlY3Q7Ci0gICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJl
Y3Q7Ci0KLSAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dp
bmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKTsKLSAgICBt
X2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKLSAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2lu
ZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKLQotICAgIGlmIChtX3dpbmRvd1JlY3Qg
PT0gb2xkV2luZG93UmVjdCAmJiBtX2NsaXBSZWN0ID09IG9sZENsaXBSZWN0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1
bGx5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faXNXaW5kb3dlZCAmJiAhbV93aW5k
b3dSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BM
QVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgICAgIGlmIChtX2Ry
YXdhYmxlKQotICAgICAgICAgICAgWEZyZWVQaXhtYXAoZGlzcGxheSwgbV9kcmF3YWJsZSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgbV9kcmF3YWJsZSA9IFhDcmVhdGVQaXhtYXAoZGlzcGxheSwg
Z2V0Um9vdFdpbmRvdyhtX3BhcmVudEZyYW1lLmdldCgpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChOUFNldFdpbmRvd0NhbGxi
YWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT5kZXB0aCk7Ci0gICAgICAgIFhTeW5jKGRp
c3BsYXksIGZhbHNlKTsgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZlciBrbm93cyBhYm91dCB0
aGUgRHJhd2FibGUKLSAgICB9Ci0KLSAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQotewotICAgIEFTU0VSVChwbGF0
Zm9ybVBsdWdpbldpZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOwotICAgIGlmIChmb2N1c2Vk
ICYmIHBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhwbGF0
Zm9ybVdpZGdldCgpKTsKLSAgICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQpOwotfQotCi12b2lk
IFBsdWdpblZpZXc6OnNob3coKQotewotICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgp
ID09IHBsYXRmb3JtV2lkZ2V0KCkpOwotICAgIFdpZGdldDo6c2hvdygpOwotfQotCi12b2lkIFBs
dWdpblZpZXc6OmhpZGUoKQotewotICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpID09
IHBsYXRmb3JtV2lkZ2V0KCkpOwotICAgIFdpZGdldDo6aGlkZSgpOwotfQotCi12b2lkIFBsdWdp
blZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xv
YWRlZFN1Y2Nlc3NmdWxseSkgewotICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRl
eHQsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0TlBXaW5kb3dJZk5l
ZWRlZCgpOwotCi0gICAgaWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFtX2RyYXdhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5
ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAg
Y29uc3QgYm9vbCBzeW5jWCA9IG1fcGx1Z2luRGlzcGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0g
ZGlzcGxheTsKLQotICAgIEludFJlY3QgZXhwb3NlZFJlY3QocmVjdCk7Ci0gICAgZXhwb3NlZFJl
Y3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKLSAgICBleHBvc2VkUmVjdC5tb3ZlKC1mcmFtZVJl
Y3QoKS54KCksIC1mcmFtZVJlY3QoKS55KCkpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gZHJhd2FibGVTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShk
aXNwbGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZHJhd2FibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV92aXN1YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93aW5kb3dSZWN0LndpZHRoKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93aW5kb3dS
ZWN0LmhlaWdodCgpKSk7Ci0KLSAgICBpZiAobV9pc1RyYW5zcGFyZW50KSB7Ci0gICAgICAgIC8v
IElmIHdlIGhhdmUgYSAzMiBiaXQgZHJhd2FibGUgYW5kIHRoZSBwbHVnaW4gd2FudHMgdHJhbnNw
YXJlbmN5LAotICAgICAgICAvLyB3ZSdsbCBjbGVhciB0aGUgZXhwb3NlZCBhcmVhIHRvIHRyYW5z
cGFyZW50IGZpcnN0LiAgT3RoZXJ3aXNlLAotICAgICAgICAvLyB3ZSdkIGVuZCB1cCB3aXRoIGp1
bmsgaW4gdGhlcmUgZnJvbSB0aGUgbGFzdCBwYWludCwgb3IsIHdvcnNlLAotICAgICAgICAvLyB1
bmluaXRpYWxpemVkIGRhdGEuCi0gICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShkcmF3YWJsZVN1cmZhY2UuZ2V0KCkpKTsKLQotICAgICAgICBpZiAoIShj
YWlyb19zdXJmYWNlX2dldF9jb250ZW50KGRyYXdhYmxlU3VyZmFjZS5nZXQoKSkgJiBDQUlST19D
T05URU5UX0FMUEhBKSkgewotICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBmYWtlIGl0IHdoZW4g
d2UgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIG9uIG91cgotICAgICAgICAgICAgLy8gcGl4
bWFwLiAgSWYgdGhhdCdzIG5vdCBwb3NzaWJsZSwgYXQgbGVhc3QgY2xlYXIgdGhlIHdpbmRvdyB0
bwotICAgICAgICAgICAgLy8gYXZvaWQgZHJhd2luZyBhcnRpZmFjdHMuCi0KLSAgICAgICAgICAg
IC8vIFRoaXMgV291bGQgbm90IHdvcmsgd2l0aG91dCBkb3VibGUgYnVmZmVyaW5nLCBidXQgd2Ug
YWx3YXlzIHVzZSBpdC4KLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5n
ZXQoKSwgY2Fpcm9fZ2V0X2dyb3VwX3RhcmdldChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1fd2luZG93UmVj
dC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRv
cihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFS
KTsKLQotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IuZ2V0KCksIGV4cG9zZWRSZWN0LngoKSwg
ZXhwb3NlZFJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3Qud2lk
dGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBjYWlyb19maWxsKGNyLmdldCgp
KTsKLSAgICB9Ci0KLSAgICBYRXZlbnQgeGV2ZW50OwotICAgIG1lbXNldCgmeGV2ZW50LCAwLCBz
aXplb2YoWEV2ZW50KSk7Ci0gICAgWEdyYXBoaWNzRXhwb3NlRXZlbnQmIGV4cG9zZUV2ZW50ID0g
eGV2ZW50LnhncmFwaGljc2V4cG9zZTsKLSAgICBleHBvc2VFdmVudC50eXBlID0gR3JhcGhpY3NF
eHBvc2U7Ci0gICAgZXhwb3NlRXZlbnQuZGlzcGxheSA9IGRpc3BsYXk7Ci0gICAgZXhwb3NlRXZl
bnQuZHJhd2FibGUgPSBtX2RyYXdhYmxlOwotICAgIGV4cG9zZUV2ZW50LnggPSBleHBvc2VkUmVj
dC54KCk7Ci0gICAgZXhwb3NlRXZlbnQueSA9IGV4cG9zZWRSZWN0LnkoKTsKLSAgICBleHBvc2VF
dmVudC53aWR0aCA9IGV4cG9zZWRSZWN0LngoKSArIGV4cG9zZWRSZWN0LndpZHRoKCk7IC8vIGZs
YXNoIGJ1Zz8gaXQgdGhpbmtzIHdpZHRoIGlzIHRoZSByaWdodCBpbiB0cmFuc3BhcmVudCBtb2Rl
Ci0gICAgZXhwb3NlRXZlbnQuaGVpZ2h0ID0gZXhwb3NlZFJlY3QueSgpICsgZXhwb3NlZFJlY3Qu
aGVpZ2h0KCk7IC8vIGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIGhlaWdodCBpcyB0aGUgYm90dG9tIGlu
IHRyYW5zcGFyZW50IG1vZGUKLQotICAgIGRpc3BhdGNoTlBFdmVudCh4ZXZlbnQpOwotCi0gICAg
aWYgKHN5bmNYKQotICAgICAgICBYU3luYyhtX3BsdWdpbkRpc3BsYXksIGZhbHNlKTsgLy8gc3lu
YyBjaGFuZ2VzIGJ5IHBsdWdpbgotCi0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKTsKLSAgICBjYWlyb19zYXZlKGNyKTsKLQotICAgIGNhaXJvX3NldF9z
b3VyY2Vfc3VyZmFjZShjciwgZHJhd2FibGVTdXJmYWNlLmdldCgpLCBmcmFtZVJlY3QoKS54KCks
IGZyYW1lUmVjdCgpLnkoKSk7Ci0KLSAgICBjYWlyb19yZWN0YW5nbGUoY3IsCi0gICAgICAgICAg
ICAgICAgICAgIGZyYW1lUmVjdCgpLngoKSArIGV4cG9zZWRSZWN0LngoKSwgZnJhbWVSZWN0KCku
eSgpICsgZXhwb3NlZFJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICBleHBvc2VkUmVjdC53
aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSk7Ci0gICAgY2Fpcm9fY2xpcChjcik7Ci0KLSAg
ICBpZiAobV9pc1RyYW5zcGFyZW50KQotICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENB
SVJPX09QRVJBVE9SX09WRVIpOwotICAgIGVsc2UKLSAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3BhaW50KGNyKTsKLQotICAg
IGNhaXJvX3Jlc3RvcmUoY3IpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJk
RXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
Ci0KLSAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkg
IT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFt
ZXMoKS5rZXl1cEV2ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOUEV2ZW50IHhFdmVudDsK
LSAgICBpbml0WEV2ZW50KCZ4RXZlbnQpOwotICAgIEdka0V2ZW50S2V5KiBnZGtFdmVudCA9IGV2
ZW50LT5rZXlFdmVudCgpLT5nZGtFdmVudEtleSgpOwotCi0gICAgeEV2ZW50LnR5cGUgPSAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSA/IDIgOiAzOyAvLyBLZXlQ
cmVzcy9SZWxlYXNlIGdldCB1bnNldCBzb21ld2hlcmUKLSAgICB4RXZlbnQueGtleS5yb290ID0g
Z2V0Um9vdFdpbmRvdyhtX3BhcmVudEZyYW1lLmdldCgpKTsKLSAgICB4RXZlbnQueGtleS5zdWJ3
aW5kb3cgPSAwOyAvLyB3ZSBoYXZlIG5vIGNoaWxkIHdpbmRvdwotICAgIHhFdmVudC54a2V5LnRp
bWUgPSBldmVudC0+dGltZVN0YW1wKCk7Ci0gICAgeEV2ZW50LnhrZXkuc3RhdGUgPSBnZGtFdmVu
dC0+c3RhdGU7IC8vIEdka01vZGlmaWVyVHlwZSBtaXJyb3JzIHhsaWIgc3RhdGUgbWFza3MKLSAg
ICB4RXZlbnQueGtleS5rZXljb2RlID0gZ2RrRXZlbnQtPmhhcmR3YXJlX2tleWNvZGU7Ci0gICAg
eEV2ZW50LnhrZXkuc2FtZV9zY3JlZW4gPSB0cnVlOwotCi0gICAgLy8gTk9URTogQXMgdGhlIFhF
dmVudHMgc2VudCB0byB0aGUgcGx1Zy1pbiBhcmUgc3ludGhlc2l6ZWQgYW5kIHRoZXJlIGlzIG5v
dCBhIG5hdGl2ZSB3aW5kb3cKLSAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwbHVnLWluIHJl
Y3RhbmdsZSwgc29tZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgWEV2ZW50IHN0cnVjdHVyZXMgYXJl
IG5vdAotICAgIC8vIHNldCB0byB0aGVpciBub3JtYWwgWHNlcnZlciB2YWx1ZXMuIGUuZy4gS2V5
IGV2ZW50cyBkb24ndCBoYXZlIGEgcG9zaXRpb24uCi0gICAgLy8gc291cmNlOiBodHRwczovL2Rl
dmVsb3Blci5tb3ppbGxhLm9yZy9lbi9OUEV2ZW50Ci0gICAgeEV2ZW50LnhrZXkueCA9IDA7Ci0g
ICAgeEV2ZW50LnhrZXkueSA9IDA7Ci0gICAgeEV2ZW50LnhrZXkueF9yb290ID0gMDsKLSAgICB4
RXZlbnQueGtleS55X3Jvb3QgPSAwOwotCi0gICAgaWYgKGRpc3BhdGNoTlBFdmVudCh4RXZlbnQp
KQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotc3RhdGljIHVuc2ln
bmVkIGludCBpbnB1dEV2ZW50U3RhdGUoTW91c2VFdmVudCogZXZlbnQpCi17Ci0gICAgdW5zaWdu
ZWQgaW50IHN0YXRlID0gMDsKLSAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKLSAgICAgICAgc3Rh
dGUgfD0gQ29udHJvbE1hc2s7Ci0gICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQotICAgICAgICBz
dGF0ZSB8PSBTaGlmdE1hc2s7Ci0gICAgaWYgKGV2ZW50LT5hbHRLZXkoKSkKLSAgICAgICAgc3Rh
dGUgfD0gTW9kMU1hc2s7Ci0gICAgaWYgKGV2ZW50LT5tZXRhS2V5KCkpCi0gICAgICAgIHN0YXRl
IHw9IE1vZDRNYXNrOwotICAgIHJldHVybiBzdGF0ZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpp
bml0WEV2ZW50KFhFdmVudCogeEV2ZW50KQotewotICAgIG1lbXNldCh4RXZlbnQsIDAsIHNpemVv
ZihYRXZlbnQpKTsKLQotICAgIHhFdmVudC0+eGFueS5zZXJpYWwgPSAwOyAvLyB3ZSBhcmUgdW5h
d2FyZSBvZiB0aGUgbGFzdCByZXF1ZXN0IHByb2Nlc3NlZCBieSBYIFNlcnZlcgotICAgIHhFdmVu
dC0+eGFueS5zZW5kX2V2ZW50ID0gZmFsc2U7Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBtX3Bh
cmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0g
ICAgeEV2ZW50LT54YW55LmRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShndGtfd2lkZ2V0
X2dldF9kaXNwbGF5KHdpZGdldCkpOwotCi0gICAgLy8gTW96aWxsYSBhbHNvIHNlbmRzIE5vbmUg
aGVyZSBmb3Igd2luZG93bGVzcyBwbHVnaW5zLiBTZWUgbnNPYmplY3RGcmFtZS5jcHAgaW4gdGhl
IE1vemlsbGEgc291cmNlcy4KLSAgICAvLyBUaGlzIG1ldGhvZCBhbHNvIHNldHMgdXAgRm9jdXNJ
biBhbmQgRm9jdXNPdXQgZXZlbnRzIGZvciB3aW5kb3dzIHBsdWdpbnMsIGJ1dCBNb3ppbGxhIGRv
ZXNuJ3QKLSAgICAvLyBldmVuIHNlbmQgdGhlc2UgdHlwZXMgb2YgZXZlbnRzIHRvIHdpbmRvd2Vk
IHBsdWdpbnMuIEluIHRoZSBmdXR1cmUsIGl0IG1heSBiZSBnb29kIHRvIG9ubHkKLSAgICAvLyBz
ZW5kIHRoZW0gdG8gd2luZG93bGVzcyBwbHVnaW5zLgotICAgIHhFdmVudC0+eGFueS53aW5kb3cg
PSBOb25lOwotfQotCi1zdGF0aWMgdm9pZCBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhY
RXZlbnQqIHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9v
bVBvcywgRnJhbWUqIHBhcmVudEZyYW1lKQotewotICAgIFhCdXR0b25FdmVudCYgeGJ1dHRvbiA9
IHhFdmVudC0+eGJ1dHRvbjsKLSAgICB4YnV0dG9uLnR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCA/IEJ1dHRvblByZXNzIDogQnV0dG9uUmVsZWFzZTsK
LSAgICB4YnV0dG9uLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKLSAgICB4YnV0
dG9uLnN1YndpbmRvdyA9IDA7Ci0gICAgeGJ1dHRvbi50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgp
OwotICAgIHhidXR0b24ueCA9IHBvc3Rab29tUG9zLngoKTsKLSAgICB4YnV0dG9uLnkgPSBwb3N0
Wm9vbVBvcy55KCk7Ci0gICAgeGJ1dHRvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOwotICAg
IHhidXR0b24ueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKLSAgICB4YnV0dG9uLnN0YXRlID0g
aW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKLSAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgewot
ICAgIGNhc2UgTWlkZGxlQnV0dG9uOgotICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmlnaHRCdXR0b246Ci0gICAgICAgIHhidXR0b24u
YnV0dG9uID0gQnV0dG9uMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMZWZ0QnV0dG9uOgot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHhidXR0b24uYnV0dG9uID0gQnV0dG9uMTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIHhidXR0b24uc2FtZV9zY3JlZW4gPSB0cnVlOwotfQotCi1zdGF0
aWMgdm9pZCBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91
c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywgRnJhbWUqIHBhcmVu
dEZyYW1lKQotewotICAgIFhNb3Rpb25FdmVudCYgeG1vdGlvbiA9IHhFdmVudC0+eG1vdGlvbjsK
LSAgICB4bW90aW9uLnR5cGUgPSBNb3Rpb25Ob3RpZnk7Ci0gICAgeG1vdGlvbi5yb290ID0gZ2V0
Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7Ci0gICAgeG1vdGlvbi5zdWJ3aW5kb3cgPSAwOwotICAg
IHhtb3Rpb24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKLSAgICB4bW90aW9uLnggPSBwb3N0
Wm9vbVBvcy54KCk7Ci0gICAgeG1vdGlvbi55ID0gcG9zdFpvb21Qb3MueSgpOwotICAgIHhtb3Rp
b24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKLSAgICB4bW90aW9uLnlfcm9vdCA9IGV2ZW50
LT5zY3JlZW5ZKCk7Ci0gICAgeG1vdGlvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7
Ci0gICAgeG1vdGlvbi5pc19oaW50ID0gTm90aWZ5Tm9ybWFsOwotICAgIHhtb3Rpb24uc2FtZV9z
Y3JlZW4gPSB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmlj
RmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9pbnQm
IHBvc3Rab29tUG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCi17Ci0gICAgWENyb3NzaW5nRXZlbnQm
IHhjcm9zc2luZyA9IHhFdmVudC0+eGNyb3NzaW5nOwotICAgIHhjcm9zc2luZy50eXBlID0gZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgPyBFbnRlck5vdGlmeSA6
IExlYXZlTm90aWZ5OwotICAgIHhjcm9zc2luZy5yb290ID0gZ2V0Um9vdFdpbmRvdyhwYXJlbnRG
cmFtZSk7Ci0gICAgeGNyb3NzaW5nLnN1YndpbmRvdyA9IDA7Ci0gICAgeGNyb3NzaW5nLnRpbWUg
PSBldmVudC0+dGltZVN0YW1wKCk7Ci0gICAgeGNyb3NzaW5nLnggPSBwb3N0Wm9vbVBvcy55KCk7
Ci0gICAgeGNyb3NzaW5nLnkgPSBwb3N0Wm9vbVBvcy54KCk7Ci0gICAgeGNyb3NzaW5nLnhfcm9v
dCA9IGV2ZW50LT5zY3JlZW5YKCk7Ci0gICAgeGNyb3NzaW5nLnlfcm9vdCA9IGV2ZW50LT5zY3Jl
ZW5ZKCk7Ci0gICAgeGNyb3NzaW5nLnN0YXRlID0gaW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKLSAg
ICB4Y3Jvc3NpbmcubW9kZSA9IE5vdGlmeU5vcm1hbDsKLSAgICB4Y3Jvc3NpbmcuZGV0YWlsID0g
Tm90aWZ5RGV0YWlsTm9uZTsKLSAgICB4Y3Jvc3Npbmcuc2FtZV9zY3JlZW4gPSB0cnVlOwotICAg
IHhjcm9zc2luZy5mb2N1cyA9IGZhbHNlOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCi17Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
Ci0KLSAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGV2ZW50LT5idXR0b24o
KSA9PSBSaWdodEJ1dHRvbiAmJiBtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtJZ25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewot
ICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAg
ICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIGZv
Y3VzUGx1Z2luRWxlbWVudCgpOwotICAgIH0KLQotICAgIE5QRXZlbnQgeEV2ZW50OwotICAgIGlu
aXRYRXZlbnQoJnhFdmVudCk7Ci0KLSAgICBJbnRQb2ludCBwb3N0Wm9vbVBvcyA9IHJvdW5kZWRJ
bnRQb2ludChtX2VsZW1lbnQtPnJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChldmVudC0+YWJz
b2x1dGVMb2NhdGlvbigpKSk7Ci0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1
cEV2ZW50KQotICAgICAgICBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcygmeEV2ZW50LCBl
dmVudCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJhbWUuZ2V0KCkpOwotICAgIGVsc2UgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQotICAgICAgICBzZXRY
TW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcygmeEV2ZW50LCBldmVudCwgcG9zdFpvb21Qb3MsIG1f
cGFyZW50RnJhbWUuZ2V0KCkpOwotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcygm
eEV2ZW50LCBldmVudCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJhbWUuZ2V0KCkpOwotCi0gICAg
ICAgIC8vIFRoaXMgaXMgYSB3b3JrLWFyb3VuZCBmb3IgcGx1Z2lucyB3aGljaCBjaGFuZ2UgdGhl
IGN1cnNvci4gV2hlbiB0aGF0IGhhcHBlbnMgd2UKLSAgICAgICAgLy8gZ2V0IG91dCBvZiBzeW5j
IHdpdGggR0RLIHNvbWVob3cuIFJlc2V0dGluZyB0aGUgY3Vyc29yIGhlcmUgc2VlbXMgdG8gZml4
IHRoZSBpc3N1ZS4KLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlb3V0RXZlbnQpCi0gICAgICAgICAgICBnZGtfd2luZG93X3NldF9jdXJzb3IoZ3RrX3dpZGdl
dF9nZXRfd2luZG93KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9y
bVBhZ2VDbGllbnQoKSksIDApOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkK
LXsKLSAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWEV2ZW50IG5wRXZlbnQ7Ci0g
ICAgaW5pdFhFdmVudCgmbnBFdmVudCk7Ci0KLSAgICBYRm9jdXNDaGFuZ2VFdmVudCYgZXZlbnQg
PSBucEV2ZW50Lnhmb2N1czsKLSAgICBldmVudC50eXBlID0gOTsgLy8gRm9jdXNJbiBnZXRzIHVu
c2V0IHNvbWV3aGVyZQotICAgIGV2ZW50Lm1vZGUgPSBOb3RpZnlOb3JtYWw7Ci0gICAgZXZlbnQu
ZGV0YWlsID0gTm90aWZ5RGV0YWlsTm9uZTsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50
KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKLXsKLSAgICBp
ZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3Nm
dWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWEV2ZW50IG5wRXZlbnQ7Ci0gICAgaW5pdFhF
dmVudCgmbnBFdmVudCk7Ci0KLSAgICBYRm9jdXNDaGFuZ2VFdmVudCYgZXZlbnQgPSBucEV2ZW50
Lnhmb2N1czsKLSAgICBldmVudC50eXBlID0gMTA7IC8vIEZvY3VzT3V0IGdldHMgdW5zZXQgc29t
ZXdoZXJlCi0gICAgZXZlbnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKLSAgICBldmVudC5kZXRhaWwg
PSBOb3RpZnlEZXRhaWxOb25lOwotCi0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQot
Ci12b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCi17Ci0gICAg
V2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKLQotICAgIGlmIChwYXJlbnQpCi0gICAgICAgIGlu
aXQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVj
dCYpCi17Ci0gICAgaWYgKCFtX2lzV2luZG93ZWQpCi0gICAgICAgIHNldE5QV2luZG93SWZOZWVk
ZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKLXsKLSAg
ICBpZiAoIW1faXNTdGFydGVkIHx8ICFwYXJlbnQoKSB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPnNldHdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIHBsdWdpbiBk
aWRuJ3QgbG9hZCBzdWNlc3NmdWxseSwgbm8gcG9pbnQgaW4gY2FsbGluZyBzZXR3aW5kb3cKLSAg
ICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1Z2luJ3Mgc2V0d2luZG93
IGlmIGl0J3MgZnVsbC1wYWdlIG9yIHdpbmRvd2VkCi0gICAgaWYgKG1fbW9kZSAhPSBOUF9GVUxM
ICYmIG1fbW9kZSAhPSBOUF9FTUJFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2hlY2sg
aWYgdGhlIHBsYXRmb3JtUGx1Z2luV2lkZ2V0IHN0aWxsIGV4aXN0cwotICAgIGlmIChtX2lzV2lu
ZG93ZWQgJiYgIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2NsaXBSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAvLyBJZiB3aWR0aCBvciBoZWln
aHQgYXJlIG51bGwsIHNldCB0aGUgY2xpcFJlY3QgdG8gbnVsbCwKLSAgICAgICAgLy8gaW5kaWNh
dGluZyB0aGF0IHRoZSBwbHVnaW4gaXMgbm90IHZpc2libGUvc2Nyb2xsZWQgb3V0LgotICAgICAg
ICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOwotICAgICAgICBtX25wV2luZG93LmNsaXBS
ZWN0LnJpZ2h0ID0gMDsKLSAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwotICAg
ICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gQ2xpcHBpbmcgcmVjdGFuZ2xlIG9mIHRoZSBwbHVnLWluOyB0aGUgb3JpZ2luIGlzIHRo
ZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGRyYXdhYmxlIG9yIHdpbmRvdy4gCi0gICAgICAgIG1f
bnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fbnBXaW5kb3cueCArIG1fY2xpcFJlY3QueCgpOwot
ICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IG1fbnBXaW5kb3cueSArIG1fY2xpcFJl
Y3QueSgpOwotICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9ucFdpbmRvdy54
ICsgbV9jbGlwUmVjdC54KCkgKyBtX2NsaXBSZWN0LndpZHRoKCk7Ci0gICAgICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QuYm90dG9tID0gbV9ucFdpbmRvdy55ICsgbV9jbGlwUmVjdC55KCkgKyBtX2Ns
aXBSZWN0LmhlaWdodCgpOwotICAgIH0KLQotICAgIC8vIEZMQVNIIFdPUktBUk9VTkQ6IE9ubHkg
c2V0IGluaXRpYWxseS4gTXVsdGlwbGUgY2FsbHMgdG8KLSAgICAvLyBzZXROUFdpbmRvdygpIGNh
dXNlIHRoZSBwbHVnaW4gdG8gY3Jhc2ggaW4gd2luZG93ZWQgbW9kZS4KLSAgICBpZiAoIW1fcGx1
Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDYWxsU2V0V2luZG93TW9yZVRo
YW5PbmNlKSB8fCAhbV9pc1dpbmRvd2VkCi0gICAgICAgIHx8IG1fbnBXaW5kb3cud2lkdGggPT0g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0xKSB8fCBtX25wV2luZG93LmhlaWdodCA9PSBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oLTEpKSB7Ci0gICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSBtX3dpbmRv
d1JlY3Qud2lkdGgoKTsKLSAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dpbmRvd1JlY3Qu
aGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKLSAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2Us
ICZtX25wV2luZG93KTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLQotICAgIGlmICghbV9pc1dpbmRvd2VkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHdGtYdEJpbiB3aWxsIGNhbGwgZ3RrX3dpZGdldF9z
aXplX2FsbG9jYXRlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGl0IGhlcmUuCi0gICAgaWYgKCFt
X25lZWRzWEVtYmVkKSB7Ci0gICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklO
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3Qu
eSgpKTsKLSAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBt
X3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fZGVsYXllZEFsbG9jYXRpb24gPSBtX3dpbmRvd1JlY3Q7Ci0g
ICAgdXBkYXRlV2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
Ojp1cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpCi17Ci0gICAgLy8gSWYgdGhlIHdpbmRv
dyBoYXMgbm90IGJlZW4gZW1iZWRkZWQgeWV0ICh0aGUgcGx1ZyBhZGRlZCksIHdlIGRlbGF5IHNl
dHRpbmcgaXRzIGFsbG9jYXRpb24gdW50aWwgCi0gICAgLy8gdGhhdCBwb2ludC4gVGhpcyBmaXhl
cyBpc3N1ZXMgd2l0aCBzb21lIEphdmEgcGx1Z2luIGluc3RhbmNlcyBub3QgcmVuZGVyaW5nIGlt
bWVkaWF0ZWx5LgotICAgIGlmICghbV9wbHVnQWRkZWQgfHwgbV9kZWxheWVkQWxsb2NhdGlvbi5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKTsKLSAgICBpZiAoZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQod2lk
Z2V0KSkgewotICAgICAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3QgPSBtX2NsaXBSZWN0OwotI2lm
ZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgICAgIEdka1JlZ2lvbiogY2xpcFJlZ2lvbiA9IGdk
a19yZWdpb25fcmVjdGFuZ2xlKCZjbGlwUmVjdCk7Ci0gICAgICAgIGdka193aW5kb3dfc2hhcGVf
Y29tYmluZV9yZWdpb24oZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCksIGNsaXBSZWdpb24s
IDAsIDApOwotICAgICAgICBnZGtfcmVnaW9uX2Rlc3Ryb3koY2xpcFJlZ2lvbik7Ci0jZWxzZQot
ICAgICAgICBjYWlyb19yZWdpb25fdCogY2xpcFJlZ2lvbiA9IGNhaXJvX3JlZ2lvbl9jcmVhdGVf
cmVjdGFuZ2xlKCZjbGlwUmVjdCk7Ci0gICAgICAgIGdka193aW5kb3dfc2hhcGVfY29tYmluZV9y
ZWdpb24oZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCksIGNsaXBSZWdpb24sIDAsIDApOwot
ICAgICAgICBjYWlyb19yZWdpb25fZGVzdHJveShjbGlwUmVnaW9uKTsKLSNlbmRpZgotICAgIH0K
LQotICAgIC8vIFRoZSBnb2FsIGlzIHRvIHRyeSB0byBhdm9pZCBjYWxsaW5nIGd0a193aWRnZXRf
c2l6ZV9hbGxvY2F0ZSBpbiB0aGUgV2ViVmlldydzCi0gICAgLy8gc2l6ZS1hbGxvY2F0ZSBtZXRo
b2QuIEl0IGJsb2NrcyB0aGUgbWFpbiBsb29wIGFuZCBpZiB0aGUgd2lkZ2V0IGlzIG9mZnNjcmVl
bgotICAgIC8vIG9yIGhhc24ndCBtb3ZlZCBpdCBpc24ndCByZXF1aXJlZC4KLQotICAgIC8vIERv
bid0IGRvIGFueXRoaW5nIGlmIHRoZSBhbGxvY2F0aW9uIGhhcyBub3QgY2hhbmdlZC4KLSAgICBH
dGtBbGxvY2F0aW9uIGN1cnJlbnRBbGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9j
YXRpb24od2lkZ2V0LCAmY3VycmVudEFsbG9jYXRpb24pOwotICAgIGlmIChjdXJyZW50QWxsb2Nh
dGlvbiA9PSBtX2RlbGF5ZWRBbGxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBE
b24ndCBkbyBhbnl0aGluZyBpZiBib3RoIHRoZSBvbGQgYW5kIHRoZSBuZXcgYWxsb2NhdGlvbnMg
YXJlIG91dHNpZGUgdGhlIGZyYW1lLgotICAgIEludFJlY3QgY3VycmVudEFsbG9jYXRpb25SZWN0
KGN1cnJlbnRBbGxvY2F0aW9uKTsKLSAgICBjdXJyZW50QWxsb2NhdGlvblJlY3QuaW50ZXJzZWN0
KGZyYW1lUmVjdCgpKTsKLSAgICBpZiAoY3VycmVudEFsbG9jYXRpb25SZWN0LmlzRW1wdHkoKSAm
JiBtX2NsaXBSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19vYmplY3Rf
c2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgImRlbGF5ZWQtYWxsb2NhdGlvbiIsICZtX2RlbGF5
ZWRBbGxvY2F0aW9uKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJv
b2wgdmlzaWJsZSkKLXsKLSAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgPT0gdmlzaWJsZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOwot
Ci0gICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSB7Ci0g
ICAgICAgIGlmICh2aXNpYmxlKQotICAgICAgICAgICAgZ3RrX3dpZGdldF9zaG93KHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBndGtfd2lkZ2V0X2hp
ZGUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgfQotfQotCi1OUEVycm9yIFBsdWdpblZp
ZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIG91dHB1dEJ1ZmZlciwgdWludDMy
X3QgZmlsZW5hbWVMZW5ndGgsIGNvbnN0IGNoYXIqIGZpbGVuYW1lQnVmZmVyKQotewotICAgIC8v
IFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGVu
Y29kaW5nIHRoZSBmaWxlbmFtZQotICAgIC8vIGlzIGluLCBidXQgbW9zdCBwb3J0cyBzZWVtIHRv
IGFzc3VtZSBVVEYtOCBoZXJlIGFuZCB0aGUgdGVzdCBwbHVnaW4gaXMgZGVmaW5pdGVseQotICAg
IC8vIHNlbmRpbmcgdGhlIHBhdGggaW4gVVRGLTggZW5jb2RpbmcuCi0gICAgQ1N0cmluZyBmaWxl
bmFtZShmaWxlbmFtZUJ1ZmZlciwgZmlsZW5hbWVMZW5ndGgpOwotCi0gICAgR1JlZlB0cjxHRmls
ZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9jb21tYW5kbGluZV9hcmcoZmlsZW5h
bWUuZGF0YSgpKSk7Ci0gICAgaWYgKGdfZmlsZV9xdWVyeV9maWxlX3R5cGUoZmlsZS5nZXQoKSwg
R19GSUxFX1FVRVJZX0lORk9fTk9ORSwgMCkgIT0gR19GSUxFX1RZUEVfUkVHVUxBUikKLSAgICAg
ICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgR1JlZlB0cjxHRmlsZUluZm8+
IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKGZpbGUuZ2V0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX1FVRVJZX0lORk9f
Tk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgMCkpOwotICAgIGlmICghZmlsZUluZm8pCi0gICAgICAgIHJldHVybiBO
UEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIEdSZWZQdHI8R0ZpbGVJbnB1dFN0cmVhbT4gaW5w
dXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX3JlYWQoZmlsZS5nZXQoKSwgMCwgMCkpOwotICAg
IGlmICghaW5wdXRTdHJlYW0pCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsK
LQotICAgIG91dHB1dEJ1ZmZlci5yZXNpemUoZ19maWxlX2luZm9fZ2V0X3NpemUoZmlsZUluZm8u
Z2V0KCkpKTsKLSAgICBnc2l6ZSBieXRlc1JlYWQgPSAwOwotICAgIGlmICghZ19pbnB1dF9zdHJl
YW1fcmVhZF9hbGwoR19JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0uZ2V0KCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyLmRhdGEoKSwgb3V0cHV0QnVmZmVy
LnNpemUoKSwgJmJ5dGVzUmVhZCwgMCwgMCkpCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05P
VF9GT1VORDsKLQotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotYm9vbCBQbHVnaW5W
aWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSwgTlBFcnJvciogcmVzdWx0KQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBj
YXNlIE5QTlZUb29sa2l0OgotICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkg
PSAyOwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOgotICAgICAgICAqc3RhdGlj
X2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05P
X0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVmphdmFzY3JpcHRF
bmFibGVkQm9vbDoKLSAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7
Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6Ci0gICAgICAgICpzdGF0aWNfY2Fz
dDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJS
T1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKE5Q
TlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQotewotICAg
IHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlZ4RGlzcGxheToKLSAgICAgICAgaWYg
KG1fbmVlZHNYRW1iZWQpCi0gICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSAodm9pZCAqKUdE
S19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSAodm9pZCAqKUdUS19YVEJJTihwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKS0+eHRjbGllbnQueHRkaXNwbGF5OwotICAgICAgICAqcmVzdWx0
ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5W
eHRBcHBDb250ZXh0OgotICAgICAgICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsKLSAgICAgICAgICAg
ICoodm9pZCAqKil2YWx1ZSA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0IChHVEtfWFRC
SU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0ZGlzcGxheSk7Ci0KLSAgICAg
ICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKLSAgICAgICAgICAgIEdka1dp
bmRvdyogZ2RrV2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fcGFyZW50RnJhbWUtPnZp
ZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7Ci0gICAgICAgICAgICBH
ZGtXaW5kb3cqIHRvcGxldmVsV2luZG93ID0gZ2RrX3dpbmRvd19nZXRfdG9wbGV2ZWwoZ2RrV2lu
ZG93KTsKLSAgICAgICAgICAgIGlmICghdG9wbGV2ZWxXaW5kb3cpIHsKLSAgICAgICAgICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpzdGF0aWNfY2FzdDxXaW5kb3cqPih2
YWx1ZSkgPSBHREtfV0lORE9XX1hXSU5ET1codG9wbGV2ZWxXaW5kb3cpOwotICAgICAgICAgICAg
KnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0K
LXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19h
cmVhKEdUS19XSURHRVQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSksIHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQ
bHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0
KSB7Ci0gICAgICAgIGludmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVm
dCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKLSAgICBpbnZhbGlkYXRlV2luZG93bGVzc1Bs
dWdpblJlY3Qocik7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJl
Z2lvbikKLXsKLSAgICAvLyBUT0RPOiBvcHRpbWl6ZQotICAgIGludmFsaWRhdGUoKTsKLX0KLQot
dm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCi17Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkK
LSAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwot
ICAgIGVsc2UKLSAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KG1fcGFyZW50RnJhbWUtPnZp
ZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7Ci19Ci0KLXN0YXRpYyBE
aXNwbGF5KiBnZXRQbHVnaW5EaXNwbGF5KCkKLXsKLSAgICAvLyBUaGUgcGx1Z2luIHRvb2xraXQg
bWlnaHQgaGF2ZSBhIGRpZmZlcmVudCBYIGNvbm5lY3Rpb24gb3Blbi4gIFNpbmNlIHdlJ3JlCi0g
ICAgLy8gYSBnZGsvZ3RrIGFwcCwgd2UnbGwgKHByb2JhYmx5PykgaGF2ZSB0aGUgc2FtZSBYIGNv
bm5lY3Rpb24gYXMgYW55IGdkay1iYXNlZAotICAgIC8vIHBsdWdpbnMsIHNvIHdlIGNhbiByZXR1
cm4gdGhhdC4gIFdlIG1pZ2h0IHdhbnQgdG8gYWRkIG90aGVyIGltcGxlbWVudGF0aW9ucyBoZXJl
Ci0gICAgLy8gbGF0ZXIuCi0KLSAgICByZXR1cm4gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rp
c3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldFZpc3VhbEFuZENvbG9y
bWFwKGludCBkZXB0aCwgVmlzdWFsKiogdmlzdWFsLCBDb2xvcm1hcCogY29sb3JtYXApCi17Ci0g
ICAgKnZpc3VhbCA9IDA7Ci0gICAgKmNvbG9ybWFwID0gMDsKLQotICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAg
ICBpbnQgcm1haiwgcm1pbjsKLSAgICBpZiAoZGVwdGggPT0gMzIgJiYgKCFYUmVuZGVyUXVlcnlW
ZXJzaW9uKGRpc3BsYXksICZybWFqLCAmcm1pbikgfHwgKHJtYWogPT0gMCAmJiBybWluIDwgNSkp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBYVmlzdWFsSW5mbyB0ZW1wbDsKLSAgICB0ZW1wbC5z
Y3JlZW4gID0gZ2RrX3NjcmVlbl9nZXRfbnVtYmVyKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7
Ci0gICAgdGVtcGwuZGVwdGggICA9IGRlcHRoOwotICAgIHRlbXBsLmNfY2xhc3MgPSBUcnVlQ29s
b3I7Ci0gICAgaW50IG5WaXN1YWxzOwotICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvID0gWEdl
dFZpc3VhbEluZm8oZGlzcGxheSwgVmlzdWFsU2NyZWVuTWFzayB8IFZpc3VhbERlcHRoTWFzayB8
IFZpc3VhbENsYXNzTWFzaywgJnRlbXBsLCAmblZpc3VhbHMpOwotCi0gICAgaWYgKCFuVmlzdWFs
cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRlcHRoID09IDMyKSB7Ci0gICAgICAgIGZv
ciAoaW50IGlkeCA9IDA7IGlkeCA8IG5WaXN1YWxzOyArK2lkeCkgewotICAgICAgICAgICAgWFJl
bmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRpc3BsYXks
IHZpc3VhbEluZm9baWR4XS52aXN1YWwpOwotICAgICAgICAgICAgaWYgKGZvcm1hdC0+dHlwZSA9
PSBQaWN0VHlwZURpcmVjdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2spIHsKLSAgICAgICAg
ICAgICAgICAgKnZpc3VhbCA9IHZpc3VhbEluZm9baWR4XS52aXN1YWw7Ci0gICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAg
ICAqdmlzdWFsID0gdmlzdWFsSW5mb1swXS52aXN1YWw7Ci0KLSAgICBYRnJlZSh2aXN1YWxJbmZv
KTsKLQotICAgIGlmICgqdmlzdWFsKQotICAgICAgICAqY29sb3JtYXAgPSBYQ3JlYXRlQ29sb3Jt
YXAoZGlzcGxheSwgR0RLX1JPT1RfV0lORE9XKCksICp2aXN1YWwsIEFsbG9jTm9uZSk7Ci19Ci0K
LWdib29sZWFuIFBsdWdpblZpZXc6OnBsdWdSZW1vdmVkQ2FsbGJhY2soR3RrU29ja2V0KiBzb2Nr
ZXQsIFBsdWdpblZpZXcqIHZpZXcpCi17Ci0gICAgdmlldy0+bV9wbHVnQWRkZWQgPSBmYWxzZTsK
LSAgICByZXR1cm4gVFJVRTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFj
ayhHdGtTb2NrZXQqIHNvY2tldCwgUGx1Z2luVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQoc29j
a2V0KTsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgdmlldy0+bV9wbHVnQWRkZWQgPSB0cnVlOwot
ICAgIHZpZXctPnVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRDbGlwKCk7Ci19Ci0KLWJvb2wgUGx1
Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAg
ICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKLQot
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKLSAgICAgICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRz
WEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICB9Ci0K
LSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIEd0a1dpZGdldCogcGFnZUNsaWVudCA9
IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQo
KTsKLSAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKLSAgICAgICAgICAgIC8vIElmIG91ciBw
YXJlbnQgaXMgbm90IGFuY2hvcmVkIHRoZSBzdGFydHVwIHByb2Nlc3Mgd2lsbAotICAgICAgICAg
ICAgLy8gZmFpbCBtaXNlcmFibHkgZm9yIFhFbWJlZCBwbHVnaW5zIGEgYml0IGxhdGVyIG9uIHdo
ZW4KLSAgICAgICAgICAgIC8vIHdlIHRyeSB0byBnZXQgdGhlIElEIG9mIG91ciB3aW5kb3cgKHNp
bmNlIHJlYWxpemUgd2lsbAotICAgICAgICAgICAgLy8gZmFpbCksIHNvIGxldCdzIGp1c3QgYWJv
cnQgaGVyZS4KLSAgICAgICAgICAgIGlmICghZ3RrX3dpZGdldF9nZXRfcGFyZW50KHBhZ2VDbGll
bnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgbV9wbHVn
QWRkZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a19zb2NrZXRf
bmV3KCkpOwotICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihwYWdl
Q2xpZW50KSwgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICJwbHVnLWFkZGVkIiwgR19DQUxMQkFDSyhQ
bHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAicGx1Zy1yZW1vdmVkIiwgR19DQUxM
QkFDSyhQbHVnaW5WaWV3OjpwbHVnUmVtb3ZlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoZ3RrX3h0YmluX25ldyhwYWdlQ2xp
ZW50LCAwKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7Ci0g
ICAgICAgIG1fcGx1Z2luRGlzcGxheSA9IGdldFBsdWdpbkRpc3BsYXkoKTsKLSAgICB9Ci0KLSAg
ICBzaG93KCk7Ci0KLSAgICAgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBuZXcg
TlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOwotICAgICAgICB3cy0+dHlwZSA9IDA7Ci0KLSAg
ICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZVdpbmRvdzsKLSAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKLSAgICAgICAgICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKTsKLSAgICAgICAgICAgIGd0
a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOwotICAgICAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihndGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpKSk7Ci0gICAgICAgICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOwotICAgICAgICAgICAgd3MtPmRpc3BsYXkg
PSBHREtfV0lORE9XX1hESVNQTEFZKHdpbmRvdyk7Ci0gICAgICAgICAgICB3cy0+dmlzdWFsID0g
R0RLX1ZJU1VBTF9YVklTVUFMKGdka193aW5kb3dfZ2V0X3Zpc3VhbCh3aW5kb3cpKTsKLSAgICAg
ICAgICAgIHdzLT5kZXB0aCA9IGdka192aXN1YWxfZ2V0X2RlcHRoKGdka193aW5kb3dfZ2V0X3Zp
c3VhbCh3aW5kb3cpKTsKLSAgICAgICAgICAgIHdzLT5jb2xvcm1hcCA9IFhDcmVhdGVDb2xvcm1h
cCh3cy0+ZGlzcGxheSwgR0RLX1JPT1RfV0lORE9XKCksIHdzLT52aXN1YWwsIEFsbG9jTm9uZSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KChHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0
d2luZG93KSk7Ci0gICAgICAgICAgICB3cy0+ZGlzcGxheSA9IEdUS19YVEJJTihwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKS0+eHRkaXNwbGF5OwotICAgICAgICAgICAgd3MtPnZpc3VhbCA9IEdUS19Y
VEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+eHRjbGllbnQueHR2aXN1YWw7Ci0gICAgICAg
ICAgICB3cy0+ZGVwdGggPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xp
ZW50Lnh0ZGVwdGg7Ci0gICAgICAgICAgICB3cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4ocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7Ci0gICAgICAgIH0KLSAgICAg
ICAgWEZsdXNoICh3cy0+ZGlzcGxheSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9ucFdpbmRv
dy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7Ci0gICAgICAgIG1fbnBXaW5kb3cud2luZG93
ID0gMDsgLy8gTm90IHVzZWQ/Ci0KLSAgICAgICAgR2RrU2NyZWVuKiBnc2NyZWVuID0gZ2RrX3Nj
cmVlbl9nZXRfZGVmYXVsdCgpOwotICAgICAgICBHZGtWaXN1YWwqIGd2aXN1YWwgPSBnZGtfc2Ny
ZWVuX2dldF9zeXN0ZW1fdmlzdWFsKGdzY3JlZW4pOwotCi0gICAgICAgIGlmIChnZGtfdmlzdWFs
X2dldF9kZXB0aChndmlzdWFsKSA9PSAzMiB8fCAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5z
KFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgpKSB7Ci0gICAgICAgICAgICBn
ZXRWaXN1YWxBbmRDb2xvcm1hcCgzMiwgJm1fdmlzdWFsLCAmbV9jb2xvcm1hcCk7Ci0gICAgICAg
ICAgICB3cy0+ZGVwdGggPSAzMjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV92aXN1YWwp
IHsKLSAgICAgICAgICAgIGdldFZpc3VhbEFuZENvbG9ybWFwKGdka192aXN1YWxfZ2V0X2RlcHRo
KGd2aXN1YWwpLCAmbV92aXN1YWwsICZtX2NvbG9ybWFwKTsKLSAgICAgICAgICAgIHdzLT5kZXB0
aCA9IGdka192aXN1YWxfZ2V0X2RlcHRoKGd2aXN1YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAg
d3MtPmRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpKTsKLSAgICAgICAgd3MtPnZpc3VhbCA9IG1fdmlzdWFsOwotICAgICAgICB3cy0+Y29sb3Jt
YXAgPSBtX2NvbG9ybWFwOwotCi0gICAgICAgIG1fbnBXaW5kb3cueCA9IDA7Ci0gICAgICAgIG1f
bnBXaW5kb3cueSA9IDA7Ci0gICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsKLSAgICAgICAg
bV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKLSAgICB9Ci0KLSAgICBtX25wV2luZG93LndzX2luZm8g
PSB3czsKLQotICAgIC8vIFRPRE8gcmVtb3ZlIGluIGZhdm9yIG9mIG51bGwgZXZlbnRzLCBsaWtl
IG1hYyBwb3J0PwotICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5R
dWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCi0gICAgICAgIHVwZGF0ZVBsdWdpbldpZGdl
dCgpOyAvLyB3YXM6IHNldE5QV2luZG93SWZOZWVkZWQoKSwgYnV0IHRoaXMgZG9lc24ndCBwcm9k
dWNlIDB4MCByZWN0cyBhdCBmaXJzdCBnbwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBpZiAobV9kcmF3YWJsZSkgewot
ICAgICAgICBYRnJlZVBpeG1hcChHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRf
ZGVmYXVsdCgpKSwgbV9kcmF3YWJsZSk7Ci0gICAgICAgIG1fZHJhd2FibGUgPSAwOwotICAgIH0K
LQotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gcGxhdGZvcm1XaWRnZXQoKTsKLSAgICBpZiAod2lk
Z2V0KSB7Ci0gICAgICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50
KHdpZGdldCk7Ci0gICAgICAgIEFTU0VSVChwYXJlbnQpOwotICAgICAgICBndGtfY29udGFpbmVy
X3JlbW92ZShHVEtfQ09OVEFJTkVSKHBhcmVudCksIHdpZGdldCk7Ci0gICAgfQotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3gx
MS9QbHVnaW5WaWV3WDExLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMveDExL1BsdWdpblZp
ZXdYMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZTkwZTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3gxMS9QbHVnaW5WaWV3WDEx
LmNwcApAQCAtMCwwICsxLDEwNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwIEtha2FpLCBJbmMuIDxicmlhbkBrYWthaS5jb20+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcu
aCIKKworI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAi
Rm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVRy
ZWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgorI2luY2x1ZGUg
IktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1
ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNp
bmNsdWRlICJTcGF0aWFsTmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgi
CisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVl
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKworI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCisjaW5jbHVkZSA8Z2RrY29uZmlnLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykK
KyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2lu
Y2x1ZGUgPGdkay9nZGt4Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2VsaWYgUExBVEZPUk0o
RUZMKQorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlIDxFY29yZV9FdmFz
Lmg+CisjaW5jbHVkZSA8RXZhcy5oPgorI2lmZGVmIEhBVkVfRUNPUkVfWAorI2luY2x1ZGUgPEVj
b3JlX1guaD4KKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgU3RyaW5nIFh0U3RyaW5nVHlwZQor
I2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgImd0
azJ4dGJpbi5oIgorI2VuZGlmCisjZGVmaW5lIEJvb2wgaW50IC8vIHRoaXMgZ290IHVuZGVmaW5l
ZCBzb21ld2hlcmUKKyNkZWZpbmUgU3RhdHVzIGludCAvLyBkaXR0bworI2luY2x1ZGUgPFgxMS9Y
Lmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgorI2luY2x1ZGUgPGNhaXJv
LXhsaWIuaD4KKwordXNpbmcgSlNDOjpFeGVjU3RhdGU7Cit1c2luZyBKU0M6OkludGVycHJldGVy
OwordXNpbmcgSlNDOjpKU0xvY2s7Cit1c2luZyBKU0M6OkpTT2JqZWN0OworCit1c2luZyBuYW1l
c3BhY2Ugc3RkOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2Jvb2wgUGx1Z2luVmlldzo6ZGlzcGF0
Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAg
ICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgYm9vbCBhY2NlcHRlZCA9ICFtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKworICAgIHNldENh
bGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3
KDApOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKworc3RhdGljIFdpbmRvdyBnZXRSb290V2lu
ZG93KEZyYW1lKiBwYXJlbnRGcmFtZSkKK3sKKyNpZiBQTEFURk9STShHVEspCisgICAgR3RrV2lk
Z2V0KiBwYXJlbnRXaWRnZXQgPSBwYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBs
YXRmb3JtUGFnZUNsaWVudCgpOworICAgIEdka1NjcmVlbiogZ3NjcmVlbiA9IGd0a193aWRnZXRf
Z2V0X3NjcmVlbihwYXJlbnRXaWRnZXQpOworICAgIHJldHVybiBHREtfV0lORE9XX1hXSU5ET1co
Z2RrX3NjcmVlbl9nZXRfcm9vdF93aW5kb3coZ3NjcmVlbikpOworI2VsaWYgUExBVEZPUk0oRUZM
KQorICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChwYXJlbnRGcmFtZS0+dmll
dygpLT5ldmFzT2JqZWN0KCkpOworICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2
YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdpbmRvdz4o
ZWNvcmVfZXZhc193aW5kb3dfZ2V0KGVjb3JlRXZhcykpOworI2Vsc2UKKyAgICByZXR1cm4gTm9u
ZTsKKyNlbmRpZgorfQorCitzdGF0aWMgRGlzcGxheSogZ2V0UGx1Z2luRGlzcGxheSgpCit7Cisj
aWYgUExBVEZPUk0oR1RLKQorICAgIC8vIFRoZSBwbHVnaW4gdG9vbGtpdCBtaWdodCBoYXZlIGEg
ZGlmZmVyZW50IFggY29ubmVjdGlvbiBvcGVuLiBTaW5jZSB3ZSdyZQorICAgIC8vIGEgZ2RrL2d0
ayBhcHAsIHdlJ2xsIChwcm9iYWJseT8pIGhhdmUgdGhlIHNhbWUgWCBjb25uZWN0aW9uIGFzIGFu
eSBnZGstYmFzZWQKKyAgICAvLyBwbHVnaW5zLCBzbyB3ZSBjYW4gcmV0dXJuIHRoYXQuIFdlIG1p
Z2h0IHdhbnQgdG8gYWRkIG90aGVyIGltcGxlbWVudGF0aW9ucyBoZXJlCisgICAgLy8gbGF0ZXIu
CisKKyAgICByZXR1cm4gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1
bHQoKSk7CisjZWxpZiBQTEFURk9STShFRkwpICYmIGRlZmluZWQoSEFWRV9FQ09SRV9YKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNvcmVfeF9kaXNwbGF5X2dldCgpKTsKKyNl
bHNlCisgICAgcmV0dXJuIE5vbmU7CisjZW5kaWYKK30KKwordm9pZCBQbHVnaW5WaWV3Ojp1cGRh
dGVQbHVnaW5XaWRnZXQoKQoreworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSB0b0ZyYW1lVmlldyhwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRv
d1JlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJl
Y3Q7CisKKyAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dp
bmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKTsKKyAgICBt
X2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2lu
ZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKworICAgIGlmIChtX3dpbmRvd1JlY3Qg
PT0gb2xkV2luZG93UmVjdCAmJiBtX2NsaXBSZWN0ID09IG9sZENsaXBSZWN0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1
bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1faXNXaW5kb3dlZCAmJiAhbV93aW5k
b3dSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBEaXNwbGF5KiBkaXNwbGF5ID0gZ2V0UGx1Z2lu
RGlzcGxheSgpOworCisgICAgICAgIGlmIChtX2RyYXdhYmxlKQorICAgICAgICAgICAgWEZyZWVQ
aXhtYXAoZGlzcGxheSwgbV9kcmF3YWJsZSk7CisKKyAgICAgICAgbV9kcmF3YWJsZSA9IFhDcmVh
dGVQaXhtYXAoZGlzcGxheSwgZ2V0Um9vdFdpbmRvdyhtX3BhcmVudEZyYW1lLmdldCgpKSwKKyAg
ICAgICAgICAgIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksCisg
ICAgICAgICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5m
byktPmRlcHRoKTsKKyAgICAgICAgWFN5bmMoZGlzcGxheSwgZmFsc2UpOyAvLyBtYWtlIHN1cmUg
dGhhdCB0aGUgc2VydmVyIGtub3dzIGFib3V0IHRoZSBEcmF3YWJsZQorICAgIH0KKworICAgIHNl
dE5QV2luZG93SWZOZWVkZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29s
IGZvY3VzZWQpCit7CisgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gcGxhdGZv
cm1XaWRnZXQoKSk7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlmIChmb2N1c2VkICYmIHBsYXRm
b3JtV2lkZ2V0KCkpCisgICAgICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhwbGF0Zm9ybVdpZGdl
dCgpKTsKKyNlbmRpZgorICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkg
PT0gcGxhdGZvcm1XaWRnZXQoKSk7CisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6aGlkZSgpCit7CisgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0g
cGxhdGZvcm1XaWRnZXQoKSk7CisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9h
ZGVkU3VjY2Vzc2Z1bGx5KSB7CisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4
dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXROUFdpbmRvd0lmTmVl
ZGVkKCk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsKKworICAgIERpc3BsYXkqIGRpc3BsYXkg
PSBnZXRQbHVnaW5EaXNwbGF5KCk7CisgICAgY29uc3QgYm9vbCBzaG91bGRTeW5jV2l0aFggPSBt
X3BsdWdpbkRpc3BsYXkgJiYgbV9wbHVnaW5EaXNwbGF5ICE9IGRpc3BsYXk7CisKKyAgICBJbnRS
ZWN0IGV4cG9zZWRSZWN0KHJlY3QpOworICAgIGV4cG9zZWRSZWN0LmludGVyc2VjdChmcmFtZVJl
Y3QoKSk7CisgICAgZXhwb3NlZFJlY3QubW92ZSgtZnJhbWVSZWN0KCkueCgpLCAtZnJhbWVSZWN0
KCkueSgpKTsKKworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGRyYXdhYmxlU3VyZmFjZSA9
IGFkb3B0UmVmKGNhaXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUoZGlzcGxheSwKKyAgICAgICAgbV9k
cmF3YWJsZSwKKyAgICAgICAgbV92aXN1YWwsCisgICAgICAgIG1fd2luZG93UmVjdC53aWR0aCgp
LAorICAgICAgICBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpKTsKKworICAgIGlmIChtX2lzVHJhbnNw
YXJlbnQpIHsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIDMyIGJpdCBkcmF3YWJsZSBhbmQgdGhl
IHBsdWdpbiB3YW50cyB0cmFuc3BhcmVuY3ksCisgICAgICAgIC8vIHdlJ2xsIGNsZWFyIHRoZSBl
eHBvc2VkIGFyZWEgdG8gdHJhbnNwYXJlbnQgZmlyc3QuIE90aGVyd2lzZSwKKyAgICAgICAgLy8g
d2UnZCBlbmQgdXAgd2l0aCBqdW5rIGluIHRoZXJlIGZyb20gdGhlIGxhc3QgcGFpbnQsIG9yLCB3
b3JzZSwKKyAgICAgICAgLy8gdW5pbml0aWFsaXplZCBkYXRhLgorICAgICAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoZHJhd2FibGVTdXJmYWNlLmdldCgpKSk7
CisKKyAgICAgICAgaWYgKCEoY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChkcmF3YWJsZVN1cmZh
Y2UuZ2V0KCkpICYgQ0FJUk9fQ09OVEVOVF9BTFBIQSkpIHsKKyAgICAgICAgICAgIC8vIEF0dGVt
cHQgdG8gZmFrZSBpdCB3aGVuIHdlIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCBvbiBvdXIK
KyAgICAgICAgICAgIC8vIHBpeG1hcC4gSWYgdGhhdCdzIG5vdCBwb3NzaWJsZSwgYXQgbGVhc3Qg
Y2xlYXIgdGhlIHdpbmRvdyB0bworICAgICAgICAgICAgLy8gYXZvaWQgZHJhd2luZyBhcnRpZmFj
dHMuCisKKyAgICAgICAgICAgIC8vIFRoaXMgV291bGQgbm90IHdvcmsgd2l0aG91dCBkb3VibGUg
YnVmZmVyaW5nLCBidXQgd2UgYWx3YXlzIHVzZSBpdC4KKyAgICAgICAgICAgIGNhaXJvX3NldF9z
b3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgY2Fpcm9fZ2V0X2dyb3VwX3RhcmdldChjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSksCisgICAgICAgICAgICAgICAgLW1fd2luZG93UmVjdC54
KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihj
ci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsK
KworICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IuZ2V0KCksIGV4cG9zZWRSZWN0LngoKSwgZXhw
b3NlZFJlY3QueSgpLAorICAgICAgICAgICAgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJl
Y3QuaGVpZ2h0KCkpOworICAgICAgICBjYWlyb19maWxsKGNyLmdldCgpKTsKKyAgICB9CisKKyAg
ICBYRXZlbnQgeGV2ZW50OworICAgIG1lbXNldCgmeGV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7
CisgICAgWEdyYXBoaWNzRXhwb3NlRXZlbnQmIGV4cG9zZUV2ZW50ID0geGV2ZW50LnhncmFwaGlj
c2V4cG9zZTsKKyAgICBleHBvc2VFdmVudC50eXBlID0gR3JhcGhpY3NFeHBvc2U7CisgICAgZXhw
b3NlRXZlbnQuZGlzcGxheSA9IGRpc3BsYXk7CisgICAgZXhwb3NlRXZlbnQuZHJhd2FibGUgPSBt
X2RyYXdhYmxlOworICAgIGV4cG9zZUV2ZW50LnggPSBleHBvc2VkUmVjdC54KCk7CisgICAgZXhw
b3NlRXZlbnQueSA9IGV4cG9zZWRSZWN0LnkoKTsKKyAgICBleHBvc2VFdmVudC53aWR0aCA9IGV4
cG9zZWRSZWN0LngoKSArIGV4cG9zZWRSZWN0LndpZHRoKCk7IC8vIGZsYXNoIGJ1Zz8gaXQgdGhp
bmtzIHdpZHRoIGlzIHRoZSByaWdodCBpbiB0cmFuc3BhcmVudCBtb2RlCisgICAgZXhwb3NlRXZl
bnQuaGVpZ2h0ID0gZXhwb3NlZFJlY3QueSgpICsgZXhwb3NlZFJlY3QuaGVpZ2h0KCk7IC8vIGZs
YXNoIGJ1Zz8gaXQgdGhpbmtzIGhlaWdodCBpcyB0aGUgYm90dG9tIGluIHRyYW5zcGFyZW50IG1v
ZGUKKworICAgIGRpc3BhdGNoTlBFdmVudCh4ZXZlbnQpOworCisgICAgaWYgKHNob3VsZFN5bmNX
aXRoWCkKKyAgICAgICAgWFN5bmMobV9wbHVnaW5EaXNwbGF5LCBmYWxzZSk7IC8vIHN5bmMgY2hh
bmdlcyBieSBwbHVnaW4KKworICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPmNyKCk7CisgICAgY2Fpcm9fc2F2ZShjcik7CisKKyAgICBjYWlyb19zZXRfc291cmNl
X3N1cmZhY2UoY3IsIGRyYXdhYmxlU3VyZmFjZS5nZXQoKSwgZnJhbWVSZWN0KCkueCgpLCBmcmFt
ZVJlY3QoKS55KCkpOworCisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLAorICAgICAgICBmcmFtZVJl
Y3QoKS54KCkgKyBleHBvc2VkUmVjdC54KCksIGZyYW1lUmVjdCgpLnkoKSArIGV4cG9zZWRSZWN0
LnkoKSwKKyAgICAgICAgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCkp
OworICAgIGNhaXJvX2NsaXAoY3IpOworCisgICAgaWYgKG1faXNUcmFuc3BhcmVudCkKKyAgICAg
ICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9PVkVSKTsKKyAgICBlbHNl
CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsK
KyAgICBjYWlyb19wYWludChjcik7CisKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQor
eworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKworICAgIGlm
ICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1
bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5h
bWVzKCkua2V5ZG93bkV2ZW50ICYmIGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleXVw
RXZlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIE5QRXZlbnQgeEV2ZW50OworICAgIGluaXRY
RXZlbnQoJnhFdmVudCk7CisgICAgR2RrRXZlbnRLZXkqIGdka0V2ZW50ID0gZXZlbnQtPmtleUV2
ZW50KCktPmdka0V2ZW50S2V5KCk7CisKKyAgICB4RXZlbnQudHlwZSA9IChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpID8gMiA6IDM7IC8vIEtleVByZXNzL1JlbGVh
c2UgZ2V0IHVuc2V0IHNvbWV3aGVyZQorICAgIHhFdmVudC54a2V5LnJvb3QgPSBnZXRSb290V2lu
ZG93KG1fcGFyZW50RnJhbWUuZ2V0KCkpOworICAgIHhFdmVudC54a2V5LnN1YndpbmRvdyA9IDA7
IC8vIHdlIGhhdmUgbm8gY2hpbGQgd2luZG93CisgICAgeEV2ZW50LnhrZXkudGltZSA9IGV2ZW50
LT50aW1lU3RhbXAoKTsKKyAgICB4RXZlbnQueGtleS5zdGF0ZSA9IGdka0V2ZW50LT5zdGF0ZTsg
Ly8gR2RrTW9kaWZpZXJUeXBlIG1pcnJvcnMgeGxpYiBzdGF0ZSBtYXNrcworICAgIHhFdmVudC54
a2V5LmtleWNvZGUgPSBnZGtFdmVudC0+aGFyZHdhcmVfa2V5Y29kZTsKKyAgICB4RXZlbnQueGtl
eS5zYW1lX3NjcmVlbiA9IHRydWU7CisKKyAgICAvLyBOT1RFOiBBcyB0aGUgWEV2ZW50cyBzZW50
IHRvIHRoZSBwbHVnLWluIGFyZSBzeW50aGVzaXplZCBhbmQgdGhlcmUgaXMgbm90IGEgbmF0aXZl
IHdpbmRvdworICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBsdWctaW4gcmVjdGFuZ2xlLCBz
b21lIG9mIHRoZSBtZW1iZXJzIG9mIHRoZSBYRXZlbnQgc3RydWN0dXJlcyBhcmUgbm90CisgICAg
Ly8gc2V0IHRvIHRoZWlyIG5vcm1hbCBYc2VydmVyIHZhbHVlcy4gZS5nLiBLZXkgZXZlbnRzIGRv
bid0IGhhdmUgYSBwb3NpdGlvbi4KKyAgICAvLyBzb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2VuL05QRXZlbnQKKyAgICB4RXZlbnQueGtleS54ID0gMDsKKyAgICB4RXZlbnQu
eGtleS55ID0gMDsKKyAgICB4RXZlbnQueGtleS54X3Jvb3QgPSAwOworICAgIHhFdmVudC54a2V5
Lnlfcm9vdCA9IDA7CisKKyAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KHhFdmVudCkpCisgICAgICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZXZl
bnQpOworICAgIG5vdEltcGxlbWVudGVkKCk7CisjZW5kaWYKK30KKworc3RhdGljIHVuc2lnbmVk
IGlucHV0RXZlbnRTdGF0ZShNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICB1bnNpZ25lZCBzdGF0
ZSA9IDA7CisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIHN0YXRlIHw9IENvbnRy
b2xNYXNrOworICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gU2hp
ZnRNYXNrOworICAgIGlmIChldmVudC0+YWx0S2V5KCkpCisgICAgICAgIHN0YXRlIHw9IE1vZDFN
YXNrOworICAgIGlmIChldmVudC0+bWV0YUtleSgpKQorICAgICAgICBzdGF0ZSB8PSBNb2Q0TWFz
azsKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW5pdFhFdmVudChY
RXZlbnQqIHhFdmVudCkKK3sKKyAgICBtZW1zZXQoeEV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7
CisKKyAgICB4RXZlbnQtPnhhbnkuc2VyaWFsID0gMDsgLy8gd2UgYXJlIHVuYXdhcmUgb2YgdGhl
IGxhc3QgcmVxdWVzdCBwcm9jZXNzZWQgYnkgWCBTZXJ2ZXIKKyAgICB4RXZlbnQtPnhhbnkuc2Vu
ZF9ldmVudCA9IGZhbHNlOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBHdGtXaWRnZXQqIHdpZGdl
dCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKTsKKyAgICB4RXZlbnQtPnhhbnkuZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGd0
a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSk7CisjZWxpZiBQTEFURk9STShFRkwpCisgICAg
eEV2ZW50LT54YW55LmRpc3BsYXkgPSBnZXRQbHVnaW5EaXNwbGF5KCk7CisjZW5kaWYKKworICAg
IC8vIE1vemlsbGEgYWxzbyBzZW5kcyBOb25lIGhlcmUgZm9yIHdpbmRvd2xlc3MgcGx1Z2lucy4g
U2VlIG5zT2JqZWN0RnJhbWUuY3BwIGluIHRoZSBNb3ppbGxhIHNvdXJjZXMuCisgICAgLy8gVGhp
cyBtZXRob2QgYWxzbyBzZXRzIHVwIEZvY3VzSW4gYW5kIEZvY3VzT3V0IGV2ZW50cyBmb3Igd2lu
ZG93cyBwbHVnaW5zLCBidXQgTW96aWxsYSBkb2Vzbid0CisgICAgLy8gZXZlbiBzZW5kIHRoZXNl
IHR5cGVzIG9mIGV2ZW50cyB0byB3aW5kb3dlZCBwbHVnaW5zLiBJbiB0aGUgZnV0dXJlLCBpdCBt
YXkgYmUgZ29vZCB0byBvbmx5CisgICAgLy8gc2VuZCB0aGVtIHRvIHdpbmRvd2xlc3MgcGx1Z2lu
cy4KKyAgICB4RXZlbnQtPnhhbnkud2luZG93ID0gTm9uZTsKK30KKworc3RhdGljIHZvaWQgc2V0
WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2
ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKK3sK
KyAgICBYQnV0dG9uRXZlbnQmIHhidXR0b24gPSB4RXZlbnQtPnhidXR0b247CisgICAgeGJ1dHRv
bi50eXBlID0gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgPyBC
dXR0b25QcmVzcyA6IEJ1dHRvblJlbGVhc2U7CisgICAgeGJ1dHRvbi5yb290ID0gZ2V0Um9vdFdp
bmRvdyhwYXJlbnRGcmFtZSk7CisgICAgeGJ1dHRvbi5zdWJ3aW5kb3cgPSAwOworICAgIHhidXR0
b24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4YnV0dG9uLnggPSBwb3N0Wm9vbVBv
cy54KCk7CisgICAgeGJ1dHRvbi55ID0gcG9zdFpvb21Qb3MueSgpOworICAgIHhidXR0b24ueF9y
b290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4YnV0dG9uLnlfcm9vdCA9IGV2ZW50LT5zY3Jl
ZW5ZKCk7CisgICAgeGJ1dHRvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7CisgICAg
c3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKKyAgICAg
ICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24yOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJp
Z2h0QnV0dG9uOgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjM7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICBkZWZhdWx0OgorICAgICAgICB4YnV0dG9u
LmJ1dHRvbiA9IEJ1dHRvbjE7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB4YnV0dG9uLnNh
bWVfc2NyZWVuID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2V0WE1vdGlvbkV2ZW50U3BlY2lm
aWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQb2lu
dCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKK3sKKyAgICBYTW90aW9uRXZlbnQm
IHhtb3Rpb24gPSB4RXZlbnQtPnhtb3Rpb247CisgICAgeG1vdGlvbi50eXBlID0gTW90aW9uTm90
aWZ5OworICAgIHhtb3Rpb24ucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUpOworICAg
IHhtb3Rpb24uc3Vid2luZG93ID0gMDsKKyAgICB4bW90aW9uLnRpbWUgPSBldmVudC0+dGltZVN0
YW1wKCk7CisgICAgeG1vdGlvbi54ID0gcG9zdFpvb21Qb3MueCgpOworICAgIHhtb3Rpb24ueSA9
IHBvc3Rab29tUG9zLnkoKTsKKyAgICB4bW90aW9uLnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7
CisgICAgeG1vdGlvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOworICAgIHhtb3Rpb24uc3Rh
dGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOworICAgIHhtb3Rpb24uaXNfaGludCA9IE5vdGlm
eU5vcm1hbDsKKyAgICB4bW90aW9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKK30KKworc3RhdGljIHZv
aWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91c2VF
dmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywgRnJhbWUqIHBhcmVudEZy
YW1lKQoreworICAgIFhDcm9zc2luZ0V2ZW50JiB4Y3Jvc3NpbmcgPSB4RXZlbnQtPnhjcm9zc2lu
ZzsKKyAgICB4Y3Jvc3NpbmcudHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlb3ZlckV2ZW50ID8gRW50ZXJOb3RpZnkgOiBMZWF2ZU5vdGlmeTsKKyAgICB4Y3Jvc3Npbmcu
cm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUpOworICAgIHhjcm9zc2luZy5zdWJ3aW5k
b3cgPSAwOworICAgIHhjcm9zc2luZy50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAgIHhj
cm9zc2luZy54ID0gcG9zdFpvb21Qb3MueSgpOworICAgIHhjcm9zc2luZy55ID0gcG9zdFpvb21Q
b3MueCgpOworICAgIHhjcm9zc2luZy54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOworICAgIHhj
cm9zc2luZy55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOworICAgIHhjcm9zc2luZy5zdGF0ZSA9
IGlucHV0RXZlbnRTdGF0ZShldmVudCk7CisgICAgeGNyb3NzaW5nLm1vZGUgPSBOb3RpZnlOb3Jt
YWw7CisgICAgeGNyb3NzaW5nLmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7CisgICAgeGNyb3Nz
aW5nLnNhbWVfc2NyZWVuID0gdHJ1ZTsKKyAgICB4Y3Jvc3NpbmcuZm9jdXMgPSBmYWxzZTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQor
eworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworCisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBt
X3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChldmVudC0+YnV0dG9uKCkgPT0gUmlnaHRCdXR0b24gJiYgbV9wbHVnaW4t
PnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVz
c01vZGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3Bh
cmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+
c2V0QWN0aXZlKHRydWUpOworICAgICAgICBmb2N1c1BsdWdpbkVsZW1lbnQoKTsKKyAgICB9CisK
KyAgICBOUEV2ZW50IHhFdmVudDsKKyAgICBpbml0WEV2ZW50KCZ4RXZlbnQpOworCisgICAgSW50
UG9pbnQgcG9zdFpvb21Qb3MgPSByb3VuZGVkSW50UG9pbnQobV9lbGVtZW50LT5yZW5kZXJlcigp
LT5hYnNvbHV0ZVRvTG9jYWwoZXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSkpOworCisgICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50IHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKKyAgICAgICAgc2V0WEJ1dHRvbkV2
ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVudEZy
YW1lLmdldCgpKTsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZW1vdmVFdmVudCkKKyAgICAgICAgc2V0WE1vdGlvbkV2ZW50U3BlY2lmaWNGaWVsZHMoJnhF
dmVudCwgZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVudEZyYW1lLmdldCgpKTsKKyAgICBlbHNl
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8IGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIHNldFhD
cm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9zLCBt
X3BhcmVudEZyYW1lLmdldCgpKTsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgIC8vIFRoaXMg
aXMgYSB3b3JrLWFyb3VuZCBmb3IgcGx1Z2lucyB3aGljaCBjaGFuZ2UgdGhlIGN1cnNvci4gV2hl
biB0aGF0IGhhcHBlbnMgd2UKKyAgICAgICAgLy8gZ2V0IG91dCBvZiBzeW5jIHdpdGggR0RLIHNv
bWVob3cuIFJlc2V0dGluZyB0aGUgY3Vyc29yIGhlcmUgc2VlbXMgdG8gZml4IHRoZSBpc3N1ZS4K
KyAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQp
CisgICAgICAgICAgICBnZGtfd2luZG93X3NldF9jdXJzb3IoZ3RrX3dpZGdldF9nZXRfd2luZG93
KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQo
KSksIDApOworI2VuZGlmCisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChk
aXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkKK3sKKyAgICBp
ZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3Nm
dWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgWEV2ZW50IG5wRXZlbnQ7CisgICAgaW5pdFhF
dmVudCgmbnBFdmVudCk7CisKKyAgICBYRm9jdXNDaGFuZ2VFdmVudCYgZXZlbnQgPSBucEV2ZW50
Lnhmb2N1czsKKyAgICBldmVudC50eXBlID0gOTsgLy8gRm9jdXNJbiBnZXRzIHVuc2V0IHNvbWV3
aGVyZQorICAgIGV2ZW50Lm1vZGUgPSBOb3RpZnlOb3JtYWw7CisgICAgZXZlbnQuZGV0YWlsID0g
Tm90aWZ5RGV0YWlsTm9uZTsKKworICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKK3sKKyAgICBpZiAoIW1faXNT
dGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgWEV2ZW50IG5wRXZlbnQ7CisgICAgaW5pdFhFdmVudCgmbnBF
dmVudCk7CisKKyAgICBYRm9jdXNDaGFuZ2VFdmVudCYgZXZlbnQgPSBucEV2ZW50Lnhmb2N1czsK
KyAgICBldmVudC50eXBlID0gMTA7IC8vIEZvY3VzT3V0IGdldHMgdW5zZXQgc29tZXdoZXJlCisg
ICAgZXZlbnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICBldmVudC5kZXRhaWwgPSBOb3RpZnlE
ZXRhaWxOb25lOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0Ojpz
ZXRQYXJlbnQocGFyZW50KTsKKworICAgIGlmIChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpCit7Cisg
ICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1f
aXNTdGFydGVkIHx8ICFwYXJlbnQoKSB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdp
bmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlIHBsdWdpbiBkaWRuJ3QgbG9h
ZCBzdWNlc3NmdWxseSwgbm8gcG9pbnQgaW4gY2FsbGluZyBzZXR3aW5kb3cKKyAgICBpZiAobV9z
dGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1Z2luJ3Mgc2V0d2luZG93IGlmIGl0J3Mg
ZnVsbC1wYWdlIG9yIHdpbmRvd2VkCisgICAgaWYgKG1fbW9kZSAhPSBOUF9GVUxMICYmIG1fbW9k
ZSAhPSBOUF9FTUJFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIHBs
YXRmb3JtUGx1Z2luV2lkZ2V0IHN0aWxsIGV4aXN0cworICAgIGlmIChtX2lzV2luZG93ZWQgJiYg
IXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Ns
aXBSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJZiB3aWR0aCBvciBoZWlnaHQgYXJlIG51
bGwsIHNldCB0aGUgY2xpcFJlY3QgdG8gbnVsbCwKKyAgICAgICAgLy8gaW5kaWNhdGluZyB0aGF0
IHRoZSBwbHVnaW4gaXMgbm90IHZpc2libGUvc2Nyb2xsZWQgb3V0LgorICAgICAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0
ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOworICAgICAgICBtX25w
V2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2xp
cHBpbmcgcmVjdGFuZ2xlIG9mIHRoZSBwbHVnLWluOyB0aGUgb3JpZ2luIGlzIHRoZSB0b3AgbGVm
dCBjb3JuZXIgb2YgdGhlIGRyYXdhYmxlIG9yIHdpbmRvdy4KKyAgICAgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5sZWZ0ID0gbV9ucFdpbmRvdy54ICsgbV9jbGlwUmVjdC54KCk7CisgICAgICAgIG1f
bnBXaW5kb3cuY2xpcFJlY3QudG9wID0gbV9ucFdpbmRvdy55ICsgbV9jbGlwUmVjdC55KCk7Cisg
ICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX25wV2luZG93LnggKyBtX2NsaXBS
ZWN0LngoKSArIG1fY2xpcFJlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC5ib3R0b20gPSBtX25wV2luZG93LnkgKyBtX2NsaXBSZWN0LnkoKSArIG1fY2xpcFJlY3QuaGVp
Z2h0KCk7CisgICAgfQorCisgICAgLy8gRkxBU0ggV09SS0FST1VORDogT25seSBzZXQgaW5pdGlh
bGx5LiBNdWx0aXBsZSBjYWxscyB0bworICAgIC8vIHNldE5QV2luZG93KCkgY2F1c2UgdGhlIHBs
dWdpbiB0byBjcmFzaCBpbiB3aW5kb3dlZCBtb2RlLgorICAgIGlmICghbV9wbHVnaW4tPnF1aXJr
cygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENhbGxTZXRXaW5kb3dNb3JlVGhhbk9uY2UpIHx8
ICFtX2lzV2luZG93ZWQKKyAgICAgICAgfHwgbV9ucFdpbmRvdy53aWR0aCA9PSBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oLTEpIHx8IG1fbnBXaW5kb3cuaGVpZ2h0ID09IHN0YXRpY19jYXN0PHVpbnQz
Ml90PigtMSkpIHsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IG1fd2luZG93UmVjdC53aWR0
aCgpOworICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IG1fd2luZG93UmVjdC5oZWlnaHQoKTsK
KyAgICB9CisKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAg
IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5k
b3cpOworICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KDApOworCisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlmICghbV9pc1dp
bmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBHdGtYdEJpbiB3aWxsIGNhbGwgZ3Rr
X3dpZGdldF9zaXplX2FsbG9jYXRlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGl0IGhlcmUuCisg
ICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24o
R1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dp
bmRvd1JlY3QueSgpKTsKKyAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZGVsYXllZEFsbG9jYXRpb24gPSBtX3dpbmRv
d1JlY3Q7CisgICAgdXBkYXRlV2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAoKTsKKyNlbmRpZgorfQor
CisjaWYgUExBVEZPUk0oR1RLKQordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVXaWRnZXRBbGxvY2F0
aW9uQW5kQ2xpcCgpCit7CisgICAgLy8gSWYgdGhlIHdpbmRvdyBoYXMgbm90IGJlZW4gZW1iZWRk
ZWQgeWV0ICh0aGUgcGx1ZyBhZGRlZCksIHdlIGRlbGF5IHNldHRpbmcgaXRzIGFsbG9jYXRpb24g
dW50aWwKKyAgICAvLyB0aGF0IHBvaW50LiBUaGlzIGZpeGVzIGlzc3VlcyB3aXRoIHNvbWUgSmF2
YSBwbHVnaW4gaW5zdGFuY2VzIG5vdCByZW5kZXJpbmcgaW1tZWRpYXRlbHkuCisgICAgaWYgKCFt
X3BsdWdBZGRlZCB8fCBtX2RlbGF5ZWRBbGxvY2F0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpOwor
ICAgIGlmIChndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh3aWRnZXQpKSB7CisgICAgICAgIEdka1Jl
Y3RhbmdsZSBjbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
KyAgICAgICAgR2RrUmVnaW9uKiBjbGlwUmVnaW9uID0gZ2RrX3JlZ2lvbl9yZWN0YW5nbGUoJmNs
aXBSZWN0KTsKKyAgICAgICAgZ2RrX3dpbmRvd19zaGFwZV9jb21iaW5lX3JlZ2lvbihndGtfd2lk
Z2V0X2dldF93aW5kb3cod2lkZ2V0KSwgY2xpcFJlZ2lvbiwgMCwgMCk7CisgICAgICAgIGdka19y
ZWdpb25fZGVzdHJveShjbGlwUmVnaW9uKTsKKyNlbHNlCisgICAgICAgIGNhaXJvX3JlZ2lvbl90
KiBjbGlwUmVnaW9uID0gY2Fpcm9fcmVnaW9uX2NyZWF0ZV9yZWN0YW5nbGUoJmNsaXBSZWN0KTsK
KyAgICAgICAgZ2RrX3dpbmRvd19zaGFwZV9jb21iaW5lX3JlZ2lvbihndGtfd2lkZ2V0X2dldF93
aW5kb3cod2lkZ2V0KSwgY2xpcFJlZ2lvbiwgMCwgMCk7CisgICAgICAgIGNhaXJvX3JlZ2lvbl9k
ZXN0cm95KGNsaXBSZWdpb24pOworI2VuZGlmCisgICAgfQorCisgICAgLy8gVGhlIGdvYWwgaXMg
dG8gdHJ5IHRvIGF2b2lkIGNhbGxpbmcgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlIGluIHRoZSBX
ZWJWaWV3J3MKKyAgICAvLyBzaXplLWFsbG9jYXRlIG1ldGhvZC4gSXQgYmxvY2tzIHRoZSBtYWlu
IGxvb3AgYW5kIGlmIHRoZSB3aWRnZXQgaXMgb2Zmc2NyZWVuCisgICAgLy8gb3IgaGFzbid0IG1v
dmVkIGl0IGlzbid0IHJlcXVpcmVkLgorCisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhl
IGFsbG9jYXRpb24gaGFzIG5vdCBjaGFuZ2VkLgorICAgIEd0a0FsbG9jYXRpb24gY3VycmVudEFs
bG9jYXRpb247CisgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZjdXJyZW50
QWxsb2NhdGlvbik7CisgICAgaWYgKGN1cnJlbnRBbGxvY2F0aW9uID09IG1fZGVsYXllZEFsbG9j
YXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGJv
dGggdGhlIG9sZCBhbmQgdGhlIG5ldyBhbGxvY2F0aW9ucyBhcmUgb3V0c2lkZSB0aGUgZnJhbWUu
CisgICAgSW50UmVjdCBjdXJyZW50QWxsb2NhdGlvblJlY3QoY3VycmVudEFsbG9jYXRpb24pOwor
ICAgIGN1cnJlbnRBbGxvY2F0aW9uUmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOworICAgIGlm
IChjdXJyZW50QWxsb2NhdGlvblJlY3QuaXNFbXB0eSgpICYmIG1fY2xpcFJlY3QuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh3aWRn
ZXQpLCAiZGVsYXllZC1hbGxvY2F0aW9uIiwgJm1fZGVsYXllZEFsbG9jYXRpb24pOworfQorI2Vu
ZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCit7
CisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCisgICAgICAgIHJldHVybjsK
KworICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKKworI2lmIFBMQVRGT1JN
KEdUSykKKyAgICBpZiAoaXNTZWxmVmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkp
IHsKKyAgICAgICAgaWYgKHZpc2libGUpCisgICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3cocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGd0a193aWRn
ZXRfaGlkZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKyAgICB9CisjZW5kaWYKK30KKworTlBF
cnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBvdXRwdXRC
dWZmZXIsIHVpbnQzMl90IGZpbGVuYW1lTGVuZ3RoLCBjb25zdCBjaGFyKiBmaWxlbmFtZUJ1ZmZl
cikKK3sKKyAgICAvLyBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW55IGRvY3VtZW50YXRpb24g
YWJvdXQgd2hhdCBlbmNvZGluZyB0aGUgZmlsZW5hbWUKKyAgICAvLyBpcyBpbiwgYnV0IG1vc3Qg
cG9ydHMgc2VlbSB0byBhc3N1bWUgVVRGLTggaGVyZSBhbmQgdGhlIHRlc3QgcGx1Z2luIGlzIGRl
ZmluaXRlbHkKKyAgICAvLyBzZW5kaW5nIHRoZSBwYXRoIGluIFVURi04IGVuY29kaW5nLgorICAg
IENTdHJpbmcgZmlsZW5hbWUoZmlsZW5hbWVCdWZmZXIsIGZpbGVuYW1lTGVuZ3RoKTsKKworICAg
IEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfY29tbWFuZGxp
bmVfYXJnKGZpbGVuYW1lLmRhdGEoKSkpOworICAgIGlmIChnX2ZpbGVfcXVlcnlfZmlsZV90eXBl
KGZpbGUuZ2V0KCksIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsIDApICE9IEdfRklMRV9UWVBFX1JF
R1VMQVIpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIEdSZWZQ
dHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhmaWxl
LmdldCgpLAorICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCisgICAgICAg
IEdfRklMRV9RVUVSWV9JTkZPX05PTkUsCisgICAgICAgIDAsIDApKTsKKyAgICBpZiAoIWZpbGVJ
bmZvKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBHUmVmUHRy
PEdGaWxlSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9yZWFkKGZp
bGUuZ2V0KCksIDAsIDApKTsKKyAgICBpZiAoIWlucHV0U3RyZWFtKQorICAgICAgICByZXR1cm4g
TlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBvdXRwdXRCdWZmZXIucmVzaXplKGdfZmlsZV9p
bmZvX2dldF9zaXplKGZpbGVJbmZvLmdldCgpKSk7CisgICAgZ3NpemUgYnl0ZXNSZWFkID0gMDsK
KyAgICBpZiAoIWdfaW5wdXRfc3RyZWFtX3JlYWRfYWxsKEdfSU5QVVRfU1RSRUFNKGlucHV0U3Ry
ZWFtLmdldCgpKSwKKyAgICAgICAgb3V0cHV0QnVmZmVyLmRhdGEoKSwgb3V0cHV0QnVmZmVyLnNp
emUoKSwgJmJ5dGVzUmVhZCwgMCwgMCkpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9G
T1VORDsKKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworYm9vbCBQbHVnaW5WaWV3
OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1
ZSwgTlBFcnJvciogcmVzdWx0KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNl
IE5QTlZUb29sa2l0OgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgKnN0YXRpY19jYXN0PHVp
bnQzMl90Kj4odmFsdWUpID0gMjsgLy8gcmV0dXJuIHByb3BlciBHVEsncyBOUE5WVG9vbGtpdAor
I2VsaWYgUExBVEZPUk0oRUZMKQorICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1
ZSkgPSAwOworI2VuZGlmCisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6CisjaWYg
UExBVEZPUk0oR1RLKQorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1
ZTsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZh
bHVlKSA9IGZhbHNlOworI2VuZGlmCisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJv
b2w6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Y2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29s
Kj4odmFsdWUpID0gdHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBzd2l0Y2gg
KHZhcmlhYmxlKSB7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGNhc2UgTlBOVnhEaXNwbGF5Ogor
ICAgICAgICBpZiAobV9uZWVkc1hFbWJlZCkKKyAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9
ICh2b2lkICopR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9ICh2b2lkICopR1RL
X1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGRpc3BsYXk7CisgICAg
ICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6CisgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgewor
ICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRl
eHQoR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGRpc3BsYXkp
OworCisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgR2Rr
V2luZG93KiBnZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV9wYXJlbnRGcmFtZS0+
dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsKKyAgICAgICAgR2Rr
V2luZG93KiB0b3BsZXZlbFdpbmRvdyA9IGdka193aW5kb3dfZ2V0X3RvcGxldmVsKGdka1dpbmRv
dyk7CisgICAgICAgIGlmICghdG9wbGV2ZWxXaW5kb3cpIHsKKyAgICAgICAgICAgICpyZXN1bHQg
PSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgKnN0YXRpY19jYXN0PFdpbmRvdyo+KHZhbHVlKSA9IEdES19XSU5ET1dfWFdJ
TkRPVyh0b3BsZXZlbFdpbmRvdyk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIGNh
c2UgTlBOVnhEaXNwbGF5OgorICAgICAgICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSBn
ZXRQbHVnaW5EaXNwbGF5KCk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6CisgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlw
dFBhdXNlZCkgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0KiB3
aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0
TlBPYmplY3QoKTsKKworICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUg
cmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9q
ZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmpl
Y3QpCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOwor
CisgICAgICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVlKSA9IHdpbmRvd1NjcmlwdE9iamVj
dDsKKworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworICAg
ICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAgICAgICAgICpyZXN1bHQgPSBO
UEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICBp
ZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdO
YW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAg
ICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50
Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAvLyBSZXR1cm4gdmFsdWUg
aXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3
dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgIGlm
IChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVn
aW5TY3JpcHRPYmplY3QpOworCisgICAgICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVlKSA9
IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVm5ldHNjYXBlV2lu
ZG93OiB7CisgICAgICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3BhcmVu
dEZyYW1lLT52aWV3KCktPmV2YXNPYmplY3QoKSk7CisgICAgICAgIGlmICghZXZhcykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBFY29yZV9FdmFzKiBlY29yZUV2YXMgPSBl
Y29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOworICAgICAgICAqc3RhdGljX2Nhc3Q8WElE
Kj4odmFsdWUpID0gc3RhdGljX2Nhc3Q8V2luZG93PihlY29yZV9ldmFzX3dpbmRvd19nZXQoZWNv
cmVFdmFzKSk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgaWYgKG1f
cGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCkp
IHsKKyAgICAgICAgICAgICpzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9IDI7CisgICAg
ICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6Omlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisjaWYgUExBVEZPUk0oR1RLKQor
ICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2Fy
ZWEoR1RLX1dJREdFVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSwgcmVjdC54KCksIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
I2VuZGlmCisKKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlm
ICghcmVjdCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJl
Y3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7CisgICAgaW52YWxpZGF0ZVdpbmRv
d2xlc3NQbHVnaW5SZWN0KHIpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdp
b24oTlBSZWdpb24pCit7CisgICAgLy8gVE9ETzogb3B0aW1pemUKKyAgICBpbnZhbGlkYXRlKCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQoreworI2lmIFBMQVRGT1JNKEdU
SykKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXco
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAgZWxzZQorICAgICAgICBndGtfd2lkZ2V0X3F1
ZXVlX2RyYXcobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFn
ZUNsaWVudCgpKTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbmRpZgorfQorCisj
aWYgUExBVEZPUk0oR1RLKQorc3RhdGljIHZvaWQgZ2V0VmlzdWFsQW5kQ29sb3JtYXAoaW50IGRl
cHRoLCBWaXN1YWwqKiB2aXN1YWwsIENvbG9ybWFwKiBjb2xvcm1hcCkKK3sKKyAgICAqdmlzdWFs
ID0gMDsKKyAgICAqY29sb3JtYXAgPSAwOworCisgICAgRGlzcGxheSogZGlzcGxheSA9IEdES19E
SVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOworICAgIGludCBybWFq
LCBybWluOworICAgIGlmIChkZXB0aCA9PSAzMiAmJiAoIVhSZW5kZXJRdWVyeVZlcnNpb24oZGlz
cGxheSwgJnJtYWosICZybWluKSB8fCAoIXJtYWogJiYgcm1pbiA8IDUpKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgWFZpc3VhbEluZm8gdGVtcGw7CisgICAgdGVtcGwuc2NyZWVuICA9IGdka19z
Y3JlZW5fZ2V0X251bWJlcihnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOworICAgIHRlbXBsLmRl
cHRoICAgPSBkZXB0aDsKKyAgICB0ZW1wbC5jX2NsYXNzID0gVHJ1ZUNvbG9yOworICAgIGludCBu
VmlzdWFsczsKKyAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbyA9IFhHZXRWaXN1YWxJbmZvKGRp
c3BsYXksIFZpc3VhbFNjcmVlbk1hc2sgfCBWaXN1YWxEZXB0aE1hc2sgfCBWaXN1YWxDbGFzc01h
c2ssICZ0ZW1wbCwgJm5WaXN1YWxzKTsKKworICAgIGlmICghblZpc3VhbHMpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChkZXB0aCA9PSAzMikgeworICAgICAgICBmb3IgKGludCBpZHggPSAw
OyBpZHggPCBuVmlzdWFsczsgKytpZHgpIHsKKyAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0
KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChkaXNwbGF5LCB2aXN1YWxJbmZvW2lk
eF0udmlzdWFsKTsKKyAgICAgICAgICAgIGlmIChmb3JtYXQtPnR5cGUgPT0gUGljdFR5cGVEaXJl
Y3QgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrKSB7CisgICAgICAgICAgICAgICAgKnZpc3Vh
bCA9IHZpc3VhbEluZm9baWR4XS52aXN1YWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgKnZpc3VhbCA9IHZpc3Vh
bEluZm9bMF0udmlzdWFsOworCisgICAgWEZyZWUodmlzdWFsSW5mbyk7CisKKyAgICBpZiAoKnZp
c3VhbCkKKyAgICAgICAgKmNvbG9ybWFwID0gWENyZWF0ZUNvbG9ybWFwKGRpc3BsYXksIEdES19S
T09UX1dJTkRPVygpLCAqdmlzdWFsLCBBbGxvY05vbmUpOworfQorCitnYm9vbGVhbiBQbHVnaW5W
aWV3OjpwbHVnUmVtb3ZlZENhbGxiYWNrKEd0a1NvY2tldCogc29ja2V0LCBQbHVnaW5WaWV3KiB2
aWV3KQoreworICAgIHZpZXctPm1fcGx1Z0FkZGVkID0gZmFsc2U7CisgICAgcmV0dXJuIFRSVUU7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGx1Z0FkZGVkQ2FsbGJhY2soR3RrU29ja2V0KiBzb2Nr
ZXQsIFBsdWdpblZpZXcqIHZpZXcpCit7CisgICAgQVNTRVJUKHNvY2tldCk7CisgICAgQVNTRVJU
KHZpZXcpOworICAgIHZpZXctPm1fcGx1Z0FkZGVkID0gdHJ1ZTsKKyAgICB2aWV3LT51cGRhdGVX
aWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOworfQorI2VuZGlmCisKK2Jvb2wgUGx1Z2luVmlldzo6
cGxhdGZvcm1TdGFydCgpCit7CisgICAgQVNTRVJUKG1faXNTdGFydGVkKTsKKyAgICBBU1NFUlQo
bV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKKworICAgIGlmICht
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKKyAgICAgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAm
bV9uZWVkc1hFbWJlZCk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKyAgICB9CisKKyNpZiBQTEFU
Rk9STShHVEspCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBHdGtXaWRnZXQqIHBh
Z2VDbGllbnQgPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1Q
YWdlQ2xpZW50KCk7CisgICAgICAgIGlmIChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICAv
LyBJZiBvdXIgcGFyZW50IGlzIG5vdCBhbmNob3JlZCB0aGUgc3RhcnR1cCBwcm9jZXNzIHdpbGwK
KyAgICAgICAgICAgIC8vIGZhaWwgbWlzZXJhYmx5IGZvciBYRW1iZWQgcGx1Z2lucyBhIGJpdCBs
YXRlciBvbiB3aGVuCisgICAgICAgICAgICAvLyB3ZSB0cnkgdG8gZ2V0IHRoZSBJRCBvZiBvdXIg
d2luZG93IChzaW5jZSByZWFsaXplIHdpbGwKKyAgICAgICAgICAgIC8vIGZhaWwpLCBzbyBsZXQn
cyBqdXN0IGFib3J0IGhlcmUuCisgICAgICAgICAgICBpZiAoIWd0a193aWRnZXRfZ2V0X3BhcmVu
dChwYWdlQ2xpZW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIG1fcGx1Z0FkZGVkID0gZmFsc2U7CisgICAgICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChn
dGtfc29ja2V0X25ldygpKTsKKyAgICAgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05U
QUlORVIocGFnZUNsaWVudCksIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworICAgICAgICAgICAg
Z19zaWduYWxfY29ubmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAicGx1Zy1hZGRlZCIsIEdf
Q0FMTEJBQ0soUGx1Z2luVmlldzo6cGx1Z0FkZGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgInBsdWctcmVtb3Zl
ZCIsIEdfQ0FMTEJBQ0soUGx1Z2luVmlldzo6cGx1Z1JlbW92ZWRDYWxsYmFjayksIHRoaXMpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a194dGJpbl9u
ZXcocGFnZUNsaWVudCwgMCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNldFBsYXRmb3JtV2lk
Z2V0KDApOworICAgICAgICBtX3BsdWdpbkRpc3BsYXkgPSBnZXRQbHVnaW5EaXNwbGF5KCk7Cisg
ICAgfQorCisgICAgc2hvdygpOworCisgICAgICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3Qq
IHdzID0gbmV3IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKKyAgICAgICAgd3MtPnR5cGUg
PSAwOworCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBtX25wV2luZG93LnR5cGUg
PSBOUFdpbmRvd1R5cGVXaW5kb3c7CisgICAgICAgIGlmIChtX25lZWRzWEVtYmVkKSB7CisgICAg
ICAgICAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCk7CisgICAg
ICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUod2lkZ2V0KTsKKyAgICAgICAgICAgIG1fbnBXaW5k
b3cud2luZG93ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ3RrX3NvY2tldF9nZXRfaWQoR1RL
X1NPQ0tFVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSkpOworICAgICAgICAgICAgR2RrV2luZG93
KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KTsKKyAgICAgICAgICAgIHdz
LT5kaXNwbGF5ID0gR0RLX1dJTkRPV19YRElTUExBWSh3aW5kb3cpOworICAgICAgICAgICAgd3Mt
PnZpc3VhbCA9IEdES19WSVNVQUxfWFZJU1VBTChnZGtfd2luZG93X2dldF92aXN1YWwod2luZG93
KSk7CisgICAgICAgICAgICB3cy0+ZGVwdGggPSBnZGtfdmlzdWFsX2dldF9kZXB0aChnZGtfd2lu
ZG93X2dldF92aXN1YWwod2luZG93KSk7CisgICAgICAgICAgICB3cy0+Y29sb3JtYXAgPSBYQ3Jl
YXRlQ29sb3JtYXAod3MtPmRpc3BsYXksIEdES19ST09UX1dJTkRPVygpLCB3cy0+dmlzdWFsLCBB
bGxvY05vbmUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9ucFdpbmRvdy53aW5k
b3cgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigoR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCkpLT54dHdpbmRvdykpOworICAgICAgICAgICAgd3MtPmRpc3BsYXkgPSBHVEtfWFRCSU4o
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0ZGlzcGxheTsKKyAgICAgICAgICAgIHdzLT52aXN1
YWwgPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0dmlzdWFs
OworICAgICAgICAgICAgd3MtPmRlcHRoID0gR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpLT54dGNsaWVudC54dGRlcHRoOworICAgICAgICAgICAgd3MtPmNvbG9ybWFwID0gR1RLX1hU
QklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGNvbG9ybWFwOworICAgICAg
ICB9CisgICAgICAgIFhGbHVzaCh3cy0+ZGlzcGxheSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgICAgIG1fbnBXaW5k
b3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/CisKKyAgICAgICAgR2RrU2NyZWVuKiBnc2NyZWVu
ID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOworICAgICAgICBHZGtWaXN1YWwqIGd2aXN1YWwg
PSBnZGtfc2NyZWVuX2dldF9zeXN0ZW1fdmlzdWFsKGdzY3JlZW4pOworCisgICAgICAgIGlmIChn
ZGtfdmlzdWFsX2dldF9kZXB0aChndmlzdWFsKSA9PSAzMiB8fCAhbV9wbHVnaW4tPnF1aXJrcygp
LmNvbnRhaW5zKFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgpKSB7CisgICAg
ICAgICAgICBnZXRWaXN1YWxBbmRDb2xvcm1hcCgzMiwgJm1fdmlzdWFsLCAmbV9jb2xvcm1hcCk7
CisgICAgICAgICAgICB3cy0+ZGVwdGggPSAzMjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
bV92aXN1YWwpIHsKKyAgICAgICAgICAgIGdldFZpc3VhbEFuZENvbG9ybWFwKGdka192aXN1YWxf
Z2V0X2RlcHRoKGd2aXN1YWwpLCAmbV92aXN1YWwsICZtX2NvbG9ybWFwKTsKKyAgICAgICAgICAg
IHdzLT5kZXB0aCA9IGdka192aXN1YWxfZ2V0X2RlcHRoKGd2aXN1YWwpOworICAgICAgICB9CisK
KyAgICAgICAgd3MtPmRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9n
ZXRfZGVmYXVsdCgpKTsKKyAgICAgICAgd3MtPnZpc3VhbCA9IG1fdmlzdWFsOworICAgICAgICB3
cy0+Y29sb3JtYXAgPSBtX2NvbG9ybWFwOworCisgICAgICAgIG1fbnBXaW5kb3cueCA9IDA7Cisg
ICAgICAgIG1fbnBXaW5kb3cueSA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsK
KyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKKyAgICB9CisjZWxpZiBQTEFURk9STShF
RkwpICYmIGRlZmluZWQoSEFWRV9FQ09SRV9YKQorICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOwor
ICAgIG1fcGx1Z2luRGlzcGxheSA9IGdldFBsdWdpbkRpc3BsYXkoKTsKKworICAgIHNob3coKTsK
KworICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzID0gbmV3IE5QU2V0V2luZG93Q2Fs
bGJhY2tTdHJ1Y3QoKTsKKyAgICB3cy0+dHlwZSA9IDA7CisKKyAgICBtX25wV2luZG93LnR5cGUg
PSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICBtX25wV2luZG93LndpbmRvdyA9IDA7IC8vIE5v
dCB1c2VkPworCisgICAgU2NyZWVuKiBzY3JlZW4gPSBzdGF0aWNfY2FzdDxTY3JlZW4qPihlY29y
ZV94X2RlZmF1bHRfc2NyZWVuX2dldCgpKTsKKyAgICBtX3Zpc3VhbCA9IHN0YXRpY19jYXN0PFZp
c3VhbCo+KGVjb3JlX3hfZGVmYXVsdF92aXN1YWxfZ2V0KG1fcGx1Z2luRGlzcGxheSwgc2NyZWVu
KSk7CisgICAgbV9jb2xvcm1hcCA9IGVjb3JlX3hfZGVmYXVsdF9jb2xvcm1hcF9nZXQobV9wbHVn
aW5EaXNwbGF5LCBzY3JlZW4pOworCisgICAgd3MtPmRlcHRoID0gZWNvcmVfeF9kZWZhdWx0X2Rl
cHRoX2dldChtX3BsdWdpbkRpc3BsYXksIHNjcmVlbik7CisgICAgd3MtPmRpc3BsYXkgPSBtX3Bs
dWdpbkRpc3BsYXk7CisgICAgd3MtPnZpc3VhbCA9IG1fdmlzdWFsOworICAgIHdzLT5jb2xvcm1h
cCA9IG1fY29sb3JtYXA7CisKKyAgICBtX25wV2luZG93LnggPSAwOworICAgIG1fbnBXaW5kb3cu
eSA9IDA7CisgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0
ID0gLTE7CisjZW5kaWYKKworICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzOworCisgICAgLy8g
VE9ETyByZW1vdmUgaW4gZmF2b3Igb2YgbnVsbCBldmVudHMsIGxpa2UgbWFjIHBvcnQ/CisgICAg
aWYgKCEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNl
dFdpbmRvd0NhbGwpKSkKKyAgICAgICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7IC8vIHdhczogc2V0
TlBXaW5kb3dJZk5lZWRlZCgpLCBidXQgdGhpcyBkb2Vzbid0IHByb2R1Y2UgMHgwIHJlY3RzIGF0
IGZpcnN0IGdvCisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwbGF0
Zm9ybURlc3Ryb3koKQoreworICAgIGlmIChtX2RyYXdhYmxlKSB7CisgICAgICAgIFhGcmVlUGl4
bWFwKGdldFBsdWdpbkRpc3BsYXkoKSwgbV9kcmF3YWJsZSk7CisgICAgICAgIG1fZHJhd2FibGUg
PSAwOworICAgIH0KKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9
IHBsYXRmb3JtV2lkZ2V0KCk7CisgICAgaWYgKHdpZGdldCkgeworICAgICAgICBHdGtXaWRnZXQq
IHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudCh3aWRnZXQpOworICAgICAgICBBU1NFUlQo
cGFyZW50KTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYXJl
bnQpLCB3aWRnZXQpOworICAgIH0KKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220823</attachid>
            <date>2014-01-10 01:54:22 -0800</date>
            <delta_ts>2014-01-13 23:46:52 -0800</delta_ts>
            <desc>rebased</desc>
            <filename>bug-70592-20140110185420.patch</filename>
            <type>text/plain</type>
            <size>80522</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNjA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDMyZmRmNjg0MjczYmNk
NDYyZWYwNjRiNzkzMDhhNTliYzg5ZTRkZC4uZmNkMTUwMzA5NTc2ZDQxMzE5ZjU0ZDNiY2VmNDM2
ZjJlNTI3OWFkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDE0LTAxLTEwICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtHVEtdIFNo
YXJlIHBsdWdpbidzIGltcGxlbWVudGF0aW9uIGJldHdlZW4gRUZMIGFuZCBHdGsgcG9ydHMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9yaWdpbmFsIHBh
dGNoIGJ5IE1hcml1c3ogR3J6ZWdvcmN6eWsgPG1hcml1c3ouZ0BzYW1zdW5nLmNvbT4KKworICAg
ICAgICBNZXJnZSBQbHVnaW5WaWV3R3RrLmNwcCBhbmQgUGx1Z2luVmlld0VmbC5jcHAgdG8gUGx1
Z2luVmlld1gxMS5jcHAuCisgICAgICAgIFNvLCB0aGlzIHBhdGNoIGltcHJvdmVzIHRoZSB3aW5k
b3dsZXNzIHBsdWdpbiBzdXBwb3J0IGZvciB0aGUgRUZMIHBvcnQuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbTogQWRkIGluY2x1ZGUgcGF0aCB0byBndGsyeHRiaW4uaCBoZWFkZXIgZmlsZS4K
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBDaGFuZ2UgUGx1Z2luVmlld0d0ay5jcHAg
dG8gUGx1Z2luVmlld1gxMS5jcHAgc291cmNlLgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OiBDaGFuZ2UgUGx1Z2luVmlld0VmbC5jcHAgdG8gUGx1Z2luVmlld0VmbC5jcHAgc291cmNlLgor
ICAgICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsdWdpbnMveDExL1BsdWdpblZpZXdYMTEuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Um9vdFdp
bmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQbHVnaW5EaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpzZXRGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
aG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhpZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjppbnB1dEV2ZW50U3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW5pdFhFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRY
Q3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFu
ZGxlRm9jdXNJbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZv
Y3VzT3V0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRDbGlwKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBhcmVudFZpc2libGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZh
bGlkYXRlUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZvcmNlUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFZpc3VhbEFuZENvbG9ybWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnBsdWdSZW1vdmVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6cGx1Z0FkZGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpw
bGF0Zm9ybURlc3Ryb3kpOgorCiAyMDE0LTAxLTA5ICBab2x0YW4gSG9ydmF0aCAgPHpvbHRhbkB3
ZWJraXQub3JnPgogCiAgICAgICAgIFtDU1MgU2hhcGVzXSBGaXJzdCBsaW5lIGdldHMgaW5jb3Jy
ZWN0bHkgYWRqdXN0ZWQgaW4gc2hhcGUtaW5zaWRlIGR1ZSB0byByb3VuZGluZwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQppbmRleCBjOWJlNDE4MzNmNjc1YTc1OGE3MTExNmFmYjRlYWRlN2NkZmMwNmE1Li5h
ZDY5ZDQ1YjU5ZjgyOTAwMGQyZWQ2Zjg1MzkzMjI2NTk1ZWJlZWNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtOTIsNiArOTIsNyBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGly
KS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMg
XAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrIFwKIAktSSQoc3JjZGly
KS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbiBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA5Njk2NzU4ZmUxYzJhODY4ZGUw
MjQ3NDlmOGI3MjlmZmM4MWIxMmNmLi5jZWEyM2VlZjJlYjI1ZDhmYzc3OGVjMTkzZmViZDU5ZTYw
NWIxYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTYyODIsOCArNjI4Miw4
IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsv
Z3RrMnh0YmluLmMgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCisJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsveGVt
YmVkLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMveDExL1BsdWdpblZpZXdYMTEuY3BwIFwK
IHBsYXRmb3JtZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9X
aWRnZXRCYWNraW5nU3RvcmVHdGtYMTEuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1dpZGdldEJhY2tpbmdTdG9yZUd0a1gxMS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5k
ZXggNTBlNzJkMGE3NzdiNzMyMDE5Y2U3YzgzNDNiYzVhMGQ1Y2E2ZTg3ZC4uNTRhZTRmMjUzMzJj
ZDNlOTA1ZWZmMWM5OGRiNDlkOGY5ZGM4YjcxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UK
QEAgLTE4OSw3ICsxODksNyBAQCBlbmRpZiAoKQogaWYgKEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5f
QVBJKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBwbHVnaW5zL2Vm
bC9QbHVnaW5QYWNrYWdlRWZsLmNwcAotICAgICAgICBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZs
LmNwcAorICAgICAgICBwbHVnaW5zL3gxMS9QbHVnaW5WaWV3WDExLmNwcAogICAgICkKIGVuZGlm
ICgpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdF
ZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiOGU2ODdiZjQ3YTFmYTRiYzFjZjNlZjc2NDkz
Y2Y3OGQwZGY5MmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwzNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
SU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwotICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJQbHVnaW5WaWV3LmgiCi0KLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgotI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCi0jaW5jbHVkZSAiSG9zdFdp
bmRvdy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgotI2luY2x1ZGUgIk1vdXNlRXZl
bnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2th
Z2UuaCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAibnBydW50aW1l
X2ltcGwuaCIKLSNpbmNsdWRlICJydW50aW1lL0pTTG9jay5oIgotI2luY2x1ZGUgInJ1bnRpbWUv
T3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KLSNpbmNsdWRlIDxFY29yZV9Y
Lmg+Ci0jaW5jbHVkZSA8RXZhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5Q
RXZlbnQmIGV2ZW50KQotewotICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgIHNldENhbGxpbmdQbHVnaW4odHJ1
ZSk7Ci0KLSAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KG1faW5zdGFuY2UsICZldmVudCk7Ci0KLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICByZXR1cm4gYWNjZXB0
ZWQ7Ci19Ci0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZv
Y3VzSW5FdmVudCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
I2VuZGlmCi0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2
ZW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6Omhh
bmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCi17Ci0gICAgTlBFdmVudCB4RXZlbnQ7
Ci0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgY29uc3QgSW50UmVjdCByZWN0ID0gcGFyZW50
KCktPmNvbnRlbnRzVG9TY3JlZW4oSW50UmVjdCgwLCAwLCBldmVudC0+b2Zmc2V0WCgpLCBldmVu
dC0+b2Zmc2V0WSgpKSk7Ci0gICAgY29uc3QgaW50IGV2ZW50WCA9IHJlY3Qud2lkdGgoKTsKLSAg
ICBjb25zdCBpbnQgZXZlbnRZID0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7Ci0gICAgICAgIHhFdmVu
dC50eXBlID0gTW90aW9uTm90aWZ5OwotICAgICAgICB4RXZlbnQueG1vdGlvbi54ID0gZXZlbnRY
OwotICAgICAgICB4RXZlbnQueG1vdGlvbi55ID0gZXZlbnRZOwotICAgIH0gZWxzZSBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKLSAgICAgICAgeEV2
ZW50LnR5cGUgPSBCdXR0b25QcmVzczsKLSAgICAgICAgeEV2ZW50LnhidXR0b24ueCA9IGV2ZW50
WDsKLSAgICAgICAgeEV2ZW50LnhidXR0b24ueSA9IGV2ZW50WTsKLSAgICAgICAgeEV2ZW50Lnhi
dXR0b24uYnV0dG9uID0gZXZlbnQtPmJ1dHRvbigpICsgMTsgLy8gRE9NIE1vdXNlRXZlbnQgY291
bnRzIGZyb20gMCwgYW5kIFhCdXR0b25FdmVudCBmcm9tIDEuCi0gICAgfSBlbHNlIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKLSAgICAgICAgeEV2ZW50
LnR5cGUgPSBCdXR0b25SZWxlYXNlOwotICAgICAgICB4RXZlbnQueGJ1dHRvbi54ID0gZXZlbnRY
OwotICAgICAgICB4RXZlbnQueGJ1dHRvbi55ID0gZXZlbnRZOwotICAgICAgICB4RXZlbnQueGJ1
dHRvbi5idXR0b24gPSBldmVudC0+YnV0dG9uKCkgKyAxOwotICAgIH0gZWxzZQotICAgICAgICBy
ZXR1cm47Ci0jZW5kaWYKLQotICAgIGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKLSAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6dXBk
YXRlUGx1Z2luV2lkZ2V0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBs
dWdpblZpZXc6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkKLXsKLSAgICBpZiAoZm9jdXNlZCkKLSAg
ICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLnNldEZvY3VzZWRFbGVtZW50KG1fZWxlbWVudCk7
Ci0KLSAgICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OnNob3coKQotewotICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOwotCi0gICAgV2lkZ2V0OjpzaG93
KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCi17Ci0gICAgc2V0U2VsZlZpc2libGUo
ZmFsc2UpOwotCi0gICAgV2lkZ2V0OjpoaWRlKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IGlmICghbV9pc1N0YXJ0ZWQpCi0gICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4
dCwgcmVjdCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBh
cmVudCkKLXsKLSAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOwotCi0gICAgaWYgKHBhcmVu
dCkKLSAgICAgICAgaW5pdCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVj
dChjb25zdCBJbnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBs
dWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQotewotfQotCi12b2lkIFBsdWdpblZpZXc6
OnNldFBhcmVudFZpc2libGUoYm9vbCB2aXNpYmxlKQotewotICAgIFdpZGdldDo6c2V0UGFyZW50
VmlzaWJsZSh2aXNpYmxlKTsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVh
ZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVm
KQotewotICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7Ci0KLSAgICBpZiAoZmlsZW5hbWUu
c3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgICAgIGZp
bGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDcpOwotI2Vsc2UKLSAgICAgICAgZmlsZW5hbWUg
PSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7Ci0jZW5kaWYKLQotICAgIGxvbmcgbG9uZyBzaXplOwot
ICAgIGlmICghZ2V0RmlsZVNpemUoZmlsZW5hbWUsIHNpemUpKQotICAgICAgICByZXR1cm4gTlBF
UlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oZmlsZW5h
bWUudXRmOCgpLmRhdGEoKSwgInIiKTsKLSAgICBpZiAoIWZpbGVIYW5kbGUpCi0gICAgICAgIHJl
dHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIGJ1ZmZlci5yZXNpemUoc2l6ZSk7Ci0g
ICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIHNpemUsIGZpbGVIYW5k
bGUpOwotCi0gICAgZmNsb3NlKGZpbGVIYW5kbGUpOwotCi0gICAgaWYgKGJ5dGVzUmVhZCA8PSAw
KQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRp
YyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKLXsK
LSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5WVG9vbGtpdDoKLSAgICAgICAg
KnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gMDsKLSAgICAgICAgKnJlc3VsdCA9IE5Q
RVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVlN1cHBv
cnRzWEVtYmVkQm9vbDoKLSAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZh
bHNlOwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOgotICAgICAgICAqc3Rh
dGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJS
X05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVlN1cHBvcnRz
V2luZG93bGVzczoKLSAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNl
OwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9v
bCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQotewotICAgIGlmICghdmFsdWUgfHwgIXJlc3VsdCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgIGNh
c2UgTlBOVnhEaXNwbGF5OgotICAgICAgICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSBz
dGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNvcmVfeF9kaXNwbGF5X2dldCgpKTsKLSAgICAgICAgKnJl
c3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2Ug
TlBOVnh0QXBwQ29udGV4dDoKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsK
LSAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKSB7Ci0gICAgICAgICAgICAqcmVzdWx0
ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJh
bWUtPnNjcmlwdCgpLndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7Ci0KLSAgICAgICAgLy8gUmV0dXJu
IHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0
dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgotICAg
ICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQotICAgICAgICAgICAgX05QTl9SZXRhaW5PYmpl
Y3Qod2luZG93U2NyaXB0T2JqZWN0KTsKLQotICAgICAgICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2
YWx1ZSkgPSB3aW5kb3dTY3JpcHRPYmplY3Q7Ci0KLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05P
X0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjYXNlIE5QTlZQbHVn
aW5FbGVtZW50TlBPYmplY3Q6IHsKLSAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKSB7
Ci0gICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlw
dE9iamVjdCA9IDA7Ci0KLSAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRU
YWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNU
YWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0
aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7Ci0K
LSAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBk
ZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25w
cnVudGltZS5odG1sPgotICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQotICAgICAgICAg
ICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKLQotICAgICAgICAqc3Rh
dGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSBwbHVnaW5TY3JpcHRPYmplY3Q7Ci0KLSAgICAgICAg
KnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewotICAgICAgICBFdmFzKiBldmFzID0gZXZh
c19vYmplY3RfZXZhc19nZXQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ldmFzT2JqZWN0KCkpOwot
ICAgICAgICBpZiAoIWV2YXMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
RWNvcmVfRXZhcyogZWNvcmVFdmFzID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsK
LSAgICAgICAgKnN0YXRpY19jYXN0PFhJRCo+KHZhbHVlKSA9IHN0YXRpY19jYXN0PFdpbmRvdz4o
ZWNvcmVfZXZhc193aW5kb3dfZ2V0KGVjb3JlRXZhcykpOwotICAgICAgICAqcmVzdWx0ID0gTlBF
UlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNhc2UgTlBO
VlRvb2xraXQ6Ci0gICAgICAgIGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2lu
UXVpcmtSZXF1aXJlc0d0a1Rvb2xLaXQpKSB7Ci0gICAgICAgICAgICAqc3RhdGljX2Nhc3Q8dWlu
dDMyX3QqPih2YWx1ZSkgPSAyOwotICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9S
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQotewotICAgIGlmICghcmVjdCkgewot
ICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnZh
bGlkYXRlUmVjdChJbnRSZWN0KHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSBy
ZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApKTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCi17Ci0gICAgQVNT
RVJUKG1faXNTdGFydGVkKTsKLSAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9h
ZGVkU3VjY2Vzc2Z1bGx5KTsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luVmlld0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5W
aWV3R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJiYmVlM2ZlZjY3NDU3
Yzk0Y2ViMjg5NjE2MDY0NmUyNTlkODQ5OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3Rr
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCBLYWthaSwgSW5jLiA8YnJpYW5Aa2FrYWkuY29tPgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0KLSNpbmNsdWRlICJCcmlkZ2VKU0MuaCIKLSNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAi
RWxlbWVudC5oIgotI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5j
bHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJI
VE1MUGx1Z0luRWxlbWVudC5oIgotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJJ
bWFnZS5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93
QmFzZS5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJk
RXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQbHVn
aW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKLSNpbmNs
dWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1
ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIKLSNpbmNsdWRl
ICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUg
PHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0KLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotI2luY2x1ZGUgPGdka2NvbmZpZy5oPgotI2VuZGlmCi0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotCi0jZGVmaW5lIFN0cmluZyBYdFN0cmluZ1R5cGUKLSNpbmNs
dWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgImd0azJ4dGJpbi5oIgotI2RlZmluZSBCb29s
IGludCAvLyB0aGlzIGdvdCB1bmRlZmluZWQgc29tZXdoZXJlCi0jZGVmaW5lIFN0YXR1cyBpbnQg
Ly8gZGl0dG8KLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+Ci0jaW5jbHVkZSA8
Y2Fpcm8teGxpYi5oPgotI2luY2x1ZGUgPGdkay9nZGt4Lmg+Ci0KLXVzaW5nIEpTQzo6RXhlY1N0
YXRlOwotdXNpbmcgSlNDOjpJbnRlcnByZXRlcjsKLXVzaW5nIEpTQzo6SlNMb2NrOwotdXNpbmcg
SlNDOjpKU09iamVjdDsKLQotdXNpbmcgc3RkOjptaW47Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQot
Ym9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCi17Ci0gICAg
Ly8gc2FuaXR5IGNoZWNrCi0gICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVl
KTsKLQotICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KG1faW5zdGFuY2UsICZldmVudCk7Ci0KLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICByZXR1cm4gYWNjZXB0
ZWQ7Ci19Ci0KLXN0YXRpYyBXaW5kb3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUp
Ci17Ci0gICAgR3RrV2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSBwYXJlbnRGcmFtZS0+dmlldygpLT5o
b3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgIEdka1NjcmVlbiogZ3NjcmVl
biA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbihwYXJlbnRXaWRnZXQpOwotICAgIHJldHVybiBHREtf
V0lORE9XX1hXSU5ET1coZ2RrX3NjcmVlbl9nZXRfcm9vdF93aW5kb3coZ3NjcmVlbikpOwotfQot
Ci12b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCi17Ci0gICAgaWYgKCFwYXJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmll
dygpKTsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKTsK
LQotICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKLSAgICBJbnRSZWN0
IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKLQotICAgIG1fd2luZG93UmVjdCA9IEludFJlY3Qo
ZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFt
ZVJlY3QoKS5zaXplKCkpOwotICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOwotICAg
IG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOwot
Ci0gICAgaWYgKG1fd2luZG93UmVjdCA9PSBvbGRXaW5kb3dSZWN0ICYmIG1fY2xpcFJlY3QgPT0g
b2xkQ2xpcFJlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVn
aW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9pc1dpbmRvd2VkICYmICFtX3dpbmRvd1JlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIERpc3Bs
YXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpKTsKLSAgICAgICAgaWYgKG1fZHJhd2FibGUpCi0gICAgICAgICAgICBYRnJlZVBpeG1hcChk
aXNwbGF5LCBtX2RyYXdhYmxlKTsKLSAgICAgICAgICAgIAotICAgICAgICBtX2RyYXdhYmxlID0g
WENyZWF0ZVBpeG1hcChkaXNwbGF5LCBnZXRSb290V2luZG93KG1fcGFyZW50RnJhbWUuZ2V0KCkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRvd1JlY3Qud2lkdGgo
KSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPmRl
cHRoKTsKLSAgICAgICAgWFN5bmMoZGlzcGxheSwgZmFsc2UpOyAvLyBtYWtlIHN1cmUgdGhhdCB0
aGUgc2VydmVyIGtub3dzIGFib3V0IHRoZSBEcmF3YWJsZQotICAgIH0KLQotICAgIHNldE5QV2lu
ZG93SWZOZWVkZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3Vz
ZWQpCi17Ci0gICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gcGxhdGZvcm1XaWRn
ZXQoKSk7Ci0gICAgaWYgKGZvY3VzZWQgJiYgcGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgZ3Rr
X3dpZGdldF9ncmFiX2ZvY3VzKHBsYXRmb3JtV2lkZ2V0KCkpOwotICAgIFdpZGdldDo6c2V0Rm9j
dXMoZm9jdXNlZCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2hvdygpCi17Ci0gICAgQVNTRVJU
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gcGxhdGZvcm1XaWRnZXQoKSk7Ci0gICAgV2lkZ2V0
OjpzaG93KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCi17Ci0gICAgQVNTRVJUKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gcGxhdGZvcm1XaWRnZXQoKSk7Ci0gICAgV2lkZ2V0Ojpo
aWRlKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9z
dGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KSB7Ci0gICAgICAgIHBhaW50
TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAobV9pc1dpbmRvd2VkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fZHJhd2FibGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxh
eV9nZXRfZGVmYXVsdCgpKTsKLSAgICBjb25zdCBib29sIHN5bmNYID0gbV9wbHVnaW5EaXNwbGF5
ICYmIG1fcGx1Z2luRGlzcGxheSAhPSBkaXNwbGF5OwotCi0gICAgSW50UmVjdCBleHBvc2VkUmVj
dChyZWN0KTsKLSAgICBleHBvc2VkUmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOwotICAgIGV4
cG9zZWRSZWN0Lm1vdmUoLWZyYW1lUmVjdCgpLngoKSwgLWZyYW1lUmVjdCgpLnkoKSk7Ci0KLSAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBkcmF3YWJsZVN1cmZhY2UgPSBhZG9wdFJlZihjYWly
b194bGliX3N1cmZhY2VfY3JlYXRlKGRpc3BsYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kcmF3YWJsZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Zpc3VhbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRv
d1JlY3Qud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpKTsKLQotICAgIGlmIChtX2lzVHJh
bnNwYXJlbnQpIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIDMyIGJpdCBkcmF3YWJsZSBhbmQg
dGhlIHBsdWdpbiB3YW50cyB0cmFuc3BhcmVuY3ksCi0gICAgICAgIC8vIHdlJ2xsIGNsZWFyIHRo
ZSBleHBvc2VkIGFyZWEgdG8gdHJhbnNwYXJlbnQgZmlyc3QuICBPdGhlcndpc2UsCi0gICAgICAg
IC8vIHdlJ2QgZW5kIHVwIHdpdGgganVuayBpbiB0aGVyZSBmcm9tIHRoZSBsYXN0IHBhaW50LCBv
ciwgd29yc2UsCi0gICAgICAgIC8vIHVuaW5pdGlhbGl6ZWQgZGF0YS4KLSAgICAgICAgUmVmUHRy
PGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGRyYXdhYmxlU3VyZmFjZS5nZXQo
KSkpOwotCi0gICAgICAgIGlmICghKGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoZHJhd2FibGVT
dXJmYWNlLmdldCgpKSAmIENBSVJPX0NPTlRFTlRfQUxQSEEpKSB7Ci0gICAgICAgICAgICAvLyBB
dHRlbXB0IHRvIGZha2UgaXQgd2hlbiB3ZSBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwgb24g
b3VyCi0gICAgICAgICAgICAvLyBwaXhtYXAuICBJZiB0aGF0J3Mgbm90IHBvc3NpYmxlLCBhdCBs
ZWFzdCBjbGVhciB0aGUgd2luZG93IHRvCi0gICAgICAgICAgICAvLyBhdm9pZCBkcmF3aW5nIGFy
dGlmYWN0cy4KLQotICAgICAgICAgICAgLy8gVGhpcyBXb3VsZCBub3Qgd29yayB3aXRob3V0IGRv
dWJsZSBidWZmZXJpbmcsIGJ1dCB3ZSBhbHdheXMgdXNlIGl0LgotICAgICAgICAgICAgY2Fpcm9f
c2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBjYWlyb19nZXRfZ3JvdXBfdGFyZ2V0KGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOwotICAgICAg
ICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0Up
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQo
KSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwotCi0gICAgICAgIGNhaXJvX3JlY3RhbmdsZShjci5n
ZXQoKSwgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSk7Ci0gICAg
ICAgIGNhaXJvX2ZpbGwoY3IuZ2V0KCkpOwotICAgIH0KLQotICAgIFhFdmVudCB4ZXZlbnQ7Ci0g
ICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZihYRXZlbnQpKTsKLSAgICBYR3JhcGhpY3NFeHBv
c2VFdmVudCYgZXhwb3NlRXZlbnQgPSB4ZXZlbnQueGdyYXBoaWNzZXhwb3NlOwotICAgIGV4cG9z
ZUV2ZW50LnR5cGUgPSBHcmFwaGljc0V4cG9zZTsKLSAgICBleHBvc2VFdmVudC5kaXNwbGF5ID0g
ZGlzcGxheTsKLSAgICBleHBvc2VFdmVudC5kcmF3YWJsZSA9IG1fZHJhd2FibGU7Ci0gICAgZXhw
b3NlRXZlbnQueCA9IGV4cG9zZWRSZWN0LngoKTsKLSAgICBleHBvc2VFdmVudC55ID0gZXhwb3Nl
ZFJlY3QueSgpOwotICAgIGV4cG9zZUV2ZW50LndpZHRoID0gZXhwb3NlZFJlY3QueCgpICsgZXhw
b3NlZFJlY3Qud2lkdGgoKTsgLy8gZmxhc2ggYnVnPyBpdCB0aGlua3Mgd2lkdGggaXMgdGhlIHJp
Z2h0IGluIHRyYW5zcGFyZW50IG1vZGUKLSAgICBleHBvc2VFdmVudC5oZWlnaHQgPSBleHBvc2Vk
UmVjdC55KCkgKyBleHBvc2VkUmVjdC5oZWlnaHQoKTsgLy8gZmxhc2ggYnVnPyBpdCB0aGlua3Mg
aGVpZ2h0IGlzIHRoZSBib3R0b20gaW4gdHJhbnNwYXJlbnQgbW9kZQotCi0gICAgZGlzcGF0Y2hO
UEV2ZW50KHhldmVudCk7Ci0KLSAgICBpZiAoc3luY1gpCi0gICAgICAgIFhTeW5jKG1fcGx1Z2lu
RGlzcGxheSwgZmFsc2UpOyAvLyBzeW5jIGNoYW5nZXMgYnkgcGx1Z2luCi0KLSAgICBjYWlyb190
KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgIGNhaXJvX3NhdmUo
Y3IpOwotCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBkcmF3YWJsZVN1cmZhY2Uu
Z2V0KCksIGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpKTsKLQotICAgIGNhaXJvX3Jl
Y3RhbmdsZShjciwKLSAgICAgICAgICAgICAgICAgICAgZnJhbWVSZWN0KCkueCgpICsgZXhwb3Nl
ZFJlY3QueCgpLCBmcmFtZVJlY3QoKS55KCkgKyBleHBvc2VkUmVjdC55KCksCi0gICAgICAgICAg
ICAgICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKLSAg
ICBjYWlyb19jbGlwKGNyKTsKLQotICAgIGlmIChtX2lzVHJhbnNwYXJlbnQpCi0gICAgICAgIGNh
aXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfT1ZFUik7Ci0gICAgZWxzZQotICAg
ICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAg
Y2Fpcm9fcGFpbnQoY3IpOwotCi0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKLXsKLSAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vblZNKCkpOwotCi0gICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVn
aW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChl
dmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgZXZlbnQtPnR5cGUo
KSAhPSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlBF
dmVudCB4RXZlbnQ7Ci0gICAgaW5pdFhFdmVudCgmeEV2ZW50KTsKLSAgICBHZGtFdmVudEtleSog
Z2RrRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKS0+Z2RrRXZlbnRLZXkoKTsKLQotICAgIHhFdmVu
dC50eXBlID0gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgPyAy
IDogMzsgLy8gS2V5UHJlc3MvUmVsZWFzZSBnZXQgdW5zZXQgc29tZXdoZXJlCi0gICAgeEV2ZW50
LnhrZXkucm9vdCA9IGdldFJvb3RXaW5kb3cobV9wYXJlbnRGcmFtZS5nZXQoKSk7Ci0gICAgeEV2
ZW50LnhrZXkuc3Vid2luZG93ID0gMDsgLy8gd2UgaGF2ZSBubyBjaGlsZCB3aW5kb3cKLSAgICB4
RXZlbnQueGtleS50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOwotICAgIHhFdmVudC54a2V5LnN0
YXRlID0gZ2RrRXZlbnQtPnN0YXRlOyAvLyBHZGtNb2RpZmllclR5cGUgbWlycm9ycyB4bGliIHN0
YXRlIG1hc2tzCi0gICAgeEV2ZW50LnhrZXkua2V5Y29kZSA9IGdka0V2ZW50LT5oYXJkd2FyZV9r
ZXljb2RlOwotICAgIHhFdmVudC54a2V5LnNhbWVfc2NyZWVuID0gdHJ1ZTsKLQotICAgIC8vIE5P
VEU6IEFzIHRoZSBYRXZlbnRzIHNlbnQgdG8gdGhlIHBsdWctaW4gYXJlIHN5bnRoZXNpemVkIGFu
ZCB0aGVyZSBpcyBub3QgYSBuYXRpdmUgd2luZG93Ci0gICAgLy8gY29ycmVzcG9uZGluZyB0byB0
aGUgcGx1Zy1pbiByZWN0YW5nbGUsIHNvbWUgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIFhFdmVudCBz
dHJ1Y3R1cmVzIGFyZSBub3QKLSAgICAvLyBzZXQgdG8gdGhlaXIgbm9ybWFsIFhzZXJ2ZXIgdmFs
dWVzLiBlLmcuIEtleSBldmVudHMgZG9uJ3QgaGF2ZSBhIHBvc2l0aW9uLgotICAgIC8vIHNvdXJj
ZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vTlBFdmVudAotICAgIHhFdmVudC54
a2V5LnggPSAwOwotICAgIHhFdmVudC54a2V5LnkgPSAwOwotICAgIHhFdmVudC54a2V5Lnhfcm9v
dCA9IDA7Ci0gICAgeEV2ZW50LnhrZXkueV9yb290ID0gMDsKLQotICAgIGlmIChkaXNwYXRjaE5Q
RXZlbnQoeEV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci19Ci0K
LXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRFdmVudFN0YXRlKE1vdXNlRXZlbnQqIGV2ZW50KQot
ewotICAgIHVuc2lnbmVkIGludCBzdGF0ZSA9IDA7Ci0gICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkp
Ci0gICAgICAgIHN0YXRlIHw9IENvbnRyb2xNYXNrOwotICAgIGlmIChldmVudC0+c2hpZnRLZXko
KSkKLSAgICAgICAgc3RhdGUgfD0gU2hpZnRNYXNrOwotICAgIGlmIChldmVudC0+YWx0S2V5KCkp
Ci0gICAgICAgIHN0YXRlIHw9IE1vZDFNYXNrOwotICAgIGlmIChldmVudC0+bWV0YUtleSgpKQot
ICAgICAgICBzdGF0ZSB8PSBNb2Q0TWFzazsKLSAgICByZXR1cm4gc3RhdGU7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6aW5pdFhFdmVudChYRXZlbnQqIHhFdmVudCkKLXsKLSAgICBtZW1zZXQoeEV2
ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7Ci0KLSAgICB4RXZlbnQtPnhhbnkuc2VyaWFsID0gMDsg
Ly8gd2UgYXJlIHVuYXdhcmUgb2YgdGhlIGxhc3QgcmVxdWVzdCBwcm9jZXNzZWQgYnkgWCBTZXJ2
ZXIKLSAgICB4RXZlbnQtPnhhbnkuc2VuZF9ldmVudCA9IGZhbHNlOwotICAgIEd0a1dpZGdldCog
d2lkZ2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFn
ZUNsaWVudCgpOwotICAgIHhFdmVudC0+eGFueS5kaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BM
QVkoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKTsKLQotICAgIC8vIE1vemlsbGEgYWxz
byBzZW5kcyBOb25lIGhlcmUgZm9yIHdpbmRvd2xlc3MgcGx1Z2lucy4gU2VlIG5zT2JqZWN0RnJh
bWUuY3BwIGluIHRoZSBNb3ppbGxhIHNvdXJjZXMuCi0gICAgLy8gVGhpcyBtZXRob2QgYWxzbyBz
ZXRzIHVwIEZvY3VzSW4gYW5kIEZvY3VzT3V0IGV2ZW50cyBmb3Igd2luZG93cyBwbHVnaW5zLCBi
dXQgTW96aWxsYSBkb2Vzbid0Ci0gICAgLy8gZXZlbiBzZW5kIHRoZXNlIHR5cGVzIG9mIGV2ZW50
cyB0byB3aW5kb3dlZCBwbHVnaW5zLiBJbiB0aGUgZnV0dXJlLCBpdCBtYXkgYmUgZ29vZCB0byBv
bmx5Ci0gICAgLy8gc2VuZCB0aGVtIHRvIHdpbmRvd2xlc3MgcGx1Z2lucy4KLSAgICB4RXZlbnQt
Pnhhbnkud2luZG93ID0gTm9uZTsKLX0KLQotc3RhdGljIHZvaWQgc2V0WEJ1dHRvbkV2ZW50U3Bl
Y2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQ
b2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKLXsKLSAgICBYQnV0dG9uRXZl
bnQmIHhidXR0b24gPSB4RXZlbnQtPnhidXR0b247Ci0gICAgeGJ1dHRvbi50eXBlID0gZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgPyBCdXR0b25QcmVzcyA6IEJ1
dHRvblJlbGVhc2U7Ci0gICAgeGJ1dHRvbi5yb290ID0gZ2V0Um9vdFdpbmRvdyhwYXJlbnRGcmFt
ZSk7Ci0gICAgeGJ1dHRvbi5zdWJ3aW5kb3cgPSAwOwotICAgIHhidXR0b24udGltZSA9IGV2ZW50
LT50aW1lU3RhbXAoKTsKLSAgICB4YnV0dG9uLnggPSBwb3N0Wm9vbVBvcy54KCk7Ci0gICAgeGJ1
dHRvbi55ID0gcG9zdFpvb21Qb3MueSgpOwotICAgIHhidXR0b24ueF9yb290ID0gZXZlbnQtPnNj
cmVlblgoKTsKLSAgICB4YnV0dG9uLnlfcm9vdCA9IGV2ZW50LT5zY3JlZW5ZKCk7Ci0gICAgeGJ1
dHRvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7Ci0gICAgc3dpdGNoIChldmVudC0+
YnV0dG9uKCkpIHsKLSAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKLSAgICAgICAgeGJ1dHRvbi5idXR0
b24gPSBCdXR0b24yOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJpZ2h0QnV0dG9uOgotICAg
ICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TGVmdEJ1dHRvbjoKLSAgICBkZWZhdWx0OgotICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRv
bjE7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB4YnV0dG9uLnNhbWVfc2NyZWVuID0gdHJ1
ZTsKLX0KLQotc3RhdGljIHZvaWQgc2V0WE1vdGlvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50
KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3Ms
IEZyYW1lKiBwYXJlbnRGcmFtZSkKLXsKLSAgICBYTW90aW9uRXZlbnQmIHhtb3Rpb24gPSB4RXZl
bnQtPnhtb3Rpb247Ci0gICAgeG1vdGlvbi50eXBlID0gTW90aW9uTm90aWZ5OwotICAgIHhtb3Rp
b24ucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUpOwotICAgIHhtb3Rpb24uc3Vid2lu
ZG93ID0gMDsKLSAgICB4bW90aW9uLnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7Ci0gICAgeG1v
dGlvbi54ID0gcG9zdFpvb21Qb3MueCgpOwotICAgIHhtb3Rpb24ueSA9IHBvc3Rab29tUG9zLnko
KTsKLSAgICB4bW90aW9uLnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7Ci0gICAgeG1vdGlvbi55
X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOwotICAgIHhtb3Rpb24uc3RhdGUgPSBpbnB1dEV2ZW50
U3RhdGUoZXZlbnQpOwotICAgIHhtb3Rpb24uaXNfaGludCA9IE5vdGlmeU5vcm1hbDsKLSAgICB4
bW90aW9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgc2V0WENyb3NzaW5n
RXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNv
bnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywgRnJhbWUqIHBhcmVudEZyYW1lKQotewotICAgIFhD
cm9zc2luZ0V2ZW50JiB4Y3Jvc3NpbmcgPSB4RXZlbnQtPnhjcm9zc2luZzsKLSAgICB4Y3Jvc3Np
bmcudHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50ID8g
RW50ZXJOb3RpZnkgOiBMZWF2ZU5vdGlmeTsKLSAgICB4Y3Jvc3Npbmcucm9vdCA9IGdldFJvb3RX
aW5kb3cocGFyZW50RnJhbWUpOwotICAgIHhjcm9zc2luZy5zdWJ3aW5kb3cgPSAwOwotICAgIHhj
cm9zc2luZy50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOwotICAgIHhjcm9zc2luZy54ID0gcG9z
dFpvb21Qb3MueSgpOwotICAgIHhjcm9zc2luZy55ID0gcG9zdFpvb21Qb3MueCgpOwotICAgIHhj
cm9zc2luZy54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOwotICAgIHhjcm9zc2luZy55X3Jvb3Qg
PSBldmVudC0+c2NyZWVuWSgpOwotICAgIHhjcm9zc2luZy5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0
ZShldmVudCk7Ci0gICAgeGNyb3NzaW5nLm1vZGUgPSBOb3RpZnlOb3JtYWw7Ci0gICAgeGNyb3Nz
aW5nLmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7Ci0gICAgeGNyb3NzaW5nLnNhbWVfc2NyZWVu
ID0gdHJ1ZTsKLSAgICB4Y3Jvc3NpbmcuZm9jdXMgPSBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7Ci0KLSAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xv
YWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGV2ZW50LT5idXR0
b24oKSA9PSBSaWdodEJ1dHRvbiAmJiBtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2lu
UXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkg
ewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKLSAgICAg
ICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLnNldEFjdGl2ZSh0cnVlKTsKLSAgICAgICAg
Zm9jdXNQbHVnaW5FbGVtZW50KCk7Ci0gICAgfQotCi0gICAgTlBFdmVudCB4RXZlbnQ7Ci0gICAg
aW5pdFhFdmVudCgmeEV2ZW50KTsKLQotICAgIEludFBvaW50IHBvc3Rab29tUG9zID0gcm91bmRl
ZEludFBvaW50KG1fZWxlbWVudC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKGV2ZW50LT5h
YnNvbHV0ZUxvY2F0aW9uKCkpKTsKLQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXVwRXZlbnQpCi0gICAgICAgIHNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQs
IGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZS5nZXQoKSk7Ci0gICAgZWxzZSBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpCi0gICAgICAgIHNl
dFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywg
bV9wYXJlbnRGcmFtZS5nZXQoKSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZW92ZXJFdmVudCkgewotICAgICAgICBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRz
KCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZS5nZXQoKSk7Ci0KLSAg
ICAgICAgLy8gVGhpcyBpcyBhIHdvcmstYXJvdW5kIGZvciBwbHVnaW5zIHdoaWNoIGNoYW5nZSB0
aGUgY3Vyc29yLiBXaGVuIHRoYXQgaGFwcGVucyB3ZQotICAgICAgICAvLyBnZXQgb3V0IG9mIHN5
bmMgd2l0aCBHREsgc29tZWhvdy4gUmVzZXR0aW5nIHRoZSBjdXJzb3IgaGVyZSBzZWVtcyB0byBm
aXggdGhlIGlzc3VlLgotICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2VvdXRFdmVudCkKLSAgICAgICAgICAgIGdka193aW5kb3dfc2V0X2N1cnNvcihndGtfd2lk
Z2V0X2dldF93aW5kb3cobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRm
b3JtUGFnZUNsaWVudCgpKSwgMCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGRpc3BhdGNoTlBFdmVudCh4RXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQo
KQotewotICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9h
ZGVkU3VjY2Vzc2Z1bGx5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBYRXZlbnQgbnBFdmVudDsK
LSAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsKLQotICAgIFhGb2N1c0NoYW5nZUV2ZW50JiBldmVu
dCA9IG5wRXZlbnQueGZvY3VzOwotICAgIGV2ZW50LnR5cGUgPSA5OyAvLyBGb2N1c0luIGdldHMg
dW5zZXQgc29tZXdoZXJlCi0gICAgZXZlbnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKLSAgICBldmVu
dC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOwotCi0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZl
bnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQotewotICAg
IGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vz
c2Z1bGx5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBYRXZlbnQgbnBFdmVudDsKLSAgICBpbml0
WEV2ZW50KCZucEV2ZW50KTsKLQotICAgIFhGb2N1c0NoYW5nZUV2ZW50JiBldmVudCA9IG5wRXZl
bnQueGZvY3VzOwotICAgIGV2ZW50LnR5cGUgPSAxMDsgLy8gRm9jdXNPdXQgZ2V0cyB1bnNldCBz
b21ld2hlcmUKLSAgICBldmVudC5tb2RlID0gTm90aWZ5Tm9ybWFsOwotICAgIGV2ZW50LmRldGFp
bCA9IE5vdGlmeURldGFpbE5vbmU7Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKLXsKLSAg
ICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOwotCi0gICAgaWYgKHBhcmVudCkKLSAgICAgICAg
aW5pdCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRS
ZWN0JikKLXsKLSAgICBpZiAoIW1faXNXaW5kb3dlZCkKLSAgICAgICAgc2V0TlBXaW5kb3dJZk5l
ZWRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQotewot
ICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgIXBhcmVudCgpIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+c2V0d2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgcGx1Z2lu
IGRpZG4ndCBsb2FkIHN1Y2Vzc2Z1bGx5LCBubyBwb2ludCBpbiBjYWxsaW5nIHNldHdpbmRvdwot
ICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIE9uIFVuaXgsIG9ubHkgY2FsbCBwbHVnaW4ncyBzZXR3aW5k
b3cgaWYgaXQncyBmdWxsLXBhZ2Ugb3Igd2luZG93ZWQKLSAgICBpZiAobV9tb2RlICE9IE5QX0ZV
TEwgJiYgbV9tb2RlICE9IE5QX0VNQkVEKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDaGVj
ayBpZiB0aGUgcGxhdGZvcm1QbHVnaW5XaWRnZXQgc3RpbGwgZXhpc3RzCi0gICAgaWYgKG1faXNX
aW5kb3dlZCAmJiAhcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1fY2xpcFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIElmIHdpZHRoIG9yIGhl
aWdodCBhcmUgbnVsbCwgc2V0IHRoZSBjbGlwUmVjdCB0byBudWxsLAotICAgICAgICAvLyBpbmRp
Y2F0aW5nIHRoYXQgdGhlIHBsdWdpbiBpcyBub3QgdmlzaWJsZS9zY3JvbGxlZCBvdXQuCi0gICAg
ICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7Ci0gICAgICAgIG1fbnBXaW5kb3cuY2xp
cFJlY3QucmlnaHQgPSAwOwotICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7Ci0g
ICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gMDsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBDbGlwcGluZyByZWN0YW5nbGUgb2YgdGhlIHBsdWctaW47IHRoZSBvcmlnaW4gaXMg
dGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZHJhd2FibGUgb3Igd2luZG93LiAKLSAgICAgICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gbV9ucFdpbmRvdy54ICsgbV9jbGlwUmVjdC54KCk7
Ci0gICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gbV9ucFdpbmRvdy55ICsgbV9jbGlw
UmVjdC55KCk7Ci0gICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX25wV2luZG93
LnggKyBtX2NsaXBSZWN0LngoKSArIG1fY2xpcFJlY3Qud2lkdGgoKTsKLSAgICAgICAgbV9ucFdp
bmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX25wV2luZG93LnkgKyBtX2NsaXBSZWN0LnkoKSArIG1f
Y2xpcFJlY3QuaGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgLy8gRkxBU0ggV09SS0FST1VORDogT25s
eSBzZXQgaW5pdGlhbGx5LiBNdWx0aXBsZSBjYWxscyB0bwotICAgIC8vIHNldE5QV2luZG93KCkg
Y2F1c2UgdGhlIHBsdWdpbiB0byBjcmFzaCBpbiB3aW5kb3dlZCBtb2RlLgotICAgIGlmICghbV9w
bHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENhbGxTZXRXaW5kb3dNb3Jl
VGhhbk9uY2UpIHx8ICFtX2lzV2luZG93ZWQKLSAgICAgICAgfHwgbV9ucFdpbmRvdy53aWR0aCA9
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEpIHx8IG1fbnBXaW5kb3cuaGVpZ2h0ID09IHN0YXRp
Y19jYXN0PHVpbnQzMl90PigtMSkpIHsKLSAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IG1fd2lu
ZG93UmVjdC53aWR0aCgpOwotICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IG1fd2luZG93UmVj
dC5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0g
ICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdp
bmRvdyk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0
Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0KLSAgICBpZiAoIW1faXNXaW5kb3dlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gR3RrWHRCaW4gd2lsbCBjYWxsIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZSwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBpdCBoZXJlLgotICAgIGlmICghbV9uZWVkc1hF
bWJlZCkgewotICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTihwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7Ci0g
ICAgICAgIGd0a194dGJpbl9yZXNpemUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dS
ZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBtX2RlbGF5ZWRBbGxvY2F0aW9uID0gbV93aW5kb3dSZWN0OwotICAgIHVwZGF0
ZVdpZGdldEFsbG9jYXRpb25BbmRDbGlwKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6dXBkYXRl
V2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAoKQotewotICAgIC8vIElmIHRoZSB3aW5kb3cgaGFzIG5v
dCBiZWVuIGVtYmVkZGVkIHlldCAodGhlIHBsdWcgYWRkZWQpLCB3ZSBkZWxheSBzZXR0aW5nIGl0
cyBhbGxvY2F0aW9uIHVudGlsIAotICAgIC8vIHRoYXQgcG9pbnQuIFRoaXMgZml4ZXMgaXNzdWVz
IHdpdGggc29tZSBKYXZhIHBsdWdpbiBpbnN0YW5jZXMgbm90IHJlbmRlcmluZyBpbW1lZGlhdGVs
eS4KLSAgICBpZiAoIW1fcGx1Z0FkZGVkIHx8IG1fZGVsYXllZEFsbG9jYXRpb24uaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCk7Ci0gICAgaWYgKGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkpIHsK
LSAgICAgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0ID0gbV9jbGlwUmVjdDsKLSNpZmRlZiBHVEtf
QVBJX1ZFUlNJT05fMgotICAgICAgICBHZGtSZWdpb24qIGNsaXBSZWdpb24gPSBnZGtfcmVnaW9u
X3JlY3RhbmdsZSgmY2xpcFJlY3QpOwotICAgICAgICBnZGtfd2luZG93X3NoYXBlX2NvbWJpbmVf
cmVnaW9uKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpLCBjbGlwUmVnaW9uLCAwLCAwKTsK
LSAgICAgICAgZ2RrX3JlZ2lvbl9kZXN0cm95KGNsaXBSZWdpb24pOwotI2Vsc2UKLSAgICAgICAg
Y2Fpcm9fcmVnaW9uX3QqIGNsaXBSZWdpb24gPSBjYWlyb19yZWdpb25fY3JlYXRlX3JlY3Rhbmds
ZSgmY2xpcFJlY3QpOwotICAgICAgICBnZGtfd2luZG93X3NoYXBlX2NvbWJpbmVfcmVnaW9uKGd0
a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpLCBjbGlwUmVnaW9uLCAwLCAwKTsKLSAgICAgICAg
Y2Fpcm9fcmVnaW9uX2Rlc3Ryb3koY2xpcFJlZ2lvbik7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAv
LyBUaGUgZ29hbCBpcyB0byB0cnkgdG8gYXZvaWQgY2FsbGluZyBndGtfd2lkZ2V0X3NpemVfYWxs
b2NhdGUgaW4gdGhlIFdlYlZpZXcncwotICAgIC8vIHNpemUtYWxsb2NhdGUgbWV0aG9kLiBJdCBi
bG9ja3MgdGhlIG1haW4gbG9vcCBhbmQgaWYgdGhlIHdpZGdldCBpcyBvZmZzY3JlZW4KLSAgICAv
LyBvciBoYXNuJ3QgbW92ZWQgaXQgaXNuJ3QgcmVxdWlyZWQuCi0KLSAgICAvLyBEb24ndCBkbyBh
bnl0aGluZyBpZiB0aGUgYWxsb2NhdGlvbiBoYXMgbm90IGNoYW5nZWQuCi0gICAgR3RrQWxsb2Nh
dGlvbiBjdXJyZW50QWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdp
ZGdldCwgJmN1cnJlbnRBbGxvY2F0aW9uKTsKLSAgICBpZiAoY3VycmVudEFsbG9jYXRpb24gPT0g
bV9kZWxheWVkQWxsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG9uJ3QgZG8g
YW55dGhpbmcgaWYgYm90aCB0aGUgb2xkIGFuZCB0aGUgbmV3IGFsbG9jYXRpb25zIGFyZSBvdXRz
aWRlIHRoZSBmcmFtZS4KLSAgICBJbnRSZWN0IGN1cnJlbnRBbGxvY2F0aW9uUmVjdChjdXJyZW50
QWxsb2NhdGlvbik7Ci0gICAgY3VycmVudEFsbG9jYXRpb25SZWN0LmludGVyc2VjdChmcmFtZVJl
Y3QoKSk7Ci0gICAgaWYgKGN1cnJlbnRBbGxvY2F0aW9uUmVjdC5pc0VtcHR5KCkgJiYgbV9jbGlw
UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKHdpZGdldCksICJkZWxheWVkLWFsbG9jYXRpb24iLCAmbV9kZWxheWVkQWxsb2Nh
dGlvbik7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2li
bGUpCi17Ci0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKLQotICAgIGlm
IChpc1NlbGZWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgewotICAgICAgICBp
ZiAodmlzaWJsZSkKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ3RrX3dpZGdldF9oaWRlKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpOwotICAgIH0KLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5k
bGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBvdXRwdXRCdWZmZXIsIHVpbnQzMl90IGZpbGVu
YW1lTGVuZ3RoLCBjb25zdCBjaGFyKiBmaWxlbmFtZUJ1ZmZlcikKLXsKLSAgICAvLyBUaGVyZSBk
b2Vzbid0IHNlZW0gdG8gYmUgYW55IGRvY3VtZW50YXRpb24gYWJvdXQgd2hhdCBlbmNvZGluZyB0
aGUgZmlsZW5hbWUKLSAgICAvLyBpcyBpbiwgYnV0IG1vc3QgcG9ydHMgc2VlbSB0byBhc3N1bWUg
VVRGLTggaGVyZSBhbmQgdGhlIHRlc3QgcGx1Z2luIGlzIGRlZmluaXRlbHkKLSAgICAvLyBzZW5k
aW5nIHRoZSBwYXRoIGluIFVURi04IGVuY29kaW5nLgotICAgIENTdHJpbmcgZmlsZW5hbWUoZmls
ZW5hbWVCdWZmZXIsIGZpbGVuYW1lTGVuZ3RoKTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUg
PSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfY29tbWFuZGxpbmVfYXJnKGZpbGVuYW1lLmRhdGEo
KSkpOwotICAgIGlmIChnX2ZpbGVfcXVlcnlfZmlsZV90eXBlKGZpbGUuZ2V0KCksIEdfRklMRV9R
VUVSWV9JTkZPX05PTkUsIDApICE9IEdfRklMRV9UWVBFX1JFR1VMQVIpCi0gICAgICAgIHJldHVy
biBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5m
byA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhmaWxlLmdldCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVf
QVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIDApKTsKLSAgICBpZiAoIWZpbGVJbmZvKQotICAgICAgICByZXR1cm4gTlBFUlJfRklM
RV9OT1RfRk9VTkQ7Ci0KLSAgICBHUmVmUHRyPEdGaWxlSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFt
ID0gYWRvcHRHUmVmKGdfZmlsZV9yZWFkKGZpbGUuZ2V0KCksIDAsIDApKTsKLSAgICBpZiAoIWlu
cHV0U3RyZWFtKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBv
dXRwdXRCdWZmZXIucmVzaXplKGdfZmlsZV9pbmZvX2dldF9zaXplKGZpbGVJbmZvLmdldCgpKSk7
Ci0gICAgZ3NpemUgYnl0ZXNSZWFkID0gMDsKLSAgICBpZiAoIWdfaW5wdXRfc3RyZWFtX3JlYWRf
YWxsKEdfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlci5kYXRhKCksIG91dHB1dEJ1ZmZlci5zaXplKCks
ICZieXRlc1JlYWQsIDAsIDApKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7
Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxh
dGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5Q
RXJyb3IqIHJlc3VsdCkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5W
VG9vbGtpdDoKLSAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gMjsKLSAg
ICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKLSAgICAgICAgKnN0YXRpY19jYXN0PE5Q
Qm9vbCo+KHZhbHVlKSA9IHRydWU7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJv
b2w6Ci0gICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwotICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
Y2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29s
Kj4odmFsdWUpID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKLXsKLSAgICBzd2l0Y2gg
KHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5WeERpc3BsYXk6Ci0gICAgICAgIGlmIChtX25lZWRz
WEVtYmVkKQotICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gKHZvaWQgKilHREtfRElTUExB
WV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gKHZvaWQgKilHVEtfWFRCSU4ocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0ZGlzcGxheTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJS
X05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVnh0QXBwQ29u
dGV4dDoKLSAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7Ci0gICAgICAgICAgICAqKHZvaWQg
KiopdmFsdWUgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCAoR1RLX1hUQklOKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGRpc3BsYXkpOwotCi0gICAgICAgICAgICAq
cmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgKnJl
c3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
ICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7Ci0gICAgICAgICAgICBHZGtXaW5kb3cqIGdk
a1dpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhv
c3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOwotICAgICAgICAgICAgR2RrV2luZG93
KiB0b3BsZXZlbFdpbmRvdyA9IGdka193aW5kb3dfZ2V0X3RvcGxldmVsKGdka1dpbmRvdyk7Ci0g
ICAgICAgICAgICBpZiAoIXRvcGxldmVsV2luZG93KSB7Ci0gICAgICAgICAgICAgICAgKnJlc3Vs
dCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAqc3RhdGljX2Nhc3Q8V2luZG93Kj4odmFsdWUpID0g
R0RLX1dJTkRPV19YV0lORE9XKHRvcGxldmVsV2luZG93KTsKLSAgICAgICAgICAgICpyZXN1bHQg
PSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFBs
dWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYg
KG1faXNXaW5kb3dlZCkgewotICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtf
V0lER0VUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
bnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmll
dzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQotewotICAgIGlmICghcmVjdCkgewotICAg
ICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRSZWN0
IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3Qt
PmJvdHRvbSAtIHJlY3QtPnRvcCk7Ci0gICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0
KHIpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pCi17
Ci0gICAgLy8gVE9ETzogb3B0aW1pemUKLSAgICBpbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQotewotICAgIGlmIChtX2lzV2luZG93ZWQpCi0gICAgICAg
IGd0a193aWRnZXRfcXVldWVfZHJhdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhv
c3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOwotfQotCi1zdGF0aWMgRGlzcGxheSog
Z2V0UGx1Z2luRGlzcGxheSgpCi17Ci0gICAgLy8gVGhlIHBsdWdpbiB0b29sa2l0IG1pZ2h0IGhh
dmUgYSBkaWZmZXJlbnQgWCBjb25uZWN0aW9uIG9wZW4uICBTaW5jZSB3ZSdyZQotICAgIC8vIGEg
Z2RrL2d0ayBhcHAsIHdlJ2xsIChwcm9iYWJseT8pIGhhdmUgdGhlIHNhbWUgWCBjb25uZWN0aW9u
IGFzIGFueSBnZGstYmFzZWQKLSAgICAvLyBwbHVnaW5zLCBzbyB3ZSBjYW4gcmV0dXJuIHRoYXQu
ICBXZSBtaWdodCB3YW50IHRvIGFkZCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgaGVyZQotICAgIC8v
IGxhdGVyLgotCi0gICAgcmV0dXJuIEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dl
dF9kZWZhdWx0KCkpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRWaXN1YWxBbmRDb2xvcm1hcChpbnQg
ZGVwdGgsIFZpc3VhbCoqIHZpc3VhbCwgQ29sb3JtYXAqIGNvbG9ybWFwKQotewotICAgICp2aXN1
YWwgPSAwOwotICAgICpjb2xvcm1hcCA9IDA7Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RL
X0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgaW50IHJt
YWosIHJtaW47Ci0gICAgaWYgKGRlcHRoID09IDMyICYmICghWFJlbmRlclF1ZXJ5VmVyc2lvbihk
aXNwbGF5LCAmcm1haiwgJnJtaW4pIHx8IChybWFqID09IDAgJiYgcm1pbiA8IDUpKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgWFZpc3VhbEluZm8gdGVtcGw7Ci0gICAgdGVtcGwuc2NyZWVuICA9
IGdka19zY3JlZW5fZ2V0X251bWJlcihnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOwotICAgIHRl
bXBsLmRlcHRoICAgPSBkZXB0aDsKLSAgICB0ZW1wbC5jX2NsYXNzID0gVHJ1ZUNvbG9yOwotICAg
IGludCBuVmlzdWFsczsKLSAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbyA9IFhHZXRWaXN1YWxJ
bmZvKGRpc3BsYXksIFZpc3VhbFNjcmVlbk1hc2sgfCBWaXN1YWxEZXB0aE1hc2sgfCBWaXN1YWxD
bGFzc01hc2ssICZ0ZW1wbCwgJm5WaXN1YWxzKTsKLQotICAgIGlmICghblZpc3VhbHMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChkZXB0aCA9PSAzMikgewotICAgICAgICBmb3IgKGludCBp
ZHggPSAwOyBpZHggPCBuVmlzdWFsczsgKytpZHgpIHsKLSAgICAgICAgICAgIFhSZW5kZXJQaWN0
Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChkaXNwbGF5LCB2aXN1YWxJ
bmZvW2lkeF0udmlzdWFsKTsKLSAgICAgICAgICAgIGlmIChmb3JtYXQtPnR5cGUgPT0gUGljdFR5
cGVEaXJlY3QgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrKSB7Ci0gICAgICAgICAgICAgICAg
ICp2aXN1YWwgPSB2aXN1YWxJbmZvW2lkeF0udmlzdWFsOwotICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgKnZpc3Vh
bCA9IHZpc3VhbEluZm9bMF0udmlzdWFsOwotCi0gICAgWEZyZWUodmlzdWFsSW5mbyk7Ci0KLSAg
ICBpZiAoKnZpc3VhbCkKLSAgICAgICAgKmNvbG9ybWFwID0gWENyZWF0ZUNvbG9ybWFwKGRpc3Bs
YXksIEdES19ST09UX1dJTkRPVygpLCAqdmlzdWFsLCBBbGxvY05vbmUpOwotfQotCi1nYm9vbGVh
biBQbHVnaW5WaWV3OjpwbHVnUmVtb3ZlZENhbGxiYWNrKEd0a1NvY2tldCogc29ja2V0LCBQbHVn
aW5WaWV3KiB2aWV3KQotewotICAgIHZpZXctPm1fcGx1Z0FkZGVkID0gZmFsc2U7Ci0gICAgcmV0
dXJuIFRSVUU7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGx1Z0FkZGVkQ2FsbGJhY2soR3RrU29j
a2V0KiBzb2NrZXQsIFBsdWdpblZpZXcqIHZpZXcpCi17Ci0gICAgQVNTRVJUKHNvY2tldCk7Ci0g
ICAgQVNTRVJUKHZpZXcpOwotICAgIHZpZXctPm1fcGx1Z0FkZGVkID0gdHJ1ZTsKLSAgICB2aWV3
LT51cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOwotfQotCi1ib29sIFBsdWdpblZpZXc6
OnBsYXRmb3JtU3RhcnQoKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAgQVNTRVJU
KG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7Ci0KLSAgICBpZiAo
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7Ci0gICAgICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgICAg
ICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hF
bWJlZCk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgICAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICB9Ci0KLSAgICBpZiAobV9pc1dpbmRv
d2VkKSB7Ci0gICAgICAgIEd0a1dpZGdldCogcGFnZUNsaWVudCA9IG1fcGFyZW50RnJhbWUtPnZp
ZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLSAgICAgICAgaWYgKG1f
bmVlZHNYRW1iZWQpIHsKLSAgICAgICAgICAgIC8vIElmIG91ciBwYXJlbnQgaXMgbm90IGFuY2hv
cmVkIHRoZSBzdGFydHVwIHByb2Nlc3Mgd2lsbAotICAgICAgICAgICAgLy8gZmFpbCBtaXNlcmFi
bHkgZm9yIFhFbWJlZCBwbHVnaW5zIGEgYml0IGxhdGVyIG9uIHdoZW4KLSAgICAgICAgICAgIC8v
IHdlIHRyeSB0byBnZXQgdGhlIElEIG9mIG91ciB3aW5kb3cgKHNpbmNlIHJlYWxpemUgd2lsbAot
ICAgICAgICAgICAgLy8gZmFpbCksIHNvIGxldCdzIGp1c3QgYWJvcnQgaGVyZS4KLSAgICAgICAg
ICAgIGlmICghZ3RrX3dpZGdldF9nZXRfcGFyZW50KHBhZ2VDbGllbnQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgbV9wbHVnQWRkZWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a19zb2NrZXRfbmV3KCkpOwotICAgICAgICAg
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihwYWdlQ2xpZW50KSwgcGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSk7Ci0gICAgICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCksICJwbHVnLWFkZGVkIiwgR19DQUxMQkFDSyhQbHVnaW5WaWV3OjpwbHVnQWRk
ZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLCAicGx1Zy1yZW1vdmVkIiwgR19DQUxMQkFDSyhQbHVnaW5WaWV3Ojpw
bHVnUmVtb3ZlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
c2V0UGxhdGZvcm1XaWRnZXQoZ3RrX3h0YmluX25ldyhwYWdlQ2xpZW50LCAwKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7Ci0gICAgICAgIG1fcGx1Z2luRGlz
cGxheSA9IGdldFBsdWdpbkRpc3BsYXkoKTsKLSAgICB9Ci0KLSAgICBzaG93KCk7Ci0KLSAgICAg
ICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFj
a1N0cnVjdCgpOwotICAgICAgICB3cy0+dHlwZSA9IDA7Ci0KLSAgICBpZiAobV9pc1dpbmRvd2Vk
KSB7Ci0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKLSAgICAg
ICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKLSAgICAgICAgICAgIEd0a1dpZGdldCogd2lkZ2V0ID0g
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfcmVhbGl6ZSh3
aWRnZXQpOwotICAgICAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihndGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpKSk7Ci0gICAgICAgICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dp
bmRvdyh3aWRnZXQpOwotICAgICAgICAgICAgd3MtPmRpc3BsYXkgPSBHREtfV0lORE9XX1hESVNQ
TEFZKHdpbmRvdyk7Ci0gICAgICAgICAgICB3cy0+dmlzdWFsID0gR0RLX1ZJU1VBTF9YVklTVUFM
KGdka193aW5kb3dfZ2V0X3Zpc3VhbCh3aW5kb3cpKTsKLSAgICAgICAgICAgIHdzLT5kZXB0aCA9
IGdka192aXN1YWxfZ2V0X2RlcHRoKGdka193aW5kb3dfZ2V0X3Zpc3VhbCh3aW5kb3cpKTsKLSAg
ICAgICAgICAgIHdzLT5jb2xvcm1hcCA9IFhDcmVhdGVDb2xvcm1hcCh3cy0+ZGlzcGxheSwgR0RL
X1JPT1RfV0lORE9XKCksIHdzLT52aXN1YWwsIEFsbG9jTm9uZSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KChHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0d2luZG93KSk7Ci0gICAgICAg
ICAgICB3cy0+ZGlzcGxheSA9IEdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+eHRk
aXNwbGF5OwotICAgICAgICAgICAgd3MtPnZpc3VhbCA9IEdUS19YVEJJTihwbGF0Zm9ybVBsdWdp
bldpZGdldCgpKS0+eHRjbGllbnQueHR2aXN1YWw7Ci0gICAgICAgICAgICB3cy0+ZGVwdGggPSBH
VEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0ZGVwdGg7Ci0gICAg
ICAgICAgICB3cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkt
Pnh0Y2xpZW50Lnh0Y29sb3JtYXA7Ci0gICAgICAgIH0KLSAgICAgICAgWEZsdXNoICh3cy0+ZGlz
cGxheSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dU
eXBlRHJhd2FibGU7Ci0gICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/
Ci0KLSAgICAgICAgR2RrU2NyZWVuKiBnc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgp
OwotICAgICAgICBHZGtWaXN1YWwqIGd2aXN1YWwgPSBnZGtfc2NyZWVuX2dldF9zeXN0ZW1fdmlz
dWFsKGdzY3JlZW4pOwotCi0gICAgICAgIGlmIChnZGtfdmlzdWFsX2dldF9kZXB0aChndmlzdWFs
KSA9PSAzMiB8fCAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVxdWly
ZXNEZWZhdWx0U2NyZWVuRGVwdGgpKSB7Ci0gICAgICAgICAgICBnZXRWaXN1YWxBbmRDb2xvcm1h
cCgzMiwgJm1fdmlzdWFsLCAmbV9jb2xvcm1hcCk7Ci0gICAgICAgICAgICB3cy0+ZGVwdGggPSAz
MjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV92aXN1YWwpIHsKLSAgICAgICAgICAgIGdl
dFZpc3VhbEFuZENvbG9ybWFwKGdka192aXN1YWxfZ2V0X2RlcHRoKGd2aXN1YWwpLCAmbV92aXN1
YWwsICZtX2NvbG9ybWFwKTsKLSAgICAgICAgICAgIHdzLT5kZXB0aCA9IGdka192aXN1YWxfZ2V0
X2RlcHRoKGd2aXN1YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgd3MtPmRpc3BsYXkgPSBHREtf
RElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICAgICAgd3Mt
PnZpc3VhbCA9IG1fdmlzdWFsOwotICAgICAgICB3cy0+Y29sb3JtYXAgPSBtX2NvbG9ybWFwOwot
Ci0gICAgICAgIG1fbnBXaW5kb3cueCA9IDA7Ci0gICAgICAgIG1fbnBXaW5kb3cueSA9IDA7Ci0g
ICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsKLSAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQg
PSAtMTsKLSAgICB9Ci0KLSAgICBtX25wV2luZG93LndzX2luZm8gPSB3czsKLQotICAgIC8vIFRP
RE8gcmVtb3ZlIGluIGZhdm9yIG9mIG51bGwgZXZlbnRzLCBsaWtlIG1hYyBwb3J0PwotICAgIGlm
ICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRX
aW5kb3dDYWxsKSkpCi0gICAgICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOyAvLyB3YXM6IHNldE5Q
V2luZG93SWZOZWVkZWQoKSwgYnV0IHRoaXMgZG9lc24ndCBwcm9kdWNlIDB4MCByZWN0cyBhdCBm
aXJzdCBnbwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGxhdGZv
cm1EZXN0cm95KCkKLXsKLSAgICBpZiAobV9kcmF3YWJsZSkgewotICAgICAgICBYRnJlZVBpeG1h
cChHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKSwgbV9kcmF3
YWJsZSk7Ci0gICAgICAgIG1fZHJhd2FibGUgPSAwOwotICAgIH0KLQotICAgIEd0a1dpZGdldCog
d2lkZ2V0ID0gcGxhdGZvcm1XaWRnZXQoKTsKLSAgICBpZiAod2lkZ2V0KSB7Ci0gICAgICAgIEd0
a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50KHdpZGdldCk7Ci0gICAgICAg
IEFTU0VSVChwYXJlbnQpOwotICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJ
TkVSKHBhcmVudCksIHdpZGdldCk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3gxMS9QbHVnaW5WaWV3WDExLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMveDExL1BsdWdpblZpZXdYMTEuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNmOGE5Y2I5NDk2MjhlOGU0NzY2OGY5ZWE0MjAxZGYxYjc5NTg3OWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3gxMS9QbHVnaW5WaWV3WDExLmNwcApAQCAt
MCwwICsxLDk3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgS2Fr
YWksIEluYy4gPGJyaWFuQGtha2FpLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEg
Uy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSAi
QnJpZGdlSlNDLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSG9z
dFdpbmRvdy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5o
IgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1Z2luTWFpblRo
cmVhZFNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJS
ZW5kZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTcGF0aWFs
TmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVu
dGltZV9yb290LmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0xvY2suaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJHUmVmUHRy
R3RrLmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorCisjaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKKyNpbmNsdWRlIDxnZGtjb25maWcuaD4KKyNlbmRpZgorCisjZGVmaW5lIFN0cmluZyBY
dFN0cmluZ1R5cGUKKyNpbmNsdWRlICJndGsyeHRiaW4uaCIKKyNpbmNsdWRlIDxnZGsvZ2RreC5o
PgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyNpbmNsdWRlICJT
Y3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEVj
b3JlX1guaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIlJlZlB0ckNh
aXJvLmgiCisjZGVmaW5lIEJvb2wgaW50IC8vIHRoaXMgZ290IHVuZGVmaW5lZCBzb21ld2hlcmUK
KyNkZWZpbmUgU3RhdHVzIGludCAvLyBkaXR0bworI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hy
ZW5kZXIuaD4KKyNpbmNsdWRlIDxjYWlyby14bGliLmg+CisKK3VzaW5nIEpTQzo6RXhlY1N0YXRl
OwordXNpbmcgSlNDOjpJbnRlcnByZXRlcjsKK3VzaW5nIEpTQzo6SlNMb2NrOwordXNpbmcgSlND
OjpKU09iamVjdDsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitib29sIFBsdWdpblZpZXc6OmRpc3Bh
dGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKK3sKKyAgICAvLyBzYW5pdHkgY2hlY2sKKyAgICBp
ZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgYm9vbCBhY2NlcHRl
ZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsK
KworICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJl
bnRQbHVnaW5WaWV3KDApOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKworc3RhdGljIFdpbmRv
dyBnZXRSb290V2luZG93KEZyYW1lKiBwYXJlbnRGcmFtZSkKK3sKKyNpZiBQTEFURk9STShHVEsp
CisgICAgR3RrV2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSBwYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0
V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIEdka1NjcmVlbiogZ3NjcmVlbiA9
IGd0a193aWRnZXRfZ2V0X3NjcmVlbihwYXJlbnRXaWRnZXQpOworICAgIHJldHVybiBHREtfV0lO
RE9XX1hXSU5ET1coZ2RrX3NjcmVlbl9nZXRfcm9vdF93aW5kb3coZ3NjcmVlbikpOworI2VsaWYg
UExBVEZPUk0oRUZMKQorICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChwYXJl
bnRGcmFtZS0+dmlldygpLT5ldmFzT2JqZWN0KCkpOworICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZh
cyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdpbmRvdz4oZWNvcmVfZXZhc193aW5kb3dfZ2V0KGVjb3JlRXZhcykpOworI2Vsc2UKKyAg
ICByZXR1cm4gTm9uZTsKKyNlbmRpZgorfQorCitzdGF0aWMgRGlzcGxheSogZ2V0UGx1Z2luRGlz
cGxheSgpCit7CisgICAgLy8gVGhlIHBsdWdpbiB0b29sa2l0IG1pZ2h0IGhhdmUgYSBkaWZmZXJl
bnQgWCBjb25uZWN0aW9uIG9wZW4uIFNpbmNlIHdlJ3JlCisgICAgLy8gYSBnZGsvZ3RrIGFwcCwg
d2UnbGwgKHByb2JhYmx5PykgaGF2ZSB0aGUgc2FtZSBYIGNvbm5lY3Rpb24gYXMgYW55IGdkay1i
YXNlZAorICAgIC8vIHBsdWdpbnMsIHNvIHdlIGNhbiByZXR1cm4gdGhhdC4gV2UgbWlnaHQgd2Fu
dCB0byBhZGQgb3RoZXIgaW1wbGVtZW50YXRpb25zIGhlcmUKKyAgICAvLyBsYXRlci4KKworI2lm
IFBMQVRGT1JNKEdUSykKKyAgICByZXR1cm4gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3Bs
YXlfZ2V0X2RlZmF1bHQoKSk7CisjZWxzZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxEaXNwbGF5
Kj4oZWNvcmVfeF9kaXNwbGF5X2dldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFBsdWdpblZpZXc6
OnVwZGF0ZVBsdWdpbldpZGdldCgpCit7CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKTsKKworICAgIEludFJlY3Qgb2xk
V2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9j
bGlwUmVjdDsKKworICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50
c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXplKCkpOwor
ICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3QubW92ZSgt
bV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYgKG1fd2luZG93
UmVjdCA9PSBvbGRXaW5kb3dSZWN0ICYmIG1fY2xpcFJlY3QgPT0gb2xkQ2xpcFJlY3QpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNj
ZXNzZnVsbHkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9pc1dpbmRvd2VkICYmICFt
X3dpbmRvd1JlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIERpc3BsYXkqIGRpc3BsYXkgPSBnZXRQ
bHVnaW5EaXNwbGF5KCk7CisgICAgICAgIGlmIChtX2RyYXdhYmxlKQorICAgICAgICAgICAgWEZy
ZWVQaXhtYXAoZGlzcGxheSwgbV9kcmF3YWJsZSk7CisKKyAgICAgICAgbV9kcmF3YWJsZSA9IFhD
cmVhdGVQaXhtYXAoZGlzcGxheSwgZ2V0Um9vdFdpbmRvdyhtX3BhcmVudEZyYW1lLmdldCgpKSwK
KyAgICAgICAgICAgIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCks
CisgICAgICAgICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3Nf
aW5mbyktPmRlcHRoKTsKKyAgICAgICAgWFN5bmMoZGlzcGxheSwgZmFsc2UpOyAvLyBtYWtlIHN1
cmUgdGhhdCB0aGUgc2VydmVyIGtub3dzIGFib3V0IHRoZSBEcmF3YWJsZQorICAgIH0KKworICAg
IHNldE5QV2luZG93SWZOZWVkZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhi
b29sIGZvY3VzZWQpCit7CisgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gcGxh
dGZvcm1XaWRnZXQoKSk7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlmIChmb2N1c2VkICYmIHBs
YXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhwbGF0Zm9ybVdp
ZGdldCgpKTsKKyNlbmRpZgorICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkgPT0gcGxhdGZvcm1XaWRnZXQoKSk7CisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkg
PT0gcGxhdGZvcm1XaWRnZXQoKSk7CisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVz
TG9hZGVkU3VjY2Vzc2Z1bGx5KSB7CisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29u
dGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXROUFdpbmRvd0lm
TmVlZGVkKCk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsKKworICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBnZXRQbHVnaW5EaXNwbGF5KCk7CisgICAgY29uc3QgYm9vbCBzeW5jWCA9IG1fcGx1Z2lu
RGlzcGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0gZGlzcGxheTsKKworICAgIEludFJlY3QgZXhw
b3NlZFJlY3QocmVjdCk7CisgICAgZXhwb3NlZFJlY3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsK
KyAgICBleHBvc2VkUmVjdC5tb3ZlKC1mcmFtZVJlY3QoKS54KCksIC1mcmFtZVJlY3QoKS55KCkp
OworCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZHJhd2FibGVTdXJmYWNlID0gYWRvcHRS
ZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShkaXNwbGF5LAorICAgICAgICBtX2RyYXdhYmxl
LAorICAgICAgICBtX3Zpc3VhbCwKKyAgICAgICAgbV93aW5kb3dSZWN0LndpZHRoKCksCisgICAg
ICAgIG1fd2luZG93UmVjdC5oZWlnaHQoKSkpOworCisgICAgaWYgKG1faXNUcmFuc3BhcmVudCkg
eworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgMzIgYml0IGRyYXdhYmxlIGFuZCB0aGUgcGx1Z2lu
IHdhbnRzIHRyYW5zcGFyZW5jeSwKKyAgICAgICAgLy8gd2UnbGwgY2xlYXIgdGhlIGV4cG9zZWQg
YXJlYSB0byB0cmFuc3BhcmVudCBmaXJzdC4gT3RoZXJ3aXNlLAorICAgICAgICAvLyB3ZSdkIGVu
ZCB1cCB3aXRoIGp1bmsgaW4gdGhlcmUgZnJvbSB0aGUgbGFzdCBwYWludCwgb3IsIHdvcnNlLAor
ICAgICAgICAvLyB1bmluaXRpYWxpemVkIGRhdGEuCisgICAgICAgIFJlZlB0cjxjYWlyb190PiBj
ciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShkcmF3YWJsZVN1cmZhY2UuZ2V0KCkpKTsKKworICAg
ICAgICBpZiAoIShjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KGRyYXdhYmxlU3VyZmFjZS5nZXQo
KSkgJiBDQUlST19DT05URU5UX0FMUEhBKSkgeworICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBm
YWtlIGl0IHdoZW4gd2UgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIG9uIG91cgorICAgICAg
ICAgICAgLy8gcGl4bWFwLiBJZiB0aGF0J3Mgbm90IHBvc3NpYmxlLCBhdCBsZWFzdCBjbGVhciB0
aGUgd2luZG93IHRvCisgICAgICAgICAgICAvLyBhdm9pZCBkcmF3aW5nIGFydGlmYWN0cy4KKwor
ICAgICAgICAgICAgLy8gVGhpcyBXb3VsZCBub3Qgd29yayB3aXRob3V0IGRvdWJsZSBidWZmZXJp
bmcsIGJ1dCB3ZSBhbHdheXMgdXNlIGl0LgorICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9z
dXJmYWNlKGNyLmdldCgpLCBjYWlyb19nZXRfZ3JvdXBfdGFyZ2V0KGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpKSwKKyAgICAgICAgICAgICAgICAtbV93aW5kb3dSZWN0LngoKSwgLW1f
d2luZG93UmVjdC55KCkpOworICAgICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgp
LCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNh
aXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworCisgICAg
ICAgIGNhaXJvX3JlY3RhbmdsZShjci5nZXQoKSwgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVj
dC55KCksIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICAg
ICAgY2Fpcm9fZmlsbChjci5nZXQoKSk7CisgICAgfQorCisgICAgWEV2ZW50IHhldmVudDsKKyAg
ICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOworICAgIFhHcmFwaGljc0V4cG9z
ZUV2ZW50JiBleHBvc2VFdmVudCA9IHhldmVudC54Z3JhcGhpY3NleHBvc2U7CisgICAgZXhwb3Nl
RXZlbnQudHlwZSA9IEdyYXBoaWNzRXhwb3NlOworICAgIGV4cG9zZUV2ZW50LmRpc3BsYXkgPSBk
aXNwbGF5OworICAgIGV4cG9zZUV2ZW50LmRyYXdhYmxlID0gbV9kcmF3YWJsZTsKKyAgICBleHBv
c2VFdmVudC54ID0gZXhwb3NlZFJlY3QueCgpOworICAgIGV4cG9zZUV2ZW50LnkgPSBleHBvc2Vk
UmVjdC55KCk7CisgICAgZXhwb3NlRXZlbnQud2lkdGggPSBleHBvc2VkUmVjdC54KCkgKyBleHBv
c2VkUmVjdC53aWR0aCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyB3aWR0aCBpcyB0aGUgcmln
aHQgaW4gdHJhbnNwYXJlbnQgbW9kZQorICAgIGV4cG9zZUV2ZW50LmhlaWdodCA9IGV4cG9zZWRS
ZWN0LnkoKSArIGV4cG9zZWRSZWN0LmhlaWdodCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyBo
ZWlnaHQgaXMgdGhlIGJvdHRvbSBpbiB0cmFuc3BhcmVudCBtb2RlCisKKyAgICBkaXNwYXRjaE5Q
RXZlbnQoeGV2ZW50KTsKKworICAgIGlmIChzeW5jWCkKKyAgICAgICAgWFN5bmMobV9wbHVnaW5E
aXNwbGF5LCBmYWxzZSk7IC8vIHN5bmMgY2hhbmdlcyBieSBwbHVnaW4KKworICAgIGNhaXJvX3Qq
IGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CisgICAgY2Fpcm9fc2F2ZShj
cik7CisKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIGRyYXdhYmxlU3VyZmFjZS5n
ZXQoKSwgZnJhbWVSZWN0KCkueCgpLCBmcmFtZVJlY3QoKS55KCkpOworCisgICAgY2Fpcm9fcmVj
dGFuZ2xlKGNyLCBmcmFtZVJlY3QoKS54KCkgKyBleHBvc2VkUmVjdC54KCksIGZyYW1lUmVjdCgp
LnkoKSArIGV4cG9zZWRSZWN0LnkoKSwgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3Qu
aGVpZ2h0KCkpOworICAgIGNhaXJvX2NsaXAoY3IpOworCisgICAgaWYgKG1faXNUcmFuc3BhcmVu
dCkKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9PVkVSKTsK
KyAgICBlbHNlCisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1Jf
U09VUkNFKTsKKyAgICBjYWlyb19wYWludChjcik7CisKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsK
K30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQq
IGV2ZW50KQoreworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworCisgICAgaWYg
KCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVs
bHkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFt
ZXMoKS5rZXlkb3duRXZlbnQgJiYgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5dXBF
dmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCB4RXZlbnQ7CisgICAgaW5pdFhF
dmVudCgmeEV2ZW50KTsKKyAgICBHZGtFdmVudEtleSogZ2RrRXZlbnQgPSBldmVudC0+a2V5RXZl
bnQoKS0+Z2RrRXZlbnRLZXkoKTsKKworICAgIHhFdmVudC50eXBlID0gKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgPyAyIDogMzsgLy8gS2V5UHJlc3MvUmVsZWFz
ZSBnZXQgdW5zZXQgc29tZXdoZXJlCisgICAgeEV2ZW50LnhrZXkucm9vdCA9IGdldFJvb3RXaW5k
b3cobV9wYXJlbnRGcmFtZS5nZXQoKSk7CisgICAgeEV2ZW50LnhrZXkuc3Vid2luZG93ID0gMDsg
Ly8gd2UgaGF2ZSBubyBjaGlsZCB3aW5kb3cKKyAgICB4RXZlbnQueGtleS50aW1lID0gZXZlbnQt
PnRpbWVTdGFtcCgpOworICAgIHhFdmVudC54a2V5LnN0YXRlID0gZ2RrRXZlbnQtPnN0YXRlOyAv
LyBHZGtNb2RpZmllclR5cGUgbWlycm9ycyB4bGliIHN0YXRlIG1hc2tzCisgICAgeEV2ZW50Lnhr
ZXkua2V5Y29kZSA9IGdka0V2ZW50LT5oYXJkd2FyZV9rZXljb2RlOworICAgIHhFdmVudC54a2V5
LnNhbWVfc2NyZWVuID0gdHJ1ZTsKKworICAgIC8vIE5PVEU6IEFzIHRoZSBYRXZlbnRzIHNlbnQg
dG8gdGhlIHBsdWctaW4gYXJlIHN5bnRoZXNpemVkIGFuZCB0aGVyZSBpcyBub3QgYSBuYXRpdmUg
d2luZG93CisgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgcGx1Zy1pbiByZWN0YW5nbGUsIHNv
bWUgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIFhFdmVudCBzdHJ1Y3R1cmVzIGFyZSBub3QKKyAgICAv
LyBzZXQgdG8gdGhlaXIgbm9ybWFsIFhzZXJ2ZXIgdmFsdWVzLiBlLmcuIEtleSBldmVudHMgZG9u
J3QgaGF2ZSBhIHBvc2l0aW9uLgorICAgIC8vIHNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZW4vTlBFdmVudAorICAgIHhFdmVudC54a2V5LnggPSAwOworICAgIHhFdmVudC54
a2V5LnkgPSAwOworICAgIHhFdmVudC54a2V5Lnhfcm9vdCA9IDA7CisgICAgeEV2ZW50LnhrZXku
eV9yb290ID0gMDsKKworICAgIGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKKyAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShldmVu
dCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdW5zaWduZWQg
aW5wdXRFdmVudFN0YXRlKE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIHVuc2lnbmVkIHN0YXRl
ID0gMDsKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gQ29udHJv
bE1hc2s7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBTaGlm
dE1hc2s7CisgICAgaWYgKGV2ZW50LT5hbHRLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gTW9kMU1h
c2s7CisgICAgaWYgKGV2ZW50LT5tZXRhS2V5KCkpCisgICAgICAgIHN0YXRlIHw9IE1vZDRNYXNr
OworICAgIHJldHVybiBzdGF0ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojppbml0WEV2ZW50KFhF
dmVudCogeEV2ZW50KQoreworICAgIG1lbXNldCh4RXZlbnQsIDAsIHNpemVvZihYRXZlbnQpKTsK
KworICAgIHhFdmVudC0+eGFueS5zZXJpYWwgPSAwOyAvLyB3ZSBhcmUgdW5hd2FyZSBvZiB0aGUg
bGFzdCByZXF1ZXN0IHByb2Nlc3NlZCBieSBYIFNlcnZlcgorICAgIHhFdmVudC0+eGFueS5zZW5k
X2V2ZW50ID0gZmFsc2U7CisKKyNpZiBQTEFURk9STShHVEspCisgICAgR3RrV2lkZ2V0KiB3aWRn
ZXQgPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xp
ZW50KCk7CisgICAgeEV2ZW50LT54YW55LmRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShn
dGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpZGdldCkpOworI2VuZGlmCisKKyAgICAvLyBNb3ppbGxh
IGFsc28gc2VuZHMgTm9uZSBoZXJlIGZvciB3aW5kb3dsZXNzIHBsdWdpbnMuIFNlZSBuc09iamVj
dEZyYW1lLmNwcCBpbiB0aGUgTW96aWxsYSBzb3VyY2VzLgorICAgIC8vIFRoaXMgbWV0aG9kIGFs
c28gc2V0cyB1cCBGb2N1c0luIGFuZCBGb2N1c091dCBldmVudHMgZm9yIHdpbmRvd3MgcGx1Z2lu
cywgYnV0IE1vemlsbGEgZG9lc24ndAorICAgIC8vIGV2ZW4gc2VuZCB0aGVzZSB0eXBlcyBvZiBl
dmVudHMgdG8gd2luZG93ZWQgcGx1Z2lucy4gSW4gdGhlIGZ1dHVyZSwgaXQgbWF5IGJlIGdvb2Qg
dG8gb25seQorICAgIC8vIHNlbmQgdGhlbSB0byB3aW5kb3dsZXNzIHBsdWdpbnMuCisgICAgeEV2
ZW50LT54YW55LndpbmRvdyA9IE5vbmU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFhCdXR0b25FdmVu
dFNwZWNpZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3Qg
SW50UG9pbnQmIHBvc3Rab29tUG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCit7CisgICAgWEJ1dHRv
bkV2ZW50JiB4YnV0dG9uID0geEV2ZW50LT54YnV0dG9uOworICAgIHhidXR0b24udHlwZSA9IGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ID8gQnV0dG9uUHJlc3Mg
OiBCdXR0b25SZWxlYXNlOworICAgIHhidXR0b24ucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50
RnJhbWUpOworICAgIHhidXR0b24uc3Vid2luZG93ID0gMDsKKyAgICB4YnV0dG9uLnRpbWUgPSBl
dmVudC0+dGltZVN0YW1wKCk7CisgICAgeGJ1dHRvbi54ID0gcG9zdFpvb21Qb3MueCgpOworICAg
IHhidXR0b24ueSA9IHBvc3Rab29tUG9zLnkoKTsKKyAgICB4YnV0dG9uLnhfcm9vdCA9IGV2ZW50
LT5zY3JlZW5YKCk7CisgICAgeGJ1dHRvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOworICAg
IHhidXR0b24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOworICAgIHN3aXRjaCAoZXZl
bnQtPmJ1dHRvbigpKSB7CisgICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAgICAgIHhidXR0b24u
YnV0dG9uID0gQnV0dG9uMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSaWdodEJ1dHRvbjoK
KyAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24zOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIExlZnRCdXR0b246CisgICAgZGVmYXVsdDoKKyAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBC
dXR0b24xOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgeGJ1dHRvbi5zYW1lX3NjcmVlbiA9
IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKFhF
dmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9pbnQmIHBvc3Rab29t
UG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCit7CisgICAgWE1vdGlvbkV2ZW50JiB4bW90aW9uID0g
eEV2ZW50LT54bW90aW9uOworICAgIHhtb3Rpb24udHlwZSA9IE1vdGlvbk5vdGlmeTsKKyAgICB4
bW90aW9uLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKKyAgICB4bW90aW9uLnN1
YndpbmRvdyA9IDA7CisgICAgeG1vdGlvbi50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAg
IHhtb3Rpb24ueCA9IHBvc3Rab29tUG9zLngoKTsKKyAgICB4bW90aW9uLnkgPSBwb3N0Wm9vbVBv
cy55KCk7CisgICAgeG1vdGlvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOworICAgIHhtb3Rp
b24ueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKKyAgICB4bW90aW9uLnN0YXRlID0gaW5wdXRF
dmVudFN0YXRlKGV2ZW50KTsKKyAgICB4bW90aW9uLmlzX2hpbnQgPSBOb3RpZnlOb3JtYWw7Cisg
ICAgeG1vdGlvbi5zYW1lX3NjcmVlbiA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFhDcm9z
c2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50
LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKK3sKKyAg
ICBYQ3Jvc3NpbmdFdmVudCYgeGNyb3NzaW5nID0geEV2ZW50LT54Y3Jvc3Npbmc7CisgICAgeGNy
b3NzaW5nLnR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVu
dCA/IEVudGVyTm90aWZ5IDogTGVhdmVOb3RpZnk7CisgICAgeGNyb3NzaW5nLnJvb3QgPSBnZXRS
b290V2luZG93KHBhcmVudEZyYW1lKTsKKyAgICB4Y3Jvc3Npbmcuc3Vid2luZG93ID0gMDsKKyAg
ICB4Y3Jvc3NpbmcudGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4Y3Jvc3NpbmcueCA9
IHBvc3Rab29tUG9zLnkoKTsKKyAgICB4Y3Jvc3NpbmcueSA9IHBvc3Rab29tUG9zLngoKTsKKyAg
ICB4Y3Jvc3NpbmcueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4Y3Jvc3NpbmcueV9y
b290ID0gZXZlbnQtPnNjcmVlblkoKTsKKyAgICB4Y3Jvc3Npbmcuc3RhdGUgPSBpbnB1dEV2ZW50
U3RhdGUoZXZlbnQpOworICAgIHhjcm9zc2luZy5tb2RlID0gTm90aWZ5Tm9ybWFsOworICAgIHhj
cm9zc2luZy5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOworICAgIHhjcm9zc2luZy5zYW1lX3Nj
cmVlbiA9IHRydWU7CisgICAgeGNyb3NzaW5nLmZvY3VzID0gZmFsc2U7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
blZNKCkpOworCisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+
YnV0dG9uKCkgPT0gUmlnaHRCdXR0b24gJiYgbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBs
dWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVzc01vZGUpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZl
bnQpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisg
ICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRBY3RpdmUodHJ1ZSk7CisgICAg
ICAgIGZvY3VzUGx1Z2luRWxlbWVudCgpOworICAgIH0KKworICAgIE5QRXZlbnQgeEV2ZW50Owor
ICAgIGluaXRYRXZlbnQoJnhFdmVudCk7CisKKyAgICBJbnRQb2ludCBwb3N0Wm9vbVBvcyA9IHJv
dW5kZWRJbnRQb2ludChtX2VsZW1lbnQtPnJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChldmVu
dC0+YWJzb2x1dGVMb2NhdGlvbigpKSk7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2V1cEV2ZW50KQorICAgICAgICBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcygmeEV2
ZW50LCBldmVudCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJhbWUuZ2V0KCkpOworICAgIGVsc2Ug
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQorICAgICAg
ICBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcygmeEV2ZW50LCBldmVudCwgcG9zdFpvb21Q
b3MsIG1fcGFyZW50RnJhbWUuZ2V0KCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2VvdmVyRXZlbnQpIHsKKyAgICAgICAgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0Zp
ZWxkcygmeEV2ZW50LCBldmVudCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJhbWUuZ2V0KCkpOwor
CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAvLyBUaGlzIGlzIGEgd29yay1hcm91bmQgZm9y
IHBsdWdpbnMgd2hpY2ggY2hhbmdlIHRoZSBjdXJzb3IuIFdoZW4gdGhhdCBoYXBwZW5zIHdlCisg
ICAgICAgIC8vIGdldCBvdXQgb2Ygc3luYyB3aXRoIEdESyBzb21laG93LiBSZXNldHRpbmcgdGhl
IGN1cnNvciBoZXJlIHNlZW1zIHRvIGZpeCB0aGUgaXNzdWUuCisgICAgICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQorICAgICAgICAgICAgZ2RrX3dp
bmRvd19zZXRfY3Vyc29yKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3BhcmVudEZyYW1lLT52aWV3
KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpLCAwKTsKKyNlbmRpZgorICAg
IH0gZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KHhFdmVu
dCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCit2b2lkIFBsdWdp
blZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBt
X3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisg
ICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZlbnQu
dHlwZSA9IDk7IC8vIEZvY3VzSW4gZ2V0cyB1bnNldCBzb21ld2hlcmUKKyAgICBldmVudC5tb2Rl
ID0gTm90aWZ5Tm9ybWFsOworICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7CisK
KyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlRm9jdXNPdXRFdmVudCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAh
PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybjsKKworICAg
IFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAgWEZvY3Vz
Q2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZlbnQudHlwZSA9IDEw
OyAvLyBGb2N1c091dCBnZXRzIHVuc2V0IHNvbWV3aGVyZQorICAgIGV2ZW50Lm1vZGUgPSBOb3Rp
ZnlOb3JtYWw7CisgICAgZXZlbnQuZGV0YWlsID0gTm90aWZ5RGV0YWlsTm9uZTsKKworICAgIGRp
c3BhdGNoTlBFdmVudChucEV2ZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQo
U2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CisK
KyAgICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQoreworICAgIGlmICghbV9pc1dpbmRvd2Vk
KQorICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
c2V0TlBXaW5kb3dJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCAhcGFyZW50
KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIElmIHRoZSBwbHVnaW4gZGlkbid0IGxvYWQgc3VjZXNzZnVsbHksIG5vIHBv
aW50IGluIGNhbGxpbmcgc2V0d2luZG93CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1
c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT24gVW5peCwg
b25seSBjYWxsIHBsdWdpbidzIHNldHdpbmRvdyBpZiBpdCdzIGZ1bGwtcGFnZSBvciB3aW5kb3dl
ZAorICAgIGlmIChtX21vZGUgIT0gTlBfRlVMTCAmJiBtX21vZGUgIT0gTlBfRU1CRUQpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIENoZWNrIGlmIHRoZSBwbGF0Zm9ybVBsdWdpbldpZGdldCBz
dGlsbCBleGlzdHMKKyAgICBpZiAobV9pc1dpbmRvd2VkICYmICFwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jbGlwUmVjdC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgLy8gSWYgd2lkdGggb3IgaGVpZ2h0IGFyZSBudWxsLCBzZXQgdGhlIGNsaXBSZWN0
IHRvIG51bGwsCisgICAgICAgIC8vIGluZGljYXRpbmcgdGhhdCB0aGUgcGx1Z2luIGlzIG5vdCB2
aXNpYmxlL3Njcm9sbGVkIG91dC4KKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0g
MDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IDA7CisgICAgICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0
b20gPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENsaXBwaW5nIHJlY3RhbmdsZSBvZiB0
aGUgcGx1Zy1pbjsgdGhlIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBkcmF3
YWJsZSBvciB3aW5kb3cuIAorICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSBtX25w
V2luZG93LnggKyBtX2NsaXBSZWN0LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50
b3AgPSBtX25wV2luZG93LnkgKyBtX2NsaXBSZWN0LnkoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5yaWdodCA9IG1fbnBXaW5kb3cueCArIG1fY2xpcFJlY3QueCgpICsgbV9jbGlwUmVj
dC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fbnBXaW5k
b3cueSArIG1fY2xpcFJlY3QueSgpICsgbV9jbGlwUmVjdC5oZWlnaHQoKTsKKyAgICB9CisKKyAg
ICAvLyBGTEFTSCBXT1JLQVJPVU5EOiBPbmx5IHNldCBpbml0aWFsbHkuIE11bHRpcGxlIGNhbGxz
IHRvCisgICAgLy8gc2V0TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRvIGNyYXNoIGluIHdp
bmRvd2VkIG1vZGUuCisgICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2lu
UXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVUaGFuT25jZSkgfHwgIW1faXNXaW5kb3dlZAorICAg
ICAgICB8fCBtX25wV2luZG93LndpZHRoID09IHN0YXRpY19jYXN0PHVpbnQzMl90PigtMSkgfHwg
bV9ucFdpbmRvdy5oZWlnaHQgPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0xKSkgeworICAgICAg
ICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7CisgICAgICAgIG1fbnBX
aW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOworICAgIH0KKworICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0
d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZh
bHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKworICAgIGlm
ICghbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShHVEspCisg
ICAgLy8gR3RrWHRCaW4gd2lsbCBjYWxsIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSwgc28gd2Ug
ZG9uJ3QgbmVlZCB0byBkbyBpdCBoZXJlLgorICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAg
ICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7CisgICAgICAgIGd0a194
dGJpbl9yZXNpemUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dSZWN0LndpZHRoKCks
IG1fd2luZG93UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X2RlbGF5ZWRBbGxvY2F0aW9uID0gbV93aW5kb3dSZWN0OworICAgIHVwZGF0ZVdpZGdldEFsbG9j
YXRpb25BbmRDbGlwKCk7CisjZW5kaWYKK30KKworI2lmIFBMQVRGT1JNKEdUSykKK3ZvaWQgUGx1
Z2luVmlldzo6dXBkYXRlV2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAoKQoreworICAgIC8vIElmIHRo
ZSB3aW5kb3cgaGFzIG5vdCBiZWVuIGVtYmVkZGVkIHlldCAodGhlIHBsdWcgYWRkZWQpLCB3ZSBk
ZWxheSBzZXR0aW5nIGl0cyBhbGxvY2F0aW9uIHVudGlsIAorICAgIC8vIHRoYXQgcG9pbnQuIFRo
aXMgZml4ZXMgaXNzdWVzIHdpdGggc29tZSBKYXZhIHBsdWdpbiBpbnN0YW5jZXMgbm90IHJlbmRl
cmluZyBpbW1lZGlhdGVseS4KKyAgICBpZiAoIW1fcGx1Z0FkZGVkIHx8IG1fZGVsYXllZEFsbG9j
YXRpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRnZXQqIHdpZGdl
dCA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCk7CisgICAgaWYgKGd0a193aWRnZXRfZ2V0X3JlYWxp
emVkKHdpZGdldCkpIHsKKyAgICAgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0ID0gbV9jbGlwUmVj
dDsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgICAgICBHZGtSZWdpb24qIGNsaXBSZWdp
b24gPSBnZGtfcmVnaW9uX3JlY3RhbmdsZSgmY2xpcFJlY3QpOworICAgICAgICBnZGtfd2luZG93
X3NoYXBlX2NvbWJpbmVfcmVnaW9uKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpLCBjbGlw
UmVnaW9uLCAwLCAwKTsKKyAgICAgICAgZ2RrX3JlZ2lvbl9kZXN0cm95KGNsaXBSZWdpb24pOwor
I2Vsc2UKKyAgICAgICAgY2Fpcm9fcmVnaW9uX3QqIGNsaXBSZWdpb24gPSBjYWlyb19yZWdpb25f
Y3JlYXRlX3JlY3RhbmdsZSgmY2xpcFJlY3QpOworICAgICAgICBnZGtfd2luZG93X3NoYXBlX2Nv
bWJpbmVfcmVnaW9uKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpLCBjbGlwUmVnaW9uLCAw
LCAwKTsKKyAgICAgICAgY2Fpcm9fcmVnaW9uX2Rlc3Ryb3koY2xpcFJlZ2lvbik7CisjZW5kaWYK
KyAgICB9CisKKyAgICAvLyBUaGUgZ29hbCBpcyB0byB0cnkgdG8gYXZvaWQgY2FsbGluZyBndGtf
d2lkZ2V0X3NpemVfYWxsb2NhdGUgaW4gdGhlIFdlYlZpZXcncworICAgIC8vIHNpemUtYWxsb2Nh
dGUgbWV0aG9kLiBJdCBibG9ja3MgdGhlIG1haW4gbG9vcCBhbmQgaWYgdGhlIHdpZGdldCBpcyBv
ZmZzY3JlZW4KKyAgICAvLyBvciBoYXNuJ3QgbW92ZWQgaXQgaXNuJ3QgcmVxdWlyZWQuCisKKyAg
ICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgYWxsb2NhdGlvbiBoYXMgbm90IGNoYW5nZWQu
CisgICAgR3RrQWxsb2NhdGlvbiBjdXJyZW50QWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dl
dF9hbGxvY2F0aW9uKHdpZGdldCwgJmN1cnJlbnRBbGxvY2F0aW9uKTsKKyAgICBpZiAoY3VycmVu
dEFsbG9jYXRpb24gPT0gbV9kZWxheWVkQWxsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgYm90aCB0aGUgb2xkIGFuZCB0aGUgbmV3IGFsbG9j
YXRpb25zIGFyZSBvdXRzaWRlIHRoZSBmcmFtZS4KKyAgICBJbnRSZWN0IGN1cnJlbnRBbGxvY2F0
aW9uUmVjdChjdXJyZW50QWxsb2NhdGlvbik7CisgICAgY3VycmVudEFsbG9jYXRpb25SZWN0Lmlu
dGVyc2VjdChmcmFtZVJlY3QoKSk7CisgICAgaWYgKGN1cnJlbnRBbGxvY2F0aW9uUmVjdC5pc0Vt
cHR5KCkgJiYgbV9jbGlwUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdpZGdldCksICJkZWxheWVkLWFsbG9jYXRpb24iLCAm
bV9kZWxheWVkQWxsb2NhdGlvbik7Cit9CisjZW5kaWYKKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQ
YXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkg
PT0gdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNp
YmxlKHZpc2libGUpOworCisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlmIChpc1NlbGZWaXNpYmxl
KCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgeworICAgICAgICBpZiAodmlzaWJsZSkKKyAg
ICAgICAgICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZ3RrX3dpZGdldF9oaWRlKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpOworICAgIH0KKyNlbmRpZgorfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RS
ZWFkRmlsZShWZWN0b3I8Y2hhcj4mIG91dHB1dEJ1ZmZlciwgdWludDMyX3QgZmlsZW5hbWVMZW5n
dGgsIGNvbnN0IGNoYXIqIGZpbGVuYW1lQnVmZmVyKQoreworICAgIC8vIFRoZXJlIGRvZXNuJ3Qg
c2VlbSB0byBiZSBhbnkgZG9jdW1lbnRhdGlvbiBhYm91dCB3aGF0IGVuY29kaW5nIHRoZSBmaWxl
bmFtZQorICAgIC8vIGlzIGluLCBidXQgbW9zdCBwb3J0cyBzZWVtIHRvIGFzc3VtZSBVVEYtOCBo
ZXJlIGFuZCB0aGUgdGVzdCBwbHVnaW4gaXMgZGVmaW5pdGVseQorICAgIC8vIHNlbmRpbmcgdGhl
IHBhdGggaW4gVVRGLTggZW5jb2RpbmcuCisgICAgQ1N0cmluZyBmaWxlbmFtZShmaWxlbmFtZUJ1
ZmZlciwgZmlsZW5hbWVMZW5ndGgpOworCisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0
R1JlZihnX2ZpbGVfbmV3X2Zvcl9jb21tYW5kbGluZV9hcmcoZmlsZW5hbWUuZGF0YSgpKSk7Cisg
ICAgaWYgKGdfZmlsZV9xdWVyeV9maWxlX3R5cGUoZmlsZS5nZXQoKSwgR19GSUxFX1FVRVJZX0lO
Rk9fTk9ORSwgMCkgIT0gR19GSUxFX1RZUEVfUkVHVUxBUikKKyAgICAgICAgcmV0dXJuIE5QRVJS
X0ZJTEVfTk9UX0ZPVU5EOworCisgICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRv
cHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKGZpbGUuZ2V0KCksCisgICAgICAgIEdfRklMRV9BVFRS
SUJVVEVfU1RBTkRBUkRfU0laRSwgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwgMCwgMCkpOworCisg
ICAgaWYgKCFmaWxlSW5mbykKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwor
CisgICAgR1JlZlB0cjxHRmlsZUlucHV0U3RyZWFtPiBpbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihn
X2ZpbGVfcmVhZChmaWxlLmdldCgpLCAwLCAwKSk7CisgICAgaWYgKCFpbnB1dFN0cmVhbSkKKyAg
ICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgb3V0cHV0QnVmZmVyLnJl
c2l6ZShnX2ZpbGVfaW5mb19nZXRfc2l6ZShmaWxlSW5mby5nZXQoKSkpOworICAgIGdzaXplIGJ5
dGVzUmVhZCA9IDA7CisgICAgaWYgKCFnX2lucHV0X3N0cmVhbV9yZWFkX2FsbChHX0lOUFVUX1NU
UkVBTShpbnB1dFN0cmVhbS5nZXQoKSksIG91dHB1dEJ1ZmZlci5kYXRhKCksIG91dHB1dEJ1ZmZl
ci5zaXplKCksICZieXRlc1JlYWQsIDAsIDApKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9O
T1RfRk9VTkQ7CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK2Jvb2wgUGx1Z2lu
Vmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAg
Y2FzZSBOUE5WVG9vbGtpdDoKKyNpZiBQTEFURk9STShFRkwpCisgICAgICAgICpzdGF0aWNfY2Fz
dDx1aW50MzJfdCo+KHZhbHVlKSA9IDA7CisjZWxzZQorICAgICAgICAqc3RhdGljX2Nhc3Q8dWlu
dDMyX3QqPih2YWx1ZSkgPSAyOworI2VuZGlmCisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19F
UlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJl
ZEJvb2w6CisjaWYgUExBVEZPUk0oRUZMKQorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4o
dmFsdWUpID0gZmFsc2U7CisjZWxzZQorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFs
dWUpID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Cisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29s
OgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyAgICAgICAg
KnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNh
c2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+
KHZhbHVlKSA9IHRydWU7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCit7CisgICAgc3dpdGNoICh2
YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVnhEaXNwbGF5OgorICAgICAgICBpZiAobV9uZWVkc1hF
bWJlZCkKKyAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9ICh2b2lkICopZ2V0UGx1Z2luRGlz
cGxheSgpOworICAgICAgICBlbHNlCisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAgICAgKih2
b2lkICoqKXZhbHVlID0gKHZvaWQgKilHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkt
Pnh0Y2xpZW50Lnh0ZGlzcGxheTsKKyNlbHNlCisgICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUg
PSAodm9pZCAqKWdldFBsdWdpbkRpc3BsYXkoKTsKKyNlbmRpZgorICAgICAgICAqcmVzdWx0ID0g
TlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WeHRB
cHBDb250ZXh0OgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVk
KSB7CisgICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9u
Q29udGV4dChHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0ZGlz
cGxheSk7CisKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAg
fSBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9S
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7
CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBHZGtXaW5kb3cqIGdka1dpbmRvdyA9IGd0a193
aWRnZXRfZ2V0X3dpbmRvdyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCkpOworICAgICAgICBHZGtXaW5kb3cqIHRvcGxldmVsV2luZG93ID0g
Z2RrX3dpbmRvd19nZXRfdG9wbGV2ZWwoZ2RrV2luZG93KTsKKyAgICAgICAgaWYgKCF0b3BsZXZl
bFdpbmRvdykgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAqc3RhdGljX2Nhc3Q8
V2luZG93Kj4odmFsdWUpID0gR0RLX1dJTkRPV19YV0lORE9XKHRvcGxldmVsV2luZG93KTsKKyAg
ICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworI2Vsc2UKKyAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyNpZiBQTEFU
Rk9STShHVEspCisgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQo
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOworfQorCit2b2lkIFBsdWdpblZp
ZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAg
ICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVj
dCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0
LT5ib3R0b20gLSByZWN0LT50b3ApOworICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVj
dChyKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKQor
eworICAgIC8vIFRPRE86IG9wdGltaXplCisgICAgaW52YWxpZGF0ZSgpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyNpZiBQTEFURk9STShHVEspCisgICAgaWYgKG1f
aXNXaW5kb3dlZCkKKyAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KG1fcGFy
ZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7Cisj
ZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7CisjZW5kaWYKK30KKworI2lmIFBMQVRGT1JNKEdU
SykKK3N0YXRpYyB2b2lkIGdldFZpc3VhbEFuZENvbG9ybWFwKGludCBkZXB0aCwgVmlzdWFsKiog
dmlzdWFsLCBDb2xvcm1hcCogY29sb3JtYXApCit7CisgICAgKnZpc3VhbCA9IDA7CisgICAgKmNv
bG9ybWFwID0gMDsKKworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBnZXRQbHVnaW5EaXNwbGF5KCk7
CisgICAgaW50IHJtYWosIHJtaW47CisgICAgaWYgKGRlcHRoID09IDMyICYmICghWFJlbmRlclF1
ZXJ5VmVyc2lvbihkaXNwbGF5LCAmcm1haiwgJnJtaW4pIHx8ICghcm1haiAmJiBybWluIDwgNSkp
KQorICAgICAgICByZXR1cm47CisKKyAgICBYVmlzdWFsSW5mbyB0ZW1wbDsKKyAgICB0ZW1wbC5z
Y3JlZW4gID0gZ2RrX3NjcmVlbl9nZXRfbnVtYmVyKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7
CisgICAgdGVtcGwuZGVwdGggICA9IGRlcHRoOworICAgIHRlbXBsLmNfY2xhc3MgPSBUcnVlQ29s
b3I7CisgICAgaW50IG5WaXN1YWxzOworICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvID0gWEdl
dFZpc3VhbEluZm8oZGlzcGxheSwgVmlzdWFsU2NyZWVuTWFzayB8IFZpc3VhbERlcHRoTWFzayB8
IFZpc3VhbENsYXNzTWFzaywgJnRlbXBsLCAmblZpc3VhbHMpOworCisgICAgaWYgKCFuVmlzdWFs
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRlcHRoID09IDMyKSB7CisgICAgICAgIGZv
ciAoaW50IGlkeCA9IDA7IGlkeCA8IG5WaXN1YWxzOyArK2lkeCkgeworICAgICAgICAgICAgWFJl
bmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRpc3BsYXks
IHZpc3VhbEluZm9baWR4XS52aXN1YWwpOworICAgICAgICAgICAgaWYgKGZvcm1hdC0+dHlwZSA9
PSBQaWN0VHlwZURpcmVjdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2spIHsKKyAgICAgICAg
ICAgICAgICAqdmlzdWFsID0gdmlzdWFsSW5mb1tpZHhdLnZpc3VhbDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICAq
dmlzdWFsID0gdmlzdWFsSW5mb1swXS52aXN1YWw7CisKKyAgICBYRnJlZSh2aXN1YWxJbmZvKTsK
KworICAgIGlmICgqdmlzdWFsKQorICAgICAgICAqY29sb3JtYXAgPSBYQ3JlYXRlQ29sb3JtYXAo
ZGlzcGxheSwgR0RLX1JPT1RfV0lORE9XKCksICp2aXN1YWwsIEFsbG9jTm9uZSk7Cit9CisKK2di
b29sZWFuIFBsdWdpblZpZXc6OnBsdWdSZW1vdmVkQ2FsbGJhY2soR3RrU29ja2V0KiBzb2NrZXQs
IFBsdWdpblZpZXcqIHZpZXcpCit7CisgICAgdmlldy0+bV9wbHVnQWRkZWQgPSBmYWxzZTsKKyAg
ICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwbHVnQWRkZWRDYWxsYmFjayhH
dGtTb2NrZXQqIHNvY2tldCwgUGx1Z2luVmlldyogdmlldykKK3sKKyAgICBBU1NFUlQoc29ja2V0
KTsKKyAgICBBU1NFUlQodmlldyk7CisgICAgdmlldy0+bV9wbHVnQWRkZWQgPSB0cnVlOworICAg
IHZpZXctPnVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRDbGlwKCk7Cit9CisjZW5kaWYKKworYm9v
bCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKK3sKKyAgICBBU1NFUlQobV9pc1N0YXJ0ZWQp
OworICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkp
OworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkgeworICAgICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICAgICAgbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJl
ZCwgJm1fbmVlZHNYRW1iZWQpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAg
ICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisgICAgfQorCisjaWYg
UExBVEZPUk0oR1RLKQorICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgR3RrV2lkZ2V0
KiBwYWdlQ2xpZW50ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRm
b3JtUGFnZUNsaWVudCgpOworICAgICAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICAg
ICAgLy8gSWYgb3VyIHBhcmVudCBpcyBub3QgYW5jaG9yZWQgdGhlIHN0YXJ0dXAgcHJvY2VzcyB3
aWxsCisgICAgICAgICAgICAvLyBmYWlsIG1pc2VyYWJseSBmb3IgWEVtYmVkIHBsdWdpbnMgYSBi
aXQgbGF0ZXIgb24gd2hlbgorICAgICAgICAgICAgLy8gd2UgdHJ5IHRvIGdldCB0aGUgSUQgb2Yg
b3VyIHdpbmRvdyAoc2luY2UgcmVhbGl6ZSB3aWxsCisgICAgICAgICAgICAvLyBmYWlsKSwgc28g
bGV0J3MganVzdCBhYm9ydCBoZXJlLgorICAgICAgICAgICAgaWYgKCFndGtfd2lkZ2V0X2dldF9w
YXJlbnQocGFnZUNsaWVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBtX3BsdWdBZGRlZCA9IGZhbHNlOworICAgICAgICAgICAgc2V0UGxhdGZvcm1XaWRn
ZXQoZ3RrX3NvY2tldF9uZXcoKSk7CisgICAgICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKHBhZ2VDbGllbnQpLCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKyAgICAgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgInBsdWctYWRkZWQi
LCBHX0NBTExCQUNLKFBsdWdpblZpZXc6OnBsdWdBZGRlZENhbGxiYWNrKSwgdGhpcyk7CisgICAg
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICJwbHVnLXJl
bW92ZWQiLCBHX0NBTExCQUNLKFBsdWdpblZpZXc6OnBsdWdSZW1vdmVkQ2FsbGJhY2spLCB0aGlz
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfeHRi
aW5fbmV3KHBhZ2VDbGllbnQsIDApKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZXRQbGF0Zm9y
bVdpZGdldCgwKTsKKyAgICAgICAgbV9wbHVnaW5EaXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxheSgp
OworICAgIH0KKworICAgIHNob3coKTsKKworICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3Qq
IHdzID0gbmV3IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKKyAgICB3cy0+dHlwZSA9IDA7
CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5Q
V2luZG93VHlwZVdpbmRvdzsKKyAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAg
ICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKTsKKyAgICAgICAg
ICAgIGd0a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOworICAgICAgICAgICAgbV9ucFdpbmRvdy53
aW5kb3cgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihndGtfc29ja2V0X2dldF9pZChHVEtfU09D
S0VUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpKSk7CisgICAgICAgICAgICBHZGtXaW5kb3cqIHdp
bmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOworICAgICAgICAgICAgd3MtPmRp
c3BsYXkgPSBHREtfV0lORE9XX1hESVNQTEFZKHdpbmRvdyk7CisgICAgICAgICAgICB3cy0+dmlz
dWFsID0gR0RLX1ZJU1VBTF9YVklTVUFMKGdka193aW5kb3dfZ2V0X3Zpc3VhbCh3aW5kb3cpKTsK
KyAgICAgICAgICAgIHdzLT5kZXB0aCA9IGdka192aXN1YWxfZ2V0X2RlcHRoKGdka193aW5kb3df
Z2V0X3Zpc3VhbCh3aW5kb3cpKTsKKyAgICAgICAgICAgIHdzLT5jb2xvcm1hcCA9IFhDcmVhdGVD
b2xvcm1hcCh3cy0+ZGlzcGxheSwgR0RLX1JPT1RfV0lORE9XKCksIHdzLT52aXN1YWwsIEFsbG9j
Tm9uZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX25wV2luZG93LndpbmRvdyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSktPnh0d2luZG93KSk7CisgICAgICAgICAgICB3cy0+ZGlzcGxheSA9IEdUS19YVEJJTihwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKS0+eHRkaXNwbGF5OworICAgICAgICAgICAgd3MtPnZpc3VhbCA9
IEdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+eHRjbGllbnQueHR2aXN1YWw7Cisg
ICAgICAgICAgICB3cy0+ZGVwdGggPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkt
Pnh0Y2xpZW50Lnh0ZGVwdGg7CisgICAgICAgICAgICB3cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4o
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7CisgICAgICAgIH0K
KyAgICAgICAgWEZsdXNoKHdzLT5kaXNwbGF5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX25w
V2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRvdy53
aW5kb3cgPSAwOyAvLyBOb3QgdXNlZD8KKworICAgICAgICBHZGtTY3JlZW4qIGdzY3JlZW4gPSBn
ZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7CisgICAgICAgIEdka1Zpc3VhbCogZ3Zpc3VhbCA9IGdk
a19zY3JlZW5fZ2V0X3N5c3RlbV92aXN1YWwoZ3NjcmVlbik7CisKKyAgICAgICAgaWYgKGdka192
aXN1YWxfZ2V0X2RlcHRoKGd2aXN1YWwpID09IDMyIHx8ICFtX3BsdWdpbi0+cXVpcmtzKCkuY29u
dGFpbnMoUGx1Z2luUXVpcmtSZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCkpIHsKKyAgICAgICAg
ICAgIGdldFZpc3VhbEFuZENvbG9ybWFwKDMyLCAmbV92aXN1YWwsICZtX2NvbG9ybWFwKTsKKyAg
ICAgICAgICAgIHdzLT5kZXB0aCA9IDMyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3Zp
c3VhbCkgeworICAgICAgICAgICAgZ2V0VmlzdWFsQW5kQ29sb3JtYXAoZ2RrX3Zpc3VhbF9nZXRf
ZGVwdGgoZ3Zpc3VhbCksICZtX3Zpc3VhbCwgJm1fY29sb3JtYXApOworICAgICAgICAgICAgd3Mt
PmRlcHRoID0gZ2RrX3Zpc3VhbF9nZXRfZGVwdGgoZ3Zpc3VhbCk7CisgICAgICAgIH0KKworICAg
ICAgICB3cy0+ZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0KCkpOworICAgICAgICB3cy0+dmlzdWFsID0gbV92aXN1YWw7CisgICAgICAgIHdzLT5j
b2xvcm1hcCA9IG1fY29sb3JtYXA7CisKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICAg
ICAgbV9ucFdpbmRvdy55ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOworICAg
ICAgICBtX25wV2luZG93LmhlaWdodCA9IC0xOworICAgIH0KKyNlbGlmIFBMQVRGT1JNKEVGTCkK
KyAgICBzZXRQbGF0Zm9ybVdpZGdldCgwKTsKKyAgICBtX3BsdWdpbkRpc3BsYXkgPSBnZXRQbHVn
aW5EaXNwbGF5KCk7CisKKyAgICBzaG93KCk7CisKKyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3Ry
dWN0KiB3cyA9IG5ldyBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KCk7CisgICAgd3MtPnR5cGUg
PSAwOworCisgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAg
bV9ucFdpbmRvdy53aW5kb3cgPSAwOyAvLyBOb3QgdXNlZD8KKworICAgIFNjcmVlbiogc2NyZWVu
ID0gc3RhdGljX2Nhc3Q8U2NyZWVuKj4oZWNvcmVfeF9kZWZhdWx0X3NjcmVlbl9nZXQoKSk7Cisg
ICAgbV92aXN1YWwgPSBzdGF0aWNfY2FzdDxWaXN1YWwqPihlY29yZV94X2RlZmF1bHRfdmlzdWFs
X2dldChtX3BsdWdpbkRpc3BsYXksIHNjcmVlbikpOworICAgIG1fY29sb3JtYXAgPSBlY29yZV94
X2RlZmF1bHRfY29sb3JtYXBfZ2V0KG1fcGx1Z2luRGlzcGxheSwgc2NyZWVuKTsKKworICAgIHdz
LT5kZXB0aCA9IGVjb3JlX3hfZGVmYXVsdF9kZXB0aF9nZXQobV9wbHVnaW5EaXNwbGF5LCBzY3Jl
ZW4pOworICAgIHdzLT5kaXNwbGF5ID0gbV9wbHVnaW5EaXNwbGF5OworICAgIHdzLT52aXN1YWwg
PSBtX3Zpc3VhbDsKKyAgICB3cy0+Y29sb3JtYXAgPSBtX2NvbG9ybWFwOworI2VuZGlmCisKKyAg
ICBtX25wV2luZG93LndzX2luZm8gPSB3czsKKworICAgIC8vIFRPRE8gcmVtb3ZlIGluIGZhdm9y
IG9mIG51bGwgZXZlbnRzLCBsaWtlIG1hYyBwb3J0PworICAgIGlmICghKG1fcGx1Z2luLT5xdWly
a3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCisgICAg
ICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOyAvLyB3YXM6IHNldE5QV2luZG93SWZOZWVkZWQoKSwg
YnV0IHRoaXMgZG9lc24ndCBwcm9kdWNlIDB4MCByZWN0cyBhdCBmaXJzdCBnbworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAg
ICBpZiAobV9kcmF3YWJsZSkgeworICAgICAgICBYRnJlZVBpeG1hcChnZXRQbHVnaW5EaXNwbGF5
KCksIG1fZHJhd2FibGUpOworICAgICAgICBtX2RyYXdhYmxlID0gMDsKKyAgICB9CisKKyNpZiBQ
TEFURk9STShHVEspCisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBwbGF0Zm9ybVdpZGdldCgpOwor
ICAgIGlmICh3aWRnZXQpIHsKKyAgICAgICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0
X2dldF9wYXJlbnQod2lkZ2V0KTsKKyAgICAgICAgQVNTRVJUKHBhcmVudCk7CisgICAgICAgIGd0
a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIocGFyZW50KSwgd2lkZ2V0KTsKKyAgICB9
CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221109</attachid>
            <date>2014-01-13 23:47:01 -0800</date>
            <delta_ts>2014-01-14 00:02:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70592-20140114164658.patch</filename>
            <type>text/plain</type>
            <size>36964</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxOTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJkOGY1ZDllYzlkYzcy
YTVlNDc2NTZlZmQwZjk2MWI3YzY1ZTVlZi4uM2JlOWM4ZTI1NDZiODA4ZDBkZDg2ZjI3ZjE4NTg0
ODM4YmVjOWJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE0LTAxLTEzICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtHVEtdIFNo
YXJlIHBsdWdpbidzIGltcGxlbWVudGF0aW9uIGJldHdlZW4gRUZMIGFuZCBHdGsgcG9ydHMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lcmdlIGNvbW1v
biBsb2dpY3Mgb2YgUGx1Z2luVmlld0d0ay5jcHAgYW5kIFBsdWdpblZpZXdFZmwuY3BwIHRvIFBs
dWdpblZpZXdYMTEuY3BwLgorICAgICAgICBTbywgdGhpcyBwYXRjaCBpbXByb3ZlcyB0aGUgd2lu
ZG93bGVzcyBwbHVnaW4gc3VwcG9ydCBmb3IgdGhlIEVGTCBwb3J0LgorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06IEFkZCBpbmNsdWRlIHBhdGggZm9yIGd0azJ4dGJpbi5oIGhlYWRlciBmaWxl
LgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZGVkIFBsdWdpblZpZXdYMTEuY3Bw
IGludG8gc291cmNlIGxpc3RzLgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBEaXR0by4K
KyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDogQWRkZWQgZ2V0Um9vdFdpbmRvdyBhbmQg
Z2V0UGx1Z2luRGlzcGx5IHdoaWNoIGltcGxlbWVudCBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlLgor
ICAgICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6Z2V0Um9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKTogVHVybiBvbiBOUE5WU3VwcG9ydHNXaW5kb3ds
ZXNzIHN1cHBvcnQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRQbHVnaW5EaXNw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAg
ICAgICAqIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6Z2V0Um9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRYQnV0dG9u
RXZlbnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRYTW90aW9uRXZlbnRT
cGVjaWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRYQ3Jvc3NpbmdFdmVudFNwZWNp
ZmljRmllbGRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmdldFBsdWdpbkRpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAg
ICAgICogcGx1Z2lucy94MTEvUGx1Z2luVmlld1gxMS5jcHA6IE1vdmVkIGNvbW1vbiBsb2dpY3Mg
ZnJvbSBQbHVnaW5WaWV3R3RrLmNwcAorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlz
cGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBsdWdp
bldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OmluaXRYRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKwogMjAxNC0wMS0xMyAg
U2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3JlIHdv
cmsgdG93YXJkcyBnZXR0aW5nIGlPUyBXSzEgYnVpbGRpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IDIzYzg5NGQxNDRkZmIyM2JjNDQwOWEyYTlhMmI1OTJmMGFiN2ZjNzcuLjkwMWZjZjZlZGIx
NDcwZTZlMWQxMDZkNzRhZWVhNjhhYzdlOWUyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC05
Myw2ICs5Myw3IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvaWN1IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMgXAorCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3dpbiBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZSBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA4ODU3Y2FjY2YxZjJiMjU3NGNmMzU3MTQz
YTliMjU5ZjI4N2MzM2VjLi5iOTk0ZWNhY2YzNDE1MzBkM2E0YmMyODJhMGMyMGYwOThjYWMxNDEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTYzMDQsNyArNjMwNCw4IEBAIHdl
YmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0
YmluLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgKKwlTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L2d0ay94ZW1iZWQuaCBcCisJU291cmNlL1dlYkNvcmUvcGx1Z2lucy94MTEvUGx1Z2luVmlld1gx
MS5jcHAKIHBsYXRmb3JtZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9XaWRnZXRCYWNraW5nU3RvcmVHdGtYMTEuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1dpZGdldEJhY2tpbmdTdG9yZUd0a1gxMS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggNzEwNWVjNGJjZjA4Yjg5YmU1MTBlYjdkMjAyMjk4MDlhMDhiMGIzNi4uY2Y3Zjg5
MzJjMTI2NmJkODAwMDllYTc1YzMzOWJkMDRiMmIzMjZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwu
Y21ha2UKQEAgLTE5MSw2ICsxOTEsOCBAQCBpZiAoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkp
CiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBsdWdpbnMvZWZsL1Bs
dWdpblBhY2thZ2VFZmwuY3BwCiAgICAgICAgIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3Bw
CisKKyAgICAgICAgcGx1Z2lucy94MTEvUGx1Z2luVmlld1gxMS5jcHAKICAgICApCiBlbmRpZiAo
KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IDU2MmUyZGJmODc3MTNmMDQ1
MzMyNzI2OTc3MjUzYTJkY2EwZjJiZjMuLmFiNWRhZDQwMzYwZTM5YjBkYWJjMTQ3MGEzM2FlZjk2
MDU4YmYxODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC01Nyw2ICs1Nywx
MSBAQCB0eXBlZGVmIFBsYXRmb3JtV2lkZ2V0IFBsYXRmb3JtUGx1Z2luV2lkZ2V0OwogdHlwZWRl
ZiBzdHJ1Y3QgX0d0a1NvY2tldCBHdGtTb2NrZXQ7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFgx
MSkKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7Cit0eXBlZGVmIHN0cnVjdCBfWERpc3Bs
YXkgRGlzcGxheTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgSlNDIHsKICAgICBuYW1lc3BhY2UgQmlu
ZGluZ3MgewogICAgICAgICBjbGFzcyBJbnN0YW5jZTsKQEAgLTY1LDYgKzcwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZTsKKyAgICBj
bGFzcyBGcmFtZVZpZXc7CiAgICAgY2xhc3MgSW1hZ2U7CiAgICAgY2xhc3MgSFRNTFBsdWdJbkVs
ZW1lbnQ7CiAgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKQEAgLTIzNCw2ICsyNDAsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAgIHZvaWQga2VlcEFsaXZlKCk7CiAKKyNp
ZiBQTEFURk9STShYMTEpCisgICAgICAgIHN0YXRpYyBEaXNwbGF5KiBnZXRQbHVnaW5EaXNwbGF5
KEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBXaW5kb3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFy
ZW50RnJhbWUpOworI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBQbHVnaW5WaWV3KEZy
YW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2thZ2UqLCBIVE1MUGx1
Z0luRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKIApAQCAtMzY4LDcgKzM3OSw2IEBAIHB1YmxpYzoKICNl
bmRpZgogCiBwcml2YXRlOgotCiAjaWYgZGVmaW5lZChYUF9VTklYKSB8fCBQTEFURk9STShHVEsp
CiAgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogI2VsaWYgZGVmaW5lZChYUF9N
QUNPU1gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3
RWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCmlu
ZGV4IGRiOGU2ODdiZjQ3YTFmYTRiYzFjZjNlZjc2NDkzY2Y3OGQwZGY5MmMuLmRlYWZlY2M2MDI3
YmVlMDJmOTI5NWEyZGQ3ZDE5NmJkMjdhMmMxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCkBAIC0zLDcgKzMsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwotICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMiwxMSArMzIsOCBAQAogCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgotI2luY2x1ZGUgIkhvc3RXaW5k
b3cuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
LmgiCkBAIC01MiwzMyArNDksMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogCi1ib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2
ZW50JiBldmVudCkKK1dpbmRvdyBQbHVnaW5WaWV3OjpnZXRSb290V2luZG93KEZyYW1lKiBwYXJl
bnRGcmFtZSkKIHsKLSAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwot
Ci0gICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2lu
c3RhbmNlLCAmZXZlbnQpOwotCi0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0gICAgcmV0dXJuIGFjY2VwdGVkOwot
fQotCi0jaWYgZGVmaW5lZChYUF9VTklYKQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0lu
RXZlbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlRm9jdXNPdXRFdmVudCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBFdmFz
KiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQocGFyZW50RnJhbWUtPnZpZXcoKS0+ZXZhc09i
amVjdCgpKTsKKyAgICBFY29yZV9FdmFzKiBlY29yZUV2YXMgPSBlY29yZV9ldmFzX2Vjb3JlX2V2
YXNfZ2V0KGV2YXMpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXaW5kb3c+KGVjb3JlX2V2YXNf
d2luZG93X2dldChlY29yZUV2YXMpKTsKIH0KLSNlbmRpZgogCiB2b2lkIFBsdWdpblZpZXc6Omhh
bmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopCiB7CkBAIC0xMTcsMTEgKzkzLDYgQEAg
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQogICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3Ojp1
cGRhdGVQbHVnaW5XaWRnZXQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQg
UGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQogewogICAgIGlmIChmb2N1c2VkKQpA
QCAtMTQ0LDI5ICsxMTUsNiBAQCB2b2lkIFBsdWdpblZpZXc6OmhpZGUoKQogICAgIFdpZGdldDo6
aGlkZSgpOwogfQogCi12b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1faXNTdGFydGVkKQotICAg
ICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIFBs
dWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCi17Ci0gICAgV2lkZ2V0Ojpz
ZXRQYXJlbnQocGFyZW50KTsKLQotICAgIGlmIChwYXJlbnQpCi0gICAgICAgIGluaXQoKTsKLX0K
LQotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lm
TmVlZGVkKCkKLXsKLX0KLQogdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wg
dmlzaWJsZSkKIHsKICAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlzaWJsZSk7CkBAIC0y
MjEsNyArMTY5LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5Q
TlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnIKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6Ci0gICAgICAgICpzdGF0aWNf
Y2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxzZTsKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9v
bCo+KHZhbHVlKSA9IHRydWU7CiAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTMxMiwxOSArMjYwLDkgQEAgdm9pZCBQbHVnaW5WaWV3
OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIGludmFsaWRhdGVXaW5k
b3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdChOUFJlY3QqIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0KSB7Ci0gICAgICAgIGludmFsaWRh
dGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludmFsaWRhdGVSZWN0KEludFJl
Y3QocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3Qt
PmJvdHRvbSAtIHJlY3QtPnRvcCkpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVS
ZWdpb24oTlBSZWdpb24pCitEaXNwbGF5KiBQbHVnaW5WaWV3OjpnZXRQbHVnaW5EaXNwbGF5KEZy
YW1lKikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxE
aXNwbGF5Kj4oZWNvcmVfeF9kaXNwbGF5X2dldCgpKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3Ojpm
b3JjZVJlZHJhdygpCkBAIC0zMzcsNyArMjc1LDQxIEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZv
cm1TdGFydCgpCiAgICAgQVNTRVJUKG1faXNTdGFydGVkKTsKICAgICBBU1NFUlQobV9zdGF0dXMg
PT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKIAotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkgeworICAgICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICAgICAgbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJl
ZCwgJm1fbmVlZHNYRW1iZWQpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAg
ICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisgICAgfQorCisgICAg
c2V0UGxhdGZvcm1XaWRnZXQoMCk7CisgICAgbV9wbHVnaW5EaXNwbGF5ID0gZ2V0UGx1Z2luRGlz
cGxheShudWxscHRyKTsKKworICAgIHNob3coKTsKKworICAgIE5QU2V0V2luZG93Q2FsbGJhY2tT
dHJ1Y3QqIHdzID0gbmV3IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKKyAgICB3cy0+dHlw
ZSA9IDA7CisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAg
ICBtX25wV2luZG93LndpbmRvdyA9IDA7IC8vIE5vdCB1c2VkPworCisgICAgU2NyZWVuKiBzY3Jl
ZW4gPSBzdGF0aWNfY2FzdDxTY3JlZW4qPihlY29yZV94X2RlZmF1bHRfc2NyZWVuX2dldCgpKTsK
KyAgICBtX3Zpc3VhbCA9IHN0YXRpY19jYXN0PFZpc3VhbCo+KGVjb3JlX3hfZGVmYXVsdF92aXN1
YWxfZ2V0KG1fcGx1Z2luRGlzcGxheSwgc2NyZWVuKSk7CisgICAgbV9jb2xvcm1hcCA9IGVjb3Jl
X3hfZGVmYXVsdF9jb2xvcm1hcF9nZXQobV9wbHVnaW5EaXNwbGF5LCBzY3JlZW4pOworCisgICAg
d3MtPmRlcHRoID0gZWNvcmVfeF9kZWZhdWx0X2RlcHRoX2dldChtX3BsdWdpbkRpc3BsYXksIHNj
cmVlbik7CisgICAgd3MtPmRpc3BsYXkgPSBtX3BsdWdpbkRpc3BsYXk7CisgICAgd3MtPnZpc3Vh
bCA9IG1fdmlzdWFsOworICAgIHdzLT5jb2xvcm1hcCA9IG1fY29sb3JtYXA7CisKKyAgICBtX25w
V2luZG93LndzX2luZm8gPSB3czsKKworICAgIC8vIFRPRE8gcmVtb3ZlIGluIGZhdm9yIG9mIG51
bGwgZXZlbnRzLCBsaWtlIG1hYyBwb3J0PworICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5j
b250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCisgICAgICAgIHVw
ZGF0ZVBsdWdpbldpZGdldCgpOyAvLyB3YXM6IHNldE5QV2luZG93SWZOZWVkZWQoKSwgYnV0IHRo
aXMgZG9lc24ndCBwcm9kdWNlIDB4MCByZWN0cyBhdCBmaXJzdCBnbworCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZp
ZXdHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAK
aW5kZXggMGJiYmVlM2ZlZjY3NDU3Yzk0Y2ViMjg5NjE2MDY0NmUyNTlkODQ5OS4uN2ExNmYyMTg0
OTg0ZDEyM2M0ZDZjNTQ4M2I4MjlhOGM1NGY3ODY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKQEAgLTUyLDcgKzUyLDYgQEAKICNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYWdl
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJQbGF0Zm9y
bUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNs
dWRlICJQbHVnaW5EZWJ1Zy5oIgpAQCAtNzQsMTAgKzczLDkgQEAKICNkZWZpbmUgU3RyaW5nIFh0
U3RyaW5nVHlwZQogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiZ3RrMnh0Ymlu
LmgiCi0jZGVmaW5lIEJvb2wgaW50IC8vIHRoaXMgZ290IHVuZGVmaW5lZCBzb21ld2hlcmUKKyNk
ZWZpbmUgQm9vbCBpbnQgLy8gdGhpcyBiZWNhbWUgdW5kZWZpbmVkIGluIG5wcnVudGltZV9pbnRl
cm5hbC5oCiAjZGVmaW5lIFN0YXR1cyBpbnQgLy8gZGl0dG8KICNpbmNsdWRlIDxYMTEvZXh0ZW5z
aW9ucy9YcmVuZGVyLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8teGxpYi5oPgogI2luY2x1ZGUgPGdkay9n
ZGt4Lmg+CiAKIHVzaW5nIEpTQzo6RXhlY1N0YXRlOwpAQCAtOTMsNjUgKzkxLDEzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotYm9vbCBQbHVn
aW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCi17Ci0gICAgLy8gc2FuaXR5
IGNoZWNrCi0gICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLQotICAg
IGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFu
Y2UsICZldmVudCk7Ci0KLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICByZXR1cm4gYWNjZXB0ZWQ7Ci19Ci0K
LXN0YXRpYyBXaW5kb3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUpCitXaW5kb3cg
UGx1Z2luVmlldzo6Z2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUpCiB7CiAgICAgR3Rr
V2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSBwYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCkt
PnBsYXRmb3JtUGFnZUNsaWVudCgpOwogICAgIEdka1NjcmVlbiogZ3NjcmVlbiA9IGd0a193aWRn
ZXRfZ2V0X3NjcmVlbihwYXJlbnRXaWRnZXQpOwogICAgIHJldHVybiBHREtfV0lORE9XX1hXSU5E
T1coZ2RrX3NjcmVlbl9nZXRfcm9vdF93aW5kb3coZ3NjcmVlbikpOwogfQogCi12b2lkIFBsdWdp
blZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCi17Ci0gICAgaWYgKCFwYXJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKLSAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKTsKLQotICAgIEludFJl
Y3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKLSAgICBJbnRSZWN0IG9sZENsaXBSZWN0
ID0gbV9jbGlwUmVjdDsKLQotICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5j
b250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXpl
KCkpOwotICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOwotICAgIG1fY2xpcFJlY3Qu
bW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOwotCi0gICAgaWYgKG1f
d2luZG93UmVjdCA9PSBvbGRXaW5kb3dSZWN0ICYmIG1fY2xpcFJlY3QgPT0gb2xkQ2xpcFJlY3Qp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2Fk
ZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc1dpbmRvd2Vk
ICYmICFtX3dpbmRvd1JlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIERpc3BsYXkqIGRpc3BsYXkg
PSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICAg
ICAgaWYgKG1fZHJhd2FibGUpCi0gICAgICAgICAgICBYRnJlZVBpeG1hcChkaXNwbGF5LCBtX2Ry
YXdhYmxlKTsKLSAgICAgICAgICAgIAotICAgICAgICBtX2RyYXdhYmxlID0gWENyZWF0ZVBpeG1h
cChkaXNwbGF5LCBnZXRSb290V2luZG93KG1fcGFyZW50RnJhbWUuZ2V0KCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dS
ZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE5QU2V0
V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPmRlcHRoKTsKLSAgICAg
ICAgWFN5bmMoZGlzcGxheSwgZmFsc2UpOyAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgc2VydmVyIGtu
b3dzIGFib3V0IHRoZSBEcmF3YWJsZQotICAgIH0KLQotICAgIHNldE5QV2luZG93SWZOZWVkZWQo
KTsKLX0KLQogdm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCiB7CiAgICAg
QVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gcGxhdGZvcm1XaWRnZXQoKSk7CkBAIC0x
NzIsOTYgKzExOCw2IEBAIHZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCiAgICAgV2lkZ2V0OjpoaWRl
KCk7CiB9CiAKLXZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0
dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KSB7Ci0gICAgICAgIHBhaW50TWlz
c2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAobV9pc1dpbmRvd2VkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fZHJhd2FibGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9n
ZXRfZGVmYXVsdCgpKTsKLSAgICBjb25zdCBib29sIHN5bmNYID0gbV9wbHVnaW5EaXNwbGF5ICYm
IG1fcGx1Z2luRGlzcGxheSAhPSBkaXNwbGF5OwotCi0gICAgSW50UmVjdCBleHBvc2VkUmVjdChy
ZWN0KTsKLSAgICBleHBvc2VkUmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOwotICAgIGV4cG9z
ZWRSZWN0Lm1vdmUoLWZyYW1lUmVjdCgpLngoKSwgLWZyYW1lUmVjdCgpLnkoKSk7Ci0KLSAgICBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBkcmF3YWJsZVN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb194
bGliX3N1cmZhY2VfY3JlYXRlKGRpc3BsYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kcmF3YWJsZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Zpc3VhbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRvd1Jl
Y3Qud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpKTsKLQotICAgIGlmIChtX2lzVHJhbnNw
YXJlbnQpIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIDMyIGJpdCBkcmF3YWJsZSBhbmQgdGhl
IHBsdWdpbiB3YW50cyB0cmFuc3BhcmVuY3ksCi0gICAgICAgIC8vIHdlJ2xsIGNsZWFyIHRoZSBl
eHBvc2VkIGFyZWEgdG8gdHJhbnNwYXJlbnQgZmlyc3QuICBPdGhlcndpc2UsCi0gICAgICAgIC8v
IHdlJ2QgZW5kIHVwIHdpdGgganVuayBpbiB0aGVyZSBmcm9tIHRoZSBsYXN0IHBhaW50LCBvciwg
d29yc2UsCi0gICAgICAgIC8vIHVuaW5pdGlhbGl6ZWQgZGF0YS4KLSAgICAgICAgUmVmUHRyPGNh
aXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGRyYXdhYmxlU3VyZmFjZS5nZXQoKSkp
OwotCi0gICAgICAgIGlmICghKGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoZHJhd2FibGVTdXJm
YWNlLmdldCgpKSAmIENBSVJPX0NPTlRFTlRfQUxQSEEpKSB7Ci0gICAgICAgICAgICAvLyBBdHRl
bXB0IHRvIGZha2UgaXQgd2hlbiB3ZSBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwgb24gb3Vy
Ci0gICAgICAgICAgICAvLyBwaXhtYXAuICBJZiB0aGF0J3Mgbm90IHBvc3NpYmxlLCBhdCBsZWFz
dCBjbGVhciB0aGUgd2luZG93IHRvCi0gICAgICAgICAgICAvLyBhdm9pZCBkcmF3aW5nIGFydGlm
YWN0cy4KLQotICAgICAgICAgICAgLy8gVGhpcyBXb3VsZCBub3Qgd29yayB3aXRob3V0IGRvdWJs
ZSBidWZmZXJpbmcsIGJ1dCB3ZSBhbHdheXMgdXNlIGl0LgotICAgICAgICAgICAgY2Fpcm9fc2V0
X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBjYWlyb19nZXRfZ3JvdXBfdGFyZ2V0KGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOwotICAgICAgICAg
ICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwg
Q0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwotCi0gICAgICAgIGNhaXJvX3JlY3RhbmdsZShjci5nZXQo
KSwgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAg
IGNhaXJvX2ZpbGwoY3IuZ2V0KCkpOwotICAgIH0KLQotICAgIFhFdmVudCB4ZXZlbnQ7Ci0gICAg
bWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZihYRXZlbnQpKTsKLSAgICBYR3JhcGhpY3NFeHBvc2VF
dmVudCYgZXhwb3NlRXZlbnQgPSB4ZXZlbnQueGdyYXBoaWNzZXhwb3NlOwotICAgIGV4cG9zZUV2
ZW50LnR5cGUgPSBHcmFwaGljc0V4cG9zZTsKLSAgICBleHBvc2VFdmVudC5kaXNwbGF5ID0gZGlz
cGxheTsKLSAgICBleHBvc2VFdmVudC5kcmF3YWJsZSA9IG1fZHJhd2FibGU7Ci0gICAgZXhwb3Nl
RXZlbnQueCA9IGV4cG9zZWRSZWN0LngoKTsKLSAgICBleHBvc2VFdmVudC55ID0gZXhwb3NlZFJl
Y3QueSgpOwotICAgIGV4cG9zZUV2ZW50LndpZHRoID0gZXhwb3NlZFJlY3QueCgpICsgZXhwb3Nl
ZFJlY3Qud2lkdGgoKTsgLy8gZmxhc2ggYnVnPyBpdCB0aGlua3Mgd2lkdGggaXMgdGhlIHJpZ2h0
IGluIHRyYW5zcGFyZW50IG1vZGUKLSAgICBleHBvc2VFdmVudC5oZWlnaHQgPSBleHBvc2VkUmVj
dC55KCkgKyBleHBvc2VkUmVjdC5oZWlnaHQoKTsgLy8gZmxhc2ggYnVnPyBpdCB0aGlua3MgaGVp
Z2h0IGlzIHRoZSBib3R0b20gaW4gdHJhbnNwYXJlbnQgbW9kZQotCi0gICAgZGlzcGF0Y2hOUEV2
ZW50KHhldmVudCk7Ci0KLSAgICBpZiAoc3luY1gpCi0gICAgICAgIFhTeW5jKG1fcGx1Z2luRGlz
cGxheSwgZmFsc2UpOyAvLyBzeW5jIGNoYW5nZXMgYnkgcGx1Z2luCi0KLSAgICBjYWlyb190KiBj
ciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgIGNhaXJvX3NhdmUoY3Ip
OwotCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBkcmF3YWJsZVN1cmZhY2UuZ2V0
KCksIGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpKTsKLQotICAgIGNhaXJvX3JlY3Rh
bmdsZShjciwKLSAgICAgICAgICAgICAgICAgICAgZnJhbWVSZWN0KCkueCgpICsgZXhwb3NlZFJl
Y3QueCgpLCBmcmFtZVJlY3QoKS55KCkgKyBleHBvc2VkUmVjdC55KCksCi0gICAgICAgICAgICAg
ICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKLSAgICBj
YWlyb19jbGlwKGNyKTsKLQotICAgIGlmIChtX2lzVHJhbnNwYXJlbnQpCi0gICAgICAgIGNhaXJv
X3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfT1ZFUik7Ci0gICAgZWxzZQotICAgICAg
ICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fp
cm9fcGFpbnQoY3IpOwotCi0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci19Ci0KIHZvaWQgUGx1Z2lu
Vmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vblZNKCkpOwpAQCAtMzExLDI3ICsxNjcsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnB1
dEV2ZW50U3RhdGUoTW91c2VFdmVudCogZXZlbnQpCiAgICAgcmV0dXJuIHN0YXRlOwogfQogCi12
b2lkIFBsdWdpblZpZXc6OmluaXRYRXZlbnQoWEV2ZW50KiB4RXZlbnQpCi17Ci0gICAgbWVtc2V0
KHhFdmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOwotCi0gICAgeEV2ZW50LT54YW55LnNlcmlhbCA9
IDA7IC8vIHdlIGFyZSB1bmF3YXJlIG9mIHRoZSBsYXN0IHJlcXVlc3QgcHJvY2Vzc2VkIGJ5IFgg
U2VydmVyCi0gICAgeEV2ZW50LT54YW55LnNlbmRfZXZlbnQgPSBmYWxzZTsKLSAgICBHdGtXaWRn
ZXQqIHdpZGdldCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9y
bVBhZ2VDbGllbnQoKTsKLSAgICB4RXZlbnQtPnhhbnkuZGlzcGxheSA9IEdES19ESVNQTEFZX1hE
SVNQTEFZKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSk7Ci0KLSAgICAvLyBNb3ppbGxh
IGFsc28gc2VuZHMgTm9uZSBoZXJlIGZvciB3aW5kb3dsZXNzIHBsdWdpbnMuIFNlZSBuc09iamVj
dEZyYW1lLmNwcCBpbiB0aGUgTW96aWxsYSBzb3VyY2VzLgotICAgIC8vIFRoaXMgbWV0aG9kIGFs
c28gc2V0cyB1cCBGb2N1c0luIGFuZCBGb2N1c091dCBldmVudHMgZm9yIHdpbmRvd3MgcGx1Z2lu
cywgYnV0IE1vemlsbGEgZG9lc24ndAotICAgIC8vIGV2ZW4gc2VuZCB0aGVzZSB0eXBlcyBvZiBl
dmVudHMgdG8gd2luZG93ZWQgcGx1Z2lucy4gSW4gdGhlIGZ1dHVyZSwgaXQgbWF5IGJlIGdvb2Qg
dG8gb25seQotICAgIC8vIHNlbmQgdGhlbSB0byB3aW5kb3dsZXNzIHBsdWdpbnMuCi0gICAgeEV2
ZW50LT54YW55LndpbmRvdyA9IE5vbmU7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldFhCdXR0b25FdmVu
dFNwZWNpZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3Qg
SW50UG9pbnQmIHBvc3Rab29tUG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCiB7CiAgICAgWEJ1dHRv
bkV2ZW50JiB4YnV0dG9uID0geEV2ZW50LT54YnV0dG9uOwogICAgIHhidXR0b24udHlwZSA9IGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ID8gQnV0dG9uUHJlc3Mg
OiBCdXR0b25SZWxlYXNlOwotICAgIHhidXR0b24ucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50
RnJhbWUpOworICAgIHhidXR0b24ucm9vdCA9IFBsdWdpblZpZXc6OmdldFJvb3RXaW5kb3cocGFy
ZW50RnJhbWUpOwogICAgIHhidXR0b24uc3Vid2luZG93ID0gMDsKICAgICB4YnV0dG9uLnRpbWUg
PSBldmVudC0+dGltZVN0YW1wKCk7CiAgICAgeGJ1dHRvbi54ID0gcG9zdFpvb21Qb3MueCgpOwpA
QCAtMzU4LDcgKzE5OCw3IEBAIHN0YXRpYyB2b2lkIHNldFhNb3Rpb25FdmVudFNwZWNpZmljRmll
bGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uCiB7CiAgICAgWE1vdGlv
bkV2ZW50JiB4bW90aW9uID0geEV2ZW50LT54bW90aW9uOwogICAgIHhtb3Rpb24udHlwZSA9IE1v
dGlvbk5vdGlmeTsKLSAgICB4bW90aW9uLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZyYW1l
KTsKKyAgICB4bW90aW9uLnJvb3QgPSBQbHVnaW5WaWV3OjpnZXRSb290V2luZG93KHBhcmVudEZy
YW1lKTsKICAgICB4bW90aW9uLnN1YndpbmRvdyA9IDA7CiAgICAgeG1vdGlvbi50aW1lID0gZXZl
bnQtPnRpbWVTdGFtcCgpOwogICAgIHhtb3Rpb24ueCA9IHBvc3Rab29tUG9zLngoKTsKQEAgLTM3
NCw3ICsyMTQsNyBAQCBzdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRz
KFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgYwogewogICAgIFhDcm9zc2luZ0V2
ZW50JiB4Y3Jvc3NpbmcgPSB4RXZlbnQtPnhjcm9zc2luZzsKICAgICB4Y3Jvc3NpbmcudHlwZSA9
IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50ID8gRW50ZXJOb3Rp
ZnkgOiBMZWF2ZU5vdGlmeTsKLSAgICB4Y3Jvc3Npbmcucm9vdCA9IGdldFJvb3RXaW5kb3cocGFy
ZW50RnJhbWUpOworICAgIHhjcm9zc2luZy5yb290ID0gUGx1Z2luVmlldzo6Z2V0Um9vdFdpbmRv
dyhwYXJlbnRGcmFtZSk7CiAgICAgeGNyb3NzaW5nLnN1YndpbmRvdyA9IDA7CiAgICAgeGNyb3Nz
aW5nLnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7CiAgICAgeGNyb3NzaW5nLnggPSBwb3N0Wm9v
bVBvcy55KCk7CkBAIC00MjgsMTEzICsyNjgsNiBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwogfQogCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCgpCi17Ci0g
ICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNj
ZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFhFdmVudCBucEV2ZW50OwotICAgIGlu
aXRYRXZlbnQoJm5wRXZlbnQpOwotCi0gICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBF
dmVudC54Zm9jdXM7Ci0gICAgZXZlbnQudHlwZSA9IDk7IC8vIEZvY3VzSW4gZ2V0cyB1bnNldCBz
b21ld2hlcmUKLSAgICBldmVudC5tb2RlID0gTm90aWZ5Tm9ybWFsOwotICAgIGV2ZW50LmRldGFp
bCA9IE5vdGlmeURldGFpbE5vbmU7Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCgpCi17Ci0gICAgaWYgKCFt
X2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFhFdmVudCBucEV2ZW50OwotICAgIGluaXRYRXZlbnQo
Jm5wRXZlbnQpOwotCi0gICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9j
dXM7Ci0gICAgZXZlbnQudHlwZSA9IDEwOyAvLyBGb2N1c091dCBnZXRzIHVuc2V0IHNvbWV3aGVy
ZQotICAgIGV2ZW50Lm1vZGUgPSBOb3RpZnlOb3JtYWw7Ci0gICAgZXZlbnQuZGV0YWlsID0gTm90
aWZ5RGV0YWlsTm9uZTsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQotdm9p
ZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQotewotICAgIFdpZGdl
dDo6c2V0UGFyZW50KHBhcmVudCk7Ci0KLSAgICBpZiAocGFyZW50KQotICAgICAgICBpbml0KCk7
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQot
ewotICAgIGlmICghbV9pc1dpbmRvd2VkKQotICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCi17Ci0gICAgaWYg
KCFtX2lzU3RhcnRlZCB8fCAhcGFyZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5z
ZXR3aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBwbHVnaW4gZGlkbid0
IGxvYWQgc3VjZXNzZnVsbHksIG5vIHBvaW50IGluIGNhbGxpbmcgc2V0d2luZG93Ci0gICAgaWYg
KG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gT24gVW5peCwgb25seSBjYWxsIHBsdWdpbidzIHNldHdpbmRvdyBpZiBp
dCdzIGZ1bGwtcGFnZSBvciB3aW5kb3dlZAotICAgIGlmIChtX21vZGUgIT0gTlBfRlVMTCAmJiBt
X21vZGUgIT0gTlBfRU1CRUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENoZWNrIGlmIHRo
ZSBwbGF0Zm9ybVBsdWdpbldpZGdldCBzdGlsbCBleGlzdHMKLSAgICBpZiAobV9pc1dpbmRvd2Vk
ICYmICFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9jbGlwUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSWYgd2lkdGggb3IgaGVpZ2h0IGFy
ZSBudWxsLCBzZXQgdGhlIGNsaXBSZWN0IHRvIG51bGwsCi0gICAgICAgIC8vIGluZGljYXRpbmcg
dGhhdCB0aGUgcGx1Z2luIGlzIG5vdCB2aXNpYmxlL3Njcm9sbGVkIG91dC4KLSAgICAgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5y
aWdodCA9IDA7Ci0gICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKLSAgICAgICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IENsaXBwaW5nIHJlY3RhbmdsZSBvZiB0aGUgcGx1Zy1pbjsgdGhlIG9yaWdpbiBpcyB0aGUgdG9w
IGxlZnQgY29ybmVyIG9mIHRoZSBkcmF3YWJsZSBvciB3aW5kb3cuIAotICAgICAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LmxlZnQgPSBtX25wV2luZG93LnggKyBtX2NsaXBSZWN0LngoKTsKLSAgICAg
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSBtX25wV2luZG93LnkgKyBtX2NsaXBSZWN0Lnko
KTsKLSAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fbnBXaW5kb3cueCArIG1f
Y2xpcFJlY3QueCgpICsgbV9jbGlwUmVjdC53aWR0aCgpOwotICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LmJvdHRvbSA9IG1fbnBXaW5kb3cueSArIG1fY2xpcFJlY3QueSgpICsgbV9jbGlwUmVj
dC5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICAvLyBGTEFTSCBXT1JLQVJPVU5EOiBPbmx5IHNldCBp
bml0aWFsbHkuIE11bHRpcGxlIGNhbGxzIHRvCi0gICAgLy8gc2V0TlBXaW5kb3coKSBjYXVzZSB0
aGUgcGx1Z2luIHRvIGNyYXNoIGluIHdpbmRvd2VkIG1vZGUuCi0gICAgaWYgKCFtX3BsdWdpbi0+
cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVUaGFuT25j
ZSkgfHwgIW1faXNXaW5kb3dlZAotICAgICAgICB8fCBtX25wV2luZG93LndpZHRoID09IHN0YXRp
Y19jYXN0PHVpbnQzMl90PigtMSkgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPT0gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KC0xKSkgewotICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0
LndpZHRoKCk7Ci0gICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdo
dCgpOwotICAgIH0KLQotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsK
LSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50
UGx1Z2luVmlldygwKTsKLQotICAgIGlmICghbV9pc1dpbmRvd2VkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBHdGtYdEJpbiB3aWxsIGNhbGwgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlLCBz
byB3ZSBkb24ndCBuZWVkIHRvIGRvIGl0IGhlcmUuCi0gICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7
Ci0gICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpKTsKLSAgICAgICAg
Z3RrX3h0YmluX3Jlc2l6ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRvd1JlY3Qud2lk
dGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fZGVsYXllZEFsbG9jYXRpb24gPSBtX3dpbmRvd1JlY3Q7Ci0gICAgdXBkYXRlV2lkZ2V0
QWxsb2NhdGlvbkFuZENsaXAoKTsKLX0KLQogdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVXaWRnZXRB
bGxvY2F0aW9uQW5kQ2xpcCgpCiB7CiAgICAgLy8gSWYgdGhlIHdpbmRvdyBoYXMgbm90IGJlZW4g
ZW1iZWRkZWQgeWV0ICh0aGUgcGx1ZyBhZGRlZCksIHdlIGRlbGF5IHNldHRpbmcgaXRzIGFsbG9j
YXRpb24gdW50aWwgCkBAIC02OTYsMjMgKzQyOSw2IEBAIHZvaWQgUGx1Z2luVmlldzo6aW52YWxp
ZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBpbnZhbGlkYXRlV2luZG93bGVzc1Bs
dWdpblJlY3QocmVjdCk7CiB9CiAKLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBS
ZWN0KiByZWN0KQotewotICAgIGlmICghcmVjdCkgewotICAgICAgICBpbnZhbGlkYXRlKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+
dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7
Ci0gICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHIpOwotfQotCi12b2lkIFBsdWdp
blZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pCi17Ci0gICAgLy8gVE9ETzogb3B0aW1p
emUKLSAgICBpbnZhbGlkYXRlKCk7Ci19Ci0KIHZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXco
KQogewogICAgIGlmIChtX2lzV2luZG93ZWQpCkBAIC03MjEsOCArNDM3LDEzIEBAIHZvaWQgUGx1
Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQogICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcobV9w
YXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsK
IH0KIAotc3RhdGljIERpc3BsYXkqIGdldFBsdWdpbkRpc3BsYXkoKQorRGlzcGxheSogUGx1Z2lu
Vmlldzo6Z2V0UGx1Z2luRGlzcGxheShGcmFtZSogcGFyZW50RnJhbWUpCiB7CisgICAgaWYgKHBh
cmVudEZyYW1lKSB7CisgICAgICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gcGFyZW50RnJhbWUtPnZp
ZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICAgICAgcmV0dXJu
IEdES19ESVNQTEFZX1hESVNQTEFZKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSk7Cisg
ICAgfQorCiAgICAgLy8gVGhlIHBsdWdpbiB0b29sa2l0IG1pZ2h0IGhhdmUgYSBkaWZmZXJlbnQg
WCBjb25uZWN0aW9uIG9wZW4uICBTaW5jZSB3ZSdyZQogICAgIC8vIGEgZ2RrL2d0ayBhcHAsIHdl
J2xsIChwcm9iYWJseT8pIGhhdmUgdGhlIHNhbWUgWCBjb25uZWN0aW9uIGFzIGFueSBnZGstYmFz
ZWQKICAgICAvLyBwbHVnaW5zLCBzbyB3ZSBjYW4gcmV0dXJuIHRoYXQuICBXZSBtaWdodCB3YW50
IHRvIGFkZCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgaGVyZQpAQCAtODE1LDcgKzUzNiw3IEBAIGJv
b2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAgICAgICAgICAgICBzZXRQbGF0Zm9ybVdp
ZGdldChndGtfeHRiaW5fbmV3KHBhZ2VDbGllbnQsIDApKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBzZXRQbGF0Zm9ybVdpZGdldCgwKTsKLSAgICAgICAgbV9wbHVnaW5EaXNwbGF5ID0gZ2V0UGx1
Z2luRGlzcGxheSgpOworICAgICAgICBtX3BsdWdpbkRpc3BsYXkgPSBnZXRQbHVnaW5EaXNwbGF5
KG51bGxwdHIpOwogICAgIH0KIAogICAgIHNob3coKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMveDExL1BsdWdpblZpZXdYMTEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy94MTEvUGx1Z2luVmlld1gxMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjEzNDE4ODIzODdlOWFkNWQ0MWQ2
OTdlOGRlZjA2ZmM4OGRmOTRlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMveDExL1BsdWdpblZpZXdYMTEuY3BwCkBAIC0wLDAgKzEsMzMxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBLYWthaSwgSW5jLiA8YnJpYW5Aa2FrYWkuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisj
aW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlIDxYMTEvWC5oPgorI2luY2x1ZGUgPGNh
aXJvLXhsaWIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorCisjaWYgUExBVEZPUk0o
R1RLKQorI2RlZmluZSBTdHJpbmcgWHRTdHJpbmdUeXBlCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgi
CisjZW5kaWYKKworI2RlZmluZSBCb29sIGludCAvLyB0aGlzIGJlY2FtZSB1bmRlZmluZWQgaW4g
bnBydW50aW1lX2ludGVybmFsLmgKKyNkZWZpbmUgTm9uZSAwTCAvLyBkaXR0bworI2RlZmluZSBT
dGF0dXMgaW50IC8vIGRpdHRvCisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50
KE5QRXZlbnQmIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2
ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50
UGx1Z2luVmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgIHNldENhbGxpbmdQbHVnaW4o
dHJ1ZSk7CisKKyAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2
ZW50KG1faW5zdGFuY2UsICZldmVudCk7CisKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
KyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKyAgICByZXR1cm4gYWNj
ZXB0ZWQ7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKK3sKKyAg
ICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCkt
PmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdG9GcmFtZVZpZXco
cGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0Owor
ICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0
ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRp
b24oKSksIGZyYW1lUmVjdCgpLnNpemUoKSk7CisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBS
ZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dS
ZWN0LnkoKSk7CisKKyAgICBpZiAobV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3QgJiYgbV9j
bGlwUmVjdCA9PSBvbGRDbGlwUmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc3Rh
dHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX2lzV2luZG93ZWQgJiYgIW1fd2luZG93UmVjdC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgRGlzcGxheSogZGlzcGxheSA9IGdldFBsdWdpbkRpc3BsYXkobnVsbHB0cik7CisgICAg
ICAgIGlmIChtX2RyYXdhYmxlKQorICAgICAgICAgICAgWEZyZWVQaXhtYXAoZGlzcGxheSwgbV9k
cmF3YWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgbV9kcmF3YWJsZSA9IFhDcmVhdGVQaXht
YXAoZGlzcGxheSwgZ2V0Um9vdFdpbmRvdyhtX3BhcmVudEZyYW1lLmdldCgpKSwKKyAgICAgICAg
ICAgIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksCisgICAgICAg
ICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPmRl
cHRoKTsKKyAgICAgICAgWFN5bmMoZGlzcGxheSwgZmFsc2UpOyAvLyBtYWtlIHN1cmUgdGhhdCB0
aGUgc2VydmVyIGtub3dzIGFib3V0IHRoZSBEcmF3YWJsZQorICAgIH0KKworICAgIHNldE5QV2lu
ZG93SWZOZWVkZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQo
KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9h
ZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBYRXZlbnQgbnBFdmVudDsK
KyAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsKKworICAgIFhGb2N1c0NoYW5nZUV2ZW50JiBldmVu
dCA9IG5wRXZlbnQueGZvY3VzOworICAgIGV2ZW50LnR5cGUgPSA5OyAvLyBGb2N1c0luIGdldHMg
dW5zZXQgc29tZXdoZXJlCisgICAgZXZlbnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICBldmVu
dC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZl
bnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkK
K3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+
cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworICAgIGludmFs
aWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZh
bGlkYXRlUmVnaW9uKE5QUmVnaW9uKQoreworICAgIC8vIFRPRE86IG9wdGltaXplCisgICAgaW52
YWxpZGF0ZSgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQor
eworICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVk
U3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBYRXZlbnQgbnBFdmVudDsKKyAg
ICBpbml0WEV2ZW50KCZucEV2ZW50KTsKKworICAgIFhGb2N1c0NoYW5nZUV2ZW50JiBldmVudCA9
IG5wRXZlbnQueGZvY3VzOworICAgIGV2ZW50LnR5cGUgPSAxMDsgLy8gRm9jdXNPdXQgZ2V0cyB1
bnNldCBzb21ld2hlcmUKKyAgICBldmVudC5tb2RlID0gTm90aWZ5Tm9ybWFsOworICAgIGV2ZW50
LmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7CisKKyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVu
dCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW5pdFhFdmVudChYRXZlbnQqIHhFdmVudCkKK3sK
KyAgICBtZW1zZXQoeEV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7CisKKyAgICB4RXZlbnQtPnhh
bnkuc2VyaWFsID0gMDsgLy8gd2UgYXJlIHVuYXdhcmUgb2YgdGhlIGxhc3QgcmVxdWVzdCBwcm9j
ZXNzZWQgYnkgWCBTZXJ2ZXIKKyAgICB4RXZlbnQtPnhhbnkuc2VuZF9ldmVudCA9IGZhbHNlOwor
ICAgIHhFdmVudC0+eGFueS5kaXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxheShtX3BhcmVudEZyYW1l
LmdldCgpKTsKKworICAgIC8vIE1vemlsbGEgYWxzbyBzZW5kcyBOb25lIGhlcmUgZm9yIHdpbmRv
d2xlc3MgcGx1Z2lucy4gU2VlIG5zT2JqZWN0RnJhbWUuY3BwIGluIHRoZSBNb3ppbGxhIHNvdXJj
ZXMuCisgICAgLy8gVGhpcyBtZXRob2QgYWxzbyBzZXRzIHVwIEZvY3VzSW4gYW5kIEZvY3VzT3V0
IGV2ZW50cyBmb3Igd2luZG93cyBwbHVnaW5zLCBidXQgTW96aWxsYSBkb2Vzbid0CisgICAgLy8g
ZXZlbiBzZW5kIHRoZXNlIHR5cGVzIG9mIGV2ZW50cyB0byB3aW5kb3dlZCBwbHVnaW5zLiBJbiB0
aGUgZnV0dXJlLCBpdCBtYXkgYmUgZ29vZCB0byBvbmx5CisgICAgLy8gc2VuZCB0aGVtIHRvIHdp
bmRvd2xlc3MgcGx1Z2lucy4KKyAgICB4RXZlbnQtPnhhbnkud2luZG93ID0gTm9uZTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVn
aW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpIHsKKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2lu
SWNvbihjb250ZXh0LCByZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChj
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldE5Q
V2luZG93SWZOZWVkZWQoKTsKKworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghbV9kcmF3YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGlzcGxh
eSogZGlzcGxheSA9IGdldFBsdWdpbkRpc3BsYXkobnVsbHB0cik7CisgICAgY29uc3QgYm9vbCBz
eW5jWCA9IG1fcGx1Z2luRGlzcGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0gZGlzcGxheTsKKwor
ICAgIEludFJlY3QgZXhwb3NlZFJlY3QocmVjdCk7CisgICAgZXhwb3NlZFJlY3QuaW50ZXJzZWN0
KGZyYW1lUmVjdCgpKTsKKyAgICBleHBvc2VkUmVjdC5tb3ZlKC1mcmFtZVJlY3QoKS54KCksIC1m
cmFtZVJlY3QoKS55KCkpOworCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZHJhd2FibGVT
dXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShkaXNwbGF5LAorICAg
ICAgICBtX2RyYXdhYmxlLCBtX3Zpc3VhbCwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93
UmVjdC5oZWlnaHQoKSkpOworCisgICAgaWYgKG1faXNUcmFuc3BhcmVudCkgeworICAgICAgICAv
LyBJZiB3ZSBoYXZlIGEgMzIgYml0IGRyYXdhYmxlIGFuZCB0aGUgcGx1Z2luIHdhbnRzIHRyYW5z
cGFyZW5jeSwKKyAgICAgICAgLy8gd2UnbGwgY2xlYXIgdGhlIGV4cG9zZWQgYXJlYSB0byB0cmFu
c3BhcmVudCBmaXJzdC4gT3RoZXJ3aXNlLAorICAgICAgICAvLyB3ZSdkIGVuZCB1cCB3aXRoIGp1
bmsgaW4gdGhlcmUgZnJvbSB0aGUgbGFzdCBwYWludCwgb3IsIHdvcnNlLAorICAgICAgICAvLyB1
bmluaXRpYWxpemVkIGRhdGEuCisgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShkcmF3YWJsZVN1cmZhY2UuZ2V0KCkpKTsKKworICAgICAgICBpZiAoIShj
YWlyb19zdXJmYWNlX2dldF9jb250ZW50KGRyYXdhYmxlU3VyZmFjZS5nZXQoKSkgJiBDQUlST19D
T05URU5UX0FMUEhBKSkgeworICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBmYWtlIGl0IHdoZW4g
d2UgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIG9uIG91cgorICAgICAgICAgICAgLy8gcGl4
bWFwLiBJZiB0aGF0J3Mgbm90IHBvc3NpYmxlLCBhdCBsZWFzdCBjbGVhciB0aGUgd2luZG93IHRv
CisgICAgICAgICAgICAvLyBhdm9pZCBkcmF3aW5nIGFydGlmYWN0cy4KKworICAgICAgICAgICAg
Ly8gVGhpcyBXb3VsZCBub3Qgd29yayB3aXRob3V0IGRvdWJsZSBidWZmZXJpbmcsIGJ1dCB3ZSBh
bHdheXMgdXNlIGl0LgorICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdl
dCgpLCBjYWlyb19nZXRfZ3JvdXBfdGFyZ2V0KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5j
cigpKSwKKyAgICAgICAgICAgICAgICAtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55
KCkpOworICAgICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVS
QVRPUl9TT1VSQ0UpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworCisgICAgICAgIGNhaXJvX3Jl
Y3RhbmdsZShjci5nZXQoKSwgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCksCisgICAg
ICAgICAgICBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSk7CisgICAg
ICAgIGNhaXJvX2ZpbGwoY3IuZ2V0KCkpOworICAgIH0KKworICAgIFhFdmVudCB4ZXZlbnQ7Cisg
ICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZihYRXZlbnQpKTsKKyAgICBYR3JhcGhpY3NFeHBv
c2VFdmVudCYgZXhwb3NlRXZlbnQgPSB4ZXZlbnQueGdyYXBoaWNzZXhwb3NlOworICAgIGV4cG9z
ZUV2ZW50LnR5cGUgPSBHcmFwaGljc0V4cG9zZTsKKyAgICBleHBvc2VFdmVudC5kaXNwbGF5ID0g
ZGlzcGxheTsKKyAgICBleHBvc2VFdmVudC5kcmF3YWJsZSA9IG1fZHJhd2FibGU7CisgICAgZXhw
b3NlRXZlbnQueCA9IGV4cG9zZWRSZWN0LngoKTsKKyAgICBleHBvc2VFdmVudC55ID0gZXhwb3Nl
ZFJlY3QueSgpOworICAgIGV4cG9zZUV2ZW50LndpZHRoID0gZXhwb3NlZFJlY3QueCgpICsgZXhw
b3NlZFJlY3Qud2lkdGgoKTsgLy8gZmxhc2ggYnVnPyBpdCB0aGlua3Mgd2lkdGggaXMgdGhlIHJp
Z2h0IGluIHRyYW5zcGFyZW50IG1vZGUKKyAgICBleHBvc2VFdmVudC5oZWlnaHQgPSBleHBvc2Vk
UmVjdC55KCkgKyBleHBvc2VkUmVjdC5oZWlnaHQoKTsgLy8gZmxhc2ggYnVnPyBpdCB0aGlua3Mg
aGVpZ2h0IGlzIHRoZSBib3R0b20gaW4gdHJhbnNwYXJlbnQgbW9kZQorCisgICAgZGlzcGF0Y2hO
UEV2ZW50KHhldmVudCk7CisKKyAgICBpZiAoc3luY1gpCisgICAgICAgIFhTeW5jKG1fcGx1Z2lu
RGlzcGxheSwgZmFsc2UpOyAvLyBzeW5jIGNoYW5nZXMgYnkgcGx1Z2luCisKKyAgICBjYWlyb190
KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgIGNhaXJvX3NhdmUo
Y3IpOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBkcmF3YWJsZVN1cmZhY2Uu
Z2V0KCksIGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpKTsKKworICAgIGNhaXJvX3Jl
Y3RhbmdsZShjciwgZnJhbWVSZWN0KCkueCgpICsgZXhwb3NlZFJlY3QueCgpLCBmcmFtZVJlY3Qo
KS55KCkgKyBleHBvc2VkUmVjdC55KCksIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0
LmhlaWdodCgpKTsKKyAgICBjYWlyb19jbGlwKGNyKTsKKworICAgIGlmIChtX2lzVHJhbnNwYXJl
bnQpCisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfT1ZFUik7
CisgICAgZWxzZQorICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9S
X1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQoY3IpOworCisgICAgY2Fpcm9fcmVzdG9yZShjcik7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKK3sK
KyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOworCisgICAgaWYgKHBhcmVudCkKKyAgICAg
ICAgaW5pdCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJ
bnRSZWN0JikKK3sKKyAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dJ
Zk5lZWRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQor
eworICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgIXBhcmVudCgpIHx8ICFtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+c2V0d2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgcGx1
Z2luIGRpZG4ndCBsb2FkIHN1Y2Vzc2Z1bGx5LCBubyBwb2ludCBpbiBjYWxsaW5nIHNldHdpbmRv
dworICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIE9uIFVuaXgsIG9ubHkgY2FsbCBwbHVnaW4ncyBzZXR3
aW5kb3cgaWYgaXQncyBmdWxsLXBhZ2Ugb3Igd2luZG93ZWQKKyAgICBpZiAobV9tb2RlICE9IE5Q
X0ZVTEwgJiYgbV9tb2RlICE9IE5QX0VNQkVEKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBD
aGVjayBpZiB0aGUgcGxhdGZvcm1QbHVnaW5XaWRnZXQgc3RpbGwgZXhpc3RzCisgICAgaWYgKG1f
aXNXaW5kb3dlZCAmJiAhcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG1fY2xpcFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElmIHdpZHRoIG9y
IGhlaWdodCBhcmUgbnVsbCwgc2V0IHRoZSBjbGlwUmVjdCB0byBudWxsLAorICAgICAgICAvLyBp
bmRpY2F0aW5nIHRoYXQgdGhlIHBsdWdpbiBpcyBub3QgdmlzaWJsZS9zY3JvbGxlZCBvdXQuCisg
ICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QucmlnaHQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7
CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gMDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBDbGlwcGluZyByZWN0YW5nbGUgb2YgdGhlIHBsdWctaW47IHRoZSBvcmlnaW4g
aXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZHJhd2FibGUgb3Igd2luZG93LiAKKyAgICAg
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gbV9ucFdpbmRvdy54ICsgbV9jbGlwUmVjdC54
KCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gbV9ucFdpbmRvdy55ICsgbV9j
bGlwUmVjdC55KCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX25wV2lu
ZG93LnggKyBtX2NsaXBSZWN0LngoKSArIG1fY2xpcFJlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX25wV2luZG93LnkgKyBtX2NsaXBSZWN0LnkoKSAr
IG1fY2xpcFJlY3QuaGVpZ2h0KCk7CisgICAgfQorCisgICAgLy8gRkxBU0ggV09SS0FST1VORDog
T25seSBzZXQgaW5pdGlhbGx5LiBNdWx0aXBsZSBjYWxscyB0bworICAgIC8vIHNldE5QV2luZG93
KCkgY2F1c2UgdGhlIHBsdWdpbiB0byBjcmFzaCBpbiB3aW5kb3dlZCBtb2RlLgorICAgIGlmICgh
bV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENhbGxTZXRXaW5kb3dN
b3JlVGhhbk9uY2UpIHx8ICFtX2lzV2luZG93ZWQKKyAgICAgICAgfHwgbV9ucFdpbmRvdy53aWR0
aCA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEpIHx8IG1fbnBXaW5kb3cuaGVpZ2h0ID09IHN0
YXRpY19jYXN0PHVpbnQzMl90PigtMSkpIHsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IG1f
d2luZG93UmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IG1fd2luZG93
UmVjdC5oZWlnaHQoKTsKKyAgICB9CisKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7
CisgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9u
cFdpbmRvdyk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisKKyAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAg
ICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oR1RLKQorICAgIC8vIEd0a1h0QmluIHdpbGwgY2Fs
bCBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gaXQgaGVy
ZS4KKyAgICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgZ3RrX3h0YmluX3NldF9wb3Np
dGlvbihHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSksIG1fd2luZG93UmVjdC54KCks
IG1fd2luZG93UmVjdC55KCkpOworICAgICAgICBndGtfeHRiaW5fcmVzaXplKHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kZWxheWVkQWxsb2NhdGlvbiA9IG1f
d2luZG93UmVjdDsKKyAgICB1cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOworI2VuZGlm
Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221111</attachid>
            <date>2014-01-14 00:02:45 -0800</date>
            <delta_ts>2014-02-05 19:30:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70592-20140114170243.patch</filename>
            <type>text/plain</type>
            <size>37340</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxOTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWEyNWYzNWI0ZmFjYmI3
ODQwMWRkMmM3N2I2NmQ1ZDM1ZjJjMDhkYy4uMWViOTM3MmIxN2U4NTM1YzhmY2M3NDM3YmNkYWJh
NzNlNGM5YjQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE0LTAxLTE0ICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtHVEtdIFNo
YXJlIHBsdWdpbidzIGltcGxlbWVudGF0aW9uIGJldHdlZW4gRUZMIGFuZCBHdGsgcG9ydHMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lcmdlIGNvbW1v
biBsb2dpY3Mgb2YgUGx1Z2luVmlld0d0ay5jcHAgYW5kIFBsdWdpblZpZXdFZmwuY3BwIHRvIFBs
dWdpblZpZXdYMTEuY3BwLgorICAgICAgICBTbywgdGhpcyBwYXRjaCBpbXByb3ZlcyB0aGUgd2lu
ZG93bGVzcyBwbHVnaW4gc3VwcG9ydCBmb3IgdGhlIEVGTCBwb3J0LgorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06IEFkZCBpbmNsdWRlIHBhdGggZm9yIGd0azJ4dGJpbi5oIGhlYWRlciBmaWxl
LgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZGVkIFBsdWdpblZpZXdYMTEuY3Bw
IGludG8gc291cmNlIGxpc3RzLgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBEaXR0by4K
KyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogRGl0dG8uCisgICAgICAgICogcGx1Z2lucy9Q
bHVnaW5WaWV3Lmg6IEFkZGVkIGdldFJvb3RXaW5kb3cgYW5kIGdldFBsdWdpbkRpc3BseSB3aGlj
aCBpbXBsZW1lbnQgcGxhdGZvcm0gc3BlY2lmaWMgY29kZS4KKyAgICAgICAgKiBwbHVnaW5zL2Vm
bC9QbHVnaW5WaWV3RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmdldFJv
b3RXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1
ZVN0YXRpYyk6IFR1cm4gb24gTlBOVlN1cHBvcnRzV2luZG93bGVzcyBzdXBwb3J0LgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0UGx1Z2luRGlzcGxheSk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKiBwbHVnaW5zL2d0ay9Q
bHVnaW5WaWV3R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmdldFJvb3RX
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6c2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0WE1vdGlvbkV2ZW50U3BlY2lmaWNGaWVsZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRQbHVnaW5EaXNwbGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAqIHBsdWdpbnMveDExL1Bs
dWdpblZpZXdYMTEuY3BwOiBNb3ZlZCBjb21tb24gbG9naWNzIGZyb20gUGx1Z2luVmlld0d0ay5j
cHAKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OmludmFsaWRhdGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
aGFuZGxlRm9jdXNPdXRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppbml0
WEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisKIDIwMTQtMDEtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgaU9TIFdlYkNvcmUgYnVpbGQgZml4ZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KaW5kZXggMjNjODk0ZDE0NGRmYjIzYmM0NDA5YTJhOWEyYjU5MmYwYWI3
ZmM3Ny4uOTAxZmNmNmVkYjE0NzBlNmUxZDEwNmQ3NGFlZWE2OGFjN2U5ZTI0YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTkzLDYgKzkzLDcgQEAgd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pY3UgXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbiBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGx1Z2lucyBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsgXAog
CS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luIFwKIAktSSQoc3JjZGlyKS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9saW5lIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDg4NTdjYWNj
ZjFmMmIyNTc0Y2YzNTcxNDNhOWIyNTlmMjg3YzMzZWMuLmI5OTRlY2FjZjM0MTUzMGQzYTRiYzI4
MmEwYzIwZjA5OGNhYzE0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjMw
NCw3ICs2MzA0LDggQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZp
ZXdHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAorCVNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3gxMS9QbHVnaW5WaWV3WDExLmNwcAogcGxhdGZvcm1ndGtfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEJhY2tpbmdTdG9yZUd0a1gxMS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0QmFja2luZ1N0b3JlR3RrWDExLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA3MTA1ZWM0YmNmMDhiODliZTUxMGViN2QyMDIyOTgw
OWEwOGIwYjM2Li5jZjdmODkzMmMxMjY2YmQ4MDAwOWVhNzVjMzM5YmQwNGIyYjMyNmQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTkxLDYgKzE5MSw4IEBAIGlmIChFTkFCTEVfTkVU
U0NBUEVfUExVR0lOX0FQSSkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAg
ICAgcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKICAgICAgICAgcGx1Z2lucy9lZmwv
UGx1Z2luVmlld0VmbC5jcHAKKworICAgICAgICBwbHVnaW5zL3gxMS9QbHVnaW5WaWV3WDExLmNw
cAogICAgICkKIGVuZGlmICgpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggYWJjYTg5
ODA2N2NhNjgzOTBmNjU4MmJkYjMyMDg1NWRmMTg1OGI0ZS4uZmQ3MjM1NTc3NTUzYzRlMWFkMTE4
Mzc4ZTM2NzAzOWRkMjU1ZDA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTI4Niw2
ICsyODYsOCBAQCBpZiAoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgICAgIHBsdWdp
bnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCiAgICAgICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZp
ZXdHdGsuY3BwCiAgICAgICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCisKKyAgICAgICAgcGx1
Z2lucy94MTEvUGx1Z2luVmlld1gxMS5jcHAKICAgICApCiBlbHNlICgpCiAgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IDU2
MmUyZGJmODc3MTNmMDQ1MzMyNzI2OTc3MjUzYTJkY2EwZjJiZjMuLjJlZGMxNmIwZDNjODhmOGU2
MmE1OTQ5ZGQxN2Q1YWNlZGY2YmFlNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5o
CkBAIC01Nyw2ICs1NywxMSBAQCB0eXBlZGVmIFBsYXRmb3JtV2lkZ2V0IFBsYXRmb3JtUGx1Z2lu
V2lkZ2V0OwogdHlwZWRlZiBzdHJ1Y3QgX0d0a1NvY2tldCBHdGtTb2NrZXQ7CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKFgxMSkKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7Cit0eXBlZGVm
IHN0cnVjdCBfWERpc3BsYXkgRGlzcGxheTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgSlNDIHsKICAg
ICBuYW1lc3BhY2UgQmluZGluZ3MgewogICAgICAgICBjbGFzcyBJbnN0YW5jZTsKQEAgLTY1LDYg
KzcwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBGcmFtZTsKKyAgICBjbGFzcyBGcmFtZVZpZXc7CiAgICAgY2xhc3MgSW1hZ2U7CiAgICAgY2xh
c3MgSFRNTFBsdWdJbkVsZW1lbnQ7CiAgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKQEAgLTIzNCw2
ICsyNDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAgIHZvaWQga2Vl
cEFsaXZlKCk7CiAKKyNpZiBQTEFURk9STShYMTEpCisgICAgICAgIHN0YXRpYyBEaXNwbGF5KiBn
ZXRQbHVnaW5EaXNwbGF5KEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBXaW5kb3cgZ2V0Um9vdFdp
bmRvdyhGcmFtZSogcGFyZW50RnJhbWUpOworI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAg
ICBQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBh
Y2thZ2UqLCBIVE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAppbmRleCBkYjhlNjg3YmY0N2ExZmE0YmMx
Y2YzZWY3NjQ5M2NmNzhkMGRmOTJjLi5kZWFmZWNjNjAyN2JlZTAyZjkyOTVhMmRkN2QxOTZiZDI3
YTJjMTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3
RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNw
cApAQCAtMyw3ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1
dG8gTm9raWEgZGUgVGVjbm9sb2dpYQogICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE0IFNhbXN1bmcgRWxlY3Ryb25p
Y3MKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTEgKzMyLDggQEAKIAog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBs
dWdJbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAiSlNET01X
aW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgpAQCAtNTIsMzMgKzQ5LDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotYm9v
bCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCitXaW5kb3cgUGx1
Z2luVmlldzo6Z2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUpCiB7Ci0gICAgaWYgKCFt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLQotICAgIGJvb2wgYWNjZXB0ZWQgPSBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKLQotICAg
IHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KDApOwotICAgIHJldHVybiBhY2NlcHRlZDsKLX0KLQotI2lmIGRlZmluZWQoWFBfVU5J
WCkKLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2
YXNfZ2V0KHBhcmVudEZyYW1lLT52aWV3KCktPmV2YXNPYmplY3QoKSk7CisgICAgRWNvcmVfRXZh
cyogZWNvcmVFdmFzID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8V2luZG93PihlY29yZV9ldmFzX3dpbmRvd19nZXQoZWNvcmVFdmFzKSk7
CiB9Ci0jZW5kaWYKIAogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJv
YXJkRXZlbnQqKQogewpAQCAtMTE3LDExICs5Myw2IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
TW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CiB9CiAKLXZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKGJv
b2wgZm9jdXNlZCkKIHsKICAgICBpZiAoZm9jdXNlZCkKQEAgLTE0NCwyOSArMTE1LDYgQEAgdm9p
ZCBQbHVnaW5WaWV3OjpoaWRlKCkKICAgICBXaWRnZXQ6OmhpZGUoKTsKIH0KIAotdm9pZCBQbHVn
aW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2lu
SWNvbihjb250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogcGFyZW50KQotewotICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7Ci0KLSAg
ICBpZiAocGFyZW50KQotICAgICAgICBpbml0KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0
TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCi17Ci19Ci0KIHZvaWQg
UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCiB7CiAgICAgV2lkZ2V0
OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOwpAQCAtMjIxLDcgKzE2OSw3IEBAIGJvb2wgUGx1
Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUsIE5QRXJyCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBOUE5WU3Vw
cG9ydHNXaW5kb3dsZXNzOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0g
ZmFsc2U7CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwogICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CiAgICAgICAgIHJldHVybiB0cnVlOwogCkBA
IC0zMTIsMTkgKzI2MCw5IEBAIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKICAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7
CiB9CiAKLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQotewot
ICAgIGlmICghcmVjdCkgewotICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpbnZhbGlkYXRlUmVjdChJbnRSZWN0KHJlY3QtPmxlZnQsIHJlY3QtPnRv
cCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApKTsK
LX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKQorRGlzcGxh
eSogUGx1Z2luVmlldzo6Z2V0UGx1Z2luRGlzcGxheShGcmFtZSopCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGlzcGxheSo+KGVjb3JlX3hfZGlzcGxh
eV9nZXQoKSk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQpAQCAtMzM3LDcg
KzI3NSw0MSBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQogICAgIEFTU0VSVCht
X2lzU3RhcnRlZCk7CiAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1
Y2Nlc3NmdWxseSk7CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIHNldENhbGxp
bmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1
ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKKyAg
ICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KDApOworICAgIH0KKworICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOwor
ICAgIG1fcGx1Z2luRGlzcGxheSA9IGdldFBsdWdpbkRpc3BsYXkobnVsbHB0cik7CisKKyAgICBz
aG93KCk7CisKKyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3cyA9IG5ldyBOUFNldFdp
bmRvd0NhbGxiYWNrU3RydWN0KCk7CisgICAgd3MtPnR5cGUgPSAwOworCisgICAgbV9ucFdpbmRv
dy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAw
OyAvLyBOb3QgdXNlZD8KKworICAgIFNjcmVlbiogc2NyZWVuID0gc3RhdGljX2Nhc3Q8U2NyZWVu
Kj4oZWNvcmVfeF9kZWZhdWx0X3NjcmVlbl9nZXQoKSk7CisgICAgbV92aXN1YWwgPSBzdGF0aWNf
Y2FzdDxWaXN1YWwqPihlY29yZV94X2RlZmF1bHRfdmlzdWFsX2dldChtX3BsdWdpbkRpc3BsYXks
IHNjcmVlbikpOworICAgIG1fY29sb3JtYXAgPSBlY29yZV94X2RlZmF1bHRfY29sb3JtYXBfZ2V0
KG1fcGx1Z2luRGlzcGxheSwgc2NyZWVuKTsKKworICAgIHdzLT5kZXB0aCA9IGVjb3JlX3hfZGVm
YXVsdF9kZXB0aF9nZXQobV9wbHVnaW5EaXNwbGF5LCBzY3JlZW4pOworICAgIHdzLT5kaXNwbGF5
ID0gbV9wbHVnaW5EaXNwbGF5OworICAgIHdzLT52aXN1YWwgPSBtX3Zpc3VhbDsKKyAgICB3cy0+
Y29sb3JtYXAgPSBtX2NvbG9ybWFwOworCisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CisK
KyAgICAvLyBUT0RPIHJlbW92ZSBpbiBmYXZvciBvZiBudWxsIGV2ZW50cywgbGlrZSBtYWMgcG9y
dD8KKyAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZl
ckZpcnN0U2V0V2luZG93Q2FsbCkpKQorICAgICAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsgLy8g
d2FzOiBzZXROUFdpbmRvd0lmTmVlZGVkKCksIGJ1dCB0aGlzIGRvZXNuJ3QgcHJvZHVjZSAweDAg
cmVjdHMgYXQgZmlyc3QgZ28KKwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCmluZGV4IDBiYmJlZTNmZWY2NzQ1N2M5
NGNlYjI4OTYxNjA2NDZlMjU5ZDg0OTkuLjdhMTZmMjE4NDk4NGQxMjNjNGQ2YzU0ODNiODI5YThj
NTRmNzg2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZp
ZXdHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsu
Y3BwCkBAIC01Miw3ICs1Miw2IEBACiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKQEAg
LTc0LDEwICs3Myw5IEBACiAjZGVmaW5lIFN0cmluZyBYdFN0cmluZ1R5cGUKICNpbmNsdWRlICJS
ZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgImd0azJ4dGJpbi5oIgotI2RlZmluZSBCb29sIGludCAv
LyB0aGlzIGdvdCB1bmRlZmluZWQgc29tZXdoZXJlCisjZGVmaW5lIEJvb2wgaW50IC8vIHRoaXMg
YmVjYW1lIHVuZGVmaW5lZCBpbiBucHJ1bnRpbWVfaW50ZXJuYWwuaAogI2RlZmluZSBTdGF0dXMg
aW50IC8vIGRpdHRvCiAjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgotI2luY2x1
ZGUgPGNhaXJvLXhsaWIuaD4KICNpbmNsdWRlIDxnZGsvZ2RreC5oPgogCiB1c2luZyBKU0M6OkV4
ZWNTdGF0ZTsKQEAgLTkzLDY1ICs5MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50
KE5QRXZlbnQmIGV2ZW50KQotewotICAgIC8vIHNhbml0eSBjaGVjawotICAgIGlmICghbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwot
ICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0KLSAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwotCi0gICAgc2V0
Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcoMCk7Ci0gICAgcmV0dXJuIGFjY2VwdGVkOwotfQotCi1zdGF0aWMgV2luZG93IGdldFJvb3RX
aW5kb3coRnJhbWUqIHBhcmVudEZyYW1lKQorV2luZG93IFBsdWdpblZpZXc6OmdldFJvb3RXaW5k
b3coRnJhbWUqIHBhcmVudEZyYW1lKQogewogICAgIEd0a1dpZGdldCogcGFyZW50V2lkZ2V0ID0g
cGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsK
ICAgICBHZGtTY3JlZW4qIGdzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4ocGFyZW50V2lk
Z2V0KTsKICAgICByZXR1cm4gR0RLX1dJTkRPV19YV0lORE9XKGdka19zY3JlZW5fZ2V0X3Jvb3Rf
d2luZG93KGdzY3JlZW4pKTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRn
ZXQoKQotewotICAgIGlmICghcGFyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0
b0ZyYW1lVmlldyhwYXJlbnQoKSk7Ci0KLSAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dp
bmRvd1JlY3Q7Ci0gICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7Ci0KLSAgICBt
X3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZVJl
Y3QoKS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX2NsaXBSZWN0ID0g
d2luZG93Q2xpcFJlY3QoKTsKLSAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCks
IC1tX3dpbmRvd1JlY3QueSgpKTsKLQotICAgIGlmIChtX3dpbmRvd1JlY3QgPT0gb2xkV2luZG93
UmVjdCAmJiBtX2NsaXBSZWN0ID09IG9sZENsaXBSZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIW1faXNXaW5kb3dlZCAmJiAhbV93aW5kb3dSZWN0LmlzRW1w
dHkoKSkgewotICAgICAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVko
Z2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgICAgIGlmIChtX2RyYXdhYmxlKQotICAg
ICAgICAgICAgWEZyZWVQaXhtYXAoZGlzcGxheSwgbV9kcmF3YWJsZSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgbV9kcmF3YWJsZSA9IFhDcmVhdGVQaXhtYXAoZGlzcGxheSwgZ2V0Um9vdFdpbmRv
dyhtX3BhcmVudEZyYW1lLmdldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0Kilt
X25wV2luZG93LndzX2luZm8pLT5kZXB0aCk7Ci0gICAgICAgIFhTeW5jKGRpc3BsYXksIGZhbHNl
KTsgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZlciBrbm93cyBhYm91dCB0aGUgRHJhd2FibGUK
LSAgICB9Ci0KLSAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci19Ci0KIHZvaWQgUGx1Z2luVmll
dzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQogewogICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpID09IHBsYXRmb3JtV2lkZ2V0KCkpOwpAQCAtMTcyLDk2ICsxMTgsNiBAQCB2b2lkIFBs
dWdpblZpZXc6OmhpZGUoKQogICAgIFdpZGdldDo6aGlkZSgpOwogfQogCi12b2lkIFBsdWdpblZp
ZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkgewotICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQs
IHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNvbnRleHQtPnBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0TlBXaW5kb3dJZk5lZWRl
ZCgpOwotCi0gICAgaWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFtX2RyYXdhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0g
R0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgY29u
c3QgYm9vbCBzeW5jWCA9IG1fcGx1Z2luRGlzcGxheSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0gZGlz
cGxheTsKLQotICAgIEludFJlY3QgZXhwb3NlZFJlY3QocmVjdCk7Ci0gICAgZXhwb3NlZFJlY3Qu
aW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKLSAgICBleHBvc2VkUmVjdC5tb3ZlKC1mcmFtZVJlY3Qo
KS54KCksIC1mcmFtZVJlY3QoKS55KCkpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
ZHJhd2FibGVTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShkaXNw
bGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZHJhd2FibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV92aXN1YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV93aW5kb3dSZWN0LndpZHRoKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93aW5kb3dSZWN0
LmhlaWdodCgpKSk7Ci0KLSAgICBpZiAobV9pc1RyYW5zcGFyZW50KSB7Ci0gICAgICAgIC8vIElm
IHdlIGhhdmUgYSAzMiBiaXQgZHJhd2FibGUgYW5kIHRoZSBwbHVnaW4gd2FudHMgdHJhbnNwYXJl
bmN5LAotICAgICAgICAvLyB3ZSdsbCBjbGVhciB0aGUgZXhwb3NlZCBhcmVhIHRvIHRyYW5zcGFy
ZW50IGZpcnN0LiAgT3RoZXJ3aXNlLAotICAgICAgICAvLyB3ZSdkIGVuZCB1cCB3aXRoIGp1bmsg
aW4gdGhlcmUgZnJvbSB0aGUgbGFzdCBwYWludCwgb3IsIHdvcnNlLAotICAgICAgICAvLyB1bmlu
aXRpYWxpemVkIGRhdGEuCi0gICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShkcmF3YWJsZVN1cmZhY2UuZ2V0KCkpKTsKLQotICAgICAgICBpZiAoIShjYWly
b19zdXJmYWNlX2dldF9jb250ZW50KGRyYXdhYmxlU3VyZmFjZS5nZXQoKSkgJiBDQUlST19DT05U
RU5UX0FMUEhBKSkgewotICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBmYWtlIGl0IHdoZW4gd2Ug
ZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIG9uIG91cgotICAgICAgICAgICAgLy8gcGl4bWFw
LiAgSWYgdGhhdCdzIG5vdCBwb3NzaWJsZSwgYXQgbGVhc3QgY2xlYXIgdGhlIHdpbmRvdyB0bwot
ICAgICAgICAgICAgLy8gYXZvaWQgZHJhd2luZyBhcnRpZmFjdHMuCi0KLSAgICAgICAgICAgIC8v
IFRoaXMgV291bGQgbm90IHdvcmsgd2l0aG91dCBkb3VibGUgYnVmZmVyaW5nLCBidXQgd2UgYWx3
YXlzIHVzZSBpdC4KLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQo
KSwgY2Fpcm9fZ2V0X2dyb3VwX3RhcmdldChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1fd2luZG93UmVjdC54
KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihj
ci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsK
LQotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IuZ2V0KCksIGV4cG9zZWRSZWN0LngoKSwgZXhw
b3NlZFJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3Qud2lkdGgo
KSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBjYWlyb19maWxsKGNyLmdldCgpKTsK
LSAgICB9Ci0KLSAgICBYRXZlbnQgeGV2ZW50OwotICAgIG1lbXNldCgmeGV2ZW50LCAwLCBzaXpl
b2YoWEV2ZW50KSk7Ci0gICAgWEdyYXBoaWNzRXhwb3NlRXZlbnQmIGV4cG9zZUV2ZW50ID0geGV2
ZW50LnhncmFwaGljc2V4cG9zZTsKLSAgICBleHBvc2VFdmVudC50eXBlID0gR3JhcGhpY3NFeHBv
c2U7Ci0gICAgZXhwb3NlRXZlbnQuZGlzcGxheSA9IGRpc3BsYXk7Ci0gICAgZXhwb3NlRXZlbnQu
ZHJhd2FibGUgPSBtX2RyYXdhYmxlOwotICAgIGV4cG9zZUV2ZW50LnggPSBleHBvc2VkUmVjdC54
KCk7Ci0gICAgZXhwb3NlRXZlbnQueSA9IGV4cG9zZWRSZWN0LnkoKTsKLSAgICBleHBvc2VFdmVu
dC53aWR0aCA9IGV4cG9zZWRSZWN0LngoKSArIGV4cG9zZWRSZWN0LndpZHRoKCk7IC8vIGZsYXNo
IGJ1Zz8gaXQgdGhpbmtzIHdpZHRoIGlzIHRoZSByaWdodCBpbiB0cmFuc3BhcmVudCBtb2RlCi0g
ICAgZXhwb3NlRXZlbnQuaGVpZ2h0ID0gZXhwb3NlZFJlY3QueSgpICsgZXhwb3NlZFJlY3QuaGVp
Z2h0KCk7IC8vIGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIGhlaWdodCBpcyB0aGUgYm90dG9tIGluIHRy
YW5zcGFyZW50IG1vZGUKLQotICAgIGRpc3BhdGNoTlBFdmVudCh4ZXZlbnQpOwotCi0gICAgaWYg
KHN5bmNYKQotICAgICAgICBYU3luYyhtX3BsdWdpbkRpc3BsYXksIGZhbHNlKTsgLy8gc3luYyBj
aGFuZ2VzIGJ5IHBsdWdpbgotCi0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKTsKLSAgICBjYWlyb19zYXZlKGNyKTsKLQotICAgIGNhaXJvX3NldF9zb3Vy
Y2Vfc3VyZmFjZShjciwgZHJhd2FibGVTdXJmYWNlLmdldCgpLCBmcmFtZVJlY3QoKS54KCksIGZy
YW1lUmVjdCgpLnkoKSk7Ci0KLSAgICBjYWlyb19yZWN0YW5nbGUoY3IsCi0gICAgICAgICAgICAg
ICAgICAgIGZyYW1lUmVjdCgpLngoKSArIGV4cG9zZWRSZWN0LngoKSwgZnJhbWVSZWN0KCkueSgp
ICsgZXhwb3NlZFJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICBleHBvc2VkUmVjdC53aWR0
aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSk7Ci0gICAgY2Fpcm9fY2xpcChjcik7Ci0KLSAgICBp
ZiAobV9pc1RyYW5zcGFyZW50KQotICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJP
X09QRVJBVE9SX09WRVIpOwotICAgIGVsc2UKLSAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNy
LCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3BhaW50KGNyKTsKLQotICAgIGNh
aXJvX3Jlc3RvcmUoY3IpOwotfQotCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZl
bnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKQEAgLTMxMSwyNyAr
MTY3LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRFdmVudFN0YXRlKE1vdXNlRXZlbnQq
IGV2ZW50KQogICAgIHJldHVybiBzdGF0ZTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3Ojppbml0WEV2
ZW50KFhFdmVudCogeEV2ZW50KQotewotICAgIG1lbXNldCh4RXZlbnQsIDAsIHNpemVvZihYRXZl
bnQpKTsKLQotICAgIHhFdmVudC0+eGFueS5zZXJpYWwgPSAwOyAvLyB3ZSBhcmUgdW5hd2FyZSBv
ZiB0aGUgbGFzdCByZXF1ZXN0IHByb2Nlc3NlZCBieSBYIFNlcnZlcgotICAgIHhFdmVudC0+eGFu
eS5zZW5kX2V2ZW50ID0gZmFsc2U7Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBtX3BhcmVudEZy
YW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgeEV2
ZW50LT54YW55LmRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShndGtfd2lkZ2V0X2dldF9k
aXNwbGF5KHdpZGdldCkpOwotCi0gICAgLy8gTW96aWxsYSBhbHNvIHNlbmRzIE5vbmUgaGVyZSBm
b3Igd2luZG93bGVzcyBwbHVnaW5zLiBTZWUgbnNPYmplY3RGcmFtZS5jcHAgaW4gdGhlIE1vemls
bGEgc291cmNlcy4KLSAgICAvLyBUaGlzIG1ldGhvZCBhbHNvIHNldHMgdXAgRm9jdXNJbiBhbmQg
Rm9jdXNPdXQgZXZlbnRzIGZvciB3aW5kb3dzIHBsdWdpbnMsIGJ1dCBNb3ppbGxhIGRvZXNuJ3QK
LSAgICAvLyBldmVuIHNlbmQgdGhlc2UgdHlwZXMgb2YgZXZlbnRzIHRvIHdpbmRvd2VkIHBsdWdp
bnMuIEluIHRoZSBmdXR1cmUsIGl0IG1heSBiZSBnb29kIHRvIG9ubHkKLSAgICAvLyBzZW5kIHRo
ZW0gdG8gd2luZG93bGVzcyBwbHVnaW5zLgotICAgIHhFdmVudC0+eGFueS53aW5kb3cgPSBOb25l
OwotfQotCiBzdGF0aWMgdm9pZCBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQq
IHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywg
RnJhbWUqIHBhcmVudEZyYW1lKQogewogICAgIFhCdXR0b25FdmVudCYgeGJ1dHRvbiA9IHhFdmVu
dC0+eGJ1dHRvbjsKICAgICB4YnV0dG9uLnR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCA/IEJ1dHRvblByZXNzIDogQnV0dG9uUmVsZWFzZTsKLSAgICB4
YnV0dG9uLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKKyAgICB4YnV0dG9uLnJv
b3QgPSBQbHVnaW5WaWV3OjpnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKICAgICB4YnV0dG9u
LnN1YndpbmRvdyA9IDA7CiAgICAgeGJ1dHRvbi50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOwog
ICAgIHhidXR0b24ueCA9IHBvc3Rab29tUG9zLngoKTsKQEAgLTM1OCw3ICsxOTgsNyBAQCBzdGF0
aWMgdm9pZCBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91
c2VFdmVudCogZXZlbnQsIGNvbgogewogICAgIFhNb3Rpb25FdmVudCYgeG1vdGlvbiA9IHhFdmVu
dC0+eG1vdGlvbjsKICAgICB4bW90aW9uLnR5cGUgPSBNb3Rpb25Ob3RpZnk7Ci0gICAgeG1vdGlv
bi5yb290ID0gZ2V0Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7CisgICAgeG1vdGlvbi5yb290ID0g
UGx1Z2luVmlldzo6Z2V0Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7CiAgICAgeG1vdGlvbi5zdWJ3
aW5kb3cgPSAwOwogICAgIHhtb3Rpb24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKICAgICB4
bW90aW9uLnggPSBwb3N0Wm9vbVBvcy54KCk7CkBAIC0zNzQsNyArMjE0LDcgQEAgc3RhdGljIHZv
aWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91c2VF
dmVudCogZXZlbnQsIGMKIHsKICAgICBYQ3Jvc3NpbmdFdmVudCYgeGNyb3NzaW5nID0geEV2ZW50
LT54Y3Jvc3Npbmc7CiAgICAgeGNyb3NzaW5nLnR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZW92ZXJFdmVudCA/IEVudGVyTm90aWZ5IDogTGVhdmVOb3RpZnk7Ci0gICAg
eGNyb3NzaW5nLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKKyAgICB4Y3Jvc3Np
bmcucm9vdCA9IFBsdWdpblZpZXc6OmdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUpOwogICAgIHhj
cm9zc2luZy5zdWJ3aW5kb3cgPSAwOwogICAgIHhjcm9zc2luZy50aW1lID0gZXZlbnQtPnRpbWVT
dGFtcCgpOwogICAgIHhjcm9zc2luZy54ID0gcG9zdFpvb21Qb3MueSgpOwpAQCAtNDI4LDExMyAr
MjY4LDYgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2
ZW50KQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAotdm9pZCBQbHVn
aW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQotewotICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwg
bV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBYRXZlbnQgbnBFdmVudDsKLSAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsKLQot
ICAgIFhGb2N1c0NoYW5nZUV2ZW50JiBldmVudCA9IG5wRXZlbnQueGZvY3VzOwotICAgIGV2ZW50
LnR5cGUgPSA5OyAvLyBGb2N1c0luIGdldHMgdW5zZXQgc29tZXdoZXJlCi0gICAgZXZlbnQubW9k
ZSA9IE5vdGlmeU5vcm1hbDsKLSAgICBldmVudC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOwot
Ci0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6Omhh
bmRsZUZvY3VzT3V0RXZlbnQoKQotewotICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMg
IT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBYRXZlbnQgbnBFdmVudDsKLSAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsKLQotICAgIFhGb2N1
c0NoYW5nZUV2ZW50JiBldmVudCA9IG5wRXZlbnQueGZvY3VzOwotICAgIGV2ZW50LnR5cGUgPSAx
MDsgLy8gRm9jdXNPdXQgZ2V0cyB1bnNldCBzb21ld2hlcmUKLSAgICBldmVudC5tb2RlID0gTm90
aWZ5Tm9ybWFsOwotICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7Ci0KLSAgICBk
aXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50
KFNjcm9sbFZpZXcqIHBhcmVudCkKLXsKLSAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOwot
Ci0gICAgaWYgKHBhcmVudCkKLSAgICAgICAgaW5pdCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JikKLXsKLSAgICBpZiAoIW1faXNXaW5kb3dl
ZCkKLSAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OnNldE5QV2luZG93SWZOZWVkZWQoKQotewotICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgIXBhcmVu
dCgpIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBJZiB0aGUgcGx1Z2luIGRpZG4ndCBsb2FkIHN1Y2Vzc2Z1bGx5LCBubyBw
b2ludCBpbiBjYWxsaW5nIHNldHdpbmRvdwotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE9uIFVuaXgs
IG9ubHkgY2FsbCBwbHVnaW4ncyBzZXR3aW5kb3cgaWYgaXQncyBmdWxsLXBhZ2Ugb3Igd2luZG93
ZWQKLSAgICBpZiAobV9tb2RlICE9IE5QX0ZVTEwgJiYgbV9tb2RlICE9IE5QX0VNQkVEKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgcGxhdGZvcm1QbHVnaW5XaWRnZXQg
c3RpbGwgZXhpc3RzCi0gICAgaWYgKG1faXNXaW5kb3dlZCAmJiAhcGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2xpcFJlY3QuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIC8vIElmIHdpZHRoIG9yIGhlaWdodCBhcmUgbnVsbCwgc2V0IHRoZSBjbGlwUmVj
dCB0byBudWxsLAotICAgICAgICAvLyBpbmRpY2F0aW5nIHRoYXQgdGhlIHBsdWdpbiBpcyBub3Qg
dmlzaWJsZS9zY3JvbGxlZCBvdXQuCi0gICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9
IDA7Ci0gICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSAwOwotICAgICAgICBtX25w
V2luZG93LmNsaXBSZWN0LnRvcCA9IDA7Ci0gICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90
dG9tID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBDbGlwcGluZyByZWN0YW5nbGUgb2Yg
dGhlIHBsdWctaW47IHRoZSBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZHJh
d2FibGUgb3Igd2luZG93LiAKLSAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gbV9u
cFdpbmRvdy54ICsgbV9jbGlwUmVjdC54KCk7Ci0gICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
dG9wID0gbV9ucFdpbmRvdy55ICsgbV9jbGlwUmVjdC55KCk7Ci0gICAgICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QucmlnaHQgPSBtX25wV2luZG93LnggKyBtX2NsaXBSZWN0LngoKSArIG1fY2xpcFJl
Y3Qud2lkdGgoKTsKLSAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX25wV2lu
ZG93LnkgKyBtX2NsaXBSZWN0LnkoKSArIG1fY2xpcFJlY3QuaGVpZ2h0KCk7Ci0gICAgfQotCi0g
ICAgLy8gRkxBU0ggV09SS0FST1VORDogT25seSBzZXQgaW5pdGlhbGx5LiBNdWx0aXBsZSBjYWxs
cyB0bwotICAgIC8vIHNldE5QV2luZG93KCkgY2F1c2UgdGhlIHBsdWdpbiB0byBjcmFzaCBpbiB3
aW5kb3dlZCBtb2RlLgotICAgIGlmICghbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdp
blF1aXJrRG9udENhbGxTZXRXaW5kb3dNb3JlVGhhbk9uY2UpIHx8ICFtX2lzV2luZG93ZWQKLSAg
ICAgICAgfHwgbV9ucFdpbmRvdy53aWR0aCA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEpIHx8
IG1fbnBXaW5kb3cuaGVpZ2h0ID09IHN0YXRpY19jYXN0PHVpbnQzMl90PigtMSkpIHsKLSAgICAg
ICAgbV9ucFdpbmRvdy53aWR0aCA9IG1fd2luZG93UmVjdC53aWR0aCgpOwotICAgICAgICBtX25w
V2luZG93LmhlaWdodCA9IG1fd2luZG93UmVjdC5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNl
dHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbihm
YWxzZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0KLSAgICBp
ZiAoIW1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gR3RrWHRCaW4gd2ls
bCBjYWxsIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBp
dCBoZXJlLgotICAgIGlmICghbV9uZWVkc1hFbWJlZCkgewotICAgICAgICBndGtfeHRiaW5fc2V0
X3Bvc2l0aW9uKEdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSwgbV93aW5kb3dSZWN0
LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7Ci0gICAgICAgIGd0a194dGJpbl9yZXNpemUocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWln
aHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2RlbGF5ZWRBbGxvY2F0aW9u
ID0gbV93aW5kb3dSZWN0OwotICAgIHVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRDbGlwKCk7Ci19
Ci0KIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlV2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAoKQogewog
ICAgIC8vIElmIHRoZSB3aW5kb3cgaGFzIG5vdCBiZWVuIGVtYmVkZGVkIHlldCAodGhlIHBsdWcg
YWRkZWQpLCB3ZSBkZWxheSBzZXR0aW5nIGl0cyBhbGxvY2F0aW9uIHVudGlsIApAQCAtNjk2LDIz
ICs0MjksNiBAQCB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCiAgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOwogfQogCi12
b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKLXsKLSAgICBpZiAo
IXJlY3QpIHsKLSAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0
LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOwotICAgIGludmFsaWRhdGVXaW5kb3ds
ZXNzUGx1Z2luUmVjdChyKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9u
KE5QUmVnaW9uKQotewotICAgIC8vIFRPRE86IG9wdGltaXplCi0gICAgaW52YWxpZGF0ZSgpOwot
fQotCiB2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKIHsKICAgICBpZiAobV9pc1dpbmRv
d2VkKQpAQCAtNzIxLDggKzQzNywxMyBAQCB2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkK
ICAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9z
dFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7CiB9CiAKLXN0YXRpYyBEaXNwbGF5KiBn
ZXRQbHVnaW5EaXNwbGF5KCkKK0Rpc3BsYXkqIFBsdWdpblZpZXc6OmdldFBsdWdpbkRpc3BsYXko
RnJhbWUqIHBhcmVudEZyYW1lKQogeworICAgIGlmIChwYXJlbnRGcmFtZSkgeworICAgICAgICBH
dGtXaWRnZXQqIHdpZGdldCA9IHBhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCk7CisgICAgICAgIHJldHVybiBHREtfRElTUExBWV9YRElTUExBWShn
dGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpZGdldCkpOworICAgIH0KKwogICAgIC8vIFRoZSBwbHVn
aW4gdG9vbGtpdCBtaWdodCBoYXZlIGEgZGlmZmVyZW50IFggY29ubmVjdGlvbiBvcGVuLiAgU2lu
Y2Ugd2UncmUKICAgICAvLyBhIGdkay9ndGsgYXBwLCB3ZSdsbCAocHJvYmFibHk/KSBoYXZlIHRo
ZSBzYW1lIFggY29ubmVjdGlvbiBhcyBhbnkgZ2RrLWJhc2VkCiAgICAgLy8gcGx1Z2lucywgc28g
d2UgY2FuIHJldHVybiB0aGF0LiAgV2UgbWlnaHQgd2FudCB0byBhZGQgb3RoZXIgaW1wbGVtZW50
YXRpb25zIGhlcmUKQEAgLTgxNSw3ICs1MzYsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3Jt
U3RhcnQoKQogICAgICAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoZ3RrX3h0YmluX25ldyhwYWdl
Q2xpZW50LCAwKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7
Ci0gICAgICAgIG1fcGx1Z2luRGlzcGxheSA9IGdldFBsdWdpbkRpc3BsYXkoKTsKKyAgICAgICAg
bV9wbHVnaW5EaXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxheShudWxscHRyKTsKICAgICB9CiAKICAg
ICBzaG93KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3gxMS9QbHVnaW5W
aWV3WDExLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMveDExL1BsdWdpblZpZXdYMTEuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmYxMzQxODgyMzg3ZTlhZDVkNDFkNjk3ZThkZWYwNmZjODhkZjk0ZTIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3gxMS9QbHVnaW5WaWV3WDEx
LmNwcApAQCAtMCwwICsxLDMzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAgS2FrYWksIEluYy4gPGJyaWFuQGtha2FpLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKwor
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgi
CisjaW5jbHVkZSA8WDExL1guaD4KKyNpbmNsdWRlIDxjYWlyby14bGliLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0xvY2suaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNkZWZpbmUgU3RyaW5nIFh0
U3RyaW5nVHlwZQorI2luY2x1ZGUgImd0azJ4dGJpbi5oIgorI2VuZGlmCisKKyNkZWZpbmUgQm9v
bCBpbnQgLy8gdGhpcyBiZWNhbWUgdW5kZWZpbmVkIGluIG5wcnVudGltZV9pbnRlcm5hbC5oCisj
ZGVmaW5lIE5vbmUgMEwgLy8gZGl0dG8KKyNkZWZpbmUgU3RhdHVzIGludCAvLyBkaXR0bworI2lu
Y2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKK3sKKyAg
ICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgYm9vbCBhY2Nl
cHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQp
OworCisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3Vy
cmVudFBsdWdpblZpZXcoMCk7CisgICAgcmV0dXJuIGFjY2VwdGVkOworfQorCit2b2lkIFBsdWdp
blZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCit7CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHRvRnJhbWVWaWV3KHBhcmVudCgpKTsKKworICAgIEludFJl
Y3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0
ID0gbV9jbGlwUmVjdDsKKworICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5j
b250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5zaXpl
KCkpOworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3Qu
bW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYgKG1f
d2luZG93UmVjdCA9PSBvbGRXaW5kb3dSZWN0ICYmIG1fY2xpcFJlY3QgPT0gb2xkQ2xpcFJlY3Qp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2Fk
ZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9pc1dpbmRvd2Vk
ICYmICFtX3dpbmRvd1JlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIERpc3BsYXkqIGRpc3BsYXkg
PSBnZXRQbHVnaW5EaXNwbGF5KG51bGxwdHIpOworICAgICAgICBpZiAobV9kcmF3YWJsZSkKKyAg
ICAgICAgICAgIFhGcmVlUGl4bWFwKGRpc3BsYXksIG1fZHJhd2FibGUpOworICAgICAgICAgICAg
CisgICAgICAgIG1fZHJhd2FibGUgPSBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksIGdldFJvb3RXaW5k
b3cobV9wYXJlbnRGcmFtZS5nZXQoKSksCisgICAgICAgICAgICBtX3dpbmRvd1JlY3Qud2lkdGgo
KSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgKChOUFNldFdpbmRvd0NhbGxi
YWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT5kZXB0aCk7CisgICAgICAgIFhTeW5jKGRp
c3BsYXksIGZhbHNlKTsgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZlciBrbm93cyBhYm91dCB0
aGUgRHJhd2FibGUKKyAgICB9CisKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkKK3sKKyAgICBpZiAoIW1faXNTdGFy
dGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgWEV2ZW50IG5wRXZlbnQ7CisgICAgaW5pdFhFdmVudCgmbnBFdmVu
dCk7CisKKyAgICBYRm9jdXNDaGFuZ2VFdmVudCYgZXZlbnQgPSBucEV2ZW50Lnhmb2N1czsKKyAg
ICBldmVudC50eXBlID0gOTsgLy8gRm9jdXNJbiBnZXRzIHVuc2V0IHNvbWV3aGVyZQorICAgIGV2
ZW50Lm1vZGUgPSBOb3RpZnlOb3JtYWw7CisgICAgZXZlbnQuZGV0YWlsID0gTm90aWZ5RGV0YWls
Tm9uZTsKKworICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKK30KKwordm9pZCBQbHVnaW5W
aWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7CisgICAgaWYgKCFyZWN0KSB7Cisg
ICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJl
Y3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVj
dC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJl
Y3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbikK
K3sKKyAgICAvLyBUT0RPOiBvcHRpbWl6ZQorICAgIGludmFsaWRhdGUoKTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVk
IHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgWEV2ZW50IG5wRXZlbnQ7CisgICAgaW5pdFhFdmVudCgmbnBFdmVudCk7
CisKKyAgICBYRm9jdXNDaGFuZ2VFdmVudCYgZXZlbnQgPSBucEV2ZW50Lnhmb2N1czsKKyAgICBl
dmVudC50eXBlID0gMTA7IC8vIEZvY3VzT3V0IGdldHMgdW5zZXQgc29tZXdoZXJlCisgICAgZXZl
bnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICBldmVudC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxO
b25lOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOworfQorCit2b2lkIFBsdWdpblZp
ZXc6OmluaXRYRXZlbnQoWEV2ZW50KiB4RXZlbnQpCit7CisgICAgbWVtc2V0KHhFdmVudCwgMCwg
c2l6ZW9mKFhFdmVudCkpOworCisgICAgeEV2ZW50LT54YW55LnNlcmlhbCA9IDA7IC8vIHdlIGFy
ZSB1bmF3YXJlIG9mIHRoZSBsYXN0IHJlcXVlc3QgcHJvY2Vzc2VkIGJ5IFggU2VydmVyCisgICAg
eEV2ZW50LT54YW55LnNlbmRfZXZlbnQgPSBmYWxzZTsKKyAgICB4RXZlbnQtPnhhbnkuZGlzcGxh
eSA9IGdldFBsdWdpbkRpc3BsYXkobV9wYXJlbnRGcmFtZS5nZXQoKSk7CisKKyAgICAvLyBNb3pp
bGxhIGFsc28gc2VuZHMgTm9uZSBoZXJlIGZvciB3aW5kb3dsZXNzIHBsdWdpbnMuIFNlZSBuc09i
amVjdEZyYW1lLmNwcCBpbiB0aGUgTW96aWxsYSBzb3VyY2VzLgorICAgIC8vIFRoaXMgbWV0aG9k
IGFsc28gc2V0cyB1cCBGb2N1c0luIGFuZCBGb2N1c091dCBldmVudHMgZm9yIHdpbmRvd3MgcGx1
Z2lucywgYnV0IE1vemlsbGEgZG9lc24ndAorICAgIC8vIGV2ZW4gc2VuZCB0aGVzZSB0eXBlcyBv
ZiBldmVudHMgdG8gd2luZG93ZWQgcGx1Z2lucy4gSW4gdGhlIGZ1dHVyZSwgaXQgbWF5IGJlIGdv
b2QgdG8gb25seQorICAgIC8vIHNlbmQgdGhlbSB0byB3aW5kb3dsZXNzIHBsdWdpbnMuCisgICAg
eEV2ZW50LT54YW55LndpbmRvdyA9IE5vbmU7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlm
ICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1
bGx5KSB7CisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisKKyAg
ICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fZHJhd2Fi
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBnZXRQbHVnaW5E
aXNwbGF5KG51bGxwdHIpOworICAgIGNvbnN0IGJvb2wgc3luY1ggPSBtX3BsdWdpbkRpc3BsYXkg
JiYgbV9wbHVnaW5EaXNwbGF5ICE9IGRpc3BsYXk7CisKKyAgICBJbnRSZWN0IGV4cG9zZWRSZWN0
KHJlY3QpOworICAgIGV4cG9zZWRSZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7CisgICAgZXhw
b3NlZFJlY3QubW92ZSgtZnJhbWVSZWN0KCkueCgpLCAtZnJhbWVSZWN0KCkueSgpKTsKKworICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGRyYXdhYmxlU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJv
X3hsaWJfc3VyZmFjZV9jcmVhdGUoZGlzcGxheSwKKyAgICAgICAgbV9kcmF3YWJsZSwgbV92aXN1
YWwsIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpKTsKKworICAg
IGlmIChtX2lzVHJhbnNwYXJlbnQpIHsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIDMyIGJpdCBk
cmF3YWJsZSBhbmQgdGhlIHBsdWdpbiB3YW50cyB0cmFuc3BhcmVuY3ksCisgICAgICAgIC8vIHdl
J2xsIGNsZWFyIHRoZSBleHBvc2VkIGFyZWEgdG8gdHJhbnNwYXJlbnQgZmlyc3QuIE90aGVyd2lz
ZSwKKyAgICAgICAgLy8gd2UnZCBlbmQgdXAgd2l0aCBqdW5rIGluIHRoZXJlIGZyb20gdGhlIGxh
c3QgcGFpbnQsIG9yLCB3b3JzZSwKKyAgICAgICAgLy8gdW5pbml0aWFsaXplZCBkYXRhLgorICAg
ICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoZHJhd2FibGVT
dXJmYWNlLmdldCgpKSk7CisKKyAgICAgICAgaWYgKCEoY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVu
dChkcmF3YWJsZVN1cmZhY2UuZ2V0KCkpICYgQ0FJUk9fQ09OVEVOVF9BTFBIQSkpIHsKKyAgICAg
ICAgICAgIC8vIEF0dGVtcHQgdG8gZmFrZSBpdCB3aGVuIHdlIGRvbid0IGhhdmUgYW4gYWxwaGEg
Y2hhbm5lbCBvbiBvdXIKKyAgICAgICAgICAgIC8vIHBpeG1hcC4gSWYgdGhhdCdzIG5vdCBwb3Nz
aWJsZSwgYXQgbGVhc3QgY2xlYXIgdGhlIHdpbmRvdyB0bworICAgICAgICAgICAgLy8gYXZvaWQg
ZHJhd2luZyBhcnRpZmFjdHMuCisKKyAgICAgICAgICAgIC8vIFRoaXMgV291bGQgbm90IHdvcmsg
d2l0aG91dCBkb3VibGUgYnVmZmVyaW5nLCBidXQgd2UgYWx3YXlzIHVzZSBpdC4KKyAgICAgICAg
ICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgY2Fpcm9fZ2V0X2dyb3VwX3Rh
cmdldChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSksCisgICAgICAgICAgICAgICAg
LW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKyAgICAgICAgICAgIGNhaXJv
X3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09Q
RVJBVE9SX0NMRUFSKTsKKworICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IuZ2V0KCksIGV4cG9z
ZWRSZWN0LngoKSwgZXhwb3NlZFJlY3QueSgpLAorICAgICAgICAgICAgZXhwb3NlZFJlY3Qud2lk
dGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBjYWlyb19maWxsKGNyLmdldCgp
KTsKKyAgICB9CisKKyAgICBYRXZlbnQgeGV2ZW50OworICAgIG1lbXNldCgmeGV2ZW50LCAwLCBz
aXplb2YoWEV2ZW50KSk7CisgICAgWEdyYXBoaWNzRXhwb3NlRXZlbnQmIGV4cG9zZUV2ZW50ID0g
eGV2ZW50LnhncmFwaGljc2V4cG9zZTsKKyAgICBleHBvc2VFdmVudC50eXBlID0gR3JhcGhpY3NF
eHBvc2U7CisgICAgZXhwb3NlRXZlbnQuZGlzcGxheSA9IGRpc3BsYXk7CisgICAgZXhwb3NlRXZl
bnQuZHJhd2FibGUgPSBtX2RyYXdhYmxlOworICAgIGV4cG9zZUV2ZW50LnggPSBleHBvc2VkUmVj
dC54KCk7CisgICAgZXhwb3NlRXZlbnQueSA9IGV4cG9zZWRSZWN0LnkoKTsKKyAgICBleHBvc2VF
dmVudC53aWR0aCA9IGV4cG9zZWRSZWN0LngoKSArIGV4cG9zZWRSZWN0LndpZHRoKCk7IC8vIGZs
YXNoIGJ1Zz8gaXQgdGhpbmtzIHdpZHRoIGlzIHRoZSByaWdodCBpbiB0cmFuc3BhcmVudCBtb2Rl
CisgICAgZXhwb3NlRXZlbnQuaGVpZ2h0ID0gZXhwb3NlZFJlY3QueSgpICsgZXhwb3NlZFJlY3Qu
aGVpZ2h0KCk7IC8vIGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIGhlaWdodCBpcyB0aGUgYm90dG9tIGlu
IHRyYW5zcGFyZW50IG1vZGUKKworICAgIGRpc3BhdGNoTlBFdmVudCh4ZXZlbnQpOworCisgICAg
aWYgKHN5bmNYKQorICAgICAgICBYU3luYyhtX3BsdWdpbkRpc3BsYXksIGZhbHNlKTsgLy8gc3lu
YyBjaGFuZ2VzIGJ5IHBsdWdpbgorCisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKTsKKyAgICBjYWlyb19zYXZlKGNyKTsKKworICAgIGNhaXJvX3NldF9z
b3VyY2Vfc3VyZmFjZShjciwgZHJhd2FibGVTdXJmYWNlLmdldCgpLCBmcmFtZVJlY3QoKS54KCks
IGZyYW1lUmVjdCgpLnkoKSk7CisKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIGZyYW1lUmVjdCgp
LngoKSArIGV4cG9zZWRSZWN0LngoKSwgZnJhbWVSZWN0KCkueSgpICsgZXhwb3NlZFJlY3QueSgp
LCBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9f
Y2xpcChjcik7CisKKyAgICBpZiAobV9pc1RyYW5zcGFyZW50KQorICAgICAgICBjYWlyb19zZXRf
b3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX09WRVIpOworICAgIGVsc2UKKyAgICAgICAgY2Fp
cm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3Bh
aW50KGNyKTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworfQorCit2b2lkIFBsdWdpblZpZXc6
OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQo
cGFyZW50KTsKKworICAgIGlmIChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpCit7CisgICAgaWYgKCFt
X2lzV2luZG93ZWQpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVk
IHx8ICFwYXJlbnQoKSB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlIHBsdWdpbiBkaWRuJ3QgbG9hZCBzdWNlc3Nm
dWxseSwgbm8gcG9pbnQgaW4gY2FsbGluZyBzZXR3aW5kb3cKKyAgICBpZiAobV9zdGF0dXMgIT0g
UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1Z2luJ3Mgc2V0d2luZG93IGlmIGl0J3MgZnVsbC1wYWdl
IG9yIHdpbmRvd2VkCisgICAgaWYgKG1fbW9kZSAhPSBOUF9GVUxMICYmIG1fbW9kZSAhPSBOUF9F
TUJFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIHBsYXRmb3JtUGx1
Z2luV2lkZ2V0IHN0aWxsIGV4aXN0cworICAgIGlmIChtX2lzV2luZG93ZWQgJiYgIXBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NsaXBSZWN0Lmlz
RW1wdHkoKSkgeworICAgICAgICAvLyBJZiB3aWR0aCBvciBoZWlnaHQgYXJlIG51bGwsIHNldCB0
aGUgY2xpcFJlY3QgdG8gbnVsbCwKKyAgICAgICAgLy8gaW5kaWNhdGluZyB0aGF0IHRoZSBwbHVn
aW4gaXMgbm90IHZpc2libGUvc2Nyb2xsZWQgb3V0LgorICAgICAgICBtX25wV2luZG93LmNsaXBS
ZWN0LmxlZnQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gMDsKKyAg
ICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOworICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LmJvdHRvbSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2xpcHBpbmcgcmVj
dGFuZ2xlIG9mIHRoZSBwbHVnLWluOyB0aGUgb3JpZ2luIGlzIHRoZSB0b3AgbGVmdCBjb3JuZXIg
b2YgdGhlIGRyYXdhYmxlIG9yIHdpbmRvdy4gCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
bGVmdCA9IG1fbnBXaW5kb3cueCArIG1fY2xpcFJlY3QueCgpOworICAgICAgICBtX25wV2luZG93
LmNsaXBSZWN0LnRvcCA9IG1fbnBXaW5kb3cueSArIG1fY2xpcFJlY3QueSgpOworICAgICAgICBt
X25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9ucFdpbmRvdy54ICsgbV9jbGlwUmVjdC54KCkg
KyBtX2NsaXBSZWN0LndpZHRoKCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9t
ID0gbV9ucFdpbmRvdy55ICsgbV9jbGlwUmVjdC55KCkgKyBtX2NsaXBSZWN0LmhlaWdodCgpOwor
ICAgIH0KKworICAgIC8vIEZMQVNIIFdPUktBUk9VTkQ6IE9ubHkgc2V0IGluaXRpYWxseS4gTXVs
dGlwbGUgY2FsbHMgdG8KKyAgICAvLyBzZXROUFdpbmRvdygpIGNhdXNlIHRoZSBwbHVnaW4gdG8g
Y3Jhc2ggaW4gd2luZG93ZWQgbW9kZS4KKyAgICBpZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250
YWlucyhQbHVnaW5RdWlya0RvbnRDYWxsU2V0V2luZG93TW9yZVRoYW5PbmNlKSB8fCAhbV9pc1dp
bmRvd2VkCisgICAgICAgIHx8IG1fbnBXaW5kb3cud2lkdGggPT0gc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KC0xKSB8fCBtX25wV2luZG93LmhlaWdodCA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEp
KSB7CisgICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKKyAg
ICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7CisgICAgfQor
CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgIG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworICAgIHNldENhbGxp
bmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDAp
OworCisgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRG
T1JNKEdUSykKKyAgICAvLyBHdGtYdEJpbiB3aWxsIGNhbGwgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGl0IGhlcmUuCisgICAgaWYgKCFtX25lZWRzWEVt
YmVkKSB7CisgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklOKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpKTsKKyAg
ICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRvd1Jl
Y3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fZGVsYXllZEFsbG9jYXRpb24gPSBtX3dpbmRvd1JlY3Q7CisgICAgdXBkYXRl
V2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAoKTsKKyNlbmRpZgorfQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>