<?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>69151</bug_id>
          
          <creation_ts>2011-09-30 09:51:51 -0700</creation_ts>
          <short_desc>[Qt][WK2] Synchronize tiling with accelerated compositing</short_desc>
          <delta_ts>2011-10-28 01:00:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>70174</dependson>
    
    <dependson>70176</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>ossy</cc>
    
    <cc>ostap73</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>476132</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-09-30 09:51:51 -0700</bug_when>
    <thetext>Right now tiling works on the non-composited content only, which creates an unnatural distinction between &quot;composited&quot; and &quot;non-composited&quot; content. This results in hard-to-detect bugs, such as composited content looking different than non-composited content.

The idea is to use the tiling functionality in TiledBackingStore and TiledDrawingAreaProxy in each layer, with some optimizations for the non-composited content, and to force compositing mode so that the rendering only goes through a single path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476172</commentid>
    <comment_count>1</comment_count>
      <attachid>109313</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-09-30 10:50:33 -0700</bug_when>
    <thetext>Created attachment 109313
Not for review.

WIP patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476355</commentid>
    <comment_count>2</comment_count>
      <attachid>109313</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-09-30 15:45:45 -0700</bug_when>
    <thetext>Comment on attachment 109313
Not for review.

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:247
&gt; +    bool found = false;

exists?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:256
&gt; +    if (!m_transforms.target.isInvertible())

// not visible?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:389
&gt; +
&gt; +

only one newline

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:393
&gt; +        HashMap&lt;int, ManagedTile&gt;::iterator endIterator = m_managedTiles.end();

normally just called end in webkit

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:400
&gt; +            else if (opacity &gt; 0.95)
&gt; +                tiles.prepend(&amp;it-&gt;second);

comment?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:404
&gt; +        TransformationMatrix scaledMatrix = m_transforms.target;
&gt; +        TransformationMatrix replicaMatrix;

is this needed?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:719
&gt; -            m_tiles.clear();
&gt; +            m_basicTiles.clear();

owned/adopted tiles. externallyManagedTiles

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.h:111
&gt; +    enum TileMode {

TileOwnership { Externally , I...

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.h:245
&gt; +        bool backBufferUpdated;

isBack....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479626</commentid>
    <comment_count>3</comment_count>
      <attachid>110060</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-06 16:52:55 -0700</bug_when>
    <thetext>Created attachment 110060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479627</commentid>
    <comment_count>4</comment_count>
      <attachid>110060</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-06 16:54:05 -0700</bug_when>
    <thetext>Comment on attachment 110060
Patch

This is the WebCore part of the patch. It can stand on its own, though functionality is still disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479916</commentid>
    <comment_count>5</comment_count>
      <attachid>110060</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-10-07 03:34:26 -0700</bug_when>
    <thetext>Comment on attachment 110060
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:360
&gt; +                targetRect.x() + (tileRect.x() - targetRect.x()) / m_state.contentsScale,

It would be great if you could do such renames in separate patches... I can quickly r=cq=me them. It will keep the patch size down.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:394
&gt; +
&gt; +

double newline

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:395
&gt; +    if (m_state.tileOwnership == ExternallyManagedTiles) {

This indeed looks nicer!

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:405
&gt; +            else if (opacity &gt; 0.95)
&gt; +                tiles.prepend(&amp;it-&gt;second);

You forgot adding the comment here that we talked about

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:426
&gt; +
&gt; +

Maybe for the sake of clearness you could add 
// InternallyManagedTiles:

here

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:598
&gt; +int TextureMapperNode::createContentTile(float scale)

Contents?

I wonder if there is a nice way to make it clear which methods are for the external managed tiles only

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:607
&gt; +void TextureMapperNode::removeContentTile(int id)

Contents?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:612
&gt; +void TextureMapperNode::setTileBackBufferTextureForDirectlyCompositedImage(int id, const IntRect&amp; sourceRect, const FloatRect&amp; targetRect, BitmapTexture* texture)

You use FloatRect&amp; targetRect here... in setContentTileBackBuffer you use IntRect... why the inconsistency?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:628
&gt; +void TextureMapperNode::clearDirectlyCompositedImageTiles()

It could be a bit more clear if you add &quot;All&quot; in there. ie. clearAllDirec...

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:657
&gt; +void TextureMapperNode::swapContentBuffers()

Contents*?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:659
&gt; +    HashMap&lt;int, ExternallyManagedTile&gt;::iterator endIterator = m_externallyManagedTiles.end();

We normally just use &quot;end&quot; and not &quot;endIterator&quot;

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:772
&gt;  
&gt; +

Wny this newline?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.h:153
&gt; +    void setTileOwnership(TileOwnership o) { m_state.tileOwnership = o; }

please write &quot;ownership&quot; We normally use &quot;o&quot; for object in the Render* classes.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.h:248
&gt; +        ExternallyManagedTile(float newScale = 1.0)

=1 ? Why newScale... isn&apos;t it just scale as this is a ctor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481076</commentid>
    <comment_count>6</comment_count>
      <attachid>110383</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-10 12:46:55 -0700</bug_when>
    <thetext>Created attachment 110383
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481547</commentid>
    <comment_count>7</comment_count>
      <attachid>110383</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-10-11 03:19:58 -0700</bug_when>
    <thetext>Comment on attachment 110383
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Enable &quot;externally managed&quot; tiles in TextureMapperNodes.
&gt; +        Currently, TextureMapperNodes manage tiles themselves, the tiles being there
&gt; +        only to overcome the 2k texture size limitation. For WebKit2, we want those tiles to be managed
&gt; +        externally, namely through the web process via the remote tile backend for TiledBackingStore.

Why is the line length so different? This is a changelog.. and I would wrap around 80-100 chars and try to keep all lines at the about same length

&gt; Source/WebCore/ChangeLog:18
&gt; +        Reviewed by NOBODY (OOPS!).

Move this up

&gt; Source/WebCore/ChangeLog:21
&gt; +        No new tests, code is still disabled. Eventually existing compositing tests running on WK2 would
&gt; +        test this.

Better write:

Code is disabled for now, but covered by existing compositing tests.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:391
&gt; +
&gt; +

double newline

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp:406
&gt; +            // This code creates a transitional effect, showing tiles rendered in the &quot;old&quot; contents scale behind tiles rendered in the current contents scale.
&gt; +            // This effect looks good only when there&apos;s no transparency, so we only use it when the opacity for the layer is above a certain threshold.

I would keep the comment to around 100 chars

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperNode.h:255
&gt; +    struct ExternallyManagedTile {
&gt; +        bool isBackBufferUpdated;
&gt; +        bool isDirectlyCompositedImage;
&gt; +        ExternallyManagedTileBuffer frontBuffer;
&gt; +        ExternallyManagedTileBuffer backBuffer;
&gt; +        ExternallyManagedTile(float scale = 1.0)
&gt; +            : isBackBufferUpdated(false)
&gt; +            , isDirectlyCompositedImage(false)
&gt; +            , scale(scale)
&gt; +        {
&gt; +        }
&gt; +        float scale;
&gt; +    };

your ordering here is a bit weird</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481679</commentid>
    <comment_count>8</comment_count>
      <attachid>110525</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-11 09:37:02 -0700</bug_when>
    <thetext>Created attachment 110525
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481720</commentid>
    <comment_count>9</comment_count>
      <attachid>110525</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-11 10:42:10 -0700</bug_when>
    <thetext>Comment on attachment 110525
Patch

Clearing flags on attachment: 110525

Committed r97163: &lt;http://trac.webkit.org/changeset/97163&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481721</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-11 10:42:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481723</commentid>
    <comment_count>11</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-11 10:44:55 -0700</bug_when>
    <thetext>Not finished just yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481885</commentid>
    <comment_count>12</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-10-11 13:51:52 -0700</bug_when>
    <thetext>Guys, it broke the minimal build ... :-S

http://build.webkit.org/builders/Qt%20Linux%20Release%20minimal/builds/34135/steps/compile-webkit/logs/stdio

You should have watch the bots ... Could you fix it ASAP or should we roll it out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481892</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-11 14:02:34 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Guys, it broke the minimal build ... :-S
&gt; 
&gt; http://build.webkit.org/builders/Qt%20Linux%20Release%20minimal/builds/34135/steps/compile-webkit/logs/stdio
&gt; 
&gt; You should have watch the bots ... Could you fix it ASAP or should we roll it out?

Should be simple to fix, it&apos;s just about #if ENABLE(TILED_BACKING_STORE).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481906</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-11 14:13:06 -0700</bug_when>
    <thetext>On second thought, after Noam&apos;s change the texture mapper doesn&apos;t make sense anymore if tiling is disabled. So either the tiled backing store is added to the minimal config (does that make sense?) or the texture mapper should be disabled if there&apos;s no backing store.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481908</commentid>
    <comment_count>15</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-11 14:14:35 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; On second thought, after Noam&apos;s change the texture mapper doesn&apos;t make sense anymore if tiling is disabled. So either the tiled backing store is added to the minimal config (does that make sense?) or the texture mapper should be disabled if there&apos;s no backing store.

For WebKit2... but for WebKit1 TextureMapper can still potentially work with TILED_BACKING_STORE disabled. I&apos;d rather just fix the #ifdefs for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481917</commentid>
    <comment_count>16</comment_count>
      <attachid>110576</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-11 14:29:00 -0700</bug_when>
    <thetext>Created attachment 110576
Unbreak the minimal Qt bot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481921</commentid>
    <comment_count>17</comment_count>
      <attachid>110576</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-11 14:42:02 -0700</bug_when>
    <thetext>Comment on attachment 110576
Unbreak the minimal Qt bot

Clearing flags on attachment: 110576

Committed r97186: &lt;http://trac.webkit.org/changeset/97186&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481922</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-11 14:42:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481984</commentid>
    <comment_count>19</comment_count>
      <attachid>110595</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-11 15:53:16 -0700</bug_when>
    <thetext>Created attachment 110595
Patch

This is still disabled, but most of the code is there.
When enabled, it will allow using AC for all layers, including the main layer. We&apos;d use &quot;force compositing&quot; mode to ensure that.
This would in turn obsolete TiledDrawingArea and SGAgent, as those functionalities now reside in TiledBackingStore+TextureMapperNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482133</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-11 18:26:25 -0700</bug_when>
    <thetext>This patch appear to have broken Qt minimal build. Fix attempted in http://trac.webkit.org/changeset/97210.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482148</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-11 18:52:18 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; This patch appear to have broken Qt minimal build. Fix attempted in http://trac.webkit.org/changeset/97210.

Fixed in http://trac.webkit.org/changeset/97213.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482293</commentid>
    <comment_count>22</comment_count>
      <attachid>110595</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-10-12 01:30:24 -0700</bug_when>
    <thetext>Comment on attachment 110595
Patch

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

Some comments from my first look thru... still need to make sense of this patch

&gt; Source/WebKit2/ChangeLog:12
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Layer-tree synchronization is done by passing WebKit2 messages between a LayerTreeHost
&gt; +        on the WebProcess and a LayerTreeHostProxy on the UI process. Every layer in the tree has
&gt; +        its own tiled backing store, and uses the LayerTreeHost communication channel to pass
&gt; +        content up to the UI process. The UI process will later creates its own GraphicsLayer tree,
&gt; +        based on TextureMapper, which can be painted directly with OpenGL.

Would be nice if you started with a reasoning for the patch, before descripting what it is doing

&gt; Source/WebKit2/Shared/WebLayerTreeInfo.h:76
&gt; +            bool imageUpdated: 1;

imageWasUpdated?

&gt; Source/WebKit2/UIProcess/DrawingAreaProxy.h:87
&gt; +    virtual void updateWebView();

Wouldn&apos;t updateViewport be a better name? WebView is totally overloaded

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:48
&gt; +class LayerTreeMessageToRenderer;
&gt; +class LayerTreeHostProxy : public GraphicsLayerClient {

I would adda newline between these

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:75
&gt; +protected:
&gt; +
&gt; +    PassOwnPtr&lt;GraphicsLayer&gt; createLayer(WebLayerID);

I would remove that newline

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:83
&gt; +    virtual bool showDebugBorders() const { return false; }
&gt; +    virtual bool showRepaintCounter() const { return false; }

#if !NDEBUG ?

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:103
&gt; +    int remoteTileIDToNodeTileID(int tileID) const;

I would have called it &quot;nodeTileIDFromRemoteTileID&quot;

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:121
&gt; +    void ensureLayer(WebLayerID);
&gt; +
&gt; +#endif

remove that newline

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.messages.in:1
&gt; +# Copyright (C) 2010, 2011 Apple Inc. All rights reserved.

s/Apple/Nokia ??

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:39
&gt; +#include &lt;cairo/OpenGLShims.h&gt;

cairo?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:87
&gt; +    m_layerInfo.id = sID++;

s_id? :-) s means static right

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:297
&gt; +    setContentsToImage(0);

setImageAsContents? the name is a bit confusing especially when passing 0

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:416
&gt; +    if (m_mainBackingStore &amp;&amp; m_mainBackingStore-&gt;contentsScale() == scale)

no fuzzy comparison needed here?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:524
&gt; +    if (!drawsContent() || m_image)

so you dont do this if you have an m_image?

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:63
&gt; +    , m_suspended(false)

isSuspended? or isPageSuspended ?

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:192
&gt; +void LayerTreeHostQt::didInstallPageOverlay()

Attach?

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:199
&gt; +void LayerTreeHostQt::didUninstallPageOverlay()

Detach?

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:291
&gt; +    m_pageOverlayLayer = nullptr;

Why not use that everywhere then instead of 0?

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:294
&gt; +
&gt; +

double newlines</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482489</commentid>
    <comment_count>23</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-12 10:21:59 -0700</bug_when>
    <thetext> 
&gt; &gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:39
&gt; &gt; +#include &lt;cairo/OpenGLShims.h&gt;
&gt; 
&gt; cairo?
We&apos;re reusing Cairo&apos;s OpenGL shims, in other places as well.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:192
&gt; &gt; +void LayerTreeHostQt::didInstallPageOverlay()
&gt; Attach?
&gt; &gt; +void LayerTreeHostQt::didUninstallPageOverlay()
&gt; Detach?
These are copied from LayerTreeHostCA.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482521</commentid>
    <comment_count>24</comment_count>
      <attachid>110705</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-12 10:53:19 -0700</bug_when>
    <thetext>Created attachment 110705
Patch

Addressed Kenneth&apos;s comments, though some of them are addressed in the previous reply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483149</commentid>
    <comment_count>25</comment_count>
      <attachid>110705</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-13 06:00:32 -0700</bug_when>
    <thetext>Comment on attachment 110705
Patch

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

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:1
&gt; +    /*

Stray tab? :)

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:31
&gt; +#include &quot;LayerTreeHostQt.h&quot;

This header file seems missing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483288</commentid>
    <comment_count>26</comment_count>
      <attachid>110873</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-13 10:35:49 -0700</bug_when>
    <thetext>Created attachment 110873
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483291</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-13 10:39:45 -0700</bug_when>
    <thetext>Attachment 110873 did not pass style-queue:

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

Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.h:69:  The parameter name &quot;layerID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.h:70:  The parameter name &quot;layerID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.h:71:  The parameter name &quot;layerID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 30 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>483303</commentid>
    <comment_count>28</comment_count>
      <attachid>110873</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-13 10:50:55 -0700</bug_when>
    <thetext>Comment on attachment 110873
Patch

Great stuff :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483306</commentid>
    <comment_count>29</comment_count>
      <attachid>110873</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-13 10:52:01 -0700</bug_when>
    <thetext>Comment on attachment 110873
Patch

r=me but please fix the style issues before landing :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483309</commentid>
    <comment_count>30</comment_count>
      <attachid>110878</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-13 10:53:24 -0700</bug_when>
    <thetext>Created attachment 110878
Patch

Fixed style issues and last comments from Simon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483664</commentid>
    <comment_count>31</comment_count>
      <attachid>110938</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-13 17:09:29 -0700</bug_when>
    <thetext>Created attachment 110938
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483746</commentid>
    <comment_count>32</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-13 21:30:24 -0700</bug_when>
    <thetext>Still some patches to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483762</commentid>
    <comment_count>33</comment_count>
      <attachid>110878</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-10-13 22:11:43 -0700</bug_when>
    <thetext>Comment on attachment 110878
Patch

Attachment 110878 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10068216</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483815</commentid>
    <comment_count>34</comment_count>
      <attachid>110878</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-14 00:14:38 -0700</bug_when>
    <thetext>Comment on attachment 110878
Patch

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

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:35
&gt; +#include &quot;LayerTreeHostProxyMessages.h&quot;

As the EWS indicated: This header inclusion should be either guarded with the appropriate #ifdefs or the LTHPM.in file is added to the build systems of the other ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483977</commentid>
    <comment_count>35</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-14 07:47:02 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 110878 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110878&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:35
&gt; &gt; +#include &quot;LayerTreeHostProxyMessages.h&quot;
&gt; 
&gt; As the EWS indicated: This header inclusion should be either guarded with the appropriate #ifdefs or the LTHPM.in file is added to the build systems of the other ports.

Yup. I&apos;ll push another patch with #ifdef guards, and make sure it passes EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484006</commentid>
    <comment_count>36</comment_count>
      <attachid>111020</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-14 08:56:35 -0700</bug_when>
    <thetext>Created attachment 111020
Patch

This should fix it, will let go through EWS and then land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484178</commentid>
    <comment_count>37</comment_count>
      <attachid>111051</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-14 12:26:48 -0700</bug_when>
    <thetext>Created attachment 111051
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484533</commentid>
    <comment_count>38</comment_count>
      <attachid>111051</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-15 00:31:45 -0700</bug_when>
    <thetext>Comment on attachment 111051
Patch

Clearing flags on attachment: 111051

Committed r97549: &lt;http://trac.webkit.org/changeset/97549&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484534</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-15 00:31:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484564</commentid>
    <comment_count>40</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-10-15 02:32:31 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 111051 [details])
&gt; Clearing flags on attachment: 111051
&gt; 
&gt; Committed r97549: &lt;http://trac.webkit.org/changeset/97549&gt;

It broke the build on the SL bot ... :-/ Guys, after landing you _should have_ watch the bots ... The fix might be simple, but I won&apos;t fix bugs at weekend instead of others, but rollout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484567</commentid>
    <comment_count>41</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-10-15 02:36:52 -0700</bug_when>
    <thetext>Rollout patch landed in http://trac.webkit.org/changeset/97554</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484582</commentid>
    <comment_count>42</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-15 07:45:02 -0700</bug_when>
    <thetext>&gt; It broke the build on the SL bot ... :-/ Guys, after landing you _should have_ watch the bots ... The fix might be simple, but I won&apos;t fix bugs at weekend instead of others, but rollout.

Easy to say. It took over 6 hours for the commit queue to land in that patch.
I&apos;m ok with rolling this out for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484583</commentid>
    <comment_count>43</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-15 07:53:57 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; &gt; It broke the build on the SL bot ... :-/ Guys, after landing you _should have_ watch the bots ... The fix might be simple, but I won&apos;t fix bugs at weekend instead of others, but rollout.
&gt; 
&gt; Easy to say. It took over 6 hours for the commit queue to land in that patch.
&gt; I&apos;m ok with rolling this out for now.

It didn&apos;t actually break any bot. Flaky tests.... recommitting. Please don&apos;t roll out unless bot failures have something to do with the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484584</commentid>
    <comment_count>44</comment_count>
      <attachid>111051</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-15 07:55:01 -0700</bug_when>
    <thetext>Comment on attachment 111051
Patch

Re-committing, patch was rolled out because it was mistakenly blamed for flaky tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484587</commentid>
    <comment_count>45</comment_count>
      <attachid>111051</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-15 09:00:56 -0700</bug_when>
    <thetext>Comment on attachment 111051
Patch

Clearing flags on attachment: 111051

Committed r97559: &lt;http://trac.webkit.org/changeset/97559&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484588</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-15 09:01:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484591</commentid>
    <comment_count>47</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-15 09:12:27 -0700</bug_when>
    <thetext>Breaking stuff... more offensive #includes to move around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484754</commentid>
    <comment_count>48</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-10-16 02:13:02 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; &gt; It broke the build on the SL bot ... :-/ Guys, after landing you _should have_ watch the bots ... The fix might be simple, but I won&apos;t fix bugs at weekend instead of others, but rollout.
&gt; 
&gt; Easy to say. It took over 6 hours for the commit queue to land in that patch.
&gt; I&apos;m ok with rolling this out for now.

Using commit-queue isn&apos;t compulsory. You can land your patch manually or with webkit-patch land-from-bug if you can&apos;t wait for CQ. But you have to ensure that you don&apos;t break build on any platform. It is another question why Mac port doesn&apos;t have EWS as other ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485207</commentid>
    <comment_count>49</comment_count>
      <attachid>111274</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-17 09:21:27 -0700</bug_when>
    <thetext>Created attachment 111274
Patch

One more try... moved some headers around and adapted to trunk. Should build on everything now - will follow the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485310</commentid>
    <comment_count>50</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 11:23:53 -0700</bug_when>
    <thetext>Attachment 111274 did not pass style-queue:

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

Updating OpenSource
From git://git.webkit.org/WebKit
   bc67541..f85897f  master     -&gt; origin/master
	M	Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html
	M	Tools/ChangeLog
r97634 = 07d47256354548be7595c405835f38f40c1b61e9 (refs/remotes/trunk)
	M	LayoutTests/fast/replaced/table-percent-width-expected.txt
	M	LayoutTests/ChangeLog
	M	Source/WebCore/ChangeLog
	M	Source/WebCore/rendering/RenderBox.h
	M	Source/WebCore/rendering/RenderBox.cpp
r97635 = f85897f3766189463c74375cf745a6d69f470fbd (refs/remotes/trunk)
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/trunk.
Updating chromium port dependencies using gclient...
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Error: &apos;depot_tools/gclient sync&apos; failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 107.
Re-trying &apos;depot_tools/gclient sync&apos;
No such file or directory at Tools/Scripts/update-webkit line 104.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485321</commentid>
    <comment_count>51</comment_count>
      <attachid>111289</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-17 11:42:38 -0700</bug_when>
    <thetext>Created attachment 111289
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485418</commentid>
    <comment_count>52</comment_count>
      <attachid>111289</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-17 13:02:56 -0700</bug_when>
    <thetext>Comment on attachment 111289
Patch

Clearing flags on attachment: 111289

Committed r97639: &lt;http://trac.webkit.org/changeset/97639&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485419</commentid>
    <comment_count>53</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-17 13:03:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485442</commentid>
    <comment_count>54</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-17 13:19:34 -0700</bug_when>
    <thetext>Still some patches to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487195</commentid>
    <comment_count>55</comment_count>
      <attachid>111706</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-19 18:19:47 -0700</bug_when>
    <thetext>Created attachment 111706
Patch

This patch effectively enables the previous patches.
It&apos;s a &quot;big&quot; change in terms of rendering and might cause some instability. However, I hope we&apos;d be able to fix those by going forwards and not backwards, as it&apos;s very hard to fix all those issues in advance on a moving target like QTouchWebView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487430</commentid>
    <comment_count>56</comment_count>
      <attachid>111706</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-10-20 02:28:55 -0700</bug_when>
    <thetext>Comment on attachment 111706
Patch

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

Looks good, but I want jocelyn to have a quick look

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:48
&gt; +void QTouchWebPage::initSceneGraphConnections()

initialize*?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:53
&gt; +    QSGCanvas* canvas = this-&gt;canvas();

Any reason for this?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:173
&gt; +static void computeOverlaps(const QSGItem* curItem, const QSGItem* item, bool&amp; hasBehind, bool&amp; hasInFront, const QRectF&amp; itemBoundingRect, bool nowInFront = false)

currentItem. What is the other item? That could be more clear. hasOverlapInFront? maybe someone has better suggestions

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:181
&gt; +    QList&lt;QSGItem *&gt; childItems = curItem-&gt;childItems();

coding style

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:190
&gt; +        (nowInFront ? hasInFront : hasBehind) = true;

That is pretty ugly :-) bnut well

&gt; Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp:58
&gt; +    QWebPreferencesPrivate::get(preferences())-&gt;setAttribute(QWebPreferencesPrivate::AcceleratedCompositingEnabled, false);

Maybe we should just add a public setting?

&gt; Source/WebKit2/UIProcess/qt/qtouchwebpageproxy.cpp:60
&gt; +    DrawingAreaProxy* drawingArea = m_webPageProxy-&gt;drawingArea();
&gt; +    if (drawingArea)

This could be one line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487443</commentid>
    <comment_count>57</comment_count>
      <attachid>111706</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-10-20 03:01:43 -0700</bug_when>
    <thetext>Comment on attachment 111706
Patch

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

LGTM beside a few details.

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:92
&gt;      if (!oldNode)
&gt;          oldNode = new QSGNode;

You could remove updatePaintNode completely and remove &quot;setFlag(ItemHasContents);&quot; from the constructor.

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:259
&gt; +    QObject::connect(engine, SIGNAL(beforeRendering()), q, SLOT(_q_onBeforeSceneRender()), Qt::DirectConnection);
&gt; +    QObject::connect(engine, SIGNAL(afterRendering()), q, SLOT(_q_onAfterSceneRender()), Qt::DirectConnection);

I&apos;d prefer if it was hard-coded to one of the two to make the limitation obvious (probably beforeRendering to allow overlays) until we find a proper way to integrate with the scene graph, or decide that this is the way to go.

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h:70
&gt; -
&gt; +    

This one slipped in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487549</commentid>
    <comment_count>58</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-20 07:26:00 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; &gt; Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp:58
&gt; &gt; +    QWebPreferencesPrivate::get(preferences())-&gt;setAttribute(QWebPreferencesPrivate::AcceleratedCompositingEnabled, false);
&gt; 
&gt; Maybe we should just add a public setting?
See comment in code... There&apos;s no point in a public setting if we&apos;re going to rely on AC as the main rendering code path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487550</commentid>
    <comment_count>59</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-20 07:28:40 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:92
&gt; &gt;      if (!oldNode)
&gt; &gt;          oldNode = new QSGNode;
&gt; 
&gt; You could remove updatePaintNode completely and remove &quot;setFlag(ItemHasContents);&quot; from the constructor.

OK, though eventually the idea would be to implement this if the item is in the middle of the scene.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:259
&gt; &gt; +    QObject::connect(engine, SIGNAL(beforeRendering()), q, SLOT(_q_onBeforeSceneRender()), Qt::DirectConnection);
&gt; &gt; +    QObject::connect(engine, SIGNAL(afterRendering()), q, SLOT(_q_onAfterSceneRender()), Qt::DirectConnection);
&gt; 
&gt; I&apos;d prefer if it was hard-coded to one of the two to make the limitation obvious (probably beforeRendering to allow overlays) until we find a proper way to integrate with the scene graph, or decide that this is the way to go.

Right now, though, there are items behind the web-view, background and such. But I can make it work with &quot;behind&quot; I believe by changing the QML in MiniBrowser. It would make the code much simpler because computeOverlap can be omitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487555</commentid>
    <comment_count>60</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-10-20 07:41:22 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; (From update of attachment 111706 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111706&amp;action=review
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:53
&gt; &gt; +    QSGCanvas* canvas = this-&gt;canvas();
&gt; 
&gt; Any reason for this?

QTouchWebView/QTouchWebPage can be constructed without attaching to canvas initially. In this case initialization will be delayed until QTouchWebPage::itemChange with change == ItemSceneChange .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487574</commentid>
    <comment_count>61</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-20 08:12:04 -0700</bug_when>
    <thetext>(In reply to comment #60)
&gt; (In reply to comment #56)
&gt; &gt; (From update of attachment 111706 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111706&amp;action=review
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:53
&gt; &gt; &gt; +    QSGCanvas* canvas = this-&gt;canvas();
&gt; &gt; 
&gt; &gt; Any reason for this?
&gt; 
&gt; QTouchWebView/QTouchWebPage can be constructed without attaching to canvas initially. In this case initialization will be delayed until QTouchWebPage::itemChange with change == ItemSceneChange .
I think the question was about using a local variable, which is probably not necessary.
We should add a comment along the lines of your reply here, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488453</commentid>
    <comment_count>62</comment_count>
      <attachid>111978</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-21 10:18:13 -0700</bug_when>
    <thetext>Created attachment 111978
Patch

For now, the easiest way forward is to render the web view after the rest of the scene. Later on we can use FBO for the rest of the cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488454</commentid>
    <comment_count>63</comment_count>
      <attachid>111979</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-21 10:19:44 -0700</bug_when>
    <thetext>Created attachment 111979
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488457</commentid>
    <comment_count>64</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-21 10:21:29 -0700</bug_when>
    <thetext>Attachment 111978 did not pass style-queue:

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

Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:193:  QTouchWebPagePrivate::_q_onAfterSceneRender is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:199:  QTouchWebPagePrivate::_q_onSceneGraphInitialized is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h:41:  _q_onAfterSceneRender is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h:42:  _q_onSceneGraphInitialized is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 4 in 14 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>488465</commentid>
    <comment_count>65</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-21 10:28:27 -0700</bug_when>
    <thetext>(In reply to comment #64)
&gt; Attachment 111978 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
&gt; 
&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:193:  QTouchWebPagePrivate::_q_onAfterSceneRender is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:199:  QTouchWebPagePrivate::_q_onSceneGraphInitialized is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h:41:  _q_onAfterSceneRender is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h:42:  _q_onSceneGraphInitialized is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; Total errors found: 4 in 14 files
&gt; 

False positives, those things are supposed to work with the Qt coding style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489996</commentid>
    <comment_count>66</comment_count>
      <attachid>111979</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-25 06:24:54 -0700</bug_when>
    <thetext>Comment on attachment 111979
Patch

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

&gt; Source/WebKit2/UIProcess/qt/QtTouchViewInterface.cpp:54
&gt; +    m_pageView-&gt;update();

This call to QSGItem::update() causes ASSERT: &quot;flags() &amp; ItemHasContents&quot; in file /home/shausman/dev/qt5/qtdeclarative/src/declarative/items/qsgitem.cpp, line 3039 for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490047</commentid>
    <comment_count>67</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-25 08:22:18 -0700</bug_when>
    <thetext>(In reply to comment #66)
&gt; (From update of attachment 111979 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111979&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtTouchViewInterface.cpp:54
&gt; &gt; +    m_pageView-&gt;update();
&gt; 
&gt; This call to QSGItem::update() causes ASSERT: &quot;flags() &amp; ItemHasContents&quot; in file /home/shausman/dev/qt5/qtdeclarative/src/declarative/items/qsgitem.cpp, line 3039 for me.

Should we fix it with setting ItemHasContents to true, or by updating the canvas some other way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490639</commentid>
    <comment_count>68</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-26 01:00:08 -0700</bug_when>
    <thetext>(In reply to comment #67)
&gt; (In reply to comment #66)
&gt; &gt; (From update of attachment 111979 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111979&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/qt/QtTouchViewInterface.cpp:54
&gt; &gt; &gt; +    m_pageView-&gt;update();
&gt; &gt; 
&gt; &gt; This call to QSGItem::update() causes ASSERT: &quot;flags() &amp; ItemHasContents&quot; in file /home/shausman/dev/qt5/qtdeclarative/src/declarative/items/qsgitem.cpp, line 3039 for me.
&gt; 
&gt; Should we fix it with setting ItemHasContents to true, or by updating the canvas some other way?

I think setting ItemHasContents to true is ok. It did the trick for me.

I got pixels onto the screen (Desktop) :). But I noticed that the tiles on the root layer were smooth-scaled, so the text didn&apos;t look crisp compared to the earlier rendering. Do you see the same?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490815</commentid>
    <comment_count>69</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-26 07:11:38 -0700</bug_when>
    <thetext>
&gt; I got pixels onto the screen (Desktop) :). But I noticed that the tiles on the root layer were smooth-scaled, so the text didn&apos;t look crisp compared to the earlier rendering. Do you see the same?

I&apos;ve seen this before, and it might have come back... it&apos;s hard to notice crispness bugs sometimes.
Does it go back to crispness once you zoom in and out? and is it crisp on other layers?

No&apos;am</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491440</commentid>
    <comment_count>70</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-27 03:44:31 -0700</bug_when>
    <thetext>(In reply to comment #69)
&gt; &gt; I got pixels onto the screen (Desktop) :). But I noticed that the tiles on the root layer were smooth-scaled, so the text didn&apos;t look crisp compared to the earlier rendering. Do you see the same?
&gt; 
&gt; I&apos;ve seen this before, and it might have come back... it&apos;s hard to notice crispness bugs sometimes.
&gt; Does it go back to crispness once you zoom in and out? and is it crisp on other layers?

It goes away when I zoom in enough. Ah well, that shouldn&apos;t prevent us from moving forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491441</commentid>
    <comment_count>71</comment_count>
      <attachid>111979</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-27 03:46:37 -0700</bug_when>
    <thetext>Comment on attachment 111979
Patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:53
&gt; +void QTouchWebPage::initSceneGraphConnections()
&gt; +{
&gt; +    if (d-&gt;paintingIsInitialized)
&gt; +        return;
&gt; +    d-&gt;paintingIsInitialized = true;
&gt; +    if (!canvas())
&gt; +        return;

With the QML mini browser I&apos;m running into the situation where when this function is called from the constructor, we do not have a canvas() yet. Later when the canvas is assigned and we get notified through itemChange(), this function is called again. Unfortunately paintingIsInitialized was set to true and therefore we don&apos;t end up connecting to the scene graph signal(s). Moving the paintingIsInitialized = true assigned to _after_ the &quot;if (!canvas()) return&quot; block fixes that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491544</commentid>
    <comment_count>72</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-27 07:12:11 -0700</bug_when>
    <thetext>Yay, I got it to run on the N9.

The only &quot;error&quot; I saw was this:

ERROR: [TextureMapper GL] Command failed: glBindFramebuffer(GL_FRAMEBUFFER, 0) (501)

../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp(725) : void WebCore::debugGLCommand(const char*, int)

from


void TextureMapperGL::bindSurface(BitmapTexture *surfacePointer)
{
    BitmapTextureGL* surface = static_cast&lt;BitmapTextureGL*&gt;(surfacePointer);

    if (!surface) {
        GL_CMD(glBindFramebuffer(GL_FRAMEBUFFER, 0))


Anyway, I don&apos;t think that&apos;s a &quot;showstopper&quot; :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491546</commentid>
    <comment_count>73</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-10-27 07:18:55 -0700</bug_when>
    <thetext>(In reply to comment #72)
&gt; Yay, I got it to run on the N9.
&gt; 
&gt; The only &quot;error&quot; I saw was this:
&gt; 
&gt; ERROR: [TextureMapper GL] Command failed: glBindFramebuffer(GL_FRAMEBUFFER, 0) (501)
&gt; 
&gt; ../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp(725) : void WebCore::debugGLCommand(const char*, int)

Sounds familiar.
Some of the N9-specific stuff was not upstreamed yet, namely going to software mode when going to the background and other similar candies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491548</commentid>
    <comment_count>74</comment_count>
      <attachid>111979</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-27 07:21:06 -0700</bug_when>
    <thetext>Comment on attachment 111979
Patch

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

r=me, with two changes:

1) Revert the ItemHasContents piece to avoid the ASSERT
2) Fix the location of the d-&gt;paintingIsInitialized = true assignment

We plan on doing the next qt5 update tomorrow, which will require us to adapt to source incompatible changes (QSG* -&gt; QQuick* renaming in qtdeclarative). So perhaps you can land this today your time? Otherwise the patch will need a rebase :)

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:160
&gt; +float computeEffectiveOpacity(const QSGItem* item)

Missing &apos;static&apos; keyword :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491557</commentid>
    <comment_count>75</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2011-10-27 07:34:28 -0700</bug_when>
    <thetext>Landing soon would be awesome, so then we can go ahead with more cleanups around the qt wk2 classes. nice work btw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492295</commentid>
    <comment_count>76</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-10-28 01:00:36 -0700</bug_when>
    <thetext>Committed r98706: &lt;http://trac.webkit.org/changeset/98706&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109313</attachid>
            <date>2011-09-30 10:50:33 -0700</date>
            <delta_ts>2011-10-06 16:52:41 -0700</delta_ts>
            <desc>Not for review.</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>125928</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNjUxNTUxLi43MmZkOWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUg
QEAKKzIwMTEtMDktMzAgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1dLMl0gU3luY2hyb25pemUgdGlsaW5nIHdpdGggYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY5MTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWxsb3cgVGV4dHVyZU1hcHBlciB0byB3b3JrIGluIG1hbmFnZWQtdGlsZSBtb2RlLCB3
aGVyZSB0aWxlcyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgbm9kZSBmcm9tIG91dHNpZGUKKyAgICAg
ICAgcmF0aGVyIHRoYW4gbWFuYWdlZCBpbnNpZGUgdGhlIG5vZGUuIFRoZSBvbGQgdGlsZSBtZWNo
YW5pc20sIHdoaWNoIHdhcyB0aGVyZSBtYWlubHkgdG8gb3ZlcmNvbWUgdGhlCisgICAgICAgIGxp
bWl0IG9uIHRleHR1cmUgc2l6ZSwgaXMgc3RpbGwgdGhlcmUgbWFpbmx5IGZvciBXZWJLaXQxLCBh
bmQgaXMgcmVuYW1lZCAiYmFzaWMiIHRpbGUgbW9kZS4KKworICAgICAgICBUaGlzIGNvZGUgaXMg
Y3VycmVudGx5IG5vdCBpbiB1c2UsIHVudGlsIGFsbCB0aGUgcGllY2VzIG9uIHRoZSBXZWJLaXQy
IHNpZGUgYXJlIHNldHRsZWQuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHkgc28gbm8g
bmV3IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVN
YXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xp
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVGlsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpjb2xsZWN0VmlzaWJsZUNvbnRlbnRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6dGFyZ2V0UmVjdEZvclRpbGVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OmNyZWF0ZUNvbnRlbnRUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpyZW1vdmVDb250ZW50VGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNs
ZWFyRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudFRpbGVCYWNrQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzd2FwQ29udGVudEJ1ZmZlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRpbGVNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjp0aWxlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTm9kZTo6c2V0SUQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp0ZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpNYW5hZ2VkVGlsZTo6TWFuYWdlZFRp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OlN0YXRlOjpTdGF0ZSk6
CisKIDIwMTEtMDktMjkgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtGcmVldHlwZV0gU29tZSB0ZXh0IGluIFBsYW5ldCBHTk9NRSByZW5kZXJzIGlu
IHRoZSB3cm9uZyBwbGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA3ODMyMGE1Li44Yzhi
ZjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtNzUyLDYgKzc1Miw3IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVs
Vmlld01hdHJpeCwgY29uCiAgICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX0tFRVAsIEdMX0tFRVAs
IEdMX0tFRVApKQogICAgIHN0ZW5jaWxJbmRleCA8PD0gMTsKICAgICBnbFN0ZW5jaWxGdW5jKHN0
ZW5jaWxJbmRleCA+IDEgPyBHTF9FUVVBTCA6IEdMX0FMV0FZUywgc3RlbmNpbEluZGV4IC0gMSwg
c3RlbmNpbEluZGV4IC0gMSk7CisgICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW1JbmZvLnZlcnRleEF0dHJpYikpCiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpl
bmRDbGlwKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCmluZGV4IDU0YmEzYjMuLjY4ZDViZWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcApAQCAtMTczLDI5ICsxNzMsMzAgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUFsbFRyYW5zZm9ybXMoKQogCiB2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpjb21wdXRlVGlsZXMoKQogeworICAgIGlmICh0aWxlTW9kZSgpID09IE1hbmFn
ZWRUaWxlTW9kZSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNv
bnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSAmJiAhbV9zdGF0ZS5kcmF3c0NvbnRlbnQpIHsK
LSAgICAgICAgbV90aWxlcy5jbGVhcigpOworICAgICAgICBtX2Jhc2ljVGlsZXMuY2xlYXIoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlc1RvQWRk
OwogICAgIFZlY3RvcjxpbnQ+IHRpbGVzVG9SZW1vdmU7CiAgICAgY29uc3QgaW50IFRpbGVFcmFz
ZVRocmVzaG9sZCA9IDY7CiAgICAgRmxvYXRTaXplIHNpemUgPSBjb250ZW50U2l6ZSgpOwotICAg
IEZsb2F0UmVjdCBjb250ZW50UmVjdCgwLCAwLCBzaXplLndpZHRoKCkgKiBtX3N0YXRlLmNvbnRl
bnRTY2FsZSwgc2l6ZS5oZWlnaHQoKSAqIG1fc3RhdGUuY29udGVudFNjYWxlKTsKKyAgICBGbG9h
dFJlY3QgY29udGVudFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIAog
ICAgIGZvciAoZmxvYXQgeSA9IDA7IHkgPCBjb250ZW50UmVjdC5oZWlnaHQoKTsgeSArPSBnVGls
ZURpbWVuc2lvbikgewogICAgICAgICBmb3IgKGZsb2F0IHggPSAwOyB4IDwgY29udGVudFJlY3Qu
d2lkdGgoKTsgeCArPSBnVGlsZURpbWVuc2lvbikgewogICAgICAgICAgICAgRmxvYXRSZWN0IHRp
bGVSZWN0KHgsIHksIGdUaWxlRGltZW5zaW9uLCBnVGlsZURpbWVuc2lvbik7CiAgICAgICAgICAg
ICB0aWxlUmVjdC5pbnRlcnNlY3QoY29udGVudFJlY3QpOwogICAgICAgICAgICAgRmxvYXRSZWN0
IHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMgPSB0aWxlUmVjdDsKLSAgICAgICAgICAgIHRpbGVS
ZWN0SW5Sb290Q29vcmRpbmF0ZXMuc2NhbGUoMS4wIC8gbV9zdGF0ZS5jb250ZW50U2NhbGUpOwog
ICAgICAgICAgICAgdGlsZVJlY3RJblJvb3RDb29yZGluYXRlcyA9IG1fdHJhbnNmb3Jtcy50YXJn
ZXQubWFwUmVjdCh0aWxlUmVjdEluUm9vdENvb3JkaW5hdGVzKTsKICAgICAgICAgICAgIHRpbGVz
VG9BZGQuYXBwZW5kKHRpbGVSZWN0KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAoaW50
IGkgPSBtX3RpbGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IEZs
b2F0UmVjdCBvbGRUaWxlID0gbV90aWxlc1tpXS5yZWN0OworICAgIGZvciAoaW50IGkgPSBtX2Jh
c2ljVGlsZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgRmxvYXRS
ZWN0IG9sZFRpbGUgPSBtX2Jhc2ljVGlsZXNbaV0ucmVjdDsKICAgICAgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOwogCiAgICAgICAgIGZvciAoaW50IGogPSB0aWxlc1RvQWRkLnNpemUoKSAtIDE7IGog
Pj0gMDsgLS1qKSB7CkBAIC0yMTQsMjcgKzIxNSw3MiBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
Ojpjb21wdXRlVGlsZXMoKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvQWRk
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmICghdGlsZXNUb1JlbW92ZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIFRpbGUmIHRpbGUgPSBtX3RpbGVzW3RpbGVzVG9SZW1vdmVbMF1dOworICAg
ICAgICAgICAgQmFzaWNUaWxlJiB0aWxlID0gbV9iYXNpY1RpbGVzW3RpbGVzVG9SZW1vdmVbMF1d
OwogICAgICAgICAgICAgdGlsZXNUb1JlbW92ZS5yZW1vdmUoMCk7CiAgICAgICAgICAgICB0aWxl
LnJlY3QgPSB0aWxlc1RvQWRkW2ldOwogICAgICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gdHJ1
ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgVGlsZSB0aWxl
OworICAgICAgICBCYXNpY1RpbGUgdGlsZTsKICAgICAgICAgdGlsZS5yZWN0ID0gdGlsZXNUb0Fk
ZFtpXTsKICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gdHJ1ZTsKLSAgICAgICAgbV90aWxlcy5h
cHBlbmQodGlsZSk7CisgICAgICAgIG1fYmFzaWNUaWxlcy5hcHBlbmQodGlsZSk7CisgICAgfQor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKSAmJiBtX2Jh
c2ljVGlsZXMuc2l6ZSgpID4gVGlsZUVyYXNlVGhyZXNob2xkOyArK2kpCisgICAgICAgIG1fYmFz
aWNUaWxlcy5yZW1vdmUodGlsZXNUb1JlbW92ZVtpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsYW1w
UmVjdChJbnRSZWN0JiByZWN0LCBpbnQgZGltZW5zaW9uKQoreworICAgIHJlY3Quc2hpZnRYRWRn
ZVRvKHJlY3QueCgpIC0gcmVjdC54KCkgJSBkaW1lbnNpb24pOworICAgIHJlY3Quc2hpZnRZRWRn
ZVRvKHJlY3QueSgpIC0gcmVjdC55KCkgJSBkaW1lbnNpb24pOworICAgIHJlY3Quc2hpZnRNYXhY
RWRnZVRvKHJlY3QubWF4WCgpIC0gcmVjdC54KCkgJSBkaW1lbnNpb24gKyBkaW1lbnNpb24pOwor
ICAgIHJlY3Quc2hpZnRNYXhZRWRnZVRvKHJlY3QubWF4WSgpIC0gcmVjdC55KCkgJSBkaW1lbnNp
b24gKyBkaW1lbnNpb24pOworfQorCitib29sIFRleHR1cmVNYXBwZXJOb2RlOjpjb2xsZWN0Vmlz
aWJsZUNvbnRlbnRSZWN0cyhOb2RlUmVjdE1hcCYgcmVjdE1hcCwgY29uc3QgRmxvYXRSZWN0JiBy
b290VmlzaWJsZVJlY3QpCit7CisgICAgaWYgKCFtX3N0YXRlLnZpc2libGUgfHwgbV9zdGF0ZS5v
cGFjaXR5IDwgMC4wMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgZm91bmQgPSBm
YWxzZTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkK
KyAgICAgICAgZm91bmQgPSBtX2NoaWxkcmVuW2ldLT5jb2xsZWN0VmlzaWJsZUNvbnRlbnRSZWN0
cyhyZWN0TWFwLCByb290VmlzaWJsZVJlY3QpIHx8IGZvdW5kOworICAgIGlmIChtX3N0YXRlLm1h
c2tMYXllcikKKyAgICAgICAgZm91bmQgPSBtX3N0YXRlLm1hc2tMYXllci0+Y29sbGVjdFZpc2li
bGVDb250ZW50UmVjdHMocmVjdE1hcCwgcm9vdFZpc2libGVSZWN0KSB8fCBmb3VuZDsKKyAgICBp
ZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIGZvdW5kID0gbV9zdGF0ZS5yZXBsaWNh
TGF5ZXItPmNvbGxlY3RWaXNpYmxlQ29udGVudFJlY3RzKHJlY3RNYXAsIHJvb3RWaXNpYmxlUmVj
dCkgfHwgZm91bmQ7CisKKyAgICBpZiAoIW1fdHJhbnNmb3Jtcy50YXJnZXQuaXNJbnZlcnRpYmxl
KCkpCisgICAgICAgIHJldHVybiBmb3VuZDsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgdGlsaW5n
VGhyZXNob2xkID0gMjU2OworCisgICAgSW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KDAsIDAs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgIGlmIChtX3NpemUud2lkdGgo
KSA+IHRpbGluZ1RocmVzaG9sZCB8fCBtX3NpemUuaGVpZ2h0KCkgPiB0aWxpbmdUaHJlc2hvbGQp
IHsKKyAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdEluTG9jYWxDb29yZGluYXRlcyA9IGVuY2xv
c2luZ0ludFJlY3QoVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1zLnRhcmdldCkuaW52
ZXJzZSgpLm1hcFJlY3Qocm9vdFZpc2libGVSZWN0KSk7CisgICAgICAgIGlmICghdmlzaWJsZVJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgY2xhbXBSZWN0KHZp
c2libGVSZWN0SW5Mb2NhbENvb3JkaW5hdGVzLCBnVGlsZURpbWVuc2lvbik7CisgICAgICAgIHZp
c2libGVDb250ZW50c1JlY3QuaW50ZXJzZWN0KHZpc2libGVSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KTsKICAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9SZW1vdmUuc2l6
ZSgpICYmIG1fdGlsZXMuc2l6ZSgpID4gVGlsZUVyYXNlVGhyZXNob2xkOyArK2kpCi0gICAgICAg
IG1fdGlsZXMucmVtb3ZlKHRpbGVzVG9SZW1vdmVbaV0pOworICAgIGlmICh2aXNpYmxlQ29udGVu
dHNSZWN0LmlzRW1wdHkoKSB8fCB2aXNpYmxlQ29udGVudHNSZWN0ID09IG1fc3RhdGUudmlzaWJs
ZVJlY3QpCisgICAgICAgIHJldHVybiBmb3VuZDsKKworICAgIG1fc3RhdGUudmlzaWJsZVJlY3Qg
PSB2aXNpYmxlQ29udGVudHNSZWN0OworICAgIHJlY3RNYXAuYWRkKHRoaXMsIG1fc3RhdGUudmlz
aWJsZVJlY3QpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NM
YXllciogbGF5ZXIpCiB7CisgICAgaWYgKHRpbGVNb2RlKCkgPT0gTWFuYWdlZFRpbGVNb2RlKQor
ICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWxheWVyIHx8ICgh
bV9zdGF0ZS5kcmF3c0NvbnRlbnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBI
VE1MQ29udGVudFR5cGUpKSB7Ci0gICAgICAgIG1fdGlsZXMuY2xlYXIoKTsKKyAgICAgICAgbV9i
YXNpY1RpbGVzLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI0NiwxMCAr
MjkyLDkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudChUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWUKIAogICAgIC8vIEZJWE1FOiBBZGQgZGly
ZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMuCiAgICAgRmxvYXRSZWN0IGRpcnR5UmVjdCA9IG1fY3Vy
cmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID8gZW50aXJlUmVjdCgpIDogbV9jdXJyZW50Q29udGVu
dC5uZWVkc0Rpc3BsYXlSZWN0OwotICAgIGRpcnR5UmVjdC5zY2FsZShtX3N0YXRlLmNvbnRlbnRT
Y2FsZSk7CiAKLSAgICBmb3IgKHNpemVfdCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCBtX3Rp
bGVzLnNpemUoKTsgKyt0aWxlSW5kZXgpIHsKLSAgICAgICAgVGlsZSYgdGlsZSA9IG1fdGlsZXNb
dGlsZUluZGV4XTsKKyAgICBmb3IgKHNpemVfdCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCBt
X2Jhc2ljVGlsZXMuc2l6ZSgpOyArK3RpbGVJbmRleCkgeworICAgICAgICBCYXNpY1RpbGUmIHRp
bGUgPSBtX2Jhc2ljVGlsZXNbdGlsZUluZGV4XTsKICAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBk
aXJ0eVJlY3Q7CiAgICAgICAgIGlmICghdGlsZS50ZXh0dXJlKQogICAgICAgICAgICAgdGlsZS50
ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwpAQCAtMjc2LDkgKzMyMSw3
IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllCiAgICAgICAgICAgICBjb250ZXh0LnNldEltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkodGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKTsKICAgICAgICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKHRleHR1cmVN
YXBwZXItPnRleHREcmF3aW5nTW9kZSgpKTsKICAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRl
KG9mZnNldC54KCksIG9mZnNldC55KCkpOwotICAgICAgICAgICAgY29udGV4dC5zY2FsZShGbG9h
dFNpemUobV9zdGF0ZS5jb250ZW50U2NhbGUsIG1fc3RhdGUuY29udGVudFNjYWxlKSk7CiAgICAg
ICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkQ29udGVudFJlY3QoY29udGVudFJlY3QpOwotICAgICAg
ICAgICAgc2NhbGVkQ29udGVudFJlY3Quc2NhbGUoMS4wIC8gbV9zdGF0ZS5jb250ZW50U2NhbGUp
OwogICAgICAgICAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0
SW1hZ2VDb250ZW50VHlwZSkKICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtX2N1
cnJlbnRDb250ZW50LmltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgw
LCAwKSk7CiAgICAgICAgICAgICBlbHNlCkBAIC0zMDksMTAgKzM1MiwxMCBAQCB2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpwYWludCgpCiBGbG9hdFJlY3QgVGV4dHVyZU1hcHBlck5vZGU6OnRhcmdl
dFJlY3RGb3JUaWxlUmVjdChjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEZsb2F0UmVjdCgKLSAgICAgICAg
ICAgICAgICB0YXJnZXRSZWN0LngoKSArICh0aWxlUmVjdC54KCkgLSB0YXJnZXRSZWN0LngoKSkg
LyBtX3N0YXRlLmNvbnRlbnRTY2FsZSwKLSAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LnkoKSAr
ICh0aWxlUmVjdC55KCkgLSB0YXJnZXRSZWN0LnkoKSkgLyBtX3N0YXRlLmNvbnRlbnRTY2FsZSwK
LSAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpIC8gbV9zdGF0ZS5jb250ZW50U2NhbGUs
Ci0gICAgICAgICAgICAgICAgdGlsZVJlY3QuaGVpZ2h0KCkgLyBtX3N0YXRlLmNvbnRlbnRTY2Fs
ZSk7CisgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCkgKyAodGlsZVJlY3QueCgpIC0gdGFy
Z2V0UmVjdC54KCkpLAorICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueSgpICsgKHRpbGVSZWN0
LnkoKSAtIHRhcmdldFJlY3QueSgpKSwKKyAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgp
LAorICAgICAgICAgICAgICAgIHRpbGVSZWN0LmhlaWdodCgpKTsKIH0KIAogdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9w
dGlvbnMpCkBAIC0zMjgsOSArMzcxLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRT
ZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgaWYgKG1f
c3RhdGUucmVwbGljYUxheWVyICYmIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tM
YXllcikKICAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXIt
Pm1fc3RhdGUubWFza0xheWVyLT50ZXh0dXJlKCk7CiAKLSAgICBjb25zdCBmbG9hdCBvcGFjaXR5
ID0gb3B0aW9ucy5pc1N1cmZhY2UgPyAxIDogb3B0aW9ucy5vcGFjaXR5OwotCi0gICAgY29uc3Qg
RmxvYXRSZWN0IHRhcmdldFJlY3QgPSB0aGlzLT50YXJnZXRSZWN0KCk7CisgICAgZmxvYXQgb3Bh
Y2l0eSA9IG9wdGlvbnMuaXNTdXJmYWNlID8gMSA6IG9wdGlvbnMub3BhY2l0eTsKKyAgICBGbG9h
dFJlY3QgdGFyZ2V0UmVjdCA9IHRoaXMtPnRhcmdldFJlY3QoKTsKIAogICAgIGlmIChtX2N1cnJl
bnRDb250ZW50LmNvbnRlbnRUeXBlID09IE1lZGlhQ29udGVudFR5cGUgJiYgbV9jdXJyZW50Q29u
dGVudC5tZWRpYSkgewogICAgICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgIW9wdGlv
bnMuaXNTdXJmYWNlKQpAQCAtMzQyLDE2ICszODQsNTIgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6cGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGls
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQml0bWFwVGV4dHVyZSogdGV4dHVyZSA9IG1fdGls
ZXNbaV0udGV4dHVyZS5nZXQoKTsKKyAgICBWZWN0b3I8TWFuYWdlZFRpbGU+IHRpbGVzVG9QYWlu
dDsKKworCisgICAgaWYgKHRpbGVNb2RlKCkgPT0gTWFuYWdlZFRpbGVNb2RlKSB7CisgICAgICAg
IC8vIFNvcnQgdGlsZXMsIHdpdGggY3VycmVudCBzY2FsZSBmYWN0b3IgbGFzdC4KKyAgICAgICAg
VmVjdG9yPE1hbmFnZWRUaWxlKj4gdGlsZXM7CisgICAgICAgIEhhc2hNYXA8aW50LCBNYW5hZ2Vk
VGlsZT46Oml0ZXJhdG9yIGVuZEl0ZXJhdG9yID0gbV9tYW5hZ2VkVGlsZXMuZW5kKCk7CisgICAg
ICAgIGZvciAoSGFzaE1hcDxpbnQsIE1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX21hbmFn
ZWRUaWxlcy5iZWdpbigpOyBpdCAhPSBlbmRJdGVyYXRvcjsgKytpdCkgeworICAgICAgICAgICAg
aWYgKCFpdC0+c2Vjb25kLmZyb250QnVmZmVyLnRleHR1cmUpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5zY2FsZSA9PSBtX3N0YXRlLmNvbnRl
bnRTY2FsZSkKKyAgICAgICAgICAgICAgICB0aWxlcy5hcHBlbmQoJml0LT5zZWNvbmQpOworICAg
ICAgICAgICAgZWxzZSBpZiAob3BhY2l0eSA+IDAuOTUpCisgICAgICAgICAgICAgICAgdGlsZXMu
cHJlcGVuZCgmaXQtPnNlY29uZCk7CisgICAgICAgIH0KKworICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBzY2FsZWRNYXRyaXggPSBtX3RyYW5zZm9ybXMudGFyZ2V0OworICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhTWF0cml4OworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHRpbGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBNYW5hZ2VkVGlsZSYgdGlsZSA9
ICp0aWxlc1tpXTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gdGlsZS5mcm9udEJ1ZmZl
ci50YXJnZXRSZWN0OworCisgICAgICAgICAgICBmbG9hdCByZXBsaWNhT3BhY2l0eSA9IDEuMDsK
KyAgICAgICAgICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikgeworICAgICAgICAgICAgICAg
IHJlcGxpY2FNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFyZ2V0
KS5zY2FsZSgxLjAgLyB0aWxlLnNjYWxlKS5tdWx0aXBseShtX3N0YXRlLnJlcGxpY2FMYXllci0+
bV90cmFuc2Zvcm1zLmxvY2FsKTsKKyAgICAgICAgICAgICAgICByZXBsaWNhT3BhY2l0eSA9IG9w
YWNpdHkgKiBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9vcGFjaXR5OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSA9ICp0aWxlLmZyb250QnVmZmVyLnRl
eHR1cmU7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgICAg
ICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCByZWN0LCBy
ZXBsaWNhTWF0cml4LCByZXBsaWNhT3BhY2l0eSwgcmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGlj
YU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOworICAgICAgICAgICAgb3B0
aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCByZWN0LCBzY2FsZWRNYXRy
aXgsIG9wYWNpdHksIG9wdGlvbnMuaXNTdXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlLmdldCgpKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYmFzaWNUaWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBCaXRtYXBUZXh0
dXJlKiB0ZXh0dXJlID0gbV9iYXNpY1RpbGVzW2ldLnRleHR1cmUuZ2V0KCk7CiAgICAgICAgIGlm
IChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhb3B0aW9ucy5pc1N1cmZhY2UpIHsKLSAgICAgICAg
ICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnRleHR1cmUsIHRhcmdldFJl
Y3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0LCBtX3RpbGVzW2ldLnJlY3QpLAorICAgICAgICAgICAg
b3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqdGV4dHVyZSwgdGFyZ2V0UmVjdEZv
clRpbGVSZWN0KHRhcmdldFJlY3QsIG1fYmFzaWNUaWxlc1tpXS5yZWN0KSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1zLnRhcmdl
dCkubXVsdGlwbHkobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2NhbCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgKiBtX3N0YXRlLnJlcGxpY2FMYXll
ci0+bV9vcGFjaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsaWNhTWFza1Rl
eHR1cmUgPyByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5nZXQoKSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBjb25zdCBGbG9hdFJlY3QgcmVjdCA9IHRhcmdldFJlY3RGb3JU
aWxlUmVjdCh0YXJnZXRSZWN0LCBtX3RpbGVzW2ldLnJlY3QpOworICAgICAgICBjb25zdCBGbG9h
dFJlY3QgcmVjdCA9IHRhcmdldFJlY3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0LCBtX2Jhc2ljVGls
ZXNbaV0ucmVjdCk7CiAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUo
KnRleHR1cmUsIHJlY3QsIG1fdHJhbnNmb3Jtcy50YXJnZXQsIG9wYWNpdHksIG9wdGlvbnMuaXNT
dXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlLmdldCgpKTsKICAgICB9CiB9CkBAIC01MTIsNiArNTkw
LDgxIEBAIFRleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUoKQogICAgICAgICBt
X3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUobV9wYXJlbnQtPm1fY2hpbGRyZW4uZmluZCh0aGlz
KSk7CiB9CiAKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKK2ludCBUZXh0dXJlTWFw
cGVyTm9kZTo6Y3JlYXRlQ29udGVudFRpbGUoZmxvYXQgc2NhbGUpCit7CisgICAgc3RhdGljIGlu
dCBuZXh0SUQgPSAwOworICAgIGludCBpZCA9ICsrbmV4dElEOworICAgIG1fbWFuYWdlZFRpbGVz
LmFkZChpZCwgTWFuYWdlZFRpbGUoc2NhbGUpKTsKKyAgICBtX3N0YXRlLmNvbnRlbnRTY2FsZSA9
IHNjYWxlOworICAgIHJldHVybiBpZDsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVt
b3ZlQ29udGVudFRpbGUoaW50IGlkKQoreworICAgIG1fbWFuYWdlZFRpbGVzLnJlbW92ZShpZCk7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldFRpbGVCYWNrQnVmZmVyVGV4dHVyZUZv
ckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKQor
eworICAgIEhhc2hNYXA8aW50LCBNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9tYW5hZ2Vk
VGlsZXMuZmluZChpZCk7CisKKyAgICBpZiAoaXQgPT0gbV9tYW5hZ2VkVGlsZXMuZW5kKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIE1hbmFnZWRUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsKKwor
ICAgIHRpbGUuYmFja0J1ZmZlci5zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKKyAgICB0aWxlLmJh
Y2tCdWZmZXIudGFyZ2V0UmVjdCA9IHRhcmdldFJlY3Q7CisgICAgdGlsZS5iYWNrQnVmZmVyLnRl
eHR1cmUgPSB0ZXh0dXJlOworICAgIHRpbGUuYmFja0J1ZmZlclVwZGF0ZWQgPSB0cnVlOworICAg
IHRpbGUuaXNEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSA9IHRydWU7Cit9CisKK3ZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OmNsZWFyRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpCit7CisgICAg
Zm9yIChIYXNoTWFwPGludCwgTWFuYWdlZFRpbGU+OjppdGVyYXRvciBpdCA9IG1fbWFuYWdlZFRp
bGVzLmJlZ2luKCk7IGl0ICE9IG1fbWFuYWdlZFRpbGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAg
IGlmIChpdC0+c2Vjb25kLmlzRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UpCisgICAgICAgICAgICBt
X21hbmFnZWRUaWxlcy5yZW1vdmUoaXQpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6c2V0Q29udGVudFRpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgdm9pZCogYml0cywgQml0bWFwVGV4
dHVyZTo6UGl4ZWxGb3JtYXQgZm9ybWF0KQoreworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIp
OworCisgICAgSGFzaE1hcDxpbnQsIE1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX21hbmFn
ZWRUaWxlcy5maW5kKGlkKTsKKyAgICBpZiAoaXQgPT0gbV9tYW5hZ2VkVGlsZXMuZW5kKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIE1hbmFnZWRUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsKKwor
ICAgIHRpbGUuYmFja0J1ZmZlci5zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKKyAgICB0aWxlLmJh
Y2tCdWZmZXIudGFyZ2V0UmVjdCA9IEZsb2F0UmVjdCh0YXJnZXRSZWN0KTsKKyAgICB0aWxlLmJh
Y2tCdWZmZXIudGFyZ2V0UmVjdC5zY2FsZSgxLjAgLyB0aWxlLnNjYWxlKTsKKworICAgIGlmICgh
dGlsZS5iYWNrQnVmZmVyLnRleHR1cmUpCisgICAgICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJl
ID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgdGlsZS5iYWNrQnVmZmVy
LnRleHR1cmUtPnJlc2V0KHNvdXJjZVJlY3Quc2l6ZSgpLCBmYWxzZSk7CisgICAgdGlsZS5iYWNr
QnVmZmVyLnRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGZvcm1hdCwgc291cmNlUmVjdCwgYml0cyk7
CisgICAgdGlsZS5iYWNrQnVmZmVyVXBkYXRlZCA9IHRydWU7Cit9CisKK3ZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnN3YXBDb250ZW50QnVmZmVycygpCit7CisgICAgSGFzaE1hcDxpbnQsIE1hbmFn
ZWRUaWxlPjo6aXRlcmF0b3IgZW5kSXRlcmF0b3IgPSBtX21hbmFnZWRUaWxlcy5lbmQoKTsKKyAg
ICBmb3IgKEhhc2hNYXA8aW50LCBNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9tYW5hZ2Vk
VGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kSXRlcmF0b3I7ICsraXQpIHsKKyAgICAgICAgTWFuYWdl
ZFRpbGUmIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoIXRpbGUuYmFja0J1ZmZlclVw
ZGF0ZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdGlsZS5iYWNrQnVmZmVyVXBk
YXRlZCA9IGZhbHNlOworICAgICAgICBNYW5hZ2VkVGlsZUJ1ZmZlciBzd2FwQnVmZmVyID0gdGls
ZS5mcm9udEJ1ZmZlcjsKKyAgICAgICAgdGlsZS5mcm9udEJ1ZmZlciA9IHRpbGUuYmFja0J1ZmZl
cjsKKyAgICAgICAgdGlsZS5iYWNrQnVmZmVyID0gc3dhcEJ1ZmZlcjsKKyAgICB9Cit9CisjZW5k
aWYKKwogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIGludCBvcHRpb25zKQogewogICAg
IHN5bmNDb21wb3NpdGluZ1N0YXRlKGdyYXBoaWNzTGF5ZXIsIHJvb3RMYXllcigpLT5tX3RleHR1
cmVNYXBwZXIsIG9wdGlvbnMpOwpAQCAtNTIxLDYgKzY3NCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ciogZ3JhCiB7CiAgICAgaW50IGNoYW5nZU1hc2sgPSBncmFwaGljc0xheWVyLT5jaGFuZ2VNYXNr
KCk7CiAgICAgY29uc3QgVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhJiBwZW5kaW5nQ29u
dGVudCA9IGdyYXBoaWNzTGF5ZXItPnBlbmRpbmdDb250ZW50KCk7CisgICAgc3dhcENvbnRlbnRC
dWZmZXJzKCk7CiAgICAgaWYgKGNoYW5nZU1hc2sgPT0gTm9DaGFuZ2VzICYmIGdyYXBoaWNzTGF5
ZXItPm1fYW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5
UmVjdC5pc0VtcHR5KCkgJiYgIXBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC01NjIsNyArNzE2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAg
ICAgICAgICAgIHdhbnRlZFNpemUgPSBGbG9hdFNpemUoZ3JhcGhpY3NMYXllci0+Y29udGVudHNS
ZWN0KCkud2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0KCkpOwog
CiAgICAgICAgIGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkKLSAgICAgICAgICAgIG1fdGlsZXMu
Y2xlYXIoKTsKKyAgICAgICAgICAgIG1fYmFzaWNUaWxlcy5jbGVhcigpOwogCiAgICAgICAgIG1f
c2l6ZSA9IHdhbnRlZFNpemU7CiAgICAgfQpAQCAtNjExLDYgKzc2NSw3IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlciogZ3JhCiAgICAgICAgIG1fdHJhbnNmb3Jtcy5iYXNlID0gbV9zdGF0ZS50cmFuc2Zv
cm07CiB9CiAKKwogYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFudHNPclNlbGZIYXZl
UnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7CkBAIC04MTYsNyArOTcxLDcgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnMoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIq
IGxheWVyKQogCiB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlciwgaW50IG9wdGlvbnMpCiB7Ci0gICAgaWYgKGdyYXBoaWNzTGF5ZXIpIHsK
KyAgICBpZiAoZ3JhcGhpY3NMYXllciAmJiAhKG9wdGlvbnMgJiBDb21wdXRhdGlvbnNPbmx5KSkg
ewogICAgICAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoZ3JhcGhpY3NMYXllciwgdGV4dHVy
ZU1hcHBlcik7CiAgICAgICAgIGdyYXBoaWNzTGF5ZXItPmRpZFN5bmNocm9uaXplKCk7CiAgICAg
fQpAQCAtODQzLDcgKzk5OCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3Np
dGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljCiAgICAgICAgIHJl
bmRlckNvbnRlbnQodGV4dHVyZU1hcHBlciwgZ3JhcGhpY3NMYXllcik7CiAKICAgICBpZiAoIShv
cHRpb25zICYgVHJhdmVyc2VEZXNjZW5kYW50cykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
b3B0aW9ucyA9IENvbXB1dGF0aW9uc09ubHk7CiAKICAgICBpZiAoZ3JhcGhpY3NMYXllcikgewog
ICAgICAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuID0gZ3JhcGhpY3NMYXllci0+
Y2hpbGRyZW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKaW5kZXggYzI5OWQ2Yi4uM2YxZmQwZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSW1h
Z2UuaCIKKyNpbmNsdWRlICJJbnRQb2ludEhhc2guaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgi
CkBAIC0xMDMsOSArMTA0LDE3IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgZW51bSBTeW5jT3B0
aW9ucyB7Ci0gICAgICAgIFRyYXZlcnNlRGVzY2VuZGFudHMgPSAxCisgICAgICAgIFRyYXZlcnNl
RGVzY2VuZGFudHMgPSAxLAorICAgICAgICBDb21wdXRhdGlvbnNPbmx5ID0gMgogICAgIH07CiAK
KyAgICBlbnVtIFRpbGVNb2RlIHsKKyAgICAgICAgQmFzaWNUaWxlTW9kZSwKKyAgICAgICAgTWFu
YWdlZFRpbGVNb2RlCisgICAgfTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxUZXh0dXJlTWFwcGVy
Tm9kZSosIEZsb2F0UmVjdD4gTm9kZVJlY3RNYXA7CisKICAgICAvLyBUaGUgY29tcG9zaXRvciBs
ZXRzIHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28gd2UgdHJ5IHRvIGRvIHNv
LgogICAgIGVudW0gQ29udGVudFR5cGUgeyBIVE1MQ29udGVudFR5cGUsIERpcmVjdEltYWdlQ29u
dGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVudFR5cGUsIENhbnZhczNEQ29u
dGVudFR5cGV9OwogICAgIHN0cnVjdCBDb250ZW50RGF0YSB7CkBAIC0xMzIsNyArMTQxLDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlciosIGludCBzeW5jT3B0aW9ucyA9IDApOwogICAgIHZvaWQgc3luY0NvbXBvc2l0
aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqLCBUZXh0dXJlTWFwcGVyKiwgaW50
IHN5bmNPcHRpb25zID0gMCk7Ci0gICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50
U2l6ZShtX3NpemUud2lkdGgoKSArIC41LCBtX3NpemUuaGVpZ2h0KCkgKyAuNSk7IH0KKyAgICBJ
bnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpOyB9CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmKTsKICAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQgdmFsdWUpIHsgbV9vcGFjaXR5
ID0gdmFsdWU7IH0KICAgICB2b2lkIHNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4
bWFwKSB7IG1fdGV4dHVyZU1hcHBlciA9IHRleG1hcDsgfQpAQCAtMTQwLDE5ICsxNDksMzEgQEAg
cHVibGljOgogCiAgICAgdm9pZCBwYWludCgpOwogCi0gICAgYm9vbCBuZWVkc1RvQ29tcHV0ZUJv
dW5kaW5nUmVjdCgpIGNvbnN0OworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAg
IHZvaWQgc2V0VGlsZU1vZGUoVGlsZU1vZGUgbW9kZSkgeyBtX3N0YXRlLnRpbGVNb2RlID0gbW9k
ZTsgfQorICAgIGJvb2wgdGlsZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRpbGVNb2Rl
OyB9CisgICAgaW50IGNyZWF0ZUNvbnRlbnRUaWxlKGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIHJl
bW92ZUNvbnRlbnRUaWxlKGludCBpZCk7CisgICAgdm9pZCBzZXRDb250ZW50VGlsZUJhY2tCdWZm
ZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJn
ZXRSZWN0LCB2b2lkKiBiaXRzLCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCk7CisgICAgdm9p
ZCBzZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQg
aWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgQml0bWFwVGV4dHVyZSopOworICAgIHZvaWQgY2xlYXJEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZVRpbGVzKCk7CisgICAgYm9vbCBjb2xsZWN0VmlzaWJsZUNvbnRlbnRSZWN0cyhOb2RlUmVjdE1h
cCYsIGNvbnN0IEZsb2F0UmVjdCYpOworI2VuZGlmCisgICAgdm9pZCBzZXRJRChpbnQgaWQpIHsg
bV9pZCA9IGlkOyB9CisgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQogCiAgICAg
Y29uc3QgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIG1lZGlhKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50Q29udGVudC5tZWRpYTsgfQogCiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJO
b2RlKiByb290TGF5ZXIoKTsKICAgICB2b2lkIGNvbXB1dGVBbGxUcmFuc2Zvcm1zKCk7CisgICAg
dm9pZCBjb21wdXRlVmlzaWJsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByb290VmlzaWJsZVJlY3Qp
OwogICAgIHZvaWQgY29tcHV0ZVBlcnNwZWN0aXZlVHJhbnNmb3JtSWZOZWVkZWQoKTsKICAgICB2
b2lkIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtSWZOZWVkZWQoKTsKICAgICB2b2lkIGNvbXB1dGVP
dmVybGFwc0lmTmVlZGVkKCk7CiAgICAgdm9pZCBjb21wdXRlTG9jYWxUcmFuc2Zvcm1JZk5lZWRl
ZCgpOwotICAgIHZvaWQgY29tcHV0ZUJvdW5kaW5nUmVjdEZyb21Sb290SWZOZWVkZWQoKTsKICAg
ICB2b2lkIGNvbXB1dGVUaWxlcygpOworICAgIHZvaWQgc3dhcENvbnRlbnRCdWZmZXJzKCk7CiAg
ICAgaW50IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OwogICAgIEZsb2F0UmVj
dCB0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB0b3RhbFRhcmdldFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QpIGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZVZp
ZXdwb3J0KGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtMTYyLDcgKzE4Myw3IEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIGludCBjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwg
Y29uc3Qgdm9pZCogYik7CiAgICAgc3RhdGljIHZvaWQgc29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0
dXJlTWFwcGVyTm9kZSogPiYgYXJyYXksIGludCBmaXJzdCwgaW50IGxhc3QpOwogCi0gICAgQml0
bWFwVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGlsZXMuaXNFbXB0eSgpID8gMCA6IG1f
dGlsZXNbMF0udGV4dHVyZS5nZXQoKTsgfQorICAgIEJpdG1hcFRleHR1cmUqIHRleHR1cmUoKSB7
IHJldHVybiBtX2Jhc2ljVGlsZXMuaXNFbXB0eSgpID8gMCA6IG1fYmFzaWNUaWxlc1swXS50ZXh0
dXJlLmdldCgpOyB9CiAKICAgICB2b2lkIHBhaW50UmVjdXJzaXZlKFRleHR1cmVNYXBwZXJQYWlu
dE9wdGlvbnMpOwogICAgIGJvb2wgcGFpbnRSZWZsZWN0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJQ
YWludE9wdGlvbnMmLCBCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsKQEAgLTE4NSwxMCArMjA2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWw7CiAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGJhc2U7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHBlcnNwZWN0aXZlOwotICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdSZWN0OwogICAg
ICAgICBmbG9hdCBjZW50ZXJaOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0RnJvbVJv
b3Q7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3RGcm9tUm9vdEZvckRlc2NlbmRhbnRz
OwogICAgICAgICBUcmFuc2Zvcm1EYXRhKCkgeyB9CiAgICAgfTsKIApAQCAtMjA4LDEzICsyMjYs
MzcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRDb250ZW50LmNv
bnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUgJiYgbV9jdXJyZW50Q29udGVudC5p
bWFnZSA/IG1fY3VycmVudENvbnRlbnQuaW1hZ2UtPnNpemUoKSA6IG1fc2l6ZTsKICAgICB9Ci0g
ICAgc3RydWN0IFRpbGUgeworICAgIHN0cnVjdCBCYXNpY1RpbGUgewogICAgICAgICBGbG9hdFJl
Y3QgcmVjdDsKICAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmU7CiAgICAgICAg
IGJvb2wgbmVlZHNSZXNldDsKICAgICB9OwogCi0gICAgVmVjdG9yPFRpbGU+IG1fdGlsZXM7Cisg
ICAgVmVjdG9yPEJhc2ljVGlsZT4gbV9iYXNpY1RpbGVzOworCisgICAgc3RydWN0IE1hbmFnZWRU
aWxlQnVmZmVyIHsKKyAgICAgICAgRmxvYXRSZWN0IHNvdXJjZVJlY3Q7CisgICAgICAgIEZsb2F0
UmVjdCB0YXJnZXRSZWN0OworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsK
KyAgICB9OworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgc3RydWN0IE1h
bmFnZWRUaWxlIHsKKyAgICAgICAgYm9vbCBiYWNrQnVmZmVyVXBkYXRlZDsKKyAgICAgICAgYm9v
bCBpc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlOworICAgICAgICBNYW5hZ2VkVGlsZUJ1ZmZlciBm
cm9udEJ1ZmZlcjsKKyAgICAgICAgTWFuYWdlZFRpbGVCdWZmZXIgYmFja0J1ZmZlcjsKKyAgICAg
ICAgTWFuYWdlZFRpbGUoZmxvYXQgbmV3U2NhbGUgPSAxLjApCisgICAgICAgICAgICA6IGJhY2tC
dWZmZXJVcGRhdGVkKGZhbHNlKQorICAgICAgICAgICAgLCBpc0RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlKGZhbHNlKQorICAgICAgICAgICAgLCBzY2FsZShuZXdTY2FsZSkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIGZsb2F0IHNjYWxlOworICAgIH07CisKKyAgICBIYXNoTWFwPGludCwg
TWFuYWdlZFRpbGU+IG1fbWFuYWdlZFRpbGVzOworI2VuZGlmCiAKICAgICBDb250ZW50RGF0YSBt
X2N1cnJlbnRDb250ZW50OwogCkBAIC0yMjQsNiArMjY2LDcgQEAgcHJpdmF0ZToKICAgICBGbG9h
dFNpemUgbV9zaXplOwogICAgIGZsb2F0IG1fb3BhY2l0eTsKICAgICBTdHJpbmcgbV9uYW1lOwor
ICAgIGludCBtX2lkOwogCiAgICAgc3RydWN0IFN0YXRlIHsKICAgICAgICAgRmxvYXRQb2ludCBw
b3M7CkBAIC0yNDUsMTAgKzI4OCwxMSBAQCBwcml2YXRlOgogICAgICAgICBib29sIG5lZWRzUmVz
ZXQ6IDE7CiAgICAgICAgIGJvb2wgbWlnaHRIYXZlT3ZlcmxhcHMgOiAxOwogICAgICAgICBib29s
IG5lZWRzUmVwYWludDsKLSAgICAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0OwotICAgICAgICBG
bG9hdFJlY3Qgcm9vdFZpc2libGVSZWN0OworICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0Owor
I2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICAgICBUaWxlTW9kZSB0aWxlTW9k
ZTsKICAgICAgICAgZmxvYXQgY29udGVudFNjYWxlOwotCisjZW5kaWYKICAgICAgICAgU3RhdGUo
KQogICAgICAgICAgICAgOiBvcGFjaXR5KDEuZikKICAgICAgICAgICAgICwgbWFza0xheWVyKDAp
CkBAIC0yNjEsNyArMzA1LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAsIHZpc2libGUodHJ1
ZSkKICAgICAgICAgICAgICwgbmVlZHNSZXNldChmYWxzZSkKICAgICAgICAgICAgICwgbWlnaHRI
YXZlT3ZlcmxhcHMoZmFsc2UpCisgICAgICAgICAgICAsIG5lZWRzUmVwYWludChmYWxzZSkKKyNp
ZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAgICAgICAgICwgdGlsZU1vZGUoQmFz
aWNUaWxlTW9kZSkKICAgICAgICAgICAgICwgY29udGVudFNjYWxlKDEuMGYpCisjZW5kaWYKICAg
ICAgICAgewogICAgICAgICB9CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA4OWJhNGM0Li4wY2QzMmQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU3IEBACisyMDExLTA5LTMwICBObydhbSBSb3NlbnRo
YWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIFN5bmNo
cm9uaXplIHRpbGluZyB3aXRoIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE1MQorCisgICAgICAgIExheWVy
LXRyZWUgc3luY2hyb25pemF0aW9uIGlzIGRvbmUgYnkgcGFzc2luZyBXZWJLaXQyIG1lc3NhZ2Vz
IGJldHdlZW4gYSBMYXllclRyZWVIb3N0CisgICAgICAgIG9uIHRoZSBXZWJQcm9jZXNzIGFuZCBh
IExheWVyVHJlZUhvc3RQcm94eSBvbiB0aGUgVUkgcHJvY2Vzcy4gRXZlcnkgbGF5ZXIgaW4gdGhl
IHRyZWUgaGFzIGl0cyBvd24KKyAgICAgICAgdGlsZWQgYmFja2luZyBzdG9yZSwgYW5kIHVzZXMg
dGhlIExheWVyVHJlZUhvc3QgY29tbXVuaWNhdGlvbiBjaGFubmVsIHRvIHBhc3MgY29udGVudCB1
cCB0bworICAgICAgICB0aGUgVUkgcHJvY2Vzcy4KKyAgICAgICAgVGhlIFVJIHByb2Nlc3Mgd2ls
bCBsYXRlciBjcmVhdGVzIGl0cyBvd24gR3JhcGhpY3NMYXllciB0cmVlLCBiYXNlZCBvbiBUZXh0
dXJlTWFwcGVyLCB3aGljaCBjYW4gYmUKKyAgICAgICAgcGFpbnRlZCBkaXJlY3RseSB3aXRoIE9w
ZW5HTC4KKworICAgICAgICBTZXZlcmFsIG9wdGltaXphdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3Ig
dGhlIG5vbi1jb21wb3NpdGVkIGxheWVyIGFzIHdlbGwsIG5hbWVseSBzcGVjaWZ5aW5nIGEgdHJh
amVjdG9yeQorICAgICAgICBhbmQgdXBkYXRpbmcgdGhlIHZpc2libGUgcmVjdCB0b2dldGhlciB3
aXRoIHRoZSBjb250ZW50IHNjYWxlLgorCisgICAgICAgIFRoaXMgY29kZSBpcyBjdXJyZW50bHkg
ZGlzYWJsZWQsIGEgc2VwYXJhdGUgcGF0Y2ggd2lsbCBlbmFibGUgaXQgYW5kIGdsdWUgaXQgdG8g
UVRvdWNoV2ViUGFnZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIERlcml2ZWRTb3VyY2VzLnBybzoKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBD
L01lc3NhZ2VJRC5oOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAg
ICAgICAgKiBTaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbmZvOjplbmNvZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckluZm86OmRlY29kZSk6CisgICAgICAgICogU2hh
cmVkL1dlYkxheWVyVHJlZUluZm8uaDoKKyAgICAgICAgKiBTaGFyZWQvcXQvTGF5ZXJUcmVlQ29u
dGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6TGF5ZXJUcmVl
Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvbnRleHQ6On5MYXllclRyZWVD
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6ZW5jb2RlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29udGV4dDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9y
PT0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlV2ViVmlldyk6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRzUmVjdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6
dmlld3BvcnRWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6
OmlzQmFja2luZ1N0b3JlUmVhZHkpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
OjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhUHJveHk6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3Ip
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5OjpkaWRSZWNlaXZlTGF5ZXJUcmVl
SG9zdFByb3h5TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnBh
Z2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFJl
Y2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZSk6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFq
ZWN0b3J5VmVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnBh
aW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eUltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW46
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJL
aXQyLnBybzoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6V2ViR3JhcGhp
Y3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp+V2ViR3JhcGhp
Y3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJl
bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tp
bmdTdG9yZVBhaW50QmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpz
ZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjpzZXRWaXNpYmxlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0Fs
bG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5n
U3RvcmVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllcjo6cmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xh
eWVyOjp1cGRhdGVUaWxlQnVmZmVyc1JlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OmxheWVyVHJlZVRpbGVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TGF5ZXJUcmVlVGlsZUNsaWVudCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpj
cmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lmg6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50UmVjdEFuZFNj
YWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0VHJhamVjdG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNl
dFZpc2libGVDb250ZW50UmVjdEZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdDo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbjogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdB
cmVhOjpkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRSZWNlaXZlTWVz
c2FnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojp+TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpMYXllclRyZWVIb3N0UXQpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UXQ6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2NoZWR1bGVMYXllckZsdXNoKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0
U2NoZWR1bGVkTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdFF0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UXQ6OmZvcmNlUmVwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6c2l6ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RRdDo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UXQ6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6ZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcik6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6ZGlkRGVsZXRlTGF5ZXIpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNo
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Y3JlYXRlUGFnZU92ZXJsYXlM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6ZGVzdHJveVBhZ2VPdmVy
bGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmFkb3B0SW1hZ2VC
YWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnJlbGVhc2VJ
bWFnZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bm90
aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6
bm90aWZ5U3luY1JlcXVpcmVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpw
YWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzaG93RGVi
dWdCb3JkZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWlu
dENvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNy
ZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnVwZGF0ZVRpbGUp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnJlbW92ZVRpbGUpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVy
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJl
Y3RBbmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJs
ZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFF0OjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQpOgorCiAyMDExLTA5LTIzICBUb3IgQXJu
ZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIEZp
eCBidWlsZCBhZ2FpbnN0IFF0NSBhZnRlciByZWZhY3RvciBvZiB3aWRnZXRzIG91dCBvZiBRdEdV
aQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvIGIvU291cmNl
L1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCmluZGV4IDk5M2RiNGIuLjhlZGVkNGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9EZXJpdmVkU291cmNlcy5wcm8KQEAgLTk3LDYgKzk3LDcgQEAgTUVTU0FHRV9SRUNFSVZF
UlMgPSBcCiAgICAgQXV0aGVudGljYXRpb25NYW5hZ2VyLm1lc3NhZ2VzLmluIFwKICAgICBEb3du
bG9hZFByb3h5Lm1lc3NhZ2VzLmluIFwKICAgICBEcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmlu
IFwKKyAgICBMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gXAogICAgIFBsdWdpbkNvbnRy
b2xsZXJQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luUHJvY2Vzcy5tZXNzYWdlcy5pbiBc
CiAgICAgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gXApAQCAtMTIxLDYgKzEy
Miw3IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLm1l
c3NhZ2VzLmluIFwKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIFwK
ICAgICBXZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluIFwKKyAgICBXZWJQYWdlL0xheWVy
VHJlZUhvc3QubWVzc2FnZXMuaW4gXAogICAgIFdlYlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2Vz
LmluIFwKICAgICBXZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gXAogICAgIFdlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbiBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL01lc3NhZ2VJRC5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdl
SUQuaAppbmRleCAxM2IyMTgzLi40NTUxZDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvTWVzc2FnZUlELmgKQEAgLTM4LDYgKzM4LDcgQEAgZW51bSBNZXNzYWdlQ2xhc3Mg
ewogICAgIE1lc3NhZ2VDbGFzc0F1dGhlbnRpY2F0aW9uTWFuYWdlciwKICAgICBNZXNzYWdlQ2xh
c3NEcmF3aW5nQXJlYSwKICAgICBNZXNzYWdlQ2xhc3NJbmplY3RlZEJ1bmRsZSwKKyAgICBNZXNz
YWdlQ2xhc3NMYXllclRyZWVIb3N0LAogICAgIE1lc3NhZ2VDbGFzc1dlYkFwcGxpY2F0aW9uQ2Fj
aGVNYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc1dlYkNvb2tpZU1hbmFnZXIsCiAgICAgTWVzc2Fn
ZUNsYXNzV2ViRGF0YWJhc2VNYW5hZ2VyLApAQCAtNTQsNiArNTUsNyBAQCBlbnVtIE1lc3NhZ2VD
bGFzcyB7CiAgICAgLy8gTWVzc2FnZXMgc2VudCBieSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIFVJ
IHByb2Nlc3MuCiAgICAgTWVzc2FnZUNsYXNzRG93bmxvYWRQcm94eSwKICAgICBNZXNzYWdlQ2xh
c3NEcmF3aW5nQXJlYVByb3h5LAorICAgIE1lc3NhZ2VDbGFzc0xheWVyVHJlZUhvc3RQcm94eSwK
ICAgICBNZXNzYWdlQ2xhc3NXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LAogICAgIE1l
c3NhZ2VDbGFzc1dlYkNvbnRleHQsCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29udGV4dExlZ2FjeSwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weSBi
L1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQppbmRleCBiODVkYTk4
Li5kMmU0ZWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVz
c2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5
CkBAIC0zODEsNiArMzgxLDggQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAg
ICdXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyJzogW10sCiAgICAgICAg
ICdXZWJLaXQ6OldlYkNvbnRleHRVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwKICAgICAgICAgJ1dl
YktpdDo6V2ViR2VzdHVyZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKKyAgICAgICAgJ1dlYktp
dDo6V2ViTGF5ZXJJRCc6IFsnIldlYkxheWVyVHJlZUluZm8uaCInXSwKKyAgICAgICAgJ1dlYktp
dDo6V2ViTGF5ZXJJbmZvJzogWyciV2ViTGF5ZXJUcmVlSW5mby5oIiddLAogICAgICAgICAnV2Vi
S2l0OjpXZWJLZXlib2FyZEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAgJ1dlYktp
dDo6V2ViTW91c2VFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCiAgICAgICAgICdXZWJLaXQ6Oldl
YlRvdWNoRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXll
clRyZWVDb250ZXh0LmgKaW5kZXggODY2N2M5OC4uMmRiNTg0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCkBAIC00Nyw2ICs0Nyw4IEBAIHB1YmxpYzoKICAgICB1
aW50MzJfdCBjb250ZXh0SUQ7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgSFdORCB3aW5kb3c7
CisjZWxpZiBQTEFURk9STShRVCkKKyAgICB1aW50MzJfdCB3ZWJMYXllcklEOwogI2VuZGlmCiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKaW5kZXggYTAx
Mjg1NS4uZWRiNjJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVy
VHJlZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZv
LmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgog
CisjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAKQEAgLTMzLDM1ICszNCwxNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViTGF5ZXJJbmZvOjplbmNvZGUoQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewogICAgIC8vIFdlIGhhdmUgdG8gZGl2aWRlIGl0
IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0IHRha2VzIGEgbWF4aW11
bSBvZiAxMCBhcmd1bWVudHMuCi0gICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKGlkLCBu
YW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGljYSwgbWFzaykpOworICAgIGVuY29k
ZXItPmVuY29kZShDb3JlSVBDOjpJbihpZCwgbmFtZSwgcGFyZW50LCBjaGlsZHJlbiwgZmxhZ3Ms
IHJlcGxpY2EsIG1hc2ssIGltYWdlQmFja2luZ1N0b3JlSUQpKTsKICAgICBlbmNvZGVyLT5lbmNv
ZGUoQ29yZUlQQzo6SW4ocG9zLCBzaXplLCB0cmFuc2Zvcm0sIG9wYWNpdHksIGFuY2hvclBvaW50
LCBjaGlsZHJlblRyYW5zZm9ybSwgY29udGVudHNSZWN0KSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2Rl
KGltYWdlQmFja2luZ1N0b3JlID8gaW1hZ2VCYWNraW5nU3RvcmUtPnNpemUoKSA6IEludFNpemUo
KSk7Ci0KLSAgICBpZiAoIWltYWdlQmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBpbWFnZUhhbmRsZTsKLSAgICBpZiAoaW1hZ2VCYWNr
aW5nU3RvcmUtPmNyZWF0ZUhhbmRsZShpbWFnZUhhbmRsZSkpCi0gICAgICAgIGltYWdlSGFuZGxl
LmVuY29kZShlbmNvZGVyKTsKIH0KIAogYm9vbCBXZWJMYXllckluZm86OmRlY29kZShDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdlYkxheWVySW5mbyYgaW5mbykKIHsKICAgICAv
LyBXZSBoYXZlIHRvIGRpdmlkZSBpdCB0byBzZXZlcmFsIGxpbmVzLCBiZWNhdXNlIENvcmVJUEM6
OkluL091dCB0YWtlcyBhIG1heGltdW0gb2YgMTAgYXJndW1lbnRzLgotICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLmlkLCBpbmZvLm5hbWUsIGluZm8ucGFyZW50LCBp
bmZvLmNoaWxkcmVuLCBpbmZvLmZsYWdzLCBpbmZvLnJlcGxpY2EsIGluZm8ubWFzaykpKQorICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLmlkLCBpbmZvLm5hbWUsIGlu
Zm8ucGFyZW50LCBpbmZvLmNoaWxkcmVuLCBpbmZvLmZsYWdzLCBpbmZvLnJlcGxpY2EsIGluZm8u
bWFzaywgaW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoIWRlY29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQoaW5mby5wb3MsIGluZm8uc2l6
ZSwgaW5mby50cmFuc2Zvcm0sIGluZm8ub3BhY2l0eSwgaW5mby5hbmNob3JQb2ludCwgaW5mby5j
aGlsZHJlblRyYW5zZm9ybSwgaW5mby5jb250ZW50c1JlY3QpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgSW50U2l6ZSBpbWFnZUJhY2tpbmdTdG9yZVNpemU7Ci0gICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUoaW1hZ2VCYWNraW5nU3RvcmVTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChpbWFnZUJhY2tpbmdTdG9yZVNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGltYWdlSGFuZGxlOwotICAg
IGlmIChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6ZGVjb2RlKGRlY29kZXIsIGltYWdlSGFuZGxl
KSkKLSAgICAgICAgaW5mby5pbWFnZUJhY2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlKGltYWdlSGFuZGxlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJMYXllclRyZWVJbmZvLmgKaW5kZXggYTBlNjhkMy4uYzEwYjkwOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCkBAIC0zNCw2ICszNCw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHR5cGVkZWYgdWludDMy
X3QgV2ViTGF5ZXJJRDsKK2VudW0geyBJbnZhbGlkV2ViTGF5ZXJJRCA9IDAgfTsKIAogc3RydWN0
IFdlYkxheWVyVXBkYXRlSW5mbyB7CiAgICAgV2ViTGF5ZXJVcGRhdGVJbmZvKCkgeyB9CkBAIC01
NCw2ICs1NSw3IEBAIHN0cnVjdCBXZWJMYXllckluZm8gewogICAgIFdlYkxheWVySUQgcGFyZW50
OwogICAgIFdlYkxheWVySUQgcmVwbGljYTsKICAgICBXZWJMYXllcklEIG1hc2s7CisgICAgaW50
NjRfdCBpbWFnZUJhY2tpbmdTdG9yZUlEOwogCiAgICAgRmxvYXRQb2ludCBwb3M7CiAgICAgRmxv
YXRQb2ludDNEIGFuY2hvclBvaW50OwpAQCAtNzEsNiArNzMsOCBAQCBzdHJ1Y3QgV2ViTGF5ZXJJ
bmZvIHsKICAgICAgICAgICAgIGJvb2wgbWFza3NUb0JvdW5kcyA6IDE7CiAgICAgICAgICAgICBi
b29sIHByZXNlcnZlczNEIDogMTsKICAgICAgICAgICAgIGJvb2wgY29udGVudE5lZWRzRGlzcGxh
eSA6IDE7CisgICAgICAgICAgICBib29sIGltYWdlVXBkYXRlZDogMTsKKyAgICAgICAgICAgIGJv
b2wgaXNSb290TGF5ZXI6IDE7CiAgICAgICAgIH07CiAgICAgICAgIHVuc2lnbmVkIGludCBmbGFn
czsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJl
ZUNvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4
dFF0LmNwcAppbmRleCBmMWJmMWI0Li5kMzdkNzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcApAQCAtMjYsNDEgKzI2LDM4IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNs
dWRlICJBcmd1bWVudEVuY29kZXIuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIExheWVyVHJl
ZUNvbnRleHQ6OkxheWVyVHJlZUNvbnRleHQoKQorICAgIDogd2ViTGF5ZXJJRCgwKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIExheWVyVHJlZUNvbnRleHQ6On5MYXllclRyZWVDb250
ZXh0KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheWVyVHJlZUNvbnRl
eHQ6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBjb25zdAordm9pZCBMYXllclRy
ZWVDb250ZXh0OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25z
dAogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHdlYkxheWVy
SUQpOwogfQogCi1ib29sIExheWVyVHJlZUNvbnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXIqLCBMYXllclRyZWVDb250ZXh0JikKK2Jvb2wgTGF5ZXJUcmVlQ29udGV4dDo6ZGVj
b2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgTGF5ZXJUcmVlQ29udGV4dCYg
Y29udGV4dCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBkZWNvZGVyLT5kZWNvZGUoY29udGV4dC53ZWJMYXllcklEKTsKIH0KIAogYm9vbCBM
YXllclRyZWVDb250ZXh0Ojppc0VtcHR5KCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiAhd2ViTGF5ZXJJRDsKIH0KIAotYm9vbCBv
cGVyYXRvcj09KGNvbnN0IExheWVyVHJlZUNvbnRleHQmLCBjb25zdCBMYXllclRyZWVDb250ZXh0
JikKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiBhLCBjb25zdCBMYXll
clRyZWVDb250ZXh0JiBiKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGEud2ViTGF5ZXJJRCA9PSBiLndlYkxheWVySUQ7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHkuY3BwCmluZGV4IGY4NTJlMmYuLmZmYjIzNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKQEAgLTI4LDYgKzI4LDEwIEBACiAKICNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgor
I2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
QEAgLTUzLDQgKzU3LDE2IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eTo6c2V0U2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCiAgICAgc2l6ZURpZENo
YW5nZSgpOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVY
VFVSRV9NQVBQRVIpCit2b2lkIERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVdlYlZpZXcoKQorewor
ICAgIG1fd2ViUGFnZVByb3h5LT5zZXRWaWV3TmVlZHNEaXNwbGF5KHZpZXdwb3J0VmlzaWJsZVJl
Y3QoKSk7Cit9CisKK1dlYkNvcmU6OkludFJlY3QgRHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNS
ZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX3dl
YlBhZ2VQcm94eS0+dmlld1NpemUoKSk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAppbmRleCAw
ODhmYzhiLi5jNDk4OTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJh
d2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmgKQEAgLTI3LDkgKzI3LDExIEBACiAjaWZuZGVmIERyYXdpbmdBcmVhUHJveHlfaAog
I2RlZmluZSBEcmF3aW5nQXJlYVByb3h5X2gKIAorI2luY2x1ZGUgPENvcmVJUEMvTWVzc2FnZUlE
Lmg+CiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbmZvLmgiCi0jaW5jbHVkZSA8c3RkaW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+
CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKICNp
ZiBQTEFURk9STShRVCkKQEAgLTQ1LDEzICs0NywxNyBAQCBuYW1lc3BhY2UgQ29yZUlQQyB7CiB9
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnRSZWN0OworICAgIGNsYXNzIEZs
b2F0UG9pbnQ7CisgICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiB9CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBjbGFzcyBMYXllclRyZWVDb250ZXh0OworY2xhc3MgTGF5ZXJUcmVlSG9z
dFByb3h5OwogY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdlYkxheWVyVHJlZUluZm87CitjbGFz
cyBXZWJMYXllclVwZGF0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CiAKIGNsYXNzIERyYXdp
bmdBcmVhUHJveHkgewpAQCAtNzcsNiArODMsMjQgQEAgcHVibGljOgogICAgIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICB2b2lkIHNl
dFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNj
cm9sbE9mZnNldCk7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShU
RVhUVVJFX01BUFBFUikKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2ViVmlldygpOworICAgIHZp
cnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1
cm4gY29udGVudHNSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udGVu
dHNSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQmFja2luZ1N0b3JlUmVhZHkoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9DdXJyZW50R0xD
b250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0
eSkgeyB9CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5
ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29u
c3QgV2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGVG
b3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNv
bm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciogYXJndW1lbnRzKSB7IH0KKworICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0
dXJuIG1fd2ViUGFnZVByb3h5OyB9CisjZW5kaWYKKyNlbmRpZgogcHJvdGVjdGVkOgogICAgIGV4
cGxpY2l0IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlLCBXZWJQYWdlUHJveHkqKTsK
IApAQCAtODYsNiArMTEwLDEwIEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJbnRTaXplIG1f
c2l6ZTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwogCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRy
PExheWVyVHJlZUhvc3RQcm94eT4gbV9sYXllclRyZWVIb3N0UHJveHk7CisjZW5kaWYKKwogcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZSgpID0gMDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5kZXggNjE5
ZDUwOC4uNGQ3YmQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eUltcGwuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXll
clRyZWVIb3N0UHJveHkuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CkBAIC0zMjgsOCArMzMyLDM4IEBAIHZvaWQgRHJhd2luZ0FyZWFQ
cm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVl
Q29udGV4CiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fbGF5ZXJUcmVlQ29u
dGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CisjaWYgVVNFKFRFWFRVUkVf
TUFQUEVSKQorICAgIGlmICghbV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7Cisj
ZW5kaWYKK30KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQordm9pZCBEcmF3aW5n
QXJlYVByb3h5SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQ
Qzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwg
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCit7CisgICAgaWYgKG1fbGF5ZXJU
cmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+ZGlkUmVjZWl2ZUxh
eWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMp
OworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0
QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxv
YXQgc2NhbGUpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBtX2xh
eWVyVHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKHZpc2libGVD
b250ZW50c1JlY3QsIHNjYWxlKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0
VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkK
KyAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWpl
Y3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CiB9CiAKK3ZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5
KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQo
bWF0cml4LCBvcGFjaXR5KTsKK30KKyNlbmRpZgorCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBs
OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQogewogICAgIEFTU0VSVChpc0luQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4IGQwOTFmOTcuLmFhYzcxZTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCkBAIC0zOSw2
ICszOSw4IEBAIGNsYXNzIFJlZ2lvbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIExh
eWVyVHJlZUhvc3RQcm94eTsKKwogY2xhc3MgRHJhd2luZ0FyZWFQcm94eUltcGwgOiBwdWJsaWMg
RHJhd2luZ0FyZWFQcm94eSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RHJhd2lu
Z0FyZWFQcm94eUltcGw+IGNyZWF0ZShXZWJQYWdlUHJveHkqKTsKQEAgLTc1LDYgKzc3LDEzIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKIAog
ICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
IW1fbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCk7IH0KKworI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2Nh
bGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2Nh
bGUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVj
dG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRU
b0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBm
bG9hdCBvcGFjaXR5KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNz
YWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFy
Z3VtZW50RGVjb2RlciopOworI2VuZGlmCiAjZWxzZQogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OWUyOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTAsMCArMSwxMzMgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKyNkZWZp
bmUgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2lu
Y2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJNZXNzYWdlUXVldWUuaCIKKyNp
bmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2ViTGF5
ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgi
CisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViTGF5ZXJJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTGF5ZXJUcmVlTWVzc2FnZVRvUmVu
ZGVyZXI7CitjbGFzcyBMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNs
aWVudCB7CitwdWJsaWM6CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkq
KTsKKyAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0UHJveHkoKTsKKyAgICB2b2lkIHN5bmNDb21w
b3NpdGluZ0xheWVyU3RhdGUoY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdm9pZCBkZWxldGVD
b21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5n
TGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpD
b25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
KTsKKyAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgZmxvYXQpOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxl
KGNvbnN0IEludFJlY3QmLCBmbG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RU
cmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkKKyAgICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgdm9pZCBzd2Fw
Q29udGVudEJ1ZmZlcnMoKTsKKyAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7CisgICAgdm9pZCBj
cmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6
VXBkYXRlSW5mbyYpOworICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBp
bnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHJlbW92ZVRp
bGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7CisgICAgdm9pZCBjcmVhdGVEaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlJik7CisgICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50
NjRfdCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3Jl
SVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RGb3JMYXllcihXZWJMYXll
cklELCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVXZWJWaWV3KCk7CisjZW5kaWYK
KworcHJvdGVjdGVkOgorCisgICAgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVMYXll
cihXZWJMYXllcklEKTsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJMYXllcklE
IGlkKSB7IHJldHVybiAoaWQgPT0gSW52YWxpZFdlYkxheWVySUQpID8gMCA6IG1fbGF5ZXJzLmdl
dChpZCk7IH0KKyAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RM
YXllci5nZXQoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQo
Y29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlm
eVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCBib29s
IHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBzaG93UmVwYWludENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZv
aWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICBSdW5Mb29wOjpUaW1lcjxMYXllclRyZWVI
b3N0UHJveHk+IG1fYW5pbWF0aW9uVGltZXI7CisgICAgRHJhd2luZ0FyZWFQcm94eSogbV9kcmF3
aW5nQXJlYVByb3h5OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKKyAgICBJbnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRz
UmVjdDsKKyAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CisKKyAgICBNZXNzYWdlUXVldWU8TGF5
ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG1fbWVzc2FnZXNUb1JlbmRlclRocmVhZDsKKyAgICB2
b2lkIHB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI+KTsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBl
cj4gbV90ZXh0dXJlTWFwcGVyOworI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8SW50UG9pbnQsIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IFRpbGVkSW1hZ2U7
CisgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwIG1fbm9kZVZpc3VhbENvbnRlbnRz
UmVjdE1hcDsKKyAgICBIYXNoTWFwPGludCwgaW50PiBtX3RpbGVUb05vZGVUaWxlOworICAgIGlu
dCByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3Q7CisgICAgSGFzaE1h
cDxpbnQ2NF90LCBUaWxlZEltYWdlPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKworICAg
IHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7CisgICAgdm9pZCBzeW5jaHJvbml6ZVZpZXdw
b3J0KCk7CisgICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIHNldFJv
b3RMYXllcklEKFdlYkxheWVySUQpOworICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycyhjb25z
dCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBm
bG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7CisgICAg
dm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBRSW1hZ2UmKTsKKyAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIGNv
bnN0IFFJbWFnZSYpOworICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOworICAgIHZvaWQg
YXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdl
SUQpOworICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGVuc3VyZVJvb3RM
YXllcigpOworICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7CisKKyNlbmRpZgorCisg
ICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZlY3RvcjxXZWJMYXll
cklEPiBtX2xheWVyc1RvRGVsZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgV2Vi
TGF5ZXJJRCBtX3Jvb3RMYXllcklEOworICAgIGludCBtX2lkOworfTsKKworfQorCisjZW5kaWYg
Ly8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmU1NzJkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzUg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
CittZXNzYWdlcyAtPiBMYXllclRyZWVIb3N0UHJveHkgeworICAgIFN5bmNDb21wb3NpdGluZ0xh
eWVyU3RhdGUoV2ViS2l0OjpXZWJMYXllckluZm8gbGF5ZXJJbmZvKQorICAgIFNldFJvb3RDb21w
b3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQorICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIodWlu
dDMyX3QgaWQpCisgICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0
aWxlSUQsIFdlYktpdDo6VXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFVwZGF0ZVRpbGVGb3JM
YXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJLaXQ6OlVwZGF0ZUluZm8gdXBk
YXRlSW5mbykKKyAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRp
bGVJRCkKKyAgICBDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpCisgICAgRGVzdHJveURpcmVjdGx5
Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQorICAgIERpZFJlbmRlckZyYW1lKCkKK30KKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAxMjcz
YmM5Li5jNDkyMzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKICNpbmNsdWRl
ICJEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiRmluZEluZGljYXRvci5oIgorI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQu
aCIKQEAgLTEzODksNiArMTM5MCwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIGlm
IChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdFByb3h5Pigp
KSB7CisgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlN
ZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAobWVzc2Fn
ZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc1dlYkluc3BlY3RvclByb3h5PigpKSB7CiAgICAg
ICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eSogaW5zcGVjdG9yID0gdGhpcy0+aW5zcGVjdG9yKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFBy
b3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eVF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODhkYzhhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQ
cm94eVF0LmNwcApAQCAtMCwwICsxLDcwMyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdE1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiTWFpblRocmVhZC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgor
I2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5o
IgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAidGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBw
ZXIuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNpbmNsdWRlIDxR
RGF0ZVRpbWU+CisjaW5jbHVkZSA8Y2Fpcm8vT3BlbkdMU2hpbXMuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIFR5cGUgeworICAgICAgICBEZWxldGVMYXllciwKKyAgICAgICAgQ3JlYXRlVGlsZSwK
KyAgICAgICAgUmVtb3ZlVGlsZSwKKyAgICAgICAgVXBkYXRlVGlsZSwKKyAgICAgICAgQ3JlYXRl
SW1hZ2UsCisgICAgICAgIERlc3Ryb3lJbWFnZSwKKyAgICAgICAgU3luY0xheWVyUGFyYW1ldGVy
cywKKyAgICAgICAgRmx1c2hMYXllckNoYW5nZXMsCisgICAgICAgIFNldFJvb3RMYXllcgorICAg
IH07CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBMYXll
clRyZWVNZXNzYWdlVG9Ib3N0IHsKK3B1YmxpYzoKKyAgICBpbnQgbGF5ZXJUcmVlSG9zdFByb3h5
SUQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgTGF5ZXJUcmVlTWVzc2FnZVRvSG9zdChp
bnQgaWQpIDogbV9pZChpZCkgeyB9CisgICAgZW51bSBUeXBlIHsgVXBkYXRlV2ViVmlldywgU3lu
Y1Zpc2libGVSZWN0cyB9OworICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworCitw
cml2YXRlOgorICAgIGludCBtX2lkOworfTsKKwordGVtcGxhdGU8Y2xhc3MgTWVzc2FnZURhdGEs
IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpUeXBlIG1lc3NhZ2VUeXBlPgorY2xhc3MgTGF5
ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YSA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdl
VG9SZW5kZXJlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtZXNzYWdlVHlwZTsgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVz
c2FnZVRvUmVuZGVyZXI+IGNyZWF0ZShjb25zdCBNZXNzYWdlRGF0YSYgZGF0YSA9IE1lc3NhZ2VE
YXRhKCkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyV2l0aERhdGEoZGF0YSkpOworICAgIH0KKworICAgIGNvbnN0IE1lc3NhZ2VE
YXRhJiBkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGE7CisgICAgfQor
Citwcml2YXRlOgorICAgIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGEoY29uc3Qg
TWVzc2FnZURhdGEmIGRhdGEpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAgIH0K
KworICAgIE1lc3NhZ2VEYXRhIG1fZGF0YTsKK307CisKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBD
cmVhdGVUaWxlTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKKyAgICBpbnQg
cmVtb3RlVGlsZUlEOworICAgIGZsb2F0IHNjYWxlOworfTsKKworc3RydWN0IFVwZGF0ZVRpbGVN
ZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworICAgIGludCByZW1vdGVUaWxl
SUQ7CisgICAgSW50UmVjdCBzb3VyY2VSZWN0OworICAgIEludFJlY3QgdGFyZ2V0UmVjdDsKKyAg
ICBRSW1hZ2UgaW1hZ2U7Cit9OworCitzdHJ1Y3QgUmVtb3ZlVGlsZU1lc3NhZ2VEYXRhIHsKKyAg
ICBXZWJMYXllcklEIGxheWVySUQ7CisgICAgaW50IHJlbW90ZVRpbGVJRDsKK307CisKK3N0cnVj
dCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhIHsKKyAgICBpbnQ2NF90IGltYWdlSUQ7CisgICAgUUlt
YWdlIGltYWdlOworfTsKKworc3RydWN0IERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhIHsKKyAgICBp
bnQ2NF90IGltYWdlSUQ7Cit9OworCitzdHJ1Y3QgU3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2VE
YXRhIHsKKyAgICBXZWJMYXllckluZm8gbGF5ZXJJbmZvOworfTsKKworc3RydWN0IEVtcHR5TWVz
c2FnZURhdGEgeyB9Oworc3RydWN0IERlbGV0ZUxheWVyTWVzc2FnZURhdGEgeworICAgIFdlYkxh
eWVySUQgbGF5ZXJJRDsKK307CitzdHJ1Y3QgU2V0Um9vdExheWVyTWVzc2FnZURhdGEgeworICAg
IFdlYkxheWVySUQgbGF5ZXJJRDsKK307CisKK2NsYXNzIENyZWF0ZVRpbGVNZXNzYWdlCisgICAg
ICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8Q3JlYXRlVGls
ZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Q3JlYXRlVGlsZT4geyB9
OworY2xhc3MgVXBkYXRlVGlsZU1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVz
c2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxVcGRhdGVUaWxlTWVzc2FnZURhdGEsIExheWVyVHJlZU1l
c3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVUaWxlPiB7IH07CitjbGFzcyBSZW1vdmVUaWxlTWVzc2Fn
ZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPFJl
bW92ZVRpbGVNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92ZVRp
bGU+IHsgfTsKK2NsYXNzIENyZWF0ZUltYWdlTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBMYXll
clRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPENyZWF0ZUltYWdlTWVzc2FnZURhdGEsIExh
eWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpDcmVhdGVJbWFnZT4geyB9OworY2xhc3MgRGVzdHJv
eUltYWdlTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJl
cldpdGhEYXRhPERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5k
ZXJlcjo6RGVzdHJveUltYWdlPiB7IH07CitjbGFzcyBGbHVzaExheWVyQ2hhbmdlc01lc3NhZ2UK
KyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxFbXB0
eU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Rmx1c2hMYXllckNoYW5n
ZXM+IHsgfTsKK2NsYXNzIFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlCisgICAgICAgIDogcHVi
bGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8U3luY0xheWVyUGFyYW1ldGVy
c01lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6U3luY0xheWVyUGFyYW1l
dGVycz4geyB9OworY2xhc3MgRGVsZXRlTGF5ZXJNZXNzYWdlCisgICAgICAgIDogcHVibGljIExh
eWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8RGVsZXRlTGF5ZXJNZXNzYWdlRGF0YSwg
TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkRlbGV0ZUxheWVyPiB7IH07CitjbGFzcyBTZXRS
b290TGF5ZXJNZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRl
cmVyV2l0aERhdGE8U2V0Um9vdExheWVyTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyOjpTZXRSb290TGF5ZXI+IHsgfTsKKworY2xhc3MgVXBkYXRlV2ViVmlld01lc3NhZ2Ug
OiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvSG9zdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBVcGRhdGVXZWJWaWV3OyB9CisgICAgc3RhdGljIFBh
c3NPd25QdHI8VXBkYXRlV2ViVmlld01lc3NhZ2U+IGNyZWF0ZShpbnQgcHJveHkpIHsgcmV0dXJu
IGFkb3B0UHRyKG5ldyBVcGRhdGVXZWJWaWV3TWVzc2FnZShwcm94eSkpOyB9CisKK3ByaXZhdGU6
CisgICAgVXBkYXRlV2ViVmlld01lc3NhZ2UoaW50IHByb3h5KQorICAgICAgICA6IExheWVyVHJl
ZU1lc3NhZ2VUb0hvc3QocHJveHkpCisgICAgeyB9Cit9OworCitzdHJ1Y3QgVmlzaWJsZVJlY3RV
cGRhdGUgeworICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0
OworfTsKKworY2xhc3MgU3luY1Zpc2libGVSZWN0c01lc3NhZ2UgOiBwdWJsaWMgTGF5ZXJUcmVl
TWVzc2FnZVRvSG9zdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBTeW5jVmlzaWJsZVJlY3RzOyB9CisgICAgVmVjdG9yPFZpc2libGVSZWN0VXBkYXRl
PiYgdXBkYXRlcygpIHsgcmV0dXJuIG1fdXBkYXRlczsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRy
PFN5bmNWaXNpYmxlUmVjdHNNZXNzYWdlPiBjcmVhdGUoaW50IHByb3h5LCBjb25zdCBWZWN0b3I8
VmlzaWJsZVJlY3RVcGRhdGU+IHVwZGF0ZXMpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBTeW5jVmlz
aWJsZVJlY3RzTWVzc2FnZShwcm94eSwgdXBkYXRlcykpOyB9CisKK3ByaXZhdGU6CisgICAgU3lu
Y1Zpc2libGVSZWN0c01lc3NhZ2UoaW50IHByb3h5LCBjb25zdCBWZWN0b3I8VmlzaWJsZVJlY3RV
cGRhdGU+JiBuZXdVcGRhdGVzKQorICAgICAgICA6IExheWVyVHJlZU1lc3NhZ2VUb0hvc3QocHJv
eHkpCisgICAgICAgICwgbV91cGRhdGVzKG5ld1VwZGF0ZXMpCisgICAgeyB9CisKKyAgICBWZWN0
b3I8VmlzaWJsZVJlY3RVcGRhdGU+IG1fdXBkYXRlczsKK307CisKK2NsYXNzIExheWVyVHJlZUhv
c3RQcm94eU1lc3NhZ2VRdWV1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIExheWVyVHJlZUhvc3RQ
cm94eU1lc3NhZ2VRdWV1ZSYgaW5zdGFuY2UoKQorICAgIHsKKyAgICAgICAgc3RhdGljIExheWVy
VHJlZUhvc3RQcm94eU1lc3NhZ2VRdWV1ZSBxdWV1ZTsKKyAgICAgICAgcmV0dXJuIHF1ZXVlOwor
ICAgIH0KKworICAgIHZvaWQgYWRkSG9zdChpbnQgaWQsIExheWVyVHJlZUhvc3RQcm94eSogaG9z
dCkKKyAgICB7CisgICAgICAgIG1faG9zdHMuYWRkKGlkLCBob3N0KTsKKyAgICB9CisKKyAgICB2
b2lkIHJlbW92ZUhvc3QoaW50IGlkKQorICAgIHsKKyAgICAgICAgbV9ob3N0cy5yZW1vdmUoaWQp
OworICAgIH0KKworICAgIHZvaWQgYXBwZW5kKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRv
SG9zdD4gbWVzc2FnZSkKKyAgICB7CisgICAgICAgIG1fcXVldWUuYXBwZW5kKG1lc3NhZ2UpOwor
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKGRpZEFwcGVuZCwgMCk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgZGlkQXBwZW5kKHZvaWQqKQorICAgIHsKKyAgICAgICAgaW5zdGFuY2UoKS5kZXF1
ZSgpOworICAgIH0KKworICAgIHZvaWQgZGVxdWUoKQorICAgIHsKKyAgICAgICAgd2hpbGUgKE93
blB0cjxMYXllclRyZWVNZXNzYWdlVG9Ib3N0PiBtZXNzYWdlID0gbV9xdWV1ZS50cnlHZXRNZXNz
YWdlKCkpIHsKKyAgICAgICAgICAgIEhhc2hNYXA8aW50LCBMYXllclRyZWVIb3N0UHJveHkqPjo6
aXRlcmF0b3IgaXQgPSBtX2hvc3RzLmZpbmQobWVzc2FnZS0+bGF5ZXJUcmVlSG9zdFByb3h5SUQo
KSk7CisgICAgICAgICAgICBpZiAoaXQgPT0gbV9ob3N0cy5lbmQoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgTGF5ZXJUcmVlSG9zdFByb3h5KiBwcm94eSA9IGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICBpZiAoIXByb3h5KQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLT50eXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvSG9zdDo6VXBkYXRlV2ViVmlldzoKKyAgICAgICAgICAg
ICAgICBwcm94eS0+dXBkYXRlV2ViVmlldygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9Ib3N0OjpTeW5jVmlzaWJsZVJlY3RzOiB7
CisgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFZpc2libGVSZWN0VXBkYXRlPiYgdXBkYXRl
cyA9IHN0YXRpY19jYXN0PFN5bmNWaXNpYmxlUmVjdHNNZXNzYWdlKj4obWVzc2FnZS5nZXQoKSkt
PnVwZGF0ZXMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVwZGF0ZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVmlzaWJsZVJlY3RVcGRh
dGUmIHVwZGF0ZSA9IHVwZGF0ZXNbaV07CisgICAgICAgICAgICAgICAgICAgIHByb3h5LT5zZXRW
aXNpYmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIodXBkYXRlLmxheWVySUQsIHVwZGF0ZS52aXNpYmxl
UmVjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAg
IExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VRdWV1ZSgpIHsgfQorCisgICAgSGFzaE1hcDxpbnQs
IExheWVyVHJlZUhvc3RQcm94eSo+IG1faG9zdHM7CisgICAgTWVzc2FnZVF1ZXVlPExheWVyVHJl
ZU1lc3NhZ2VUb0hvc3Q+IG1fcXVldWU7Cit9OworfTsKKworCitQYXNzT3duUHRyPEdyYXBoaWNz
TGF5ZXI+IExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklE
KQoreworICAgIEdyYXBoaWNzTGF5ZXIqIG5ld0xheWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyKHRoaXMpOworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJl
TWFwcGVyTm9kZShuZXdMYXllcik7CisgICAgbm9kZS0+c2V0SUQobGF5ZXJJRCk7CisgICAgbm9k
ZS0+c2V0VGlsZU1vZGUoVGV4dHVyZU1hcHBlck5vZGU6Ok1hbmFnZWRUaWxlTW9kZSk7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKK30KKworTGF5ZXJUcmVlSG9zdFByb3h5OjpMYXll
clRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKKyAgICA6
IG1fYW5pbWF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTGF5ZXJUcmVlSG9zdFBy
b3h5Ojp1cGRhdGVXZWJWaWV3KQorICAgICwgbV9kcmF3aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVh
UHJveHkpCisgICAgLCBtX3Jvb3RMYXllcklEKDApCit7CisgICAgc3RhdGljIGludCBuZXh0SUQg
PSAwOworICAgIG1faWQgPSArK25leHRJRDsKKyAgICBMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
UXVldWU6Omluc3RhbmNlKCkuYWRkSG9zdChtX2lkLCB0aGlzKTsKK30KKworTGF5ZXJUcmVlSG9z
dFByb3h5Ojp+TGF5ZXJUcmVlSG9zdFByb3h5KCkKK3sKKyAgICBMYXllclRyZWVIb3N0UHJveHlN
ZXNzYWdlUXVldWU6Omluc3RhbmNlKCkucmVtb3ZlSG9zdChtX2lkKTsKK30KKworLy8gVGhpcyBm
dW5jdGlvbiBuZWVkcyB0byBiZSByZWVudHJhbnQuCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAg
bV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKKworICAgIHN5bmNS
ZW1vdGVDb250ZW50KCk7CisgICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJv
b3RMYXllcigpOworICAgIGlmICghY3VycmVudFJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGN1cnJl
bnRSb290TGF5ZXIpOworCisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBH
TGludCB2aWV3cG9ydFs0XTsKKyAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9y
dCk7CisgICAgSW50UmVjdCB2aWV3cG9ydFJlY3Qodmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCB2
aWV3cG9ydFsyXSwgdmlld3BvcnRbM10pOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0Vmlld3Bv
cnRTaXplKEludFNpemUodmlld3BvcnRbMl0sIHZpZXdwb3J0WzNdKSk7CisgICAgbm9kZS0+c2V0
VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1fdGV4dHVyZU1hcHBl
ci0+YmVnaW5QYWludGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7
CisKKyAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3BhY2l0eSgpICE9IG9wYWNpdHkgfHwgY3Vy
cmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4KSB7CisgICAgICAgIGN1cnJlbnRS
b290TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXIt
PnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICB9CisKKyAgICBUZXh0dXJlTWFw
cGVyTm9kZTo6Tm9kZVJlY3RNYXAgbm9kZVZpc3VhbENvbnRlbnRzUmVjdE1hcDsKKyAgICBpZiAo
bm9kZS0+Y29sbGVjdFZpc2libGVDb250ZW50UmVjdHMobm9kZVZpc3VhbENvbnRlbnRzUmVjdE1h
cCwgdmlld3BvcnRSZWN0KSkgeworICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZTo6Tm9kZVJlY3RN
YXA6Oml0ZXJhdG9yIGVuZEl0ZXJhdG9yID0gbm9kZVZpc3VhbENvbnRlbnRzUmVjdE1hcC5lbmQo
KTsKKyAgICAgICAgVmVjdG9yPFZpc2libGVSZWN0VXBkYXRlPiB1cGRhdGVzOworICAgICAgICBm
b3IgKFRleHR1cmVNYXBwZXJOb2RlOjpOb2RlUmVjdE1hcDo6aXRlcmF0b3IgaXQgPSBub2RlVmlz
dWFsQ29udGVudHNSZWN0TWFwLmJlZ2luKCk7IGl0ICE9IGVuZEl0ZXJhdG9yOyArK2l0KSB7Cisg
ICAgICAgICAgICBWaXNpYmxlUmVjdFVwZGF0ZSBuZXdVcGRhdGU7CisgICAgICAgICAgICBuZXdV
cGRhdGUubGF5ZXJJRCA9IGl0LT5maXJzdC0+aWQoKTsKKyAgICAgICAgICAgIG5ld1VwZGF0ZS52
aXNpYmxlUmVjdCA9IEludFJlY3QoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBpZiAobmV3VXBk
YXRlLmxheWVySUQpIC8vIGF2b2lkIHVwZGF0aW5nIG5vbi1zeW5jZWQgcm9vdCBsYXllcgorICAg
ICAgICAgICAgICAgIHVwZGF0ZXMuYXBwZW5kKG5ld1VwZGF0ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZVF1ZXVlOjppbnN0YW5jZSgpLmFwcGVuZChTeW5j
VmlzaWJsZVJlY3RzTWVzc2FnZTo6Y3JlYXRlKG1faWQsIHVwZGF0ZXMpKTsKKyAgICB9CisgICAg
bm9kZS0+cGFpbnQoKTsKKworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKwor
ICAgIGlmIChub2RlLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQor
ICAgICAgICBMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlUXVldWU6Omluc3RhbmNlKCkuYXBwZW5k
KFVwZGF0ZVdlYlZpZXdNZXNzYWdlOjpjcmVhdGUobV9pZCkpOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3RQcm94eTo6dXBkYXRlV2ViVmlldygpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT51
cGRhdGVXZWJWaWV3KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxl
Q29udGVudHNSZWN0Rm9yTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklELCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVyKGxh
eWVySUQsIHJlY3QpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQor
CitpbnQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRp
bGVJRCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPGludCwgaW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3RpbGVUb05vZGVUaWxlLmZpbmQodGlsZUlEKTsKKyAgICBpZiAoaXQgPT0gbV90aWxlVG9O
b2RlVGlsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0
IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvKQoreworICAgIFdlYkxheWVySUQgaWQgPSBsYXllcklu
Zm8uaWQ7CisgICAgZW5zdXJlTGF5ZXIoaWQpOworICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9
IG1fbGF5ZXJzLmZpbmQoaWQpOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29u
ZDsKKworICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1lKTsKKworICAgIGxheWVyLT5z
ZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLnJlcGxpY2EpKTsKKyAgICBs
YXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChsYXllckluZm8ubWFzaykpOworCisgICAgbGF5
ZXItPnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOworICAgIGxheWVyLT5zZXRTaXplKGxheWVy
SW5mby5zaXplKTsKKyAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVySW5mby50cmFuc2Zvcm0p
OworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8uYW5jaG9yUG9pbnQpOworICAg
IGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0p
OworICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJJbmZvLmJhY2tmYWNlVmlz
aWJsZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxheWVySW5mby5jb250ZW50c09w
YXF1ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllckluZm8uY29udGVudHNSZWN0
KTsKKyAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOwor
CisgICAgaWYgKGxheWVySW5mby5pbWFnZVVwZGF0ZWQpCisgICAgICAgIGFzc2lnbkltYWdlVG9M
YXllcihsYXllciwgbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworCisgICAgLy8gTmV2
ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgorICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRz
KGxheWVySW5mby5pc1Jvb3RMYXllciA/IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMp
OworICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVySW5mby5vcGFjaXR5KTsKKyAgICBsYXllci0+
c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNlcnZlczNEKTsKKyAgICBWZWN0b3I8R3JhcGhp
Y3NMYXllcio+IGNoaWxkcmVuOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllcklu
Zm8uY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViTGF5ZXJJRCBjaGlsZElEID0g
bGF5ZXJJbmZvLmNoaWxkcmVuW2ldOworICAgICAgICBHcmFwaGljc0xheWVyKiBjaGlsZCA9IGxh
eWVyQnlJRChjaGlsZElEKTsKKyAgICAgICAgaWYgKCFjaGlsZCkgeworICAgICAgICAgICAgY2hp
bGQgPSBjcmVhdGVMYXllcihjaGlsZElEKS5sZWFrUHRyKCk7CisgICAgICAgICAgICBtX2xheWVy
cy5hZGQoY2hpbGRJRCwgY2hpbGQpOworICAgICAgICB9CisgICAgICAgIGNoaWxkcmVuLmFwcGVu
ZChjaGlsZCk7CisgICAgfQorICAgIGxheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7CisKKyAg
ICBpZiAobGF5ZXJJbmZvLmlzUm9vdExheWVyICYmIG1fcm9vdExheWVySUQgIT0gaWQpCisgICAg
ICAgIHNldFJvb3RMYXllcklEKGlkKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRl
bGV0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXll
ciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBsYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fbGF5ZXJzLnJlbW92ZShs
YXllcklEKTsKKyAgICBkZWxldGUgbGF5ZXI7Cit9CisKKwordm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OmVuc3VyZUxheWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgLy8gV2UgaGF2ZSB0byBsZWFr
IHRoZSBuZXcgbGF5ZXIncyBwb2ludGVyIGFuZCBtYW5hZ2UgaXQgb3Vyc2VsdmVzLAorICAgIC8v
IGJlY2F1c2UgT3duUHRyIGlzIG5vdCBjb3B5YWJsZS4KKyAgICBpZiAobV9sYXllcnMuZmluZChp
ZCkgPT0gbV9sYXllcnMuZW5kKCkpCisgICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgY3JlYXRlTGF5
ZXIoaWQpLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290
TGF5ZXJJRChXZWJMYXllcklEIGxheWVySUQpCit7CisgICAgaWYgKGxheWVySUQgPT0gbV9yb290
TGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXJJRCA9IGxheWVySUQ7
CisKKyAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKworICAgIGlmICghbGF5
ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXll
ckJ5SUQobGF5ZXJJRCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9yb290TGF5ZXItPmFkZENoaWxkKGxheWVyKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBmbG9hdCBzY2Fs
ZSkKK3sKKyAgICBlbnN1cmVMYXllcihsYXllcklEKTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSog
bm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKKworICAgIGlu
dCBub2RlVGlsZUlEID0gbm9kZS0+Y3JlYXRlQ29udGVudFRpbGUoc2NhbGUpOworICAgIG1fdGls
ZVRvTm9kZVRpbGUuYWRkKHRpbGVJRCwgbm9kZVRpbGVJRCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sK
KyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXJC
eUlEKGxheWVySUQpKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlu
dCBub2RlVGlsZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKHRpbGVJRCk7CisgICAgaWYg
KCFub2RlVGlsZUlEKQorICAgICAgICByZXR1cm47CisKKyAgICBub2RlLT5yZW1vdmVDb250ZW50
VGlsZShub2RlVGlsZUlEKTsKKyAgICBtX3RpbGVUb05vZGVUaWxlLnJlbW92ZSh0aWxlSUQpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFFJbWFnZSYgaW1hZ2UpCit7CisgICAgZW5zdXJlTGF5ZXIobGF5
ZXJJRCk7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2Rl
KGxheWVyQnlJRChsYXllcklEKSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisK
KyAgICBpbnQgbm9kZVRpbGVJRCA9IHJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRCh0aWxlSUQpOwor
ICAgIGlmICghbm9kZVRpbGVJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUUltYWdlIGltYWdl
UmVmKGltYWdlKTsKKyAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5n
ZXQoKSk7CisgICAgbm9kZS0+c2V0Q29udGVudFRpbGVCYWNrQnVmZmVyKG5vZGVUaWxlSUQsIHNv
dXJjZVJlY3QsIHRhcmdldFJlY3QsIGltYWdlUmVmLmJpdHMoKSwgQml0bWFwVGV4dHVyZTo6QkdS
QUZvcm1hdCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZShpbnQ2
NF90IGltYWdlSUQsIGNvbnN0IFFJbWFnZSYgaW1hZ2UpCit7CisgICAgVGlsZWRJbWFnZSB0aWxl
ZEltYWdlOworICAgIHN0YXRpYyBjb25zdCBpbnQgVGlsZURpbWVuc2lvbiA9IDEwMjQ7CisgICAg
Ym9vbCBpbWFnZUhhc0FscGhhID0gaW1hZ2UuaGFzQWxwaGFDaGFubmVsKCk7CisgICAgSW50UmVj
dCBpbWFnZVJlY3QoMCwgMCwgaW1hZ2Uud2lkdGgoKSwgaW1hZ2UuaGVpZ2h0KCkpOworICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaW1hZ2UuaGVpZ2h0KCk7IHkgKz0gVGlsZURpbWVuc2lvbikgewor
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlLndpZHRoKCk7IHggKz0gVGlsZURpbWVu
c2lvbikgeworICAgICAgICAgICAgUUltYWdlIHN1YkltYWdlOworICAgICAgICAgICAgSW50UmVj
dCByZWN0KHgsIHksIFRpbGVEaW1lbnNpb24sIFRpbGVEaW1lbnNpb24pOworICAgICAgICAgICAg
cmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0KTsKKyAgICAgICAgICAgIGlmIChRU2l6ZShyZWN0LnNp
emUoKSkgPT0gaW1hZ2Uuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2U7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3ViSW1hZ2UgPSBpbWFnZS5jb3B5
KHJlY3QpOworICAgICAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBtX3Rl
eHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0
KHJlY3Quc2l6ZSgpLCAhaW1hZ2VIYXNBbHBoYSk7CisgICAgICAgICAgICB0ZXh0dXJlLT51cGRh
dGVDb250ZW50cyhpbWFnZUhhc0FscGhhID8gQml0bWFwVGV4dHVyZTo6QkdSQUZvcm1hdCA6IEJp
dG1hcFRleHR1cmU6OkJHUkZvcm1hdCwgSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZWN0LnNp
emUoKSksIHN1YkltYWdlLmJpdHMoKSk7CisgICAgICAgICAgICB0aWxlZEltYWdlLmFkZChyZWN0
LmxvY2F0aW9uKCksIHRleHR1cmUpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOworICAgIG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzLmFkZChpbWFnZUlELCB0aWxlZEltYWdlKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCit7CisgICAgbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQ2NF90
IGltYWdlSUQpCit7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBw
ZXJOb2RlKGxheWVyKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghaW1hZ2VJRCkgeworICAgICAgICBub2RlLT5jbGVhckRpcmVjdGx5Q29tcG9zaXRlZEltYWdl
VGlsZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZsb2F0U2l6ZSBzaXplKGxh
eWVyLT5zaXplKCkpOworICAgIEZsb2F0UmVjdCBjb250ZW50c1JlY3QobGF5ZXItPmNvbnRlbnRz
UmVjdCgpKTsKKyAgICBmbG9hdCBob3Jpem9udGFsRmFjdG9yID0gY29udGVudHNSZWN0LndpZHRo
KCkgLyBzaXplLndpZHRoKCk7CisgICAgZmxvYXQgdmVydGljYWxGYWN0b3IgPSBjb250ZW50c1Jl
Y3QuaGVpZ2h0KCkgLyBzaXplLmhlaWdodCgpOworICAgIEhhc2hNYXA8aW50NjRfdCwgVGlsZWRJ
bWFnZT46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFn
ZUlEKTsKKyAgICBpZiAoaXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZW5kKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFRpbGVkSW1hZ2U6Oml0ZXJhdG9yIGVuZFRpbGVJdGVyYXRv
ciA9IGl0LT5zZWNvbmQuZW5kKCk7CisgICAgZm9yIChUaWxlZEltYWdlOjppdGVyYXRvciB0aWxl
SXQgPSBpdC0+c2Vjb25kLmJlZ2luKCk7IHRpbGVJdCAhPSBlbmRUaWxlSXRlcmF0b3I7ICsrdGls
ZUl0KSB7CisgICAgICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0KEZsb2F0UG9pbnQodGlsZUl0LT5m
aXJzdCksIEZsb2F0U2l6ZSh0aWxlSXQtPnNlY29uZC0+c2l6ZSgpKSk7CisgICAgICAgIEZsb2F0
UmVjdCB0YXJnZXRSZWN0KHNvdXJjZVJlY3QueCgpICogaG9yaXpvbnRhbEZhY3RvciArIGNvbnRl
bnRzUmVjdC54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY3QueSgp
ICogdmVydGljYWxGYWN0b3IgKyBjb250ZW50c1JlY3QueSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRoKCkgKiBob3Jpem9udGFsRmFjdG9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCgpICogdmVydGljYWxGYWN0
b3IpOworICAgICAgICBpbnQgbmV3VGlsZUlEID0gbm9kZS0+Y3JlYXRlQ29udGVudFRpbGUoMS4w
KTsKKyAgICAgICAgbm9kZS0+c2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2UobmV3VGlsZUlELCBJbnRSZWN0KHNvdXJjZVJlY3QpLCB0YXJnZXRSZWN0LCB0
aWxlSXQtPnNlY29uZC5nZXQoKSk7CisgICAgfQorfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6Zmx1c2hMYXllckNoYW5nZXMoKQoreworICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZShGbG9hdFJlY3QoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1
cmVSb290TGF5ZXIoKQoreworICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fcm9vdExheWVyID0gY3JlYXRlTGF5ZXIoSW52YWxpZFdlYkxheWVySUQpOworICAgIG1f
cm9vdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0
RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxv
YXRQb2ludDNEKDAsIDAsIDApKTsKKworICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3Qg
aGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCisgICAgbV9yb290
TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7CisgICAgbV90ZXh0dXJlTWFwcGVy
ID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKKyAgICB0b1RleHR1cmVNYXBwZXJOb2RlKG1f
cm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY1JlbW90ZUNvbnRlbnQoKQorewor
ICAgIGVuc3VyZVJvb3RMYXllcigpOworCisgICAgd2hpbGUgKE93blB0cjxMYXllclRyZWVNZXNz
YWdlVG9SZW5kZXJlcj4gbmV4dE1lc3NhZ2UgPSBtX21lc3NhZ2VzVG9SZW5kZXJUaHJlYWQudHJ5
R2V0TWVzc2FnZSgpKSB7CisgICAgICAgIHN3aXRjaCAobmV4dE1lc3NhZ2UtPnR5cGUoKSkgewor
ICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpTZXRSb290TGF5ZXI6IHsK
KyAgICAgICAgICAgIGNvbnN0IFNldFJvb3RMYXllck1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGlj
X2Nhc3Q8U2V0Um9vdExheWVyTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOwor
ICAgICAgICAgICAgc2V0Um9vdExheWVySUQoZGF0YS5sYXllcklEKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJl
cjo6RGVsZXRlTGF5ZXI6IHsKKyAgICAgICAgICAgIGNvbnN0IERlbGV0ZUxheWVyTWVzc2FnZURh
dGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxEZWxldGVMYXllck1lc3NhZ2UqPihuZXh0TWVzc2FnZS5n
ZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGRlbGV0ZUxheWVyKGRhdGEubGF5ZXJJRCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVz
c2FnZVRvUmVuZGVyZXI6OlN5bmNMYXllclBhcmFtZXRlcnM6IHsKKyAgICAgICAgICAgIGNvbnN0
IFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PFN5bmNM
YXllclBhcmFtZXRlcnNNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAg
ICAgICAgICBzeW5jTGF5ZXJQYXJhbWV0ZXJzKGRhdGEubGF5ZXJJbmZvKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5k
ZXJlcjo6Q3JlYXRlVGlsZTogeworICAgICAgICAgICAgY29uc3QgQ3JlYXRlVGlsZU1lc3NhZ2VE
YXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8Q3JlYXRlVGlsZU1lc3NhZ2UqPihuZXh0TWVzc2FnZS5n
ZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGNyZWF0ZVRpbGUoZGF0YS5sYXllcklELCBkYXRh
LnJlbW90ZVRpbGVJRCwgZGF0YS5zY2FsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92ZVRpbGU6
IHsKKyAgICAgICAgICAgIGNvbnN0IFJlbW92ZVRpbGVNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRp
Y19jYXN0PFJlbW92ZVRpbGVNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7Cisg
ICAgICAgICAgICByZW1vdmVUaWxlKGRhdGEubGF5ZXJJRCwgZGF0YS5yZW1vdGVUaWxlSUQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVyVHJlZU1l
c3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVUaWxlOiB7CisgICAgICAgICAgICBjb25zdCBVcGRhdGVU
aWxlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxVcGRhdGVUaWxlTWVzc2FnZSo+KG5l
eHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAgICAgdXBkYXRlVGlsZShkYXRhLmxh
eWVySUQsIGRhdGEucmVtb3RlVGlsZUlELCBkYXRhLnNvdXJjZVJlY3QsIGRhdGEudGFyZ2V0UmVj
dCwgZGF0YS5pbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkNyZWF0ZUltYWdlOiB7CisgICAgICAg
ICAgICBjb25zdCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8Q3Jl
YXRlSW1hZ2VNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAgICAgICAg
ICBjcmVhdGVJbWFnZShkYXRhLmltYWdlSUQsIGRhdGEuaW1hZ2UpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVy
OjpEZXN0cm95SW1hZ2U6IHsKKyAgICAgICAgICAgIGNvbnN0IENyZWF0ZUltYWdlTWVzc2FnZURh
dGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxDcmVhdGVJbWFnZU1lc3NhZ2UqPihuZXh0TWVzc2FnZS5n
ZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGRlc3Ryb3lJbWFnZShkYXRhLmltYWdlSUQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVyVHJlZU1l
c3NhZ2VUb1JlbmRlcmVyOjpGbHVzaExheWVyQ2hhbmdlczoKKyAgICAgICAgICAgIGZsdXNoTGF5
ZXJDaGFuZ2VzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5
ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG1lc3NhZ2UpCit7CisgICAgbV9tZXNzYWdlc1RvUmVu
ZGVyVGhyZWFkLmFwcGVuZChtZXNzYWdlKTsKKyAgICB1cGRhdGVXZWJWaWV3KCk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBD
cmVhdGVUaWxlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySUQgPSBsYXllcklEOwor
ICAgIGRhdGEucmVtb3RlVGlsZUlEID0gdGlsZUlEOworICAgIGRhdGEuc2NhbGUgPSB1cGRhdGVJ
bmZvLnVwZGF0ZVNjYWxlRmFjdG9yOworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKENyZWF0ZVRpbGVN
ZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0
aWxlSUQsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRl
VGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0
ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgVXBkYXRlVGlsZU1lc3NhZ2VEYXRhIGRhdGE7Cisg
ICAgZGF0YS5sYXllcklEID0gbGF5ZXJJRDsKKyAgICBkYXRhLnJlbW90ZVRpbGVJRCA9IHRpbGVJ
RDsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZSh1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSk7CisgICAgZGF0YS5pbWFnZSA9IGJpdG1h
cC0+Y3JlYXRlUUltYWdlKCkuY29weSgpOworICAgIGRhdGEuc291cmNlUmVjdCA9IEludFJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzLnNpemUoKSk7Cisg
ICAgZGF0YS50YXJnZXRSZWN0ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzOworICAgIHB1
c2hVcGRhdGVUb1F1ZXVlKFVwZGF0ZVRpbGVNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBp
bnQgdGlsZUlEKQoreworICAgIFJlbW92ZVRpbGVNZXNzYWdlRGF0YSBkYXRhOworICAgIGRhdGEu
bGF5ZXJJRCA9IGxheWVySUQ7CisgICAgZGF0YS5yZW1vdGVUaWxlSUQgPSB0aWxlSUQ7CisgICAg
cHVzaFVwZGF0ZVRvUXVldWUoUmVtb3ZlVGlsZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisK
Kwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5
ZXJJRCBpZCkKK3sKKyAgICBEZWxldGVMYXllck1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0YS5s
YXllcklEID0gaWQ7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoRGVsZXRlTGF5ZXJNZXNzYWdlOjpj
cmVhdGUoZGF0YSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBTZXRSb290TGF5ZXJNZXNzYWdlRGF0
YSBkYXRhOworICAgIGRhdGEubGF5ZXJJRCA9IGlkOworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKFNl
dFJvb3RMYXllck1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpzeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKGNvbnN0IFdlYkxheWVySW5mbyYgaW5m
bykKK3sKKyAgICBTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRh
LmxheWVySW5mbyA9IGluZm87CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoU3luY0xheWVyUGFyYW1l
dGVyc01lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpkaWRSZW5kZXJGcmFtZSgpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1lKCks
IG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgcHVzaFVwZGF0ZVRv
UXVldWUoRmx1c2hMYXllckNoYW5nZXNNZXNzYWdlOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtl
eSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlKQoreworICAg
IENyZWF0ZUltYWdlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGRhdGEuaW1h
Z2VJRCA9IGtleTsKKyAgICBkYXRhLmltYWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKS5jb3B5
KCk7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoQ3JlYXRlSW1hZ2VNZXNzYWdlOjpjcmVhdGUoZGF0
YSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9z
aXRlZEltYWdlKGludDY0X3Qga2V5KQoreworICAgIERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhIGRh
dGE7CisgICAgZGF0YS5pbWFnZUlEID0ga2V5OworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKERlc3Ry
b3lJbWFnZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9p
bnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkt
PnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRl
bnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKSwgbV9kcmF3aW5nQXJlYVBy
b3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNl
dFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBz
Y2FsZSkKK3sKKyAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworICAgIG1fY29udGVu
dHNTY2FsZSA9IHNjYWxlOworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdEFu
ZFNjYWxlKHJlY3QsIHNjYWxlKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgp
KTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBy
byBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCmluZGV4IDI3NzVlOGEuLjM2YTg1MDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIucHJvCkBAIC0yOSw2ICsyOSw4IEBAIFdFQktJVDFfU09VUkNFU19TSEFSRURfV0lU
SF9XRUJLSVQyID0gXAogV0VCS0lUMl9HRU5FUkFURURfSEVBREVSUyA9IFwKICAgICAkJFdFQktJ
VDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0F1dGhlbnRpY2F0aW9uTWFuYWdlck1lc3NhZ2VzLmgg
XAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRG93bmxvYWRQcm94eU1lc3Nh
Z2VzLmggXAorICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVlSG9z
dE1lc3NhZ2VzLmggXAorICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5ZXJU
cmVlSG9zdFByb3h5TWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VT
X0RJUi9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggXAogICAgICQkV0VCS0lUMl9H
RU5FUkFURURfU09VUkNFU19ESVIvUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBcCiAg
ICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VzLmggXApAQCAtNjcsNiArNjksOCBAQCBXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VT
ID0gXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRG93bmxvYWRQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIv
RHJhd2luZ0FyZWFNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVE
X1NPVVJDRVNfRElSL0RyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKKyAgICAk
JFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJlZUhvc3RNZXNzYWdlUmVjZWl2
ZXIuY3BwIFwKKyAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJlZUhv
c3RQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09V
UkNFU19ESVIvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAg
ICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIv
UGx1Z2luUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgXApAQCAtMTYyLDYgKzE2Niw3IEBAIEhF
QURFUlMgKz0gXAogICAgIFNoYXJlZC9XZWJHcmFwaGljc0NvbnRleHQuaCBcCiAgICAgU2hhcmVk
L1dlYkhpdFRlc3RSZXN1bHQuaCBcCiAgICAgU2hhcmVkL1dlYkltYWdlLmggXAorICAgIFNoYXJl
ZC9XZWJMYXllclRyZWVJbmZvLmggXAogICAgIFNoYXJlZC9XZWJOYXZpZ2F0aW9uRGF0YVN0b3Jl
LmggXAogICAgIFNoYXJlZC9XZWJOdW1iZXIuaCBcCiAgICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBh
cmFtZXRlcnMuaCBcCkBAIC0zMTYsNiArMzIxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFcnJvcnMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmggXAorICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggXApAQCAtMzk5LDYgKzQwNSw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIFNoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcCBcCiAgICAgU2hhcmVkL1dlYktl
eWJvYXJkRXZlbnQuY3BwIFwKICAgICBTaGFyZWQvV2ViSW1hZ2UuY3BwIFwKKyAgICBTaGFyZWQv
V2ViTGF5ZXJUcmVlSW5mby5jcHAgXAogICAgIFNoYXJlZC9XZWJNb3VzZUV2ZW50LmNwcCBcCiAg
ICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuY3BwIFwKICAgICBTaGFyZWQvV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAgXApAQCAtNDg2LDYgKzQ5Myw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVByb2Nl
c3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAgXAor
ICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vz
cy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJl
UmVjb2duaXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVy
LmNwcCBcCkBAIC01NjUsNiArNTczLDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGlj
c0xheWVyLmNwcAppbmRleCAyMThmMmZmLi5iODAwZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXll
ci5jcHAKQEAgLTI1LDEzICsyNSwxMyBAQAogCiAjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCiAjaW5j
bHVkZSAiQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgot
I2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZS5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJ0ZXh0L0NTdHJp
bmcuaCIKICNpbmNsdWRlIDxIYXNoTWFwLmg+CkBAIC01OCwxMiArNTgsNiBAQCBXZWJHcmFwaGlj
c0xheWVyKiBXZWJHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEIGlk
KQogICAgIHJldHVybiBpdC0+c2Vjb25kOwogfQogCi1zdGF0aWMgVmVjdG9yPFdlYkxheWVySUQ+
JiBkZWxldGVkTGF5ZXJJRHMoKQotewotICAgIHN0YXRpYyBWZWN0b3I8V2ViTGF5ZXJJRD4gbGF5
ZXJzOwotICAgIHJldHVybiBsYXllcnM7Ci19Ci0KIHN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5
ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdy
YXBoaWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDogMDsKQEAgLTc5LDY3ICs3Myw5MSBAQCB2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6Om5vdGlmeUNoYW5nZSgpCiBXZWJHcmFwaGljc0xheWVyOjpXZWJHcmFw
aGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdyYXBoaWNzTGF5
ZXIoY2xpZW50KQogICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCi0gICAgLCBtX21vZGlmaWVk
KGZhbHNlKQorICAgICwgbV9tb2RpZmllZCh0cnVlKQogICAgICwgbV9jb250ZW50TmVlZHNEaXNw
bGF5KGZhbHNlKQogICAgICwgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyhmYWxzZSkKLSAgICAsIG1f
Y29udGVudFNjYWxlKDEuZikKKyAgICAsIG1faW5VcGRhdGVNb2RlKGZhbHNlKQorI2lmIEVOQUJM
RShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICwgbV9sYXllclRyZWVUaWxlQ2xpZW50KDApCisg
ICAgLCBtX21haW5CYWNraW5nU3RvcmUoYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKHRo
aXMsIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpKQor
I2VuZGlmCiB7Ci0gICAgLy8gU3RhcnRpbmcgbGF5ZXIgSURzIGZyb20gMTAwMCwgdG8gaGVscCBk
ZXRlY3QgZmF1bHR5IElEcyBlYXNpbHkuCi0gICAgc3RhdGljIFdlYkxheWVySUQgc0lEID0gMTAw
MDsKLSAgICBtX2xheWVySW5mby5pZCA9ICsrc0lEOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+
c2V0Q29udGVudHNTY2FsZSgxLjApOworICAgIHN0YXRpYyBXZWJMYXllcklEIHNJRCA9IDE7Cisg
ICAgbV9sYXllckluZm8uaWQgPSBzSUQrKzsKICAgICBsYXllckJ5SURNYXAoKS5hZGQoaWQoKSwg
dGhpcyk7CiB9CiAKIFdlYkdyYXBoaWNzTGF5ZXI6On5XZWJHcmFwaGljc0xheWVyKCkKIHsKICAg
ICBsYXllckJ5SURNYXAoKS5yZW1vdmUoaWQoKSk7Ci0gICAgZGVsZXRlZExheWVySURzKCkuYXBw
ZW5kKGlkKCkpOworCisgICAgLy8gVGhpcyB3b3VsZCB0ZWxsIHRoZSBVSSBwcm9jZXNzIHRvIHJl
bGVhc2UgdGhlIGJhY2tpbmcgc3RvcmUuCisgICAgc2V0Q29udGVudHNUb0ltYWdlKDApOworCisg
ICAgaWYgKG1fbGF5ZXJUcmVlVGlsZUNsaWVudCkKKyAgICAgICAgbV9sYXllclRyZWVUaWxlQ2xp
ZW50LT5kaWREZWxldGVMYXllcihpZCgpKTsKIH0KIAogYm9vbCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHsKICAg
ICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwotICAgIGlm
IChvaykKLSAgICAgICAgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgcmV0dXJuIG9rOworICAgIGlmICgh
b2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxk
cmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gdG9X
ZWJHcmFwaGljc0xheWVyKGNoaWxkcmVuW2ldKTsKKyAgICAgICAgY2hpbGQtPnNldENvbnRlbnRz
U2NhbGUobV9jb250ZW50c1NjYWxlKTsKKyAgICAgICAgY2hpbGQtPm5vdGlmeUNoYW5nZSgpOwor
ICAgIH0KKyAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBH
cmFwaGljc0xheWVyOjphZGRDaGlsZChsYXllcik7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxh
eWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQg
aW5kZXgpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBpbmRl
eCk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAgICAg
bm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92
ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKICAgICBH
cmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b1dlYkdy
YXBoaWNzTGF5ZXIobGF5ZXIpLT5ub3RpZnlDaGFuZ2UoKTsKICAgICBub3RpZnlDaGFuZ2UoKTsK
IH0KIAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIq
IGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFk
ZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXll
ciktPm5vdGlmeUNoYW5nZSgpOwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCiBib29sIFdlYkdy
YXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhp
Y3NMYXllciogbmV3Q2hpbGQpCiB7CiAgICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnJlcGxh
Y2VDaGlsZChvbGRDaGlsZCwgbmV3Q2hpbGQpOwotCi0gICAgaWYgKG9rKQotICAgICAgICBub3Rp
ZnlDaGFuZ2UoKTsKLSAgICByZXR1cm4gb2s7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIG5vdGlmeUNoYW5nZSgpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihvbGRD
aGlsZCktPm5vdGlmeUNoYW5nZSgpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCkt
Pm5vdGlmeUNoYW5nZSgpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKQogeworICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiBw
YXJlbnRMYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihwYXJlbnQoKSkpCisgICAgICAgIHBhcmVu
dExheWVyLT5ub3RpZnlDaGFuZ2UoKTsKICAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFy
ZW50KCk7CisKICAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIApAQCAtMjc0LDEzICsyOTIsMjggQEAg
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lKQogewogfQogCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCkKK3sKKyAgICBzZXRDb250ZW50c1RvSW1hZ2UoMCk7CisgICAgc2V0Q29udGVu
dHNUb0ltYWdlKG1faW1hZ2UuZ2V0KCkpOworfQorCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNl
dENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7Ci0gICAgaWYgKGltYWdlID09IG1faW1h
Z2UuZ2V0KCkpCisgICAgaWYgKGltYWdlID09IG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAg
ICBXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCk7
CisgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIFdlIGFkb3B0IGZp
cnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0IHdheSB3ZSBhdm9pZCBk
ZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFnZS4KKyAgICBpbnQ2NF90IG5ld0lEID0g
Y2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKGltYWdlKTsKKyAgICBjbGllbnQtPnJlbGVh
c2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAg
ICBpZiAobmV3SUQgPT0gbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSBuZXdJRDsKICAg
ICBtX2ltYWdlID0gaW1hZ2U7Ci0gICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9sYXllcklu
Zm8uaW1hZ2VVcGRhdGVkID0gdHJ1ZTsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Rv
SW1hZ2UoaW1hZ2UpOwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQpAQCAtMzAxLDUwICszMzQsMjkg
QEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xh
eWVyKiBsYXllcikKIAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQog
ewotICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLSAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICBz
ZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKHNp
emUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBtX25lZWRzRGlzcGxheVJlY3QudW5pdGUocmVjdCk7CisgICAgbV9tYWluQmFja2luZ1N0b3Jl
LT5pbnZhbGlkYXRlKEludFJlY3QocmVjdCkpOwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKLXsKLSAgICBz
ZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQogV2ViTGF5ZXJJRCBXZWJHcmFwaGljc0xheWVyOjppZCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGF5ZXJJbmZvLmlkOwogfQogCi12b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OmRpZFN5bmNocm9uaXplKCkKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0Nv
bXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG1fbmVlZHNEaXNw
bGF5ID0gZmFsc2U7Ci0gICAgbV9tb2RpZmllZCA9IGZhbHNlOwotICAgIG1fbmVlZHNEaXNwbGF5
UmVjdCA9IEZsb2F0UmVjdCgpOwotICAgIGlmIChtX2hhc1BlbmRpbmdBbmltYXRpb25zKQotICAg
ICAgICBub3RpZnlBbmltYXRpb25TdGFydGVkKFdURjo6Y3VycmVudFRpbWUoKSk7Ci0gICAgbV9o
YXNQZW5kaW5nQW5pbWF0aW9ucyA9IGZhbHNlOwotfQotCi1jb25zdCBXZWJMYXllckluZm8mIFdl
YkdyYXBoaWNzTGF5ZXI6OmxheWVySW5mbygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJJ
bmZvOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKCkK
LXsKLSAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxk
cmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgICAgIGNoaWxkcmVuKClbaV0t
PnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOwogICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKLSAg
ICAgICAgcmVwbGljYUxheWVyKCktPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgICAgIHJl
cGxpY2FMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShyZWN0KTsKICAgICBpZiAobWFza0xh
eWVyKCkpCi0gICAgICAgIG1hc2tMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAg
ICAgICBtYXNrTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7CisgICAgc3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiB9CiAKIFdlYkdyYXBoaWNzTGF5ZXIq
IHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKQEAgLTM1MiwzMCArMzY0
LDE5IEBAIFdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVy
KiBsYXllcikKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViR3JhcGhpY3NMYXllcio+KGxheWVy
KTsKIH0KIAotRmxvYXRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6Om5lZWRzRGlzcGxheVJlY3QoKSBj
b25zdAotewotICAgIEZsb2F0UmVjdCByZWN0ID0gRmxvYXRSZWN0KDAsIDAsIHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCkpOwotICAgIGlmICghbV9uZWVkc0Rpc3BsYXkpCi0gICAgICAg
IHJlY3QuaW50ZXJzZWN0KG1fbmVlZHNEaXNwbGF5UmVjdCk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19
Ci0KLVZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IFdlYkdyYXBoaWNzTGF5ZXI6OnRha2VMYXll
cnNUb0RlbGV0ZSgpCi17Ci0gICAgVmVjdG9yPFdlYktpdDo6V2ViTGF5ZXJJRD4gbGF5ZXJzID0g
ZGVsZXRlZExheWVySURzKCk7Ci0gICAgZGVsZXRlZExheWVySURzKCkuY2xlYXIoKTsKLSAgICBy
ZXR1cm4gbGF5ZXJzOwotfQotCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiB7CisgICAgaWYgKCFtX2xheWVyVHJlZVRpbGVDbGll
bnQpCisgICAgICAgIG1fbGF5ZXJUcmVlVGlsZUNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQo
KTsKKyAgICB1cGRhdGVDb250ZW50QnVmZmVycygpOworCiAgICAgbV9sYXllckluZm8ubmFtZSA9
IG5hbWUoKTsKICAgICBtX2xheWVySW5mby5hbmNob3JQb2ludCA9IGFuY2hvclBvaW50KCk7CiAg
ICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7CiAg
ICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOwog
ICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsKICAgICBt
X2xheWVySW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3QoKTsKLSAgICBtX2xheWVySW5m
by5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKKyAgICBtX2xheWVySW5mby5kcmF3c0Nv
bnRlbnQgPSBkcmF3c0NvbnRlbnQoKSB8fCBtX2ltYWdlOwogICAgIG1fbGF5ZXJJbmZvLm1hc2sg
PSB0b1dlYkxheWVySUQobWFza0xheWVyKCkpOwogICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3Vu
ZHMgPSBtYXNrc1RvQm91bmRzKCk7CiAgICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHko
KTsKQEAgLTM4MywxMjIgKzM4NCwxNTUgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQogICAgIG1fbGF5ZXJJbmZvLnBvcyA9IHBv
c2l0aW9uKCk7CiAgICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOwog
ICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkpOwot
ICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBGbG9hdFNpemUoc2l6ZSgpLndpZHRoKCkgKiBtX2NvbnRl
bnRTY2FsZSwgc2l6ZSgpLmhlaWdodCgpICogbV9jb250ZW50U2NhbGUpOworICAgIG1fbGF5ZXJJ
bmZvLnNpemUgPSBzaXplKCk7CiAgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3Jt
KCk7CiAgICAgbV9jb250ZW50TmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAgICAgbV9sYXllckluZm8u
Y2hpbGRyZW4uY2xlYXIoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4o
KS5zaXplKCk7ICsraSkKICAgICAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uYXBwZW5kKHRvV2Vi
TGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CisKKyAgICBtX2xheWVyVHJlZVRpbGVDbGllbnQtPmRp
ZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIobV9sYXllckluZm8pOworICAgIG1fbW9kaWZp
ZWQgPSBmYWxzZTsKKyAgICBtX2xheWVySW5mby5pbWFnZVVwZGF0ZWQgPSBmYWxzZTsKKyAgICBp
ZiAobV9oYXNQZW5kaW5nQW5pbWF0aW9ucykKKyAgICAgICAgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChXVEY6OmN1cnJlbnRUaW1lKCkpOworICAgIG1faGFzUGVuZGluZ0FuaW1hdGlvbnMgPSBmYWxz
ZTsKIH0KIAotc3RhdGljIFZlY3RvcjxGbG9hdFJlY3Q+IGRpdmlkZUludG9UaWxlcyhjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCit2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCiB7Ci0gICAgVmVj
dG9yPEZsb2F0UmVjdD4gdGlsZXM7Ci0gICAgZm9yIChmbG9hdCB5ID0gcmVjdC55KCk7IHkgPCBy
ZWN0Lm1heFkoKTsgeSArPSBnVGlsZURpbWVuc2lvbikgewotICAgICAgICBmb3IgKGZsb2F0IHgg
PSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgpOyB4ICs9IGdUaWxlRGltZW5zaW9uKSB7Ci0gICAg
ICAgICAgICBGbG9hdFJlY3QgdGlsZSh4LCB5LCBnVGlsZURpbWVuc2lvbiwgZ1RpbGVEaW1lbnNp
b24pOwotICAgICAgICAgICAgdGlsZS5pbnRlcnNlY3QocmVjdCk7Ci0gICAgICAgICAgICB0aWxl
cy5hcHBlbmQodGlsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRpbGVzOwogfQog
Ci1zdGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvRm9yVGhpc0xheWVyKEdyYXBoaWNz
TGF5ZXIqIGxheWVyLCBXZWJMYXllclRyZWVJbmZvJiBvdXRJbmZvLCBWZWN0b3I8V2ViR3JhcGhp
Y3NMYXllcio+JiBvdXRMYXllcnMpCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
U2NhbGUoZmxvYXQgc2NhbGUpCiB7Ci0gICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dl
YkdyYXBoaWNzTGF5ZXIobGF5ZXIpOwotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoIWxheWVyLT5pc01vZGlmaWVkKCkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHRoaXMtPmNoaWxkcmVuKClbaV0pOworICAgICAgICBs
YXllci0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7CisgICAgfQorCisgICAgbV9jb250ZW50c1Nj
YWxlID0gc2NhbGU7CisgICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSAmJiBtX21haW5CYWNraW5n
U3RvcmUtPmNvbnRlbnRzU2NhbGUoKSA9PSBzY2FsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
b3V0TGF5ZXJzLmFwcGVuZChsYXllcik7Ci0gICAgb3V0SW5mby5sYXllcnMuYXBwZW5kKGxheWVy
LT5sYXllckluZm8oKSk7CisgICAgbm90aWZ5Q2hhbmdlKCk7CisKKyAgICBtX3ByZXZpb3VzQmFj
a2luZ1N0b3JlID0gbV9tYWluQmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKKyAgICBtX21haW5CYWNr
aW5nU3RvcmUgPSBhZG9wdFB0cihuZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgVGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZDo6Y3JlYXRlKHRoaXMpKSk7CisgICAgbV9tYWluQmFj
a2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKK30KIAotICAgIFdlYkxheWVySW5m
byYgbGF5ZXJJbmZvID0gb3V0SW5mby5sYXllcnNbb3V0SW5mby5sYXllcnMuc2l6ZSgpIC0gMV07
Ci0gICAgaWYgKGxheWVyLT5pbWFnZSgpKQotICAgICAgICBsYXllckluZm8uZHJhd3NDb250ZW50
ID0gdHJ1ZTsKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Um9vdExheWVyKGJvb2wgaXNSb290
KQoreworICAgIG1fbGF5ZXJJbmZvLmlzUm9vdExheWVyID0gaXNSb290OworICAgIG5vdGlmeUNo
YW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVj
dFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sK
KyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldFZpc2libGVSZWN0VHJhamVjdG9yeVZlY3Rvcih0
cmFqZWN0b3J5VmVjdG9yKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRWaXNpYmxl
Q29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX3Zpc2libGVDb250ZW50
UmVjdCA9IHJlY3Q7CisgICAgbm90aWZ5Q2hhbmdlKCk7CisgICAgbV9tYWluQmFja2luZ1N0b3Jl
LT5hZGp1c3RWaXNpYmxlUmVjdCgpOwogfQogCi1zdGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9zaXRp
bmdJbmZvUmVjdXJzaXZlbHkoR3JhcGhpY3NMYXllciogcm9vdExheWVyLCBXZWJMYXllclRyZWVJ
bmZvJiBvdXRJbmZvLCBWZWN0b3I8V2ViR3JhcGhpY3NMYXllcio+JiBvdXRMYXllcnMpCit2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghcm9vdExheWVyKQor
ICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOworICAgIG1fbW9kaWZpZWQg
PSB0cnVlOworICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCByZWN0KTsK
K30KIAotICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIocm9vdExheWVyLCBv
dXRJbmZvLCBvdXRMYXllcnMpOwotICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5
ZXIocm9vdExheWVyLT5tYXNrTGF5ZXIoKSwgb3V0SW5mbywgb3V0TGF5ZXJzKTsKLSAgICBjb2xs
ZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkocm9vdExheWVyLT5yZXBsaWNhTGF5ZXIoKSwg
b3V0SW5mbywgb3V0TGF5ZXJzKTsKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5n
U3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKK3sKK30K
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdExheWVyLT5jaGlsZHJlbigpLnNpemUo
KTsgKytpKQotICAgICAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkocm9vdExh
eWVyLT5jaGlsZHJlbigpW2ldLCBvdXRJbmZvLCBvdXRMYXllcnMpOworYm9vbCBXZWJHcmFwaGlj
c0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1faW5VcGRhdGVNb2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKFdlYkxh
eWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGNsaWVudC0+bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCk7CisgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNlbmRMYXllcnNUb1VJUHJv
Y2VzcyhXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5ZXIsIFdlYlBhZ2UqIHdlYlBhZ2Up
CitJbnRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0
KCkKIHsKLSAgICB3ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwotICAgIHdlYlBhZ2UtPmNvcmVQ
YWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5n
U3ViZnJhbWVzKCk7Ci0gICAgV2ViTGF5ZXJUcmVlSW5mbyBjb21wb3NpdGluZ0luZm87Ci0gICAg
Y29tcG9zaXRpbmdJbmZvLnJvb3RMYXllcklEID0gcm9vdExheWVyID8gdG9XZWJHcmFwaGljc0xh
eWVyKHJvb3RMYXllciktPmlkKCkgOiAwOwotICAgIGNvbXBvc2l0aW5nSW5mby5jb250ZW50U2Nh
bGUgPSAxLjA7Ci0gICAgY29tcG9zaXRpbmdJbmZvLmRlbGV0ZWRMYXllcklEcyA9IFdlYkdyYXBo
aWNzTGF5ZXI6OnRha2VMYXllcnNUb0RlbGV0ZSgpOwotICAgIFZlY3RvcjxXZWJHcmFwaGljc0xh
eWVyKj4gbGF5ZXJzOwotICAgIGlmIChyb290TGF5ZXIpCi0gICAgICAgIGNvbGxlY3RDb21wb3Np
dGluZ0luZm9SZWN1cnNpdmVseShyb290TGF5ZXIsIGNvbXBvc2l0aW5nSW5mbywgbGF5ZXJzKTsK
KyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4g
SW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKK30KIAotICAg
IGlmIChjb21wb3NpdGluZ0luZm8uZGVsZXRlZExheWVySURzLmlzRW1wdHkoKSAmJiBjb21wb3Np
dGluZ0luZm8ubGF5ZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworSW50UmVjdCBXZWJH
cmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkKK3sKKyAgICByZXR1
cm4gbV92aXNpYmxlQ29udGVudFJlY3Q7Cit9CiAKLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpEcmF3aW5nQXJlYVByb3h5OjpTeW5jQ29tcG9zaXRpbmdMYXllcnMoY29tcG9zaXRpbmdJbmZv
KSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVycy5zaXplKCk7ICsraSkgewot
ICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyc1tpXTsKLSAgICAgICAgRmxv
YXRSZWN0IHVwZGF0ZVJlY3QgPSBsYXllci0+bmVlZHNEaXNwbGF5UmVjdCgpOwotCi0gICAgICAg
IGxheWVyLT5kaWRTeW5jaHJvbml6ZSgpOwotCi0gICAgICAgIGlmICh1cGRhdGVSZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gZGly
ZWN0SW1hZ2UgPSBsYXllci0+aW1hZ2UoKTsKLSAgICAgICAgaWYgKGRpcmVjdEltYWdlKQotICAg
ICAgICAgICAgdXBkYXRlUmVjdCA9IGxheWVyLT5jb250ZW50c1JlY3QoKTsKLSAgICAgICAgZWxz
ZSBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRpbGVSZWN0cyA9IGRpdmlkZUludG9UaWxlcyh1cGRh
dGVSZWN0KTsKLSAgICAgICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwg
dGlsZVJlY3RzLnNpemUoKTsgKyt0aWxlSW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QgPSB0aWxlUmVjdHNbdGlsZUluZGV4XTsKLSAgICAgICAgICAgIEludFJl
Y3QgZW5jbG9zaW5nVXBkYXRlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGlsZVJlY3QpOwotCi0g
ICAgICAgICAgICBXZWJMYXllclVwZGF0ZUluZm8gY2h1bmsoZW5jbG9zaW5nVXBkYXRlUmVjdCk7
Ci0gICAgICAgICAgICBjaHVuay5sYXllcklEID0gdWludDMyX3QobGF5ZXItPmlkKCkpOwotICAg
ICAgICAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUoY2h1bmsucmVjdC5zaXplKCksIFNoYXJlYWJsZUJpdG1hcDo6U3Vw
cG9ydHNBbHBoYSk7Ci0gICAgICAgICAgICBpZiAoIWJpdG1hcCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICghYml0bWFwLT5jcmVhdGVIYW5kbGUoY2h1bmsuYml0
bWFwSGFuZGxlKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFURk9STShRVCkK
LSAgICAgICAgICAgIFFJbWFnZSB0aWxlSW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZVFJbWFnZSgpOwot
ICAgICAgICAgICAgdGlsZUltYWdlLmZpbGwoMCk7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgUVBhaW50ZXIgcGFpbnRlcigmdGlsZUltYWdlKTsKLSAgICAgICAgICAgICAgICBwYWlu
dGVyLnRyYW5zbGF0ZSgtdGlsZVJlY3QueCgpLCAtdGlsZVJlY3QueSgpKTsKLSAgICAgICAgICAg
ICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGFpbnRlcik7Ci0gICAgICAgICAgICAgICAg
aWYgKGRpcmVjdEltYWdlKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShk
aXJlY3RJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgbGF5ZXItPmNvbnRlbnRzUmVj
dCgpLCBGbG9hdFJlY3QoMCwgMCwgZGlyZWN0SW1hZ2UtPndpZHRoKCksIGRpcmVjdEltYWdlLT5o
ZWlnaHQoKSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbGF5
ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGVuY2xvc2luZ1VwZGF0ZVJl
Y3QpOwotICAgICAgICAgICAgfQotI2VuZGlmCitDb2xvciBXZWJHcmFwaGljc0xheWVyOjp0aWxl
ZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRl
bnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAKLSAgICAg
ICAgICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OlVwZGF0ZUNv
bXBvc2l0aW5nTGF5ZXJDb250ZW50KGNodW5rKSk7Ci0gICAgICAgIH0KK30KK3ZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRh
dGVJbmZvKQoreworICAgIG1fbW9kaWZpZWQgPSB0cnVlOworICAgIGlmIChXZWJMYXllclRyZWVU
aWxlQ2xpZW50KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCkpCisgICAgICAgIGNsaWVu
dC0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBk
YXRlSW5mbykKK3sKKyAgICBtX21vZGlmaWVkID0gdHJ1ZTsKKyAgICBpZiAoV2ViTGF5ZXJUcmVl
VGlsZUNsaWVudCogY2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgpKQorICAgICAgICBjbGll
bnQtPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvKTsKK30KKwordm9pZCBXZWJH
cmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKGludCB0aWxlSUQpCit7CisgICAgbV9tb2RpZmllZCA9
IHRydWU7CisgICAgaWYgKFdlYkxheWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJl
ZVRpbGVDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7
Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVs
eSgpCit7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAg
ICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcih0aGlzLT5jaGls
ZHJlbigpW2ldKTsKKyAgICAgICAgbGF5ZXItPnVwZGF0ZVRpbGVCdWZmZXJzUmVjdXJzaXZlbHko
KTsKICAgICB9CiB9CiAKK1dlYkxheWVyVHJlZVRpbGVDbGllbnQqIFdlYkdyYXBoaWNzTGF5ZXI6
OmxheWVyVHJlZVRpbGVDbGllbnQoKSBjb25zdAoreworICAgIGlmIChtX2xheWVyVHJlZVRpbGVD
bGllbnQpCisgICAgICAgIHJldHVybiBtX2xheWVyVHJlZVRpbGVDbGllbnQ7CisgICAgV2ViR3Jh
cGhpY3NMYXllciogcGFyZW50ID0gdG9XZWJHcmFwaGljc0xheWVyKHRoaXMtPnBhcmVudCgpKTsK
KyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHBhcmVudC0+
bGF5ZXJUcmVlVGlsZUNsaWVudCgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0
ZUNvbnRlbnRCdWZmZXJzKCkKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgpIHx8IG1faW1hZ2Up
CisgICAgICAgIHJldHVybjsKKyAgICBXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBs
YXllclRyZWVUaWxlQ2xpZW50KCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2luVXBkYXRlTW9kZSA9IHRydWU7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT51cGRh
dGVUaWxlQnVmZmVycygpOworICAgIG1faW5VcGRhdGVNb2RlID0gZmFsc2U7Cit9CisKKyNlbmRp
ZgorCiBzdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVXZWJHcmFwaGljc0xh
eWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFdlYkdyYXBoaWNzTGF5ZXIoY2xpZW50KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCmluZGV4
IGFkNjAyMWUuLmM1ODFiNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCkBAIC0yNywxOSArMjcs
NDAgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisj
aW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgor
I2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFdlYkxheWVy
VHJlZVRpbGVDbGllbnQgeworcHVibGljOgorICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRp
bGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSopID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJM
YXllckluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZERlbGV0ZUxheWVyKFdlYkxheWVy
SUQpID0gMDsKK307CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR3JhcGhp
Y3NMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyIHsKK2NsYXNzIFdlYkdyYXBo
aWNzTGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllcgorI2lmIEVOQUJMRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQorICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBUaWxlZEJh
Y2tpbmdTdG9yZUNsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJLaXQ6
OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorI2VuZGlmCit7CiBwdWJsaWM6CiAg
ICAgV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+
V2ViR3JhcGhpY3NMYXllcigpOwpAQCAtNzMsMTMgKzk0LDEzIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldE5lZWRzRGlzcGxheSgpOwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICB2b2lkIHNldFZpc2libGVD
b250ZW50UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJl
Y3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lk
IHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHZvaWQgc2V0Um9v
dExheWVyKGJvb2wpOwogCiAgICAgV2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7Ci0gICAg
Y29uc3QgV2ViS2l0OjpXZWJMYXllckluZm8mIGxheWVySW5mbygpIGNvbnN0OwotICAgIEZsb2F0
UmVjdCBuZWVkc0Rpc3BsYXlSZWN0KCkgY29uc3Q7Ci0gICAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6
OldlYkxheWVySUQ+IHRha2VMYXllcnNUb0RlbGV0ZSgpOwogICAgIHN0YXRpYyBXZWJHcmFwaGlj
c0xheWVyKiBsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEKTsKICAgICBib29sIGlzTW9kaWZp
ZWQoKSBjb25zdCB7IHJldHVybiBtX21vZGlmaWVkOyB9CiAgICAgdm9pZCBkaWRTeW5jaHJvbml6
ZSgpOwpAQCAtODcsMjEgKzEwOCw1MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnlBbmltYXRp
b25TdGFydGVkKGRvdWJsZSk7CiAKICAgICBzdGF0aWMgdm9pZCBpbml0RmFjdG9yeSgpOwotICAg
IHN0YXRpYyB2b2lkIHNlbmRMYXllcnNUb1VJUHJvY2VzcyhXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiwgV2ViS2l0OjpXZWJQYWdlKik7CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkK
KyAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJh
Y2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3Rv
cmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWlu
dGVkQXJlYSk7CisgICAgdmlydHVhbCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93
ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50
c1JlY3QoKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVj
dCgpOworICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdDsKKworICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRl
SW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdl
YktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxl
SUQpOworCisgICAgdm9pZCBzZXRMYXllclRyZWVUaWxlQ2xpZW50KFdlYktpdDo6V2ViTGF5ZXJU
cmVlVGlsZUNsaWVudCogY2xpZW50KSB7IG1fbGF5ZXJUcmVlVGlsZUNsaWVudCA9IGNsaWVudDsg
fQorICAgIFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogbGF5ZXJUcmVlVGlsZUNsaWVu
dCgpIGNvbnN0OworCisgICAgYm9vbCBpc1JlYWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBjb25zdDsK
KyAgICB2b2lkIHVwZGF0ZVRpbGVCdWZmZXJzUmVjdXJzaXZlbHkoKTsKKyAgICB2b2lkIHNldENv
bnRlbnRzU2NhbGUoZmxvYXQpOworICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyNl
bmRpZgogCiBwcml2YXRlOgogICAgIFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwot
ICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcD4gbV9iYWNraW5nU3RvcmU7CisgICAg
V2ViS2l0OjpXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBtX2xheWVyVGlsZUNsaWVudDsKICAgICBS
ZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsK
LSAgICBib29sIG1fbmVlZHNEaXNwbGF5OwotICAgIGJvb2wgbV9tb2RpZmllZDsKLSAgICBib29s
IG1fY29udGVudE5lZWRzRGlzcGxheTsKLSAgICBib29sIG1faGFzUGVuZGluZ0FuaW1hdGlvbnM7
Ci0KLSAgICBmbG9hdCBtX2NvbnRlbnRTY2FsZTsKKyAgICBJbnRSZWN0IG1fdmlzaWJsZUNvbnRl
bnRSZWN0OworICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXkgOiAxOworICAgIGJvb2wgbV9tb2RpZmll
ZCA6IDE7CisgICAgYm9vbCBtX2NvbnRlbnROZWVkc0Rpc3BsYXkgOiAxOworICAgIGJvb2wgbV9o
YXNQZW5kaW5nQW5pbWF0aW9ucyA6IDE7CisgICAgYm9vbCBtX2luVXBkYXRlTW9kZSA6IDI7CiAK
ICAgICB2b2lkIG5vdGlmeUNoYW5nZSgpOworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCisgICAgV2ViS2l0OjpXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBtX2xheWVyVHJlZVRpbGVD
bGllbnQ7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNr
aW5nU3RvcmU7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZp
b3VzQmFja2luZ1N0b3JlOworICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKyNlbmRpZgogfTsK
IAogV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5k
ZXggNTJmZGRkZC4uZDg3MGViMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTc0LDEwICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0K
IAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwg
dm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXllcnMoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9u
KiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKSA9IDA7CiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKaW5kZXggODA4NmRmNy4uYjJlZDg1
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhSW1wbC5jcHAKQEAgLTY2Niw1ICs2NjYsMTMgQEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6
OmRpc3BsYXkoVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKICAgICBtX2xhc3REaXNwbGF5VGltZSA9
IGN1cnJlbnRUaW1lKCk7CiB9CiAKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkgJiYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpZFJl
Y2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9u
LCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
IGFyZ3VtZW50cykKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNz
YWdlSUQsIGFyZ3VtZW50cyk7Cit9CisjZW5kaWYKKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUlt
cGwuaAppbmRleCBjYzhhODA1Li4zNWIyMDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCkBAIC03MSw2ICs3MSwxMCBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRh
dGUoY29uc3QgV2luZG93R2VvbWV0cnkmKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFRJTEVEX0JB
Q0tJTkdfU1RPUkUpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24q
LCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworI2VuZGlm
CisKICAgICAvLyBDb3JlSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJvb2wg
cmVzcG9uZEltbWVkaWF0ZWx5LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CiAgICAg
dmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGRhNDJhZTYuLjAzMWMzZmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
UVQpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJxdC9MYXllclRyZWVIb3N0UXQu
aCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CkBAIC00NCw2ICs0OCw4IEBAIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdD4gTGF5ZXJUcmVl
SG9zdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgcmV0dXJuIExheWVyVHJlZUhvc3RD
QU1hYzo6Y3JlYXRlKHdlYlBhZ2UpOwogI2VsaWYgUExBVEZPUk0oV0lOKSAmJiBIQVZFKFdLUUNB
KQogICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FXaW46OmNyZWF0ZSh3ZWJQYWdlKTsKKyNlbGlm
IFBMQVRGT1JNKFFUKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgcmV0dXJuIExheWVyVHJl
ZUhvc3RRdDo6Y3JlYXRlKHdlYlBhZ2UpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhv
c3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgK
aW5kZXggNjdjODA3Yi4uNTFmOTkyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNiwxMyArMjYsMjAgQEAKICNpZm5kZWYg
TGF5ZXJUcmVlSG9zdF9oCiAjZGVmaW5lIExheWVyVHJlZUhvc3RfaAogCisjaW5jbHVkZSA8Q29y
ZUlQQy9NZXNzYWdlSUQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAKK25hbWVzcGFjZSBDb3JlSVBDIHsKK2NsYXNzIEFyZ3VtZW50
RGVjb2RlcjsKK2NsYXNzIENvbm5lY3Rpb247Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICBjbGFzcyBJbnRSZWN0OwotICAgIGNsYXNzIEludFNpemU7Ci0gICAgY2xhc3MgR3JhcGhpY3NM
YXllcjsKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsK
K2NsYXNzIEdyYXBoaWNzTGF5ZXI7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNzIsNiAr
NzksMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IH0KIAorI2lmIEVOQUJMRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RB
bmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRl
bnRSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29y
ZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyNlbmRpZgorCiAj
aWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNoaWxkV2luZG93R2Vv
bWV0cnlVcGRhdGUoY29uc3QgV2luZG93R2VvbWV0cnkmKSA9IDA7CiAjZW5kaWYKQEAgLTgwLDYg
Kzk1LDExIEBAIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0KFdlYlBhZ2Uq
KTsKIAogICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKKworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJ
TkdfU1RPUkUpCisgICAgYm9vbCBtX3dhaXRpbmdGb3JVSVByb2Nlc3M7CisjZW5kaWYKIH07CiAK
ICNpZiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oUVQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmlu
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZjE0YWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5t
ZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKK21lc3Nh
Z2VzIC0+IExheWVyVHJlZUhvc3QgeworICAgIFNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVy
KGludCBsYXllcklELCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdCkKKyAgICBT
ZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKFdlYkNvcmU6OkZsb2F0UG9pbnQg
dHJhamVjdG9yeVZlY3RvcnkpCisgICAgU2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoV2Vi
Q29yZTo6SW50UmVjdCBjb250ZW50UmVjdCwgZmxvYXQgc2NhbGUpCisgICAgUmVuZGVyTmV4dEZy
YW1lKCkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwCmluZGV4IGZhYTZjZGQuLmU3MjA4YTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVh
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5n
QXJlYS5jcHAKQEAgLTE3Nyw2ICsxNzcsMTAgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhOjpyZW1v
dmVUaWxlKGludCB0aWxlSUQpCiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5n
QXJlYVByb3h5OjpSZW1vdmVUaWxlKHRpbGVJRCkpOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQordm9pZCBUaWxlZERyYXdpbmdBcmVhOjpkaWRSZWNlaXZlTGF5ZXJUcmVl
SG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVz
c2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykgeyB9CisjZW5kaWYK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCisKICNlbmRpZiAvLyBUSUxFRF9CQUNLSU5HX1NUT1JF
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3
aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2lu
Z0FyZWEuaAppbmRleCBlZDEzZDJhLi41ZWI3OWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgKQEAgLTQ5LDYgKzQ5LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9z
aXRpbmdMYXllclN5bmMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nTGF5
ZXJzKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqKTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDRmMTlkNmYuLjRhMDdmYzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTIxMTIs
NiArMjExMiwxNCBAQCB2b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZwogICAgICAgICAgICAgbV9kcmF3
aW5nQXJlYS0+ZGlkUmVjZWl2ZURyYXdpbmdBcmVhTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdl
SUQsIGFyZ3VtZW50cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyNpZiBFTkFCTEUoVElM
RURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlm
IChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdD4oKSkgewor
ICAgICAgICBpZiAobV9kcmF3aW5nQXJlYSkKKyAgICAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRp
ZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3Vt
ZW50cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICAKICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQogICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzV2Vi
SW5zcGVjdG9yPigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCmluZGV4IDU3OGFlMDguLmZkZjIyY2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVI
b3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuY3BwCkBAIC0yNSw4ICsyNSw0MTQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJM
YXllclRyZWVIb3N0UXQuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXll
ci5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IExh
eWVyVHJlZUhvc3RRdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBMYXllclRyZWVIb3N0UXQod2ViUGFnZSkpOworfQorCitMYXllclRyZWVIb3N0
UXQ6On5MYXllclRyZWVIb3N0UXQoKQoreworfQorCitMYXllclRyZWVIb3N0UXQ6OkxheWVyVHJl
ZUhvc3RRdChXZWJQYWdlKiB3ZWJQYWdlKQorICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQor
ICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2lz
VmFsaWQodHJ1ZSkKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAsIG1fd2Fp
dGluZ0ZvclVJUHJvY2VzcyhmYWxzZSkKKyAgICAsIG1fc3VzcGVuZGVkKGZhbHNlKQorI2VuZGlm
CisgICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkU3luY1Jvb3RM
YXllcih0cnVlKQorICAgICwgbV9sYXllckZsdXNoVGltZXIodGhpcywgJkxheWVyVHJlZUhvc3RR
dDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZCh0cnVlKQoreworICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCisgICAgbV9yb290TGF5
ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgV2ViR3JhcGhpY3NMYXllciog
d2ViUm9vdExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKTsKKyAg
ICB3ZWJSb290TGF5ZXItPnNldFJvb3RMYXllcih0cnVlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
bV9yb290TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3RRdCByb290IGxheWVyIik7CisjZW5k
aWYKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jvb3RM
YXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9sYXllclRyZWVDb250ZXh0
LndlYkxheWVySUQgPSB0b1dlYkdyYXBoaWNzTGF5ZXIod2ViUm9vdExheWVyKS0+aWQoKTsKKwor
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0
aGlzKTsKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB0b1dlYkdyYXBoaWNz
TGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5zZXRMYXllclRyZWVUaWxlQ2xpZW50KHRoaXMpOwor
I2VuZGlmCisjaWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+
c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFF0IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsKKyNlbmRp
ZgorICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUp
OworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVudHNPcGFxdWUobV93
ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5zcGFyZW50
QmFja2dyb3VuZCgpKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUo
bV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7CisKKyAgICBpZiAobV93ZWJQYWdlLT5oYXNQYWdl
T3ZlcmxheSgpKQorICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisKKyAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldExheWVyRmx1
c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVyRmx1c2hpbmdFbmFibGVkKQoreworICAgIGlm
IChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBs
YXllckZsdXNoaW5nRW5hYmxlZDsKKworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsK
K30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAg
aWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVyRmx1
c2hUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpjYW5j
ZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCit7CisgICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1
bGVkTGF5ZXJGbHVzaChib29sIG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkKK3sKKyAg
ICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IG5vdGlmeUFmdGVyU2NoZWR1bGVk
TGF5ZXJGbHVzaDsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgLy8g
QWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KKyAgICBpZiAoZ3JhcGhp
Y3NMYXllcikKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChn
cmFwaGljc0xheWVyKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmludmFsaWRhdGUoKQor
eworICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisKKyAgICBBU1NFUlQobV9pc1ZhbGlk
KTsKKyAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlz
cGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIGlmIChtX3Bh
Z2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KHJlY3QpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zm
c2V0KQoreworICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJl
Y3QpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNpemVEaWRD
aGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBtX3Jvb3RMYXll
ci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3
IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlz
IG5lZWRlZAorICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgorICAgIEZsb2F0
U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7CisgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgaWYg
KG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgeworICAgICAgICBmbG9hdCBoZWln
aHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNp
emUuaGVpZ2h0KCkpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndp
ZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOworICAgIH0KKworICAgIGlmIChuZXdT
aXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUu
aGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVp
Z2h0KCkpKTsKKworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92
ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCkKK3sK
KyAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
CisKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkK
K3sKKyAgICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3Bs
YXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3Zl
cmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChyZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKworYm9vbCBMYXllclRyZWVI
b3N0UXQ6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCit7CisgICAgYm9vbCBkaWRTeW5jID0g
bV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgaWYgKG1f
cGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIG1fcm9vdExheWVyLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICByZXR1cm4gZGlkU3luYzsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIo
Y29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U3lu
Y0NvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpbmZvKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpkaWREZWxldGVMYXllcihXZWJMYXllcklEIGlkKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94
eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihpZCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RR
dDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQoreworICAgIG1fd2ViUGFnZS0+bGF5b3V0
SWZOZWVkZWQoKTsKKworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyNp
ZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBpZiAobV9zdXNwZW5kZWQgfHwgbV93
YWl0aW5nRm9yVUlQcm9jZXNzKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKworICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gZmFsc2U7CisgICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Cisg
ICAgaWYgKCFtX3Nob3VsZFN5bmNGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
c2hvdWxkU3luY1Jvb3RMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9XZWJHcmFwaGlj
c0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOworICAgICAgICBtX3Nob3VsZFN5bmNS
b290TGF5ZXIgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUhvc3RQcm94eTo6RGlkUmVuZGVyRnJhbWUoKSk7CisKKyAgICBpZiAoIW1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBM
ZXQgdGhlIGRyYXdpbmcgYXJlYSBrbm93IHRoYXQgd2UndmUgZG9uZSBhIGZsdXNoIG9mIHRoZSBs
YXllciBjaGFuZ2VzLgorICAgIHN0YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+KG1fd2ViUGFn
ZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7CisgICAgbV9ub3Rp
ZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBmYWxzZTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0UXQ6OmxheWVyRmx1c2hUaW1lckZpcmVkKFRpbWVyPExheWVyVHJlZUhvc3RRdD4qKQorewor
ICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQoIW1fcGFnZU92ZXJs
YXlMYXllcik7CisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVh
dGUodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFt
ZSgiTGF5ZXJUcmVlSG9zdFF0IHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CisjZW5kaWYKKworICAg
IG1fcGFnZU92ZXJsYXlMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fcGFnZU92
ZXJsYXlMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXll
ci0+YWRkQ2hpbGQobV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UXQ6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdl
T3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQo
KTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOworfQorCisKK2ludDY0X3QgTGF5
ZXJUcmVlSG9zdFF0OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKK3sKKyAg
ICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisgICAgUVBp
eG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisKKyAg
ICBpZiAoIXBpeG1hcCkKKyAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOworCisgICAg
aW50NjRfdCBrZXkgPSBwaXhtYXAtPmNhY2hlS2V5KCk7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBp
bnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmlu
ZChrZXkpOworCisgICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3Vu
dHMuZW5kKCkpIHsKKyAgICAgICAgKysoaXQtPnNlY29uZCk7CisgICAgICAgIHJldHVybiBrZXk7
CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgaW1hZ2UtPmN1cnJlbnRGcmFt
ZUhhc0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwKTsKKyAgICB7
CisgICAgICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4
dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVy
bygpKTsKKyAgICB9CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAg
Yml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5
LCBoYW5kbGUpKTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmFkZChr
ZXksIDEpOworICAgIHJldHVybiBrZXk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZWxl
YXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCit7CisgICAgaWYgKCFrZXkpCisgICAg
ICAgIHJldHVybjsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CisgICAgaWYgKGl0ID09
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGl0LT5zZWNvbmQtLTsKKworICAgIGlmIChpdC0+c2Vjb25kKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShp
dCk7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRl
c3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXkpKTsKK30KKworCit2b2lkIExheWVyVHJl
ZUhvc3RRdDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgZG91YmxlIHRpbWUpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlT
eW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyKSB7CisgICAgICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhp
Y3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
Z3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdl
LT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93RGVidWdCb3JkZXJz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygp
LT5zaG93RGVidWdCb3JkZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93UmVw
YWludENvdW50ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCkt
PnNldHRpbmdzKCktPnNob3dSZXBhaW50Q291bnRlcigpOworfQorCitib29sIExheWVyVHJlZUhv
c3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCit2b2lkIExheWVyVHJlZUhv
c3RRdDo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHVw
ZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnVwZGF0ZVRpbGUoV2ViTGF5
ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQor
eworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRh
dGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvKSk7Cit9Cit2b2lkIExh
eWVyVHJlZUhvc3RRdDo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQp
Cit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlJl
bW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0UXQ6OnNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVyKGludCBsYXllcklELCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
V2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKGxheWVySUQpOworICAgIGlmICghbGF5ZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QocmVjdCk7CisgICAgbGF5
ZXItPnNldFZpc2libGVDb250ZW50UmVjdChyZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UXQ6OnNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IEludFJlY3QmIHJlY3QsIGZs
b2F0IHNjYWxlKQoreworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gdG9XZWJHcmFwaGlj
c0xheWVyKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1
cm47CisgICAgbGF5ZXItPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOworICAgIHRvV2ViR3JhcGhp
Y3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29u
dGVudFJlY3QocmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29u
dGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0
b3IpCit7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9y
eVZlY3Rvcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZW5kZXJOZXh0RnJhbWUoKQor
eworICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOworICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOworfQorCitib29sIExheWVyVHJlZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNB
bGxvd2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fc3VzcGVuZGVkICYmICFtX3dhaXRpbmdG
b3JVSVByb2Nlc3M7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbHNl
CiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nKCkKQEAgLTM1LDMgKzQ0MSw0IEBAIGJvb2wgTGF5ZXJUcmVlSG9z
dDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110060</attachid>
            <date>2011-10-06 16:52:55 -0700</date>
            <delta_ts>2011-10-10 12:46:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69151-20111006164733.patch</filename>
            <type>text/plain</type>
            <size>25170</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY4NzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhMGI0Yjc4OTQ0MzA0OTc0
NDdlYjYyNzg1MzA1MDUzYThlYmE5MzVhLi4zZTRjOTY4MWNiYWQ1OWUxMTA4OGQ4ZmIyYWI1YjYx
NTdiZTNiMzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMTAtMDYgIE5vJ2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1dL
Ml0gU3luY2hyb25pemUgdGlsaW5nIHdpdGggYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTUxCisKKyAgICAg
ICAgRW5hYmxlICJleHRlcm5hbGx5IG1hbmFnZWQiIHRpbGVzIGluIFRleHR1cmVNYXBwZXJOb2Rl
cy4KKyAgICAgICAgQ3VycmVudGx5LCBUZXh0dXJlTWFwcGVyTm9kZXMgbWFuYWdlIHRpbGVzIHRo
ZW1zZWx2ZXMsIHRoZSB0aWxlcyBiZWluZyB0aGVyZQorICAgICAgICBvbmx5IHRvIG92ZXJjb21l
IHRoZSAyayB0ZXh0dXJlIHNpemUgbGltaXRhdGlvbi4gRm9yIFdlYktpdDIsIHdlIHdhbnQgdGhv
c2UgdGlsZXMgdG8gYmUgbWFuYWdlZAorICAgICAgICBleHRlcm5hbGx5LCBuYW1lbHkgdGhyb3Vn
aCB0aGUgd2ViIHByb2Nlc3MgdmlhIHRoZSByZW1vdGUgdGlsZSBiYWNrZW5kIGZvciBUaWxlZEJh
Y2tpbmdTdG9yZS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBzdG9yZSBmb3IgdGhvc2Ug
ZXh0ZXJuYWxseSBtYW5hZ2VkIHRpbGVzLCBhbmQgYWRkcyB0aGUgbmVjZXNzYXJ5IGNvZGUgdG8g
cGFpbnQKKyAgICAgICAgdGhlbSBpbnN0ZWFkIG9mIHRoZSBvd25lZCB0aWxlcyB3aGVuIGFwcHJv
cHJpYXRlLgorCisgICAgICAgIEluIGFkZGl0aW9uLCBpbiBvcmRlciB0byBzdXBwb3J0IGV4dGVy
bmFsbHkgbWFuYWdlZCByZW1vdGUgdGlsZXMsIHdlIGhhdmUgdG8gY2FsY3VsYXRlIHBlci1sYXll
cgorICAgICAgICB2aXNpYmxlIHJlY3RzIGFuZCBwYXNzIHRoZW0gdG8gdGhlIHdlYiBwcm9jZXNz
LiBUaGUgbmV3IGNvbGxlY3RWaXNpYmxlQ29udGVudFJlY3RzIGRvZXMgdGhpcyAtCisgICAgICAg
IGFuZCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBleHRlcm5hbGx5LW1hbmFnZWQgdGlsZSBhcHBy
b2FjaC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIGNvZGUgaXMgc3RpbGwgZGlzYWJsZWQuIEV2ZW50dWFsbHkgZXhpc3Rpbmcg
Y29tcG9zaXRpbmcgdGVzdHMgcnVubmluZyBvbiBXSzIgd291bGQKKyAgICAgICAgdGVzdCB0aGlz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVGlsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpjb2xsZWN0VmlzaWJsZUNvbnRlbnRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6dGFyZ2V0UmVjdEZvclRpbGVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OmNyZWF0ZUNvbnRlbnRUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpyZW1vdmVDb250ZW50VGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNs
ZWFyRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudFRpbGVCYWNrQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzd2FwQ29udGVudEJ1ZmZlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldFRpbGVPd25lcnNoaXApOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnNldElEKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6
dGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6RXh0ZXJuYWxs
eU1hbmFnZWRUaWxlOjpFeHRlcm5hbGx5TWFuYWdlZFRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OlN0YXRlOjpTdGF0ZSk6CisKIDIwMTEtMTAtMDYgIERhbiBCZXJu
c3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vOTcxNzQ5
MD4gRmxhc2ggb2Ygd2hpdGUgd2hlbiBuYXZpZ2F0aW5nIGRhcmluZ2ZpcmViYWxsLm5ldApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5jcHAKaW5kZXggNTRiYTNiMzY2YzZmNDJiMTYyNTkyOWZmYTIzODYx
YWM2NDA0ODM1MS4uMzY3N2I0MGIzNDk1MzAyNWQzYTJjMzk5YTdmZjJmYmM3NDUxNjM1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCkBAIC0xNzMsMjkgKzE3MywzMSBAQCB2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpjb21wdXRlQWxsVHJhbnNmb3JtcygpCiAKIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OmNvbXB1dGVUaWxlcygpCiB7CisgICAgaWYgKG1fc3RhdGUudGlsZU93bmVyc2hpcCA9
PSBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fY3Vy
cmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlICYmICFtX3N0YXRlLmRy
YXdzQ29udGVudCkgewotICAgICAgICBtX3RpbGVzLmNsZWFyKCk7CisgICAgICAgIG1fb3duZWRU
aWxlcy5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFZlY3RvcjxGbG9hdFJl
Y3Q+IHRpbGVzVG9BZGQ7CiAgICAgVmVjdG9yPGludD4gdGlsZXNUb1JlbW92ZTsKICAgICBjb25z
dCBpbnQgVGlsZUVyYXNlVGhyZXNob2xkID0gNjsKICAgICBGbG9hdFNpemUgc2l6ZSA9IGNvbnRl
bnRTaXplKCk7Ci0gICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0KDAsIDAsIHNpemUud2lkdGgoKSAq
IG1fc3RhdGUuY29udGVudFNjYWxlLCBzaXplLmhlaWdodCgpICogbV9zdGF0ZS5jb250ZW50U2Nh
bGUpOworICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdCgwLCAwLCBzaXplLndpZHRoKCkgKiBtX3N0
YXRlLmNvbnRlbnRzU2NhbGUsIHNpemUuaGVpZ2h0KCkgKiBtX3N0YXRlLmNvbnRlbnRzU2NhbGUp
OwogCiAgICAgZm9yIChmbG9hdCB5ID0gMDsgeSA8IGNvbnRlbnRSZWN0LmhlaWdodCgpOyB5ICs9
IGdUaWxlRGltZW5zaW9uKSB7CiAgICAgICAgIGZvciAoZmxvYXQgeCA9IDA7IHggPCBjb250ZW50
UmVjdC53aWR0aCgpOyB4ICs9IGdUaWxlRGltZW5zaW9uKSB7CiAgICAgICAgICAgICBGbG9hdFJl
Y3QgdGlsZVJlY3QoeCwgeSwgZ1RpbGVEaW1lbnNpb24sIGdUaWxlRGltZW5zaW9uKTsKICAgICAg
ICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChjb250ZW50UmVjdCk7CiAgICAgICAgICAgICBGbG9h
dFJlY3QgdGlsZVJlY3RJblJvb3RDb29yZGluYXRlcyA9IHRpbGVSZWN0OwotICAgICAgICAgICAg
dGlsZVJlY3RJblJvb3RDb29yZGluYXRlcy5zY2FsZSgxLjAgLyBtX3N0YXRlLmNvbnRlbnRTY2Fs
ZSk7CisgICAgICAgICAgICB0aWxlUmVjdEluUm9vdENvb3JkaW5hdGVzLnNjYWxlKDEuMCAvIG1f
c3RhdGUuY29udGVudHNTY2FsZSk7CiAgICAgICAgICAgICB0aWxlUmVjdEluUm9vdENvb3JkaW5h
dGVzID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0
ZXMpOwogICAgICAgICAgICAgdGlsZXNUb0FkZC5hcHBlbmQodGlsZVJlY3QpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IG1fdGlsZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAt
LWkpIHsKLSAgICAgICAgY29uc3QgRmxvYXRSZWN0IG9sZFRpbGUgPSBtX3RpbGVzW2ldLnJlY3Q7
CisgICAgZm9yIChpbnQgaSA9IG1fb3duZWRUaWxlcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
eworICAgICAgICBjb25zdCBGbG9hdFJlY3Qgb2xkVGlsZSA9IG1fb3duZWRUaWxlc1tpXS5yZWN0
OwogICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAKICAgICAgICAgZm9yIChpbnQgaiA9IHRp
bGVzVG9BZGQuc2l6ZSgpIC0gMTsgaiA+PSAwOyAtLWopIHsKQEAgLTIxNCwyNyArMjE2LDczIEBA
IHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUaWxlcygpCiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRpbGVzVG9BZGQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKCF0aWxl
c1RvUmVtb3ZlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgVGlsZSYgdGlsZSA9IG1fdGlsZXNb
dGlsZXNUb1JlbW92ZVswXV07CisgICAgICAgICAgICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVk
VGlsZXNbdGlsZXNUb1JlbW92ZVswXV07CiAgICAgICAgICAgICB0aWxlc1RvUmVtb3ZlLnJlbW92
ZSgwKTsKICAgICAgICAgICAgIHRpbGUucmVjdCA9IHRpbGVzVG9BZGRbaV07CiAgICAgICAgICAg
ICB0aWxlLm5lZWRzUmVzZXQgPSB0cnVlOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KIAotICAgICAgICBUaWxlIHRpbGU7CisgICAgICAgIE93bmVkVGlsZSB0aWxlOwogICAgICAg
ICB0aWxlLnJlY3QgPSB0aWxlc1RvQWRkW2ldOwogICAgICAgICB0aWxlLm5lZWRzUmVzZXQgPSB0
cnVlOwotICAgICAgICBtX3RpbGVzLmFwcGVuZCh0aWxlKTsKKyAgICAgICAgbV9vd25lZFRpbGVz
LmFwcGVuZCh0aWxlKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVz
VG9SZW1vdmUuc2l6ZSgpICYmIG1fb3duZWRUaWxlcy5zaXplKCkgPiBUaWxlRXJhc2VUaHJlc2hv
bGQ7ICsraSkKKyAgICAgICAgbV9vd25lZFRpbGVzLnJlbW92ZSh0aWxlc1RvUmVtb3ZlW2ldKTsK
K30KKworc3RhdGljIHZvaWQgY2xhbXBSZWN0KEludFJlY3QmIHJlY3QsIGludCBkaW1lbnNpb24p
Cit7CisgICAgcmVjdC5zaGlmdFhFZGdlVG8ocmVjdC54KCkgLSByZWN0LngoKSAlIGRpbWVuc2lv
bik7CisgICAgcmVjdC5zaGlmdFlFZGdlVG8ocmVjdC55KCkgLSByZWN0LnkoKSAlIGRpbWVuc2lv
bik7CisgICAgcmVjdC5zaGlmdE1heFhFZGdlVG8ocmVjdC5tYXhYKCkgLSByZWN0LngoKSAlIGRp
bWVuc2lvbiArIGRpbWVuc2lvbik7CisgICAgcmVjdC5zaGlmdE1heFlFZGdlVG8ocmVjdC5tYXhZ
KCkgLSByZWN0LnkoKSAlIGRpbWVuc2lvbiArIGRpbWVuc2lvbik7Cit9CisKK2Jvb2wgVGV4dHVy
ZU1hcHBlck5vZGU6OmNvbGxlY3RWaXNpYmxlQ29udGVudFJlY3RzKE5vZGVSZWN0TWFwJiByZWN0
TWFwLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RWaXNpYmxlUmVjdCkKK3sKKyAgICBpZiAoIW1fc3Rh
dGUudmlzaWJsZSB8fCBtX3N0YXRlLm9wYWNpdHkgPCAwLjAxKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgYm9vbCBleGlzdHMgPSBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgZXhpc3RzID0gbV9jaGlsZHJlbltpXS0+
Y29sbGVjdFZpc2libGVDb250ZW50UmVjdHMocmVjdE1hcCwgcm9vdFZpc2libGVSZWN0KSB8fCBl
eGlzdHM7CisgICAgaWYgKG1fc3RhdGUubWFza0xheWVyKQorICAgICAgICBleGlzdHMgPSBtX3N0
YXRlLm1hc2tMYXllci0+Y29sbGVjdFZpc2libGVDb250ZW50UmVjdHMocmVjdE1hcCwgcm9vdFZp
c2libGVSZWN0KSB8fCBleGlzdHM7CisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQorICAg
ICAgICBleGlzdHMgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+Y29sbGVjdFZpc2libGVDb250ZW50
UmVjdHMocmVjdE1hcCwgcm9vdFZpc2libGVSZWN0KSB8fCBleGlzdHM7CisKKyAgICAvLyBOb24t
aW52ZXJ0aWJsZSBsYXllcnMgYXJlIG5vdCB2aXNpYmxlLgorICAgIGlmICghbV90cmFuc2Zvcm1z
LnRhcmdldC5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIGV4aXN0czsKKworICAgIHN0
YXRpYyBjb25zdCBpbnQgdGlsaW5nVGhyZXNob2xkID0gMjU2OworCisgICAgSW50UmVjdCB2aXNp
YmxlQ29udGVudHNSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwor
ICAgIGlmIChtX3NpemUud2lkdGgoKSA+IHRpbGluZ1RocmVzaG9sZCB8fCBtX3NpemUuaGVpZ2h0
KCkgPiB0aWxpbmdUaHJlc2hvbGQpIHsKKyAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdEluTG9j
YWxDb29yZGluYXRlcyA9IGVuY2xvc2luZ0ludFJlY3QoVHJhbnNmb3JtYXRpb25NYXRyaXgobV90
cmFuc2Zvcm1zLnRhcmdldCkuaW52ZXJzZSgpLm1hcFJlY3Qocm9vdFZpc2libGVSZWN0KSk7Cisg
ICAgICAgIGlmICghdmlzaWJsZVJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgY2xhbXBSZWN0KHZpc2libGVSZWN0SW5Mb2NhbENvb3JkaW5hdGVzLCBnVGlsZURp
bWVuc2lvbik7CisgICAgICAgIHZpc2libGVDb250ZW50c1JlY3QuaW50ZXJzZWN0KHZpc2libGVS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKTsKICAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHRpbGVzVG9SZW1vdmUuc2l6ZSgpICYmIG1fdGlsZXMuc2l6ZSgpID4gVGlsZUVyYXNlVGhy
ZXNob2xkOyArK2kpCi0gICAgICAgIG1fdGlsZXMucmVtb3ZlKHRpbGVzVG9SZW1vdmVbaV0pOwor
ICAgIGlmICh2aXNpYmxlQ29udGVudHNSZWN0LmlzRW1wdHkoKSB8fCB2aXNpYmxlQ29udGVudHNS
ZWN0ID09IG1fc3RhdGUudmlzaWJsZVJlY3QpCisgICAgICAgIHJldHVybiBleGlzdHM7CisKKyAg
ICBtX3N0YXRlLnZpc2libGVSZWN0ID0gdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICByZWN0TWFw
LmFkZCh0aGlzLCBtX3N0YXRlLnZpc2libGVSZWN0KTsKKworICAgIHJldHVybiB0cnVlOwogfQog
CiB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogeworICAgIGlmIChtX3N0YXRlLnRp
bGVPd25lcnNoaXAgPT0gRXh0ZXJuYWxseU1hbmFnZWRUaWxlcykKKyAgICAgICAgcmV0dXJuOwog
ICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICFsYXllciB8fCAoIW1fc3RhdGUuZHJhd3NDb250
ZW50ICYmIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKSkg
ewotICAgICAgICBtX3RpbGVzLmNsZWFyKCk7CisgICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNDYsMTAgKzI5NCwxMCBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJDb250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIsIEdyYXBoaWNzTGF5ZQogCiAgICAgLy8gRklYTUU6IEFkZCBkaXJlY3RseSBjb21wb3NpdGVk
IGltYWdlcy4KICAgICBGbG9hdFJlY3QgZGlydHlSZWN0ID0gbV9jdXJyZW50Q29udGVudC5uZWVk
c0Rpc3BsYXkgPyBlbnRpcmVSZWN0KCkgOiBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJl
Y3Q7Ci0gICAgZGlydHlSZWN0LnNjYWxlKG1fc3RhdGUuY29udGVudFNjYWxlKTsKKyAgICBkaXJ0
eVJlY3Quc2NhbGUobV9zdGF0ZS5jb250ZW50c1NjYWxlKTsKIAotICAgIGZvciAoc2l6ZV90IHRp
bGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IG1fdGlsZXMuc2l6ZSgpOyArK3RpbGVJbmRleCkgewot
ICAgICAgICBUaWxlJiB0aWxlID0gbV90aWxlc1t0aWxlSW5kZXhdOworICAgIGZvciAoc2l6ZV90
IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsrdGlsZUlu
ZGV4KSB7CisgICAgICAgIE93bmVkVGlsZSYgdGlsZSA9IG1fb3duZWRUaWxlc1t0aWxlSW5kZXhd
OwogICAgICAgICBGbG9hdFJlY3QgcmVjdCA9IGRpcnR5UmVjdDsKICAgICAgICAgaWYgKCF0aWxl
LnRleHR1cmUpCiAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVh
dGVUZXh0dXJlKCk7CkBAIC0yNzYsOSArMzI0LDkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWUK
ICAgICAgICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJl
TWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAgICAgICAgICAgY29udGV4
dC5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1hcHBlci0+dGV4dERyYXdpbmdNb2RlKCkpOwog
ICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0g
ICAgICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShtX3N0YXRlLmNvbnRlbnRTY2FsZSwg
bV9zdGF0ZS5jb250ZW50U2NhbGUpKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRT
aXplKG1fc3RhdGUuY29udGVudHNTY2FsZSwgbV9zdGF0ZS5jb250ZW50c1NjYWxlKSk7CiAgICAg
ICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkQ29udGVudFJlY3QoY29udGVudFJlY3QpOwotICAgICAg
ICAgICAgc2NhbGVkQ29udGVudFJlY3Quc2NhbGUoMS4wIC8gbV9zdGF0ZS5jb250ZW50U2NhbGUp
OworICAgICAgICAgICAgc2NhbGVkQ29udGVudFJlY3Quc2NhbGUoMS4wIC8gbV9zdGF0ZS5jb250
ZW50c1NjYWxlKTsKICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBl
ID09IERpcmVjdEltYWdlQ29udGVudFR5cGUpCiAgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3
SW1hZ2UobV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwg
SW50UG9pbnQoMCwgMCkpOwogICAgICAgICAgICAgZWxzZQpAQCAtMzA5LDEwICszNTcsMTAgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoKQogRmxvYXRSZWN0IFRleHR1cmVNYXBwZXJO
b2RlOjp0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0KSBjb25zdAogewogICAgIHJldHVybiBGbG9hdFJlY3Qo
Ci0gICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCkgKyAodGlsZVJlY3QueCgpIC0gdGFyZ2V0
UmVjdC54KCkpIC8gbV9zdGF0ZS5jb250ZW50U2NhbGUsCi0gICAgICAgICAgICAgICAgdGFyZ2V0
UmVjdC55KCkgKyAodGlsZVJlY3QueSgpIC0gdGFyZ2V0UmVjdC55KCkpIC8gbV9zdGF0ZS5jb250
ZW50U2NhbGUsCi0gICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSAvIG1fc3RhdGUuY29u
dGVudFNjYWxlLAotICAgICAgICAgICAgICAgIHRpbGVSZWN0LmhlaWdodCgpIC8gbV9zdGF0ZS5j
b250ZW50U2NhbGUpOworICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpICsgKHRpbGVSZWN0
LngoKSAtIHRhcmdldFJlY3QueCgpKSAvIG1fc3RhdGUuY29udGVudHNTY2FsZSwKKyAgICAgICAg
ICAgICAgICB0YXJnZXRSZWN0LnkoKSArICh0aWxlUmVjdC55KCkgLSB0YXJnZXRSZWN0LnkoKSkg
LyBtX3N0YXRlLmNvbnRlbnRzU2NhbGUsCisgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgo
KSAvIG1fc3RhdGUuY29udGVudHNTY2FsZSwKKyAgICAgICAgICAgICAgICB0aWxlUmVjdC5oZWln
aHQoKSAvIG1fc3RhdGUuY29udGVudHNTY2FsZSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnBhaW50U2VsZihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zKQpA
QCAtMzI4LDkgKzM3Niw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZihjb25z
dCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zKQogICAgIGlmIChtX3N0YXRlLnJl
cGxpY2FMYXllciAmJiBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXIpCiAg
ICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRl
Lm1hc2tMYXllci0+dGV4dHVyZSgpOwogCi0gICAgY29uc3QgZmxvYXQgb3BhY2l0eSA9IG9wdGlv
bnMuaXNTdXJmYWNlID8gMSA6IG9wdGlvbnMub3BhY2l0eTsKLQotICAgIGNvbnN0IEZsb2F0UmVj
dCB0YXJnZXRSZWN0ID0gdGhpcy0+dGFyZ2V0UmVjdCgpOworICAgIGZsb2F0IG9wYWNpdHkgPSBv
cHRpb25zLmlzU3VyZmFjZSA/IDEgOiBvcHRpb25zLm9wYWNpdHk7CisgICAgRmxvYXRSZWN0IHRh
cmdldFJlY3QgPSB0aGlzLT50YXJnZXRSZWN0KCk7CiAKICAgICBpZiAobV9jdXJyZW50Q29udGVu
dC5jb250ZW50VHlwZSA9PSBNZWRpYUNvbnRlbnRUeXBlICYmIG1fY3VycmVudENvbnRlbnQubWVk
aWEpIHsKICAgICAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyICYmICFvcHRpb25zLmlzU3Vy
ZmFjZSkKQEAgLTM0MiwxNiArMzg5LDUxIEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50
U2VsZihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIEJpdG1hcFRleHR1cmUqIHRleHR1cmUgPSBtX3RpbGVzW2ldLnRl
eHR1cmUuZ2V0KCk7CisgICAgVmVjdG9yPEV4dGVybmFsbHlNYW5hZ2VkVGlsZT4gdGlsZXNUb1Bh
aW50OworCisKKyAgICBpZiAobV9zdGF0ZS50aWxlT3duZXJzaGlwID09IEV4dGVybmFsbHlNYW5h
Z2VkVGlsZXMpIHsKKyAgICAgICAgLy8gU29ydCB0aWxlcywgd2l0aCBjdXJyZW50IHNjYWxlIGZh
Y3RvciBsYXN0LgorICAgICAgICBWZWN0b3I8RXh0ZXJuYWxseU1hbmFnZWRUaWxlKj4gdGlsZXM7
CisgICAgICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBl
bmQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaE1h
cDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5
TWFuYWdlZFRpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYg
KCFpdC0+c2Vjb25kLmZyb250QnVmZmVyLnRleHR1cmUpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5zY2FsZSA9PSBtX3N0YXRlLmNvbnRlbnRz
U2NhbGUpCisgICAgICAgICAgICAgICAgdGlsZXMuYXBwZW5kKCZpdC0+c2Vjb25kKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKG9wYWNpdHkgPiAwLjk1KQorICAgICAgICAgICAgICAgIHRpbGVzLnBy
ZXBlbmQoJml0LT5zZWNvbmQpOworICAgICAgICB9CisKKyAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggcmVwbGljYU1hdHJpeDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aWxlcy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlJiB0aWxlID0g
KnRpbGVzW2ldOworICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSB0aWxlLmZyb250QnVmZmVy
LnRhcmdldFJlY3Q7CisKKyAgICAgICAgICAgIGZsb2F0IHJlcGxpY2FPcGFjaXR5ID0gMS4wOwor
ICAgICAgICAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKSB7CisgICAgICAgICAgICAgICAg
cmVwbGljYU1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fdHJhbnNmb3Jtcy50YXJnZXQp
LnNjYWxlKDEuMCAvIHRpbGUuc2NhbGUpLm11bHRpcGx5KG1fc3RhdGUucmVwbGljYUxheWVyLT5t
X3RyYW5zZm9ybXMubG9jYWwpOworICAgICAgICAgICAgICAgIHJlcGxpY2FPcGFjaXR5ID0gb3Bh
Y2l0eSAqIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX29wYWNpdHk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlID0gKnRpbGUuZnJvbnRCdWZmZXIudGV4
dHVyZTsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAgICAgICAgICAg
ICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIHJlY3QsIHJl
cGxpY2FNYXRyaXgsIHJlcGxpY2FPcGFjaXR5LCByZXBsaWNhTWFza1RleHR1cmUgPyByZXBsaWNh
TWFza1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgICAgICAgICBvcHRp
b25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIHJlY3QsIG1fdHJhbnNmb3Jt
cy50YXJnZXQsIG9wYWNpdHksIG9wdGlvbnMuaXNTdXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlLmdl
dCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBCaXRt
YXBUZXh0dXJlKiB0ZXh0dXJlID0gbV9vd25lZFRpbGVzW2ldLnRleHR1cmUuZ2V0KCk7CiAgICAg
ICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhb3B0aW9ucy5pc1N1cmZhY2UpIHsKLSAg
ICAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnRleHR1cmUsIHRh
cmdldFJlY3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0LCBtX3RpbGVzW2ldLnJlY3QpLAorICAgICAg
ICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqdGV4dHVyZSwgdGFyZ2V0
UmVjdEZvclRpbGVSZWN0KHRhcmdldFJlY3QsIG1fb3duZWRUaWxlc1tpXS5yZWN0KSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zvcm1z
LnRhcmdldCkubXVsdGlwbHkobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2Nh
bCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgKiBtX3N0YXRlLnJlcGxp
Y2FMYXllci0+bV9vcGFjaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsaWNh
TWFza1RleHR1cmUgPyByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5nZXQo
KSk7CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBGbG9hdFJlY3QgcmVjdCA9IHRhcmdldFJl
Y3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0LCBtX3RpbGVzW2ldLnJlY3QpOworICAgICAgICBjb25z
dCBGbG9hdFJlY3QgcmVjdCA9IHRhcmdldFJlY3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0LCBtX293
bmVkVGlsZXNbaV0ucmVjdCk7CiAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1Rl
eHR1cmUoKnRleHR1cmUsIHJlY3QsIG1fdHJhbnNmb3Jtcy50YXJnZXQsIG9wYWNpdHksIG9wdGlv
bnMuaXNTdXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlLmdldCgpKTsKICAgICB9CiB9CkBAIC01MTIs
NiArNTk0LDgxIEBAIFRleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUoKQogICAg
ICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUobV9wYXJlbnQtPm1fY2hpbGRyZW4uZmlu
ZCh0aGlzKSk7CiB9CiAKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKK2ludCBUZXh0
dXJlTWFwcGVyTm9kZTo6Y3JlYXRlQ29udGVudFRpbGUoZmxvYXQgc2NhbGUpCit7CisgICAgc3Rh
dGljIGludCBuZXh0SUQgPSAwOworICAgIGludCBpZCA9ICsrbmV4dElEOworICAgIG1fZXh0ZXJu
YWxseU1hbmFnZWRUaWxlcy5hZGQoaWQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZShzY2FsZSkpOwor
ICAgIG1fc3RhdGUuY29udGVudHNTY2FsZSA9IHNjYWxlOworICAgIHJldHVybiBpZDsKK30KKwor
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVtb3ZlQ29udGVudFRpbGUoaW50IGlkKQoreworICAg
IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5yZW1vdmUoaWQpOworfQorCit2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpzZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZShpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCwgQml0bWFwVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBIYXNoTWFwPGludCwg
RXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVybmFsbHlNYW5hZ2Vk
VGlsZXMuZmluZChpZCk7CisKKyAgICBpZiAoaXQgPT0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVz
LmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGUmIHRp
bGUgPSBpdC0+c2Vjb25kOworCisgICAgdGlsZS5iYWNrQnVmZmVyLnNvdXJjZVJlY3QgPSBzb3Vy
Y2VSZWN0OworICAgIHRpbGUuYmFja0J1ZmZlci50YXJnZXRSZWN0ID0gdGFyZ2V0UmVjdDsKKyAg
ICB0aWxlLmJhY2tCdWZmZXIudGV4dHVyZSA9IHRleHR1cmU7CisgICAgdGlsZS5pc0JhY2tCdWZm
ZXJVcGRhdGVkID0gdHJ1ZTsKKyAgICB0aWxlLmlzRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UgPSB0
cnVlOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjbGVhckRpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlVGlsZXMoKQoreworICAgIGZvciAoSGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2Vk
VGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmJlZ2luKCk7IGl0
ICE9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAo
aXQtPnNlY29uZC5pc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlKQorICAgICAgICAgICAgbV9leHRl
cm5hbGx5TWFuYWdlZFRpbGVzLnJlbW92ZShpdCk7CisgICAgfQorfQorCit2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpzZXRDb250ZW50VGlsZUJhY2tCdWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCB2b2lkKiBiaXRzLCBCaXRt
YXBUZXh0dXJlOjpQaXhlbEZvcm1hdCBmb3JtYXQpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZU1h
cHBlcik7CisKKyAgICBIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0
b3IgaXQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZmluZChpZCk7CisgICAgaWYgKGl0ID09
IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
RXh0ZXJuYWxseU1hbmFnZWRUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsKKworICAgIHRpbGUuYmFj
a0J1ZmZlci5zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKKyAgICB0aWxlLmJhY2tCdWZmZXIudGFy
Z2V0UmVjdCA9IEZsb2F0UmVjdCh0YXJnZXRSZWN0KTsKKyAgICB0aWxlLmJhY2tCdWZmZXIudGFy
Z2V0UmVjdC5zY2FsZSgxLjAgLyB0aWxlLnNjYWxlKTsKKworICAgIGlmICghdGlsZS5iYWNrQnVm
ZmVyLnRleHR1cmUpCisgICAgICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlID0gbV90ZXh0dXJl
TWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnJl
c2V0KHNvdXJjZVJlY3Quc2l6ZSgpLCBmYWxzZSk7CisgICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1
cmUtPnVwZGF0ZUNvbnRlbnRzKGZvcm1hdCwgc291cmNlUmVjdCwgYml0cyk7CisgICAgdGlsZS5p
c0JhY2tCdWZmZXJVcGRhdGVkID0gdHJ1ZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
c3dhcENvbnRlbnRCdWZmZXJzKCkKK3sKKyAgICBIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1hbmFn
ZWRUaWxlPjo6aXRlcmF0b3IgZW5kSXRlcmF0b3IgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMu
ZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRl
cmF0b3IgaXQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kSXRl
cmF0b3I7ICsraXQpIHsKKyAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlJiB0aWxlID0gaXQt
PnNlY29uZDsKKyAgICAgICAgaWYgKCF0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgdGlsZS5pc0JhY2tCdWZmZXJVcGRhdGVkID0gZmFsc2U7
CisgICAgICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZlciBzd2FwQnVmZmVyID0gdGlsZS5m
cm9udEJ1ZmZlcjsKKyAgICAgICAgdGlsZS5mcm9udEJ1ZmZlciA9IHRpbGUuYmFja0J1ZmZlcjsK
KyAgICAgICAgdGlsZS5iYWNrQnVmZmVyID0gc3dhcEJ1ZmZlcjsKKyAgICB9Cit9CisjZW5kaWYK
Kwogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIGludCBvcHRpb25zKQogewogICAgIHN5
bmNDb21wb3NpdGluZ1N0YXRlKGdyYXBoaWNzTGF5ZXIsIHJvb3RMYXllcigpLT5tX3RleHR1cmVN
YXBwZXIsIG9wdGlvbnMpOwpAQCAtNTIxLDYgKzY3OCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciog
Z3JhCiB7CiAgICAgaW50IGNoYW5nZU1hc2sgPSBncmFwaGljc0xheWVyLT5jaGFuZ2VNYXNrKCk7
CiAgICAgY29uc3QgVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhJiBwZW5kaW5nQ29udGVu
dCA9IGdyYXBoaWNzTGF5ZXItPnBlbmRpbmdDb250ZW50KCk7CisgICAgc3dhcENvbnRlbnRCdWZm
ZXJzKCk7CiAgICAgaWYgKGNoYW5nZU1hc2sgPT0gTm9DaGFuZ2VzICYmIGdyYXBoaWNzTGF5ZXIt
Pm1fYW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVj
dC5pc0VtcHR5KCkgJiYgIXBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC01NjIsNyArNzIwLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0Nv
bXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICAg
ICAgICAgIHdhbnRlZFNpemUgPSBGbG9hdFNpemUoZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0
KCkud2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0KCkpOwogCiAg
ICAgICAgIGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkKLSAgICAgICAgICAgIG1fdGlsZXMuY2xl
YXIoKTsKKyAgICAgICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOwogCiAgICAgICAgIG1fc2l6
ZSA9IHdhbnRlZFNpemU7CiAgICAgfQpAQCAtNjExLDYgKzc2OSw3IEBAIHZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlciogZ3JhCiAgICAgICAgIG1fdHJhbnNmb3Jtcy5iYXNlID0gbV9zdGF0ZS50cmFuc2Zvcm07
CiB9CiAKKwogYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVu
bmluZ0FuaW1hdGlvbnMoKSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9h
bmltYXRpb25zLnNpemUoKTsgKytpKSB7CkBAIC04MTYsNyArOTc1LDcgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnMoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGxh
eWVyKQogCiB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlciwgaW50IG9wdGlvbnMpCiB7Ci0gICAgaWYgKGdyYXBoaWNzTGF5ZXIpIHsKKyAg
ICBpZiAoZ3JhcGhpY3NMYXllciAmJiAhKG9wdGlvbnMgJiBDb21wdXRhdGlvbnNPbmx5KSkgewog
ICAgICAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoZ3JhcGhpY3NMYXllciwgdGV4dHVyZU1h
cHBlcik7CiAgICAgICAgIGdyYXBoaWNzTGF5ZXItPmRpZFN5bmNocm9uaXplKCk7CiAgICAgfQpA
QCAtODQzLDcgKzEwMDIsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRp
bmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpYwogICAgICAgICByZW5k
ZXJDb250ZW50KHRleHR1cmVNYXBwZXIsIGdyYXBoaWNzTGF5ZXIpOwogCiAgICAgaWYgKCEob3B0
aW9ucyAmIFRyYXZlcnNlRGVzY2VuZGFudHMpKQotICAgICAgICByZXR1cm47CisgICAgICAgIG9w
dGlvbnMgPSBDb21wdXRhdGlvbnNPbmx5OwogCiAgICAgaWYgKGdyYXBoaWNzTGF5ZXIpIHsKICAg
ICAgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbiA9IGdyYXBoaWNzTGF5ZXItPmNo
aWxkcmVuKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCmluZGV4IGMyOTlkNmJjZjAwZTU2MTU3YzVk
ZGJlZjBiN2U5N2U1ODZkNGE0ZGEuLmEzYjhlMjBmYWQwMjhkOGE4MjQ0Yjk4MmJhMmZkZDZmNjhh
ZGM3Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1
ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50UG9pbnRIYXNoLmgiCiAjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0
aW9ucy5oIgpAQCAtMTAzLDkgKzEwNCwxNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIGVudW0g
U3luY09wdGlvbnMgewotICAgICAgICBUcmF2ZXJzZURlc2NlbmRhbnRzID0gMQorICAgICAgICBU
cmF2ZXJzZURlc2NlbmRhbnRzID0gMSwKKyAgICAgICAgQ29tcHV0YXRpb25zT25seSA9IDIKICAg
ICB9OwogCisgICAgZW51bSBUaWxlT3duZXJzaGlwIHsKKyAgICAgICAgT3duZWRUaWxlcywKKyAg
ICAgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlcworICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hN
YXA8VGV4dHVyZU1hcHBlck5vZGUqLCBGbG9hdFJlY3Q+IE5vZGVSZWN0TWFwOworCiAgICAgLy8g
VGhlIGNvbXBvc2l0b3IgbGV0cyB1cyBzcGVjaWFsLWNhc2UgaW1hZ2VzIGFuZCBjb2xvcnMsIHNv
IHdlIHRyeSB0byBkbyBzby4KICAgICBlbnVtIENvbnRlbnRUeXBlIHsgSFRNTENvbnRlbnRUeXBl
LCBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlLCBDb2xvckNvbnRlbnRUeXBlLCBNZWRpYUNvbnRlbnRU
eXBlLCBDYW52YXMzRENvbnRlbnRUeXBlfTsKICAgICBzdHJ1Y3QgQ29udGVudERhdGEgewpAQCAt
MTMyLDcgKzE0MSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUo
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqLCBpbnQgc3luY09wdGlvbnMgPSAwKTsKICAgICB2
b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwgVGV4
dHVyZU1hcHBlciosIGludCBzeW5jT3B0aW9ucyA9IDApOwotICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIEludFNpemUobV9zaXplLndpZHRoKCkgKyAuNSwgbV9zaXplLmhlaWdodCgp
ICsgLjUpOyB9CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3Np
emUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsgfQogICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IHZh
bHVlKSB7IG1fb3BhY2l0eSA9IHZhbHVlOyB9CiAgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRl
eHR1cmVNYXBwZXIqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KQEAgLTE0
MCwxOSArMTQ5LDMwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnQoKTsKIAotICAgIGJvb2wg
bmVlZHNUb0NvbXB1dGVCb3VuZGluZ1JlY3QoKSBjb25zdDsKKyNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkKKyAgICB2b2lkIHNldFRpbGVPd25lcnNoaXAoVGlsZU93bmVyc2hpcCBvKSB7
IG1fc3RhdGUudGlsZU93bmVyc2hpcCA9IG87IH0KKyAgICBpbnQgY3JlYXRlQ29udGVudFRpbGUo
ZmxvYXQgc2NhbGUpOworICAgIHZvaWQgcmVtb3ZlQ29udGVudFRpbGUoaW50IGlkKTsKKyAgICB2
b2lkIHNldENvbnRlbnRUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIHZvaWQqIGJpdHMsIEJpdG1hcFRleHR1
cmU6OlBpeGVsRm9ybWF0KTsKKyAgICB2b2lkIHNldFRpbGVCYWNrQnVmZmVyVGV4dHVyZUZvckRp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRtYXBUZXh0dXJlKik7CisgICAgdm9pZCBj
bGVhckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMoKTsKKyAgICBib29sIGNvbGxlY3RWaXNp
YmxlQ29udGVudFJlY3RzKE5vZGVSZWN0TWFwJiwgY29uc3QgRmxvYXRSZWN0Jik7CisjZW5kaWYK
KyAgICB2b2lkIHNldElEKGludCBpZCkgeyBtX2lkID0gaWQ7IH0KKyAgICBpbnQgaWQoKSBjb25z
dCB7IHJldHVybiBtX2lkOyB9CiAKICAgICBjb25zdCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ciogbWVkaWEoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRDb250ZW50Lm1lZGlhOyB9CiAKIHBy
aXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJvb3RMYXllcigpOwogICAgIHZvaWQgY29t
cHV0ZUFsbFRyYW5zZm9ybXMoKTsKKyAgICB2b2lkIGNvbXB1dGVWaXNpYmxlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJvb3RWaXNpYmxlUmVjdCk7CiAgICAgdm9pZCBjb21wdXRlUGVyc3BlY3RpdmVU
cmFuc2Zvcm1JZk5lZWRlZCgpOwogICAgIHZvaWQgY29tcHV0ZVJlcGxpY2FUcmFuc2Zvcm1JZk5l
ZWRlZCgpOwogICAgIHZvaWQgY29tcHV0ZU92ZXJsYXBzSWZOZWVkZWQoKTsKICAgICB2b2lkIGNv
bXB1dGVMb2NhbFRyYW5zZm9ybUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBjb21wdXRlQm91bmRpbmdS
ZWN0RnJvbVJvb3RJZk5lZWRlZCgpOwogICAgIHZvaWQgY29tcHV0ZVRpbGVzKCk7CisgICAgdm9p
ZCBzd2FwQ29udGVudEJ1ZmZlcnMoKTsKICAgICBpbnQgY291bnREZXNjZW5kYW50c1dpdGhDb250
ZW50KCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3RGb3JUaWxlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHRvdGFsVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCkgY29u
c3Q7CiAgICAgdm9pZCBpbnZhbGlkYXRlVmlld3BvcnQoY29uc3QgRmxvYXRSZWN0Jik7CkBAIC0x
NjIsNyArMTgyLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW50IGNvbXBhcmVHcmFwaGljc0xh
eWVyc1pWYWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKTsKICAgICBzdGF0aWMgdm9p
ZCBzb3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZp
cnN0LCBpbnQgbGFzdCk7CiAKLSAgICBCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4g
bV90aWxlcy5pc0VtcHR5KCkgPyAwIDogbV90aWxlc1swXS50ZXh0dXJlLmdldCgpOyB9CisgICAg
Qml0bWFwVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fb3duZWRUaWxlcy5pc0VtcHR5KCkg
PyAwIDogbV9vd25lZFRpbGVzWzBdLnRleHR1cmUuZ2V0KCk7IH0KIAogICAgIHZvaWQgcGFpbnRS
ZWN1cnNpdmUoVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyk7CiAgICAgYm9vbCBwYWludFJlZmxl
Y3Rpb24oY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYsIEJpdG1hcFRleHR1cmUqIHN1
cmZhY2UpOwpAQCAtMTg1LDEwICsyMDUsNyBAQCBwcml2YXRlOgogICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBsb2NhbDsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmFzZTsKICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGVyc3BlY3RpdmU7Ci0gICAgICAgIEZsb2F0UmVj
dCB0YXJnZXRCb3VuZGluZ1JlY3Q7CiAgICAgICAgIGZsb2F0IGNlbnRlclo7Ci0gICAgICAgIEZs
b2F0UmVjdCBib3VuZGluZ1JlY3RGcm9tUm9vdDsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5n
UmVjdEZyb21Sb290Rm9yRGVzY2VuZGFudHM7CiAgICAgICAgIFRyYW5zZm9ybURhdGEoKSB7IH0K
ICAgICB9OwogCkBAIC0yMDgsMTMgKzIyNSwzNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50
VHlwZSAmJiBtX2N1cnJlbnRDb250ZW50LmltYWdlID8gbV9jdXJyZW50Q29udGVudC5pbWFnZS0+
c2l6ZSgpIDogbV9zaXplOwogICAgIH0KLSAgICBzdHJ1Y3QgVGlsZSB7CisgICAgc3RydWN0IE93
bmVkVGlsZSB7CiAgICAgICAgIEZsb2F0UmVjdCByZWN0OwogICAgICAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gdGV4dHVyZTsKICAgICAgICAgYm9vbCBuZWVkc1Jlc2V0OwogICAgIH07CiAKLSAg
ICBWZWN0b3I8VGlsZT4gbV90aWxlczsKKyAgICBWZWN0b3I8T3duZWRUaWxlPiBtX293bmVkVGls
ZXM7CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBzdHJ1Y3QgRXh0ZXJu
YWxseU1hbmFnZWRUaWxlQnVmZmVyIHsKKyAgICAgICAgRmxvYXRSZWN0IHNvdXJjZVJlY3Q7Cisg
ICAgICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0OworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gdGV4dHVyZTsKKyAgICB9OworCisgICAgc3RydWN0IEV4dGVybmFsbHlNYW5hZ2VkVGlsZSB7
CisgICAgICAgIGJvb2wgaXNCYWNrQnVmZmVyVXBkYXRlZDsKKyAgICAgICAgYm9vbCBpc0RpcmVj
dGx5Q29tcG9zaXRlZEltYWdlOworICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGVCdWZmZXIg
ZnJvbnRCdWZmZXI7CisgICAgICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZlciBiYWNrQnVm
ZmVyOworICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGUoZmxvYXQgbmV3U2NhbGUgPSAxLjAp
CisgICAgICAgICAgICA6IGlzQmFja0J1ZmZlclVwZGF0ZWQoZmFsc2UpCisgICAgICAgICAgICAs
IGlzRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoZmFsc2UpCisgICAgICAgICAgICAsIHNjYWxlKG5l
d1NjYWxlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgc2NhbGU7CisgICAg
fTsKKworICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+IG1fZXh0ZXJuYWxs
eU1hbmFnZWRUaWxlczsKKyNlbmRpZgogCiAgICAgQ29udGVudERhdGEgbV9jdXJyZW50Q29udGVu
dDsKIApAQCAtMjI0LDYgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgRmxvYXRTaXplIG1fc2l6ZTsK
ICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBpbnQgbV9pZDsK
IAogICAgIHN0cnVjdCBTdGF0ZSB7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9zOwpAQCAtMjQ1LDEw
ICsyODcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBuZWVkc1Jlc2V0OiAxOwogICAgICAg
ICBib29sIG1pZ2h0SGF2ZU92ZXJsYXBzIDogMTsKICAgICAgICAgYm9vbCBuZWVkc1JlcGFpbnQ7
Ci0gICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdDsKLSAgICAgICAgRmxvYXRSZWN0IHJvb3RW
aXNpYmxlUmVjdDsKLSAgICAgICAgZmxvYXQgY29udGVudFNjYWxlOwotCisgICAgICAgIEludFJl
Y3QgdmlzaWJsZVJlY3Q7CisgICAgICAgIGZsb2F0IGNvbnRlbnRzU2NhbGU7CisjaWYgRU5BQkxF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgICAgIFRpbGVPd25lcnNoaXAgdGlsZU93bmVyc2hp
cDsKKyNlbmRpZgogICAgICAgICBTdGF0ZSgpCiAgICAgICAgICAgICA6IG9wYWNpdHkoMS5mKQog
ICAgICAgICAgICAgLCBtYXNrTGF5ZXIoMCkKQEAgLTI2MSw3ICszMDQsMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICwgdmlzaWJsZSh0cnVlKQogICAgICAgICAgICAgLCBuZWVkc1Jlc2V0KGZh
bHNlKQogICAgICAgICAgICAgLCBtaWdodEhhdmVPdmVybGFwcyhmYWxzZSkKLSAgICAgICAgICAg
ICwgY29udGVudFNjYWxlKDEuMGYpCisgICAgICAgICAgICAsIG5lZWRzUmVwYWludChmYWxzZSkK
KyAgICAgICAgICAgICwgY29udGVudHNTY2FsZSgxLjBmKQorI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQorICAgICAgICAgICAgLCB0aWxlT3duZXJzaGlwKE93bmVkVGlsZXMpCisjZW5k
aWYKICAgICAgICAgewogICAgICAgICB9CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110383</attachid>
            <date>2011-10-10 12:46:55 -0700</date>
            <delta_ts>2011-10-11 09:37:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69151-20111010124117.patch</filename>
            <type>text/plain</type>
            <size>24887</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY4NzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhMGI0Yjc4OTQ0MzA0OTc0
NDdlYjYyNzg1MzA1MDUzYThlYmE5MzVhLi5jNzViNWY0MDdiNGVjMDZkZWM3MDE5YmJkZmZhODg5
Mjc3ZmZlYjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMTAtMDYgIE5vJ2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1dL
Ml0gU3luY2hyb25pemUgdGlsaW5nIHdpdGggYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTUxCisKKyAgICAg
ICAgRW5hYmxlICJleHRlcm5hbGx5IG1hbmFnZWQiIHRpbGVzIGluIFRleHR1cmVNYXBwZXJOb2Rl
cy4KKyAgICAgICAgQ3VycmVudGx5LCBUZXh0dXJlTWFwcGVyTm9kZXMgbWFuYWdlIHRpbGVzIHRo
ZW1zZWx2ZXMsIHRoZSB0aWxlcyBiZWluZyB0aGVyZQorICAgICAgICBvbmx5IHRvIG92ZXJjb21l
IHRoZSAyayB0ZXh0dXJlIHNpemUgbGltaXRhdGlvbi4gRm9yIFdlYktpdDIsIHdlIHdhbnQgdGhv
c2UgdGlsZXMgdG8gYmUgbWFuYWdlZAorICAgICAgICBleHRlcm5hbGx5LCBuYW1lbHkgdGhyb3Vn
aCB0aGUgd2ViIHByb2Nlc3MgdmlhIHRoZSByZW1vdGUgdGlsZSBiYWNrZW5kIGZvciBUaWxlZEJh
Y2tpbmdTdG9yZS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBzdG9yZSBmb3IgdGhvc2Ug
ZXh0ZXJuYWxseSBtYW5hZ2VkIHRpbGVzLCBhbmQgYWRkcyB0aGUgbmVjZXNzYXJ5IGNvZGUgdG8g
cGFpbnQKKyAgICAgICAgdGhlbSBpbnN0ZWFkIG9mIHRoZSBvd25lZCB0aWxlcyB3aGVuIGFwcHJv
cHJpYXRlLgorCisgICAgICAgIEluIGFkZGl0aW9uLCBpbiBvcmRlciB0byBzdXBwb3J0IGV4dGVy
bmFsbHkgbWFuYWdlZCByZW1vdGUgdGlsZXMsIHdlIGhhdmUgdG8gY2FsY3VsYXRlIHBlci1sYXll
cgorICAgICAgICB2aXNpYmxlIHJlY3RzIGFuZCBwYXNzIHRoZW0gdG8gdGhlIHdlYiBwcm9jZXNz
LiBUaGUgbmV3IGNvbGxlY3RWaXNpYmxlQ29udGVudFJlY3RzIGRvZXMgdGhpcyAtCisgICAgICAg
IGFuZCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBleHRlcm5hbGx5LW1hbmFnZWQgdGlsZSBhcHBy
b2FjaC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIGNvZGUgaXMgc3RpbGwgZGlzYWJsZWQuIEV2ZW50dWFsbHkgZXhpc3Rpbmcg
Y29tcG9zaXRpbmcgdGVzdHMgcnVubmluZyBvbiBXSzIgd291bGQKKyAgICAgICAgdGVzdCB0aGlz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVGlsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpjb2xsZWN0VmlzaWJsZUNvbnRlbnRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6dGFyZ2V0UmVjdEZvclRpbGVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OmNyZWF0ZUNvbnRlbnRzVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6cmVtb3ZlQ29udGVudHNUaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6
Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzd2FwQ29udGVudHNCdWZmZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRUaWxlT3duZXJzaGlwKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRJRCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ck5vZGU6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OkV4
dGVybmFsbHlNYW5hZ2VkVGlsZTo6RXh0ZXJuYWxseU1hbmFnZWRUaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpTdGF0ZTo6U3RhdGUpOgorCiAyMDExLTEwLTA2ICBE
YW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
Lzk3MTc0OTA+IEZsYXNoIG9mIHdoaXRlIHdoZW4gbmF2aWdhdGluZyBkYXJpbmdmaXJlYmFsbC5u
ZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCmluZGV4IDU0YmEzYjM2NmM2ZjQyYjE2MjU5Mjlm
ZmEyMzg2MWFjNjQwNDgzNTEuLmQ1MmIwNGVkZDc5ZGY0NTc4NzMzODY3YTE1YzE4MjU4NWQ2Yzlm
N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcApAQCAtMTczLDI5ICsxNzMsMzEgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUFsbFRyYW5zZm9ybXMoKQogCiB2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpjb21wdXRlVGlsZXMoKQogeworICAgIGlmIChtX3N0YXRlLnRpbGVPd25l
cnNoaXAgPT0gRXh0ZXJuYWxseU1hbmFnZWRUaWxlcykKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
IChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSAmJiAhbV9z
dGF0ZS5kcmF3c0NvbnRlbnQpIHsKLSAgICAgICAgbV90aWxlcy5jbGVhcigpOworICAgICAgICBt
X293bmVkVGlsZXMuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBWZWN0b3I8
RmxvYXRSZWN0PiB0aWxlc1RvQWRkOwogICAgIFZlY3RvcjxpbnQ+IHRpbGVzVG9SZW1vdmU7CiAg
ICAgY29uc3QgaW50IFRpbGVFcmFzZVRocmVzaG9sZCA9IDY7CiAgICAgRmxvYXRTaXplIHNpemUg
PSBjb250ZW50U2l6ZSgpOwotICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdCgwLCAwLCBzaXplLndp
ZHRoKCkgKiBtX3N0YXRlLmNvbnRlbnRTY2FsZSwgc2l6ZS5oZWlnaHQoKSAqIG1fc3RhdGUuY29u
dGVudFNjYWxlKTsKKyAgICBGbG9hdFJlY3QgY29udGVudFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsKIAogICAgIGZvciAoZmxvYXQgeSA9IDA7IHkgPCBjb250ZW50UmVj
dC5oZWlnaHQoKTsgeSArPSBnVGlsZURpbWVuc2lvbikgewogICAgICAgICBmb3IgKGZsb2F0IHgg
PSAwOyB4IDwgY29udGVudFJlY3Qud2lkdGgoKTsgeCArPSBnVGlsZURpbWVuc2lvbikgewogICAg
ICAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0KHgsIHksIGdUaWxlRGltZW5zaW9uLCBnVGlsZURp
bWVuc2lvbik7CiAgICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3QoY29udGVudFJlY3QpOwog
ICAgICAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMgPSB0aWxlUmVj
dDsKLSAgICAgICAgICAgIHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMuc2NhbGUoMS4wIC8gbV9z
dGF0ZS5jb250ZW50U2NhbGUpOworICAgICAgICAgICAgdGlsZVJlY3RJblJvb3RDb29yZGluYXRl
cy5zY2FsZSgxLjApOwogICAgICAgICAgICAgdGlsZVJlY3RJblJvb3RDb29yZGluYXRlcyA9IG1f
dHJhbnNmb3Jtcy50YXJnZXQubWFwUmVjdCh0aWxlUmVjdEluUm9vdENvb3JkaW5hdGVzKTsKICAg
ICAgICAgICAgIHRpbGVzVG9BZGQuYXBwZW5kKHRpbGVSZWN0KTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIGZvciAoaW50IGkgPSBtX3RpbGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0g
ICAgICAgIGNvbnN0IEZsb2F0UmVjdCBvbGRUaWxlID0gbV90aWxlc1tpXS5yZWN0OworICAgIGZv
ciAoaW50IGkgPSBtX293bmVkVGlsZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAg
ICAgY29uc3QgRmxvYXRSZWN0IG9sZFRpbGUgPSBtX293bmVkVGlsZXNbaV0ucmVjdDsKICAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogCiAgICAgICAgIGZvciAoaW50IGogPSB0aWxlc1RvQWRk
LnNpemUoKSAtIDE7IGogPj0gMDsgLS1qKSB7CkBAIC0yMTQsMjcgKzIxNiw3MyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVGlsZXMoKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB0aWxlc1RvQWRkLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmICghdGlsZXNUb1JlbW92
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFRpbGUmIHRpbGUgPSBtX3RpbGVzW3RpbGVzVG9S
ZW1vdmVbMF1dOworICAgICAgICAgICAgT3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3Rp
bGVzVG9SZW1vdmVbMF1dOwogICAgICAgICAgICAgdGlsZXNUb1JlbW92ZS5yZW1vdmUoMCk7CiAg
ICAgICAgICAgICB0aWxlLnJlY3QgPSB0aWxlc1RvQWRkW2ldOwogICAgICAgICAgICAgdGlsZS5u
ZWVkc1Jlc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgVGlsZSB0aWxlOworICAgICAgICBPd25lZFRpbGUgdGlsZTsKICAgICAgICAgdGlsZS5y
ZWN0ID0gdGlsZXNUb0FkZFtpXTsKICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0gdHJ1ZTsKLSAg
ICAgICAgbV90aWxlcy5hcHBlbmQodGlsZSk7CisgICAgICAgIG1fb3duZWRUaWxlcy5hcHBlbmQo
dGlsZSk7CiAgICAgfQogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3Zl
LnNpemUoKSAmJiBtX3RpbGVzLnNpemUoKSA+IFRpbGVFcmFzZVRocmVzaG9sZDsgKytpKQotICAg
ICAgICBtX3RpbGVzLnJlbW92ZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRpbGVzVG9SZW1vdmUuc2l6ZSgpICYmIG1fb3duZWRUaWxlcy5zaXplKCkgPiBU
aWxlRXJhc2VUaHJlc2hvbGQ7ICsraSkKKyAgICAgICAgbV9vd25lZFRpbGVzLnJlbW92ZSh0aWxl
c1RvUmVtb3ZlW2ldKTsKK30KKworc3RhdGljIHZvaWQgY2xhbXBSZWN0KEludFJlY3QmIHJlY3Qs
IGludCBkaW1lbnNpb24pCit7CisgICAgcmVjdC5zaGlmdFhFZGdlVG8ocmVjdC54KCkgLSByZWN0
LngoKSAlIGRpbWVuc2lvbik7CisgICAgcmVjdC5zaGlmdFlFZGdlVG8ocmVjdC55KCkgLSByZWN0
LnkoKSAlIGRpbWVuc2lvbik7CisgICAgcmVjdC5zaGlmdE1heFhFZGdlVG8ocmVjdC5tYXhYKCkg
LSByZWN0LngoKSAlIGRpbWVuc2lvbiArIGRpbWVuc2lvbik7CisgICAgcmVjdC5zaGlmdE1heFlF
ZGdlVG8ocmVjdC5tYXhZKCkgLSByZWN0LnkoKSAlIGRpbWVuc2lvbiArIGRpbWVuc2lvbik7Cit9
CisKK2Jvb2wgVGV4dHVyZU1hcHBlck5vZGU6OmNvbGxlY3RWaXNpYmxlQ29udGVudHNSZWN0cyhO
b2RlUmVjdE1hcCYgcmVjdE1hcCwgY29uc3QgRmxvYXRSZWN0JiByb290VmlzaWJsZVJlY3QpCit7
CisgICAgaWYgKCFtX3N0YXRlLnZpc2libGUgfHwgbV9zdGF0ZS5vcGFjaXR5IDwgMC4wMSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgZXhpc3RzID0gZmFsc2U7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIGV4aXN0cyA9
IG1fY2hpbGRyZW5baV0tPmNvbGxlY3RWaXNpYmxlQ29udGVudHNSZWN0cyhyZWN0TWFwLCByb290
VmlzaWJsZVJlY3QpIHx8IGV4aXN0czsKKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAg
ICAgIGV4aXN0cyA9IG1fc3RhdGUubWFza0xheWVyLT5jb2xsZWN0VmlzaWJsZUNvbnRlbnRzUmVj
dHMocmVjdE1hcCwgcm9vdFZpc2libGVSZWN0KSB8fCBleGlzdHM7CisgICAgaWYgKG1fc3RhdGUu
cmVwbGljYUxheWVyKQorICAgICAgICBleGlzdHMgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+Y29s
bGVjdFZpc2libGVDb250ZW50c1JlY3RzKHJlY3RNYXAsIHJvb3RWaXNpYmxlUmVjdCkgfHwgZXhp
c3RzOworCisgICAgLy8gTm9uLWludmVydGlibGUgbGF5ZXJzIGFyZSBub3QgdmlzaWJsZS4KKyAg
ICBpZiAoIW1fdHJhbnNmb3Jtcy50YXJnZXQuaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVy
biBleGlzdHM7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IHRpbGluZ1RocmVzaG9sZCA9IDI1NjsK
KworICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpKTsKKyAgICBpZiAobV9zaXplLndpZHRoKCkgPiB0aWxpbmdUaHJlc2hv
bGQgfHwgbV9zaXplLmhlaWdodCgpID4gdGlsaW5nVGhyZXNob2xkKSB7CisgICAgICAgIEludFJl
Y3QgdmlzaWJsZVJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMgPSBlbmNsb3NpbmdJbnRSZWN0KFRyYW5z
Zm9ybWF0aW9uTWF0cml4KG1fdHJhbnNmb3Jtcy50YXJnZXQpLmludmVyc2UoKS5tYXBSZWN0KHJv
b3RWaXNpYmxlUmVjdCkpOworICAgICAgICBpZiAoIXZpc2libGVSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNsYW1wUmVjdCh2aXNpYmxlUmVjdEluTG9jYWxD
b29yZGluYXRlcywgZ1RpbGVEaW1lbnNpb24pOworICAgICAgICB2aXNpYmxlQ29udGVudHNSZWN0
LmludGVyc2VjdCh2aXNpYmxlUmVjdEluTG9jYWxDb29yZGluYXRlcyk7CisgICAgfQorCisgICAg
aWYgKHZpc2libGVDb250ZW50c1JlY3QuaXNFbXB0eSgpIHx8IHZpc2libGVDb250ZW50c1JlY3Qg
PT0gbV9zdGF0ZS52aXNpYmxlUmVjdCkKKyAgICAgICAgcmV0dXJuIGV4aXN0czsKKworICAgIG1f
c3RhdGUudmlzaWJsZVJlY3QgPSB2aXNpYmxlQ29udGVudHNSZWN0OworICAgIHJlY3RNYXAuYWRk
KHRoaXMsIG1fc3RhdGUudmlzaWJsZVJlY3QpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVy
ZU1hcHBlciwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CisgICAgaWYgKG1fc3RhdGUudGlsZU93
bmVyc2hpcCA9PSBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzKQorICAgICAgICByZXR1cm47CiAgICAg
aWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWxheWVyIHx8ICghbV9zdGF0ZS5kcmF3c0NvbnRlbnQg
JiYgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpKSB7Ci0g
ICAgICAgIG1fdGlsZXMuY2xlYXIoKTsKKyAgICAgICAgbV9vd25lZFRpbGVzLmNsZWFyKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI0NiwxMCArMjk0LDkgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBH
cmFwaGljc0xheWUKIAogICAgIC8vIEZJWE1FOiBBZGQgZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFn
ZXMuCiAgICAgRmxvYXRSZWN0IGRpcnR5UmVjdCA9IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNw
bGF5ID8gZW50aXJlUmVjdCgpIDogbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0Owot
ICAgIGRpcnR5UmVjdC5zY2FsZShtX3N0YXRlLmNvbnRlbnRTY2FsZSk7CiAKLSAgICBmb3IgKHNp
emVfdCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCBtX3RpbGVzLnNpemUoKTsgKyt0aWxlSW5k
ZXgpIHsKLSAgICAgICAgVGlsZSYgdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4XTsKKyAgICBmb3Ig
KHNpemVfdCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCBtX293bmVkVGlsZXMuc2l6ZSgpOyAr
K3RpbGVJbmRleCkgeworICAgICAgICBPd25lZFRpbGUmIHRpbGUgPSBtX293bmVkVGlsZXNbdGls
ZUluZGV4XTsKICAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgICAgIGlm
ICghdGlsZS50ZXh0dXJlKQogICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGV4dHVyZU1hcHBl
ci0+Y3JlYXRlVGV4dHVyZSgpOwpAQCAtMjc2LDkgKzMyMyw3IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhp
Y3NMYXllCiAgICAgICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
dGV4dHVyZU1hcHBlci0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICAgICAgICAg
IGNvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9k
ZSgpKTsKICAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKG9mZnNldC54KCksIG9mZnNldC55
KCkpOwotICAgICAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUobV9zdGF0ZS5jb250ZW50
U2NhbGUsIG1fc3RhdGUuY29udGVudFNjYWxlKSk7CiAgICAgICAgICAgICBGbG9hdFJlY3Qgc2Nh
bGVkQ29udGVudFJlY3QoY29udGVudFJlY3QpOwotICAgICAgICAgICAgc2NhbGVkQ29udGVudFJl
Y3Quc2NhbGUoMS4wIC8gbV9zdGF0ZS5jb250ZW50U2NhbGUpOwogICAgICAgICAgICAgaWYgKG1f
Y3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkKICAg
ICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShtX2N1cnJlbnRDb250ZW50LmltYWdlLmdl
dCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7CiAgICAgICAgICAgICBl
bHNlCkBAIC0zMDksMTAgKzM1NCwxMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludCgp
CiBGbG9hdFJlY3QgVGV4dHVyZU1hcHBlck5vZGU6OnRhcmdldFJlY3RGb3JUaWxlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEZsb2F0UmVjdCgKLSAgICAgICAgICAgICAgICB0YXJnZXRSZWN0Lngo
KSArICh0aWxlUmVjdC54KCkgLSB0YXJnZXRSZWN0LngoKSkgLyBtX3N0YXRlLmNvbnRlbnRTY2Fs
ZSwKLSAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LnkoKSArICh0aWxlUmVjdC55KCkgLSB0YXJn
ZXRSZWN0LnkoKSkgLyBtX3N0YXRlLmNvbnRlbnRTY2FsZSwKLSAgICAgICAgICAgICAgICB0aWxl
UmVjdC53aWR0aCgpIC8gbV9zdGF0ZS5jb250ZW50U2NhbGUsCi0gICAgICAgICAgICAgICAgdGls
ZVJlY3QuaGVpZ2h0KCkgLyBtX3N0YXRlLmNvbnRlbnRTY2FsZSk7CisgICAgICAgICAgICAgICAg
dGFyZ2V0UmVjdC54KCkgKyAodGlsZVJlY3QueCgpIC0gdGFyZ2V0UmVjdC54KCkpLAorICAgICAg
ICAgICAgICAgIHRhcmdldFJlY3QueSgpICsgKHRpbGVSZWN0LnkoKSAtIHRhcmdldFJlY3QueSgp
KSwKKyAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpLAorICAgICAgICAgICAgICAgIHRp
bGVSZWN0LmhlaWdodCgpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxm
KGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCkBAIC0zMjgsOSArMzcz
LDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBw
ZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyICYm
IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikKICAgICAgICAgcmVwbGlj
YU1hc2tUZXh0dXJlID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFza0xheWVyLT50
ZXh0dXJlKCk7CiAKLSAgICBjb25zdCBmbG9hdCBvcGFjaXR5ID0gb3B0aW9ucy5pc1N1cmZhY2Ug
PyAxIDogb3B0aW9ucy5vcGFjaXR5OwotCi0gICAgY29uc3QgRmxvYXRSZWN0IHRhcmdldFJlY3Qg
PSB0aGlzLT50YXJnZXRSZWN0KCk7CisgICAgZmxvYXQgb3BhY2l0eSA9IG9wdGlvbnMuaXNTdXJm
YWNlID8gMSA6IG9wdGlvbnMub3BhY2l0eTsKKyAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdCA9IHRo
aXMtPnRhcmdldFJlY3QoKTsKIAogICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBl
ID09IE1lZGlhQ29udGVudFR5cGUgJiYgbV9jdXJyZW50Q29udGVudC5tZWRpYSkgewogICAgICAg
ICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgIW9wdGlvbnMuaXNTdXJmYWNlKQpAQCAtMzQy
LDE2ICszODYsNTcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNvbnN0IFRl
eHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgQml0bWFwVGV4dHVyZSogdGV4dHVyZSA9IG1fdGlsZXNbaV0udGV4dHVyZS5nZXQoKTsK
KyAgICBWZWN0b3I8RXh0ZXJuYWxseU1hbmFnZWRUaWxlPiB0aWxlc1RvUGFpbnQ7CisKKworICAg
IGlmIChtX3N0YXRlLnRpbGVPd25lcnNoaXAgPT0gRXh0ZXJuYWxseU1hbmFnZWRUaWxlcykgewor
ICAgICAgICAvLyBTb3J0IHRpbGVzLCB3aXRoIGN1cnJlbnQgc2NhbGUgZmFjdG9yIGxhc3QuCisg
ICAgICAgIFZlY3RvcjxFeHRlcm5hbGx5TWFuYWdlZFRpbGUqPiB0aWxlczsKKyAgICAgICAgSGFz
aE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1fZXh0ZXJu
YWxseU1hbmFnZWRUaWxlcy5lbmQoKTsKKyAgICAgICAgZm9yIChIYXNoTWFwPGludCwgRXh0ZXJu
YWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQu
ZnJvbnRCdWZmZXIudGV4dHVyZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgaWYgKGl0LT5zZWNvbmQuc2NhbGUgPT0gbV9zdGF0ZS5jb250ZW50U2NhbGUpIHsKKyAg
ICAgICAgICAgICAgICB0aWxlcy5hcHBlbmQoJml0LT5zZWNvbmQpOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUaGlzIGNvZGUgY3Jl
YXRlcyBhIHRyYW5zaXRpb25hbCBlZmZlY3QsIHNob3dpbmcgdGlsZXMgcmVuZGVyZWQgaW4gdGhl
ICJvbGQiIGNvbnRlbnRzIHNjYWxlIGJlaGluZCB0aWxlcyByZW5kZXJlZCBpbiB0aGUgY3VycmVu
dCBjb250ZW50cyBzY2FsZS4KKyAgICAgICAgICAgIC8vIFRoaXMgZWZmZWN0IGxvb2tzIGdvb2Qg
b25seSB3aGVuIHRoZXJlJ3Mgbm8gdHJhbnNwYXJlbmN5LCBzbyB3ZSBvbmx5IHVzZSBpdCB3aGVu
IHRoZSBvcGFjaXR5IGZvciB0aGUgbGF5ZXIgaXMgYWJvdmUgYSBjZXJ0YWluIHRocmVzaG9sZC4K
KyAgICAgICAgICAgIGlmIChvcGFjaXR5ID4gMC45NSkKKyAgICAgICAgICAgICAgICB0aWxlcy5w
cmVwZW5kKCZpdC0+c2Vjb25kKTsKKyAgICAgICAgfQorCisgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHJlcGxpY2FNYXRyaXg7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGlsZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZSYgdGlsZSA9
ICp0aWxlc1tpXTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gdGlsZS5mcm9udEJ1ZmZl
ci50YXJnZXRSZWN0OworCisgICAgICAgICAgICBmbG9hdCByZXBsaWNhT3BhY2l0eSA9IDEuMDsK
KyAgICAgICAgICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikgeworICAgICAgICAgICAgICAg
IHJlcGxpY2FNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFyZ2V0
KS5zY2FsZSgxLjAgLyB0aWxlLnNjYWxlKS5tdWx0aXBseShtX3N0YXRlLnJlcGxpY2FMYXllci0+
bV90cmFuc2Zvcm1zLmxvY2FsKTsKKyAgICAgICAgICAgICAgICByZXBsaWNhT3BhY2l0eSA9IG9w
YWNpdHkgKiBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9vcGFjaXR5OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSA9ICp0aWxlLmZyb250QnVmZmVyLnRl
eHR1cmU7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgICAg
ICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCByZWN0LCBy
ZXBsaWNhTWF0cml4LCByZXBsaWNhT3BhY2l0eSwgcmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGlj
YU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOworICAgICAgICAgICAgb3B0
aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCByZWN0LCBtX3RyYW5zZm9y
bXMudGFyZ2V0LCBvcGFjaXR5LCBvcHRpb25zLmlzU3VyZmFjZSA/IDAgOiBtYXNrVGV4dHVyZS5n
ZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5vdyB3
ZSBwYWludCBvd25lZCB0aWxlcywgaWYgd2UncmUgaW4gT3duZWRUaWxlTW9kZS4KKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fb3duZWRUaWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBC
aXRtYXBUZXh0dXJlKiB0ZXh0dXJlID0gbV9vd25lZFRpbGVzW2ldLnRleHR1cmUuZ2V0KCk7CiAg
ICAgICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhb3B0aW9ucy5pc1N1cmZhY2UpIHsK
LSAgICAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnRleHR1cmUs
IHRhcmdldFJlY3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0LCBtX3RpbGVzW2ldLnJlY3QpLAorICAg
ICAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqdGV4dHVyZSwgdGFy
Z2V0UmVjdEZvclRpbGVSZWN0KHRhcmdldFJlY3QsIG1fb3duZWRUaWxlc1tpXS5yZWN0KSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgobV90cmFuc2Zv
cm1zLnRhcmdldCkubXVsdGlwbHkobV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5s
b2NhbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgKiBtX3N0YXRlLnJl
cGxpY2FMYXllci0+bV9vcGFjaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBs
aWNhTWFza1RleHR1cmUgPyByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5n
ZXQoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBGbG9hdFJlY3QgcmVjdCA9IHRhcmdl
dFJlY3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0LCBtX3RpbGVzW2ldLnJlY3QpOworICAgICAgICBj
b25zdCBGbG9hdFJlY3QgcmVjdCA9IHRhcmdldFJlY3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0LCBt
X293bmVkVGlsZXNbaV0ucmVjdCk7CiAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJh
d1RleHR1cmUoKnRleHR1cmUsIHJlY3QsIG1fdHJhbnNmb3Jtcy50YXJnZXQsIG9wYWNpdHksIG9w
dGlvbnMuaXNTdXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlLmdldCgpKTsKICAgICB9CiB9CkBAIC01
MTIsNiArNTk3LDgxIEBAIFRleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUoKQog
ICAgICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUobV9wYXJlbnQtPm1fY2hpbGRyZW4u
ZmluZCh0aGlzKSk7CiB9CiAKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKK2ludCBU
ZXh0dXJlTWFwcGVyTm9kZTo6Y3JlYXRlQ29udGVudHNUaWxlKGZsb2F0IHNjYWxlKQoreworICAg
IHN0YXRpYyBpbnQgbmV4dElEID0gMDsKKyAgICBpbnQgaWQgPSArK25leHRJRDsKKyAgICBtX2V4
dGVybmFsbHlNYW5hZ2VkVGlsZXMuYWRkKGlkLCBFeHRlcm5hbGx5TWFuYWdlZFRpbGUoc2NhbGUp
KTsKKyAgICBtX3N0YXRlLmNvbnRlbnRTY2FsZSA9IHNjYWxlOworICAgIHJldHVybiBpZDsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVtb3ZlQ29udGVudHNUaWxlKGludCBpZCkKK3sK
KyAgICBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMucmVtb3ZlKGlkKTsKK30KKwordm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6c2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2UoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldFJlY3QsIEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCit7CisgICAgSGFzaE1hcDxp
bnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5TWFu
YWdlZFRpbGVzLmZpbmQoaWQpOworCisgICAgaWYgKGl0ID09IG1fZXh0ZXJuYWxseU1hbmFnZWRU
aWxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxl
JiB0aWxlID0gaXQtPnNlY29uZDsKKworICAgIHRpbGUuYmFja0J1ZmZlci5zb3VyY2VSZWN0ID0g
c291cmNlUmVjdDsKKyAgICB0aWxlLmJhY2tCdWZmZXIudGFyZ2V0UmVjdCA9IHRhcmdldFJlY3Q7
CisgICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUgPSB0ZXh0dXJlOworICAgIHRpbGUuaXNCYWNr
QnVmZmVyVXBkYXRlZCA9IHRydWU7CisgICAgdGlsZS5pc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
ID0gdHJ1ZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y2xlYXJBbGxEaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZVRpbGVzKCkKK3sKKyAgICBmb3IgKEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5
TWFuYWdlZFRpbGU+OjppdGVyYXRvciBpdCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5iZWdp
bigpOyBpdCAhPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCk7ICsraXQpIHsKKyAgICAg
ICAgaWYgKGl0LT5zZWNvbmQuaXNEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSkKKyAgICAgICAgICAg
IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5yZW1vdmUoaXQpOworICAgIH0KK30KKwordm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIHZvaWQqIGJp
dHMsIEJpdG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBBU1NFUlQobV90
ZXh0dXJlTWFwcGVyKTsKKworICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+
OjppdGVyYXRvciBpdCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5maW5kKGlkKTsKKyAgICBp
ZiAoaXQgPT0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmVuZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGUmIHRpbGUgPSBpdC0+c2Vjb25kOworCisgICAg
dGlsZS5iYWNrQnVmZmVyLnNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgIHRpbGUuYmFja0J1
ZmZlci50YXJnZXRSZWN0ID0gRmxvYXRSZWN0KHRhcmdldFJlY3QpOworICAgIHRpbGUuYmFja0J1
ZmZlci50YXJnZXRSZWN0LnNjYWxlKDEuMCAvIHRpbGUuc2NhbGUpOworCisgICAgaWYgKCF0aWxl
LmJhY2tCdWZmZXIudGV4dHVyZSkKKyAgICAgICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUgPSBt
X3RleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICB0aWxlLmJhY2tCdWZmZXIudGV4
dHVyZS0+cmVzZXQoc291cmNlUmVjdC5zaXplKCksIGZhbHNlKTsKKyAgICB0aWxlLmJhY2tCdWZm
ZXIudGV4dHVyZS0+dXBkYXRlQ29udGVudHMoZm9ybWF0LCBzb3VyY2VSZWN0LCBiaXRzKTsKKyAg
ICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSB0cnVlOworfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzd2FwQ29udGVudHNCdWZmZXJzKCkKK3sKKyAgICBIYXNoTWFwPGludCwgRXh0ZXJu
YWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgZW5kID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVz
LmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0
ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGUmIHRpbGUgPSBpdC0+c2Vjb25k
OworICAgICAgICBpZiAoIXRpbGUuaXNCYWNrQnVmZmVyVXBkYXRlZCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSBmYWxzZTsKKyAgICAg
ICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlQnVmZmVyIHN3YXBCdWZmZXIgPSB0aWxlLmZyb250QnVm
ZmVyOworICAgICAgICB0aWxlLmZyb250QnVmZmVyID0gdGlsZS5iYWNrQnVmZmVyOworICAgICAg
ICB0aWxlLmJhY2tCdWZmZXIgPSBzd2FwQnVmZmVyOworICAgIH0KK30KKyNlbmRpZgorCiB2b2lk
IFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgaW50IG9wdGlvbnMpCiB7CiAgICAgc3luY0NvbXBv
c2l0aW5nU3RhdGUoZ3JhcGhpY3NMYXllciwgcm9vdExheWVyKCktPm1fdGV4dHVyZU1hcHBlciwg
b3B0aW9ucyk7CkBAIC01MjEsNiArNjgxLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKIHsK
ICAgICBpbnQgY2hhbmdlTWFzayA9IGdyYXBoaWNzTGF5ZXItPmNoYW5nZU1hc2soKTsKICAgICBj
b25zdCBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGEmIHBlbmRpbmdDb250ZW50ID0gZ3Jh
cGhpY3NMYXllci0+cGVuZGluZ0NvbnRlbnQoKTsKKyAgICBzd2FwQ29udGVudHNCdWZmZXJzKCk7
CiAgICAgaWYgKGNoYW5nZU1hc2sgPT0gTm9DaGFuZ2VzICYmIGdyYXBoaWNzTGF5ZXItPm1fYW5p
bWF0aW9ucy5pc0VtcHR5KCkgJiYgcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC5pc0Vt
cHR5KCkgJiYgIXBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC01NjIsNyArNzIzLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0
aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICAgICAgICAg
IHdhbnRlZFNpemUgPSBGbG9hdFNpemUoZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCkud2lk
dGgoKSwgZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCkuaGVpZ2h0KCkpOwogCiAgICAgICAg
IGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkKLSAgICAgICAgICAgIG1fdGlsZXMuY2xlYXIoKTsK
KyAgICAgICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOwogCiAgICAgICAgIG1fc2l6ZSA9IHdh
bnRlZFNpemU7CiAgICAgfQpAQCAtODE2LDcgKzk3Nyw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnN5bmNBbmltYXRpb25zKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBsYXllcikKIAog
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIsIGludCBvcHRpb25zKQogewotICAgIGlmIChncmFwaGljc0xheWVyKSB7CisgICAgaWYgKGdy
YXBoaWNzTGF5ZXIgJiYgIShvcHRpb25zICYgQ29tcHV0YXRpb25zT25seSkpIHsKICAgICAgICAg
c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKGdyYXBoaWNzTGF5ZXIsIHRleHR1cmVNYXBwZXIpOwog
ICAgICAgICBncmFwaGljc0xheWVyLT5kaWRTeW5jaHJvbml6ZSgpOwogICAgIH0KQEAgLTg0Myw3
ICsxMDA0LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUo
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWMKICAgICAgICAgcmVuZGVyQ29udGVu
dCh0ZXh0dXJlTWFwcGVyLCBncmFwaGljc0xheWVyKTsKIAogICAgIGlmICghKG9wdGlvbnMgJiBU
cmF2ZXJzZURlc2NlbmRhbnRzKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBvcHRpb25zID0g
Q29tcHV0YXRpb25zT25seTsKIAogICAgIGlmIChncmFwaGljc0xheWVyKSB7CiAgICAgICAgIFZl
Y3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW4gPSBncmFwaGljc0xheWVyLT5jaGlsZHJlbigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlck5vZGUuaAppbmRleCBjMjk5ZDZiY2YwMGU1NjE1N2M1ZGRiZWYwYjdl
OTdlNTg2ZDRhNGRhLi43Nzg2MGEzOTA3ZGRjZGMyOWU5ODdjMmU3YmQ1OGNiNzYzY2JhN2E0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlck5vZGUuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJJbWFn
ZS5oIgorI2luY2x1ZGUgIkludFBvaW50SGFzaC5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIu
aCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIK
QEAgLTEwMyw5ICsxMDQsMTcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBlbnVtIFN5bmNPcHRp
b25zIHsKLSAgICAgICAgVHJhdmVyc2VEZXNjZW5kYW50cyA9IDEKKyAgICAgICAgVHJhdmVyc2VE
ZXNjZW5kYW50cyA9IDEsCisgICAgICAgIENvbXB1dGF0aW9uc09ubHkgPSAyCiAgICAgfTsKIAor
ICAgIGVudW0gVGlsZU93bmVyc2hpcCB7CisgICAgICAgIE93bmVkVGlsZXMsCisgICAgICAgIEV4
dGVybmFsbHlNYW5hZ2VkVGlsZXMKKyAgICB9OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFRleHR1
cmVNYXBwZXJOb2RlKiwgRmxvYXRSZWN0PiBOb2RlUmVjdE1hcDsKKwogICAgIC8vIFRoZSBjb21w
b3NpdG9yIGxldHMgdXMgc3BlY2lhbC1jYXNlIGltYWdlcyBhbmQgY29sb3JzLCBzbyB3ZSB0cnkg
dG8gZG8gc28uCiAgICAgZW51bSBDb250ZW50VHlwZSB7IEhUTUxDb250ZW50VHlwZSwgRGlyZWN0
SW1hZ2VDb250ZW50VHlwZSwgQ29sb3JDb250ZW50VHlwZSwgTWVkaWFDb250ZW50VHlwZSwgQ2Fu
dmFzM0RDb250ZW50VHlwZX07CiAgICAgc3RydWN0IENvbnRlbnREYXRhIHsKQEAgLTEzMiw3ICsx
NDEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyKiwgaW50IHN5bmNPcHRpb25zID0gMCk7CiAgICAgdm9pZCBzeW5j
Q29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciosIFRleHR1cmVNYXBw
ZXIqLCBpbnQgc3luY09wdGlvbnMgPSAwKTsKLSAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJl
dHVybiBJbnRTaXplKG1fc2l6ZS53aWR0aCgpICsgLjUsIG1fc2l6ZS5oZWlnaHQoKSArIC41KTsg
fQorICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9zaXplLndpZHRo
KCksIG1fc2l6ZS5oZWlnaHQoKSk7IH0KICAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCB2YWx1ZSkgeyBt
X29wYWNpdHkgPSB2YWx1ZTsgfQogICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyKiB0ZXhtYXApIHsgbV90ZXh0dXJlTWFwcGVyID0gdGV4bWFwOyB9CkBAIC0xNDAsMTkgKzE0
OSwzMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhaW50KCk7CiAKLSAgICBib29sIG5lZWRzVG9D
b21wdXRlQm91bmRpbmdSZWN0KCkgY29uc3Q7CisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCisgICAgdm9pZCBzZXRUaWxlT3duZXJzaGlwKFRpbGVPd25lcnNoaXAgb3duZXJzaGlwKSB7
IG1fc3RhdGUudGlsZU93bmVyc2hpcCA9IG93bmVyc2hpcDsgfQorICAgIGludCBjcmVhdGVDb250
ZW50c1RpbGUoZmxvYXQgc2NhbGUpOworICAgIHZvaWQgcmVtb3ZlQ29udGVudHNUaWxlKGludCBp
ZCk7CisgICAgdm9pZCBzZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKGludCBpZCwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgdm9pZCogYml0cywg
Qml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQpOworICAgIHZvaWQgc2V0VGlsZUJhY2tCdWZmZXJU
ZXh0dXJlRm9yRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIEJpdG1hcFRleHR1cmUqKTsK
KyAgICB2b2lkIGNsZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpOworICAgIGJv
b2wgY29sbGVjdFZpc2libGVDb250ZW50c1JlY3RzKE5vZGVSZWN0TWFwJiwgY29uc3QgRmxvYXRS
ZWN0Jik7CisjZW5kaWYKKyAgICB2b2lkIHNldElEKGludCBpZCkgeyBtX2lkID0gaWQ7IH0KKyAg
ICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAKICAgICBjb25zdCBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciogbWVkaWEoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRDb250ZW50
Lm1lZGlhOyB9CiAKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJvb3RMYXllcigp
OwogICAgIHZvaWQgY29tcHV0ZUFsbFRyYW5zZm9ybXMoKTsKKyAgICB2b2lkIGNvbXB1dGVWaXNp
YmxlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJvb3RWaXNpYmxlUmVjdCk7CiAgICAgdm9pZCBjb21w
dXRlUGVyc3BlY3RpdmVUcmFuc2Zvcm1JZk5lZWRlZCgpOwogICAgIHZvaWQgY29tcHV0ZVJlcGxp
Y2FUcmFuc2Zvcm1JZk5lZWRlZCgpOwogICAgIHZvaWQgY29tcHV0ZU92ZXJsYXBzSWZOZWVkZWQo
KTsKICAgICB2b2lkIGNvbXB1dGVMb2NhbFRyYW5zZm9ybUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBj
b21wdXRlQm91bmRpbmdSZWN0RnJvbVJvb3RJZk5lZWRlZCgpOwogICAgIHZvaWQgY29tcHV0ZVRp
bGVzKCk7CisgICAgdm9pZCBzd2FwQ29udGVudHNCdWZmZXJzKCk7CiAgICAgaW50IGNvdW50RGVz
Y2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OwogICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0Rm9y
VGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB0b3RhbFRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QpIGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZVZpZXdwb3J0KGNvbnN0IEZs
b2F0UmVjdCYpOwpAQCAtMTYyLDcgKzE4Miw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBj
b21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYik7
CiAgICAgc3RhdGljIHZvaWQgc29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSog
PiYgYXJyYXksIGludCBmaXJzdCwgaW50IGxhc3QpOwogCi0gICAgQml0bWFwVGV4dHVyZSogdGV4
dHVyZSgpIHsgcmV0dXJuIG1fdGlsZXMuaXNFbXB0eSgpID8gMCA6IG1fdGlsZXNbMF0udGV4dHVy
ZS5nZXQoKTsgfQorICAgIEJpdG1hcFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX293bmVk
VGlsZXMuaXNFbXB0eSgpID8gMCA6IG1fb3duZWRUaWxlc1swXS50ZXh0dXJlLmdldCgpOyB9CiAK
ICAgICB2b2lkIHBhaW50UmVjdXJzaXZlKFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMpOwogICAg
IGJvb2wgcGFpbnRSZWZsZWN0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmLCBC
aXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsKQEAgLTE4NSwxMCArMjA1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWw7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGJhc2U7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBlcnNwZWN0aXZlOwot
ICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdSZWN0OwogICAgICAgICBmbG9hdCBjZW50
ZXJaOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0RnJvbVJvb3Q7Ci0gICAgICAgIEZs
b2F0UmVjdCBib3VuZGluZ1JlY3RGcm9tUm9vdEZvckRlc2NlbmRhbnRzOwogICAgICAgICBUcmFu
c2Zvcm1EYXRhKCkgeyB9CiAgICAgfTsKIApAQCAtMjA4LDEzICsyMjUsMzcgQEAgcHJpdmF0ZToK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERp
cmVjdEltYWdlQ29udGVudFR5cGUgJiYgbV9jdXJyZW50Q29udGVudC5pbWFnZSA/IG1fY3VycmVu
dENvbnRlbnQuaW1hZ2UtPnNpemUoKSA6IG1fc2l6ZTsKICAgICB9Ci0gICAgc3RydWN0IFRpbGUg
eworICAgIHN0cnVjdCBPd25lZFRpbGUgewogICAgICAgICBGbG9hdFJlY3QgcmVjdDsKICAgICAg
ICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmU7CiAgICAgICAgIGJvb2wgbmVlZHNSZXNl
dDsKICAgICB9OwogCi0gICAgVmVjdG9yPFRpbGU+IG1fdGlsZXM7CisgICAgVmVjdG9yPE93bmVk
VGlsZT4gbV9vd25lZFRpbGVzOworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisg
ICAgc3RydWN0IEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZlciB7CisgICAgICAgIEZsb2F0UmVj
dCBzb3VyY2VSZWN0OworICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdDsKKyAgICAgICAgUmVm
UHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmU7CisgICAgfTsKKworICAgIHN0cnVjdCBFeHRlcm5h
bGx5TWFuYWdlZFRpbGUgeworICAgICAgICBib29sIGlzQmFja0J1ZmZlclVwZGF0ZWQ7CisgICAg
ICAgIGJvb2wgaXNEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZTsKKyAgICAgICAgRXh0ZXJuYWxseU1h
bmFnZWRUaWxlQnVmZmVyIGZyb250QnVmZmVyOworICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRp
bGVCdWZmZXIgYmFja0J1ZmZlcjsKKyAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlKGZsb2F0
IHNjYWxlID0gMS4wKQorICAgICAgICAgICAgOiBpc0JhY2tCdWZmZXJVcGRhdGVkKGZhbHNlKQor
ICAgICAgICAgICAgLCBpc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGZhbHNlKQorICAgICAgICAg
ICAgLCBzY2FsZShzY2FsZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIGZsb2F0IHNj
YWxlOworICAgIH07CisKKyAgICBIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPiBt
X2V4dGVybmFsbHlNYW5hZ2VkVGlsZXM7CisjZW5kaWYKIAogICAgIENvbnRlbnREYXRhIG1fY3Vy
cmVudENvbnRlbnQ7CiAKQEAgLTIyNCw2ICsyNjUsNyBAQCBwcml2YXRlOgogICAgIEZsb2F0U2l6
ZSBtX3NpemU7CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIFN0cmluZyBtX25hbWU7CisgICAg
aW50IG1faWQ7CiAKICAgICBzdHJ1Y3QgU3RhdGUgewogICAgICAgICBGbG9hdFBvaW50IHBvczsK
QEAgLTI0NSwxMCArMjg3LDExIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbmVlZHNSZXNldDog
MTsKICAgICAgICAgYm9vbCBtaWdodEhhdmVPdmVybGFwcyA6IDE7CiAgICAgICAgIGJvb2wgbmVl
ZHNSZXBhaW50OwotICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3Q7Ci0gICAgICAgIEZsb2F0
UmVjdCByb290VmlzaWJsZVJlY3Q7CisgICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7CiAgICAg
ICAgIGZsb2F0IGNvbnRlbnRTY2FsZTsKLQorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JF
KQorICAgICAgICBUaWxlT3duZXJzaGlwIHRpbGVPd25lcnNoaXA7CisjZW5kaWYKICAgICAgICAg
U3RhdGUoKQogICAgICAgICAgICAgOiBvcGFjaXR5KDEuZikKICAgICAgICAgICAgICwgbWFza0xh
eWVyKDApCkBAIC0yNjEsNyArMzA0LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAsIHZpc2li
bGUodHJ1ZSkKICAgICAgICAgICAgICwgbmVlZHNSZXNldChmYWxzZSkKICAgICAgICAgICAgICwg
bWlnaHRIYXZlT3ZlcmxhcHMoZmFsc2UpCisgICAgICAgICAgICAsIG5lZWRzUmVwYWludChmYWxz
ZSkKICAgICAgICAgICAgICwgY29udGVudFNjYWxlKDEuMGYpCisjaWYgRU5BQkxFKFRJTEVEX0JB
Q0tJTkdfU1RPUkUpCisgICAgICAgICAgICAsIHRpbGVPd25lcnNoaXAoT3duZWRUaWxlcykKKyNl
bmRpZgogICAgICAgICB7CiAgICAgICAgIH0KICAgICB9Owo=
</data>
<flag name="review"
          id="107884"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110525</attachid>
            <date>2011-10-11 09:37:02 -0700</date>
            <delta_ts>2011-10-13 17:09:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>24500</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMGI0Yjc4Li43ZWZkMWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTEtMTAtMDYgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1dLMl0gU3luY2hyb25pemUgdGlsaW5nIHdpdGggYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY5MTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3Rp
YW5zZW4uCisKKyAgICAgICAgRW5hYmxlICJleHRlcm5hbGx5IG1hbmFnZWQiIHRpbGVzIGluIFRl
eHR1cmVNYXBwZXJOb2Rlcy4KKyAgICAgICAgQ3VycmVudGx5LCBUZXh0dXJlTWFwcGVyTm9kZXMg
bWFuYWdlIHRpbGVzIHRoZW1zZWx2ZXMsIHRoZSB0aWxlcyBiZWluZyB0aGVyZSBvbmx5IHRvCisg
ICAgICAgIG92ZXJjb21lIHRoZSAyayB0ZXh0dXJlIHNpemUgbGltaXRhdGlvbi4gRm9yIFdlYktp
dDIsIHdlIHdhbnQgdGhvc2UgdGlsZXMgdG8gYmUgbWFuYWdlZAorICAgICAgICBleHRlcm5hbGx5
LCBuYW1lbHkgdGhyb3VnaCB0aGUgd2ViIHByb2Nlc3MgdmlhIHRoZSByZW1vdGUgdGlsZSBiYWNr
ZW5kIGZvcgorICAgICAgICBUaWxlZEJhY2tpbmdTdG9yZS4KKworICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgYSBzdG9yZSBmb3IgdGhvc2UgZXh0ZXJuYWxseSBtYW5hZ2VkIHRpbGVzLCBhbmQgYWRk
cyB0aGUgbmVjZXNzYXJ5IGNvZGUgdG8KKyAgICAgICAgcGFpbnQgdGhlbSBpbnN0ZWFkIG9mIHRo
ZSBvd25lZCB0aWxlcyB3aGVuIGFwcHJvcHJpYXRlLgorCisgICAgICAgIEluIGFkZGl0aW9uLCBp
biBvcmRlciB0byBzdXBwb3J0IGV4dGVybmFsbHkgbWFuYWdlZCByZW1vdGUgdGlsZXMsIHdlIGhh
dmUgdG8gY2FsY3VsYXRlIHBlci0KKyAgICAgICAgbGF5ZXIgdmlzaWJsZSByZWN0cyBhbmQgcGFz
cyB0aGVtIHRvIHRoZSB3ZWIgcHJvY2Vzcy4gVGhlIG5ldyBjb2xsZWN0VmlzaWJsZUNvbnRlbnRS
ZWN0cworICAgICAgICBkb2VzIHRoaXMgLSBhbmQgaXMgZGlyZWN0bHkgdGllZCB0byB0aGUgZXh0
ZXJuYWxseS1tYW5hZ2VkIHRpbGUgYXBwcm9hY2guCisKKyAgICAgICAgQ29kZSBpcyBkaXNhYmxl
ZCBmb3Igbm93LCBidXQgY292ZXJlZCBieSBleGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRpbGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNsYW1wUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6Y29sbGVjdFZpc2libGVDb250ZW50UmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OnRhcmdldFJlY3RGb3JUaWxlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpjcmVhdGVDb250ZW50c1RpbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OnJlbW92ZUNvbnRlbnRzVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTm9kZTo6c2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNsZWFy
QWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3dhcENvbnRlbnRzQnVmZmVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmg6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0VGlsZU93bmVyc2hpcCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c2V0SUQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
Ojp0ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpFeHRlcm5h
bGx5TWFuYWdlZFRpbGU6OkV4dGVybmFsbHlNYW5hZ2VkVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6U3RhdGU6OlN0YXRlKToKKwogMjAxMS0xMC0wNiAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85NzE3
NDkwPiBGbGFzaCBvZiB3aGl0ZSB3aGVuIG5hdmlnYXRpbmcgZGFyaW5nZmlyZWJhbGwubmV0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmNwcAppbmRleCA1NGJhM2IzLi4zMmI3NmM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTm9kZS5jcHAKQEAgLTE3MywyOSArMTczLDMxIEBAIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OmNvbXB1dGVBbGxUcmFuc2Zvcm1zKCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
Y29tcHV0ZVRpbGVzKCkKIHsKKyAgICBpZiAobV9zdGF0ZS50aWxlT3duZXJzaGlwID09IEV4dGVy
bmFsbHlNYW5hZ2VkVGlsZXMpCisgICAgICAgIHJldHVybjsKICAgICBpZiAobV9jdXJyZW50Q29u
dGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgIW1fc3RhdGUuZHJhd3NDb250
ZW50KSB7Ci0gICAgICAgIG1fdGlsZXMuY2xlYXIoKTsKKyAgICAgICAgbV9vd25lZFRpbGVzLmNs
ZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGls
ZXNUb0FkZDsKICAgICBWZWN0b3I8aW50PiB0aWxlc1RvUmVtb3ZlOwogICAgIGNvbnN0IGludCBU
aWxlRXJhc2VUaHJlc2hvbGQgPSA2OwogICAgIEZsb2F0U2l6ZSBzaXplID0gY29udGVudFNpemUo
KTsKLSAgICBGbG9hdFJlY3QgY29udGVudFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpICogbV9zdGF0
ZS5jb250ZW50U2NhbGUsIHNpemUuaGVpZ2h0KCkgKiBtX3N0YXRlLmNvbnRlbnRTY2FsZSk7Cisg
ICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CiAKICAgICBmb3IgKGZsb2F0IHkgPSAwOyB5IDwgY29udGVudFJlY3QuaGVpZ2h0KCk7IHkg
Kz0gZ1RpbGVEaW1lbnNpb24pIHsKICAgICAgICAgZm9yIChmbG9hdCB4ID0gMDsgeCA8IGNvbnRl
bnRSZWN0LndpZHRoKCk7IHggKz0gZ1RpbGVEaW1lbnNpb24pIHsKICAgICAgICAgICAgIEZsb2F0
UmVjdCB0aWxlUmVjdCh4LCB5LCBnVGlsZURpbWVuc2lvbiwgZ1RpbGVEaW1lbnNpb24pOwogICAg
ICAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0KTsKICAgICAgICAgICAgIEZs
b2F0UmVjdCB0aWxlUmVjdEluUm9vdENvb3JkaW5hdGVzID0gdGlsZVJlY3Q7Ci0gICAgICAgICAg
ICB0aWxlUmVjdEluUm9vdENvb3JkaW5hdGVzLnNjYWxlKDEuMCAvIG1fc3RhdGUuY29udGVudFNj
YWxlKTsKKyAgICAgICAgICAgIHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMuc2NhbGUoMS4wKTsK
ICAgICAgICAgICAgIHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMgPSBtX3RyYW5zZm9ybXMudGFy
Z2V0Lm1hcFJlY3QodGlsZVJlY3RJblJvb3RDb29yZGluYXRlcyk7CiAgICAgICAgICAgICB0aWxl
c1RvQWRkLmFwcGVuZCh0aWxlUmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKGlu
dCBpID0gbV90aWxlcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBG
bG9hdFJlY3Qgb2xkVGlsZSA9IG1fdGlsZXNbaV0ucmVjdDsKKyAgICBmb3IgKGludCBpID0gbV9v
d25lZFRpbGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IEZsb2F0
UmVjdCBvbGRUaWxlID0gbV9vd25lZFRpbGVzW2ldLnJlY3Q7CiAgICAgICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKIAogICAgICAgICBmb3IgKGludCBqID0gdGlsZXNUb0FkZC5zaXplKCkgLSAxOyBq
ID49IDA7IC0taikgewpAQCAtMjE0LDI3ICsyMTYsNzMgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6Y29tcHV0ZVRpbGVzKCkKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb0Fk
ZC5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoIXRpbGVzVG9SZW1vdmUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICBUaWxlJiB0aWxlID0gbV90aWxlc1t0aWxlc1RvUmVtb3ZlWzBdXTsKKyAg
ICAgICAgICAgIE93bmVkVGlsZSYgdGlsZSA9IG1fb3duZWRUaWxlc1t0aWxlc1RvUmVtb3ZlWzBd
XTsKICAgICAgICAgICAgIHRpbGVzVG9SZW1vdmUucmVtb3ZlKDApOwogICAgICAgICAgICAgdGls
ZS5yZWN0ID0gdGlsZXNUb0FkZFtpXTsKICAgICAgICAgICAgIHRpbGUubmVlZHNSZXNldCA9IHRy
dWU7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFRpbGUgdGls
ZTsKKyAgICAgICAgT3duZWRUaWxlIHRpbGU7CiAgICAgICAgIHRpbGUucmVjdCA9IHRpbGVzVG9B
ZGRbaV07CiAgICAgICAgIHRpbGUubmVlZHNSZXNldCA9IHRydWU7Ci0gICAgICAgIG1fdGlsZXMu
YXBwZW5kKHRpbGUpOworICAgICAgICBtX293bmVkVGlsZXMuYXBwZW5kKHRpbGUpOwogICAgIH0K
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1JlbW92ZS5zaXplKCkgJiYgbV90
aWxlcy5zaXplKCkgPiBUaWxlRXJhc2VUaHJlc2hvbGQ7ICsraSkKLSAgICAgICAgbV90aWxlcy5y
ZW1vdmUodGlsZXNUb1JlbW92ZVtpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxl
c1RvUmVtb3ZlLnNpemUoKSAmJiBtX293bmVkVGlsZXMuc2l6ZSgpID4gVGlsZUVyYXNlVGhyZXNo
b2xkOyArK2kpCisgICAgICAgIG1fb3duZWRUaWxlcy5yZW1vdmUodGlsZXNUb1JlbW92ZVtpXSk7
Cit9CisKK3N0YXRpYyB2b2lkIGNsYW1wUmVjdChJbnRSZWN0JiByZWN0LCBpbnQgZGltZW5zaW9u
KQoreworICAgIHJlY3Quc2hpZnRYRWRnZVRvKHJlY3QueCgpIC0gcmVjdC54KCkgJSBkaW1lbnNp
b24pOworICAgIHJlY3Quc2hpZnRZRWRnZVRvKHJlY3QueSgpIC0gcmVjdC55KCkgJSBkaW1lbnNp
b24pOworICAgIHJlY3Quc2hpZnRNYXhYRWRnZVRvKHJlY3QubWF4WCgpIC0gcmVjdC54KCkgJSBk
aW1lbnNpb24gKyBkaW1lbnNpb24pOworICAgIHJlY3Quc2hpZnRNYXhZRWRnZVRvKHJlY3QubWF4
WSgpIC0gcmVjdC55KCkgJSBkaW1lbnNpb24gKyBkaW1lbnNpb24pOworfQorCitib29sIFRleHR1
cmVNYXBwZXJOb2RlOjpjb2xsZWN0VmlzaWJsZUNvbnRlbnRzUmVjdHMoTm9kZVJlY3RNYXAmIHJl
Y3RNYXAsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFZpc2libGVSZWN0KQoreworICAgIGlmICghbV9z
dGF0ZS52aXNpYmxlIHx8IG1fc3RhdGUub3BhY2l0eSA8IDAuMDEpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBib29sIGV4aXN0cyA9IGZhbHNlOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBleGlzdHMgPSBtX2NoaWxkcmVuW2ld
LT5jb2xsZWN0VmlzaWJsZUNvbnRlbnRzUmVjdHMocmVjdE1hcCwgcm9vdFZpc2libGVSZWN0KSB8
fCBleGlzdHM7CisgICAgaWYgKG1fc3RhdGUubWFza0xheWVyKQorICAgICAgICBleGlzdHMgPSBt
X3N0YXRlLm1hc2tMYXllci0+Y29sbGVjdFZpc2libGVDb250ZW50c1JlY3RzKHJlY3RNYXAsIHJv
b3RWaXNpYmxlUmVjdCkgfHwgZXhpc3RzOworICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikK
KyAgICAgICAgZXhpc3RzID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPmNvbGxlY3RWaXNpYmxlQ29u
dGVudHNSZWN0cyhyZWN0TWFwLCByb290VmlzaWJsZVJlY3QpIHx8IGV4aXN0czsKKworICAgIC8v
IE5vbi1pbnZlcnRpYmxlIGxheWVycyBhcmUgbm90IHZpc2libGUuCisgICAgaWYgKCFtX3RyYW5z
Zm9ybXMudGFyZ2V0LmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4gZXhpc3RzOworCisg
ICAgc3RhdGljIGNvbnN0IGludCB0aWxpbmdUaHJlc2hvbGQgPSAyNTY7CisKKyAgICBJbnRSZWN0
IHZpc2libGVDb250ZW50c1JlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSk7CisgICAgaWYgKG1fc2l6ZS53aWR0aCgpID4gdGlsaW5nVGhyZXNob2xkIHx8IG1fc2l6ZS5o
ZWlnaHQoKSA+IHRpbGluZ1RocmVzaG9sZCkgeworICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzID0gZW5jbG9zaW5nSW50UmVjdChUcmFuc2Zvcm1hdGlvbk1hdHJp
eChtX3RyYW5zZm9ybXMudGFyZ2V0KS5pbnZlcnNlKCkubWFwUmVjdChyb290VmlzaWJsZVJlY3Qp
KTsKKyAgICAgICAgaWYgKCF2aXNpYmxlUmVjdEluTG9jYWxDb29yZGluYXRlcy5pc0VtcHR5KCkp
CisgICAgICAgICAgICBjbGFtcFJlY3QodmlzaWJsZVJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMsIGdU
aWxlRGltZW5zaW9uKTsKKyAgICAgICAgdmlzaWJsZUNvbnRlbnRzUmVjdC5pbnRlcnNlY3Qodmlz
aWJsZVJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpOworICAgIH0KKworICAgIGlmICh2aXNpYmxlQ29u
dGVudHNSZWN0LmlzRW1wdHkoKSB8fCB2aXNpYmxlQ29udGVudHNSZWN0ID09IG1fc3RhdGUudmlz
aWJsZVJlY3QpCisgICAgICAgIHJldHVybiBleGlzdHM7CisKKyAgICBtX3N0YXRlLnZpc2libGVS
ZWN0ID0gdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICByZWN0TWFwLmFkZCh0aGlzLCBtX3N0YXRl
LnZpc2libGVSZWN0KTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpyZW5kZXJDb250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBo
aWNzTGF5ZXIqIGxheWVyKQogeworICAgIGlmIChtX3N0YXRlLnRpbGVPd25lcnNoaXAgPT0gRXh0
ZXJuYWxseU1hbmFnZWRUaWxlcykKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX3NpemUuaXNF
bXB0eSgpIHx8ICFsYXllciB8fCAoIW1fc3RhdGUuZHJhd3NDb250ZW50ICYmIG1fY3VycmVudENv
bnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKSkgewotICAgICAgICBtX3RpbGVz
LmNsZWFyKCk7CisgICAgICAgIG1fb3duZWRUaWxlcy5jbGVhcigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0yNDYsMTAgKzI5NCw5IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJl
bmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllCiAK
ICAgICAvLyBGSVhNRTogQWRkIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2VzLgogICAgIEZsb2F0
UmVjdCBkaXJ0eVJlY3QgPSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJl
Y3QoKSA6IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdDsKLSAgICBkaXJ0eVJlY3Qu
c2NhbGUobV9zdGF0ZS5jb250ZW50U2NhbGUpOwogCi0gICAgZm9yIChzaXplX3QgdGlsZUluZGV4
ID0gMDsgdGlsZUluZGV4IDwgbV90aWxlcy5zaXplKCk7ICsrdGlsZUluZGV4KSB7Ci0gICAgICAg
IFRpbGUmIHRpbGUgPSBtX3RpbGVzW3RpbGVJbmRleF07CisgICAgZm9yIChzaXplX3QgdGlsZUlu
ZGV4ID0gMDsgdGlsZUluZGV4IDwgbV9vd25lZFRpbGVzLnNpemUoKTsgKyt0aWxlSW5kZXgpIHsK
KyAgICAgICAgT3duZWRUaWxlJiB0aWxlID0gbV9vd25lZFRpbGVzW3RpbGVJbmRleF07CiAgICAg
ICAgIEZsb2F0UmVjdCByZWN0ID0gZGlydHlSZWN0OwogICAgICAgICBpZiAoIXRpbGUudGV4dHVy
ZSkKICAgICAgICAgICAgIHRpbGUudGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1
cmUoKTsKQEAgLTI3Niw5ICszMjMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJD
b250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5ZQogICAgICAg
ICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHRleHR1cmVNYXBwZXIt
PmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgICAgICAgICBjb250ZXh0LnNldFRl
eHREcmF3aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LnRyYW5zbGF0ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKLSAgICAgICAg
ICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKG1fc3RhdGUuY29udGVudFNjYWxlLCBtX3N0YXRl
LmNvbnRlbnRTY2FsZSkpOwogICAgICAgICAgICAgRmxvYXRSZWN0IHNjYWxlZENvbnRlbnRSZWN0
KGNvbnRlbnRSZWN0KTsKLSAgICAgICAgICAgIHNjYWxlZENvbnRlbnRSZWN0LnNjYWxlKDEuMCAv
IG1fc3RhdGUuY29udGVudFNjYWxlKTsKICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50
LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUpCiAgICAgICAgICAgICAgICAg
Y29udGV4dC5kcmF3SW1hZ2UobV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCkpOwogICAgICAgICAgICAgZWxzZQpAQCAtMzA5LDEw
ICszNTQsMTAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnQoKQogRmxvYXRSZWN0IFRl
eHR1cmVNYXBwZXJOb2RlOjp0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0KSBjb25zdAogewogICAgIHJldHVy
biBGbG9hdFJlY3QoCi0gICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCkgKyAodGlsZVJlY3Qu
eCgpIC0gdGFyZ2V0UmVjdC54KCkpIC8gbV9zdGF0ZS5jb250ZW50U2NhbGUsCi0gICAgICAgICAg
ICAgICAgdGFyZ2V0UmVjdC55KCkgKyAodGlsZVJlY3QueSgpIC0gdGFyZ2V0UmVjdC55KCkpIC8g
bV9zdGF0ZS5jb250ZW50U2NhbGUsCi0gICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSAv
IG1fc3RhdGUuY29udGVudFNjYWxlLAotICAgICAgICAgICAgICAgIHRpbGVSZWN0LmhlaWdodCgp
IC8gbV9zdGF0ZS5jb250ZW50U2NhbGUpOworICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgp
ICsgKHRpbGVSZWN0LngoKSAtIHRhcmdldFJlY3QueCgpKSwKKyAgICAgICAgICAgICAgICB0YXJn
ZXRSZWN0LnkoKSArICh0aWxlUmVjdC55KCkgLSB0YXJnZXRSZWN0LnkoKSksCisgICAgICAgICAg
ICAgICAgdGlsZVJlY3Qud2lkdGgoKSwKKyAgICAgICAgICAgICAgICB0aWxlUmVjdC5oZWlnaHQo
KSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZihjb25zdCBUZXh0dXJl
TWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zKQpAQCAtMzI4LDkgKzM3Myw4IEBAIHZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25z
JiBvcHRpb25zKQogICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiBtX3N0YXRlLnJlcGxp
Y2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXIpCiAgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA9
IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllci0+dGV4dHVyZSgpOwogCi0g
ICAgY29uc3QgZmxvYXQgb3BhY2l0eSA9IG9wdGlvbnMuaXNTdXJmYWNlID8gMSA6IG9wdGlvbnMu
b3BhY2l0eTsKLQotICAgIGNvbnN0IEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gdGhpcy0+dGFyZ2V0
UmVjdCgpOworICAgIGZsb2F0IG9wYWNpdHkgPSBvcHRpb25zLmlzU3VyZmFjZSA/IDEgOiBvcHRp
b25zLm9wYWNpdHk7CisgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QgPSB0aGlzLT50YXJnZXRSZWN0
KCk7CiAKICAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBNZWRpYUNvbnRl
bnRUeXBlICYmIG1fY3VycmVudENvbnRlbnQubWVkaWEpIHsKICAgICAgICAgaWYgKG1fc3RhdGUu
cmVwbGljYUxheWVyICYmICFvcHRpb25zLmlzU3VyZmFjZSkKQEAgLTM0MiwxNiArMzg2LDU2IEBA
IHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZihjb25zdCBUZXh0dXJlTWFwcGVyUGFp
bnRPcHRpb25zJiBvcHRpb25zKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEJpdG1hcFRl
eHR1cmUqIHRleHR1cmUgPSBtX3RpbGVzW2ldLnRleHR1cmUuZ2V0KCk7CisgICAgVmVjdG9yPEV4
dGVybmFsbHlNYW5hZ2VkVGlsZT4gdGlsZXNUb1BhaW50OworCisKKyAgICBpZiAobV9zdGF0ZS50
aWxlT3duZXJzaGlwID09IEV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpIHsKKyAgICAgICAgLy8gU29y
dCB0aWxlcywgd2l0aCBjdXJyZW50IHNjYWxlIGZhY3RvciBsYXN0LgorICAgICAgICBWZWN0b3I8
RXh0ZXJuYWxseU1hbmFnZWRUaWxlKj4gdGlsZXM7CisgICAgICAgIEhhc2hNYXA8aW50LCBFeHRl
cm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBlbmQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGls
ZXMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGls
ZT46Oml0ZXJhdG9yIGl0ID0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLmZyb250QnVmZmVyLnRl
eHR1cmUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChpdC0+
c2Vjb25kLnNjYWxlID09IG1fc3RhdGUuY29udGVudFNjYWxlKSB7CisgICAgICAgICAgICAgICAg
dGlsZXMuYXBwZW5kKCZpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgdHJhbnNpdGlvbmFs
IGVmZmVjdCBsb29rcyBnb29kIG9ubHkgd2hlbiB0aGVyZSdzIG5vIHRyYW5zcGFyZW5jeSwgc28g
d2Ugb25seSB1c2UgaXQgd2hlbiB0aGUgb3BhY2l0eSBmb3IgdGhlIGxheWVyIGlzIGFib3ZlIGEg
Y2VydGFpbiB0aHJlc2hvbGQuCisgICAgICAgICAgICBpZiAob3BhY2l0eSA+IDAuOTUpCisgICAg
ICAgICAgICAgICAgdGlsZXMucHJlcGVuZCgmaXQtPnNlY29uZCk7CisgICAgICAgIH0KKworICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhTWF0cml4OworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHRpbGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBFeHRlcm5hbGx5
TWFuYWdlZFRpbGUmIHRpbGUgPSAqdGlsZXNbaV07CisgICAgICAgICAgICBGbG9hdFJlY3QgcmVj
dCA9IHRpbGUuZnJvbnRCdWZmZXIudGFyZ2V0UmVjdDsKKworICAgICAgICAgICAgZmxvYXQgcmVw
bGljYU9wYWNpdHkgPSAxLjA7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIp
IHsKKyAgICAgICAgICAgICAgICByZXBsaWNhTWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgo
bV90cmFuc2Zvcm1zLnRhcmdldCkuc2NhbGUoMS4wIC8gdGlsZS5zY2FsZSkubXVsdGlwbHkobV9z
dGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2NhbCk7CisgICAgICAgICAgICAgICAg
cmVwbGljYU9wYWNpdHkgPSBvcGFjaXR5ICogbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fb3BhY2l0
eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEJpdG1hcFRleHR1cmUmIHRleHR1cmUgPSAq
dGlsZS5mcm9udEJ1ZmZlci50ZXh0dXJlOworICAgICAgICAgICAgaWYgKG1fc3RhdGUucmVwbGlj
YUxheWVyKQorICAgICAgICAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1
cmUodGV4dHVyZSwgcmVjdCwgcmVwbGljYU1hdHJpeCwgcmVwbGljYU9wYWNpdHksIHJlcGxpY2FN
YXNrVGV4dHVyZSA/IHJlcGxpY2FNYXNrVGV4dHVyZS5nZXQoKSA6IG1hc2tUZXh0dXJlLmdldCgp
KTsKKyAgICAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVy
ZSwgcmVjdCwgbV90cmFuc2Zvcm1zLnRhcmdldCwgb3BhY2l0eSwgb3B0aW9ucy5pc1N1cmZhY2Ug
PyAwIDogbWFza1RleHR1cmUuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBOb3cgd2UgcGFpbnQgb3duZWQgdGlsZXMsIGlmIHdlJ3JlIGluIE93bmVk
VGlsZU1vZGUuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX293bmVkVGlsZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgQml0bWFwVGV4dHVyZSogdGV4dHVyZSA9IG1fb3duZWRUaWxlc1tp
XS50ZXh0dXJlLmdldCgpOwogICAgICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgIW9w
dGlvbnMuaXNTdXJmYWNlKSB7Ci0gICAgICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRy
YXdUZXh0dXJlKCp0ZXh0dXJlLCB0YXJnZXRSZWN0Rm9yVGlsZVJlY3QodGFyZ2V0UmVjdCwgbV90
aWxlc1tpXS5yZWN0KSwKKyAgICAgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1Rl
eHR1cmUoKnRleHR1cmUsIHRhcmdldFJlY3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0LCBtX293bmVk
VGlsZXNbaV0ucmVjdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4KG1fdHJhbnNmb3Jtcy50YXJnZXQpLm11bHRpcGx5KG1fc3RhdGUucmVwbGljYUxh
eWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cGFjaXR5ICogbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fb3BhY2l0eSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGljYU1hc2tUZXh0dXJlLmdl
dCgpIDogbWFza1RleHR1cmUuZ2V0KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgRmxv
YXRSZWN0IHJlY3QgPSB0YXJnZXRSZWN0Rm9yVGlsZVJlY3QodGFyZ2V0UmVjdCwgbV90aWxlc1tp
XS5yZWN0KTsKKyAgICAgICAgY29uc3QgRmxvYXRSZWN0IHJlY3QgPSB0YXJnZXRSZWN0Rm9yVGls
ZVJlY3QodGFyZ2V0UmVjdCwgbV9vd25lZFRpbGVzW2ldLnJlY3QpOwogICAgICAgICBvcHRpb25z
LnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCp0ZXh0dXJlLCByZWN0LCBtX3RyYW5zZm9ybXMu
dGFyZ2V0LCBvcGFjaXR5LCBvcHRpb25zLmlzU3VyZmFjZSA/IDAgOiBtYXNrVGV4dHVyZS5nZXQo
KSk7CiAgICAgfQogfQpAQCAtNTEyLDYgKzU5Niw4MSBAQCBUZXh0dXJlTWFwcGVyTm9kZTo6flRl
eHR1cmVNYXBwZXJOb2RlKCkKICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKG1f
cGFyZW50LT5tX2NoaWxkcmVuLmZpbmQodGhpcykpOwogfQogCisjaWYgRU5BQkxFKFRJTEVEX0JB
Q0tJTkdfU1RPUkUpCitpbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNyZWF0ZUNvbnRlbnRzVGlsZShm
bG9hdCBzY2FsZSkKK3sKKyAgICBzdGF0aWMgaW50IG5leHRJRCA9IDA7CisgICAgaW50IGlkID0g
KytuZXh0SUQ7CisgICAgbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmFkZChpZCwgRXh0ZXJuYWxs
eU1hbmFnZWRUaWxlKHNjYWxlKSk7CisgICAgbV9zdGF0ZS5jb250ZW50U2NhbGUgPSBzY2FsZTsK
KyAgICByZXR1cm4gaWQ7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbW92ZUNvbnRl
bnRzVGlsZShpbnQgaWQpCit7CisgICAgbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLnJlbW92ZShp
ZCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldFRpbGVCYWNrQnVmZmVyVGV4dHVy
ZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRtYXBUZXh0dXJlKiB0ZXh0dXJl
KQoreworICAgIEhhc2hNYXA8aW50LCBFeHRlcm5hbGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBp
dCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5maW5kKGlkKTsKKworICAgIGlmIChpdCA9PSBt
X2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEV4
dGVybmFsbHlNYW5hZ2VkVGlsZSYgdGlsZSA9IGl0LT5zZWNvbmQ7CisKKyAgICB0aWxlLmJhY2tC
dWZmZXIuc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7CisgICAgdGlsZS5iYWNrQnVmZmVyLnRhcmdl
dFJlY3QgPSB0YXJnZXRSZWN0OworICAgIHRpbGUuYmFja0J1ZmZlci50ZXh0dXJlID0gdGV4dHVy
ZTsKKyAgICB0aWxlLmlzQmFja0J1ZmZlclVwZGF0ZWQgPSB0cnVlOworICAgIHRpbGUuaXNEaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZSA9IHRydWU7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OmNsZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpCit7CisgICAgZm9yIChIYXNo
TWFwPGludCwgRXh0ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVybmFs
bHlNYW5hZ2VkVGlsZXMuYmVnaW4oKTsgaXQgIT0gbV9leHRlcm5hbGx5TWFuYWdlZFRpbGVzLmVu
ZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kLmlzRGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2UpCisgICAgICAgICAgICBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXMucmVtb3ZlKGl0KTsK
KyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRzVGlsZUJhY2tC
dWZmZXIoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0LCB2b2lkKiBiaXRzLCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCBmb3JtYXQp
Cit7CisgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7CisKKyAgICBIYXNoTWFwPGludCwgRXh0
ZXJuYWxseU1hbmFnZWRUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX2V4dGVybmFsbHlNYW5hZ2VkVGls
ZXMuZmluZChpZCk7CisgICAgaWYgKGl0ID09IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5lbmQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxlJiB0aWxlID0g
aXQtPnNlY29uZDsKKworICAgIHRpbGUuYmFja0J1ZmZlci5zb3VyY2VSZWN0ID0gc291cmNlUmVj
dDsKKyAgICB0aWxlLmJhY2tCdWZmZXIudGFyZ2V0UmVjdCA9IEZsb2F0UmVjdCh0YXJnZXRSZWN0
KTsKKyAgICB0aWxlLmJhY2tCdWZmZXIudGFyZ2V0UmVjdC5zY2FsZSgxLjAgLyB0aWxlLnNjYWxl
KTsKKworICAgIGlmICghdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUpCisgICAgICAgIHRpbGUuYmFj
a0J1ZmZlci50ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAg
dGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnJlc2V0KHNvdXJjZVJlY3Quc2l6ZSgpLCBmYWxzZSk7
CisgICAgdGlsZS5iYWNrQnVmZmVyLnRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGZvcm1hdCwgc291
cmNlUmVjdCwgYml0cyk7CisgICAgdGlsZS5pc0JhY2tCdWZmZXJVcGRhdGVkID0gdHJ1ZTsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3dhcENvbnRlbnRzQnVmZmVycygpCit7CisgICAg
SGFzaE1hcDxpbnQsIEV4dGVybmFsbHlNYW5hZ2VkVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1fZXh0
ZXJuYWxseU1hbmFnZWRUaWxlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8aW50LCBFeHRlcm5h
bGx5TWFuYWdlZFRpbGU+OjppdGVyYXRvciBpdCA9IG1fZXh0ZXJuYWxseU1hbmFnZWRUaWxlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgRXh0ZXJuYWxseU1hbmFnZWRUaWxl
JiB0aWxlID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKCF0aWxlLmlzQmFja0J1ZmZlclVwZGF0
ZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdGlsZS5pc0JhY2tCdWZmZXJVcGRh
dGVkID0gZmFsc2U7CisgICAgICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZlciBzd2FwQnVm
ZmVyID0gdGlsZS5mcm9udEJ1ZmZlcjsKKyAgICAgICAgdGlsZS5mcm9udEJ1ZmZlciA9IHRpbGUu
YmFja0J1ZmZlcjsKKyAgICAgICAgdGlsZS5iYWNrQnVmZmVyID0gc3dhcEJ1ZmZlcjsKKyAgICB9
Cit9CisjZW5kaWYKKwogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3Rh
dGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIGludCBvcHRpb25z
KQogewogICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlKGdyYXBoaWNzTGF5ZXIsIHJvb3RMYXllcigp
LT5tX3RleHR1cmVNYXBwZXIsIG9wdGlvbnMpOwpAQCAtNTIxLDYgKzY4MCw3IEBAIHZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlciogZ3JhCiB7CiAgICAgaW50IGNoYW5nZU1hc2sgPSBncmFwaGljc0xheWVyLT5j
aGFuZ2VNYXNrKCk7CiAgICAgY29uc3QgVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhJiBw
ZW5kaW5nQ29udGVudCA9IGdyYXBoaWNzTGF5ZXItPnBlbmRpbmdDb250ZW50KCk7CisgICAgc3dh
cENvbnRlbnRzQnVmZmVycygpOwogICAgIGlmIChjaGFuZ2VNYXNrID09IE5vQ2hhbmdlcyAmJiBn
cmFwaGljc0xheWVyLT5tX2FuaW1hdGlvbnMuaXNFbXB0eSgpICYmIHBlbmRpbmdDb250ZW50Lm5l
ZWRzRGlzcGxheVJlY3QuaXNFbXB0eSgpICYmICFwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXkp
CiAgICAgICAgIHJldHVybjsKIApAQCAtNTYyLDcgKzcyMiw3IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ciogZ3JhCiAgICAgICAgICAgICB3YW50ZWRTaXplID0gRmxvYXRTaXplKGdyYXBoaWNzTGF5ZXIt
PmNvbnRlbnRzUmVjdCgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpLmhl
aWdodCgpKTsKIAogICAgICAgICBpZiAod2FudGVkU2l6ZSAhPSBtX3NpemUpCi0gICAgICAgICAg
ICBtX3RpbGVzLmNsZWFyKCk7CisgICAgICAgICAgICBtX293bmVkVGlsZXMuY2xlYXIoKTsKIAog
ICAgICAgICBtX3NpemUgPSB3YW50ZWRTaXplOwogICAgIH0KQEAgLTgxNiw3ICs5NzYsNyBAQCB2
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0aW9ucyhHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlciogbGF5ZXIpCiAKIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGlu
Z1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBUZXh0dXJl
TWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBpbnQgb3B0aW9ucykKIHsKLSAgICBpZiAoZ3JhcGhpY3NM
YXllcikgeworICAgIGlmIChncmFwaGljc0xheWVyICYmICEob3B0aW9ucyAmIENvbXB1dGF0aW9u
c09ubHkpKSB7CiAgICAgICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihncmFwaGljc0xheWVy
LCB0ZXh0dXJlTWFwcGVyKTsKICAgICAgICAgZ3JhcGhpY3NMYXllci0+ZGlkU3luY2hyb25pemUo
KTsKICAgICB9CkBAIC04NDMsNyArMTAwMyw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5
bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljCiAg
ICAgICAgIHJlbmRlckNvbnRlbnQodGV4dHVyZU1hcHBlciwgZ3JhcGhpY3NMYXllcik7CiAKICAg
ICBpZiAoIShvcHRpb25zICYgVHJhdmVyc2VEZXNjZW5kYW50cykpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgb3B0aW9ucyA9IENvbXB1dGF0aW9uc09ubHk7CiAKICAgICBpZiAoZ3JhcGhpY3NM
YXllcikgewogICAgICAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuID0gZ3JhcGhp
Y3NMYXllci0+Y2hpbGRyZW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKaW5kZXggYzI5OWQ2Yi4u
NmQyYWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5j
bHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRQb2ludEhhc2guaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1PcGVy
YXRpb25zLmgiCkBAIC0xMDMsOSArMTA0LDE3IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgZW51
bSBTeW5jT3B0aW9ucyB7Ci0gICAgICAgIFRyYXZlcnNlRGVzY2VuZGFudHMgPSAxCisgICAgICAg
IFRyYXZlcnNlRGVzY2VuZGFudHMgPSAxLAorICAgICAgICBDb21wdXRhdGlvbnNPbmx5ID0gMgog
ICAgIH07CiAKKyAgICBlbnVtIFRpbGVPd25lcnNoaXAgeworICAgICAgICBPd25lZFRpbGVzLAor
ICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGVzCisgICAgfTsKKworICAgIHR5cGVkZWYgSGFz
aE1hcDxUZXh0dXJlTWFwcGVyTm9kZSosIEZsb2F0UmVjdD4gTm9kZVJlY3RNYXA7CisKICAgICAv
LyBUaGUgY29tcG9zaXRvciBsZXRzIHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywg
c28gd2UgdHJ5IHRvIGRvIHNvLgogICAgIGVudW0gQ29udGVudFR5cGUgeyBIVE1MQ29udGVudFR5
cGUsIERpcmVjdEltYWdlQ29udGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVu
dFR5cGUsIENhbnZhczNEQ29udGVudFR5cGV9OwogICAgIHN0cnVjdCBDb250ZW50RGF0YSB7CkBA
IC0xMzIsNyArMTQxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0
ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciosIGludCBzeW5jT3B0aW9ucyA9IDApOwogICAg
IHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqLCBU
ZXh0dXJlTWFwcGVyKiwgaW50IHN5bmNPcHRpb25zID0gMCk7Ci0gICAgSW50U2l6ZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3NpemUud2lkdGgoKSArIC41LCBtX3NpemUuaGVpZ2h0
KCkgKyAuNSk7IH0KKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1f
c2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOyB9CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQg
dmFsdWUpIHsgbV9vcGFjaXR5ID0gdmFsdWU7IH0KICAgICB2b2lkIHNldFRleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlciogdGV4bWFwKSB7IG1fdGV4dHVyZU1hcHBlciA9IHRleG1hcDsgfQpAQCAt
MTQwLDE5ICsxNDksMzAgQEAgcHVibGljOgogCiAgICAgdm9pZCBwYWludCgpOwogCi0gICAgYm9v
bCBuZWVkc1RvQ29tcHV0ZUJvdW5kaW5nUmVjdCgpIGNvbnN0OworI2lmIEVOQUJMRShUSUxFRF9C
QUNLSU5HX1NUT1JFKQorICAgIHZvaWQgc2V0VGlsZU93bmVyc2hpcChUaWxlT3duZXJzaGlwIG93
bmVyc2hpcCkgeyBtX3N0YXRlLnRpbGVPd25lcnNoaXAgPSBvd25lcnNoaXA7IH0KKyAgICBpbnQg
Y3JlYXRlQ29udGVudHNUaWxlKGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRlbnRz
VGlsZShpbnQgaWQpOworICAgIHZvaWQgc2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihpbnQgaWQs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIHZv
aWQqIGJpdHMsIEJpdG1hcFRleHR1cmU6OlBpeGVsRm9ybWF0KTsKKyAgICB2b2lkIHNldFRpbGVC
YWNrQnVmZmVyVGV4dHVyZUZvckRpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludCBpZCwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBCaXRtYXBU
ZXh0dXJlKik7CisgICAgdm9pZCBjbGVhckFsbERpcmVjdGx5Q29tcG9zaXRlZEltYWdlVGlsZXMo
KTsKKyAgICBib29sIGNvbGxlY3RWaXNpYmxlQ29udGVudHNSZWN0cyhOb2RlUmVjdE1hcCYsIGNv
bnN0IEZsb2F0UmVjdCYpOworI2VuZGlmCisgICAgdm9pZCBzZXRJRChpbnQgaWQpIHsgbV9pZCA9
IGlkOyB9CisgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQogCiAgICAgY29uc3Qg
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIG1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50Q29udGVudC5tZWRpYTsgfQogCiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBy
b290TGF5ZXIoKTsKICAgICB2b2lkIGNvbXB1dGVBbGxUcmFuc2Zvcm1zKCk7CisgICAgdm9pZCBj
b21wdXRlVmlzaWJsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByb290VmlzaWJsZVJlY3QpOwogICAg
IHZvaWQgY29tcHV0ZVBlcnNwZWN0aXZlVHJhbnNmb3JtSWZOZWVkZWQoKTsKICAgICB2b2lkIGNv
bXB1dGVSZXBsaWNhVHJhbnNmb3JtSWZOZWVkZWQoKTsKICAgICB2b2lkIGNvbXB1dGVPdmVybGFw
c0lmTmVlZGVkKCk7CiAgICAgdm9pZCBjb21wdXRlTG9jYWxUcmFuc2Zvcm1JZk5lZWRlZCgpOwot
ICAgIHZvaWQgY29tcHV0ZUJvdW5kaW5nUmVjdEZyb21Sb290SWZOZWVkZWQoKTsKICAgICB2b2lk
IGNvbXB1dGVUaWxlcygpOworICAgIHZvaWQgc3dhcENvbnRlbnRzQnVmZmVycygpOwogICAgIGlu
dCBjb3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKSBjb25zdDsKICAgICBGbG9hdFJlY3QgdGFy
Z2V0UmVjdEZvclRpbGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdG90YWxUYXJnZXRSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0KSBjb25zdDsKICAgICB2b2lkIGludmFsaWRhdGVWaWV3cG9y
dChjb25zdCBGbG9hdFJlY3QmKTsKQEAgLTE2Miw3ICsxODIsNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBpbnQgY29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIGEsIGNvbnN0
IHZvaWQqIGIpOwogICAgIHN0YXRpYyB2b2lkIHNvcnRCeVpPcmRlcihWZWN0b3I8VGV4dHVyZU1h
cHBlck5vZGUqID4mIGFycmF5LCBpbnQgZmlyc3QsIGludCBsYXN0KTsKIAotICAgIEJpdG1hcFRl
eHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RpbGVzLmlzRW1wdHkoKSA/IDAgOiBtX3RpbGVz
WzBdLnRleHR1cmUuZ2V0KCk7IH0KKyAgICBCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1
cm4gbV9vd25lZFRpbGVzLmlzRW1wdHkoKSA/IDAgOiBtX293bmVkVGlsZXNbMF0udGV4dHVyZS5n
ZXQoKTsgfQogCiAgICAgdm9pZCBwYWludFJlY3Vyc2l2ZShUZXh0dXJlTWFwcGVyUGFpbnRPcHRp
b25zKTsKICAgICBib29sIHBhaW50UmVmbGVjdGlvbihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRP
cHRpb25zJiwgQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7CkBAIC0xODUsMTAgKzIwNSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsOwogICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBiYXNlOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwZXJz
cGVjdGl2ZTsKLSAgICAgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nUmVjdDsKICAgICAgICAg
ZmxvYXQgY2VudGVyWjsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdEZyb21Sb290Owot
ICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0RnJvbVJvb3RGb3JEZXNjZW5kYW50czsKICAg
ICAgICAgVHJhbnNmb3JtRGF0YSgpIHsgfQogICAgIH07CiAKQEAgLTIwOCwxMyArMjI1LDM4IEBA
IHByaXZhdGU6CiAgICAgewogICAgICAgICByZXR1cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50
VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlICYmIG1fY3VycmVudENvbnRlbnQuaW1hZ2Ug
PyBtX2N1cnJlbnRDb250ZW50LmltYWdlLT5zaXplKCkgOiBtX3NpemU7CiAgICAgfQotICAgIHN0
cnVjdCBUaWxlIHsKKyAgICBzdHJ1Y3QgT3duZWRUaWxlIHsKICAgICAgICAgRmxvYXRSZWN0IHJl
Y3Q7CiAgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlOwogICAgICAgICBib29s
IG5lZWRzUmVzZXQ7CiAgICAgfTsKIAotICAgIFZlY3RvcjxUaWxlPiBtX3RpbGVzOworICAgIFZl
Y3RvcjxPd25lZFRpbGU+IG1fb3duZWRUaWxlczsKKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQorICAgIHN0cnVjdCBFeHRlcm5hbGx5TWFuYWdlZFRpbGVCdWZmZXIgeworICAgICAg
ICBGbG9hdFJlY3Qgc291cmNlUmVjdDsKKyAgICAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3Q7Cisg
ICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlOworICAgIH07CisKKyAgICBzdHJ1
Y3QgRXh0ZXJuYWxseU1hbmFnZWRUaWxlIHsKKyAgICAgICAgYm9vbCBpc0JhY2tCdWZmZXJVcGRh
dGVkOworICAgICAgICBib29sIGlzRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2U7CisgICAgICAgIGZs
b2F0IHNjYWxlOworICAgICAgICBFeHRlcm5hbGx5TWFuYWdlZFRpbGVCdWZmZXIgZnJvbnRCdWZm
ZXI7CisgICAgICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZUJ1ZmZlciBiYWNrQnVmZmVyOworCisg
ICAgICAgIEV4dGVybmFsbHlNYW5hZ2VkVGlsZShmbG9hdCBzY2FsZSA9IDEuMCkKKyAgICAgICAg
ICAgIDogaXNCYWNrQnVmZmVyVXBkYXRlZChmYWxzZSkKKyAgICAgICAgICAgICwgaXNEaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZShmYWxzZSkKKyAgICAgICAgICAgICwgc2NhbGUoc2NhbGUpCisgICAg
ICAgIHsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBIYXNoTWFwPGludCwgRXh0ZXJuYWxseU1h
bmFnZWRUaWxlPiBtX2V4dGVybmFsbHlNYW5hZ2VkVGlsZXM7CisjZW5kaWYKIAogICAgIENvbnRl
bnREYXRhIG1fY3VycmVudENvbnRlbnQ7CiAKQEAgLTIyNCw2ICsyNjYsNyBAQCBwcml2YXRlOgog
ICAgIEZsb2F0U2l6ZSBtX3NpemU7CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIFN0cmluZyBt
X25hbWU7CisgICAgaW50IG1faWQ7CiAKICAgICBzdHJ1Y3QgU3RhdGUgewogICAgICAgICBGbG9h
dFBvaW50IHBvczsKQEAgLTI0NSwxMCArMjg4LDExIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wg
bmVlZHNSZXNldDogMTsKICAgICAgICAgYm9vbCBtaWdodEhhdmVPdmVybGFwcyA6IDE7CiAgICAg
ICAgIGJvb2wgbmVlZHNSZXBhaW50OwotICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3Q7Ci0g
ICAgICAgIEZsb2F0UmVjdCByb290VmlzaWJsZVJlY3Q7CisgICAgICAgIEludFJlY3QgdmlzaWJs
ZVJlY3Q7CiAgICAgICAgIGZsb2F0IGNvbnRlbnRTY2FsZTsKLQorI2lmIEVOQUJMRShUSUxFRF9C
QUNLSU5HX1NUT1JFKQorICAgICAgICBUaWxlT3duZXJzaGlwIHRpbGVPd25lcnNoaXA7CisjZW5k
aWYKICAgICAgICAgU3RhdGUoKQogICAgICAgICAgICAgOiBvcGFjaXR5KDEuZikKICAgICAgICAg
ICAgICwgbWFza0xheWVyKDApCkBAIC0yNjEsNyArMzA1LDExIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAsIHZpc2libGUodHJ1ZSkKICAgICAgICAgICAgICwgbmVlZHNSZXNldChmYWxzZSkKICAg
ICAgICAgICAgICwgbWlnaHRIYXZlT3ZlcmxhcHMoZmFsc2UpCisgICAgICAgICAgICAsIG5lZWRz
UmVwYWludChmYWxzZSkKICAgICAgICAgICAgICwgY29udGVudFNjYWxlKDEuMGYpCisjaWYgRU5B
QkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgICAgICAgICAsIHRpbGVPd25lcnNoaXAoT3du
ZWRUaWxlcykKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110576</attachid>
            <date>2011-10-11 14:29:00 -0700</date>
            <delta_ts>2011-10-13 17:09:12 -0700</delta_ts>
            <desc>Unbreak the minimal Qt bot</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>2767</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MzNhYmI1Li44MjY1Mzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTEtMTAtMTEgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCwgdW5icmVha2luZyB0aGUgUXQgbWlu
aW1hbCBib3QuCisgICAgICAgIFNvbWUgI2lmZGVmIEVOQUJMRUQoVElMRURfQkFDS0lOR19TVE9S
RSkgY2xhdXNlcyB3ZXJlIG1pc3NpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OmNvbXB1dGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
Tm9kZTo6cmVuZGVyQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6cGFpbnRTZWxmKToKKwogMjAxMS0xMC0xMSAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEdlbmVyYWxpemUgcjk1NDYxIGNoYW5nZSB0byBpbmNsdWRl
IHRhYmxlLWNlbGwgYW5kIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKaW5kZXggMzJiNzZjNi4u
MmEyOTMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCkBAIC0xNzMsOCArMTczLDEwIEBA
IHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVBbGxUcmFuc2Zvcm1zKCkKIAogdm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRpbGVzKCkKIHsKKyNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkKICAgICBpZiAobV9zdGF0ZS50aWxlT3duZXJzaGlwID09IEV4dGVybmFsbHlN
YW5hZ2VkVGlsZXMpCiAgICAgICAgIHJldHVybjsKKyNlbmRpZgogICAgIGlmIChtX2N1cnJlbnRD
b250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSAmJiAhbV9zdGF0ZS5kcmF3c0Nv
bnRlbnQpIHsKICAgICAgICAgbV9vd25lZFRpbGVzLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTIzMyw2ICsyMzUsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVGlsZXMo
KQogICAgICAgICBtX293bmVkVGlsZXMucmVtb3ZlKHRpbGVzVG9SZW1vdmVbaV0pOwogfQogCisj
aWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiBzdGF0aWMgdm9pZCBjbGFtcFJlY3QoSW50
UmVjdCYgcmVjdCwgaW50IGRpbWVuc2lvbikKIHsKICAgICByZWN0LnNoaWZ0WEVkZ2VUbyhyZWN0
LngoKSAtIHJlY3QueCgpICUgZGltZW5zaW9uKTsKQEAgLTI3NiwxMSArMjc5LDE1IEBAIGJvb2wg
VGV4dHVyZU1hcHBlck5vZGU6OmNvbGxlY3RWaXNpYmxlQ29udGVudHNSZWN0cyhOb2RlUmVjdE1h
cCYgcmVjdE1hcCwgY29uc3QKIAogICAgIHJldHVybiB0cnVlOwogfQorI2VuZGlmCiAKIHZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlciwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCiAgICAgaWYgKG1fc3RhdGUudGlsZU93bmVyc2hpcCA9PSBFeHRlcm5hbGx5TWFuYWdl
ZFRpbGVzKQogICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIGlmIChtX3NpemUuaXNFbXB0
eSgpIHx8ICFsYXllciB8fCAoIW1fc3RhdGUuZHJhd3NDb250ZW50ICYmIG1fY3VycmVudENvbnRl
bnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKSkgewogICAgICAgICBtX293bmVkVGls
ZXMuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzg2LDkgKzM5Myw5IEBAIHZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25z
JiBvcHRpb25zKQogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgRU5BQkxFKFRJTEVEX0JB
Q0tJTkdfU1RPUkUpCiAgICAgVmVjdG9yPEV4dGVybmFsbHlNYW5hZ2VkVGlsZT4gdGlsZXNUb1Bh
aW50OwogCi0KICAgICBpZiAobV9zdGF0ZS50aWxlT3duZXJzaGlwID09IEV4dGVybmFsbHlNYW5h
Z2VkVGlsZXMpIHsKICAgICAgICAgLy8gU29ydCB0aWxlcywgd2l0aCBjdXJyZW50IHNjYWxlIGZh
Y3RvciBsYXN0LgogICAgICAgICBWZWN0b3I8RXh0ZXJuYWxseU1hbmFnZWRUaWxlKj4gdGlsZXM7
CkBAIC00MjQsNiArNDMxLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNv
bnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyNlbmRpZgogCiAgICAgLy8gTm93IHdlIHBhaW50IG93bmVkIHRp
bGVzLCBpZiB3ZSdyZSBpbiBPd25lZFRpbGVNb2RlLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9vd25lZFRpbGVzLnNpemUoKTsgKytpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110595</attachid>
            <date>2011-10-11 15:53:16 -0700</date>
            <delta_ts>2011-10-12 10:53:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>98484</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2N2ZjYjUyLi4zMDNiNjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY0
IEBACisyMDExLTEwLTExICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1F0XVtXSzJdIFN5bmNocm9uaXplIHRpbGluZyB3aXRoIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIExheWVyLXRyZWUgc3luY2hyb25pemF0aW9uIGlzIGRvbmUgYnkgcGFzc2luZyBXZWJL
aXQyIG1lc3NhZ2VzIGJldHdlZW4gYSBMYXllclRyZWVIb3N0CisgICAgICAgIG9uIHRoZSBXZWJQ
cm9jZXNzIGFuZCBhIExheWVyVHJlZUhvc3RQcm94eSBvbiB0aGUgVUkgcHJvY2Vzcy4gRXZlcnkg
bGF5ZXIgaW4gdGhlIHRyZWUgaGFzCisgICAgICAgIGl0cyBvd24gdGlsZWQgYmFja2luZyBzdG9y
ZSwgYW5kIHVzZXMgdGhlIExheWVyVHJlZUhvc3QgY29tbXVuaWNhdGlvbiBjaGFubmVsIHRvIHBh
c3MKKyAgICAgICAgY29udGVudCB1cCB0byB0aGUgVUkgcHJvY2Vzcy4gVGhlIFVJIHByb2Nlc3Mg
d2lsbCBsYXRlciBjcmVhdGVzIGl0cyBvd24gR3JhcGhpY3NMYXllciB0cmVlLAorICAgICAgICBi
YXNlZCBvbiBUZXh0dXJlTWFwcGVyLCB3aGljaCBjYW4gYmUgcGFpbnRlZCBkaXJlY3RseSB3aXRo
IE9wZW5HTC4KKworICAgICAgICBTZXZlcmFsIG9wdGltaXphdGlvbnMgYXJlIGF2YWlsYWJsZSBm
b3IgdGhlIG5vbi1jb21wb3NpdGVkIGxheWVyIGFzIHdlbGwsIG5hbWVseSBzcGVjaWZ5aW5nCisg
ICAgICAgIGEgdHJhamVjdG9yeSBhbmQgdXBkYXRpbmcgdGhlIHZpc2libGUgcmVjdCB0b2dldGhl
ciB3aXRoIHRoZSBjb250ZW50IHNjYWxlLgorCisgICAgICAgIFRoaXMgY29kZSBpcyBjdXJyZW50
bHkgZGlzYWJsZWQsIGEgc2VwYXJhdGUgcGF0Y2ggd2lsbCBlbmFibGUgaXQgYW5kIGdsdWUgaXQg
dG8KKyAgICAgICAgUVRvdWNoV2ViUGFnZS4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLnBy
bzoKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvTGF5ZXJUcmVlQ29u
dGV4dC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViTGF5ZXJJbmZvOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
ckluZm86OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaDoKKyAg
ICAgICAgKiBTaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29udGV4dDo6TGF5ZXJUcmVlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvbnRleHQ6On5MYXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29udGV4dDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29u
dGV4dDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6aXNFbXB0
eSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6
dXBkYXRlV2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmNvbnRl
bnRzUmVjdCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6dmlld3BvcnRWaXNpYmxlUmVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmlzQmFja2luZ1N0b3JlUmVhZHkpOgorICAg
ICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnNldFZpc2libGVDb250ZW50c1Jl
Y3RBbmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnNldFZpc2li
bGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVByb3h5OjpkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZSk6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnBhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJv
eHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNz
YWdlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVD
b250ZW50c1JlY3RBbmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJ
bXBsOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKToKKyAgICAgICAgKFdl
YktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UHJveHk6OmxheWVyQnlJRCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RQcm94eTo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5
Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFByb3h5Ojpub3RpZnlTeW5jUmVxdWlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6OnNob3dEZWJ1Z0JvcmRlcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6OnNob3dSZXBhaW50Q291bnRlcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RQcm94eTo6cGFpbnRDb250ZW50cyk6CisgICAgICAgICogVUlQcm9jZXNzL0xheWVyVHJl
ZUhvc3RQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHA6
IEFkZGVkLgorICAgICAgICAqIFdlYktpdDIucHJvOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjpXZWJHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdy
YXBoaWNzTGF5ZXI6On5XZWJHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdy
YXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFk
ZENoaWxkQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjphZGRD
aGlsZEFib3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
QmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rp
c3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNU
b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3Bs
YXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBv
c2l0aW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdy
YXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9y
ZVBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2lu
Z1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGls
ZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dy
b3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGVCdWZmZXJzUmVjdXJzaXZlbHkp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJUcmVlVGlsZUNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVm
ZmVycyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xh
eWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRMYXllclRyZWVU
aWxlQ2xpZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3Nh
Z2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0
VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluOiBBZGRlZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2Fn
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFF0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6On5MYXllclRy
ZWVIb3N0UXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OkxheWVyVHJlZUhv
c3RRdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0TGF5ZXJGbHVzaFNj
aGVkdWxpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzY2hl
ZHVsZUxheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNhbmNl
bFBlbmRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpz
ZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RRdDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250
ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Zm9yY2VSZXBhaW50KToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzaXplRGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlz
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Zmx1c2hQZW5kaW5nTGF5
ZXJDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpkaWRTeW5jQ29t
cG9zaXRpbmdTdGF0ZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpkaWREZWxldGVMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6cGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OmxheWVyRmx1c2hUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFF0OjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlTeW5jUmVxdWlyZWQpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UXQ6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNob3dEZWJ1Z0JvcmRlcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnNob3dSZXBhaW50Q291bnRlcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RRdDo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RR
dDo6cmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OnNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCk6
CisKIDIwMTEtMTAtMTEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW01hY10gU21hbGwgZW1iZWRkZWQgUERGcyBhcmUgbm90IGZ1bGx5IHJlcGFpbnRlZCB3
aGVuIHNjcm9sbGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMu
cHJvIGIvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCmluZGV4IGZjZTU5YzUuLmI5
M2U3NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8KQEAgLTkyLDYgKzkyLDcgQEAgTUVT
U0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgQXV0aGVudGljYXRpb25NYW5hZ2VyLm1lc3NhZ2VzLmlu
IFwKICAgICBEb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluIFwKICAgICBEcmF3aW5nQXJlYVByb3h5
Lm1lc3NhZ2VzLmluIFwKKyAgICBMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gXAogICAg
IFBsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luUHJvY2Vzcy5t
ZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gXApA
QCAtMTE2LDYgKzExNyw3IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFdlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyLm1lc3NhZ2VzLmluIFwKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Lm1l
c3NhZ2VzLmluIFwKICAgICBXZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluIFwKKyAgICBX
ZWJQYWdlL0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4gXAogICAgIFdlYlBhZ2UvV2ViSW5zcGVj
dG9yLm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gXAogICAg
IFdlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9NZXNzYWdlSUQuaAppbmRleCAxM2IyMTgzLi40NTUxZDdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgKQEAgLTM4LDYgKzM4LDcgQEAgZW51bSBN
ZXNzYWdlQ2xhc3MgewogICAgIE1lc3NhZ2VDbGFzc0F1dGhlbnRpY2F0aW9uTWFuYWdlciwKICAg
ICBNZXNzYWdlQ2xhc3NEcmF3aW5nQXJlYSwKICAgICBNZXNzYWdlQ2xhc3NJbmplY3RlZEJ1bmRs
ZSwKKyAgICBNZXNzYWdlQ2xhc3NMYXllclRyZWVIb3N0LAogICAgIE1lc3NhZ2VDbGFzc1dlYkFw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc1dlYkNvb2tpZU1hbmFnZXIs
CiAgICAgTWVzc2FnZUNsYXNzV2ViRGF0YWJhc2VNYW5hZ2VyLApAQCAtNTQsNiArNTUsNyBAQCBl
bnVtIE1lc3NhZ2VDbGFzcyB7CiAgICAgLy8gTWVzc2FnZXMgc2VudCBieSB0aGUgd2ViIHByb2Nl
c3MgdG8gdGhlIFVJIHByb2Nlc3MuCiAgICAgTWVzc2FnZUNsYXNzRG93bmxvYWRQcm94eSwKICAg
ICBNZXNzYWdlQ2xhc3NEcmF3aW5nQXJlYVByb3h5LAorICAgIE1lc3NhZ2VDbGFzc0xheWVyVHJl
ZUhvc3RQcm94eSwKICAgICBNZXNzYWdlQ2xhc3NXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclBy
b3h5LAogICAgIE1lc3NhZ2VDbGFzc1dlYkNvbnRleHQsCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29u
dGV4dExlZ2FjeSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9t
ZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQpp
bmRleCBiODVkYTk4Li5kMmU0ZWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRz
L3dlYmtpdDIvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQy
L21lc3NhZ2VzLnB5CkBAIC0zODEsNiArMzgxLDggQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlw
ZSk6CiAgICAgICAgICdXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyJzog
W10sCiAgICAgICAgICdXZWJLaXQ6OldlYkNvbnRleHRVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwK
ICAgICAgICAgJ1dlYktpdDo6V2ViR2VzdHVyZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKKyAg
ICAgICAgJ1dlYktpdDo6V2ViTGF5ZXJJRCc6IFsnIldlYkxheWVyVHJlZUluZm8uaCInXSwKKyAg
ICAgICAgJ1dlYktpdDo6V2ViTGF5ZXJJbmZvJzogWyciV2ViTGF5ZXJUcmVlSW5mby5oIiddLAog
ICAgICAgICAnV2ViS2l0OjpXZWJLZXlib2FyZEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAg
ICAgICAgJ1dlYktpdDo6V2ViTW91c2VFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCiAgICAgICAg
ICdXZWJLaXQ6OldlYlRvdWNoRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgKaW5kZXggODY2N2M5OC4uMmRiNTg0ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCkBAIC00Nyw2ICs0Nyw4IEBAIHB1
YmxpYzoKICAgICB1aW50MzJfdCBjb250ZXh0SUQ7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAg
SFdORCB3aW5kb3c7CisjZWxpZiBQTEFURk9STShRVCkKKyAgICB1aW50MzJfdCB3ZWJMYXllcklE
OwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5
ZXJUcmVlSW5mby5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5j
cHAKaW5kZXggYTAxMjg1NS4uZWRiNjJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlSW5mby5oIgogCisjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVt
b3J5LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAKQEAgLTMzLDM1ICsz
NCwxNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViTGF5ZXJJbmZvOjplbmNvZGUoQ29y
ZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewogICAgIC8vIFdlIGhhdmUg
dG8gZGl2aWRlIGl0IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0IHRh
a2VzIGEgbWF4aW11bSBvZiAxMCBhcmd1bWVudHMuCi0gICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJ
UEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGljYSwgbWFzaykp
OworICAgIGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihpZCwgbmFtZSwgcGFyZW50LCBjaGls
ZHJlbiwgZmxhZ3MsIHJlcGxpY2EsIG1hc2ssIGltYWdlQmFja2luZ1N0b3JlSUQpKTsKICAgICBl
bmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4ocG9zLCBzaXplLCB0cmFuc2Zvcm0sIG9wYWNpdHks
IGFuY2hvclBvaW50LCBjaGlsZHJlblRyYW5zZm9ybSwgY29udGVudHNSZWN0KSk7Ci0gICAgZW5j
b2Rlci0+ZW5jb2RlKGltYWdlQmFja2luZ1N0b3JlID8gaW1hZ2VCYWNraW5nU3RvcmUtPnNpemUo
KSA6IEludFNpemUoKSk7Ci0KLSAgICBpZiAoIWltYWdlQmFja2luZ1N0b3JlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBpbWFnZUhhbmRsZTsKLSAgICBp
ZiAoaW1hZ2VCYWNraW5nU3RvcmUtPmNyZWF0ZUhhbmRsZShpbWFnZUhhbmRsZSkpCi0gICAgICAg
IGltYWdlSGFuZGxlLmVuY29kZShlbmNvZGVyKTsKIH0KIAogYm9vbCBXZWJMYXllckluZm86OmRl
Y29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdlYkxheWVySW5mbyYgaW5m
bykKIHsKICAgICAvLyBXZSBoYXZlIHRvIGRpdmlkZSBpdCB0byBzZXZlcmFsIGxpbmVzLCBiZWNh
dXNlIENvcmVJUEM6OkluL091dCB0YWtlcyBhIG1heGltdW0gb2YgMTAgYXJndW1lbnRzLgotICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLmlkLCBpbmZvLm5hbWUsIGlu
Zm8ucGFyZW50LCBpbmZvLmNoaWxkcmVuLCBpbmZvLmZsYWdzLCBpbmZvLnJlcGxpY2EsIGluZm8u
bWFzaykpKQorICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLmlkLCBp
bmZvLm5hbWUsIGluZm8ucGFyZW50LCBpbmZvLmNoaWxkcmVuLCBpbmZvLmZsYWdzLCBpbmZvLnJl
cGxpY2EsIGluZm8ubWFzaywgaW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQoaW5mby5w
b3MsIGluZm8uc2l6ZSwgaW5mby50cmFuc2Zvcm0sIGluZm8ub3BhY2l0eSwgaW5mby5hbmNob3JQ
b2ludCwgaW5mby5jaGlsZHJlblRyYW5zZm9ybSwgaW5mby5jb250ZW50c1JlY3QpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSW50U2l6ZSBpbWFnZUJhY2tpbmdTdG9yZVNpemU7Ci0g
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaW1hZ2VCYWNraW5nU3RvcmVTaXplKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChpbWFnZUJhY2tpbmdTdG9yZVNpemUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGltYWdl
SGFuZGxlOwotICAgIGlmIChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6ZGVjb2RlKGRlY29kZXIs
IGltYWdlSGFuZGxlKSkKLSAgICAgICAgaW5mby5pbWFnZUJhY2tpbmdTdG9yZSA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlKGltYWdlSGFuZGxlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKaW5kZXggYTBlNjhkMy4uYzEwYjkw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCkBAIC0zNCw2ICsz
NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHR5
cGVkZWYgdWludDMyX3QgV2ViTGF5ZXJJRDsKK2VudW0geyBJbnZhbGlkV2ViTGF5ZXJJRCA9IDAg
fTsKIAogc3RydWN0IFdlYkxheWVyVXBkYXRlSW5mbyB7CiAgICAgV2ViTGF5ZXJVcGRhdGVJbmZv
KCkgeyB9CkBAIC01NCw2ICs1NSw3IEBAIHN0cnVjdCBXZWJMYXllckluZm8gewogICAgIFdlYkxh
eWVySUQgcGFyZW50OwogICAgIFdlYkxheWVySUQgcmVwbGljYTsKICAgICBXZWJMYXllcklEIG1h
c2s7CisgICAgaW50NjRfdCBpbWFnZUJhY2tpbmdTdG9yZUlEOwogCiAgICAgRmxvYXRQb2ludCBw
b3M7CiAgICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwpAQCAtNzEsNiArNzMsOCBAQCBzdHJ1
Y3QgV2ViTGF5ZXJJbmZvIHsKICAgICAgICAgICAgIGJvb2wgbWFza3NUb0JvdW5kcyA6IDE7CiAg
ICAgICAgICAgICBib29sIHByZXNlcnZlczNEIDogMTsKICAgICAgICAgICAgIGJvb2wgY29udGVu
dE5lZWRzRGlzcGxheSA6IDE7CisgICAgICAgICAgICBib29sIGltYWdlVXBkYXRlZDogMTsKKyAg
ICAgICAgICAgIGJvb2wgaXNSb290TGF5ZXI6IDE7CiAgICAgICAgIH07CiAgICAgICAgIHVuc2ln
bmVkIGludCBmbGFnczsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5
ZXJUcmVlQ29udGV4dFF0LmNwcAppbmRleCBmMWJmMWI0Li5kMzdkNzljIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcApAQCAtMjYsNDEgKzI2
LDM4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5o
IgogCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJBcmd1bWVudERlY29k
ZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIExheWVyVHJlZUNvbnRleHQ6OkxheWVyVHJlZUNvbnRleHQoKQorICAgIDogd2ViTGF5ZXJJ
RCgwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIExheWVyVHJlZUNvbnRleHQ6On5M
YXllclRyZWVDb250ZXh0KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExh
eWVyVHJlZUNvbnRleHQ6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBjb25zdAor
dm9pZCBMYXllclRyZWVDb250ZXh0OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBl
bmNvZGVyKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlKHdlYkxheWVySUQpOwogfQogCi1ib29sIExheWVyVHJlZUNvbnRleHQ6OmRlY29kZShDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqLCBMYXllclRyZWVDb250ZXh0JikKK2Jvb2wgTGF5ZXJUcmVl
Q29udGV4dDo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgTGF5ZXJU
cmVlQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBkZWNvZGVyLT5kZWNvZGUoY29udGV4dC53ZWJMYXllcklEKTsK
IH0KIAogYm9vbCBMYXllclRyZWVDb250ZXh0Ojppc0VtcHR5KCkgY29uc3QKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiAhd2ViTGF5ZXJJRDsK
IH0KIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IExheWVyVHJlZUNvbnRleHQmLCBjb25zdCBMYXll
clRyZWVDb250ZXh0JikKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiBh
LCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBiKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGEud2ViTGF5ZXJJRCA9PSBiLndlYkxheWVySUQ7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4IGY4NTJlMmYuLmZmYjIzNmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKQEAgLTI4LDYgKzI4LDEw
IEBACiAKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3RQcm94eS5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTUzLDQgKzU3LDE2IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eTo6c2V0
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCiAg
ICAgc2l6ZURpZENoYW5nZSgpOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCit2b2lkIERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVdl
YlZpZXcoKQoreworICAgIG1fd2ViUGFnZVByb3h5LT5zZXRWaWV3TmVlZHNEaXNwbGF5KHZpZXdw
b3J0VmlzaWJsZVJlY3QoKSk7Cit9CisKK1dlYkNvcmU6OkludFJlY3QgRHJhd2luZ0FyZWFQcm94
eTo6Y29udGVudHNSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBtX3dlYlBhZ2VQcm94eS0+dmlld1NpemUoKSk7Cit9CisjZW5kaWYKKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJh
d2luZ0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkuaAppbmRleCAwODhmYzhiLi5jNDk4OTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5LmgKQEAgLTI3LDkgKzI3LDExIEBACiAjaWZuZGVmIERyYXdpbmdB
cmVhUHJveHlfaAogI2RlZmluZSBEcmF3aW5nQXJlYVByb3h5X2gKIAorI2luY2x1ZGUgPENvcmVJ
UEMvTWVzc2FnZUlELmg+CiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbmZvLmgiCi0jaW5jbHVkZSA8
c3RkaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAKICNpZiBQTEFURk9STShRVCkKQEAgLTQ1LDEzICs0NywxNyBAQCBuYW1lc3BhY2Ug
Q29yZUlQQyB7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnRSZWN0Owor
ICAgIGNsYXNzIEZsb2F0UG9pbnQ7CisgICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiB9
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBMYXllclRyZWVDb250ZXh0OworY2xhc3Mg
TGF5ZXJUcmVlSG9zdFByb3h5OwogY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdlYkxheWVyVHJl
ZUluZm87CitjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CiAK
IGNsYXNzIERyYXdpbmdBcmVhUHJveHkgewpAQCAtNzcsNiArODMsMjQgQEAgcHVibGljOgogICAg
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
ICAgICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNjcm9sbE9mZnNldCk7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2ViVmll
dygpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkg
Y29uc3QgeyByZXR1cm4gY29udGVudHNSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFJlY3QgY29udGVudHNSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQmFja2luZ1N0
b3JlUmVhZHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50
VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
ZmxvYXQgb3BhY2l0eSkgeyB9CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGVGb3JM
YXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJikg
eyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50
IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKSB7IH0KKworICAgIFdlYlBhZ2VQcm94eSog
cGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFnZVByb3h5OyB9CisjZW5kaWYKKyNlbmRpZgogcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlLCBXZWJQ
YWdlUHJveHkqKTsKIApAQCAtODYsNiArMTEwLDEwIEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3Jl
OjpJbnRTaXplIG1fc2l6ZTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0Owog
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisgICAgT3duUHRyPExheWVyVHJlZUhvc3RQcm94eT4gbV9sYXllclRyZWVIb3N0UHJveHk7Cisj
ZW5kaWYKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZSgpID0gMDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5j
cHAKaW5kZXggNjE5ZDUwOC4uNGQ3YmQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNp
bmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0zMjgsOCArMzMyLDM4IEBAIHZvaWQg
RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29u
c3QgTGF5ZXJUcmVlQ29udGV4CiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1f
bGF5ZXJUcmVlQ29udGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHkt
PmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIGlmICghbV9sYXllclRyZWVIb3N0UHJveHkpCisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94
eSh0aGlzKSk7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQor
dm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlE
IG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCit7CisgICAg
aWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+
ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlE
LCBhcmd1bWVudHMpOworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxl
Q29udGVudHNSZWN0QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRl
bnRzUmVjdCwgZmxvYXQgc2NhbGUpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQor
ICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNj
YWxlKHZpc2libGVDb250ZW50c1JlY3QsIHNjYWxlKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGlmIChtX2xheWVyVHJl
ZUhvc3RQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CiB9CiAKK3ZvaWQgRHJh
d2luZ0FyZWFQcm94eUltcGw6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKG1fbGF5ZXJU
cmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+cGFpbnRUb0N1cnJl
bnRHTENvbnRleHQobWF0cml4LCBvcGFjaXR5KTsKK30KKyNlbmRpZgorCiB2b2lkIERyYXdpbmdB
cmVhUHJveHlJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQogewogICAgIEFT
U0VSVChpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4IGQwOTFmOTcuLmFhYzcx
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1w
bC5oCkBAIC0zOSw2ICszOSw4IEBAIGNsYXNzIFJlZ2lvbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKKwogY2xhc3MgRHJhd2luZ0FyZWFQcm94eUlt
cGwgOiBwdWJsaWMgRHJhd2luZ0FyZWFQcm94eSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NP
d25QdHI8RHJhd2luZ0FyZWFQcm94eUltcGw+IGNyZWF0ZShXZWJQYWdlUHJveHkqKTsKQEAgLTc1
LDYgKzc3LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoKTsKIAogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29u
c3QgeyByZXR1cm4gIW1fbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCk7IH0KKworI2lmIEVOQUJM
RShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVu
dHNSZWN0QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVj
dCwgZmxvYXQgc2NhbGUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RU
cmFqZWN0b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVI
b3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworI2VuZGlmCiAjZWxzZQogICAgIGJvb2wgaXNJ
bkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OWUyOTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTAs
MCArMSwxMzMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFBy
b3h5X2gKKyNkZWZpbmUgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKworI2luY2x1ZGUgIkJhY2tpbmdT
dG9yZS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJNZXNzYWdl
UXVldWUuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5j
bHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViTGF5ZXJJbmZvOworY2xhc3MgV2ViTGF5ZXJV
cGRhdGVJbmZvOworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTGF5ZXJUcmVl
TWVzc2FnZVRvUmVuZGVyZXI7CitjbGFzcyBMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgR3Jh
cGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdp
bmdBcmVhUHJveHkqKTsKKyAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0UHJveHkoKTsKKyAgICB2
b2lkIHN5bmNDb21wb3NpdGluZ0xheWVyU3RhdGUoY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAg
dm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOworICAgIHZvaWQgc2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqKTsKKyAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQpOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRz
UmVjdEFuZFNjYWxlKGNvbnN0IEludFJlY3QmLCBmbG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxl
Q29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyNpZiBFTkFC
TEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7Cisg
ICAgdm9pZCBzd2FwQ29udGVudEJ1ZmZlcnMoKTsKKyAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7
CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNv
bnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGlu
dCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKKyAgICB2
b2lkIHJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7CisgICAgdm9p
ZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7CisgICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2UoaW50NjRfdCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RGb3JM
YXllcihXZWJMYXllcklELCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVXZWJWaWV3
KCk7CisjZW5kaWYKKworcHJvdGVjdGVkOgorCisgICAgUGFzc093blB0cjxHcmFwaGljc0xheWVy
PiBjcmVhdGVMYXllcihXZWJMYXllcklEKTsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJ
RChXZWJMYXllcklEIGlkKSB7IHJldHVybiAoaWQgPT0gSW52YWxpZFdlYkxheWVySUQpID8gMCA6
IG1fbGF5ZXJzLmdldChpZCk7IH0KKyAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJl
dHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSkgeyB9CisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9CisgICAg
dmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50
aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICBSdW5Mb29wOjpUaW1l
cjxMYXllclRyZWVIb3N0UHJveHk+IG1fYW5pbWF0aW9uVGltZXI7CisgICAgRHJhd2luZ0FyZWFQ
cm94eSogbV9kcmF3aW5nQXJlYVByb3h5OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxheWVy
SUQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKKyAgICBJbnRSZWN0IG1fdmlz
aWJsZUNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CisKKyAgICBNZXNz
YWdlUXVldWU8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG1fbWVzc2FnZXNUb1JlbmRlclRo
cmVhZDsKKyAgICB2b2lkIHB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVz
c2FnZVRvUmVuZGVyZXI+KTsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8
VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOworI2VuZGlmCisKKyNpZiBQTEFURk9STShR
VCkKKyAgICB0eXBlZGVmIEhhc2hNYXA8SW50UG9pbnQsIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+
IFRpbGVkSW1hZ2U7CisgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwIG1fbm9kZVZp
c3VhbENvbnRlbnRzUmVjdE1hcDsKKyAgICBIYXNoTWFwPGludCwgaW50PiBtX3RpbGVUb05vZGVU
aWxlOworICAgIGludCByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3Q7
CisgICAgSGFzaE1hcDxpbnQ2NF90LCBUaWxlZEltYWdlPiBtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlczsKKworICAgIHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7CisgICAgdm9pZCBzeW5j
aHJvbml6ZVZpZXdwb3J0KCk7CisgICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklEKTsKKyAg
ICB2b2lkIHNldFJvb3RMYXllcklEKFdlYkxheWVySUQpOworICAgIHZvaWQgc3luY0xheWVyUGFy
YW1ldGVycyhjb25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5
ZXJJRCwgaW50LCBmbG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQs
IGludCk7CisgICAgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBRSW1hZ2UmKTsKKyAgICB2b2lkIGNyZWF0ZUltYWdl
KGludDY0X3QsIGNvbnN0IFFJbWFnZSYpOworICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3Qp
OworICAgIHZvaWQgYXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBp
bnQ2NF90IGltYWdlSUQpOworICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICB2b2lk
IGVuc3VyZVJvb3RMYXllcigpOworICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7CisK
KyNlbmRpZgorCisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZl
Y3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXll
cnM7CisgICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOworICAgIGludCBtX2lkOworfTsKKwor
fQorCisjZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NzJkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBA
IC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKFRJTEVEX0JB
Q0tJTkdfU1RPUkUpCittZXNzYWdlcyAtPiBMYXllclRyZWVIb3N0UHJveHkgeworICAgIFN5bmND
b21wb3NpdGluZ0xheWVyU3RhdGUoV2ViS2l0OjpXZWJMYXllckluZm8gbGF5ZXJJbmZvKQorICAg
IFNldFJvb3RDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQorICAgIERlbGV0ZUNvbXBvc2l0
aW5nTGF5ZXIodWludDMyX3QgaWQpCisgICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxh
eWVySUQsIGludCB0aWxlSUQsIFdlYktpdDo6VXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFVw
ZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJLaXQ6OlVw
ZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5
ZXJJRCwgaW50IHRpbGVJRCkKKyAgICBDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2
NF90IGtleSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpCisgICAgRGVz
dHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQorICAgIERpZFJlbmRlckZy
YW1lKCkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAppbmRleCBhYTg2ZWYyLi5lNmRmNWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRvd25sb2FkUHJveHku
aCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiRmluZEluZGljYXRv
ci5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQuaCIKQEAgLTEzOTcsNiArMTM5OCwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQ
Qzo6TQogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVl
SG9zdFByb3h5PigpKSB7CisgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRy
ZWVIb3N0UHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAg
ICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc1dlYkluc3BlY3RvclByb3h5
PigpKSB7CiAgICAgICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eSogaW5zcGVjdG9yID0gdGhpcy0+
aW5zcGVjdG9yKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5
ZXJUcmVlSG9zdFByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVy
VHJlZUhvc3RQcm94eVF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w
Zjc2YmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xh
eWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAtMCwwICsxLDU5NCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorCisjaW5jbHVkZSAiTGF5ZXJU
cmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWFpblRocmVhZC5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VJRC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVk
ZSAidGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAidGV4bWFw
L1RleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCIK
KyNpbmNsdWRlIDxRRGF0ZVRpbWU+CisjaW5jbHVkZSA8Y2Fpcm8vT3BlbkdMU2hpbXMuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyIHsK
K3B1YmxpYzoKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBEZWxldGVMYXllciwKKyAgICAgICAg
Q3JlYXRlVGlsZSwKKyAgICAgICAgUmVtb3ZlVGlsZSwKKyAgICAgICAgVXBkYXRlVGlsZSwKKyAg
ICAgICAgQ3JlYXRlSW1hZ2UsCisgICAgICAgIERlc3Ryb3lJbWFnZSwKKyAgICAgICAgU3luY0xh
eWVyUGFyYW1ldGVycywKKyAgICAgICAgRmx1c2hMYXllckNoYW5nZXMsCisgICAgICAgIFNldFJv
b3RMYXllcgorICAgIH07CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7Cit9Owor
Cit0ZW1wbGF0ZTxjbGFzcyBNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6
OlR5cGUgbWVzc2FnZVR5cGU+CitjbGFzcyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhE
YXRhIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1lc3NhZ2VUeXBlOyB9CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4gY3JlYXRlKGNvbnN0
IE1lc3NhZ2VEYXRhJiBkYXRhID0gTWVzc2FnZURhdGEoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YShkYXRhKSk7
CisgICAgfQorCisgICAgY29uc3QgTWVzc2FnZURhdGEmIGRhdGEoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTGF5ZXJUcmVlTWVz
c2FnZVRvUmVuZGVyZXJXaXRoRGF0YShjb25zdCBNZXNzYWdlRGF0YSYgZGF0YSkKKyAgICAgICAg
OiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgTWVzc2FnZURhdGEgbV9kYXRhOwor
fTsKKworCituYW1lc3BhY2Ugeworc3RydWN0IENyZWF0ZVRpbGVNZXNzYWdlRGF0YSB7CisgICAg
V2ViTGF5ZXJJRCBsYXllcklEOworICAgIGludCByZW1vdGVUaWxlSUQ7CisgICAgZmxvYXQgc2Nh
bGU7Cit9OworCitzdHJ1Y3QgVXBkYXRlVGlsZU1lc3NhZ2VEYXRhIHsKKyAgICBXZWJMYXllcklE
IGxheWVySUQ7CisgICAgaW50IHJlbW90ZVRpbGVJRDsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3Q7
CisgICAgSW50UmVjdCB0YXJnZXRSZWN0OworICAgIFFJbWFnZSBpbWFnZTsKK307CisKK3N0cnVj
dCBSZW1vdmVUaWxlTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKKyAgICBp
bnQgcmVtb3RlVGlsZUlEOworfTsKKworc3RydWN0IENyZWF0ZUltYWdlTWVzc2FnZURhdGEgewor
ICAgIGludDY0X3QgaW1hZ2VJRDsKKyAgICBRSW1hZ2UgaW1hZ2U7Cit9OworCitzdHJ1Y3QgRGVz
dHJveUltYWdlTWVzc2FnZURhdGEgeworICAgIGludDY0X3QgaW1hZ2VJRDsKK307CisKK3N0cnVj
dCBTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySW5mbyBsYXll
ckluZm87Cit9OworCitzdHJ1Y3QgRW1wdHlNZXNzYWdlRGF0YSB7IH07CitzdHJ1Y3QgRGVsZXRl
TGF5ZXJNZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworfTsKK3N0cnVjdCBT
ZXRSb290TGF5ZXJNZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworfTsKKwor
Y2xhc3MgQ3JlYXRlVGlsZU1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2Fn
ZVRvUmVuZGVyZXJXaXRoRGF0YTxDcmVhdGVUaWxlTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyOjpDcmVhdGVUaWxlPiB7IH07CitjbGFzcyBVcGRhdGVUaWxlTWVzc2FnZQor
ICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPFVwZGF0
ZVRpbGVNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlVwZGF0ZVRpbGU+
IHsgfTsKK2NsYXNzIFJlbW92ZVRpbGVNZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJl
ZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8UmVtb3ZlVGlsZU1lc3NhZ2VEYXRhLCBMYXllclRy
ZWVNZXNzYWdlVG9SZW5kZXJlcjo6UmVtb3ZlVGlsZT4geyB9OworY2xhc3MgQ3JlYXRlSW1hZ2VN
ZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERh
dGE8Q3JlYXRlSW1hZ2VNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkNy
ZWF0ZUltYWdlPiB7IH07CitjbGFzcyBEZXN0cm95SW1hZ2VNZXNzYWdlCisgICAgICAgIDogcHVi
bGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8RGVzdHJveUltYWdlTWVzc2Fn
ZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpEZXN0cm95SW1hZ2U+IHsgfTsKK2Ns
YXNzIEZsdXNoTGF5ZXJDaGFuZ2VzTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVN
ZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPEVtcHR5TWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyOjpGbHVzaExheWVyQ2hhbmdlcz4geyB9OworY2xhc3MgU3luY0xheWVyUGFy
YW1ldGVyc01lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXJXaXRoRGF0YTxTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyOjpTeW5jTGF5ZXJQYXJhbWV0ZXJzPiB7IH07CitjbGFzcyBEZWxldGVMYXll
ck1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRo
RGF0YTxEZWxldGVMYXllck1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6
RGVsZXRlTGF5ZXI+IHsgfTsKK2NsYXNzIFNldFJvb3RMYXllck1lc3NhZ2UKKyAgICAgICAgOiBw
dWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxTZXRSb290TGF5ZXJNZXNz
YWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlNldFJvb3RMYXllcj4geyB9Owor
fQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRl
TGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIG5ld0xheWVy
ID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRoaXMpOworICAgIFRleHR1cmVNYXBw
ZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShuZXdMYXllcik7CisgICAgbm9kZS0+
c2V0SUQobGF5ZXJJRCk7CisgICAgbm9kZS0+c2V0VGlsZU93bmVyc2hpcChUZXh0dXJlTWFwcGVy
Tm9kZTo6RXh0ZXJuYWxseU1hbmFnZWRUaWxlcyk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xh
eWVyKTsKK30KKworTGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkoRHJhd2lu
Z0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKKyAgICA6IG1fYW5pbWF0aW9uVGltZXIoUnVu
TG9vcDo6bWFpbigpLCB0aGlzLCAmTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVXZWJWaWV3KQor
ICAgICwgbV9kcmF3aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVhUHJveHkpCisgICAgLCBtX3Jvb3RM
YXllcklEKDApCit7Cit9CisKK0xheWVyVHJlZUhvc3RQcm94eTo6fkxheWVyVHJlZUhvc3RQcm94
eSgpCit7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmVlbnRyYW50Lgordm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKCFtX3Rl
eHR1cmVNYXBwZXIpCisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6
Y3JlYXRlKCk7CisKKyAgICBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIEdyYXBoaWNzTGF5ZXIq
IGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsKKyAgICBpZiAoIWN1cnJlbnRSb290TGF5
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9U
ZXh0dXJlTWFwcGVyTm9kZShjdXJyZW50Um9vdExheWVyKTsKKworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR0xpbnQgdmlld3BvcnRbNF07CisgICAgZ2xHZXRJbnRlZ2Vy
dihHTF9WSUVXUE9SVCwgdmlld3BvcnQpOworICAgIEludFJlY3Qgdmlld3BvcnRSZWN0KHZpZXdw
b3J0WzBdLCB2aWV3cG9ydFsxXSwgdmlld3BvcnRbMl0sIHZpZXdwb3J0WzNdKTsKKyAgICBtX3Rl
eHR1cmVNYXBwZXItPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKHZpZXdwb3J0WzJdLCB2aWV3cG9y
dFszXSkpOworICAgIG5vZGUtPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgp
KTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICBtX3RleHR1cmVN
YXBwZXItPmJpbmRTdXJmYWNlKDApOworCisgICAgaWYgKGN1cnJlbnRSb290TGF5ZXItPm9wYWNp
dHkoKSAhPSBvcGFjaXR5IHx8IGN1cnJlbnRSb290TGF5ZXItPnRyYW5zZm9ybSgpICE9IG1hdHJp
eCkgeworICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworICAg
ICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKyAgICAgICAgY3Vy
cmVudFJvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Cisg
ICAgfQorCisgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwIG5vZGVWaXN1YWxDb250
ZW50c1JlY3RNYXA7CisgICAgaWYgKG5vZGUtPmNvbGxlY3RWaXNpYmxlQ29udGVudHNSZWN0cyhu
b2RlVmlzdWFsQ29udGVudHNSZWN0TWFwLCB2aWV3cG9ydFJlY3QpKSB7CisgICAgICAgIFRleHR1
cmVNYXBwZXJOb2RlOjpOb2RlUmVjdE1hcDo6aXRlcmF0b3IgZW5kSXRlcmF0b3IgPSBub2RlVmlz
dWFsQ29udGVudHNSZWN0TWFwLmVuZCgpOworICAgICAgICBmb3IgKFRleHR1cmVNYXBwZXJOb2Rl
OjpOb2RlUmVjdE1hcDo6aXRlcmF0b3IgaXQgPSBub2RlVmlzdWFsQ29udGVudHNSZWN0TWFwLmJl
Z2luKCk7IGl0ICE9IGVuZEl0ZXJhdG9yOyArK2l0KSB7CisgICAgICAgICAgICBXZWJMYXllcklE
IGxheWVySUQgPSBpdC0+Zmlyc3QtPmlkKCk7CisgICAgICAgICAgICAvLyBhdm9pZCB1cGRhdGlu
ZyBub24tc3luY2VkIHJvb3QgbGF5ZXIKKyAgICAgICAgICAgIGlmICghbGF5ZXJJRCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBJ
bnRSZWN0KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZv
ckxheWVyKGxheWVySUQsIHZpc2libGVSZWN0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBub2Rl
LT5wYWludCgpOworCisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOworCisgICAg
aWYgKG5vZGUtPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAg
ICAgIHVwZGF0ZVdlYlZpZXcoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0
ZVdlYlZpZXcoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+dXBkYXRlV2ViVmlldygpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvckxh
eWVyKFdlYkxheWVySUQgbGF5ZXJJRCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX2Ry
YXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcihsYXllcklELCByZWN0KSwgbV9k
cmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKworaW50IExheWVyVHJlZUhv
c3RQcm94eTo6cmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKGludCB0aWxlSUQpIGNvbnN0Cit7Cisg
ICAgSGFzaE1hcDxpbnQsIGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlVG9Ob2RlVGls
ZS5maW5kKHRpbGVJRCk7CisgICAgaWYgKGl0ID09IG1fdGlsZVRvTm9kZVRpbGUuZW5kKCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBpdC0+c2Vjb25kOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6c3luY0xheWVyUGFyYW1ldGVycyhjb25zdCBXZWJMYXllckluZm8mIGxh
eWVySW5mbykKK3sKKyAgICBXZWJMYXllcklEIGlkID0gbGF5ZXJJbmZvLmlkOworICAgIGVuc3Vy
ZUxheWVyKGlkKTsKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlk
KTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7CisKKyAgICBsYXllci0+
c2V0TmFtZShsYXllckluZm8ubmFtZSk7CisKKyAgICBsYXllci0+c2V0UmVwbGljYXRlZEJ5TGF5
ZXIobGF5ZXJCeUlEKGxheWVySW5mby5yZXBsaWNhKSk7CisgICAgbGF5ZXItPnNldE1hc2tMYXll
cihsYXllckJ5SUQobGF5ZXJJbmZvLm1hc2spKTsKKworICAgIGxheWVyLT5zZXRQb3NpdGlvbihs
YXllckluZm8ucG9zKTsKKyAgICBsYXllci0+c2V0U2l6ZShsYXllckluZm8uc2l6ZSk7CisgICAg
bGF5ZXItPnNldFRyYW5zZm9ybShsYXllckluZm8udHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0
QW5jaG9yUG9pbnQobGF5ZXJJbmZvLmFuY2hvclBvaW50KTsKKyAgICBsYXllci0+c2V0Q2hpbGRy
ZW5UcmFuc2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0
QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVySW5mby5iYWNrZmFjZVZpc2libGUpOworICAgIGxheWVy
LT5zZXRDb250ZW50c09wYXF1ZShsYXllckluZm8uY29udGVudHNPcGFxdWUpOworICAgIGxheWVy
LT5zZXRDb250ZW50c1JlY3QobGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCk7CisgICAgbGF5ZXItPnNl
dERyYXdzQ29udGVudChsYXllckluZm8uZHJhd3NDb250ZW50KTsKKworICAgIGlmIChsYXllcklu
Zm8uaW1hZ2VVcGRhdGVkKQorICAgICAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVy
SW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKworICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJvb3Qg
bGF5ZXIgY2xpcC4KKyAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8uaXNSb290
TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKKyAgICBsYXllci0+c2V0
T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7CisgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKGxh
eWVySW5mby5wcmVzZXJ2ZXMzRCk7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJl
bjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbmZvLmNoaWxkcmVuLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFdlYkxheWVySUQgY2hpbGRJRCA9IGxheWVySW5mby5jaGlsZHJl
bltpXTsKKyAgICAgICAgR3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5SUQoY2hpbGRJRCk7
CisgICAgICAgIGlmICghY2hpbGQpIHsKKyAgICAgICAgICAgIGNoaWxkID0gY3JlYXRlTGF5ZXIo
Y2hpbGRJRCkubGVha1B0cigpOworICAgICAgICAgICAgbV9sYXllcnMuYWRkKGNoaWxkSUQsIGNo
aWxkKTsKKyAgICAgICAgfQorICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOworICAgIH0K
KyAgICBsYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworCisgICAgaWYgKGxheWVySW5mby5p
c1Jvb3RMYXllciAmJiBtX3Jvb3RMYXllcklEICE9IGlkKQorICAgICAgICBzZXRSb290TGF5ZXJJ
RChpZCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVMYXllcihXZWJMYXll
cklEIGxheWVySUQpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5
ZXJJRCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF5ZXItPnJl
bW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX2xheWVycy5yZW1vdmUobGF5ZXJJRCk7CisgICAgZGVs
ZXRlIGxheWVyOworfQorCisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVMYXllcihX
ZWJMYXllcklEIGlkKQoreworICAgIC8vIFdlIGhhdmUgdG8gbGVhayB0aGUgbmV3IGxheWVyJ3Mg
cG9pbnRlciBhbmQgbWFuYWdlIGl0IG91cnNlbHZlcywKKyAgICAvLyBiZWNhdXNlIE93blB0ciBp
cyBub3QgY29weWFibGUuCisgICAgaWYgKG1fbGF5ZXJzLmZpbmQoaWQpID09IG1fbGF5ZXJzLmVu
ZCgpKQorICAgICAgICBtX2xheWVycy5hZGQoaWQsIGNyZWF0ZUxheWVyKGlkKS5sZWFrUHRyKCkp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdExheWVySUQoV2ViTGF5ZXJJ
RCBsYXllcklEKQoreworICAgIGlmIChsYXllcklEID09IG1fcm9vdExheWVySUQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fcm9vdExheWVySUQgPSBsYXllcklEOworCisgICAgbV9yb290TGF5
ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICBpZiAoIWxheWVySUQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOwor
ICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVyLT5hZGRD
aGlsZChsYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlKFdl
YkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAgZW5zdXJl
TGF5ZXIobGF5ZXJJRCk7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVN
YXBwZXJOb2RlKGxheWVyQnlJRChsYXllcklEKSk7CisKKyAgICBpbnQgbm9kZVRpbGVJRCA9IG5v
ZGUtPmNyZWF0ZUNvbnRlbnRzVGlsZShzY2FsZSk7CisgICAgbV90aWxlVG9Ob2RlVGlsZS5hZGQo
dGlsZUlELCBub2RlVGlsZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnJlbW92
ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQoreworICAgIFRleHR1cmVNYXBw
ZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOwor
ICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IG5vZGVUaWxlSUQgPSBy
ZW1vdGVUaWxlSURUb05vZGVUaWxlSUQodGlsZUlEKTsKKyAgICBpZiAoIW5vZGVUaWxlSUQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG5vZGUtPnJlbW92ZUNvbnRlbnRzVGlsZShub2RlVGlsZUlE
KTsKKyAgICBtX3RpbGVUb05vZGVUaWxlLnJlbW92ZSh0aWxlSUQpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IFFJbWFnZSYgaW1hZ2UpCit7CisgICAgZW5zdXJlTGF5ZXIobGF5ZXJJRCk7CisgICAgVGV4
dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGxheWVyQnlJRChsYXll
cklEKSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgbm9kZVRp
bGVJRCA9IHJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRCh0aWxlSUQpOworICAgIGlmICghbm9kZVRp
bGVJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUUltYWdlIGltYWdlUmVmKGltYWdlKTsKKyAg
ICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisgICAgbm9k
ZS0+c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihub2RlVGlsZUlELCBzb3VyY2VSZWN0LCB0YXJn
ZXRSZWN0LCBpbWFnZVJlZi5iaXRzKCksIEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBj
b25zdCBRSW1hZ2UmIGltYWdlKQoreworICAgIFRpbGVkSW1hZ2UgdGlsZWRJbWFnZTsKKyAgICBz
dGF0aWMgY29uc3QgaW50IFRpbGVEaW1lbnNpb24gPSAxMDI0OworICAgIGJvb2wgaW1hZ2VIYXNB
bHBoYSA9IGltYWdlLmhhc0FscGhhQ2hhbm5lbCgpOworICAgIEludFJlY3QgaW1hZ2VSZWN0KDAs
IDAsIGltYWdlLndpZHRoKCksIGltYWdlLmhlaWdodCgpKTsKKyAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGltYWdlLmhlaWdodCgpOyB5ICs9IFRpbGVEaW1lbnNpb24pIHsKKyAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBpbWFnZS53aWR0aCgpOyB4ICs9IFRpbGVEaW1lbnNpb24pIHsKKyAgICAg
ICAgICAgIFFJbWFnZSBzdWJJbWFnZTsKKyAgICAgICAgICAgIEludFJlY3QgcmVjdCh4LCB5LCBU
aWxlRGltZW5zaW9uLCBUaWxlRGltZW5zaW9uKTsKKyAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0
KGltYWdlUmVjdCk7CisgICAgICAgICAgICBpZiAoUVNpemUocmVjdC5zaXplKCkpID09IGltYWdl
LnNpemUoKSkKKyAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2UuY29weShyZWN0KTsKKyAgICAg
ICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5j
cmVhdGVUZXh0dXJlKCk7CisgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChyZWN0LnNpemUoKSwg
IWltYWdlSGFzQWxwaGEpOworICAgICAgICAgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1h
Z2VIYXNBbHBoYSA/IEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQgOiBCaXRtYXBUZXh0dXJlOjpC
R1JGb3JtYXQsIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVjdC5zaXplKCkpLCBzdWJJbWFn
ZS5iaXRzKCkpOworICAgICAgICAgICAgdGlsZWRJbWFnZS5hZGQocmVjdC5sb2NhdGlvbigpLCB0
ZXh0dXJlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VzLnJlbW92ZShpbWFnZUlEKTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5hZGQo
aW1hZ2VJRCwgdGlsZWRJbWFnZSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0
cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQoreworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VzLnJlbW92ZShpbWFnZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmFzc2ln
bkltYWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFnZUlEKQorewor
ICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllcik7
CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWltYWdlSUQpIHsK
KyAgICAgICAgbm9kZS0+Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGbG9hdFNpemUgc2l6ZShsYXllci0+c2l6ZSgp
KTsKKyAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0KGxheWVyLT5jb250ZW50c1JlY3QoKSk7Cisg
ICAgZmxvYXQgaG9yaXpvbnRhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC53aWR0aCgpIC8gc2l6ZS53
aWR0aCgpOworICAgIGZsb2F0IHZlcnRpY2FsRmFjdG9yID0gY29udGVudHNSZWN0LmhlaWdodCgp
IC8gc2l6ZS5oZWlnaHQoKTsKKyAgICBIYXNoTWFwPGludDY0X3QsIFRpbGVkSW1hZ2U+OjppdGVy
YXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CisgICAg
aWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBUaWxlZEltYWdlOjppdGVyYXRvciBlbmRUaWxlSXRlcmF0b3IgPSBpdC0+c2Vj
b25kLmVuZCgpOworICAgIGZvciAoVGlsZWRJbWFnZTo6aXRlcmF0b3IgdGlsZUl0ID0gaXQtPnNl
Y29uZC5iZWdpbigpOyB0aWxlSXQgIT0gZW5kVGlsZUl0ZXJhdG9yOyArK3RpbGVJdCkgeworICAg
ICAgICBGbG9hdFJlY3Qgc291cmNlUmVjdChGbG9hdFBvaW50KHRpbGVJdC0+Zmlyc3QpLCBGbG9h
dFNpemUodGlsZUl0LT5zZWNvbmQtPnNpemUoKSkpOworICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0
UmVjdChzb3VyY2VSZWN0LngoKSAqIGhvcml6b250YWxGYWN0b3IgKyBjb250ZW50c1JlY3QueCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LnkoKSAqIHZlcnRpY2Fs
RmFjdG9yICsgY29udGVudHNSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c291cmNlUmVjdC53aWR0aCgpICogaG9yaXpvbnRhbEZhY3RvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQoKSAqIHZlcnRpY2FsRmFjdG9yKTsKKyAgICAg
ICAgaW50IG5ld1RpbGVJRCA9IG5vZGUtPmNyZWF0ZUNvbnRlbnRzVGlsZSgxLjApOworICAgICAg
ICBub2RlLT5zZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShuZXdUaWxlSUQsIEludFJlY3Qoc291cmNlUmVjdCksIHRhcmdldFJlY3QsIHRpbGVJdC0+c2Vj
b25kLmdldCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpmbHVzaExh
eWVyQ2hhbmdlcygpCit7CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKEZs
b2F0UmVjdCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmVuc3VyZVJvb3RMYXll
cigpCit7CisgICAgaWYgKG1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisgICAgbV9yb290
TGF5ZXIgPSBjcmVhdGVMYXllcihJbnZhbGlkV2ViTGF5ZXJJRCk7CisgICAgbV9yb290TGF5ZXIt
PnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRl
bnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0Qo
MCwgMCwgMCkpOworCisgICAgLy8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZlIHplcm8g
c2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1pemVkIG91dC4KKyAgICBtX3Jvb3RMYXllci0+c2V0
U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJl
TWFwcGVyR0w6OmNyZWF0ZSgpOworICAgIHRvVGV4dHVyZU1hcHBlck5vZGUobV9yb290TGF5ZXIu
Z2V0KCkpLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jUmVtb3RlQ29udGVudCgpCit7CisgICAgLy8gV2Ug
ZW5xdWV1ZSBtZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMgdGhleSBy
ZXF1aXJlIGFuIGFjdGl2ZSBHTCBjb250ZXh0LgorICAgIGVuc3VyZVJvb3RMYXllcigpOworCisg
ICAgd2hpbGUgKE93blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4gbmV4dE1lc3NhZ2Ug
PSBtX21lc3NhZ2VzVG9SZW5kZXJUaHJlYWQudHJ5R2V0TWVzc2FnZSgpKSB7CisgICAgICAgIHN3
aXRjaCAobmV4dE1lc3NhZ2UtPnR5cGUoKSkgeworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyOjpTZXRSb290TGF5ZXI6IHsKKyAgICAgICAgICAgIGNvbnN0IFNldFJvb3RM
YXllck1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8U2V0Um9vdExheWVyTWVzc2FnZSo+
KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAgICAgc2V0Um9vdExheWVySUQo
ZGF0YS5sYXllcklEKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6RGVsZXRlTGF5ZXI6IHsKKyAgICAgICAg
ICAgIGNvbnN0IERlbGV0ZUxheWVyTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxEZWxl
dGVMYXllck1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAg
IGRlbGV0ZUxheWVyKGRhdGEubGF5ZXJJRCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlN5bmNMYXllclBh
cmFtZXRlcnM6IHsKKyAgICAgICAgICAgIGNvbnN0IFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdl
RGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlKj4obmV4
dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAgICAgICAgICBzeW5jTGF5ZXJQYXJhbWV0ZXJz
KGRhdGEubGF5ZXJJbmZvKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Q3JlYXRlVGlsZTogeworICAgICAg
ICAgICAgY29uc3QgQ3JlYXRlVGlsZU1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8Q3Jl
YXRlVGlsZU1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAg
IGNyZWF0ZVRpbGUoZGF0YS5sYXllcklELCBkYXRhLnJlbW90ZVRpbGVJRCwgZGF0YS5zY2FsZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVl
TWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92ZVRpbGU6IHsKKyAgICAgICAgICAgIGNvbnN0IFJlbW92
ZVRpbGVNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PFJlbW92ZVRpbGVNZXNzYWdlKj4o
bmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAgICAgICAgICByZW1vdmVUaWxlKGRhdGEu
bGF5ZXJJRCwgZGF0YS5yZW1vdGVUaWxlSUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVUaWxl
OiB7CisgICAgICAgICAgICBjb25zdCBVcGRhdGVUaWxlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0
aWNfY2FzdDxVcGRhdGVUaWxlTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOwor
ICAgICAgICAgICAgdXBkYXRlVGlsZShkYXRhLmxheWVySUQsIGRhdGEucmVtb3RlVGlsZUlELCBk
YXRhLnNvdXJjZVJlY3QsIGRhdGEudGFyZ2V0UmVjdCwgZGF0YS5pbWFnZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVu
ZGVyZXI6OkNyZWF0ZUltYWdlOiB7CisgICAgICAgICAgICBjb25zdCBDcmVhdGVJbWFnZU1lc3Nh
Z2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8Q3JlYXRlSW1hZ2VNZXNzYWdlKj4obmV4dE1lc3Nh
Z2UuZ2V0KCkpLT5kYXRhKCk7CisgICAgICAgICAgICBjcmVhdGVJbWFnZShkYXRhLmltYWdlSUQs
IGRhdGEuaW1hZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpEZXN0cm95SW1hZ2U6IHsKKyAgICAgICAg
ICAgIGNvbnN0IENyZWF0ZUltYWdlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxDcmVh
dGVJbWFnZU1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAg
IGRlc3Ryb3lJbWFnZShkYXRhLmltYWdlSUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpGbHVzaExheWVy
Q2hhbmdlczoKKyAgICAgICAgICAgIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnB1
c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG1l
c3NhZ2UpCit7CisgICAgbV9tZXNzYWdlc1RvUmVuZGVyVGhyZWFkLmFwcGVuZChtZXNzYWdlKTsK
KyAgICB1cGRhdGVXZWJWaWV3KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVh
dGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBk
YXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBDcmVhdGVUaWxlTWVzc2FnZURhdGEgZGF0YTsK
KyAgICBkYXRhLmxheWVySUQgPSBsYXllcklEOworICAgIGRhdGEucmVtb3RlVGlsZUlEID0gdGls
ZUlEOworICAgIGRhdGEuc2NhbGUgPSB1cGRhdGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yOworICAg
IHB1c2hVcGRhdGVUb1F1ZXVlKENyZWF0ZVRpbGVNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworICAg
IHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8pOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBp
bnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAg
VXBkYXRlVGlsZU1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0YS5sYXllcklEID0gbGF5ZXJJRDsK
KyAgICBkYXRhLnJlbW90ZVRpbGVJRCA9IHRpbGVJRDsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSh1cGRhdGVJbmZvLmJpdG1hcEhh
bmRsZSk7CisgICAgZGF0YS5pbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCkuY29weSgpOwor
ICAgIGRhdGEuc291cmNlUmVjdCA9IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgdXBkYXRlSW5m
by51cGRhdGVSZWN0Qm91bmRzLnNpemUoKSk7CisgICAgZGF0YS50YXJnZXRSZWN0ID0gdXBkYXRl
SW5mby51cGRhdGVSZWN0Qm91bmRzOworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKFVwZGF0ZVRpbGVN
ZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVt
b3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQoreworICAgIFJlbW92ZVRp
bGVNZXNzYWdlRGF0YSBkYXRhOworICAgIGRhdGEubGF5ZXJJRCA9IGxheWVySUQ7CisgICAgZGF0
YS5yZW1vdGVUaWxlSUQgPSB0aWxlSUQ7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoUmVtb3ZlVGls
ZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBEZWxldGVMYXll
ck1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0YS5sYXllcklEID0gaWQ7CisgICAgcHVzaFVwZGF0
ZVRvUXVldWUoRGVsZXRlTGF5ZXJNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkK
K3sKKyAgICBTZXRSb290TGF5ZXJNZXNzYWdlRGF0YSBkYXRhOworICAgIGRhdGEubGF5ZXJJRCA9
IGlkOworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKFNldFJvb3RMYXllck1lc3NhZ2U6OmNyZWF0ZShk
YXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQ29tcG9zaXRpbmdMYXll
clN0YXRlKGNvbnN0IFdlYkxheWVySW5mbyYgaW5mbykKK3sKKyAgICBTeW5jTGF5ZXJQYXJhbWV0
ZXJzTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySW5mbyA9IGluZm87CisgICAgcHVz
aFVwZGF0ZVRvUXVldWUoU3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJGcmFtZSgpCit7CisgICAg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1lKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgp
LT5wYWdlSUQoKSk7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoRmx1c2hMYXllckNoYW5nZXNNZXNz
YWdlOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSYgaGFuZGxlKQoreworICAgIENyZWF0ZUltYWdlTWVzc2FnZURhdGEgZGF0
YTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZShoYW5kbGUpOworICAgIGRhdGEuaW1hZ2VJRCA9IGtleTsKKyAgICBkYXRhLmltYWdl
ID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKS5jb3B5KCk7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUo
Q3JlYXRlSW1hZ2VNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQorewor
ICAgIERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0YS5pbWFnZUlEID0ga2V5
OworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKERlc3Ryb3lJbWFnZU1lc3NhZ2U6OmNyZWF0ZShkYXRh
KSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3RU
cmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7Cisg
ICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6
TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFq
ZWN0b3J5VmVjdG9yKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2Fs
ZShjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSkKK3sKKyAgICBtX3Zpc2libGVDb250
ZW50c1JlY3QgPSByZWN0OworICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOworICAgIG1fZHJh
d2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKHJlY3QsIHNjYWxlKSwgbV9kcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
cHJvCmluZGV4IDI3NzVlOGEuLjM2YTg1MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCkBAIC0yOSw2ICsyOSw4
IEBAIFdFQktJVDFfU09VUkNFU19TSEFSRURfV0lUSF9XRUJLSVQyID0gXAogV0VCS0lUMl9HRU5F
UkFURURfSEVBREVSUyA9IFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0F1
dGhlbnRpY2F0aW9uTWFuYWdlck1lc3NhZ2VzLmggXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURf
U09VUkNFU19ESVIvRG93bmxvYWRQcm94eU1lc3NhZ2VzLmggXAorICAgICQkV0VCS0lUMl9HRU5F
UkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmggXAorICAgICQkV0VCS0lU
Ml9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCBcCiAg
ICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9OUE9iamVjdE1lc3NhZ2VSZWNlaXZl
ck1lc3NhZ2VzLmggXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvUGx1Z2lu
Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggXApAQCAtNjcsNiArNjks
OCBAQCBXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTID0gXAogICAgICQkV0VCS0lUMl9HRU5FUkFU
RURfU09VUkNFU19ESVIvRG93bmxvYWRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQk
V0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRHJhd2luZ0FyZWFNZXNzYWdlUmVjZWl2ZXIu
Y3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0RyYXdpbmdBcmVhUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKKyAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNf
RElSL0xheWVyVHJlZUhvc3RNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKKyAgICAkJFdFQktJVDJfR0VO
RVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
XAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTlBPYmplY3RNZXNzYWdlUmVj
ZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJD
RVNfRElSL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQk
V0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvUGx1Z2luUHJvY2Vzc01lc3NhZ2VSZWNlaXZl
ci5jcHAgXApAQCAtMTYyLDYgKzE2Niw3IEBAIEhFQURFUlMgKz0gXAogICAgIFNoYXJlZC9XZWJH
cmFwaGljc0NvbnRleHQuaCBcCiAgICAgU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHQuaCBcCiAgICAg
U2hhcmVkL1dlYkltYWdlLmggXAorICAgIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmggXAogICAg
IFNoYXJlZC9XZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmggXAogICAgIFNoYXJlZC9XZWJOdW1iZXIu
aCBcCiAgICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuaCBcCkBAIC0zMTYsNiArMzIx
LDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFcnJv
cnMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50
LmggXAorICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oIFwK
ICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oIFwKICAg
ICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Lmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgg
XApAQCAtMzk5LDYgKzQwNSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFNoYXJlZC9XZWJIaXRUZXN0
UmVzdWx0LmNwcCBcCiAgICAgU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwIFwKICAgICBTaGFy
ZWQvV2ViSW1hZ2UuY3BwIFwKKyAgICBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAgXAogICAg
IFNoYXJlZC9XZWJNb3VzZUV2ZW50LmNwcCBcCiAgICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFt
ZXRlcnMuY3BwIFwKICAgICBTaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAgXApA
QCAtNDg2LDYgKzQ5Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBV
SVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAgXAorICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVI
b3N0UHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuY3Bw
IFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCkBAIC01NjUsNiArNTczLDcgQEAg
U09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNs
aWVudC5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXll
ci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAppbmRleCAyMThmMmZmLi5i
ODAwZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKQEAgLTI1LDEzICsyNSwxMyBAQAog
CiAjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCi0jaW5j
bHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgor
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgogI2luY2x1ZGUgIldl
YlBhZ2UuaCIKICNpbmNsdWRlICJ0ZXh0L0NTdHJpbmcuaCIKICNpbmNsdWRlIDxIYXNoTWFwLmg+
CkBAIC01OCwxMiArNTgsNiBAQCBXZWJHcmFwaGljc0xheWVyKiBXZWJHcmFwaGljc0xheWVyOjps
YXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEIGlkKQogICAgIHJldHVybiBpdC0+c2Vjb25kOwog
fQogCi1zdGF0aWMgVmVjdG9yPFdlYkxheWVySUQ+JiBkZWxldGVkTGF5ZXJJRHMoKQotewotICAg
IHN0YXRpYyBWZWN0b3I8V2ViTGF5ZXJJRD4gbGF5ZXJzOwotICAgIHJldHVybiBsYXllcnM7Ci19
Ci0KIHN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikK
IHsKICAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDog
MDsKQEAgLTc5LDY3ICs3Myw5MSBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6Om5vdGlmeUNoYW5n
ZSgpCiBXZWJHcmFwaGljc0xheWVyOjpXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGll
bnQqIGNsaWVudCkKICAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQogICAgICwgbV9uZWVkc0Rp
c3BsYXkoZmFsc2UpCi0gICAgLCBtX21vZGlmaWVkKGZhbHNlKQorICAgICwgbV9tb2RpZmllZCh0
cnVlKQogICAgICwgbV9jb250ZW50TmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwgbV9oYXNQZW5k
aW5nQW5pbWF0aW9ucyhmYWxzZSkKLSAgICAsIG1fY29udGVudFNjYWxlKDEuZikKKyAgICAsIG1f
aW5VcGRhdGVNb2RlKGZhbHNlKQorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAg
ICwgbV9sYXllclRyZWVUaWxlQ2xpZW50KDApCisgICAgLCBtX21haW5CYWNraW5nU3RvcmUoYWRv
cHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMsIFRpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpKQorI2VuZGlmCiB7Ci0gICAgLy8gU3RhcnRpbmcg
bGF5ZXIgSURzIGZyb20gMTAwMCwgdG8gaGVscCBkZXRlY3QgZmF1bHR5IElEcyBlYXNpbHkuCi0g
ICAgc3RhdGljIFdlYkxheWVySUQgc0lEID0gMTAwMDsKLSAgICBtX2xheWVySW5mby5pZCA9ICsr
c0lEOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0Q29udGVudHNTY2FsZSgxLjApOworICAg
IHN0YXRpYyBXZWJMYXllcklEIHNJRCA9IDE7CisgICAgbV9sYXllckluZm8uaWQgPSBzSUQrKzsK
ICAgICBsYXllckJ5SURNYXAoKS5hZGQoaWQoKSwgdGhpcyk7CiB9CiAKIFdlYkdyYXBoaWNzTGF5
ZXI6On5XZWJHcmFwaGljc0xheWVyKCkKIHsKICAgICBsYXllckJ5SURNYXAoKS5yZW1vdmUoaWQo
KSk7Ci0gICAgZGVsZXRlZExheWVySURzKCkuYXBwZW5kKGlkKCkpOworCisgICAgLy8gVGhpcyB3
b3VsZCB0ZWxsIHRoZSBVSSBwcm9jZXNzIHRvIHJlbGVhc2UgdGhlIGJhY2tpbmcgc3RvcmUuCisg
ICAgc2V0Q29udGVudHNUb0ltYWdlKDApOworCisgICAgaWYgKG1fbGF5ZXJUcmVlVGlsZUNsaWVu
dCkKKyAgICAgICAgbV9sYXllclRyZWVUaWxlQ2xpZW50LT5kaWREZWxldGVMYXllcihpZCgpKTsK
IH0KIAogYm9vbCBXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3Jh
cGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHsKICAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6
c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwotICAgIGlmIChvaykKLSAgICAgICAgbm90aWZ5Q2hhbmdl
KCk7Ci0gICAgcmV0dXJuIG9rOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAg
IFdlYkdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gdG9XZWJHcmFwaGljc0xheWVyKGNoaWxkcmVuW2ld
KTsKKyAgICAgICAgY2hpbGQtPnNldENvbnRlbnRzU2NhbGUobV9jb250ZW50c1NjYWxlKTsKKyAg
ICAgICAgY2hpbGQtPm5vdGlmeUNoYW5nZSgpOworICAgIH0KKyAgICBub3RpZnlDaGFuZ2UoKTsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZChH
cmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChsYXll
cik7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAgICAg
bm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdElu
ZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQgaW5kZXgpCiB7CiAgICAgR3JhcGhpY3NMYXll
cjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBpbmRleCk7CisgICAgdG9XZWJHcmFwaGljc0xheWVy
KGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3Jh
cGhpY3NMYXllciogc2libGluZykKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3Zl
KGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5ub3RpZnlD
aGFuZ2UoKTsKICAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0xheWVy
OjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJs
aW5nKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcp
OworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPm5vdGlmeUNoYW5nZSgpOwogICAgIG5v
dGlmeUNoYW5nZSgpOwogfQogCiBib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChH
cmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpCiB7CiAgICAg
Ym9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgbmV3Q2hpbGQp
OwotCi0gICAgaWYgKG9rKQotICAgICAgICBub3RpZnlDaGFuZ2UoKTsKLSAgICByZXR1cm4gb2s7
CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG5vdGlmeUNoYW5nZSgp
OworICAgIHRvV2ViR3JhcGhpY3NMYXllcihvbGRDaGlsZCktPm5vdGlmeUNoYW5nZSgpOworICAg
IHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPm5vdGlmeUNoYW5nZSgpOworICAgIHJldHVy
biB0cnVlOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKQog
eworICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiBwYXJlbnRMYXllciA9IHRvV2ViR3JhcGhpY3NM
YXllcihwYXJlbnQoKSkpCisgICAgICAgIHBhcmVudExheWVyLT5ub3RpZnlDaGFuZ2UoKTsKICAg
ICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7CisKICAgICBub3RpZnlDaGFuZ2Uo
KTsKIH0KIApAQCAtMjc0LDEzICsyOTIsMjggQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1v
dmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogewogfQogCit2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXRDb250
ZW50c1RvSW1hZ2UoMCk7CisgICAgc2V0Q29udGVudHNUb0ltYWdlKG1faW1hZ2UuZ2V0KCkpOwor
fQorCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1h
Z2UpCiB7Ci0gICAgaWYgKGltYWdlID09IG1faW1hZ2UuZ2V0KCkpCisgICAgaWYgKGltYWdlID09
IG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBj
bGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCk7CisgICAgaWYgKCFjbGllbnQpCiAgICAgICAg
IHJldHVybjsKIAorICAgIC8vIFdlIGFkb3B0IGZpcnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNh
bWUgZnJhbWUgLSB0aGF0IHdheSB3ZSBhdm9pZCBkZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRo
ZSBpbWFnZS4KKyAgICBpbnQ2NF90IG5ld0lEID0gY2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0
b3JlKGltYWdlKTsKKyAgICBjbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVy
SW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAgICBpZiAobmV3SUQgPT0gbV9sYXllckluZm8u
aW1hZ2VCYWNraW5nU3RvcmVJRCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbGF5ZXJJbmZvLmlt
YWdlQmFja2luZ1N0b3JlSUQgPSBuZXdJRDsKICAgICBtX2ltYWdlID0gaW1hZ2U7Ci0gICAgc2V0
TmVlZHNEaXNwbGF5KCk7CisgICAgbV9sYXllckluZm8uaW1hZ2VVcGRhdGVkID0gdHJ1ZTsKICAg
ICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOwogICAgIG5vdGlmeUNo
YW5nZSgpOwogfQpAQCAtMzAxLDUwICszMzQsMjkgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIAogdm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1
ZTsKLSAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0
KCkpKSk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX25lZWRzRGlzcGxheVJlY3QudW5pdGUo
cmVjdCk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5pbnZhbGlkYXRlKEludFJlY3QocmVjdCkp
OwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENv
bnRlbnRzTmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQogV2Vi
TGF5ZXJJRCBXZWJHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGF5
ZXJJbmZvLmlkOwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZFN5bmNocm9uaXplKCkK
K3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgbV9tb2RpZmll
ZCA9IGZhbHNlOwotICAgIG1fbmVlZHNEaXNwbGF5UmVjdCA9IEZsb2F0UmVjdCgpOwotICAgIGlm
IChtX2hhc1BlbmRpbmdBbmltYXRpb25zKQotICAgICAgICBub3RpZnlBbmltYXRpb25TdGFydGVk
KFdURjo6Y3VycmVudFRpbWUoKSk7Ci0gICAgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA9IGZhbHNl
OwotfQotCi1jb25zdCBXZWJMYXllckluZm8mIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVySW5mbygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJJbmZvOwotfQotCi12b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKCkKLXsKLSAgICBzeW5jQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0
YXRlKCk7CisgICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3Qp
OwogICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgcmVwbGljYUxheWVyKCktPnN5bmND
b21wb3NpdGluZ1N0YXRlKCk7CisgICAgICAgIHJlcGxpY2FMYXllcigpLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZShyZWN0KTsKICAgICBpZiAobWFza0xheWVyKCkpCi0gICAgICAgIG1hc2tMYXllcigp
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgICAgICBtYXNrTGF5ZXIoKS0+c3luY0NvbXBv
c2l0aW5nU3RhdGUocmVjdCk7CisgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJP
bmx5KCk7CiB9CiAKIFdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGlj
c0xheWVyKiBsYXllcikKQEAgLTM1MiwzMCArMzY0LDE5IEBAIFdlYkdyYXBoaWNzTGF5ZXIqIHRv
V2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8V2ViR3JhcGhpY3NMYXllcio+KGxheWVyKTsKIH0KIAotRmxvYXRSZWN0IFdlYkdyYXBo
aWNzTGF5ZXI6Om5lZWRzRGlzcGxheVJlY3QoKSBjb25zdAotewotICAgIEZsb2F0UmVjdCByZWN0
ID0gRmxvYXRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOwotICAg
IGlmICghbV9uZWVkc0Rpc3BsYXkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KG1fbmVlZHNEaXNw
bGF5UmVjdCk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLVZlY3RvcjxXZWJLaXQ6OldlYkxheWVy
SUQ+IFdlYkdyYXBoaWNzTGF5ZXI6OnRha2VMYXllcnNUb0RlbGV0ZSgpCi17Ci0gICAgVmVjdG9y
PFdlYktpdDo6V2ViTGF5ZXJJRD4gbGF5ZXJzID0gZGVsZXRlZExheWVySURzKCk7Ci0gICAgZGVs
ZXRlZExheWVySURzKCkuY2xlYXIoKTsKLSAgICByZXR1cm4gbGF5ZXJzOwotfQotCiB2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiB7
CisgICAgaWYgKCFtX2xheWVyVHJlZVRpbGVDbGllbnQpCisgICAgICAgIG1fbGF5ZXJUcmVlVGls
ZUNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKTsKKyAgICB1cGRhdGVDb250ZW50QnVmZmVy
cygpOworCiAgICAgbV9sYXllckluZm8ubmFtZSA9IG5hbWUoKTsKICAgICBtX2xheWVySW5mby5h
bmNob3JQb2ludCA9IGFuY2hvclBvaW50KCk7CiAgICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNp
YmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFu
c2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOwogICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3Bh
cXVlID0gY29udGVudHNPcGFxdWUoKTsKICAgICBtX2xheWVySW5mby5jb250ZW50c1JlY3QgPSBj
b250ZW50c1JlY3QoKTsKLSAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRl
bnQoKTsKKyAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKSB8fCBt
X2ltYWdlOwogICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVySUQobWFza0xheWVyKCkp
OwogICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7CiAgICAg
bV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKQEAgLTM4MywxMjIgKzM4NCwxNTUgQEAg
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKQogICAgIG1fbGF5ZXJJbmZvLnBvcyA9IHBvc2l0aW9uKCk7CiAgICAgbV9sYXllckluZm8u
cHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOwogICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0
b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBGbG9h
dFNpemUoc2l6ZSgpLndpZHRoKCkgKiBtX2NvbnRlbnRTY2FsZSwgc2l6ZSgpLmhlaWdodCgpICog
bV9jb250ZW50U2NhbGUpOworICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBzaXplKCk7CiAgICAgbV9s
YXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAgbV9jb250ZW50TmVlZHNEaXNw
bGF5ID0gZmFsc2U7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uY2xlYXIoKTsKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKICAgICAgICAgbV9s
YXllckluZm8uY2hpbGRyZW4uYXBwZW5kKHRvV2ViTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CisK
KyAgICBtX2xheWVyVHJlZVRpbGVDbGllbnQtPmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5
ZXIobV9sYXllckluZm8pOworICAgIG1fbW9kaWZpZWQgPSBmYWxzZTsKKyAgICBtX2xheWVySW5m
by5pbWFnZVVwZGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAobV9oYXNQZW5kaW5nQW5pbWF0aW9ucykK
KyAgICAgICAgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChXVEY6OmN1cnJlbnRUaW1lKCkpOworICAg
IG1faGFzUGVuZGluZ0FuaW1hdGlvbnMgPSBmYWxzZTsKIH0KIAotc3RhdGljIFZlY3RvcjxGbG9h
dFJlY3Q+IGRpdmlkZUludG9UaWxlcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisjaWYgRU5BQkxF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2lu
Z1N0b3JlUGFpbnRCZWdpbigpCiB7Ci0gICAgVmVjdG9yPEZsb2F0UmVjdD4gdGlsZXM7Ci0gICAg
Zm9yIChmbG9hdCB5ID0gcmVjdC55KCk7IHkgPCByZWN0Lm1heFkoKTsgeSArPSBnVGlsZURpbWVu
c2lvbikgewotICAgICAgICBmb3IgKGZsb2F0IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgp
OyB4ICs9IGdUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgdGlsZSh4LCB5
LCBnVGlsZURpbWVuc2lvbiwgZ1RpbGVEaW1lbnNpb24pOwotICAgICAgICAgICAgdGlsZS5pbnRl
cnNlY3QocmVjdCk7Ci0gICAgICAgICAgICB0aWxlcy5hcHBlbmQodGlsZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIHRpbGVzOwogfQogCi1zdGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9z
aXRpbmdJbmZvRm9yVGhpc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBXZWJMYXllclRyZWVJ
bmZvJiBvdXRJbmZvLCBWZWN0b3I8V2ViR3JhcGhpY3NMYXllcio+JiBvdXRMYXllcnMpCit2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUpCiB7Ci0gICAg
V2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpOwotICAg
IGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWxheWVyLT5pc01vZGlmaWVk
KCkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7
CisgICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHRo
aXMtPmNoaWxkcmVuKClbaV0pOworICAgICAgICBsYXllci0+c2V0Q29udGVudHNTY2FsZShzY2Fs
ZSk7CisgICAgfQorCisgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisgICAgaWYgKG1fbWFp
bkJhY2tpbmdTdG9yZSAmJiBtX21haW5CYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSA9PSBz
Y2FsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgb3V0TGF5ZXJzLmFwcGVuZChsYXllcik7Ci0g
ICAgb3V0SW5mby5sYXllcnMuYXBwZW5kKGxheWVyLT5sYXllckluZm8oKSk7CisgICAgbm90aWZ5
Q2hhbmdlKCk7CisKKyAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlID0gbV9tYWluQmFja2luZ1N0
b3JlLnJlbGVhc2UoKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUgPSBhZG9wdFB0cihuZXcgVGls
ZWRCYWNraW5nU3RvcmUodGhpcywgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZDo6
Y3JlYXRlKHRoaXMpKSk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxl
KHNjYWxlKTsKK30KIAotICAgIFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvID0gb3V0SW5mby5sYXll
cnNbb3V0SW5mby5sYXllcnMuc2l6ZSgpIC0gMV07Ci0gICAgaWYgKGxheWVyLT5pbWFnZSgpKQot
ICAgICAgICBsYXllckluZm8uZHJhd3NDb250ZW50ID0gdHJ1ZTsKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c2V0Um9vdExheWVyKGJvb2wgaXNSb290KQoreworICAgIG1fbGF5ZXJJbmZvLmlzUm9v
dExheWVyID0gaXNSb290OworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxv
YXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNl
dFZpc2libGVSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKK30KKwordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZXRWaXNpYmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBtX3Zpc2libGVDb250ZW50UmVjdCA9IHJlY3Q7CisgICAgbm90aWZ5Q2hh
bmdlKCk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5hZGp1c3RWaXNpYmxlUmVjdCgpOwogfQog
Ci1zdGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkoR3JhcGhpY3NM
YXllciogcm9vdExheWVyLCBXZWJMYXllclRyZWVJbmZvJiBvdXRJbmZvLCBWZWN0b3I8V2ViR3Jh
cGhpY3NMYXllcio+JiBvdXRMYXllcnMpCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIGlmICghcm9vdExheWVyKQorICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOworICAgIG1fbW9kaWZpZWQgPSB0cnVlOworICAgIHBhaW50R3JhcGhpY3NM
YXllckNvbnRlbnRzKCpjb250ZXh0LCByZWN0KTsKK30KIAotICAgIGNvbGxlY3RDb21wb3NpdGlu
Z0luZm9Gb3JUaGlzTGF5ZXIocm9vdExheWVyLCBvdXRJbmZvLCBvdXRMYXllcnMpOwotICAgIGNv
bGxlY3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIocm9vdExheWVyLT5tYXNrTGF5ZXIoKSwg
b3V0SW5mbywgb3V0TGF5ZXJzKTsKLSAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZl
bHkocm9vdExheWVyLT5yZXBsaWNhTGF5ZXIoKSwgb3V0SW5mbywgb3V0TGF5ZXJzKTsKK3ZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8
SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKK3sKK30KIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcm9vdExheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQotICAgICAgICBjb2xsZWN0Q29t
cG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkocm9vdExheWVyLT5jaGlsZHJlbigpW2ldLCBvdXRJbmZv
LCBvdXRMYXllcnMpOworYm9vbCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVw
ZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW5VcGRhdGVNb2RlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKFdlYkxheWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9
IGxheWVyVHJlZVRpbGVDbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudC0+bGF5ZXJUcmVl
VGlsZVVwZGF0ZXNBbGxvd2VkKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnNlbmRMYXllcnNUb1VJUHJvY2VzcyhXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiByb290TGF5ZXIsIFdlYlBhZ2UqIHdlYlBhZ2UpCitJbnRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6
OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkKIHsKLSAgICB3ZWJQYWdlLT5sYXlvdXRJ
Zk5lZWRlZCgpOwotICAgIHdlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkt
PnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7Ci0gICAgV2ViTGF5ZXJU
cmVlSW5mbyBjb21wb3NpdGluZ0luZm87Ci0gICAgY29tcG9zaXRpbmdJbmZvLnJvb3RMYXllcklE
ID0gcm9vdExheWVyID8gdG9XZWJHcmFwaGljc0xheWVyKHJvb3RMYXllciktPmlkKCkgOiAwOwot
ICAgIGNvbXBvc2l0aW5nSW5mby5jb250ZW50U2NhbGUgPSAxLjA7Ci0gICAgY29tcG9zaXRpbmdJ
bmZvLmRlbGV0ZWRMYXllcklEcyA9IFdlYkdyYXBoaWNzTGF5ZXI6OnRha2VMYXllcnNUb0RlbGV0
ZSgpOwotICAgIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4gbGF5ZXJzOwotICAgIGlmIChyb290
TGF5ZXIpCi0gICAgICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseShyb290TGF5
ZXIsIGNvbXBvc2l0aW5nSW5mbywgbGF5ZXJzKTsKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gSW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgo
KSwgc2l6ZSgpLmhlaWdodCgpKTsKK30KIAotICAgIGlmIChjb21wb3NpdGluZ0luZm8uZGVsZXRl
ZExheWVySURzLmlzRW1wdHkoKSAmJiBjb21wb3NpdGluZ0luZm8ubGF5ZXJzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOworSW50UmVjdCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdT
dG9yZVZpc2libGVSZWN0KCkKK3sKKyAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudFJlY3Q7Cit9
CiAKLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpTeW5jQ29t
cG9zaXRpbmdMYXllcnMoY29tcG9zaXRpbmdJbmZvKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxheWVycy5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyc1tpXTsKLSAgICAgICAgRmxvYXRSZWN0IHVwZGF0ZVJlY3QgPSBsYXllci0+
bmVlZHNEaXNwbGF5UmVjdCgpOwotCi0gICAgICAgIGxheWVyLT5kaWRTeW5jaHJvbml6ZSgpOwot
Ci0gICAgICAgIGlmICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gZGlyZWN0SW1hZ2UgPSBsYXllci0+aW1hZ2UoKTsK
LSAgICAgICAgaWYgKGRpcmVjdEltYWdlKQotICAgICAgICAgICAgdXBkYXRlUmVjdCA9IGxheWVy
LT5jb250ZW50c1JlY3QoKTsKLSAgICAgICAgZWxzZSBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRp
bGVSZWN0cyA9IGRpdmlkZUludG9UaWxlcyh1cGRhdGVSZWN0KTsKLSAgICAgICAgZm9yIChzaXpl
X3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwgdGlsZVJlY3RzLnNpemUoKTsgKyt0aWxlSW5k
ZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QgPSB0aWxlUmVjdHNb
dGlsZUluZGV4XTsKLSAgICAgICAgICAgIEludFJlY3QgZW5jbG9zaW5nVXBkYXRlUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QodGlsZVJlY3QpOwotCi0gICAgICAgICAgICBXZWJMYXllclVwZGF0ZUlu
Zm8gY2h1bmsoZW5jbG9zaW5nVXBkYXRlUmVjdCk7Ci0gICAgICAgICAgICBjaHVuay5sYXllcklE
ID0gdWludDMyX3QobGF5ZXItPmlkKCkpOwotICAgICAgICAgICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoY2h1bmsucmVj
dC5zaXplKCksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7Ci0gICAgICAgICAgICBp
ZiAoIWJpdG1hcCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICgh
Yml0bWFwLT5jcmVhdGVIYW5kbGUoY2h1bmsuYml0bWFwSGFuZGxlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgICAgIFFJbWFnZSB0aWxlSW1h
Z2UgPSBiaXRtYXAtPmNyZWF0ZVFJbWFnZSgpOwotICAgICAgICAgICAgdGlsZUltYWdlLmZpbGwo
MCk7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmdGls
ZUltYWdlKTsKLSAgICAgICAgICAgICAgICBwYWludGVyLnRyYW5zbGF0ZSgtdGlsZVJlY3QueCgp
LCAtdGlsZVJlY3QueSgpKTsKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4
dCgmcGFpbnRlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGRpcmVjdEltYWdlKQotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShkaXJlY3RJbWFnZS5nZXQoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgbGF5ZXItPmNvbnRlbnRzUmVjdCgpLCBGbG9hdFJlY3QoMCwgMCwgZGlyZWN0
SW1hZ2UtPndpZHRoKCksIGRpcmVjdEltYWdlLT5oZWlnaHQoKSkpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRl
bnRzKGNvbnRleHQsIGVuY2xvc2luZ1VwZGF0ZVJlY3QpOwotICAgICAgICAgICAgfQotI2VuZGlm
CitDb2xvciBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hpdGUg
OiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAKLSAgICAgICAgICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkRyYXdpbmdBcmVhUHJveHk6OlVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50KGNodW5r
KSk7Ci0gICAgICAgIH0KK30KK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZShpbnQg
dGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIG1fbW9kaWZpZWQg
PSB0cnVlOworICAgIGlmIChXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBsYXllclRy
ZWVUaWxlQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQs
IHVwZGF0ZUluZm8pOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUoaW50
IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBtX21vZGlmaWVk
ID0gdHJ1ZTsKKyAgICBpZiAoV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0gbGF5ZXJU
cmVlVGlsZUNsaWVudCgpKQorICAgICAgICBjbGllbnQtPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlE
LCB1cGRhdGVJbmZvKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKGlu
dCB0aWxlSUQpCit7CisgICAgbV9tb2RpZmllZCA9IHRydWU7CisgICAgaWYgKFdlYkxheWVyVHJl
ZVRpbGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKSkKKyAgICAgICAgY2xp
ZW50LT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSgpCit7CisgICAgbV9tYWluQmFja2luZ1N0
b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hp
bGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9
IHRvV2ViR3JhcGhpY3NMYXllcih0aGlzLT5jaGlsZHJlbigpW2ldKTsKKyAgICAgICAgbGF5ZXIt
PnVwZGF0ZVRpbGVCdWZmZXJzUmVjdXJzaXZlbHkoKTsKICAgICB9CiB9CiAKK1dlYkxheWVyVHJl
ZVRpbGVDbGllbnQqIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVyVHJlZVRpbGVDbGllbnQoKSBjb25z
dAoreworICAgIGlmIChtX2xheWVyVHJlZVRpbGVDbGllbnQpCisgICAgICAgIHJldHVybiBtX2xh
eWVyVHJlZVRpbGVDbGllbnQ7CisgICAgV2ViR3JhcGhpY3NMYXllciogcGFyZW50ID0gdG9XZWJH
cmFwaGljc0xheWVyKHRoaXMtPnBhcmVudCgpKTsKKyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIHBhcmVudC0+bGF5ZXJUcmVlVGlsZUNsaWVudCgpOworfQor
Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKCkKK3sKKyAgICBp
ZiAoIWRyYXdzQ29udGVudCgpIHx8IG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJM
YXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCk7CisgICAg
aWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2luVXBkYXRlTW9kZSA9IHRydWU7
CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOworICAgIG1faW5V
cGRhdGVNb2RlID0gZmFsc2U7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgUGFzc093blB0cjxHcmFw
aGljc0xheWVyPiBjcmVhdGVXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNs
aWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYkdyYXBoaWNzTGF5ZXIoY2xpZW50
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCmluZGV4IGFkNjAyMWUuLmM1ODFiNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NM
YXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
R3JhcGhpY3NMYXllci5oCkBAIC0yNywxOSArMjcsNDAgQEAKICNpbmNsdWRlICJJbnRTaXplLmgi
CiAjaW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2lu
Y2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVD
bGllbnQuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCIKICNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKICNp
bmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNs
YXNzIFdlYlBhZ2U7CisKK2NsYXNzIFdlYkxheWVyVHJlZVRpbGVDbGllbnQgeworcHVibGljOgor
ICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwg
Y29uc3QgVXBkYXRlSW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJM
YXllcklELCBpbnQgdGlsZUlEKSA9IDA7CisgICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVV
cGRhdGVzQWxsb3dlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFn
ZUJhY2tpbmdTdG9yZShJbWFnZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdl
QmFja2luZ1N0b3JlKGludDY0X3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRpZERlbGV0ZUxheWVyKFdlYkxheWVySUQpID0gMDsKK307CiB9CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR3JhcGhpY3NMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpH
cmFwaGljc0xheWVyIHsKK2NsYXNzIFdlYkdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6
R3JhcGhpY3NMYXllcgorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICAgICAg
ICAgICAgICAgICAgICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAgICAgICAg
ICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGls
ZUNsaWVudAorI2VuZGlmCit7CiBwdWJsaWM6CiAgICAgV2ViR3JhcGhpY3NMYXllcihHcmFwaGlj
c0xheWVyQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+V2ViR3JhcGhpY3NMYXllcigpOwpAQCAtNzMs
MTMgKzk0LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHZv
aWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgc2V0
Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5n
U3RhdGUoKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0Jik7
CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZs
b2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3Qg
RmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOworICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wpOwogCiAgICAgV2ViS2l0
OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJMYXllckluZm8m
IGxheWVySW5mbygpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0KCkgY29u
c3Q7Ci0gICAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IHRha2VMYXllcnNUb0Rl
bGV0ZSgpOwogICAgIHN0YXRpYyBXZWJHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViS2l0OjpX
ZWJMYXllcklEKTsKICAgICBib29sIGlzTW9kaWZpZWQoKSBjb25zdCB7IHJldHVybiBtX21vZGlm
aWVkOyB9CiAgICAgdm9pZCBkaWRTeW5jaHJvbml6ZSgpOwpAQCAtODcsMjEgKzEwOCw1MSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSk7CiAKICAgICBz
dGF0aWMgdm9pZCBpbml0RmFjdG9yeSgpOwotICAgIHN0YXRpYyB2b2lkIHNlbmRMYXllcnNUb1VJ
UHJvY2VzcyhXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViS2l0OjpXZWJQYWdlKik7CisKKyNp
ZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNs
aWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRF
bmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7CisgICAgdmlydHVhbCBib29s
IHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIElu
dFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKKyAgICB2aXJ0dWFsIEludFJl
Y3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOworICAgIHZpcnR1YWwgQ29sb3IgdGls
ZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKworICAgIC8vIFRpbGVkQmFj
a2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGlu
dCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpOworCisgICAgdm9pZCBzZXRMYXllclRy
ZWVUaWxlQ2xpZW50KFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50KSB7IG1f
bGF5ZXJUcmVlVGlsZUNsaWVudCA9IGNsaWVudDsgfQorICAgIFdlYktpdDo6V2ViTGF5ZXJUcmVl
VGlsZUNsaWVudCogbGF5ZXJUcmVlVGlsZUNsaWVudCgpIGNvbnN0OworCisgICAgYm9vbCBpc1Jl
YWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVRpbGVCdWZmZXJz
UmVjdXJzaXZlbHkoKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOworICAgIHZv
aWQgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyNlbmRpZgogCiBwcml2YXRlOgogICAgIFdlYktp
dDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwotICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcD4gbV9iYWNraW5nU3RvcmU7CisgICAgV2ViS2l0OjpXZWJMYXllclRyZWVUaWxlQ2xp
ZW50KiBtX2xheWVyVGlsZUNsaWVudDsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAg
RmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKLSAgICBib29sIG1fbmVlZHNEaXNwbGF5Owot
ICAgIGJvb2wgbV9tb2RpZmllZDsKLSAgICBib29sIG1fY29udGVudE5lZWRzRGlzcGxheTsKLSAg
ICBib29sIG1faGFzUGVuZGluZ0FuaW1hdGlvbnM7Ci0KLSAgICBmbG9hdCBtX2NvbnRlbnRTY2Fs
ZTsKKyAgICBJbnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRSZWN0OworICAgIGJvb2wgbV9uZWVkc0Rp
c3BsYXkgOiAxOworICAgIGJvb2wgbV9tb2RpZmllZCA6IDE7CisgICAgYm9vbCBtX2NvbnRlbnRO
ZWVkc0Rpc3BsYXkgOiAxOworICAgIGJvb2wgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA6IDE7Cisg
ICAgYm9vbCBtX2luVXBkYXRlTW9kZSA6IDI7CiAKICAgICB2b2lkIG5vdGlmeUNoYW5nZSgpOwor
CisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgV2ViS2l0OjpXZWJMYXllclRy
ZWVUaWxlQ2xpZW50KiBtX2xheWVyVHJlZVRpbGVDbGllbnQ7CisgICAgT3duUHRyPFdlYkNvcmU6
OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7CisgICAgT3duUHRyPFdlYkNv
cmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOworICAgIGZsb2F0
IG1fY29udGVudHNTY2FsZTsKKyNlbmRpZgogfTsKIAogV2ViR3JhcGhpY3NMYXllciogdG9XZWJH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggNTJmZGRkZC4uZDg3MGViMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTc0
LDEwICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VP
dmVybGF5KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXll
cihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9z
aXRpbmdMYXllcnMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVI
b3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqKSA9IDA7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
SW1wbC5jcHAKaW5kZXggOTdmZjgyNy4uN2RkN2M4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKQEAgLTY3Myw1ICs2
NzMsMTMgQEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpc3BsYXkoVXBkYXRlSW5mbyYgdXBkYXRl
SW5mbykKICAgICBtX2xhc3REaXNwbGF5VGltZSA9IGN1cnJlbnRUaW1lKCk7CiB9CiAKKyNpZiBF
TkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQordm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2Fn
ZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKK3sKKyAgICBpZiAobV9s
YXllclRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY2VpdmVMYXllclRy
ZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7Cit9CisjZW5k
aWYKKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaAppbmRleCBjYzhhODA1Li4zNWIyMDg2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhSW1wbC5oCkBAIC03MSw2ICs3MSwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRhdGUoY29uc3QgV2luZG93R2VvbWV0cnkmKTsK
ICNlbmRpZgogCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhv
c3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciopOworI2VuZGlmCisKICAgICAvLyBDb3JlSVBDIG1lc3NhZ2Ug
aGFuZGxlcnMuCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2
NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJvb2wgcmVzcG9uZEltbWVkaWF0ZWx5LCBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNjcm9sbE9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhv
c3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
Y3BwCmluZGV4IGRhNDJhZTYuLjAzMWMzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAj
ZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQpICYmIFVTRShURVhUVVJFX01BUFBFUikK
KyNpbmNsdWRlICJxdC9MYXllclRyZWVIb3N0UXQuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NCw2ICs0OCw4IEBAIFBhc3NS
ZWZQdHI8TGF5ZXJUcmVlSG9zdD4gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBh
Z2UpCiAgICAgcmV0dXJuIExheWVyVHJlZUhvc3RDQU1hYzo6Y3JlYXRlKHdlYlBhZ2UpOwogI2Vs
aWYgUExBVEZPUk0oV0lOKSAmJiBIQVZFKFdLUUNBKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0
Q0FXaW46OmNyZWF0ZSh3ZWJQYWdlKTsKKyNlbGlmIFBMQVRGT1JNKFFUKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCisgICAgcmV0dXJuIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKHdlYlBhZ2UpOwog
I2Vsc2UKICAgICByZXR1cm4gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKaW5kZXggNjdjODA3Yi4uNTFmOTkyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
CkBAIC0yNiwxMyArMjYsMjAgQEAKICNpZm5kZWYgTGF5ZXJUcmVlSG9zdF9oCiAjZGVmaW5lIExh
eWVyVHJlZUhvc3RfaAogCisjaW5jbHVkZSA8Q29yZUlQQy9NZXNzYWdlSUQuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKK25hbWVz
cGFjZSBDb3JlSVBDIHsKK2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIENvbm5lY3Rpb247
Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnRSZWN0OwotICAgIGNsYXNz
IEludFNpemU7Ci0gICAgY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIEZsb2F0UG9pbnQ7Citj
bGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7CiB9CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNzIsNiArNzksMTQgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5k
ZXJpbmcoKSB7IH0KIAorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHZpcnR1
YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiwgZmxvYXQgc2NhbGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVu
dFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4
dEZyYW1lKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRhdGUoY29uc3QgV2luZG93R2Vv
bWV0cnkmKSA9IDA7CiAjZW5kaWYKQEAgLTgwLDYgKzk1LDExIEBAIHByb3RlY3RlZDoKICAgICBl
eHBsaWNpdCBMYXllclRyZWVIb3N0KFdlYlBhZ2UqKTsKIAogICAgIFdlYlBhZ2UqIG1fd2ViUGFn
ZTsKKworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgYm9vbCBtX3dhaXRp
bmdGb3JVSVByb2Nlc3M7CisjZW5kaWYKIH07CiAKICNpZiAhUExBVEZPUk0oV0lOKSAmJiAhUExB
VEZPUk0oUVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
TGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjc1ZjE0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMwIEBA
CisjIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisj
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFC
TEUoVElMRURfQkFDS0lOR19TVE9SRSkKK21lc3NhZ2VzIC0+IExheWVyVHJlZUhvc3QgeworICAg
IFNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVyKGludCBsYXllcklELCBXZWJDb3JlOjpJbnRS
ZWN0IHZpc2libGVDb250ZW50UmVjdCkKKyAgICBTZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0
b3J5VmVjdG9yKFdlYkNvcmU6OkZsb2F0UG9pbnQgdHJhamVjdG9yeVZlY3RvcnkpCisgICAgU2V0
VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoV2ViQ29yZTo6SW50UmVjdCBjb250ZW50UmVjdCwg
ZmxvYXQgc2NhbGUpCisgICAgUmVuZGVyTmV4dEZyYW1lKCkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3Bw
CmluZGV4IGZhYTZjZGQuLmU3MjA4YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAKQEAgLTE3Nyw2ICsxNzcsMTAg
QEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhOjpyZW1vdmVUaWxlKGludCB0aWxlSUQpCiAgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpSZW1vdmVUaWxlKHRpbGVJ
RCkpOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBUaWxlZERy
YXdpbmdBcmVhOjpkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqIGFyZ3VtZW50cykgeyB9CisjZW5kaWYKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCisK
ICNlbmRpZiAvLyBUSUxFRF9CQUNLSU5HX1NUT1JFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaAppbmRleCBlZDEzZDJhLi41ZWI3
OWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRE
cmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxl
ZERyYXdpbmdBcmVhLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nTGF5ZXJzKCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29y
ZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKICNlbmRpZgogCiBw
cml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CmluZGV4IDU1ZjVlZmUuLmYxOWI2YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTIxNTQsNiArMjE1NCwxNCBAQCB2b2lkIFdlYlBhZ2U6
OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJ
UEM6Ok1lc3NhZwogICAgICAgICAgICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZURyYXdpbmdB
cmVhTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVz
c2FnZUNsYXNzTGF5ZXJUcmVlSG9zdD4oKSkgeworICAgICAgICBpZiAobV9kcmF3aW5nQXJlYSkK
KyAgICAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2Fn
ZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChtZXNzYWdl
SUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzV2ViSW5zcGVjdG9yPigpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
Y3BwCmluZGV4IDU3OGFlMDguLmZkZjIyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0yNSw4ICsy
NSw0MTQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UXQuaCIKKworI2luY2x1
ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUlE
LmgiCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
UGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKFdlYlBh
Z2UqIHdlYlBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRyZWVIb3N0UXQo
d2ViUGFnZSkpOworfQorCitMYXllclRyZWVIb3N0UXQ6On5MYXllclRyZWVIb3N0UXQoKQorewor
fQorCitMYXllclRyZWVIb3N0UXQ6OkxheWVyVHJlZUhvc3RRdChXZWJQYWdlKiB3ZWJQYWdlKQor
ICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQorICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxl
ZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyNpZiBFTkFCTEUoVElM
RURfQkFDS0lOR19TVE9SRSkKKyAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyhmYWxzZSkKKyAg
ICAsIG1fc3VzcGVuZGVkKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3Nob3VsZFN5bmNGcmFtZShm
YWxzZSkKKyAgICAsIG1fc2hvdWxkU3luY1Jvb3RMYXllcih0cnVlKQorICAgICwgbV9sYXllckZs
dXNoVGltZXIodGhpcywgJkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCisg
ICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQoreworICAgIC8vIENyZWF0
ZSBhIHJvb3QgbGF5ZXIuCisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUo
dGhpcyk7CisgICAgV2ViR3JhcGhpY3NMYXllciogd2ViUm9vdExheWVyID0gdG9XZWJHcmFwaGlj
c0xheWVyKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICB3ZWJSb290TGF5ZXItPnNldFJvb3RMYXll
cih0cnVlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkxheWVy
VHJlZUhvc3RRdCByb290IGxheWVyIik7CisjZW5kaWYKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJh
d3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNp
emUoKSk7CisgICAgbV9sYXllclRyZWVDb250ZXh0LndlYkxheWVySUQgPSB0b1dlYkdyYXBoaWNz
TGF5ZXIod2ViUm9vdExheWVyKS0+aWQoKTsKKworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5z
ZXRMYXllclRyZWVUaWxlQ2xpZW50KHRoaXMpOworI2VuZGlmCisjaWZuZGVmIE5ERUJVRworICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFF0IG5v
bi1jb21wb3NpdGVkIGNvbnRlbnQiKTsKKyNlbmRpZgorICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0Q29udGVudHNPcGFxdWUobV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAm
JiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKTsKKyAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAg
bV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7
CisKKyAgICBpZiAobV93ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgpKQorICAgICAgICBjcmVhdGVQ
YWdlT3ZlcmxheUxheWVyKCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UXQ6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxh
eWVyRmx1c2hpbmdFbmFibGVkKQoreworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9s
YXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKKworICAg
IGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6
OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5n
RW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lci5p
c0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCit7Cisg
ICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6
c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIG5vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkKK3sKKyAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5
ZXJGbHVzaCA9IG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKK30KKwordm9pZCBMYXll
clRyZWVIb3N0UXQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5y
ZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0
cmVlIGhpZXJhcmNoeS4KKyAgICBpZiAoZ3JhcGhpY3NMYXllcikKKyAgICAgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0UXQ6OmludmFsaWRhdGUoKQoreworICAgIGNhbmNlbFBlbmRpbmdMYXllckZs
dXNoKCk7CisKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBtX3Jvb3RMYXllciA9IG51bGxw
dHI7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiByZWN0KQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KHJlY3QpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1f
cGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworCisgICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzY3JvbGxOb25D
b21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIHNldE5vbkNvbXBvc2l0
ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RRdDo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgbmV3U2l6ZSkKK3sKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAg
IC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRl
ZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAorICAgIC8vIGZvciB0aG9zZSBu
ZXdseSBleHBvc2VkIGFyZWFzLgorICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5zaXplKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zZXRTaXplKG5ld1NpemUpOworCisgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUu
d2lkdGgoKSkgeworICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxm
bG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qo
b2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhl
aWdodCkpOworICAgIH0KKworICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWln
aHQoKSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3Bs
YXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwg
bmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKKworICAgIGlmIChtX3BhZ2VP
dmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXpl
KTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RR
dDo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCkKK3sKKyAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVy
KCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UXQ6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKK3sKKyAgICBkZXN0cm95UGFnZU92ZXJsYXlM
YXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RRdDo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
cmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6OmZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpCit7CisgICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWlu
RnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygp
OworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAg
bV9wYWdlT3ZlcmxheUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHko
KTsKKworICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKKyAgICByZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRp
ZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIoY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQor
eworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U3luY0NvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpbmZv
KSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWREZWxldGVMYXllcihXZWJMYXllcklE
IGlkKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihp
ZCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1
c2goKQoreworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgIGlmICghbV9p
c1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9S
RSkKKyAgICBpZiAobV9zdXNwZW5kZWQgfHwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKQorICAgICAg
ICByZXR1cm47CisjZW5kaWYKKworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CisgICAg
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNGcmFtZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2hvdWxkU3luY1Jvb3RMYXllcikgeworICAg
ICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIodG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+
aWQoKSkpOworICAgICAgICBtX3Nob3VsZFN5bmNSb290TGF5ZXIgPSBmYWxzZTsKKyAgICB9CisK
KyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGlkUmVu
ZGVyRnJhbWUoKSk7CisKKyAgICBpZiAoIW1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBMZXQgdGhlIGRyYXdpbmcgYXJlYSBrbm93IHRo
YXQgd2UndmUgZG9uZSBhIGZsdXNoIG9mIHRoZSBsYXllciBjaGFuZ2VzLgorICAgIHN0YXRpY19j
YXN0PERyYXdpbmdBcmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9z
dERpZEZsdXNoTGF5ZXJzKCk7CisgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gg
PSBmYWxzZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmxheWVyRmx1c2hUaW1lckZpcmVk
KFRpbWVyPExheWVyVHJlZUhvc3RRdD4qKQoreworICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZs
dXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGVQYWdlT3ZlcmxheUxheWVy
KCkKK3sKKyAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CisKKyAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisjaWZuZGVmIE5ERUJVRwor
ICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFF0IHBhZ2Ugb3Zl
cmxheSBjb250ZW50Iik7CisjZW5kaWYKKworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0RHJh
d3NDb250ZW50KHRydWUpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShtX3dlYlBh
Z2UtPnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9wYWdlT3ZlcmxheUxh
eWVyLmdldCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRlc3Ryb3lQYWdlT3Zlcmxh
eUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VP
dmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIg
PSBudWxscHRyOworfQorCisKK2ludDY0X3QgTGF5ZXJUcmVlSG9zdFF0OjphZG9wdEltYWdlQmFj
a2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1
cm4gSW52YWxpZFdlYkxheWVySUQ7CisgICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisKKyAgICBpZiAoIXBpeG1hcCkKKyAgICAgICAgcmV0
dXJuIEludmFsaWRXZWJMYXllcklEOworCisgICAgaW50NjRfdCBrZXkgPSBwaXhtYXAtPmNhY2hl
S2V5KCk7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOworCisgICAgaWYgKGl0ICE9IG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKKyAgICAgICAgKysoaXQt
PnNlY29uZCk7CisgICAgICAgIHJldHVybiBrZXk7CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1h
Z2UtPnNpemUoKSwgaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVCaXRt
YXA6OlN1cHBvcnRzQWxwaGEgOiAwKTsKKyAgICB7CisgICAgICAgIE93blB0cjxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3ND
b250ZXh0KCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKKyAgICB9CisKKyAgICBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxl
KTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6Q3Jl
YXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5LCBoYW5kbGUpKTsKKyAgICBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmFkZChrZXksIDEpOworICAgIHJldHVybiBrZXk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRf
dCBrZXkpCit7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybjsKKyAgICBIYXNoTWFwPGlu
dDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNv
dW50cy5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZWZDb3VudHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGl0LT5zZWNvbmQtLTsKKwor
ICAgIGlmIChpdC0+c2Vjb25kKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShrZXkpKTsKK30KKworCit2b2lkIExheWVyVHJlZUhvc3RRdDo6bm90aWZ5QW5pbWF0aW9uU3Rh
cnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCit7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpwYWludENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
UGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAg
aWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyKSB7CisgICAg
ICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVy
bGF5TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3ND
b250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5
ZXJUcmVlSG9zdFF0OjpzaG93RGVidWdCb3JkZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93
ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCk7Cit9CisK
K2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENvdW50ZXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dSZXBhaW50Q291
bnRlcigpOworfQorCitib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgRU5BQkxFKFRJTEVEX0JB
Q0tJTkdfU1RPUkUpCit2b2lkIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlVGlsZShXZWJMYXllcklE
IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7Cisg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRp
bGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXll
clRyZWVIb3N0UXQ6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBj
b25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGls
ZUlELCB1cGRhdGVJbmZvKSk7Cit9Cit2b2lkIExheWVyVHJlZUhvc3RRdDo6cmVtb3ZlVGlsZShX
ZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0
aWxlSUQpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50UmVj
dEZvckxheWVyKGludCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQorewor
ICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlE
KGxheWVySUQpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJl
Y3QgdmlzaWJsZVJlY3QocmVjdCk7CisgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChy
ZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50UmVjdEFu
ZFNjYWxlKGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlKQoreworICAgIFdlYkdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKTsK
KyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisgICAgbGF5ZXItPnNldENvbnRlbnRz
U2NhbGUoc2NhbGUpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29udGVudFJlY3QocmVjdCk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNv
bnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgdG9XZWJHcmFwaGljc0xh
eWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50
UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdFF0OjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIG1fd2FpdGluZ0ZvclVJUHJvY2Vz
cyA9IGZhbHNlOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitib29sIExheWVyVHJl
ZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gIW1fc3VzcGVuZGVkICYmICFtX3dhaXRpbmdGb3JVSVByb2Nlc3M7Cit9CisKKyNlbmRpZgor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbHNlCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5o
IgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGJv
b2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKQEAgLTM1
LDMgKzQ0MSw0IEBAIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCkKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110705</attachid>
            <date>2011-10-12 10:53:19 -0700</date>
            <delta_ts>2011-10-13 10:35:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>98393</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2N2ZjYjUyLi5iMjI5NWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcy
IEBACisyMDExLTEwLTExICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1F0XVtXSzJdIFN5bmNocm9uaXplIHRpbGluZyB3aXRoIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE1ha2UgdGhlIHRpbGVkICJub24tY29tcG9zaXRlZCIgY29udGVudCBhbmQgdGhlIGNv
bXBvc2l0ZWQgbGF5ZXJzIGdvIHRocm91Z2ggdGhlIHNhbWUKKyAgICAgICAgY29kZSBwYXRoIG9u
IFdlYktpdDIuIEluc3RlYWQgb2YgaGF2aW5nIGEgImRyYXdpbmcgYXJlYSIgdGhhdCBoYW5kbGVz
IHRoZSBub24tY29tcG9zaXRlZAorICAgICAgICBjb250ZW50IGFuZCBhIHNlcGVyYXRlIGxheWVy
IHRyZWUsIHdlIHB1dCBldmVyeXRoaW5nIGluIGEgbGF5ZXIgdHJlZSwgd2l0aCB0aGUgbm9uLQor
ICAgICAgICBjb21wb3NpdGVkIGNvbnRlbnQgYmVpbmcgYSBsYXllciBpbiB0aGUgdHJlZS4KKwor
ICAgICAgICBUaGlzIGFsbG93cyBmaXhpbmcgc2V2ZXJhbCBpc3N1ZXMgd2l0aCB3ZWJzaXRlcyB0
aGF0IGhhdmUgbGFyZ2UgY29udGVudCBhcmVhcyB0aGF0IGFyZQorICAgICAgICBjb21wb3NpdGVk
IG9yIG92ZXJsYXAgd2l0aCBjb21wb3NpdGVkIGxheWVycy4KKworICAgICAgICBMYXllci10cmVl
IHN5bmNocm9uaXphdGlvbiBpcyBkb25lIGJ5IHBhc3NpbmcgV2ViS2l0MiBtZXNzYWdlcyBiZXR3
ZWVuIGEgTGF5ZXJUcmVlSG9zdAorICAgICAgICBvbiB0aGUgV2ViUHJvY2VzcyBhbmQgYSBMYXll
clRyZWVIb3N0UHJveHkgb24gdGhlIFVJIHByb2Nlc3MuIEV2ZXJ5IGxheWVyIGluIHRoZSB0cmVl
IGhhcworICAgICAgICBpdHMgb3duIHRpbGVkIGJhY2tpbmcgc3RvcmUsIGFuZCB1c2VzIHRoZSBM
YXllclRyZWVIb3N0IGNvbW11bmljYXRpb24gY2hhbm5lbCB0byBwYXNzCisgICAgICAgIGNvbnRl
bnQgdXAgdG8gdGhlIFVJIHByb2Nlc3MuIFRoZSBVSSBwcm9jZXNzIHdpbGwgbGF0ZXIgY3JlYXRl
cyBpdHMgb3duIEdyYXBoaWNzTGF5ZXIgdHJlZSwKKyAgICAgICAgYmFzZWQgb24gVGV4dHVyZU1h
cHBlciwgd2hpY2ggY2FuIGJlIHBhaW50ZWQgZGlyZWN0bHkgd2l0aCBPcGVuR0wuCisKKyAgICAg
ICAgU2V2ZXJhbCBvcHRpbWl6YXRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBub24tY29tcG9z
aXRlZCBsYXllciBhcyB3ZWxsLCBlLmcuIHNwZWNpZnlpbmcKKyAgICAgICAgYSB0cmFqZWN0b3J5
IGFuZCB1cGRhdGluZyB0aGUgdmlzaWJsZSByZWN0IHRvZ2V0aGVyIHdpdGggdGhlIGNvbnRlbnQg
c2NhbGUuCisKKyAgICAgICAgVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBkaXNhYmxlZCwgYSBzZXBh
cmF0ZSBwYXRjaCB3aWxsIGVuYWJsZSBpdCBhbmQgZ2x1ZSBpdCB0bworICAgICAgICBRVG91Y2hX
ZWJQYWdlLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJvOgorICAgICAgICAqIFBsYXRm
b3JtL0NvcmVJUEMvTWVzc2FnZUlELmg6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQyL21lc3Nh
Z2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9MYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICog
U2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcklu
Zm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9xdC9M
YXllclRyZWVDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0
OjpMYXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6
fkxheWVyVHJlZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojpl
bmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpkZWNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktp
dDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KToKKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVByb3h5Ojp2aWV3cG9ydFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eTo6aXNCYWNraW5nU3RvcmVSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhUHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVj
dG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnJlbW92ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2Vp
dmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6cGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxl
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6bGF5
ZXJCeUlEKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpyb290TGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeVN5bmNS
ZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd0RlYnVn
Qm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd1JlcGFp
bnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludENv
bnRlbnRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2Vz
LmluOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDogQWRkZWQuCisgICAgICAgICog
V2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6fldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVQYWludEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNl
dFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0
ZXNBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpsYXllclRyZWVUaWxlQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldExheWVyVHJlZVRpbGVDbGllbnQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RB
bmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3
aW5nQXJlYTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVy
TmV4dFNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UXQ6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZERlbGV0ZUxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRlc3Ryb3lQYWdl
T3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjphZG9wdElt
YWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZWxl
YXNlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6
Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RR
dDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hv
d0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hvd1Jl
cGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVU
aWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZW1vdmVUaWxlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRl
bnRSZWN0QW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKToKKwogMjAxMS0xMC0xMSAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBTbWFsbCBl
bWJlZGRlZCBQREZzIGFyZSBub3QgZnVsbHkgcmVwYWludGVkIHdoZW4gc2Nyb2xsaW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8gYi9Tb3VyY2UvV2ViS2l0
Mi9EZXJpdmVkU291cmNlcy5wcm8KaW5kZXggZmNlNTljNS4uYjkzZTc2NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rl
cml2ZWRTb3VyY2VzLnBybwpAQCAtOTIsNiArOTIsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwK
ICAgICBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gXAogICAgIERvd25sb2FkUHJv
eHkubWVzc2FnZXMuaW4gXAogICAgIERyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4gXAorICAg
IExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luQ29udHJvbGxlclBy
b3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Qcm9jZXNzLm1lc3NhZ2VzLmluIFwKICAgICBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBcCkBAIC0xMTYsNiArMTE3LDcgQEAg
TUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMu
aW4gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gXAogICAgIFdl
YlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gXAorICAgIFdlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gXAog
ICAgIFdlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVz
c2FnZUlELmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCmlu
ZGV4IDEzYjIxODMuLjQ1NTFkN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvTWVzc2FnZUlELmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9NZXNzYWdlSUQuaApAQCAtMzgsNiArMzgsNyBAQCBlbnVtIE1lc3NhZ2VDbGFzcyB7CiAgICAg
TWVzc2FnZUNsYXNzQXV0aGVudGljYXRpb25NYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc0RyYXdp
bmdBcmVhLAogICAgIE1lc3NhZ2VDbGFzc0luamVjdGVkQnVuZGxlLAorICAgIE1lc3NhZ2VDbGFz
c0xheWVyVHJlZUhvc3QsCiAgICAgTWVzc2FnZUNsYXNzV2ViQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXIsCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29va2llTWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NX
ZWJEYXRhYmFzZU1hbmFnZXIsCkBAIC01NCw2ICs1NSw3IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsK
ICAgICAvLyBNZXNzYWdlcyBzZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgVUkgcHJvY2Vz
cy4KICAgICBNZXNzYWdlQ2xhc3NEb3dubG9hZFByb3h5LAogICAgIE1lc3NhZ2VDbGFzc0RyYXdp
bmdBcmVhUHJveHksCisgICAgTWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdFByb3h5LAogICAgIE1l
c3NhZ2VDbGFzc1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHksCiAgICAgTWVzc2FnZUNs
YXNzV2ViQ29udGV4dCwKICAgICBNZXNzYWdlQ2xhc3NXZWJDb250ZXh0TGVnYWN5LApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5IGIvU291cmNl
L1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CmluZGV4IGI4NWRhOTguLmQyZTRl
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5w
eQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKQEAgLTM4
MSw2ICszODEsOCBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dlYktp
dDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwKICAgICAgICAgJ1dlYktp
dDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rlcic6IFtdLAogICAgICAgICAnV2ViS2l0OjpX
ZWJHZXN0dXJlRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAorICAgICAgICAnV2ViS2l0OjpXZWJM
YXllcklEJzogWyciV2ViTGF5ZXJUcmVlSW5mby5oIiddLAorICAgICAgICAnV2ViS2l0OjpXZWJM
YXllckluZm8nOiBbJyJXZWJMYXllclRyZWVJbmZvLmgiJ10sCiAgICAgICAgICdXZWJLaXQ6Oldl
YktleWJvYXJkRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAogICAgICAgICAnV2ViS2l0OjpXZWJN
b3VzZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViVG91Y2hF
dmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNv
bnRleHQuaAppbmRleCA4NjY3Yzk4Li4yZGI1ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9M
YXllclRyZWVDb250ZXh0LmgKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogICAgIHVpbnQzMl90
IGNvbnRleHRJRDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBIV05EIHdpbmRvdzsKKyNlbGlm
IFBMQVRGT1JNKFFUKQorICAgIHVpbnQzMl90IHdlYkxheWVySUQ7CiAjZW5kaWYKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAppbmRleCBhMDEyODU1Li5l
ZGI2MmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5m
by5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCkBA
IC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAKKyNpbmNs
dWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKIApAQCAtMzMsMzUgKzM0LDE3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogdm9pZCBXZWJMYXllckluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgLy8gV2UgaGF2ZSB0byBkaXZpZGUgaXQgdG8gc2V2
ZXJhbCBsaW5lcywgYmVjYXVzZSBDb3JlSVBDOjpJbi9PdXQgdGFrZXMgYSBtYXhpbXVtIG9mIDEw
IGFyZ3VtZW50cy4KLSAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4oaWQsIG5hbWUsIHBh
cmVudCwgY2hpbGRyZW4sIGZsYWdzLCByZXBsaWNhLCBtYXNrKSk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlKENvcmVJUEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGlj
YSwgbWFzaywgaW1hZ2VCYWNraW5nU3RvcmVJRCkpOwogICAgIGVuY29kZXItPmVuY29kZShDb3Jl
SVBDOjpJbihwb3MsIHNpemUsIHRyYW5zZm9ybSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQsIGNoaWxk
cmVuVHJhbnNmb3JtLCBjb250ZW50c1JlY3QpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoaW1hZ2VC
YWNraW5nU3RvcmUgPyBpbWFnZUJhY2tpbmdTdG9yZS0+c2l6ZSgpIDogSW50U2l6ZSgpKTsKLQot
ICAgIGlmICghaW1hZ2VCYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlIGltYWdlSGFuZGxlOwotICAgIGlmIChpbWFnZUJhY2tpbmdTdG9y
ZS0+Y3JlYXRlSGFuZGxlKGltYWdlSGFuZGxlKSkKLSAgICAgICAgaW1hZ2VIYW5kbGUuZW5jb2Rl
KGVuY29kZXIpOwogfQogCiBib29sIFdlYkxheWVySW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgV2ViTGF5ZXJJbmZvJiBpbmZvKQogewogICAgIC8vIFdlIGhh
dmUgdG8gZGl2aWRlIGl0IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0
IHRha2VzIGEgbWF4aW11bSBvZiAxMCBhcmd1bWVudHMuCi0gICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwgaW5mby5wYXJlbnQsIGluZm8uY2hp
bGRyZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5mby5tYXNrKSkpCisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwgaW5mby5wYXJl
bnQsIGluZm8uY2hpbGRyZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5mby5tYXNrLCBp
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLnBvcywgaW5mby5zaXplLCBpbmZv
LnRyYW5zZm9ybSwgaW5mby5vcGFjaXR5LCBpbmZvLmFuY2hvclBvaW50LCBpbmZvLmNoaWxkcmVu
VHJhbnNmb3JtLCBpbmZvLmNvbnRlbnRzUmVjdCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBJbnRTaXplIGltYWdlQmFja2luZ1N0b3JlU2l6ZTsKLSAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShpbWFnZUJhY2tpbmdTdG9yZVNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGltYWdlQmFja2luZ1N0b3JlU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaW1hZ2VIYW5kbGU7Ci0gICAgaWYgKFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpkZWNvZGUoZGVjb2RlciwgaW1hZ2VIYW5kbGUpKQotICAg
ICAgICBpbmZvLmltYWdlQmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaW1h
Z2VIYW5kbGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkxheWVyVHJlZUluZm8uaAppbmRleCBhMGU2OGQzLi4yNTAwM2U3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKQEAgLTM0LDYgKzM0LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdHlwZWRlZiB1aW50MzJfdCBXZWJM
YXllcklEOworZW51bSB7IEludmFsaWRXZWJMYXllcklEID0gMCB9OwogCiBzdHJ1Y3QgV2ViTGF5
ZXJVcGRhdGVJbmZvIHsKICAgICBXZWJMYXllclVwZGF0ZUluZm8oKSB7IH0KQEAgLTU0LDYgKzU1
LDcgQEAgc3RydWN0IFdlYkxheWVySW5mbyB7CiAgICAgV2ViTGF5ZXJJRCBwYXJlbnQ7CiAgICAg
V2ViTGF5ZXJJRCByZXBsaWNhOwogICAgIFdlYkxheWVySUQgbWFzazsKKyAgICBpbnQ2NF90IGlt
YWdlQmFja2luZ1N0b3JlSUQ7CiAKICAgICBGbG9hdFBvaW50IHBvczsKICAgICBGbG9hdFBvaW50
M0QgYW5jaG9yUG9pbnQ7CkBAIC03MSw2ICs3Myw4IEBAIHN0cnVjdCBXZWJMYXllckluZm8gewog
ICAgICAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsKICAgICAgICAgICAgIGJvb2wgcHJl
c2VydmVzM0QgOiAxOwogICAgICAgICAgICAgYm9vbCBjb250ZW50TmVlZHNEaXNwbGF5IDogMTsK
KyAgICAgICAgICAgIGJvb2wgaW1hZ2VJc1VwZGF0ZWQ6IDE7CisgICAgICAgICAgICBib29sIGlz
Um9vdExheWVyOiAxOwogICAgICAgICB9OwogICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAg
ICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9MYXllclRyZWVDb250
ZXh0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5j
cHAKaW5kZXggZjFiZjFiNC4uZDM3ZDc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKQEAgLTI2LDQxICsyNiwzOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKIAotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAi
QXJndW1lbnRFbmNvZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBMYXllclRyZWVDb250
ZXh0OjpMYXllclRyZWVDb250ZXh0KCkKKyAgICA6IHdlYkxheWVySUQoMCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCiBMYXllclRyZWVDb250ZXh0Ojp+TGF5ZXJUcmVlQ29udGV4dCgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb250ZXh0Ojpl
bmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3QKK3ZvaWQgTGF5ZXJUcmVlQ29u
dGV4dDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGVuY29kZXItPmVuY29kZSh3ZWJMYXllcklEKTsK
IH0KIAotYm9vbCBMYXllclRyZWVDb250ZXh0OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiwgTGF5ZXJUcmVlQ29udGV4dCYpCitib29sIExheWVyVHJlZUNvbnRleHQ6OmRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIExheWVyVHJlZUNvbnRleHQmIGNvbnRl
eHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZGVjb2Rlci0+ZGVjb2RlKGNvbnRleHQud2ViTGF5ZXJJRCk7CiB9CiAKIGJvb2wgTGF5ZXJU
cmVlQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdlYkxheWVySUQ7CiB9CiAKLWJvb2wgb3BlcmF0
b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpCiti
b29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYSwgY29uc3QgTGF5ZXJUcmVl
Q29udGV4dCYgYikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBhLndlYkxheWVySUQgPT0gYi53ZWJMYXllcklEOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmNwcAppbmRleCBmODUyZTJmLi4zOWQ2MGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0yOCw2ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01
Myw0ICs1NywxNiBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHk6OnNldFNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQogICAgIHNpemVEaWRDaGFuZ2Uo
KTsKIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQordm9pZCBEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAg
bV93ZWJQYWdlUHJveHktPnNldFZpZXdOZWVkc0Rpc3BsYXkodmlld3BvcnRWaXNpYmxlUmVjdCgp
KTsKK30KKworV2ViQ29yZTo6SW50UmVjdCBEcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3Qo
KSBjb25zdAoreworICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFn
ZVByb3h5LT52aWV3U2l6ZSgpKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDA4OGZj
OGIuLmExOTQ5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkuaApAQCAtMjcsOSArMjcsMTEgQEAKICNpZm5kZWYgRHJhd2luZ0FyZWFQcm94eV9oCiAjZGVm
aW5lIERyYXdpbmdBcmVhUHJveHlfaAogCisjaW5jbHVkZSA8Q29yZUlQQy9NZXNzYWdlSUQuaD4K
ICNpbmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKLSNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNp
bmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogI2lmIFBM
QVRGT1JNKFFUKQpAQCAtNDUsMTMgKzQ3LDE3IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIH0KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEludFJlY3Q7CisgICAgY2xhc3MgRmxvYXRQ
b2ludDsKKyAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIH0KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIExheWVyVHJlZUNvbnRleHQ7CitjbGFzcyBMYXllclRyZWVIb3N0UHJv
eHk7CiBjbGFzcyBVcGRhdGVJbmZvOworY2xhc3MgV2ViTGF5ZXJUcmVlSW5mbzsKK2NsYXNzIFdl
YkxheWVyVXBkYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAogY2xhc3MgRHJhd2luZ0Fy
ZWFQcm94eSB7CkBAIC03Nyw2ICs4MywyNCBAQCBwdWJsaWM6CiAgICAgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
T2Zmc2V0KTsKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4g
Y29udGVudHNSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udGVudHNS
ZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQmFja2luZ1N0b3JlUmVhZHkoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSkg
eyB9CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZp
c2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3Qg
V2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGVGb3JM
YXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciogYXJndW1lbnRzKSB7IH0KKworICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJu
IG1fd2ViUGFnZVByb3h5OyB9CisjZW5kaWYKKyNlbmRpZgogcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlLCBXZWJQYWdlUHJveHkqKTsKIApA
QCAtODYsNiArMTEwLDEwIEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6
ZTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRyPExh
eWVyVHJlZUhvc3RQcm94eT4gbV9sYXllclRyZWVIb3N0UHJveHk7CisjZW5kaWYKKwogcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZSgpID0gMDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5kZXggNjE5ZDUw
OC4uNGQ3YmQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eUltcGwuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXllclRy
ZWVIb3N0UHJveHkuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC0zMjgsOCArMzMyLDM4IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29u
dGV4CiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fbGF5ZXJUcmVlQ29udGV4
dCA9IGxheWVyVHJlZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIGlmICghbV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7CisjZW5k
aWYKK30KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQordm9pZCBEcmF3aW5nQXJl
YVByb3h5SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVl
SG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+ZGlkUmVjZWl2ZUxheWVy
VHJlZUhvc3RQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOwor
fQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5k
U2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQg
c2NhbGUpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVy
VHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKHZpc2libGVDb250
ZW50c1JlY3QsIHNjYWxlKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CiB9CiAKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUlt
cGw6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQor
ICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQobWF0
cml4LCBvcGFjaXR5KTsKK30KKyNlbmRpZgorCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQogewogICAgIEFTU0VSVChpc0luQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4IGQwOTFmOTcuLmFhYzcxZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCkBAIC0zOSw2ICsz
OSw4IEBAIGNsYXNzIFJlZ2lvbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIExheWVy
VHJlZUhvc3RQcm94eTsKKwogY2xhc3MgRHJhd2luZ0FyZWFQcm94eUltcGwgOiBwdWJsaWMgRHJh
d2luZ0FyZWFQcm94eSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RHJhd2luZ0Fy
ZWFQcm94eUltcGw+IGNyZWF0ZShXZWJQYWdlUHJveHkqKTsKQEAgLTc1LDYgKzc3LDEzIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKIAogICAg
IGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gIW1f
bGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCk7IH0KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9y
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOworI2VuZGlmCiAjZWxzZQogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmNlZjFmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTAsMCArMSwxMzUgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKyNkZWZpbmUg
TGF5ZXJUcmVlSG9zdFByb3h5X2gKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1
ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJNZXNzYWdlUXVldWUuaCIKKyNpbmNs
dWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViTGF5ZXJJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOworCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI7CisKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSop
OworICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOworICAgIHZvaWQgc3luY0NvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdM
YXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciop
OworICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgSW50UmVjdCYsIGZsb2F0KTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOworI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQorICAgIHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICB2b2lkIHN3YXBD
b250ZW50QnVmZmVycygpOworICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKKyAgICB2b2lkIGNy
ZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpV
cGRhdGVJbmZvJik7CisgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZvaWQgcmVtb3ZlVGls
ZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2b2lkIGNyZWF0ZURpcmVj
dGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmKTsKKyAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2
NF90KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvckxheWVyKFdlYkxheWVy
SUQsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CisjZW5kaWYK
KworcHJvdGVjdGVkOgorICAgIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRlTGF5ZXIo
V2ViTGF5ZXJJRCk7CisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBp
ZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQo
aWQpOyB9CisgICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5
ZXIuZ2V0KCk7IH0KKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQorCisgICAgUnVuTG9vcDo6VGltZXI8TGF5ZXJU
cmVlSG9zdFByb3h5PiBtX2FuaW1hdGlvblRpbWVyOworICAgIERyYXdpbmdBcmVhUHJveHkqIG1f
ZHJhd2luZ0FyZWFQcm94eTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgSW50UmVjdCBtX3Zpc2libGVDb250
ZW50c1JlY3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworCisgICAgTWVzc2FnZVF1ZXVl
PExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyPiBtX21lc3NhZ2VzVG9SZW5kZXJlcjsKKyAgICB2
b2lkIHB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI+KTsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBl
cj4gbV90ZXh0dXJlTWFwcGVyOworI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8SW50UG9pbnQsIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IFRpbGVkSW1hZ2U7
CisgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwIG1fbm9kZVZpc3VhbENvbnRlbnRz
UmVjdE1hcDsKKyAgICBIYXNoTWFwPGludCwgaW50PiBtX3RpbGVUb05vZGVUaWxlOworICAgIGlu
dCByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3Q7CisgICAgSGFzaE1h
cDxpbnQ2NF90LCBUaWxlZEltYWdlPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKworICAg
IHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7CisgICAgdm9pZCBzeW5jaHJvbml6ZVZpZXdw
b3J0KCk7CisgICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIHNldFJv
b3RMYXllcklEKFdlYkxheWVySUQpOworICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycyhjb25z
dCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBm
bG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7CisgICAg
dm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBRSW1hZ2UmKTsKKyAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIGNv
bnN0IFFJbWFnZSYpOworICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOworICAgIHZvaWQg
YXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdl
SUQpOworICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGVuc3VyZVJvb3RM
YXllcigpOworICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7CisKKyNlbmRpZgorCisg
ICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZlY3RvcjxXZWJMYXll
cklEPiBtX2xheWVyc1RvRGVsZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgV2Vi
TGF5ZXJJRCBtX3Jvb3RMYXllcklEOworICAgIGludCBtX2lkOworfTsKKworfQorCisjZW5kaWYg
Ly8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmJjN2FmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzIg
QEAKKyMKKyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisj
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorbWVzc2FnZXMgLT4g
TGF5ZXJUcmVlSG9zdFByb3h5IHsKKyAgICBTeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKFdlYktp
dDo6V2ViTGF5ZXJJbmZvIGxheWVySW5mbykKKyAgICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1
aW50MzJfdCBpZCkKKyAgICBEZWxldGVDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQorICAg
IENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJLaXQ6
OlVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3Qg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAg
UmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCisgICAgQ3Jl
YXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUgaGFuZGxlKQorICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90IGtleSkKKyAgICBEaWRSZW5kZXJGcmFtZSgpCit9CisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYWE4NmVmMi4uZTZkZjVjMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJEb3dubG9hZFByb3h5LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQ
cm94eS5oIgogI2luY2x1ZGUgIkZpbmRJbmRpY2F0b3IuaCIKKyNpbmNsdWRlICJMYXllclRyZWVI
b3N0UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZXNz
YWdlSUQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCkBAIC0xMzk3LDYg
KzEzOTgsMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBpZiAobWVzc2FnZUlELmlz
PENvcmVJUEM6Ok1lc3NhZ2VDbGFzc0xheWVyVHJlZUhvc3RQcm94eT4oKSkgeworICAgICAgICBt
X2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShjb25uZWN0
aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYKKwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBD
OjpNZXNzYWdlQ2xhc3NXZWJJbnNwZWN0b3JQcm94eT4oKSkgewogICAgICAgICBpZiAoV2ViSW5z
cGVjdG9yUHJveHkqIGluc3BlY3RvciA9IHRoaXMtPmluc3BlY3RvcigpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwMzZlNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKQEAg
LTAsMCArMSw1OTQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJMYXllclRyZWVI
b3N0UHJveHkuaCIKKworI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIk1haW5UaHJlYWQuaCIKKyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJTaGFy
ZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJV
cGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVk
ZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgInRleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVk
ZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgiCisjaW5jbHVkZSA8UURhdGVUaW1lPgorI2lu
Y2x1ZGUgPGNhaXJvL09wZW5HTFNoaW1zLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlciB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsK
KyAgICAgICAgRGVsZXRlTGF5ZXIsCisgICAgICAgIENyZWF0ZVRpbGUsCisgICAgICAgIFJlbW92
ZVRpbGUsCisgICAgICAgIFVwZGF0ZVRpbGUsCisgICAgICAgIENyZWF0ZUltYWdlLAorICAgICAg
ICBEZXN0cm95SW1hZ2UsCisgICAgICAgIFN5bmNMYXllclBhcmFtZXRlcnMsCisgICAgICAgIEZs
dXNoTGF5ZXJDaGFuZ2VzLAorICAgICAgICBTZXRSb290TGF5ZXIKKyAgICB9OworICAgIHZpcnR1
YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworfTsKKwordGVtcGxhdGU8Y2xhc3MgTWVzc2FnZURh
dGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpUeXBlIG1lc3NhZ2VUeXBlPgorY2xhc3Mg
TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YSA6IHB1YmxpYyBMYXllclRyZWVNZXNz
YWdlVG9SZW5kZXJlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtZXNzYWdlVHlwZTsgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUcmVl
TWVzc2FnZVRvUmVuZGVyZXI+IGNyZWF0ZShjb25zdCBNZXNzYWdlRGF0YSYgZGF0YSA9IE1lc3Nh
Z2VEYXRhKCkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVHJlZU1l
c3NhZ2VUb1JlbmRlcmVyV2l0aERhdGEoZGF0YSkpOworICAgIH0KKworICAgIGNvbnN0IE1lc3Nh
Z2VEYXRhJiBkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGE7CisgICAg
fQorCitwcml2YXRlOgorICAgIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGEoY29u
c3QgTWVzc2FnZURhdGEmIGRhdGEpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAg
IH0KKworICAgIE1lc3NhZ2VEYXRhIG1fZGF0YTsKK307CisKKworbmFtZXNwYWNlIHsKK3N0cnVj
dCBDcmVhdGVUaWxlTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKKyAgICBp
bnQgcmVtb3RlVGlsZUlEOworICAgIGZsb2F0IHNjYWxlOworfTsKKworc3RydWN0IFVwZGF0ZVRp
bGVNZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworICAgIGludCByZW1vdGVU
aWxlSUQ7CisgICAgSW50UmVjdCBzb3VyY2VSZWN0OworICAgIEludFJlY3QgdGFyZ2V0UmVjdDsK
KyAgICBRSW1hZ2UgaW1hZ2U7Cit9OworCitzdHJ1Y3QgUmVtb3ZlVGlsZU1lc3NhZ2VEYXRhIHsK
KyAgICBXZWJMYXllcklEIGxheWVySUQ7CisgICAgaW50IHJlbW90ZVRpbGVJRDsKK307CisKK3N0
cnVjdCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhIHsKKyAgICBpbnQ2NF90IGltYWdlSUQ7CisgICAg
UUltYWdlIGltYWdlOworfTsKKworc3RydWN0IERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhIHsKKyAg
ICBpbnQ2NF90IGltYWdlSUQ7Cit9OworCitzdHJ1Y3QgU3luY0xheWVyUGFyYW1ldGVyc01lc3Nh
Z2VEYXRhIHsKKyAgICBXZWJMYXllckluZm8gbGF5ZXJJbmZvOworfTsKKworc3RydWN0IEVtcHR5
TWVzc2FnZURhdGEgeyB9Oworc3RydWN0IERlbGV0ZUxheWVyTWVzc2FnZURhdGEgeworICAgIFdl
YkxheWVySUQgbGF5ZXJJRDsKK307CitzdHJ1Y3QgU2V0Um9vdExheWVyTWVzc2FnZURhdGEgewor
ICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKK307CisKK2NsYXNzIENyZWF0ZVRpbGVNZXNzYWdlCisg
ICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8Q3JlYXRl
VGlsZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Q3JlYXRlVGlsZT4g
eyB9OworY2xhc3MgVXBkYXRlVGlsZU1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVl
TWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxVcGRhdGVUaWxlTWVzc2FnZURhdGEsIExheWVyVHJl
ZU1lc3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVUaWxlPiB7IH07CitjbGFzcyBSZW1vdmVUaWxlTWVz
c2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRh
PFJlbW92ZVRpbGVNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92
ZVRpbGU+IHsgfTsKK2NsYXNzIENyZWF0ZUltYWdlTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBM
YXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPENyZWF0ZUltYWdlTWVzc2FnZURhdGEs
IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpDcmVhdGVJbWFnZT4geyB9OworY2xhc3MgRGVz
dHJveUltYWdlTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5k
ZXJlcldpdGhEYXRhPERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9S
ZW5kZXJlcjo6RGVzdHJveUltYWdlPiB7IH07CitjbGFzcyBGbHVzaExheWVyQ2hhbmdlc01lc3Nh
Z2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxF
bXB0eU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Rmx1c2hMYXllckNo
YW5nZXM+IHsgfTsKK2NsYXNzIFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlCisgICAgICAgIDog
cHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8U3luY0xheWVyUGFyYW1l
dGVyc01lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6U3luY0xheWVyUGFy
YW1ldGVycz4geyB9OworY2xhc3MgRGVsZXRlTGF5ZXJNZXNzYWdlCisgICAgICAgIDogcHVibGlj
IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8RGVsZXRlTGF5ZXJNZXNzYWdlRGF0
YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkRlbGV0ZUxheWVyPiB7IH07CitjbGFzcyBT
ZXRSb290TGF5ZXJNZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyV2l0aERhdGE8U2V0Um9vdExheWVyTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VU
b1JlbmRlcmVyOjpTZXRSb290TGF5ZXI+IHsgfTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0xh
eWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkK
K3sKKyAgICBHcmFwaGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcih0aGlzKTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1h
cHBlck5vZGUobmV3TGF5ZXIpOworICAgIG5vZGUtPnNldElEKGxheWVySUQpOworICAgIG5vZGUt
PnNldFRpbGVPd25lcnNoaXAoVGV4dHVyZU1hcHBlck5vZGU6OkV4dGVybmFsbHlNYW5hZ2VkVGls
ZXMpOworICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7Cit9CisKK0xheWVyVHJlZUhvc3RQ
cm94eTo6TGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJv
eHkpCisgICAgOiBtX2FuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkxheWVy
VHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQpCisgICAgLCBtX2RyYXdpbmdBcmVhUHJveHko
ZHJhd2luZ0FyZWFQcm94eSkKKyAgICAsIG1fcm9vdExheWVySUQoMCkKK3sKK30KKworTGF5ZXJU
cmVlSG9zdFByb3h5Ojp+TGF5ZXJUcmVlSG9zdFByb3h5KCkKK3sKK30KKworLy8gVGhpcyBmdW5j
dGlvbiBuZWVkcyB0byBiZSByZWVudHJhbnQuCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFp
bnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90
ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKKworICAgIHN5bmNSZW1v
dGVDb250ZW50KCk7CisgICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RM
YXllcigpOworICAgIGlmICghY3VycmVudFJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGN1cnJlbnRS
b290TGF5ZXIpOworCisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBHTGlu
dCB2aWV3cG9ydFs0XTsKKyAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCk7
CisgICAgSW50UmVjdCB2aWV3cG9ydFJlY3Qodmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCB2aWV3
cG9ydFsyXSwgdmlld3BvcnRbM10pOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0Vmlld3BvcnRT
aXplKEludFNpemUodmlld3BvcnRbMl0sIHZpZXdwb3J0WzNdKSk7CisgICAgbm9kZS0+c2V0VGV4
dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+
YmVnaW5QYWludGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CisK
KyAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3BhY2l0eSgpICE9IG9wYWNpdHkgfHwgY3VycmVu
dFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4KSB7CisgICAgICAgIGN1cnJlbnRSb290
TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNl
dFRyYW5zZm9ybShtYXRyaXgpOworICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICB9CisKKyAgICBUZXh0dXJlTWFwcGVy
Tm9kZTo6Tm9kZVJlY3RNYXAgbm9kZVZpc3VhbENvbnRlbnRzUmVjdE1hcDsKKyAgICBpZiAobm9k
ZS0+Y29sbGVjdFZpc2libGVDb250ZW50c1JlY3RzKG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAs
IHZpZXdwb3J0UmVjdCkpIHsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFw
OjppdGVyYXRvciBlbmRJdGVyYXRvciA9IG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAuZW5kKCk7
CisgICAgICAgIGZvciAoVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwOjppdGVyYXRvciBp
dCA9IG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAuYmVnaW4oKTsgaXQgIT0gZW5kSXRlcmF0b3I7
ICsraXQpIHsKKyAgICAgICAgICAgIFdlYkxheWVySUQgbGF5ZXJJRCA9IGl0LT5maXJzdC0+aWQo
KTsKKyAgICAgICAgICAgIC8vIGF2b2lkIHVwZGF0aW5nIG5vbi1zeW5jZWQgcm9vdCBsYXllcgor
ICAgICAgICAgICAgaWYgKCFsYXllcklEKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IEludFJlY3QoaXQtPnNlY29uZCk7CisgICAg
ICAgICAgICBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIobGF5ZXJJRCwgdmlzaWJsZVJl
Y3QpOworICAgICAgICB9CisgICAgfQorICAgIG5vZGUtPnBhaW50KCk7CisKKyAgICBtX3RleHR1
cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CisKKyAgICBpZiAobm9kZS0+ZGVzY2VuZGFudHNPclNl
bGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAgdXBkYXRlVmlld3BvcnQoKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKK3sKKyAgICBtX2Ry
YXdpbmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklE
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgp
LT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250
ZW50UmVjdEZvckxheWVyKGxheWVySUQsIHJlY3QpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2Uo
KS0+cGFnZUlEKCkpOworfQorCitpbnQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdGVUaWxlSURU
b05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPGludCwgaW50Pjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVUb05vZGVUaWxlLmZpbmQodGlsZUlEKTsKKyAgICBp
ZiAoaXQgPT0gbV90aWxlVG9Ob2RlVGlsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGl0LT5zZWNvbmQ7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jTGF5
ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvKQoreworICAgIFdlYkxh
eWVySUQgaWQgPSBsYXllckluZm8uaWQ7CisgICAgZW5zdXJlTGF5ZXIoaWQpOworICAgIExheWVy
TWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOworICAgIEdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gaXQtPnNlY29uZDsKKworICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1l
KTsKKworICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5SUQobGF5ZXJJbmZv
LnJlcGxpY2EpKTsKKyAgICBsYXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChsYXllckluZm8u
bWFzaykpOworCisgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOworICAgIGxh
eWVyLT5zZXRTaXplKGxheWVySW5mby5zaXplKTsKKyAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxh
eWVySW5mby50cmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8u
YW5jaG9yUG9pbnQpOworICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8u
Y2hpbGRyZW5UcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5
ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxh
eWVySW5mby5jb250ZW50c09wYXF1ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXll
ckluZm8uY29udGVudHNSZWN0KTsKKyAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5m
by5kcmF3c0NvbnRlbnQpOworCisgICAgaWYgKGxheWVySW5mby5pbWFnZUlzVXBkYXRlZCkKKyAg
ICAgICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1hZ2VCYWNraW5nU3Rv
cmVJRCk7CisKKyAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCisgICAgbGF5
ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXll
ckluZm8ubWFza3NUb0JvdW5kcyk7CisgICAgbGF5ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9w
YWNpdHkpOworICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0Qp
OworICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW47CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxheWVySW5mby5jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBX
ZWJMYXllcklEIGNoaWxkSUQgPSBsYXllckluZm8uY2hpbGRyZW5baV07CisgICAgICAgIEdyYXBo
aWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNoaWxkSUQpOworICAgICAgICBpZiAoIWNoaWxk
KSB7CisgICAgICAgICAgICBjaGlsZCA9IGNyZWF0ZUxheWVyKGNoaWxkSUQpLmxlYWtQdHIoKTsK
KyAgICAgICAgICAgIG1fbGF5ZXJzLmFkZChjaGlsZElELCBjaGlsZCk7CisgICAgICAgIH0KKyAg
ICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICB9CisgICAgbGF5ZXItPnNldENoaWxk
cmVuKGNoaWxkcmVuKTsKKworICAgIGlmIChsYXllckluZm8uaXNSb290TGF5ZXIgJiYgbV9yb290
TGF5ZXJJRCAhPSBpZCkKKyAgICAgICAgc2V0Um9vdExheWVySUQoaWQpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIGlmICghbGF5
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Cisg
ICAgbV9sYXllcnMucmVtb3ZlKGxheWVySUQpOworICAgIGRlbGV0ZSBsYXllcjsKK30KKworCit2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAg
ICAvLyBXZSBoYXZlIHRvIGxlYWsgdGhlIG5ldyBsYXllcidzIHBvaW50ZXIgYW5kIG1hbmFnZSBp
dCBvdXJzZWx2ZXMsCisgICAgLy8gYmVjYXVzZSBPd25QdHIgaXMgbm90IGNvcHlhYmxlLgorICAg
IGlmIChtX2xheWVycy5maW5kKGlkKSA9PSBtX2xheWVycy5lbmQoKSkKKyAgICAgICAgbV9sYXll
cnMuYWRkKGlkLCBjcmVhdGVMYXllcihpZCkubGVha1B0cigpKTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnNldFJvb3RMYXllcklEKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBp
ZiAobGF5ZXJJRCA9PSBtX3Jvb3RMYXllcklEKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jv
b3RMYXllcklEID0gbGF5ZXJJRDsKKworICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJl
bigpOworCisgICAgaWYgKCFsYXllcklEKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGlj
c0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGlu
dCB0aWxlSUQsIGZsb2F0IHNjYWxlKQoreworICAgIGVuc3VyZUxheWVyKGxheWVySUQpOworICAg
IFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQo
bGF5ZXJJRCkpOworCisgICAgaW50IG5vZGVUaWxlSUQgPSBub2RlLT5jcmVhdGVDb250ZW50c1Rp
bGUoc2NhbGUpOworICAgIG1fdGlsZVRvTm9kZVRpbGUuYWRkKHRpbGVJRCwgbm9kZVRpbGVJRCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5
ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4
dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGludCBub2RlVGlsZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2RlVGls
ZUlEKHRpbGVJRCk7CisgICAgaWYgKCFub2RlVGlsZUlEKQorICAgICAgICByZXR1cm47CisKKyAg
ICBub2RlLT5yZW1vdmVDb250ZW50c1RpbGUobm9kZVRpbGVJRCk7CisgICAgbV90aWxlVG9Ob2Rl
VGlsZS5yZW1vdmUodGlsZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0
ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBRSW1hZ2UmIGltYWdlKQor
eworICAgIGVuc3VyZUxheWVyKGxheWVySUQpOworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2Rl
ID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IG5vZGVUaWxlSUQgPSByZW1vdGVUaWxlSURU
b05vZGVUaWxlSUQodGlsZUlEKTsKKyAgICBpZiAoIW5vZGVUaWxlSUQpCisgICAgICAgIHJldHVy
bjsKKworICAgIFFJbWFnZSBpbWFnZVJlZihpbWFnZSk7CisgICAgbm9kZS0+c2V0VGV4dHVyZU1h
cHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG5vZGUtPnNldENvbnRlbnRzVGlsZUJh
Y2tCdWZmZXIobm9kZVRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwgaW1hZ2VSZWYuYml0
cygpLCBCaXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgY29uc3QgUUltYWdlJiBpbWFnZSkK
K3sKKyAgICBUaWxlZEltYWdlIHRpbGVkSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0IGludCBUaWxl
RGltZW5zaW9uID0gMTAyNDsKKyAgICBib29sIGltYWdlSGFzQWxwaGEgPSBpbWFnZS5oYXNBbHBo
YUNoYW5uZWwoKTsKKyAgICBJbnRSZWN0IGltYWdlUmVjdCgwLCAwLCBpbWFnZS53aWR0aCgpLCBp
bWFnZS5oZWlnaHQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZS5oZWlnaHQoKTsg
eSArPSBUaWxlRGltZW5zaW9uKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2Uu
d2lkdGgoKTsgeCArPSBUaWxlRGltZW5zaW9uKSB7CisgICAgICAgICAgICBRSW1hZ2Ugc3ViSW1h
Z2U7CisgICAgICAgICAgICBJbnRSZWN0IHJlY3QoeCwgeSwgVGlsZURpbWVuc2lvbiwgVGlsZURp
bWVuc2lvbik7CisgICAgICAgICAgICByZWN0LmludGVyc2VjdChpbWFnZVJlY3QpOworICAgICAg
ICAgICAgaWYgKFFTaXplKHJlY3Quc2l6ZSgpKSA9PSBpbWFnZS5zaXplKCkpCisgICAgICAgICAg
ICAgICAgc3ViSW1hZ2UgPSBpbWFnZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBzdWJJbWFnZSA9IGltYWdlLmNvcHkocmVjdCk7CisgICAgICAgICAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOworICAg
ICAgICAgICAgdGV4dHVyZS0+cmVzZXQocmVjdC5zaXplKCksICFpbWFnZUhhc0FscGhhKTsKKyAg
ICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlSGFzQWxwaGEgPyBCaXRtYXBU
ZXh0dXJlOjpCR1JBRm9ybWF0IDogQml0bWFwVGV4dHVyZTo6QkdSRm9ybWF0LCBJbnRSZWN0KElu
dFBvaW50Ojp6ZXJvKCksIHJlY3Quc2l6ZSgpKSwgc3ViSW1hZ2UuYml0cygpKTsKKyAgICAgICAg
ICAgIHRpbGVkSW1hZ2UuYWRkKHJlY3QubG9jYXRpb24oKSwgdGV4dHVyZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5yZW1vdmUoaW1hZ2VJRCk7
CisgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuYWRkKGltYWdlSUQsIHRpbGVkSW1hZ2Up
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveUltYWdlKGludDY0X3QgaW1h
Z2VJRCkKK3sKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5yZW1vdmUoaW1hZ2VJRCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhp
Y3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJRCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTm9k
ZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXIpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbWFnZUlEKSB7CisgICAgICAgIG5vZGUtPmNsZWFy
QWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgRmxvYXRTaXplIHNpemUobGF5ZXItPnNpemUoKSk7CisgICAgRmxvYXRSZWN0IGNv
bnRlbnRzUmVjdChsYXllci0+Y29udGVudHNSZWN0KCkpOworICAgIGZsb2F0IGhvcml6b250YWxG
YWN0b3IgPSBjb250ZW50c1JlY3Qud2lkdGgoKSAvIHNpemUud2lkdGgoKTsKKyAgICBmbG9hdCB2
ZXJ0aWNhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC5oZWlnaHQoKSAvIHNpemUuaGVpZ2h0KCk7Cisg
ICAgSGFzaE1hcDxpbnQ2NF90LCBUaWxlZEltYWdlPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOworICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGlsZWRJbWFn
ZTo6aXRlcmF0b3IgZW5kVGlsZUl0ZXJhdG9yID0gaXQtPnNlY29uZC5lbmQoKTsKKyAgICBmb3Ig
KFRpbGVkSW1hZ2U6Oml0ZXJhdG9yIHRpbGVJdCA9IGl0LT5zZWNvbmQuYmVnaW4oKTsgdGlsZUl0
ICE9IGVuZFRpbGVJdGVyYXRvcjsgKyt0aWxlSXQpIHsKKyAgICAgICAgRmxvYXRSZWN0IHNvdXJj
ZVJlY3QoRmxvYXRQb2ludCh0aWxlSXQtPmZpcnN0KSwgRmxvYXRTaXplKHRpbGVJdC0+c2Vjb25k
LT5zaXplKCkpKTsKKyAgICAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3Qoc291cmNlUmVjdC54KCkg
KiBob3Jpem9udGFsRmFjdG9yICsgY29udGVudHNSZWN0LngoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc291cmNlUmVjdC55KCkgKiB2ZXJ0aWNhbEZhY3RvciArIGNvbnRlbnRzUmVj
dC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY3Qud2lkdGgoKSAq
IGhvcml6b250YWxGYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJl
Y3QuaGVpZ2h0KCkgKiB2ZXJ0aWNhbEZhY3Rvcik7CisgICAgICAgIGludCBuZXdUaWxlSUQgPSBu
b2RlLT5jcmVhdGVDb250ZW50c1RpbGUoMS4wKTsKKyAgICAgICAgbm9kZS0+c2V0VGlsZUJhY2tC
dWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UobmV3VGlsZUlELCBJbnRSZWN0
KHNvdXJjZVJlY3QpLCB0YXJnZXRSZWN0LCB0aWxlSXQtPnNlY29uZC5nZXQoKSk7CisgICAgfQor
fQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Zmx1c2hMYXllckNoYW5nZXMoKQoreworICAg
IG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShGbG9hdFJlY3QoKSk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVSb290TGF5ZXIoKQoreworICAgIGlmIChtX3Jv
b3RMYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcm9vdExheWVyID0gY3JlYXRlTGF5ZXIo
SW52YWxpZFdlYkxheWVySUQpOworICAgIG1fcm9vdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZh
bHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jv
b3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKKworICAgIC8v
IFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJl
IG9wdGltaXplZCBvdXQuCisgICAgbV9yb290TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwg
MS4wKSk7CisgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsK
KyAgICB0b1RleHR1cmVNYXBwZXJOb2RlKG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1h
cHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6c3luY1JlbW90ZUNvbnRlbnQoKQoreworICAgIC8vIFdlIGVucXVldWUgbWVzc2FnZXMgYW5k
IGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWlyZSBhbiBhY3RpdmUgR0wg
Y29udGV4dC4KKyAgICBlbnN1cmVSb290TGF5ZXIoKTsKKworICAgIHdoaWxlIChPd25QdHI8TGF5
ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG5leHRNZXNzYWdlID0gbV9tZXNzYWdlc1RvUmVuZGVy
ZXIudHJ5R2V0TWVzc2FnZSgpKSB7CisgICAgICAgIHN3aXRjaCAobmV4dE1lc3NhZ2UtPnR5cGUo
KSkgeworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpTZXRSb290TGF5
ZXI6IHsKKyAgICAgICAgICAgIGNvbnN0IFNldFJvb3RMYXllck1lc3NhZ2VEYXRhJiBkYXRhID0g
c3RhdGljX2Nhc3Q8U2V0Um9vdExheWVyTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0
YSgpOworICAgICAgICAgICAgc2V0Um9vdExheWVySUQoZGF0YS5sYXllcklEKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9S
ZW5kZXJlcjo6RGVsZXRlTGF5ZXI6IHsKKyAgICAgICAgICAgIGNvbnN0IERlbGV0ZUxheWVyTWVz
c2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxEZWxldGVMYXllck1lc3NhZ2UqPihuZXh0TWVz
c2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGRlbGV0ZUxheWVyKGRhdGEubGF5ZXJJ
RCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJU
cmVlTWVzc2FnZVRvUmVuZGVyZXI6OlN5bmNMYXllclBhcmFtZXRlcnM6IHsKKyAgICAgICAgICAg
IGNvbnN0IFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0
PFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7
CisgICAgICAgICAgICBzeW5jTGF5ZXJQYXJhbWV0ZXJzKGRhdGEubGF5ZXJJbmZvKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdl
VG9SZW5kZXJlcjo6Q3JlYXRlVGlsZTogeworICAgICAgICAgICAgY29uc3QgQ3JlYXRlVGlsZU1l
c3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8Q3JlYXRlVGlsZU1lc3NhZ2UqPihuZXh0TWVz
c2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGNyZWF0ZVRpbGUoZGF0YS5sYXllcklE
LCBkYXRhLnJlbW90ZVRpbGVJRCwgZGF0YS5zY2FsZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92
ZVRpbGU6IHsKKyAgICAgICAgICAgIGNvbnN0IFJlbW92ZVRpbGVNZXNzYWdlRGF0YSYgZGF0YSA9
IHN0YXRpY19jYXN0PFJlbW92ZVRpbGVNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRh
KCk7CisgICAgICAgICAgICByZW1vdmVUaWxlKGRhdGEubGF5ZXJJRCwgZGF0YS5yZW1vdGVUaWxl
SUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVy
VHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVUaWxlOiB7CisgICAgICAgICAgICBjb25zdCBV
cGRhdGVUaWxlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxVcGRhdGVUaWxlTWVzc2Fn
ZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAgICAgdXBkYXRlVGlsZShk
YXRhLmxheWVySUQsIGRhdGEucmVtb3RlVGlsZUlELCBkYXRhLnNvdXJjZVJlY3QsIGRhdGEudGFy
Z2V0UmVjdCwgZGF0YS5pbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkNyZWF0ZUltYWdlOiB7Cisg
ICAgICAgICAgICBjb25zdCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nh
c3Q8Q3JlYXRlSW1hZ2VNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAg
ICAgICAgICBjcmVhdGVJbWFnZShkYXRhLmltYWdlSUQsIGRhdGEuaW1hZ2UpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyOjpEZXN0cm95SW1hZ2U6IHsKKyAgICAgICAgICAgIGNvbnN0IENyZWF0ZUltYWdlTWVz
c2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxDcmVhdGVJbWFnZU1lc3NhZ2UqPihuZXh0TWVz
c2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGRlc3Ryb3lJbWFnZShkYXRhLmltYWdl
SUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVy
VHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpGbHVzaExheWVyQ2hhbmdlczoKKyAgICAgICAgICAgIGZs
dXNoTGF5ZXJDaGFuZ2VzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25Q
dHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG1lc3NhZ2UpCit7CisgICAgbV9tZXNzYWdl
c1RvUmVuZGVyZXIuYXBwZW5kKG1lc3NhZ2UpOworICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQs
IGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAg
ICBDcmVhdGVUaWxlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySUQgPSBsYXllcklE
OworICAgIGRhdGEucmVtb3RlVGlsZUlEID0gdGlsZUlEOworICAgIGRhdGEuc2NhbGUgPSB1cGRh
dGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yOworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKENyZWF0ZVRp
bGVNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklE
LCB0aWxlSUQsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBk
YXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgVXBkYXRlVGlsZU1lc3NhZ2VEYXRhIGRhdGE7
CisgICAgZGF0YS5sYXllcklEID0gbGF5ZXJJRDsKKyAgICBkYXRhLnJlbW90ZVRpbGVJRCA9IHRp
bGVJRDsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRt
YXA6OmNyZWF0ZSh1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSk7CisgICAgZGF0YS5pbWFnZSA9IGJp
dG1hcC0+Y3JlYXRlUUltYWdlKCkuY29weSgpOworICAgIGRhdGEuc291cmNlUmVjdCA9IEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzLnNpemUoKSk7
CisgICAgZGF0YS50YXJnZXRSZWN0ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzOworICAg
IHB1c2hVcGRhdGVUb1F1ZXVlKFVwZGF0ZVRpbGVNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlEKQoreworICAgIFJlbW92ZVRpbGVNZXNzYWdlRGF0YSBkYXRhOworICAgIGRh
dGEubGF5ZXJJRCA9IGxheWVySUQ7CisgICAgZGF0YS5yZW1vdGVUaWxlSUQgPSB0aWxlSUQ7Cisg
ICAgcHVzaFVwZGF0ZVRvUXVldWUoUmVtb3ZlVGlsZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9
CisKKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2Vi
TGF5ZXJJRCBpZCkKK3sKKyAgICBEZWxldGVMYXllck1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0
YS5sYXllcklEID0gaWQ7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoRGVsZXRlTGF5ZXJNZXNzYWdl
OjpjcmVhdGUoZGF0YSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBTZXRSb290TGF5ZXJNZXNzYWdl
RGF0YSBkYXRhOworICAgIGRhdGEubGF5ZXJJRCA9IGlkOworICAgIHB1c2hVcGRhdGVUb1F1ZXVl
KFNldFJvb3RMYXllck1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpzeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKGNvbnN0IFdlYkxheWVySW5mbyYg
aW5mbykKK3sKKyAgICBTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZURhdGEgZGF0YTsKKyAgICBk
YXRhLmxheWVySW5mbyA9IGluZm87CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoU3luY0xheWVyUGFy
YW1ldGVyc01lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFBy
b3h5OjpkaWRSZW5kZXJGcmFtZSgpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkt
PnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1l
KCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgcHVzaFVwZGF0
ZVRvUXVldWUoRmx1c2hMYXllckNoYW5nZXNNZXNzYWdlOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90
IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlKQorewor
ICAgIENyZWF0ZUltYWdlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGRhdGEu
aW1hZ2VJRCA9IGtleTsKKyAgICBkYXRhLmltYWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKS5j
b3B5KCk7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoQ3JlYXRlSW1hZ2VNZXNzYWdlOjpjcmVhdGUo
ZGF0YSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29t
cG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQoreworICAgIERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRh
IGRhdGE7CisgICAgZGF0YS5pbWFnZUlEID0ga2V5OworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKERl
c3Ryb3lJbWFnZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0
UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNv
bnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKSwgbV9kcmF3aW5nQXJl
YVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9h
dCBzY2FsZSkKK3sKKyAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworICAgIG1fY29u
dGVudHNTY2FsZSA9IHNjYWxlOworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVj
dEFuZFNjYWxlKHJlY3QsIHNjYWxlKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJ
RCgpKTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
LnBybyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCmluZGV4IDI3NzVlOGEuLjM2YTg1MDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIucHJvCkBAIC0yOSw2ICsyOSw4IEBAIFdFQktJVDFfU09VUkNFU19TSEFSRURf
V0lUSF9XRUJLSVQyID0gXAogV0VCS0lUMl9HRU5FUkFURURfSEVBREVSUyA9IFwKICAgICAkJFdF
QktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0F1dGhlbnRpY2F0aW9uTWFuYWdlck1lc3NhZ2Vz
LmggXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRG93bmxvYWRQcm94eU1l
c3NhZ2VzLmggXAorICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVl
SG9zdE1lc3NhZ2VzLmggXAorICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5
ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggXAogICAgICQkV0VCS0lU
Ml9HRU5FUkFURURfU09VUkNFU19ESVIvUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBc
CiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5Qcm9jZXNzQ29ubmVj
dGlvbk1lc3NhZ2VzLmggXApAQCAtNjcsNiArNjksOCBAQCBXRUJLSVQyX0dFTkVSQVRFRF9TT1VS
Q0VTID0gXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRG93bmxvYWRQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19E
SVIvRHJhd2luZ0FyZWFNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJB
VEVEX1NPVVJDRVNfRElSL0RyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKKyAg
ICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJlZUhvc3RNZXNzYWdlUmVj
ZWl2ZXIuY3BwIFwKKyAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJl
ZUhvc3RQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURf
U09VUkNFU19ESVIvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIFwK
ICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL1BsdWdpbkNvbnRyb2xsZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19E
SVIvUGx1Z2luUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgXApAQCAtMTYyLDYgKzE2Niw3IEBA
IEhFQURFUlMgKz0gXAogICAgIFNoYXJlZC9XZWJHcmFwaGljc0NvbnRleHQuaCBcCiAgICAgU2hh
cmVkL1dlYkhpdFRlc3RSZXN1bHQuaCBcCiAgICAgU2hhcmVkL1dlYkltYWdlLmggXAorICAgIFNo
YXJlZC9XZWJMYXllclRyZWVJbmZvLmggXAogICAgIFNoYXJlZC9XZWJOYXZpZ2F0aW9uRGF0YVN0
b3JlLmggXAogICAgIFNoYXJlZC9XZWJOdW1iZXIuaCBcCiAgICAgU2hhcmVkL1dlYk9wZW5QYW5l
bFBhcmFtZXRlcnMuaCBcCkBAIC0zMTYsNiArMzIxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFcnJvcnMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmggXAorICAgIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggXApAQCAtMzk5LDYgKzQwNSw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIFNoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcCBcCiAgICAgU2hhcmVkL1dl
YktleWJvYXJkRXZlbnQuY3BwIFwKICAgICBTaGFyZWQvV2ViSW1hZ2UuY3BwIFwKKyAgICBTaGFy
ZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAgXAogICAgIFNoYXJlZC9XZWJNb3VzZUV2ZW50LmNwcCBc
CiAgICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuY3BwIFwKICAgICBTaGFyZWQvV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAgXApAQCAtNDg2LDYgKzQ5Myw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVBy
b2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAg
XAorICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0
dXJlUmVjb2duaXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25p
emVyLmNwcCBcCkBAIC01NjUsNiArNTczLDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAgXAorICAgIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcAppbmRleCAyMThmMmZmLi40MmJhMDc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NM
YXllci5jcHAKQEAgLTI1LDEzICsyNSwxMyBAQAogCiAjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCiAj
aW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5o
IgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94
eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZS5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJ0ZXh0L0NT
dHJpbmcuaCIKICNpbmNsdWRlIDxIYXNoTWFwLmg+CkBAIC01OCwxMiArNTgsNiBAQCBXZWJHcmFw
aGljc0xheWVyKiBXZWJHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklE
IGlkKQogICAgIHJldHVybiBpdC0+c2Vjb25kOwogfQogCi1zdGF0aWMgVmVjdG9yPFdlYkxheWVy
SUQ+JiBkZWxldGVkTGF5ZXJJRHMoKQotewotICAgIHN0YXRpYyBWZWN0b3I8V2ViTGF5ZXJJRD4g
bGF5ZXJzOwotICAgIHJldHVybiBsYXllcnM7Ci19Ci0KIHN0YXRpYyBXZWJMYXllcklEIHRvV2Vi
TGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICByZXR1cm4gbGF5ZXIgPyB0b1dl
YkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDogMDsKQEAgLTc5LDY3ICs3Myw5MSBAQCB2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6Om5vdGlmeUNoYW5nZSgpCiBXZWJHcmFwaGljc0xheWVyOjpXZWJH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdyYXBoaWNz
TGF5ZXIoY2xpZW50KQogICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCi0gICAgLCBtX21vZGlm
aWVkKGZhbHNlKQorICAgICwgbV9tb2RpZmllZCh0cnVlKQogICAgICwgbV9jb250ZW50TmVlZHNE
aXNwbGF5KGZhbHNlKQogICAgICwgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyhmYWxzZSkKLSAgICAs
IG1fY29udGVudFNjYWxlKDEuZikKKyAgICAsIG1faW5VcGRhdGVNb2RlKGZhbHNlKQorI2lmIEVO
QUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICwgbV9sYXllclRyZWVUaWxlQ2xpZW50KDAp
CisgICAgLCBtX21haW5CYWNraW5nU3RvcmUoYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3Jl
KHRoaXMsIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkp
KQorI2VuZGlmCiB7Ci0gICAgLy8gU3RhcnRpbmcgbGF5ZXIgSURzIGZyb20gMTAwMCwgdG8gaGVs
cCBkZXRlY3QgZmF1bHR5IElEcyBlYXNpbHkuCi0gICAgc3RhdGljIFdlYkxheWVySUQgc0lEID0g
MTAwMDsKLSAgICBtX2xheWVySW5mby5pZCA9ICsrc0lEOworICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZS0+c2V0Q29udGVudHNTY2FsZSgxLjApOworICAgIHN0YXRpYyBXZWJMYXllcklEIG5leHRMYXll
cklEID0gMTsKKyAgICBtX2xheWVySW5mby5pZCA9IG5leHRMYXllcklEKys7CiAgICAgbGF5ZXJC
eUlETWFwKCkuYWRkKGlkKCksIHRoaXMpOwogfQogCiBXZWJHcmFwaGljc0xheWVyOjp+V2ViR3Jh
cGhpY3NMYXllcigpCiB7CiAgICAgbGF5ZXJCeUlETWFwKCkucmVtb3ZlKGlkKCkpOwotICAgIGRl
bGV0ZWRMYXllcklEcygpLmFwcGVuZChpZCgpKTsKKworICAgIC8vIFRoaXMgd291bGQgdGVsbCB0
aGUgVUkgcHJvY2VzcyB0byByZWxlYXNlIHRoZSBiYWNraW5nIHN0b3JlLgorICAgIHNldENvbnRl
bnRzVG9JbWFnZSgwKTsKKworICAgIGlmIChtX2xheWVyVHJlZVRpbGVDbGllbnQpCisgICAgICAg
IG1fbGF5ZXJUcmVlVGlsZUNsaWVudC0+ZGlkRGVsZXRlTGF5ZXIoaWQoKSk7CiB9CiAKIGJvb2wg
V2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIq
PiYgY2hpbGRyZW4pCiB7CiAgICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVu
KGNoaWxkcmVuKTsKLSAgICBpZiAob2spCi0gICAgICAgIG5vdGlmeUNoYW5nZSgpOwotICAgIHJl
dHVybiBvazsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJHcmFwaGlj
c0xheWVyKiBjaGlsZCA9IHRvV2ViR3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7CisgICAgICAg
IGNoaWxkLT5zZXRDb250ZW50c1NjYWxlKG1fY29udGVudHNTY2FsZSk7CisgICAgICAgIGNoaWxk
LT5ub3RpZnlDaGFuZ2UoKTsKKyAgICB9CisgICAgbm90aWZ5Q2hhbmdlKCk7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIpOworICAgIHRv
V2ViR3JhcGhpY3NMYXllcihsYXllciktPm5vdGlmeUNoYW5nZSgpOwogICAgIG5vdGlmeUNoYW5n
ZSgpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGlj
c0xheWVyKiBsYXllciwgaW50IGluZGV4KQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
QXRJbmRleChsYXllciwgaW5kZXgpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPm5v
dGlmeUNoYW5nZSgpOwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIq
IHNpYmxpbmcpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShsYXllciwgc2li
bGluZyk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAg
ICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRC
ZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKICAg
ICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b1dl
YkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5ub3RpZnlDaGFuZ2UoKTsKICAgICBub3RpZnlDaGFuZ2Uo
KTsKIH0KIAogYm9vbCBXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXll
ciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQogewogICAgIGJvb2wgb2sgPSBH
cmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKLQotICAgIGlm
IChvaykKLSAgICAgICAgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgcmV0dXJuIG9rOworICAgIGlmICgh
b2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICB0b1dl
YkdyYXBoaWNzTGF5ZXIob2xkQ2hpbGQpLT5ub3RpZnlDaGFuZ2UoKTsKKyAgICB0b1dlYkdyYXBo
aWNzTGF5ZXIobmV3Q2hpbGQpLT5ub3RpZnlDaGFuZ2UoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCkKIHsKKyAgICBpZiAo
V2ViR3JhcGhpY3NMYXllciogcGFyZW50TGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocGFyZW50
KCkpKQorICAgICAgICBwYXJlbnRMYXllci0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgR3JhcGhpY3NM
YXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOworCiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKQEAg
LTI3NCwxMyArMjkyLDI4IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlQW5pbWF0aW9u
KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKIHsKIH0KIAordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCit7CisgICAgc2V0Q29udGVudHNUb0ltYWdl
KDApOworICAgIHNldENvbnRlbnRzVG9JbWFnZShtX2ltYWdlLmdldCgpKTsKK30KKwogdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogewotICAg
IGlmIChpbWFnZSA9PSBtX2ltYWdlLmdldCgpKQorICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQor
ICAgICAgICByZXR1cm47CisgICAgV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0gbGF5
ZXJUcmVlVGlsZUNsaWVudCgpOworICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm47CiAK
KyAgICAvLyBXZSBhZG9wdCBmaXJzdCwgaW4gY2FzZSB0aGlzIGlzIHRoZSBzYW1lIGZyYW1lIC0g
dGhhdCB3YXkgd2UgYXZvaWQgZGVzdHJveWluZyBhbmQgcmVjcmVhdGluZyB0aGUgaW1hZ2UuCisg
ICAgaW50NjRfdCBuZXdJRCA9IGNsaWVudC0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShpbWFnZSk7
CisgICAgY2xpZW50LT5yZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VC
YWNraW5nU3RvcmVJRCk7CisgICAgaWYgKG5ld0lEID09IG1fbGF5ZXJJbmZvLmltYWdlQmFja2lu
Z1N0b3JlSUQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdT
dG9yZUlEID0gbmV3SUQ7CiAgICAgbV9pbWFnZSA9IGltYWdlOwotICAgIHNldE5lZWRzRGlzcGxh
eSgpOworICAgIG1fbGF5ZXJJbmZvLmltYWdlSXNVcGRhdGVkID0gdHJ1ZTsKICAgICBHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOwogICAgIG5vdGlmeUNoYW5nZSgpOwog
fQpAQCAtMzAxLDUwICszMzQsMjkgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNh
dGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIAogdm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLSAgICBu
b3RpZnlDaGFuZ2UoKTsKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSk7CiB9
CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX25lZWRzRGlzcGxheVJlY3QudW5pdGUocmVjdCk7Cisg
ICAgbV9tYWluQmFja2luZ1N0b3JlLT5pbnZhbGlkYXRlKEludFJlY3QocmVjdCkpOwogICAgIG5v
dGlmeUNoYW5nZSgpOwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQogV2ViTGF5ZXJJRCBX
ZWJHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGF5ZXJJbmZvLmlk
OwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZFN5bmNocm9uaXplKCkKK3ZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgbV9tb2RpZmllZCA9IGZhbHNl
OwotICAgIG1fbmVlZHNEaXNwbGF5UmVjdCA9IEZsb2F0UmVjdCgpOwotICAgIGlmIChtX2hhc1Bl
bmRpbmdBbmltYXRpb25zKQotICAgICAgICBub3RpZnlBbmltYXRpb25TdGFydGVkKFdURjo6Y3Vy
cmVudFRpbWUoKSk7Ci0gICAgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA9IGZhbHNlOwotfQotCi1j
b25zdCBXZWJMYXllckluZm8mIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVySW5mbygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fbGF5ZXJJbmZvOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5
bmNDb21wb3NpdGluZ1N0YXRlKCkKLXsKLSAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpCi0gICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7Cisg
ICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOwogICAgIGlm
IChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgcmVwbGljYUxheWVyKCktPnN5bmNDb21wb3NpdGlu
Z1N0YXRlKCk7CisgICAgICAgIHJlcGxpY2FMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShy
ZWN0KTsKICAgICBpZiAobWFza0xheWVyKCkpCi0gICAgICAgIG1hc2tMYXllcigpLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZSgpOworICAgICAgICBtYXNrTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3Rh
dGUocmVjdCk7CisgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiB9
CiAKIFdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBs
YXllcikKQEAgLTM1MiwzMCArMzY0LDE5IEBAIFdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhp
Y3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vi
R3JhcGhpY3NMYXllcio+KGxheWVyKTsKIH0KIAotRmxvYXRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6
Om5lZWRzRGlzcGxheVJlY3QoKSBjb25zdAotewotICAgIEZsb2F0UmVjdCByZWN0ID0gRmxvYXRS
ZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOwotICAgIGlmICghbV9u
ZWVkc0Rpc3BsYXkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KG1fbmVlZHNEaXNwbGF5UmVjdCk7
Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLVZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IFdlYkdy
YXBoaWNzTGF5ZXI6OnRha2VMYXllcnNUb0RlbGV0ZSgpCi17Ci0gICAgVmVjdG9yPFdlYktpdDo6
V2ViTGF5ZXJJRD4gbGF5ZXJzID0gZGVsZXRlZExheWVySURzKCk7Ci0gICAgZGVsZXRlZExheWVy
SURzKCkuY2xlYXIoKTsKLSAgICByZXR1cm4gbGF5ZXJzOwotfQotCiB2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiB7CisgICAgaWYg
KCFtX2xheWVyVHJlZVRpbGVDbGllbnQpCisgICAgICAgIG1fbGF5ZXJUcmVlVGlsZUNsaWVudCA9
IGxheWVyVHJlZVRpbGVDbGllbnQoKTsKKyAgICB1cGRhdGVDb250ZW50QnVmZmVycygpOworCiAg
ICAgbV9sYXllckluZm8ubmFtZSA9IG5hbWUoKTsKICAgICBtX2xheWVySW5mby5hbmNob3JQb2lu
dCA9IGFuY2hvclBvaW50KCk7CiAgICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFj
a2ZhY2VWaXNpYmlsaXR5KCk7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBj
aGlsZHJlblRyYW5zZm9ybSgpOwogICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29u
dGVudHNPcGFxdWUoKTsKICAgICBtX2xheWVySW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1Jl
Y3QoKTsKLSAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKKyAg
ICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKSB8fCBtX2ltYWdlOwog
ICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVySUQobWFza0xheWVyKCkpOwogICAgIG1f
bGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7CiAgICAgbV9sYXllcklu
Zm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKQEAgLTM4MywxMjIgKzM4NCwxNTkgQEAgdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQogICAg
IG1fbGF5ZXJJbmZvLnBvcyA9IHBvc2l0aW9uKCk7CiAgICAgbV9sYXllckluZm8ucHJlc2VydmVz
M0QgPSBwcmVzZXJ2ZXMzRCgpOwogICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVy
SUQocmVwbGljYUxheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBGbG9hdFNpemUoc2l6
ZSgpLndpZHRoKCkgKiBtX2NvbnRlbnRTY2FsZSwgc2l6ZSgpLmhlaWdodCgpICogbV9jb250ZW50
U2NhbGUpOworICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBzaXplKCk7CiAgICAgbV9sYXllckluZm8u
dHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAgbV9jb250ZW50TmVlZHNEaXNwbGF5ID0gZmFs
c2U7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uY2xlYXIoKTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKICAgICAgICAgbV9sYXllckluZm8u
Y2hpbGRyZW4uYXBwZW5kKHRvV2ViTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CisKKyAgICBtX2xh
eWVyVHJlZVRpbGVDbGllbnQtPmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIobV9sYXll
ckluZm8pOworICAgIG1fbW9kaWZpZWQgPSBmYWxzZTsKKyAgICBtX2xheWVySW5mby5pbWFnZUlz
VXBkYXRlZCA9IGZhbHNlOworICAgIGlmIChtX2hhc1BlbmRpbmdBbmltYXRpb25zKQorICAgICAg
ICBub3RpZnlBbmltYXRpb25TdGFydGVkKFdURjo6Y3VycmVudFRpbWUoKSk7CisgICAgbV9oYXNQ
ZW5kaW5nQW5pbWF0aW9ucyA9IGZhbHNlOwogfQogCi1zdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4g
ZGl2aWRlSW50b1RpbGVzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyNpZiBFTkFCTEUoVElMRURf
QkFDS0lOR19TVE9SRSkKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQ
YWludEJlZ2luKCkKIHsKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlczsKLSAgICBmb3IgKGZs
b2F0IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7
Ci0gICAgICAgIGZvciAoZmxvYXQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7IHggKz0g
Z1RpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlKHgsIHksIGdUaWxl
RGltZW5zaW9uLCBnVGlsZURpbWVuc2lvbik7Ci0gICAgICAgICAgICB0aWxlLmludGVyc2VjdChy
ZWN0KTsKLSAgICAgICAgICAgIHRpbGVzLmFwcGVuZCh0aWxlKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gdGlsZXM7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0lu
Zm9Gb3JUaGlzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91
dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKK3ZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKIHsKLSAgICBXZWJHcmFw
aGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihsYXllcik7Ci0gICAgaWYgKCFs
YXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbGF5ZXItPmlzTW9kaWZpZWQoKSkKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hp
bGRyZW4oKVtpXSk7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKKyAg
ICB9CisKKyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKKyAgICBpZiAobV9tYWluQmFja2lu
Z1N0b3JlICYmIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpID09IHNjYWxlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBvdXRMYXllcnMuYXBwZW5kKGxheWVyKTsKLSAgICBvdXRJ
bmZvLmxheWVycy5hcHBlbmQobGF5ZXItPmxheWVySW5mbygpKTsKKyAgICBub3RpZnlDaGFuZ2Uo
KTsKIAotICAgIFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvID0gb3V0SW5mby5sYXllcnNbb3V0SW5m
by5sYXllcnMuc2l6ZSgpIC0gMV07Ci0gICAgaWYgKGxheWVyLT5pbWFnZSgpKQotICAgICAgICBs
YXllckluZm8uZHJhd3NDb250ZW50ID0gdHJ1ZTsKKyAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3Jl
ID0gbV9tYWluQmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUg
PSBhZG9wdFB0cihuZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlQmFja2VuZDo6Y3JlYXRlKHRoaXMpKSk7CisgICAgbV9tYWluQmFja2luZ1N0b3Jl
LT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKIH0KIAotc3RhdGljIHZvaWQgY29sbGVjdENvbXBv
c2l0aW5nSW5mb1JlY3Vyc2l2ZWx5KEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciwgV2ViTGF5ZXJU
cmVlSW5mbyYgb3V0SW5mbywgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiYgb3V0TGF5ZXJzKQor
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3QpCiB7Ci0gICAg
aWYgKCFyb290TGF5ZXIpCisgICAgbV9sYXllckluZm8uaXNSb290TGF5ZXIgPSBpc1Jvb3Q7Cisg
ICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJs
ZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5
VmVjdG9yKQoreworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0VmlzaWJsZVJlY3RUcmFqZWN0
b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fdmlz
aWJsZUNvbnRlbnRSZWN0ID0gcmVjdDsKKyAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICBtX21haW5C
YWNraW5nU3RvcmUtPmFkanVzdFZpc2libGVSZWN0KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CisgICAgbV9tb2RpZmllZCA9IHRydWU7CisgICAgcGFpbnRHcmFwaGljc0xheWVyQ29u
dGVudHMoKmNvbnRleHQsIHJlY3QpOworfQogCi0gICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0Zv
clRoaXNMYXllcihyb290TGF5ZXIsIG91dEluZm8sIG91dExheWVycyk7Ci0gICAgY29sbGVjdENv
bXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihyb290TGF5ZXItPm1hc2tMYXllcigpLCBvdXRJbmZv
LCBvdXRMYXllcnMpOwotICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseShyb290
TGF5ZXItPnJlcGxpY2FMYXllcigpLCBvdXRJbmZvLCBvdXRMYXllcnMpOwordm9pZCBXZWJHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0
PiYgdXBkYXRlZFJlY3RzKQoreworfQogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290
TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvbGxlY3RDb21wb3NpdGlu
Z0luZm9SZWN1cnNpdmVseShyb290TGF5ZXItPmNoaWxkcmVuKClbaV0sIG91dEluZm8sIG91dExh
eWVycyk7Citib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0Fs
bG93ZWQoKSBjb25zdAoreworICAgIGlmICghbV9pblVwZGF0ZU1vZGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0gbGF5ZXJU
cmVlVGlsZUNsaWVudCgpKQorICAgICAgICByZXR1cm4gY2xpZW50LT5sYXllclRyZWVUaWxlVXBk
YXRlc0FsbG93ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c2VuZExheWVyc1RvVUlQcm9jZXNzKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RM
YXllciwgV2ViUGFnZSogd2ViUGFnZSkKK0ludFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVDb250ZW50c1JlY3QoKQogewotICAgIHdlYlBhZ2UtPmxheW91dElmTmVlZGVk
KCk7Ci0gICAgd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0Nv
bXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKLSAgICBXZWJMYXllclRyZWVJbmZv
IGNvbXBvc2l0aW5nSW5mbzsKLSAgICBjb21wb3NpdGluZ0luZm8ucm9vdExheWVySUQgPSByb290
TGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIocm9vdExheWVyKS0+aWQoKSA6IDA7Ci0gICAgY29t
cG9zaXRpbmdJbmZvLmNvbnRlbnRTY2FsZSA9IDEuMDsKLSAgICBjb21wb3NpdGluZ0luZm8uZGVs
ZXRlZExheWVySURzID0gV2ViR3JhcGhpY3NMYXllcjo6dGFrZUxheWVyc1RvRGVsZXRlKCk7Ci0g
ICAgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiBsYXllcnM7Ci0gICAgaWYgKHJvb3RMYXllcikK
LSAgICAgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb1JlY3Vyc2l2ZWx5KHJvb3RMYXllciwgY29t
cG9zaXRpbmdJbmZvLCBsYXllcnMpOworICAgIGlmIChtX2ltYWdlKQorICAgICAgICByZXR1cm4g
SW50UmVjdCgpOworICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXpl
KCkuaGVpZ2h0KCkpOworfQogCi0gICAgaWYgKGNvbXBvc2l0aW5nSW5mby5kZWxldGVkTGF5ZXJJ
RHMuaXNFbXB0eSgpICYmIGNvbXBvc2l0aW5nSW5mby5sYXllcnMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47CitJbnRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlz
aWJsZVJlY3QoKQoreworICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50UmVjdDsKK30KIAotICAg
IHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OlN5bmNDb21wb3NpdGlu
Z0xheWVycyhjb21wb3NpdGluZ0luZm8pKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
bGF5ZXJzW2ldOwotICAgICAgICBGbG9hdFJlY3QgdXBkYXRlUmVjdCA9IGxheWVyLT5uZWVkc0Rp
c3BsYXlSZWN0KCk7Ci0KLSAgICAgICAgbGF5ZXItPmRpZFN5bmNocm9uaXplKCk7Ci0KLSAgICAg
ICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgUmVmUHRyPEltYWdlPiBkaXJlY3RJbWFnZSA9IGxheWVyLT5pbWFnZSgpOwotICAgICAg
ICBpZiAoZGlyZWN0SW1hZ2UpCi0gICAgICAgICAgICB1cGRhdGVSZWN0ID0gbGF5ZXItPmNvbnRl
bnRzUmVjdCgpOwotICAgICAgICBlbHNlIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGlsZVJlY3Rz
ID0gZGl2aWRlSW50b1RpbGVzKHVwZGF0ZVJlY3QpOwotICAgICAgICBmb3IgKHNpemVfdCB0aWxl
SW5kZXggPSAwOyB0aWxlSW5kZXggPCB0aWxlUmVjdHMuc2l6ZSgpOyArK3RpbGVJbmRleCkgewot
ICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCA9IHRpbGVSZWN0c1t0aWxlSW5k
ZXhdOwotICAgICAgICAgICAgSW50UmVjdCBlbmNsb3NpbmdVcGRhdGVSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdCh0aWxlUmVjdCk7Ci0KLSAgICAgICAgICAgIFdlYkxheWVyVXBkYXRlSW5mbyBjaHVu
ayhlbmNsb3NpbmdVcGRhdGVSZWN0KTsKLSAgICAgICAgICAgIGNodW5rLmxheWVySUQgPSB1aW50
MzJfdChsYXllci0+aWQoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBi
aXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShjaHVuay5yZWN0LnNpemUo
KSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICAgICAgICAgIGlmICghYml0
bWFwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKCFiaXRtYXAt
PmNyZWF0ZUhhbmRsZShjaHVuay5iaXRtYXBIYW5kbGUpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotI2lmIFBMQVRGT1JNKFFUKQotICAgICAgICAgICAgUUltYWdlIHRpbGVJbWFnZSA9IGJp
dG1hcC0+Y3JlYXRlUUltYWdlKCk7Ci0gICAgICAgICAgICB0aWxlSW1hZ2UuZmlsbCgwKTsKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBRUGFpbnRlciBwYWludGVyKCZ0aWxlSW1hZ2Up
OwotICAgICAgICAgICAgICAgIHBhaW50ZXIudHJhbnNsYXRlKC10aWxlUmVjdC54KCksIC10aWxl
UmVjdC55KCkpOwotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZwYWlu
dGVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlyZWN0SW1hZ2UpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQuZHJhd0ltYWdlKGRpcmVjdEltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBsYXllci0+Y29udGVudHNSZWN0KCksIEZsb2F0UmVjdCgwLCAwLCBkaXJlY3RJbWFnZS0+
d2lkdGgoKSwgZGlyZWN0SW1hZ2UtPmhlaWdodCgpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBsYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29u
dGV4dCwgZW5jbG9zaW5nVXBkYXRlUmVjdCk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKK0NvbG9y
IFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gY29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9y
Ojp0cmFuc3BhcmVudDsKKworfQordm9pZCBXZWJHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKGlu
dCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV9tb2RpZmll
ZCA9IHRydWU7CisgICAgaWYgKFdlYkxheWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9IGxheWVy
VHJlZVRpbGVDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5jcmVhdGVUaWxlKGlkKCksIHRpbGVJ
RCwgdXBkYXRlSW5mbyk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZShp
bnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIG1fbW9kaWZp
ZWQgPSB0cnVlOworICAgIGlmIChXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBsYXll
clRyZWVUaWxlQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+dXBkYXRlVGlsZShpZCgpLCB0aWxl
SUQsIHVwZGF0ZUluZm8pOworfQogCi0gICAgICAgICAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpEcmF3aW5nQXJlYVByb3h5OjpVcGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChjaHVuaykp
OwotICAgICAgICB9Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUoaW50IHRpbGVJ
RCkKK3sKKyAgICBtX21vZGlmaWVkID0gdHJ1ZTsKKyAgICBpZiAoV2ViTGF5ZXJUcmVlVGlsZUNs
aWVudCogY2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgpKQorICAgICAgICBjbGllbnQtPnJl
bW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRh
dGVUaWxlQnVmZmVyc1JlY3Vyc2l2ZWx5KCkKK3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnVw
ZGF0ZVRpbGVCdWZmZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigp
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gdG9XZWJH
cmFwaGljc0xheWVyKHRoaXMtPmNoaWxkcmVuKClbaV0pOworICAgICAgICBsYXllci0+dXBkYXRl
VGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSgpOwogICAgIH0KIH0KIAorV2ViTGF5ZXJUcmVlVGlsZUNs
aWVudCogV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJUcmVlVGlsZUNsaWVudCgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fbGF5ZXJUcmVlVGlsZUNsaWVudCkKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVl
VGlsZUNsaWVudDsKKyAgICBXZWJHcmFwaGljc0xheWVyKiBwYXJlbnQgPSB0b1dlYkdyYXBoaWNz
TGF5ZXIodGhpcy0+cGFyZW50KCkpOworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gcGFyZW50LT5sYXllclRyZWVUaWxlQ2xpZW50KCk7Cit9CisKK3ZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQoreworICAgIC8vIEJhY2tp
bmctc3RvcmVzIGZvciBkaXJlY3RseSBjb21wb3NpdGVkIGltYWdlcyBpcyBoYW5kbGVkIGluIExh
eWVyVHJlZUhvc3QuCisgICAgaWYgKG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJMYXllclRyZWVUaWxl
Q2xpZW50KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCk7CisgICAgaWYgKCFjbGllbnQp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2luVXBkYXRlTW9kZSA9IHRydWU7CisgICAgbV9tYWlu
QmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOworICAgIG1faW5VcGRhdGVNb2RlID0g
ZmFsc2U7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBj
cmVhdGVXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIHsKICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYkdyYXBoaWNzTGF5ZXIoY2xpZW50KSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3Jh
cGhpY3NMYXllci5oCmluZGV4IGFkNjAyMWUuLmM1ODFiNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXll
ci5oCkBAIC0yNywxOSArMjcsNDAgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAi
UnVuTG9vcC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRpbGVk
QmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKKyNp
bmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJM
YXllclRyZWVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlBhZ2U7
CisKK2NsYXNzIFdlYkxheWVyVHJlZVRpbGVDbGllbnQgeworcHVibGljOgorICAgIC8vIFRpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxl
KFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRl
SW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQg
dGlsZUlEKSA9IDA7CisgICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dl
ZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9y
ZShJbWFnZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3Jl
KGludDY0X3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVG
b3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZERl
bGV0ZUxheWVyKFdlYkxheWVySUQpID0gMDsKK307CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgV2ViR3JhcGhpY3NMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVy
IHsKK2NsYXNzIFdlYkdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXll
cgorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICAgICAgICAgICAgICAgICAg
ICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAgICAgICAgICAgICAgICAgICAg
ICAsIHB1YmxpYyBXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorI2Vu
ZGlmCit7CiBwdWJsaWM6CiAgICAgV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50
Kik7CiAgICAgdmlydHVhbCB+V2ViR3JhcGhpY3NMYXllcigpOwpAQCAtNzMsMTMgKzk0LDEzIEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHZvaWQgc2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgc2V0Q29udGVudHNOZWVk
c0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAg
ICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBz
ZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0Jik7
CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OworICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wpOwogCiAgICAgV2ViS2l0OjpXZWJMYXllcklE
IGlkKCkgY29uc3Q7Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJMYXllckluZm8mIGxheWVySW5mbygp
IGNvbnN0OwotICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0KCkgY29uc3Q7Ci0gICAgc3Rh
dGljIFZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IHRha2VMYXllcnNUb0RlbGV0ZSgpOwogICAg
IHN0YXRpYyBXZWJHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEKTsK
ICAgICBib29sIGlzTW9kaWZpZWQoKSBjb25zdCB7IHJldHVybiBtX21vZGlmaWVkOyB9CiAgICAg
dm9pZCBkaWRTeW5jaHJvbml6ZSgpOwpAQCAtODcsMjEgKzEwOCw1MSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSk7CiAKICAgICBzdGF0aWMgdm9pZCBp
bml0RmFjdG9yeSgpOwotICAgIHN0YXRpYyB2b2lkIHNlbmRMYXllcnNUb1VJUHJvY2VzcyhXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgV2ViS2l0OjpXZWJQYWdlKik7CisKKyNpZiBFTkFCTEUoVElM
RURfQkFDS0lOR19TVE9SRSkKKyAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAgIHZp
cnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVj
dG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7CisgICAgdmlydHVhbCBib29sIHRpbGVkQmFja2lu
Z1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRC
YWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNr
aW5nU3RvcmVWaXNpYmxlUmVjdCgpOworICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3Rv
cmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKworICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNv
bnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGlu
dCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVUaWxlKGludCB0aWxlSUQpOworCisgICAgdm9pZCBzZXRMYXllclRyZWVUaWxlQ2xpZW50
KFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50KSB7IG1fbGF5ZXJUcmVlVGls
ZUNsaWVudCA9IGNsaWVudDsgfQorICAgIFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCog
bGF5ZXJUcmVlVGlsZUNsaWVudCgpIGNvbnN0OworCisgICAgYm9vbCBpc1JlYWR5Rm9yVGlsZUJ1
ZmZlclN3YXAoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVRpbGVCdWZmZXJzUmVjdXJzaXZlbHko
KTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOworICAgIHZvaWQgdXBkYXRlQ29u
dGVudEJ1ZmZlcnMoKTsKKyNlbmRpZgogCiBwcml2YXRlOgogICAgIFdlYktpdDo6V2ViTGF5ZXJJ
bmZvIG1fbGF5ZXJJbmZvOwotICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcD4gbV9i
YWNraW5nU3RvcmU7CisgICAgV2ViS2l0OjpXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBtX2xheWVy
VGlsZUNsaWVudDsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAgRmxvYXRSZWN0IG1f
bmVlZHNEaXNwbGF5UmVjdDsKLSAgICBib29sIG1fbmVlZHNEaXNwbGF5OwotICAgIGJvb2wgbV9t
b2RpZmllZDsKLSAgICBib29sIG1fY29udGVudE5lZWRzRGlzcGxheTsKLSAgICBib29sIG1faGFz
UGVuZGluZ0FuaW1hdGlvbnM7Ci0KLSAgICBmbG9hdCBtX2NvbnRlbnRTY2FsZTsKKyAgICBJbnRS
ZWN0IG1fdmlzaWJsZUNvbnRlbnRSZWN0OworICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXkgOiAxOwor
ICAgIGJvb2wgbV9tb2RpZmllZCA6IDE7CisgICAgYm9vbCBtX2NvbnRlbnROZWVkc0Rpc3BsYXkg
OiAxOworICAgIGJvb2wgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA6IDE7CisgICAgYm9vbCBtX2lu
VXBkYXRlTW9kZSA6IDI7CiAKICAgICB2b2lkIG5vdGlmeUNoYW5nZSgpOworCisjaWYgRU5BQkxF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgV2ViS2l0OjpXZWJMYXllclRyZWVUaWxlQ2xpZW50
KiBtX2xheWVyVHJlZVRpbGVDbGllbnQ7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2lu
Z1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFj
a2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOworICAgIGZsb2F0IG1fY29udGVudHNT
Y2FsZTsKKyNlbmRpZgogfTsKIAogV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xheWVy
KEdyYXBoaWNzTGF5ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhLmgKaW5kZXggNTJmZGRkZC4uZDg3MGViMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTc0LDEwICs3NCwxMSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSB7IH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNp
ZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJTeW5jKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXllcnMo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXIqKSA9IDA7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKaW5k
ZXggOTdmZjgyNy4uN2RkN2M4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKQEAgLTY3Myw1ICs2NzMsMTMgQEAgdm9p
ZCBEcmF3aW5nQXJlYUltcGw6OmRpc3BsYXkoVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKICAgICBt
X2xhc3REaXNwbGF5VGltZSA9IGN1cnJlbnRUaW1lKCk7CiB9CiAKKyNpZiBFTkFCTEUoVElMRURf
QkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3
aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25u
ZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0
KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2Fn
ZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7Cit9CisjZW5kaWYKKwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYUltcGwuaAppbmRleCBjYzhhODA1Li4zNWIyMDg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCkBA
IC03MSw2ICs3MSwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNoaWxk
V2luZG93R2VvbWV0cnlVcGRhdGUoY29uc3QgV2luZG93R2VvbWV0cnkmKTsKICNlbmRpZgogCisj
aWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciopOworI2VuZGlmCisKICAgICAvLyBDb3JlSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdT
dG9yZVN0YXRlSUQsIGJvb2wgcmVzcG9uZEltbWVkaWF0ZWx5LCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNj
cm9sbE9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGRh
NDJhZTYuLjAzMWMzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjZW5kaWYKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oUVQpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJx
dC9MYXllclRyZWVIb3N0UXQuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NCw2ICs0OCw4IEBAIFBhc3NSZWZQdHI8TGF5ZXJU
cmVlSG9zdD4gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgcmV0
dXJuIExheWVyVHJlZUhvc3RDQU1hYzo6Y3JlYXRlKHdlYlBhZ2UpOwogI2VsaWYgUExBVEZPUk0o
V0lOKSAmJiBIQVZFKFdLUUNBKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FXaW46OmNyZWF0
ZSh3ZWJQYWdlKTsKKyNlbGlmIFBMQVRGT1JNKFFUKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisg
ICAgcmV0dXJuIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKHdlYlBhZ2UpOwogI2Vsc2UKICAgICBy
ZXR1cm4gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVIb3N0LmgKaW5kZXggNjdjODA3Yi4uNTFmOTkyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNiwxMyAr
MjYsMjAgQEAKICNpZm5kZWYgTGF5ZXJUcmVlSG9zdF9oCiAjZGVmaW5lIExheWVyVHJlZUhvc3Rf
aAogCisjaW5jbHVkZSA8Q29yZUlQQy9NZXNzYWdlSUQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKK25hbWVzcGFjZSBDb3JlSVBD
IHsKK2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIENvbm5lY3Rpb247Cit9CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnRSZWN0OwotICAgIGNsYXNzIEludFNpemU7Ci0g
ICAgY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBJbnRSZWN0
OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7CiB9CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewpAQCAtNzIsNiArNzksMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXVz
ZVJlbmRlcmluZygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IH0K
IAorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRW
aXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQg
c2NhbGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0
b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBD
OjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRhdGUoY29uc3QgV2luZG93R2VvbWV0cnkmKSA9IDA7
CiAjZW5kaWYKQEAgLTgwLDYgKzk1LDExIEBAIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBMYXll
clRyZWVIb3N0KFdlYlBhZ2UqKTsKIAogICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKKworCisjaWYg
RU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgYm9vbCBtX3dhaXRpbmdGb3JVSVByb2Nl
c3M7CisjZW5kaWYKIH07CiAKICNpZiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oUVQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVIb3N0Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZk
ZTk4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI4IEBACisjCisjICAgIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIwor
IyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorIworCisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkK
K21lc3NhZ2VzIC0+IExheWVyVHJlZUhvc3QgeworICAgIFNldFZpc2libGVDb250ZW50UmVjdEZv
ckxheWVyKGludCBsYXllcklELCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdCkK
KyAgICBTZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKFdlYkNvcmU6OkZsb2F0
UG9pbnQgdHJhamVjdG9yeVZlY3RvcnkpCisgICAgU2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2Nh
bGUoV2ViQ29yZTo6SW50UmVjdCBjb250ZW50UmVjdCwgZmxvYXQgc2NhbGUpCisgICAgUmVuZGVy
TmV4dEZyYW1lKCkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwCmluZGV4IGZhYTZjZGQuLmU3MjA4YTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdp
bmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRE
cmF3aW5nQXJlYS5jcHAKQEAgLTE3Nyw2ICsxNzcsMTAgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVh
OjpyZW1vdmVUaWxlKGludCB0aWxlSUQpCiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpE
cmF3aW5nQXJlYVByb3h5OjpSZW1vdmVUaWxlKHRpbGVJRCkpOwogfQogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBUaWxlZERyYXdpbmdBcmVhOjpkaWRSZWNlaXZlTGF5
ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQ
Qzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykgeyB9Cisj
ZW5kaWYKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCisKICNlbmRpZiAvLyBUSUxFRF9CQUNLSU5H
X1NUT1JFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGls
ZWREcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVk
RHJhd2luZ0FyZWEuaAppbmRleCBlZDEzZDJhLi41ZWI3OWFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgKQEAgLTQ5LDYg
KzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXll
cihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllclN5bmMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0
aW5nTGF5ZXJzKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqKTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDU1ZjVlZmUuLmYxOWI2YmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAg
LTIxNTQsNiArMjE1NCwxNCBAQCB2b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZwogICAgICAgICAgICAg
bV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZURyYXdpbmdBcmVhTWVzc2FnZShjb25uZWN0aW9uLCBt
ZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyNpZiBFTkFC
TEUoVElMRURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdD4o
KSkgeworICAgICAgICBpZiAobV9kcmF3aW5nQXJlYSkKKyAgICAgICAgICAgIG1fZHJhd2luZ0Fy
ZWEtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQs
IGFyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICAKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNs
YXNzV2ViSW5zcGVjdG9yPigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCmluZGV4IDU3OGFlMDguLjgxNmJk
ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9x
dC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0xLDQgKzEsNCBAQAotLyoKKyAgICAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykuCiAgKgpAQCAtMjUsOCArMjUsNDEzIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdFF0LmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKKyNp
bmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdFF0PiBMYXllclRyZWVI
b3N0UXQ6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTGF5ZXJUcmVlSG9zdFF0KHdlYlBhZ2UpKTsKK30KKworTGF5ZXJUcmVlSG9zdFF0Ojp+TGF5
ZXJUcmVlSG9zdFF0KCkKK3sKK30KKworTGF5ZXJUcmVlSG9zdFF0OjpMYXllclRyZWVIb3N0UXQo
V2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkKKyAgICAsIG1f
bm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQorICAgICwgbV9pc1ZhbGlkKHRy
dWUpCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgLCBtX3dhaXRpbmdGb3JV
SVByb2Nlc3MoZmFsc2UpCisgICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQorI2VuZGlmCisgICAg
LCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkU3luY1Jvb3RMYXllcih0
cnVlKQorICAgICwgbV9sYXllckZsdXNoVGltZXIodGhpcywgJkxheWVyVHJlZUhvc3RRdDo6bGF5
ZXJGbHVzaFRpbWVyRmlyZWQpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0
cnVlKQoreworICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCisgICAgbV9yb290TGF5ZXIgPSBH
cmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgV2ViR3JhcGhpY3NMYXllciogd2ViUm9v
dExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICB3ZWJS
b290TGF5ZXItPnNldFJvb3RMYXllcih0cnVlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290
TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3RRdCByb290IGxheWVyIik7CisjZW5kaWYKKyAg
ICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+
c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9sYXllclRyZWVDb250ZXh0LndlYkxh
eWVySUQgPSB0b1dlYkdyYXBoaWNzTGF5ZXIod2ViUm9vdExheWVyKS0+aWQoKTsKKworICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsK
KyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIo
bV9yb290TGF5ZXIuZ2V0KCkpLT5zZXRMYXllclRyZWVUaWxlQ2xpZW50KHRoaXMpOworI2VuZGlm
CisjaWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmFt
ZSgiTGF5ZXJUcmVlSG9zdFF0IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsKKyNlbmRpZgorICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVudHNPcGFxdWUobV93ZWJQYWdl
LT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5zcGFyZW50QmFja2dy
b3VuZCgpKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobV93ZWJQ
YWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci5nZXQoKSk7CisKKyAgICBpZiAobV93ZWJQYWdlLT5oYXNQYWdlT3Zlcmxh
eSgpKQorICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisKKyAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldExheWVyRmx1c2hTY2hl
ZHVsaW5nRW5hYmxlZChib29sIGxheWVyRmx1c2hpbmdFbmFibGVkKQoreworICAgIGlmIChtX2xh
eWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZs
dXNoaW5nRW5hYmxlZDsKKworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKCFt
X2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVyRmx1c2hUaW1l
ci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpjYW5jZWxQZW5k
aW5nTGF5ZXJGbHVzaCgpCit7CisgICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5
ZXJGbHVzaChib29sIG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkKK3sKKyAgICBtX25v
dGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJG
bHVzaDsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVy
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgLy8gQWRkIHRo
ZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KKyAgICBpZiAoZ3JhcGhpY3NMYXll
cikKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGlj
c0xheWVyKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmludmFsaWRhdGUoKQoreworICAg
IGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAg
ICBtX3Jvb3RMYXllciA9IG51bGxwdHI7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIGlmIChtX3BhZ2VPdmVy
bGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdFF0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQor
eworICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2Uo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBtX3Jvb3RMYXllci0+c2V0
U2l6ZShuZXdTaXplKTsKKworICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFz
IG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRl
ZAorICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgorICAgIEZsb2F0U2l6ZSBv
bGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7CisgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgaWYgKG5ld1Np
emUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgeworICAgICAgICBmbG9hdCBoZWlnaHQgPSBz
dGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVp
Z2h0KCkpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkg
LSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOworICAgIH0KKworICAgIGlmIChuZXdTaXplLmhl
aWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0
KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkp
KTsKKworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlM
YXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCkKK3sKKyAgICBj
cmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKK3sKKyAg
ICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxh
eWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6
OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCit7CisgICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+
c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgaWYgKG1fcGFnZU92
ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICByZXR1cm4gZGlkU3luYzsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UXQ6OmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIoY29uc3Qg
V2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U3luY0NvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShpbmZvKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWRE
ZWxldGVMYXllcihXZWJMYXllcklEIGlkKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVs
ZXRlQ29tcG9zaXRpbmdMYXllcihpZCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6cGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQoreworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVk
ZWQoKTsKKworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyNpZiBFTkFC
TEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX3dhaXRp
bmdGb3JVSVByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgbV9zaG91bGRT
eW5jRnJhbWUgPSBmYWxzZTsKKyAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICBp
ZiAoIW1fc2hvdWxkU3luY0ZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zaG91
bGRTeW5jUm9vdExheWVyKSB7CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpTZXRSb290Q29tcG9zaXRpbmdMYXllcih0b1dlYkdyYXBoaWNzTGF5
ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7CisgICAgICAgIG1fc2hvdWxkU3luY1Jvb3RM
YXllciA9IGZhbHNlOworICAgIH0KKworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpEaWRSZW5kZXJGcmFtZSgpKTsKKworICAgIGlmICghbV9ub3RpZnlB
ZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIExldCB0
aGUgZHJhd2luZyBhcmVhIGtub3cgdGhhdCB3ZSd2ZSBkb25lIGEgZmx1c2ggb2YgdGhlIGxheWVy
IGNoYW5nZXMuCisgICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5k
cmF3aW5nQXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKKyAgICBtX25vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworfQorCit2b2lkIExheWVyVHJlZUhvc3RR
dDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlSG9zdFF0PiopCit7CisgICAg
cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6
OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQoreworICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxh
eWVyKTsKKworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0
aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJM
YXllclRyZWVIb3N0UXQgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKKyNlbmRpZgorCisgICAgbV9w
YWdlT3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9wYWdlT3Zlcmxh
eUxheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5h
ZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RRdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVy
bGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwor
ICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7Cit9CisKK2ludDY0X3QgTGF5ZXJUcmVl
SG9zdFF0OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAo
IWltYWdlKQorICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisgICAgUVBpeG1hcCog
cGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisKKyAgICBpZiAo
IXBpeG1hcCkKKyAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOworCisgICAgaW50NjRf
dCBrZXkgPSBwaXhtYXAtPmNhY2hlS2V5KCk7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+Ojpp
dGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkp
OworCisgICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5k
KCkpIHsKKyAgICAgICAgKysoaXQtPnNlY29uZCk7CisgICAgICAgIHJldHVybiBrZXk7CisgICAg
fQorCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0Fs
cGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwKTsKKyAgICB7CisgICAg
ICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJp
dG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsK
KyAgICB9CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgYml0bWFw
LT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5LCBoYW5k
bGUpKTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmFkZChrZXksIDEp
OworICAgIHJldHVybiBrZXk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZWxlYXNlSW1h
Z2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCit7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJl
dHVybjsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IG1fZGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGl0LT5zZWNvbmQtLTsKKworICAgIGlmIChpdC0+c2Vjb25kKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7Cisg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRlc3Ryb3lE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXkpKTsKK30KKworCit2b2lkIExheWVyVHJlZUhvc3RR
dDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwg
ZG91YmxlIHRpbWUpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlTeW5jUmVx
dWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdFF0OjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdy
YXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY2xpcFJlY3QpCit7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyKSB7CisgICAgICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250
ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhp
Y3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3
UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93RGVidWdCb3JkZXJzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93
RGVidWdCb3JkZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENv
dW50ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRp
bmdzKCktPnNob3dSZXBhaW50Q291bnRlcigpOworfQorCitib29sIExheWVyVHJlZUhvc3Q6OnN1
cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCit2b2lkIExheWVyVHJlZUhvc3RRdDo6
Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUlu
Zm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHVwZGF0ZUlu
Zm8pKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBs
YXllcklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVUaWxl
Rm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvKSk7Cit9Cit2b2lkIExheWVyVHJl
ZUhvc3RRdDo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCit7Cisg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZVRp
bGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6
OnNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVyKGludCBsYXllcklELCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQoreworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gV2ViR3Jh
cGhpY3NMYXllcjo6bGF5ZXJCeUlEKGxheWVySUQpOworICAgIGlmICghbGF5ZXIpCisgICAgICAg
IHJldHVybjsKKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QocmVjdCk7CisgICAgbGF5ZXItPnNl
dFZpc2libGVDb250ZW50UmVjdChyZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNl
dFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0IHNj
YWxlKQoreworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gdG9XZWJHcmFwaGljc0xheWVy
KG1fcm9vdExheWVyLmdldCgpKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47Cisg
ICAgbGF5ZXItPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOworICAgIHRvV2ViR3JhcGhpY3NMYXll
cihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29udGVudFJl
Y3QocmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJl
Y3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7
CisgICAgdG9XZWJHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQo
KSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rv
cik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAg
IG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OworfQorCitib29sIExheWVyVHJlZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2Vk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faXNTdXNwZW5kZWQgJiYgIW1fd2FpdGluZ0ZvclVJ
UHJvY2VzczsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorI2Vsc2UKICNp
bmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKQpAQCAtMzUsMyArNDQwLDQgQEAgYm9vbCBMYXllclRyZWVIb3N0Ojpz
dXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110873</attachid>
            <date>2011-10-13 10:35:49 -0700</date>
            <delta_ts>2011-10-13 10:53:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>103429</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2N2ZjYjUyLi5iMjI5NWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcy
IEBACisyMDExLTEwLTExICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1F0XVtXSzJdIFN5bmNocm9uaXplIHRpbGluZyB3aXRoIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE1ha2UgdGhlIHRpbGVkICJub24tY29tcG9zaXRlZCIgY29udGVudCBhbmQgdGhlIGNv
bXBvc2l0ZWQgbGF5ZXJzIGdvIHRocm91Z2ggdGhlIHNhbWUKKyAgICAgICAgY29kZSBwYXRoIG9u
IFdlYktpdDIuIEluc3RlYWQgb2YgaGF2aW5nIGEgImRyYXdpbmcgYXJlYSIgdGhhdCBoYW5kbGVz
IHRoZSBub24tY29tcG9zaXRlZAorICAgICAgICBjb250ZW50IGFuZCBhIHNlcGVyYXRlIGxheWVy
IHRyZWUsIHdlIHB1dCBldmVyeXRoaW5nIGluIGEgbGF5ZXIgdHJlZSwgd2l0aCB0aGUgbm9uLQor
ICAgICAgICBjb21wb3NpdGVkIGNvbnRlbnQgYmVpbmcgYSBsYXllciBpbiB0aGUgdHJlZS4KKwor
ICAgICAgICBUaGlzIGFsbG93cyBmaXhpbmcgc2V2ZXJhbCBpc3N1ZXMgd2l0aCB3ZWJzaXRlcyB0
aGF0IGhhdmUgbGFyZ2UgY29udGVudCBhcmVhcyB0aGF0IGFyZQorICAgICAgICBjb21wb3NpdGVk
IG9yIG92ZXJsYXAgd2l0aCBjb21wb3NpdGVkIGxheWVycy4KKworICAgICAgICBMYXllci10cmVl
IHN5bmNocm9uaXphdGlvbiBpcyBkb25lIGJ5IHBhc3NpbmcgV2ViS2l0MiBtZXNzYWdlcyBiZXR3
ZWVuIGEgTGF5ZXJUcmVlSG9zdAorICAgICAgICBvbiB0aGUgV2ViUHJvY2VzcyBhbmQgYSBMYXll
clRyZWVIb3N0UHJveHkgb24gdGhlIFVJIHByb2Nlc3MuIEV2ZXJ5IGxheWVyIGluIHRoZSB0cmVl
IGhhcworICAgICAgICBpdHMgb3duIHRpbGVkIGJhY2tpbmcgc3RvcmUsIGFuZCB1c2VzIHRoZSBM
YXllclRyZWVIb3N0IGNvbW11bmljYXRpb24gY2hhbm5lbCB0byBwYXNzCisgICAgICAgIGNvbnRl
bnQgdXAgdG8gdGhlIFVJIHByb2Nlc3MuIFRoZSBVSSBwcm9jZXNzIHdpbGwgbGF0ZXIgY3JlYXRl
cyBpdHMgb3duIEdyYXBoaWNzTGF5ZXIgdHJlZSwKKyAgICAgICAgYmFzZWQgb24gVGV4dHVyZU1h
cHBlciwgd2hpY2ggY2FuIGJlIHBhaW50ZWQgZGlyZWN0bHkgd2l0aCBPcGVuR0wuCisKKyAgICAg
ICAgU2V2ZXJhbCBvcHRpbWl6YXRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBub24tY29tcG9z
aXRlZCBsYXllciBhcyB3ZWxsLCBlLmcuIHNwZWNpZnlpbmcKKyAgICAgICAgYSB0cmFqZWN0b3J5
IGFuZCB1cGRhdGluZyB0aGUgdmlzaWJsZSByZWN0IHRvZ2V0aGVyIHdpdGggdGhlIGNvbnRlbnQg
c2NhbGUuCisKKyAgICAgICAgVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBkaXNhYmxlZCwgYSBzZXBh
cmF0ZSBwYXRjaCB3aWxsIGVuYWJsZSBpdCBhbmQgZ2x1ZSBpdCB0bworICAgICAgICBRVG91Y2hX
ZWJQYWdlLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJvOgorICAgICAgICAqIFBsYXRm
b3JtL0NvcmVJUEMvTWVzc2FnZUlELmg6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQyL21lc3Nh
Z2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9MYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICog
U2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcklu
Zm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9xdC9M
YXllclRyZWVDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0
OjpMYXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6
fkxheWVyVHJlZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojpl
bmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpkZWNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktp
dDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KToKKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVByb3h5Ojp2aWV3cG9ydFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eTo6aXNCYWNraW5nU3RvcmVSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhUHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVj
dG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnJlbW92ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2Vp
dmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6cGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxl
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6bGF5
ZXJCeUlEKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpyb290TGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeVN5bmNS
ZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd0RlYnVn
Qm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd1JlcGFp
bnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludENv
bnRlbnRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2Vz
LmluOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDogQWRkZWQuCisgICAgICAgICog
V2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6fldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVQYWludEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNl
dFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0
ZXNBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpsYXllclRyZWVUaWxlQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldExheWVyVHJlZVRpbGVDbGllbnQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RB
bmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3
aW5nQXJlYTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVy
TmV4dFNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UXQ6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZERlbGV0ZUxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRlc3Ryb3lQYWdl
T3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjphZG9wdElt
YWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZWxl
YXNlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6
Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RR
dDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hv
d0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hvd1Jl
cGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVU
aWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZW1vdmVUaWxlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRl
bnRSZWN0QW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKToKKwogMjAxMS0xMC0xMSAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBTbWFsbCBl
bWJlZGRlZCBQREZzIGFyZSBub3QgZnVsbHkgcmVwYWludGVkIHdoZW4gc2Nyb2xsaW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8gYi9Tb3VyY2UvV2ViS2l0
Mi9EZXJpdmVkU291cmNlcy5wcm8KaW5kZXggZmNlNTljNS4uYjkzZTc2NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rl
cml2ZWRTb3VyY2VzLnBybwpAQCAtOTIsNiArOTIsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwK
ICAgICBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gXAogICAgIERvd25sb2FkUHJv
eHkubWVzc2FnZXMuaW4gXAogICAgIERyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4gXAorICAg
IExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luQ29udHJvbGxlclBy
b3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Qcm9jZXNzLm1lc3NhZ2VzLmluIFwKICAgICBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBcCkBAIC0xMTYsNiArMTE3LDcgQEAg
TUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMu
aW4gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gXAogICAgIFdl
YlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gXAorICAgIFdlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gXAog
ICAgIFdlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVz
c2FnZUlELmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCmlu
ZGV4IDEzYjIxODMuLjQ1NTFkN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvTWVzc2FnZUlELmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9NZXNzYWdlSUQuaApAQCAtMzgsNiArMzgsNyBAQCBlbnVtIE1lc3NhZ2VDbGFzcyB7CiAgICAg
TWVzc2FnZUNsYXNzQXV0aGVudGljYXRpb25NYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc0RyYXdp
bmdBcmVhLAogICAgIE1lc3NhZ2VDbGFzc0luamVjdGVkQnVuZGxlLAorICAgIE1lc3NhZ2VDbGFz
c0xheWVyVHJlZUhvc3QsCiAgICAgTWVzc2FnZUNsYXNzV2ViQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXIsCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29va2llTWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NX
ZWJEYXRhYmFzZU1hbmFnZXIsCkBAIC01NCw2ICs1NSw3IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsK
ICAgICAvLyBNZXNzYWdlcyBzZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgVUkgcHJvY2Vz
cy4KICAgICBNZXNzYWdlQ2xhc3NEb3dubG9hZFByb3h5LAogICAgIE1lc3NhZ2VDbGFzc0RyYXdp
bmdBcmVhUHJveHksCisgICAgTWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdFByb3h5LAogICAgIE1l
c3NhZ2VDbGFzc1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHksCiAgICAgTWVzc2FnZUNs
YXNzV2ViQ29udGV4dCwKICAgICBNZXNzYWdlQ2xhc3NXZWJDb250ZXh0TGVnYWN5LApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5IGIvU291cmNl
L1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CmluZGV4IGI4NWRhOTguLmQyZTRl
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5w
eQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKQEAgLTM4
MSw2ICszODEsOCBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dlYktp
dDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwKICAgICAgICAgJ1dlYktp
dDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rlcic6IFtdLAogICAgICAgICAnV2ViS2l0OjpX
ZWJHZXN0dXJlRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAorICAgICAgICAnV2ViS2l0OjpXZWJM
YXllcklEJzogWyciV2ViTGF5ZXJUcmVlSW5mby5oIiddLAorICAgICAgICAnV2ViS2l0OjpXZWJM
YXllckluZm8nOiBbJyJXZWJMYXllclRyZWVJbmZvLmgiJ10sCiAgICAgICAgICdXZWJLaXQ6Oldl
YktleWJvYXJkRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAogICAgICAgICAnV2ViS2l0OjpXZWJN
b3VzZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViVG91Y2hF
dmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNv
bnRleHQuaAppbmRleCA4NjY3Yzk4Li4yZGI1ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9M
YXllclRyZWVDb250ZXh0LmgKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogICAgIHVpbnQzMl90
IGNvbnRleHRJRDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBIV05EIHdpbmRvdzsKKyNlbGlm
IFBMQVRGT1JNKFFUKQorICAgIHVpbnQzMl90IHdlYkxheWVySUQ7CiAjZW5kaWYKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAppbmRleCBhMDEyODU1Li5l
ZGI2MmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5m
by5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCkBA
IC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAKKyNpbmNs
dWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKIApAQCAtMzMsMzUgKzM0LDE3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogdm9pZCBXZWJMYXllckluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgLy8gV2UgaGF2ZSB0byBkaXZpZGUgaXQgdG8gc2V2
ZXJhbCBsaW5lcywgYmVjYXVzZSBDb3JlSVBDOjpJbi9PdXQgdGFrZXMgYSBtYXhpbXVtIG9mIDEw
IGFyZ3VtZW50cy4KLSAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4oaWQsIG5hbWUsIHBh
cmVudCwgY2hpbGRyZW4sIGZsYWdzLCByZXBsaWNhLCBtYXNrKSk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlKENvcmVJUEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGlj
YSwgbWFzaywgaW1hZ2VCYWNraW5nU3RvcmVJRCkpOwogICAgIGVuY29kZXItPmVuY29kZShDb3Jl
SVBDOjpJbihwb3MsIHNpemUsIHRyYW5zZm9ybSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQsIGNoaWxk
cmVuVHJhbnNmb3JtLCBjb250ZW50c1JlY3QpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoaW1hZ2VC
YWNraW5nU3RvcmUgPyBpbWFnZUJhY2tpbmdTdG9yZS0+c2l6ZSgpIDogSW50U2l6ZSgpKTsKLQot
ICAgIGlmICghaW1hZ2VCYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlIGltYWdlSGFuZGxlOwotICAgIGlmIChpbWFnZUJhY2tpbmdTdG9y
ZS0+Y3JlYXRlSGFuZGxlKGltYWdlSGFuZGxlKSkKLSAgICAgICAgaW1hZ2VIYW5kbGUuZW5jb2Rl
KGVuY29kZXIpOwogfQogCiBib29sIFdlYkxheWVySW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgV2ViTGF5ZXJJbmZvJiBpbmZvKQogewogICAgIC8vIFdlIGhh
dmUgdG8gZGl2aWRlIGl0IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0
IHRha2VzIGEgbWF4aW11bSBvZiAxMCBhcmd1bWVudHMuCi0gICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwgaW5mby5wYXJlbnQsIGluZm8uY2hp
bGRyZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5mby5tYXNrKSkpCisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwgaW5mby5wYXJl
bnQsIGluZm8uY2hpbGRyZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5mby5tYXNrLCBp
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLnBvcywgaW5mby5zaXplLCBpbmZv
LnRyYW5zZm9ybSwgaW5mby5vcGFjaXR5LCBpbmZvLmFuY2hvclBvaW50LCBpbmZvLmNoaWxkcmVu
VHJhbnNmb3JtLCBpbmZvLmNvbnRlbnRzUmVjdCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBJbnRTaXplIGltYWdlQmFja2luZ1N0b3JlU2l6ZTsKLSAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShpbWFnZUJhY2tpbmdTdG9yZVNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGltYWdlQmFja2luZ1N0b3JlU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaW1hZ2VIYW5kbGU7Ci0gICAgaWYgKFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpkZWNvZGUoZGVjb2RlciwgaW1hZ2VIYW5kbGUpKQotICAg
ICAgICBpbmZvLmltYWdlQmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaW1h
Z2VIYW5kbGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkxheWVyVHJlZUluZm8uaAppbmRleCBhMGU2OGQzLi4yNTAwM2U3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKQEAgLTM0LDYgKzM0LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdHlwZWRlZiB1aW50MzJfdCBXZWJM
YXllcklEOworZW51bSB7IEludmFsaWRXZWJMYXllcklEID0gMCB9OwogCiBzdHJ1Y3QgV2ViTGF5
ZXJVcGRhdGVJbmZvIHsKICAgICBXZWJMYXllclVwZGF0ZUluZm8oKSB7IH0KQEAgLTU0LDYgKzU1
LDcgQEAgc3RydWN0IFdlYkxheWVySW5mbyB7CiAgICAgV2ViTGF5ZXJJRCBwYXJlbnQ7CiAgICAg
V2ViTGF5ZXJJRCByZXBsaWNhOwogICAgIFdlYkxheWVySUQgbWFzazsKKyAgICBpbnQ2NF90IGlt
YWdlQmFja2luZ1N0b3JlSUQ7CiAKICAgICBGbG9hdFBvaW50IHBvczsKICAgICBGbG9hdFBvaW50
M0QgYW5jaG9yUG9pbnQ7CkBAIC03MSw2ICs3Myw4IEBAIHN0cnVjdCBXZWJMYXllckluZm8gewog
ICAgICAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsKICAgICAgICAgICAgIGJvb2wgcHJl
c2VydmVzM0QgOiAxOwogICAgICAgICAgICAgYm9vbCBjb250ZW50TmVlZHNEaXNwbGF5IDogMTsK
KyAgICAgICAgICAgIGJvb2wgaW1hZ2VJc1VwZGF0ZWQ6IDE7CisgICAgICAgICAgICBib29sIGlz
Um9vdExheWVyOiAxOwogICAgICAgICB9OwogICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAg
ICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9MYXllclRyZWVDb250
ZXh0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5j
cHAKaW5kZXggZjFiZjFiNC4uZDM3ZDc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKQEAgLTI2LDQxICsyNiwzOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKIAotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAi
QXJndW1lbnRFbmNvZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBMYXllclRyZWVDb250
ZXh0OjpMYXllclRyZWVDb250ZXh0KCkKKyAgICA6IHdlYkxheWVySUQoMCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCiBMYXllclRyZWVDb250ZXh0Ojp+TGF5ZXJUcmVlQ29udGV4dCgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb250ZXh0Ojpl
bmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3QKK3ZvaWQgTGF5ZXJUcmVlQ29u
dGV4dDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGVuY29kZXItPmVuY29kZSh3ZWJMYXllcklEKTsK
IH0KIAotYm9vbCBMYXllclRyZWVDb250ZXh0OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiwgTGF5ZXJUcmVlQ29udGV4dCYpCitib29sIExheWVyVHJlZUNvbnRleHQ6OmRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIExheWVyVHJlZUNvbnRleHQmIGNvbnRl
eHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZGVjb2Rlci0+ZGVjb2RlKGNvbnRleHQud2ViTGF5ZXJJRCk7CiB9CiAKIGJvb2wgTGF5ZXJU
cmVlQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdlYkxheWVySUQ7CiB9CiAKLWJvb2wgb3BlcmF0
b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpCiti
b29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYSwgY29uc3QgTGF5ZXJUcmVl
Q29udGV4dCYgYikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBhLndlYkxheWVySUQgPT0gYi53ZWJMYXllcklEOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmNwcAppbmRleCBmODUyZTJmLi4zOWQ2MGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0yOCw2ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01
Myw0ICs1NywxNiBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHk6OnNldFNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQogICAgIHNpemVEaWRDaGFuZ2Uo
KTsKIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQordm9pZCBEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAg
bV93ZWJQYWdlUHJveHktPnNldFZpZXdOZWVkc0Rpc3BsYXkodmlld3BvcnRWaXNpYmxlUmVjdCgp
KTsKK30KKworV2ViQ29yZTo6SW50UmVjdCBEcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3Qo
KSBjb25zdAoreworICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFn
ZVByb3h5LT52aWV3U2l6ZSgpKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDA4OGZj
OGIuLmExOTQ5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkuaApAQCAtMjcsOSArMjcsMTEgQEAKICNpZm5kZWYgRHJhd2luZ0FyZWFQcm94eV9oCiAjZGVm
aW5lIERyYXdpbmdBcmVhUHJveHlfaAogCisjaW5jbHVkZSA8Q29yZUlQQy9NZXNzYWdlSUQuaD4K
ICNpbmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKLSNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNp
bmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogI2lmIFBM
QVRGT1JNKFFUKQpAQCAtNDUsMTMgKzQ3LDE3IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIH0KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEludFJlY3Q7CisgICAgY2xhc3MgRmxvYXRQ
b2ludDsKKyAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIH0KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIExheWVyVHJlZUNvbnRleHQ7CitjbGFzcyBMYXllclRyZWVIb3N0UHJv
eHk7CiBjbGFzcyBVcGRhdGVJbmZvOworY2xhc3MgV2ViTGF5ZXJUcmVlSW5mbzsKK2NsYXNzIFdl
YkxheWVyVXBkYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAogY2xhc3MgRHJhd2luZ0Fy
ZWFQcm94eSB7CkBAIC03Nyw2ICs4MywyNCBAQCBwdWJsaWM6CiAgICAgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
T2Zmc2V0KTsKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4g
Y29udGVudHNSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udGVudHNS
ZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQmFja2luZ1N0b3JlUmVhZHkoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSkg
eyB9CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZp
c2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3Qg
V2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGVGb3JM
YXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciogYXJndW1lbnRzKSB7IH0KKworICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJu
IG1fd2ViUGFnZVByb3h5OyB9CisjZW5kaWYKKyNlbmRpZgogcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlLCBXZWJQYWdlUHJveHkqKTsKIApA
QCAtODYsNiArMTEwLDEwIEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6
ZTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRyPExh
eWVyVHJlZUhvc3RQcm94eT4gbV9sYXllclRyZWVIb3N0UHJveHk7CisjZW5kaWYKKwogcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZSgpID0gMDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5kZXggNjE5ZDUw
OC4uNGQ3YmQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eUltcGwuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXllclRy
ZWVIb3N0UHJveHkuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC0zMjgsOCArMzMyLDM4IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29u
dGV4CiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fbGF5ZXJUcmVlQ29udGV4
dCA9IGxheWVyVHJlZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIGlmICghbV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7CisjZW5k
aWYKK30KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQordm9pZCBEcmF3aW5nQXJl
YVByb3h5SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVl
SG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+ZGlkUmVjZWl2ZUxheWVy
VHJlZUhvc3RQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOwor
fQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5k
U2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQg
c2NhbGUpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVy
VHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKHZpc2libGVDb250
ZW50c1JlY3QsIHNjYWxlKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CiB9CiAKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUlt
cGw6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQor
ICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQobWF0
cml4LCBvcGFjaXR5KTsKK30KKyNlbmRpZgorCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQogewogICAgIEFTU0VSVChpc0luQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4IGQwOTFmOTcuLmFhYzcxZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCkBAIC0zOSw2ICsz
OSw4IEBAIGNsYXNzIFJlZ2lvbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIExheWVy
VHJlZUhvc3RQcm94eTsKKwogY2xhc3MgRHJhd2luZ0FyZWFQcm94eUltcGwgOiBwdWJsaWMgRHJh
d2luZ0FyZWFQcm94eSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RHJhd2luZ0Fy
ZWFQcm94eUltcGw+IGNyZWF0ZShXZWJQYWdlUHJveHkqKTsKQEAgLTc1LDYgKzc3LDEzIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKIAogICAg
IGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gIW1f
bGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCk7IH0KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9y
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOworI2VuZGlmCiAjZWxzZQogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmNlZjFmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTAsMCArMSwxMzUgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKyNkZWZpbmUg
TGF5ZXJUcmVlSG9zdFByb3h5X2gKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1
ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJNZXNzYWdlUXVldWUuaCIKKyNpbmNs
dWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViTGF5ZXJJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOworCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI7CisKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSop
OworICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOworICAgIHZvaWQgc3luY0NvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdM
YXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciop
OworICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgSW50UmVjdCYsIGZsb2F0KTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOworI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQorICAgIHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICB2b2lkIHN3YXBD
b250ZW50QnVmZmVycygpOworICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKKyAgICB2b2lkIGNy
ZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpV
cGRhdGVJbmZvJik7CisgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZvaWQgcmVtb3ZlVGls
ZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2b2lkIGNyZWF0ZURpcmVj
dGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmKTsKKyAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2
NF90KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvckxheWVyKFdlYkxheWVy
SUQsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CisjZW5kaWYK
KworcHJvdGVjdGVkOgorICAgIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRlTGF5ZXIo
V2ViTGF5ZXJJRCk7CisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBp
ZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQo
aWQpOyB9CisgICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5
ZXIuZ2V0KCk7IH0KKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQorCisgICAgUnVuTG9vcDo6VGltZXI8TGF5ZXJU
cmVlSG9zdFByb3h5PiBtX2FuaW1hdGlvblRpbWVyOworICAgIERyYXdpbmdBcmVhUHJveHkqIG1f
ZHJhd2luZ0FyZWFQcm94eTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgSW50UmVjdCBtX3Zpc2libGVDb250
ZW50c1JlY3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworCisgICAgTWVzc2FnZVF1ZXVl
PExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyPiBtX21lc3NhZ2VzVG9SZW5kZXJlcjsKKyAgICB2
b2lkIHB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI+KTsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBl
cj4gbV90ZXh0dXJlTWFwcGVyOworI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8SW50UG9pbnQsIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IFRpbGVkSW1hZ2U7
CisgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwIG1fbm9kZVZpc3VhbENvbnRlbnRz
UmVjdE1hcDsKKyAgICBIYXNoTWFwPGludCwgaW50PiBtX3RpbGVUb05vZGVUaWxlOworICAgIGlu
dCByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3Q7CisgICAgSGFzaE1h
cDxpbnQ2NF90LCBUaWxlZEltYWdlPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKworICAg
IHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7CisgICAgdm9pZCBzeW5jaHJvbml6ZVZpZXdw
b3J0KCk7CisgICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIHNldFJv
b3RMYXllcklEKFdlYkxheWVySUQpOworICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycyhjb25z
dCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBm
bG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7CisgICAg
dm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBRSW1hZ2UmKTsKKyAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIGNv
bnN0IFFJbWFnZSYpOworICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOworICAgIHZvaWQg
YXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdl
SUQpOworICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGVuc3VyZVJvb3RM
YXllcigpOworICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7CisKKyNlbmRpZgorCisg
ICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZlY3RvcjxXZWJMYXll
cklEPiBtX2xheWVyc1RvRGVsZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgV2Vi
TGF5ZXJJRCBtX3Jvb3RMYXllcklEOworICAgIGludCBtX2lkOworfTsKKworfQorCisjZW5kaWYg
Ly8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmJjN2FmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzIg
QEAKKyMKKyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisj
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorbWVzc2FnZXMgLT4g
TGF5ZXJUcmVlSG9zdFByb3h5IHsKKyAgICBTeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKFdlYktp
dDo6V2ViTGF5ZXJJbmZvIGxheWVySW5mbykKKyAgICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1
aW50MzJfdCBpZCkKKyAgICBEZWxldGVDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQorICAg
IENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJLaXQ6
OlVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3Qg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAg
UmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCisgICAgQ3Jl
YXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUgaGFuZGxlKQorICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90IGtleSkKKyAgICBEaWRSZW5kZXJGcmFtZSgpCit9CisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYWE4NmVmMi4uZTZkZjVjMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJEb3dubG9hZFByb3h5LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQ
cm94eS5oIgogI2luY2x1ZGUgIkZpbmRJbmRpY2F0b3IuaCIKKyNpbmNsdWRlICJMYXllclRyZWVI
b3N0UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZXNz
YWdlSUQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCkBAIC0xMzk3LDYg
KzEzOTgsMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBpZiAobWVzc2FnZUlELmlz
PENvcmVJUEM6Ok1lc3NhZ2VDbGFzc0xheWVyVHJlZUhvc3RQcm94eT4oKSkgeworICAgICAgICBt
X2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShjb25uZWN0
aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYKKwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBD
OjpNZXNzYWdlQ2xhc3NXZWJJbnNwZWN0b3JQcm94eT4oKSkgewogICAgICAgICBpZiAoV2ViSW5z
cGVjdG9yUHJveHkqIGluc3BlY3RvciA9IHRoaXMtPmluc3BlY3RvcigpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwMzZlNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKQEAg
LTAsMCArMSw1OTQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJMYXllclRyZWVI
b3N0UHJveHkuaCIKKworI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIk1haW5UaHJlYWQuaCIKKyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJTaGFy
ZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJV
cGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVk
ZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgInRleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVk
ZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgiCisjaW5jbHVkZSA8UURhdGVUaW1lPgorI2lu
Y2x1ZGUgPGNhaXJvL09wZW5HTFNoaW1zLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlciB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsK
KyAgICAgICAgRGVsZXRlTGF5ZXIsCisgICAgICAgIENyZWF0ZVRpbGUsCisgICAgICAgIFJlbW92
ZVRpbGUsCisgICAgICAgIFVwZGF0ZVRpbGUsCisgICAgICAgIENyZWF0ZUltYWdlLAorICAgICAg
ICBEZXN0cm95SW1hZ2UsCisgICAgICAgIFN5bmNMYXllclBhcmFtZXRlcnMsCisgICAgICAgIEZs
dXNoTGF5ZXJDaGFuZ2VzLAorICAgICAgICBTZXRSb290TGF5ZXIKKyAgICB9OworICAgIHZpcnR1
YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworfTsKKwordGVtcGxhdGU8Y2xhc3MgTWVzc2FnZURh
dGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpUeXBlIG1lc3NhZ2VUeXBlPgorY2xhc3Mg
TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YSA6IHB1YmxpYyBMYXllclRyZWVNZXNz
YWdlVG9SZW5kZXJlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtZXNzYWdlVHlwZTsgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUcmVl
TWVzc2FnZVRvUmVuZGVyZXI+IGNyZWF0ZShjb25zdCBNZXNzYWdlRGF0YSYgZGF0YSA9IE1lc3Nh
Z2VEYXRhKCkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVHJlZU1l
c3NhZ2VUb1JlbmRlcmVyV2l0aERhdGEoZGF0YSkpOworICAgIH0KKworICAgIGNvbnN0IE1lc3Nh
Z2VEYXRhJiBkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGE7CisgICAg
fQorCitwcml2YXRlOgorICAgIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGEoY29u
c3QgTWVzc2FnZURhdGEmIGRhdGEpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAg
IH0KKworICAgIE1lc3NhZ2VEYXRhIG1fZGF0YTsKK307CisKKworbmFtZXNwYWNlIHsKK3N0cnVj
dCBDcmVhdGVUaWxlTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKKyAgICBp
bnQgcmVtb3RlVGlsZUlEOworICAgIGZsb2F0IHNjYWxlOworfTsKKworc3RydWN0IFVwZGF0ZVRp
bGVNZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworICAgIGludCByZW1vdGVU
aWxlSUQ7CisgICAgSW50UmVjdCBzb3VyY2VSZWN0OworICAgIEludFJlY3QgdGFyZ2V0UmVjdDsK
KyAgICBRSW1hZ2UgaW1hZ2U7Cit9OworCitzdHJ1Y3QgUmVtb3ZlVGlsZU1lc3NhZ2VEYXRhIHsK
KyAgICBXZWJMYXllcklEIGxheWVySUQ7CisgICAgaW50IHJlbW90ZVRpbGVJRDsKK307CisKK3N0
cnVjdCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhIHsKKyAgICBpbnQ2NF90IGltYWdlSUQ7CisgICAg
UUltYWdlIGltYWdlOworfTsKKworc3RydWN0IERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhIHsKKyAg
ICBpbnQ2NF90IGltYWdlSUQ7Cit9OworCitzdHJ1Y3QgU3luY0xheWVyUGFyYW1ldGVyc01lc3Nh
Z2VEYXRhIHsKKyAgICBXZWJMYXllckluZm8gbGF5ZXJJbmZvOworfTsKKworc3RydWN0IEVtcHR5
TWVzc2FnZURhdGEgeyB9Oworc3RydWN0IERlbGV0ZUxheWVyTWVzc2FnZURhdGEgeworICAgIFdl
YkxheWVySUQgbGF5ZXJJRDsKK307CitzdHJ1Y3QgU2V0Um9vdExheWVyTWVzc2FnZURhdGEgewor
ICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKK307CisKK2NsYXNzIENyZWF0ZVRpbGVNZXNzYWdlCisg
ICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8Q3JlYXRl
VGlsZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Q3JlYXRlVGlsZT4g
eyB9OworY2xhc3MgVXBkYXRlVGlsZU1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVl
TWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxVcGRhdGVUaWxlTWVzc2FnZURhdGEsIExheWVyVHJl
ZU1lc3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVUaWxlPiB7IH07CitjbGFzcyBSZW1vdmVUaWxlTWVz
c2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRh
PFJlbW92ZVRpbGVNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92
ZVRpbGU+IHsgfTsKK2NsYXNzIENyZWF0ZUltYWdlTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBM
YXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPENyZWF0ZUltYWdlTWVzc2FnZURhdGEs
IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpDcmVhdGVJbWFnZT4geyB9OworY2xhc3MgRGVz
dHJveUltYWdlTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5k
ZXJlcldpdGhEYXRhPERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9S
ZW5kZXJlcjo6RGVzdHJveUltYWdlPiB7IH07CitjbGFzcyBGbHVzaExheWVyQ2hhbmdlc01lc3Nh
Z2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxF
bXB0eU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Rmx1c2hMYXllckNo
YW5nZXM+IHsgfTsKK2NsYXNzIFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlCisgICAgICAgIDog
cHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8U3luY0xheWVyUGFyYW1l
dGVyc01lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6U3luY0xheWVyUGFy
YW1ldGVycz4geyB9OworY2xhc3MgRGVsZXRlTGF5ZXJNZXNzYWdlCisgICAgICAgIDogcHVibGlj
IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8RGVsZXRlTGF5ZXJNZXNzYWdlRGF0
YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkRlbGV0ZUxheWVyPiB7IH07CitjbGFzcyBT
ZXRSb290TGF5ZXJNZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyV2l0aERhdGE8U2V0Um9vdExheWVyTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VU
b1JlbmRlcmVyOjpTZXRSb290TGF5ZXI+IHsgfTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0xh
eWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkK
K3sKKyAgICBHcmFwaGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcih0aGlzKTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1h
cHBlck5vZGUobmV3TGF5ZXIpOworICAgIG5vZGUtPnNldElEKGxheWVySUQpOworICAgIG5vZGUt
PnNldFRpbGVPd25lcnNoaXAoVGV4dHVyZU1hcHBlck5vZGU6OkV4dGVybmFsbHlNYW5hZ2VkVGls
ZXMpOworICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7Cit9CisKK0xheWVyVHJlZUhvc3RQ
cm94eTo6TGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJv
eHkpCisgICAgOiBtX2FuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkxheWVy
VHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQpCisgICAgLCBtX2RyYXdpbmdBcmVhUHJveHko
ZHJhd2luZ0FyZWFQcm94eSkKKyAgICAsIG1fcm9vdExheWVySUQoMCkKK3sKK30KKworTGF5ZXJU
cmVlSG9zdFByb3h5Ojp+TGF5ZXJUcmVlSG9zdFByb3h5KCkKK3sKK30KKworLy8gVGhpcyBmdW5j
dGlvbiBuZWVkcyB0byBiZSByZWVudHJhbnQuCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFp
bnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90
ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKKworICAgIHN5bmNSZW1v
dGVDb250ZW50KCk7CisgICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RM
YXllcigpOworICAgIGlmICghY3VycmVudFJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGN1cnJlbnRS
b290TGF5ZXIpOworCisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBHTGlu
dCB2aWV3cG9ydFs0XTsKKyAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCk7
CisgICAgSW50UmVjdCB2aWV3cG9ydFJlY3Qodmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCB2aWV3
cG9ydFsyXSwgdmlld3BvcnRbM10pOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0Vmlld3BvcnRT
aXplKEludFNpemUodmlld3BvcnRbMl0sIHZpZXdwb3J0WzNdKSk7CisgICAgbm9kZS0+c2V0VGV4
dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+
YmVnaW5QYWludGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CisK
KyAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3BhY2l0eSgpICE9IG9wYWNpdHkgfHwgY3VycmVu
dFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4KSB7CisgICAgICAgIGN1cnJlbnRSb290
TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNl
dFRyYW5zZm9ybShtYXRyaXgpOworICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICB9CisKKyAgICBUZXh0dXJlTWFwcGVy
Tm9kZTo6Tm9kZVJlY3RNYXAgbm9kZVZpc3VhbENvbnRlbnRzUmVjdE1hcDsKKyAgICBpZiAobm9k
ZS0+Y29sbGVjdFZpc2libGVDb250ZW50c1JlY3RzKG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAs
IHZpZXdwb3J0UmVjdCkpIHsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFw
OjppdGVyYXRvciBlbmRJdGVyYXRvciA9IG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAuZW5kKCk7
CisgICAgICAgIGZvciAoVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwOjppdGVyYXRvciBp
dCA9IG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAuYmVnaW4oKTsgaXQgIT0gZW5kSXRlcmF0b3I7
ICsraXQpIHsKKyAgICAgICAgICAgIFdlYkxheWVySUQgbGF5ZXJJRCA9IGl0LT5maXJzdC0+aWQo
KTsKKyAgICAgICAgICAgIC8vIGF2b2lkIHVwZGF0aW5nIG5vbi1zeW5jZWQgcm9vdCBsYXllcgor
ICAgICAgICAgICAgaWYgKCFsYXllcklEKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IEludFJlY3QoaXQtPnNlY29uZCk7CisgICAg
ICAgICAgICBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIobGF5ZXJJRCwgdmlzaWJsZVJl
Y3QpOworICAgICAgICB9CisgICAgfQorICAgIG5vZGUtPnBhaW50KCk7CisKKyAgICBtX3RleHR1
cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CisKKyAgICBpZiAobm9kZS0+ZGVzY2VuZGFudHNPclNl
bGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAgdXBkYXRlVmlld3BvcnQoKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKK3sKKyAgICBtX2Ry
YXdpbmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklE
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgp
LT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250
ZW50UmVjdEZvckxheWVyKGxheWVySUQsIHJlY3QpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2Uo
KS0+cGFnZUlEKCkpOworfQorCitpbnQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdGVUaWxlSURU
b05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPGludCwgaW50Pjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVUb05vZGVUaWxlLmZpbmQodGlsZUlEKTsKKyAgICBp
ZiAoaXQgPT0gbV90aWxlVG9Ob2RlVGlsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGl0LT5zZWNvbmQ7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jTGF5
ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvKQoreworICAgIFdlYkxh
eWVySUQgaWQgPSBsYXllckluZm8uaWQ7CisgICAgZW5zdXJlTGF5ZXIoaWQpOworICAgIExheWVy
TWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOworICAgIEdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gaXQtPnNlY29uZDsKKworICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1l
KTsKKworICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5SUQobGF5ZXJJbmZv
LnJlcGxpY2EpKTsKKyAgICBsYXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChsYXllckluZm8u
bWFzaykpOworCisgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOworICAgIGxh
eWVyLT5zZXRTaXplKGxheWVySW5mby5zaXplKTsKKyAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxh
eWVySW5mby50cmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8u
YW5jaG9yUG9pbnQpOworICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8u
Y2hpbGRyZW5UcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5
ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxh
eWVySW5mby5jb250ZW50c09wYXF1ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXll
ckluZm8uY29udGVudHNSZWN0KTsKKyAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5m
by5kcmF3c0NvbnRlbnQpOworCisgICAgaWYgKGxheWVySW5mby5pbWFnZUlzVXBkYXRlZCkKKyAg
ICAgICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1hZ2VCYWNraW5nU3Rv
cmVJRCk7CisKKyAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCisgICAgbGF5
ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXll
ckluZm8ubWFza3NUb0JvdW5kcyk7CisgICAgbGF5ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9w
YWNpdHkpOworICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0Qp
OworICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW47CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxheWVySW5mby5jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBX
ZWJMYXllcklEIGNoaWxkSUQgPSBsYXllckluZm8uY2hpbGRyZW5baV07CisgICAgICAgIEdyYXBo
aWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNoaWxkSUQpOworICAgICAgICBpZiAoIWNoaWxk
KSB7CisgICAgICAgICAgICBjaGlsZCA9IGNyZWF0ZUxheWVyKGNoaWxkSUQpLmxlYWtQdHIoKTsK
KyAgICAgICAgICAgIG1fbGF5ZXJzLmFkZChjaGlsZElELCBjaGlsZCk7CisgICAgICAgIH0KKyAg
ICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICB9CisgICAgbGF5ZXItPnNldENoaWxk
cmVuKGNoaWxkcmVuKTsKKworICAgIGlmIChsYXllckluZm8uaXNSb290TGF5ZXIgJiYgbV9yb290
TGF5ZXJJRCAhPSBpZCkKKyAgICAgICAgc2V0Um9vdExheWVySUQoaWQpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIGlmICghbGF5
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Cisg
ICAgbV9sYXllcnMucmVtb3ZlKGxheWVySUQpOworICAgIGRlbGV0ZSBsYXllcjsKK30KKworCit2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAg
ICAvLyBXZSBoYXZlIHRvIGxlYWsgdGhlIG5ldyBsYXllcidzIHBvaW50ZXIgYW5kIG1hbmFnZSBp
dCBvdXJzZWx2ZXMsCisgICAgLy8gYmVjYXVzZSBPd25QdHIgaXMgbm90IGNvcHlhYmxlLgorICAg
IGlmIChtX2xheWVycy5maW5kKGlkKSA9PSBtX2xheWVycy5lbmQoKSkKKyAgICAgICAgbV9sYXll
cnMuYWRkKGlkLCBjcmVhdGVMYXllcihpZCkubGVha1B0cigpKTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnNldFJvb3RMYXllcklEKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBp
ZiAobGF5ZXJJRCA9PSBtX3Jvb3RMYXllcklEKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jv
b3RMYXllcklEID0gbGF5ZXJJRDsKKworICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJl
bigpOworCisgICAgaWYgKCFsYXllcklEKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGlj
c0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGlu
dCB0aWxlSUQsIGZsb2F0IHNjYWxlKQoreworICAgIGVuc3VyZUxheWVyKGxheWVySUQpOworICAg
IFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQo
bGF5ZXJJRCkpOworCisgICAgaW50IG5vZGVUaWxlSUQgPSBub2RlLT5jcmVhdGVDb250ZW50c1Rp
bGUoc2NhbGUpOworICAgIG1fdGlsZVRvTm9kZVRpbGUuYWRkKHRpbGVJRCwgbm9kZVRpbGVJRCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5
ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4
dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGludCBub2RlVGlsZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2RlVGls
ZUlEKHRpbGVJRCk7CisgICAgaWYgKCFub2RlVGlsZUlEKQorICAgICAgICByZXR1cm47CisKKyAg
ICBub2RlLT5yZW1vdmVDb250ZW50c1RpbGUobm9kZVRpbGVJRCk7CisgICAgbV90aWxlVG9Ob2Rl
VGlsZS5yZW1vdmUodGlsZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0
ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBRSW1hZ2UmIGltYWdlKQor
eworICAgIGVuc3VyZUxheWVyKGxheWVySUQpOworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2Rl
ID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IG5vZGVUaWxlSUQgPSByZW1vdGVUaWxlSURU
b05vZGVUaWxlSUQodGlsZUlEKTsKKyAgICBpZiAoIW5vZGVUaWxlSUQpCisgICAgICAgIHJldHVy
bjsKKworICAgIFFJbWFnZSBpbWFnZVJlZihpbWFnZSk7CisgICAgbm9kZS0+c2V0VGV4dHVyZU1h
cHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG5vZGUtPnNldENvbnRlbnRzVGlsZUJh
Y2tCdWZmZXIobm9kZVRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwgaW1hZ2VSZWYuYml0
cygpLCBCaXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgY29uc3QgUUltYWdlJiBpbWFnZSkK
K3sKKyAgICBUaWxlZEltYWdlIHRpbGVkSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0IGludCBUaWxl
RGltZW5zaW9uID0gMTAyNDsKKyAgICBib29sIGltYWdlSGFzQWxwaGEgPSBpbWFnZS5oYXNBbHBo
YUNoYW5uZWwoKTsKKyAgICBJbnRSZWN0IGltYWdlUmVjdCgwLCAwLCBpbWFnZS53aWR0aCgpLCBp
bWFnZS5oZWlnaHQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZS5oZWlnaHQoKTsg
eSArPSBUaWxlRGltZW5zaW9uKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2Uu
d2lkdGgoKTsgeCArPSBUaWxlRGltZW5zaW9uKSB7CisgICAgICAgICAgICBRSW1hZ2Ugc3ViSW1h
Z2U7CisgICAgICAgICAgICBJbnRSZWN0IHJlY3QoeCwgeSwgVGlsZURpbWVuc2lvbiwgVGlsZURp
bWVuc2lvbik7CisgICAgICAgICAgICByZWN0LmludGVyc2VjdChpbWFnZVJlY3QpOworICAgICAg
ICAgICAgaWYgKFFTaXplKHJlY3Quc2l6ZSgpKSA9PSBpbWFnZS5zaXplKCkpCisgICAgICAgICAg
ICAgICAgc3ViSW1hZ2UgPSBpbWFnZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBzdWJJbWFnZSA9IGltYWdlLmNvcHkocmVjdCk7CisgICAgICAgICAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOworICAg
ICAgICAgICAgdGV4dHVyZS0+cmVzZXQocmVjdC5zaXplKCksICFpbWFnZUhhc0FscGhhKTsKKyAg
ICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlSGFzQWxwaGEgPyBCaXRtYXBU
ZXh0dXJlOjpCR1JBRm9ybWF0IDogQml0bWFwVGV4dHVyZTo6QkdSRm9ybWF0LCBJbnRSZWN0KElu
dFBvaW50Ojp6ZXJvKCksIHJlY3Quc2l6ZSgpKSwgc3ViSW1hZ2UuYml0cygpKTsKKyAgICAgICAg
ICAgIHRpbGVkSW1hZ2UuYWRkKHJlY3QubG9jYXRpb24oKSwgdGV4dHVyZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5yZW1vdmUoaW1hZ2VJRCk7
CisgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuYWRkKGltYWdlSUQsIHRpbGVkSW1hZ2Up
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveUltYWdlKGludDY0X3QgaW1h
Z2VJRCkKK3sKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5yZW1vdmUoaW1hZ2VJRCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhp
Y3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJRCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTm9k
ZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXIpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbWFnZUlEKSB7CisgICAgICAgIG5vZGUtPmNsZWFy
QWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgRmxvYXRTaXplIHNpemUobGF5ZXItPnNpemUoKSk7CisgICAgRmxvYXRSZWN0IGNv
bnRlbnRzUmVjdChsYXllci0+Y29udGVudHNSZWN0KCkpOworICAgIGZsb2F0IGhvcml6b250YWxG
YWN0b3IgPSBjb250ZW50c1JlY3Qud2lkdGgoKSAvIHNpemUud2lkdGgoKTsKKyAgICBmbG9hdCB2
ZXJ0aWNhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC5oZWlnaHQoKSAvIHNpemUuaGVpZ2h0KCk7Cisg
ICAgSGFzaE1hcDxpbnQ2NF90LCBUaWxlZEltYWdlPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOworICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGlsZWRJbWFn
ZTo6aXRlcmF0b3IgZW5kVGlsZUl0ZXJhdG9yID0gaXQtPnNlY29uZC5lbmQoKTsKKyAgICBmb3Ig
KFRpbGVkSW1hZ2U6Oml0ZXJhdG9yIHRpbGVJdCA9IGl0LT5zZWNvbmQuYmVnaW4oKTsgdGlsZUl0
ICE9IGVuZFRpbGVJdGVyYXRvcjsgKyt0aWxlSXQpIHsKKyAgICAgICAgRmxvYXRSZWN0IHNvdXJj
ZVJlY3QoRmxvYXRQb2ludCh0aWxlSXQtPmZpcnN0KSwgRmxvYXRTaXplKHRpbGVJdC0+c2Vjb25k
LT5zaXplKCkpKTsKKyAgICAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3Qoc291cmNlUmVjdC54KCkg
KiBob3Jpem9udGFsRmFjdG9yICsgY29udGVudHNSZWN0LngoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc291cmNlUmVjdC55KCkgKiB2ZXJ0aWNhbEZhY3RvciArIGNvbnRlbnRzUmVj
dC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY3Qud2lkdGgoKSAq
IGhvcml6b250YWxGYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJl
Y3QuaGVpZ2h0KCkgKiB2ZXJ0aWNhbEZhY3Rvcik7CisgICAgICAgIGludCBuZXdUaWxlSUQgPSBu
b2RlLT5jcmVhdGVDb250ZW50c1RpbGUoMS4wKTsKKyAgICAgICAgbm9kZS0+c2V0VGlsZUJhY2tC
dWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UobmV3VGlsZUlELCBJbnRSZWN0
KHNvdXJjZVJlY3QpLCB0YXJnZXRSZWN0LCB0aWxlSXQtPnNlY29uZC5nZXQoKSk7CisgICAgfQor
fQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Zmx1c2hMYXllckNoYW5nZXMoKQoreworICAg
IG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShGbG9hdFJlY3QoKSk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVSb290TGF5ZXIoKQoreworICAgIGlmIChtX3Jv
b3RMYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcm9vdExheWVyID0gY3JlYXRlTGF5ZXIo
SW52YWxpZFdlYkxheWVySUQpOworICAgIG1fcm9vdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZh
bHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jv
b3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKKworICAgIC8v
IFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJl
IG9wdGltaXplZCBvdXQuCisgICAgbV9yb290TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwg
MS4wKSk7CisgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsK
KyAgICB0b1RleHR1cmVNYXBwZXJOb2RlKG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1h
cHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6c3luY1JlbW90ZUNvbnRlbnQoKQoreworICAgIC8vIFdlIGVucXVldWUgbWVzc2FnZXMgYW5k
IGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWlyZSBhbiBhY3RpdmUgR0wg
Y29udGV4dC4KKyAgICBlbnN1cmVSb290TGF5ZXIoKTsKKworICAgIHdoaWxlIChPd25QdHI8TGF5
ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG5leHRNZXNzYWdlID0gbV9tZXNzYWdlc1RvUmVuZGVy
ZXIudHJ5R2V0TWVzc2FnZSgpKSB7CisgICAgICAgIHN3aXRjaCAobmV4dE1lc3NhZ2UtPnR5cGUo
KSkgeworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpTZXRSb290TGF5
ZXI6IHsKKyAgICAgICAgICAgIGNvbnN0IFNldFJvb3RMYXllck1lc3NhZ2VEYXRhJiBkYXRhID0g
c3RhdGljX2Nhc3Q8U2V0Um9vdExheWVyTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0
YSgpOworICAgICAgICAgICAgc2V0Um9vdExheWVySUQoZGF0YS5sYXllcklEKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9S
ZW5kZXJlcjo6RGVsZXRlTGF5ZXI6IHsKKyAgICAgICAgICAgIGNvbnN0IERlbGV0ZUxheWVyTWVz
c2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxEZWxldGVMYXllck1lc3NhZ2UqPihuZXh0TWVz
c2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGRlbGV0ZUxheWVyKGRhdGEubGF5ZXJJ
RCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJU
cmVlTWVzc2FnZVRvUmVuZGVyZXI6OlN5bmNMYXllclBhcmFtZXRlcnM6IHsKKyAgICAgICAgICAg
IGNvbnN0IFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0
PFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7
CisgICAgICAgICAgICBzeW5jTGF5ZXJQYXJhbWV0ZXJzKGRhdGEubGF5ZXJJbmZvKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdl
VG9SZW5kZXJlcjo6Q3JlYXRlVGlsZTogeworICAgICAgICAgICAgY29uc3QgQ3JlYXRlVGlsZU1l
c3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8Q3JlYXRlVGlsZU1lc3NhZ2UqPihuZXh0TWVz
c2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGNyZWF0ZVRpbGUoZGF0YS5sYXllcklE
LCBkYXRhLnJlbW90ZVRpbGVJRCwgZGF0YS5zY2FsZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92
ZVRpbGU6IHsKKyAgICAgICAgICAgIGNvbnN0IFJlbW92ZVRpbGVNZXNzYWdlRGF0YSYgZGF0YSA9
IHN0YXRpY19jYXN0PFJlbW92ZVRpbGVNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRh
KCk7CisgICAgICAgICAgICByZW1vdmVUaWxlKGRhdGEubGF5ZXJJRCwgZGF0YS5yZW1vdGVUaWxl
SUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVy
VHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVUaWxlOiB7CisgICAgICAgICAgICBjb25zdCBV
cGRhdGVUaWxlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxVcGRhdGVUaWxlTWVzc2Fn
ZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAgICAgdXBkYXRlVGlsZShk
YXRhLmxheWVySUQsIGRhdGEucmVtb3RlVGlsZUlELCBkYXRhLnNvdXJjZVJlY3QsIGRhdGEudGFy
Z2V0UmVjdCwgZGF0YS5pbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkNyZWF0ZUltYWdlOiB7Cisg
ICAgICAgICAgICBjb25zdCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nh
c3Q8Q3JlYXRlSW1hZ2VNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAg
ICAgICAgICBjcmVhdGVJbWFnZShkYXRhLmltYWdlSUQsIGRhdGEuaW1hZ2UpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyOjpEZXN0cm95SW1hZ2U6IHsKKyAgICAgICAgICAgIGNvbnN0IENyZWF0ZUltYWdlTWVz
c2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxDcmVhdGVJbWFnZU1lc3NhZ2UqPihuZXh0TWVz
c2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGRlc3Ryb3lJbWFnZShkYXRhLmltYWdl
SUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVy
VHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpGbHVzaExheWVyQ2hhbmdlczoKKyAgICAgICAgICAgIGZs
dXNoTGF5ZXJDaGFuZ2VzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25Q
dHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG1lc3NhZ2UpCit7CisgICAgbV9tZXNzYWdl
c1RvUmVuZGVyZXIuYXBwZW5kKG1lc3NhZ2UpOworICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQs
IGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAg
ICBDcmVhdGVUaWxlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySUQgPSBsYXllcklE
OworICAgIGRhdGEucmVtb3RlVGlsZUlEID0gdGlsZUlEOworICAgIGRhdGEuc2NhbGUgPSB1cGRh
dGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yOworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKENyZWF0ZVRp
bGVNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklE
LCB0aWxlSUQsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBk
YXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgVXBkYXRlVGlsZU1lc3NhZ2VEYXRhIGRhdGE7
CisgICAgZGF0YS5sYXllcklEID0gbGF5ZXJJRDsKKyAgICBkYXRhLnJlbW90ZVRpbGVJRCA9IHRp
bGVJRDsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRt
YXA6OmNyZWF0ZSh1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSk7CisgICAgZGF0YS5pbWFnZSA9IGJp
dG1hcC0+Y3JlYXRlUUltYWdlKCkuY29weSgpOworICAgIGRhdGEuc291cmNlUmVjdCA9IEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzLnNpemUoKSk7
CisgICAgZGF0YS50YXJnZXRSZWN0ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzOworICAg
IHB1c2hVcGRhdGVUb1F1ZXVlKFVwZGF0ZVRpbGVNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlEKQoreworICAgIFJlbW92ZVRpbGVNZXNzYWdlRGF0YSBkYXRhOworICAgIGRh
dGEubGF5ZXJJRCA9IGxheWVySUQ7CisgICAgZGF0YS5yZW1vdGVUaWxlSUQgPSB0aWxlSUQ7Cisg
ICAgcHVzaFVwZGF0ZVRvUXVldWUoUmVtb3ZlVGlsZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9
CisKKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2Vi
TGF5ZXJJRCBpZCkKK3sKKyAgICBEZWxldGVMYXllck1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0
YS5sYXllcklEID0gaWQ7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoRGVsZXRlTGF5ZXJNZXNzYWdl
OjpjcmVhdGUoZGF0YSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBTZXRSb290TGF5ZXJNZXNzYWdl
RGF0YSBkYXRhOworICAgIGRhdGEubGF5ZXJJRCA9IGlkOworICAgIHB1c2hVcGRhdGVUb1F1ZXVl
KFNldFJvb3RMYXllck1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpzeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKGNvbnN0IFdlYkxheWVySW5mbyYg
aW5mbykKK3sKKyAgICBTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZURhdGEgZGF0YTsKKyAgICBk
YXRhLmxheWVySW5mbyA9IGluZm87CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoU3luY0xheWVyUGFy
YW1ldGVyc01lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFBy
b3h5OjpkaWRSZW5kZXJGcmFtZSgpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkt
PnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1l
KCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgcHVzaFVwZGF0
ZVRvUXVldWUoRmx1c2hMYXllckNoYW5nZXNNZXNzYWdlOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90
IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlKQorewor
ICAgIENyZWF0ZUltYWdlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGRhdGEu
aW1hZ2VJRCA9IGtleTsKKyAgICBkYXRhLmltYWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKS5j
b3B5KCk7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoQ3JlYXRlSW1hZ2VNZXNzYWdlOjpjcmVhdGUo
ZGF0YSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29t
cG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQoreworICAgIERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRh
IGRhdGE7CisgICAgZGF0YS5pbWFnZUlEID0ga2V5OworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKERl
c3Ryb3lJbWFnZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0
UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNv
bnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKSwgbV9kcmF3aW5nQXJl
YVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9h
dCBzY2FsZSkKK3sKKyAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworICAgIG1fY29u
dGVudHNTY2FsZSA9IHNjYWxlOworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVj
dEFuZFNjYWxlKHJlY3QsIHNjYWxlKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJ
RCgpKTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
LnBybyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCmluZGV4IDI3NzVlOGEuLjM2YTg1MDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIucHJvCkBAIC0yOSw2ICsyOSw4IEBAIFdFQktJVDFfU09VUkNFU19TSEFSRURf
V0lUSF9XRUJLSVQyID0gXAogV0VCS0lUMl9HRU5FUkFURURfSEVBREVSUyA9IFwKICAgICAkJFdF
QktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0F1dGhlbnRpY2F0aW9uTWFuYWdlck1lc3NhZ2Vz
LmggXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRG93bmxvYWRQcm94eU1l
c3NhZ2VzLmggXAorICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVl
SG9zdE1lc3NhZ2VzLmggXAorICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5
ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggXAogICAgICQkV0VCS0lU
Ml9HRU5FUkFURURfU09VUkNFU19ESVIvUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBc
CiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5Qcm9jZXNzQ29ubmVj
dGlvbk1lc3NhZ2VzLmggXApAQCAtNjcsNiArNjksOCBAQCBXRUJLSVQyX0dFTkVSQVRFRF9TT1VS
Q0VTID0gXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRG93bmxvYWRQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19E
SVIvRHJhd2luZ0FyZWFNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJB
VEVEX1NPVVJDRVNfRElSL0RyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKKyAg
ICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJlZUhvc3RNZXNzYWdlUmVj
ZWl2ZXIuY3BwIFwKKyAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJl
ZUhvc3RQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURf
U09VUkNFU19ESVIvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIFwK
ICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL1BsdWdpbkNvbnRyb2xsZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19E
SVIvUGx1Z2luUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgXApAQCAtMTYyLDYgKzE2Niw3IEBA
IEhFQURFUlMgKz0gXAogICAgIFNoYXJlZC9XZWJHcmFwaGljc0NvbnRleHQuaCBcCiAgICAgU2hh
cmVkL1dlYkhpdFRlc3RSZXN1bHQuaCBcCiAgICAgU2hhcmVkL1dlYkltYWdlLmggXAorICAgIFNo
YXJlZC9XZWJMYXllclRyZWVJbmZvLmggXAogICAgIFNoYXJlZC9XZWJOYXZpZ2F0aW9uRGF0YVN0
b3JlLmggXAogICAgIFNoYXJlZC9XZWJOdW1iZXIuaCBcCiAgICAgU2hhcmVkL1dlYk9wZW5QYW5l
bFBhcmFtZXRlcnMuaCBcCkBAIC0zMTYsNiArMzIxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFcnJvcnMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmggXAorICAgIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggXApAQCAtMzk5LDYgKzQwNSw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIFNoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcCBcCiAgICAgU2hhcmVkL1dl
YktleWJvYXJkRXZlbnQuY3BwIFwKICAgICBTaGFyZWQvV2ViSW1hZ2UuY3BwIFwKKyAgICBTaGFy
ZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAgXAogICAgIFNoYXJlZC9XZWJNb3VzZUV2ZW50LmNwcCBc
CiAgICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuY3BwIFwKICAgICBTaGFyZWQvV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAgXApAQCAtNDg2LDYgKzQ5Myw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVBy
b2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAg
XAorICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0
dXJlUmVjb2duaXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25p
emVyLmNwcCBcCkBAIC01NjUsNiArNTczLDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAgXAorICAgIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcAppbmRleCAyMThmMmZmLi40MmJhMDc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NM
YXllci5jcHAKQEAgLTI1LDEzICsyNSwxMyBAQAogCiAjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCiAj
aW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5o
IgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94
eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZS5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJ0ZXh0L0NT
dHJpbmcuaCIKICNpbmNsdWRlIDxIYXNoTWFwLmg+CkBAIC01OCwxMiArNTgsNiBAQCBXZWJHcmFw
aGljc0xheWVyKiBXZWJHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklE
IGlkKQogICAgIHJldHVybiBpdC0+c2Vjb25kOwogfQogCi1zdGF0aWMgVmVjdG9yPFdlYkxheWVy
SUQ+JiBkZWxldGVkTGF5ZXJJRHMoKQotewotICAgIHN0YXRpYyBWZWN0b3I8V2ViTGF5ZXJJRD4g
bGF5ZXJzOwotICAgIHJldHVybiBsYXllcnM7Ci19Ci0KIHN0YXRpYyBXZWJMYXllcklEIHRvV2Vi
TGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICByZXR1cm4gbGF5ZXIgPyB0b1dl
YkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDogMDsKQEAgLTc5LDY3ICs3Myw5MSBAQCB2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6Om5vdGlmeUNoYW5nZSgpCiBXZWJHcmFwaGljc0xheWVyOjpXZWJH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdyYXBoaWNz
TGF5ZXIoY2xpZW50KQogICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCi0gICAgLCBtX21vZGlm
aWVkKGZhbHNlKQorICAgICwgbV9tb2RpZmllZCh0cnVlKQogICAgICwgbV9jb250ZW50TmVlZHNE
aXNwbGF5KGZhbHNlKQogICAgICwgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyhmYWxzZSkKLSAgICAs
IG1fY29udGVudFNjYWxlKDEuZikKKyAgICAsIG1faW5VcGRhdGVNb2RlKGZhbHNlKQorI2lmIEVO
QUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICwgbV9sYXllclRyZWVUaWxlQ2xpZW50KDAp
CisgICAgLCBtX21haW5CYWNraW5nU3RvcmUoYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3Jl
KHRoaXMsIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkp
KQorI2VuZGlmCiB7Ci0gICAgLy8gU3RhcnRpbmcgbGF5ZXIgSURzIGZyb20gMTAwMCwgdG8gaGVs
cCBkZXRlY3QgZmF1bHR5IElEcyBlYXNpbHkuCi0gICAgc3RhdGljIFdlYkxheWVySUQgc0lEID0g
MTAwMDsKLSAgICBtX2xheWVySW5mby5pZCA9ICsrc0lEOworICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZS0+c2V0Q29udGVudHNTY2FsZSgxLjApOworICAgIHN0YXRpYyBXZWJMYXllcklEIG5leHRMYXll
cklEID0gMTsKKyAgICBtX2xheWVySW5mby5pZCA9IG5leHRMYXllcklEKys7CiAgICAgbGF5ZXJC
eUlETWFwKCkuYWRkKGlkKCksIHRoaXMpOwogfQogCiBXZWJHcmFwaGljc0xheWVyOjp+V2ViR3Jh
cGhpY3NMYXllcigpCiB7CiAgICAgbGF5ZXJCeUlETWFwKCkucmVtb3ZlKGlkKCkpOwotICAgIGRl
bGV0ZWRMYXllcklEcygpLmFwcGVuZChpZCgpKTsKKworICAgIC8vIFRoaXMgd291bGQgdGVsbCB0
aGUgVUkgcHJvY2VzcyB0byByZWxlYXNlIHRoZSBiYWNraW5nIHN0b3JlLgorICAgIHNldENvbnRl
bnRzVG9JbWFnZSgwKTsKKworICAgIGlmIChtX2xheWVyVHJlZVRpbGVDbGllbnQpCisgICAgICAg
IG1fbGF5ZXJUcmVlVGlsZUNsaWVudC0+ZGlkRGVsZXRlTGF5ZXIoaWQoKSk7CiB9CiAKIGJvb2wg
V2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIq
PiYgY2hpbGRyZW4pCiB7CiAgICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVu
KGNoaWxkcmVuKTsKLSAgICBpZiAob2spCi0gICAgICAgIG5vdGlmeUNoYW5nZSgpOwotICAgIHJl
dHVybiBvazsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJHcmFwaGlj
c0xheWVyKiBjaGlsZCA9IHRvV2ViR3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7CisgICAgICAg
IGNoaWxkLT5zZXRDb250ZW50c1NjYWxlKG1fY29udGVudHNTY2FsZSk7CisgICAgICAgIGNoaWxk
LT5ub3RpZnlDaGFuZ2UoKTsKKyAgICB9CisgICAgbm90aWZ5Q2hhbmdlKCk7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIpOworICAgIHRv
V2ViR3JhcGhpY3NMYXllcihsYXllciktPm5vdGlmeUNoYW5nZSgpOwogICAgIG5vdGlmeUNoYW5n
ZSgpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGlj
c0xheWVyKiBsYXllciwgaW50IGluZGV4KQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
QXRJbmRleChsYXllciwgaW5kZXgpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPm5v
dGlmeUNoYW5nZSgpOwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIq
IHNpYmxpbmcpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShsYXllciwgc2li
bGluZyk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAg
ICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRC
ZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKICAg
ICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b1dl
YkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5ub3RpZnlDaGFuZ2UoKTsKICAgICBub3RpZnlDaGFuZ2Uo
KTsKIH0KIAogYm9vbCBXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXll
ciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQogewogICAgIGJvb2wgb2sgPSBH
cmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKLQotICAgIGlm
IChvaykKLSAgICAgICAgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgcmV0dXJuIG9rOworICAgIGlmICgh
b2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICB0b1dl
YkdyYXBoaWNzTGF5ZXIob2xkQ2hpbGQpLT5ub3RpZnlDaGFuZ2UoKTsKKyAgICB0b1dlYkdyYXBo
aWNzTGF5ZXIobmV3Q2hpbGQpLT5ub3RpZnlDaGFuZ2UoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCkKIHsKKyAgICBpZiAo
V2ViR3JhcGhpY3NMYXllciogcGFyZW50TGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocGFyZW50
KCkpKQorICAgICAgICBwYXJlbnRMYXllci0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgR3JhcGhpY3NM
YXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOworCiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKQEAg
LTI3NCwxMyArMjkyLDI4IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlQW5pbWF0aW9u
KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKIHsKIH0KIAordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCit7CisgICAgc2V0Q29udGVudHNUb0ltYWdl
KDApOworICAgIHNldENvbnRlbnRzVG9JbWFnZShtX2ltYWdlLmdldCgpKTsKK30KKwogdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogewotICAg
IGlmIChpbWFnZSA9PSBtX2ltYWdlLmdldCgpKQorICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQor
ICAgICAgICByZXR1cm47CisgICAgV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0gbGF5
ZXJUcmVlVGlsZUNsaWVudCgpOworICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm47CiAK
KyAgICAvLyBXZSBhZG9wdCBmaXJzdCwgaW4gY2FzZSB0aGlzIGlzIHRoZSBzYW1lIGZyYW1lIC0g
dGhhdCB3YXkgd2UgYXZvaWQgZGVzdHJveWluZyBhbmQgcmVjcmVhdGluZyB0aGUgaW1hZ2UuCisg
ICAgaW50NjRfdCBuZXdJRCA9IGNsaWVudC0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShpbWFnZSk7
CisgICAgY2xpZW50LT5yZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VC
YWNraW5nU3RvcmVJRCk7CisgICAgaWYgKG5ld0lEID09IG1fbGF5ZXJJbmZvLmltYWdlQmFja2lu
Z1N0b3JlSUQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdT
dG9yZUlEID0gbmV3SUQ7CiAgICAgbV9pbWFnZSA9IGltYWdlOwotICAgIHNldE5lZWRzRGlzcGxh
eSgpOworICAgIG1fbGF5ZXJJbmZvLmltYWdlSXNVcGRhdGVkID0gdHJ1ZTsKICAgICBHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOwogICAgIG5vdGlmeUNoYW5nZSgpOwog
fQpAQCAtMzAxLDUwICszMzQsMjkgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNh
dGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIAogdm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLSAgICBu
b3RpZnlDaGFuZ2UoKTsKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSk7CiB9
CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX25lZWRzRGlzcGxheVJlY3QudW5pdGUocmVjdCk7Cisg
ICAgbV9tYWluQmFja2luZ1N0b3JlLT5pbnZhbGlkYXRlKEludFJlY3QocmVjdCkpOwogICAgIG5v
dGlmeUNoYW5nZSgpOwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQogV2ViTGF5ZXJJRCBX
ZWJHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGF5ZXJJbmZvLmlk
OwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZFN5bmNocm9uaXplKCkKK3ZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgbV9tb2RpZmllZCA9IGZhbHNl
OwotICAgIG1fbmVlZHNEaXNwbGF5UmVjdCA9IEZsb2F0UmVjdCgpOwotICAgIGlmIChtX2hhc1Bl
bmRpbmdBbmltYXRpb25zKQotICAgICAgICBub3RpZnlBbmltYXRpb25TdGFydGVkKFdURjo6Y3Vy
cmVudFRpbWUoKSk7Ci0gICAgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA9IGZhbHNlOwotfQotCi1j
b25zdCBXZWJMYXllckluZm8mIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVySW5mbygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fbGF5ZXJJbmZvOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5
bmNDb21wb3NpdGluZ1N0YXRlKCkKLXsKLSAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpCi0gICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7Cisg
ICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOwogICAgIGlm
IChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgcmVwbGljYUxheWVyKCktPnN5bmNDb21wb3NpdGlu
Z1N0YXRlKCk7CisgICAgICAgIHJlcGxpY2FMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShy
ZWN0KTsKICAgICBpZiAobWFza0xheWVyKCkpCi0gICAgICAgIG1hc2tMYXllcigpLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZSgpOworICAgICAgICBtYXNrTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3Rh
dGUocmVjdCk7CisgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiB9
CiAKIFdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBs
YXllcikKQEAgLTM1MiwzMCArMzY0LDE5IEBAIFdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhp
Y3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vi
R3JhcGhpY3NMYXllcio+KGxheWVyKTsKIH0KIAotRmxvYXRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6
Om5lZWRzRGlzcGxheVJlY3QoKSBjb25zdAotewotICAgIEZsb2F0UmVjdCByZWN0ID0gRmxvYXRS
ZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOwotICAgIGlmICghbV9u
ZWVkc0Rpc3BsYXkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KG1fbmVlZHNEaXNwbGF5UmVjdCk7
Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLVZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IFdlYkdy
YXBoaWNzTGF5ZXI6OnRha2VMYXllcnNUb0RlbGV0ZSgpCi17Ci0gICAgVmVjdG9yPFdlYktpdDo6
V2ViTGF5ZXJJRD4gbGF5ZXJzID0gZGVsZXRlZExheWVySURzKCk7Ci0gICAgZGVsZXRlZExheWVy
SURzKCkuY2xlYXIoKTsKLSAgICByZXR1cm4gbGF5ZXJzOwotfQotCiB2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiB7CisgICAgaWYg
KCFtX2xheWVyVHJlZVRpbGVDbGllbnQpCisgICAgICAgIG1fbGF5ZXJUcmVlVGlsZUNsaWVudCA9
IGxheWVyVHJlZVRpbGVDbGllbnQoKTsKKyAgICB1cGRhdGVDb250ZW50QnVmZmVycygpOworCiAg
ICAgbV9sYXllckluZm8ubmFtZSA9IG5hbWUoKTsKICAgICBtX2xheWVySW5mby5hbmNob3JQb2lu
dCA9IGFuY2hvclBvaW50KCk7CiAgICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFj
a2ZhY2VWaXNpYmlsaXR5KCk7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBj
aGlsZHJlblRyYW5zZm9ybSgpOwogICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29u
dGVudHNPcGFxdWUoKTsKICAgICBtX2xheWVySW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1Jl
Y3QoKTsKLSAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKKyAg
ICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKSB8fCBtX2ltYWdlOwog
ICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVySUQobWFza0xheWVyKCkpOwogICAgIG1f
bGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7CiAgICAgbV9sYXllcklu
Zm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKQEAgLTM4MywxMjIgKzM4NCwxNTkgQEAgdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQogICAg
IG1fbGF5ZXJJbmZvLnBvcyA9IHBvc2l0aW9uKCk7CiAgICAgbV9sYXllckluZm8ucHJlc2VydmVz
M0QgPSBwcmVzZXJ2ZXMzRCgpOwogICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVy
SUQocmVwbGljYUxheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBGbG9hdFNpemUoc2l6
ZSgpLndpZHRoKCkgKiBtX2NvbnRlbnRTY2FsZSwgc2l6ZSgpLmhlaWdodCgpICogbV9jb250ZW50
U2NhbGUpOworICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBzaXplKCk7CiAgICAgbV9sYXllckluZm8u
dHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAgbV9jb250ZW50TmVlZHNEaXNwbGF5ID0gZmFs
c2U7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uY2xlYXIoKTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKICAgICAgICAgbV9sYXllckluZm8u
Y2hpbGRyZW4uYXBwZW5kKHRvV2ViTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CisKKyAgICBtX2xh
eWVyVHJlZVRpbGVDbGllbnQtPmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIobV9sYXll
ckluZm8pOworICAgIG1fbW9kaWZpZWQgPSBmYWxzZTsKKyAgICBtX2xheWVySW5mby5pbWFnZUlz
VXBkYXRlZCA9IGZhbHNlOworICAgIGlmIChtX2hhc1BlbmRpbmdBbmltYXRpb25zKQorICAgICAg
ICBub3RpZnlBbmltYXRpb25TdGFydGVkKFdURjo6Y3VycmVudFRpbWUoKSk7CisgICAgbV9oYXNQ
ZW5kaW5nQW5pbWF0aW9ucyA9IGZhbHNlOwogfQogCi1zdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4g
ZGl2aWRlSW50b1RpbGVzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyNpZiBFTkFCTEUoVElMRURf
QkFDS0lOR19TVE9SRSkKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQ
YWludEJlZ2luKCkKIHsKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlczsKLSAgICBmb3IgKGZs
b2F0IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7
Ci0gICAgICAgIGZvciAoZmxvYXQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7IHggKz0g
Z1RpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlKHgsIHksIGdUaWxl
RGltZW5zaW9uLCBnVGlsZURpbWVuc2lvbik7Ci0gICAgICAgICAgICB0aWxlLmludGVyc2VjdChy
ZWN0KTsKLSAgICAgICAgICAgIHRpbGVzLmFwcGVuZCh0aWxlKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gdGlsZXM7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0lu
Zm9Gb3JUaGlzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91
dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKK3ZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKIHsKLSAgICBXZWJHcmFw
aGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihsYXllcik7Ci0gICAgaWYgKCFs
YXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbGF5ZXItPmlzTW9kaWZpZWQoKSkKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hp
bGRyZW4oKVtpXSk7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKKyAg
ICB9CisKKyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKKyAgICBpZiAobV9tYWluQmFja2lu
Z1N0b3JlICYmIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpID09IHNjYWxlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBvdXRMYXllcnMuYXBwZW5kKGxheWVyKTsKLSAgICBvdXRJ
bmZvLmxheWVycy5hcHBlbmQobGF5ZXItPmxheWVySW5mbygpKTsKKyAgICBub3RpZnlDaGFuZ2Uo
KTsKIAotICAgIFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvID0gb3V0SW5mby5sYXllcnNbb3V0SW5m
by5sYXllcnMuc2l6ZSgpIC0gMV07Ci0gICAgaWYgKGxheWVyLT5pbWFnZSgpKQotICAgICAgICBs
YXllckluZm8uZHJhd3NDb250ZW50ID0gdHJ1ZTsKKyAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3Jl
ID0gbV9tYWluQmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUg
PSBhZG9wdFB0cihuZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlQmFja2VuZDo6Y3JlYXRlKHRoaXMpKSk7CisgICAgbV9tYWluQmFja2luZ1N0b3Jl
LT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKIH0KIAotc3RhdGljIHZvaWQgY29sbGVjdENvbXBv
c2l0aW5nSW5mb1JlY3Vyc2l2ZWx5KEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciwgV2ViTGF5ZXJU
cmVlSW5mbyYgb3V0SW5mbywgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiYgb3V0TGF5ZXJzKQor
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3QpCiB7Ci0gICAg
aWYgKCFyb290TGF5ZXIpCisgICAgbV9sYXllckluZm8uaXNSb290TGF5ZXIgPSBpc1Jvb3Q7Cisg
ICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJs
ZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5
VmVjdG9yKQoreworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0VmlzaWJsZVJlY3RUcmFqZWN0
b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fdmlz
aWJsZUNvbnRlbnRSZWN0ID0gcmVjdDsKKyAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICBtX21haW5C
YWNraW5nU3RvcmUtPmFkanVzdFZpc2libGVSZWN0KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CisgICAgbV9tb2RpZmllZCA9IHRydWU7CisgICAgcGFpbnRHcmFwaGljc0xheWVyQ29u
dGVudHMoKmNvbnRleHQsIHJlY3QpOworfQogCi0gICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0Zv
clRoaXNMYXllcihyb290TGF5ZXIsIG91dEluZm8sIG91dExheWVycyk7Ci0gICAgY29sbGVjdENv
bXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihyb290TGF5ZXItPm1hc2tMYXllcigpLCBvdXRJbmZv
LCBvdXRMYXllcnMpOwotICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseShyb290
TGF5ZXItPnJlcGxpY2FMYXllcigpLCBvdXRJbmZvLCBvdXRMYXllcnMpOwordm9pZCBXZWJHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0
PiYgdXBkYXRlZFJlY3RzKQoreworfQogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290
TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvbGxlY3RDb21wb3NpdGlu
Z0luZm9SZWN1cnNpdmVseShyb290TGF5ZXItPmNoaWxkcmVuKClbaV0sIG91dEluZm8sIG91dExh
eWVycyk7Citib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0Fs
bG93ZWQoKSBjb25zdAoreworICAgIGlmICghbV9pblVwZGF0ZU1vZGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0gbGF5ZXJU
cmVlVGlsZUNsaWVudCgpKQorICAgICAgICByZXR1cm4gY2xpZW50LT5sYXllclRyZWVUaWxlVXBk
YXRlc0FsbG93ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c2VuZExheWVyc1RvVUlQcm9jZXNzKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RM
YXllciwgV2ViUGFnZSogd2ViUGFnZSkKK0ludFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVDb250ZW50c1JlY3QoKQogewotICAgIHdlYlBhZ2UtPmxheW91dElmTmVlZGVk
KCk7Ci0gICAgd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0Nv
bXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKLSAgICBXZWJMYXllclRyZWVJbmZv
IGNvbXBvc2l0aW5nSW5mbzsKLSAgICBjb21wb3NpdGluZ0luZm8ucm9vdExheWVySUQgPSByb290
TGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIocm9vdExheWVyKS0+aWQoKSA6IDA7Ci0gICAgY29t
cG9zaXRpbmdJbmZvLmNvbnRlbnRTY2FsZSA9IDEuMDsKLSAgICBjb21wb3NpdGluZ0luZm8uZGVs
ZXRlZExheWVySURzID0gV2ViR3JhcGhpY3NMYXllcjo6dGFrZUxheWVyc1RvRGVsZXRlKCk7Ci0g
ICAgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiBsYXllcnM7Ci0gICAgaWYgKHJvb3RMYXllcikK
LSAgICAgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb1JlY3Vyc2l2ZWx5KHJvb3RMYXllciwgY29t
cG9zaXRpbmdJbmZvLCBsYXllcnMpOworICAgIGlmIChtX2ltYWdlKQorICAgICAgICByZXR1cm4g
SW50UmVjdCgpOworICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXpl
KCkuaGVpZ2h0KCkpOworfQogCi0gICAgaWYgKGNvbXBvc2l0aW5nSW5mby5kZWxldGVkTGF5ZXJJ
RHMuaXNFbXB0eSgpICYmIGNvbXBvc2l0aW5nSW5mby5sYXllcnMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47CitJbnRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlz
aWJsZVJlY3QoKQoreworICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50UmVjdDsKK30KIAotICAg
IHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OlN5bmNDb21wb3NpdGlu
Z0xheWVycyhjb21wb3NpdGluZ0luZm8pKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
bGF5ZXJzW2ldOwotICAgICAgICBGbG9hdFJlY3QgdXBkYXRlUmVjdCA9IGxheWVyLT5uZWVkc0Rp
c3BsYXlSZWN0KCk7Ci0KLSAgICAgICAgbGF5ZXItPmRpZFN5bmNocm9uaXplKCk7Ci0KLSAgICAg
ICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgUmVmUHRyPEltYWdlPiBkaXJlY3RJbWFnZSA9IGxheWVyLT5pbWFnZSgpOwotICAgICAg
ICBpZiAoZGlyZWN0SW1hZ2UpCi0gICAgICAgICAgICB1cGRhdGVSZWN0ID0gbGF5ZXItPmNvbnRl
bnRzUmVjdCgpOwotICAgICAgICBlbHNlIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGlsZVJlY3Rz
ID0gZGl2aWRlSW50b1RpbGVzKHVwZGF0ZVJlY3QpOwotICAgICAgICBmb3IgKHNpemVfdCB0aWxl
SW5kZXggPSAwOyB0aWxlSW5kZXggPCB0aWxlUmVjdHMuc2l6ZSgpOyArK3RpbGVJbmRleCkgewot
ICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCA9IHRpbGVSZWN0c1t0aWxlSW5k
ZXhdOwotICAgICAgICAgICAgSW50UmVjdCBlbmNsb3NpbmdVcGRhdGVSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdCh0aWxlUmVjdCk7Ci0KLSAgICAgICAgICAgIFdlYkxheWVyVXBkYXRlSW5mbyBjaHVu
ayhlbmNsb3NpbmdVcGRhdGVSZWN0KTsKLSAgICAgICAgICAgIGNodW5rLmxheWVySUQgPSB1aW50
MzJfdChsYXllci0+aWQoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBi
aXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShjaHVuay5yZWN0LnNpemUo
KSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICAgICAgICAgIGlmICghYml0
bWFwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKCFiaXRtYXAt
PmNyZWF0ZUhhbmRsZShjaHVuay5iaXRtYXBIYW5kbGUpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotI2lmIFBMQVRGT1JNKFFUKQotICAgICAgICAgICAgUUltYWdlIHRpbGVJbWFnZSA9IGJp
dG1hcC0+Y3JlYXRlUUltYWdlKCk7Ci0gICAgICAgICAgICB0aWxlSW1hZ2UuZmlsbCgwKTsKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBRUGFpbnRlciBwYWludGVyKCZ0aWxlSW1hZ2Up
OwotICAgICAgICAgICAgICAgIHBhaW50ZXIudHJhbnNsYXRlKC10aWxlUmVjdC54KCksIC10aWxl
UmVjdC55KCkpOwotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZwYWlu
dGVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlyZWN0SW1hZ2UpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQuZHJhd0ltYWdlKGRpcmVjdEltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBsYXllci0+Y29udGVudHNSZWN0KCksIEZsb2F0UmVjdCgwLCAwLCBkaXJlY3RJbWFnZS0+
d2lkdGgoKSwgZGlyZWN0SW1hZ2UtPmhlaWdodCgpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBsYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29u
dGV4dCwgZW5jbG9zaW5nVXBkYXRlUmVjdCk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKK0NvbG9y
IFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gY29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9y
Ojp0cmFuc3BhcmVudDsKKworfQordm9pZCBXZWJHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKGlu
dCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV9tb2RpZmll
ZCA9IHRydWU7CisgICAgaWYgKFdlYkxheWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9IGxheWVy
VHJlZVRpbGVDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5jcmVhdGVUaWxlKGlkKCksIHRpbGVJ
RCwgdXBkYXRlSW5mbyk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZShp
bnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIG1fbW9kaWZp
ZWQgPSB0cnVlOworICAgIGlmIChXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBsYXll
clRyZWVUaWxlQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+dXBkYXRlVGlsZShpZCgpLCB0aWxl
SUQsIHVwZGF0ZUluZm8pOworfQogCi0gICAgICAgICAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpEcmF3aW5nQXJlYVByb3h5OjpVcGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChjaHVuaykp
OwotICAgICAgICB9Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUoaW50IHRpbGVJ
RCkKK3sKKyAgICBtX21vZGlmaWVkID0gdHJ1ZTsKKyAgICBpZiAoV2ViTGF5ZXJUcmVlVGlsZUNs
aWVudCogY2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgpKQorICAgICAgICBjbGllbnQtPnJl
bW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRh
dGVUaWxlQnVmZmVyc1JlY3Vyc2l2ZWx5KCkKK3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnVw
ZGF0ZVRpbGVCdWZmZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigp
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gdG9XZWJH
cmFwaGljc0xheWVyKHRoaXMtPmNoaWxkcmVuKClbaV0pOworICAgICAgICBsYXllci0+dXBkYXRl
VGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSgpOwogICAgIH0KIH0KIAorV2ViTGF5ZXJUcmVlVGlsZUNs
aWVudCogV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJUcmVlVGlsZUNsaWVudCgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fbGF5ZXJUcmVlVGlsZUNsaWVudCkKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVl
VGlsZUNsaWVudDsKKyAgICBXZWJHcmFwaGljc0xheWVyKiBwYXJlbnQgPSB0b1dlYkdyYXBoaWNz
TGF5ZXIodGhpcy0+cGFyZW50KCkpOworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gcGFyZW50LT5sYXllclRyZWVUaWxlQ2xpZW50KCk7Cit9CisKK3ZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQoreworICAgIC8vIEJhY2tp
bmctc3RvcmVzIGZvciBkaXJlY3RseSBjb21wb3NpdGVkIGltYWdlcyBpcyBoYW5kbGVkIGluIExh
eWVyVHJlZUhvc3QuCisgICAgaWYgKG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJMYXllclRyZWVUaWxl
Q2xpZW50KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCk7CisgICAgaWYgKCFjbGllbnQp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2luVXBkYXRlTW9kZSA9IHRydWU7CisgICAgbV9tYWlu
QmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOworICAgIG1faW5VcGRhdGVNb2RlID0g
ZmFsc2U7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBj
cmVhdGVXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIHsKICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYkdyYXBoaWNzTGF5ZXIoY2xpZW50KSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3Jh
cGhpY3NMYXllci5oCmluZGV4IGFkNjAyMWUuLmM1ODFiNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXll
ci5oCkBAIC0yNywxOSArMjcsNDAgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAi
UnVuTG9vcC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRpbGVk
QmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKKyNp
bmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJM
YXllclRyZWVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlBhZ2U7
CisKK2NsYXNzIFdlYkxheWVyVHJlZVRpbGVDbGllbnQgeworcHVibGljOgorICAgIC8vIFRpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxl
KFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRl
SW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQg
dGlsZUlEKSA9IDA7CisgICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dl
ZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9y
ZShJbWFnZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3Jl
KGludDY0X3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVG
b3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZERl
bGV0ZUxheWVyKFdlYkxheWVySUQpID0gMDsKK307CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgV2ViR3JhcGhpY3NMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVy
IHsKK2NsYXNzIFdlYkdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXll
cgorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICAgICAgICAgICAgICAgICAg
ICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAgICAgICAgICAgICAgICAgICAg
ICAsIHB1YmxpYyBXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorI2Vu
ZGlmCit7CiBwdWJsaWM6CiAgICAgV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50
Kik7CiAgICAgdmlydHVhbCB+V2ViR3JhcGhpY3NMYXllcigpOwpAQCAtNzMsMTMgKzk0LDEzIEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHZvaWQgc2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgc2V0Q29udGVudHNOZWVk
c0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAg
ICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBz
ZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0Jik7
CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OworICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wpOwogCiAgICAgV2ViS2l0OjpXZWJMYXllcklE
IGlkKCkgY29uc3Q7Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJMYXllckluZm8mIGxheWVySW5mbygp
IGNvbnN0OwotICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0KCkgY29uc3Q7Ci0gICAgc3Rh
dGljIFZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IHRha2VMYXllcnNUb0RlbGV0ZSgpOwogICAg
IHN0YXRpYyBXZWJHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEKTsK
ICAgICBib29sIGlzTW9kaWZpZWQoKSBjb25zdCB7IHJldHVybiBtX21vZGlmaWVkOyB9CiAgICAg
dm9pZCBkaWRTeW5jaHJvbml6ZSgpOwpAQCAtODcsMjEgKzEwOCw1MSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSk7CiAKICAgICBzdGF0aWMgdm9pZCBp
bml0RmFjdG9yeSgpOwotICAgIHN0YXRpYyB2b2lkIHNlbmRMYXllcnNUb1VJUHJvY2VzcyhXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgV2ViS2l0OjpXZWJQYWdlKik7CisKKyNpZiBFTkFCTEUoVElM
RURfQkFDS0lOR19TVE9SRSkKKyAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAgIHZp
cnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVj
dG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7CisgICAgdmlydHVhbCBib29sIHRpbGVkQmFja2lu
Z1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRC
YWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNr
aW5nU3RvcmVWaXNpYmxlUmVjdCgpOworICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3Rv
cmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKworICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNv
bnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGlu
dCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVUaWxlKGludCB0aWxlSUQpOworCisgICAgdm9pZCBzZXRMYXllclRyZWVUaWxlQ2xpZW50
KFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50KSB7IG1fbGF5ZXJUcmVlVGls
ZUNsaWVudCA9IGNsaWVudDsgfQorICAgIFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCog
bGF5ZXJUcmVlVGlsZUNsaWVudCgpIGNvbnN0OworCisgICAgYm9vbCBpc1JlYWR5Rm9yVGlsZUJ1
ZmZlclN3YXAoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVRpbGVCdWZmZXJzUmVjdXJzaXZlbHko
KTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOworICAgIHZvaWQgdXBkYXRlQ29u
dGVudEJ1ZmZlcnMoKTsKKyNlbmRpZgogCiBwcml2YXRlOgogICAgIFdlYktpdDo6V2ViTGF5ZXJJ
bmZvIG1fbGF5ZXJJbmZvOwotICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcD4gbV9i
YWNraW5nU3RvcmU7CisgICAgV2ViS2l0OjpXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBtX2xheWVy
VGlsZUNsaWVudDsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAgRmxvYXRSZWN0IG1f
bmVlZHNEaXNwbGF5UmVjdDsKLSAgICBib29sIG1fbmVlZHNEaXNwbGF5OwotICAgIGJvb2wgbV9t
b2RpZmllZDsKLSAgICBib29sIG1fY29udGVudE5lZWRzRGlzcGxheTsKLSAgICBib29sIG1faGFz
UGVuZGluZ0FuaW1hdGlvbnM7Ci0KLSAgICBmbG9hdCBtX2NvbnRlbnRTY2FsZTsKKyAgICBJbnRS
ZWN0IG1fdmlzaWJsZUNvbnRlbnRSZWN0OworICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXkgOiAxOwor
ICAgIGJvb2wgbV9tb2RpZmllZCA6IDE7CisgICAgYm9vbCBtX2NvbnRlbnROZWVkc0Rpc3BsYXkg
OiAxOworICAgIGJvb2wgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA6IDE7CisgICAgYm9vbCBtX2lu
VXBkYXRlTW9kZSA6IDI7CiAKICAgICB2b2lkIG5vdGlmeUNoYW5nZSgpOworCisjaWYgRU5BQkxF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgV2ViS2l0OjpXZWJMYXllclRyZWVUaWxlQ2xpZW50
KiBtX2xheWVyVHJlZVRpbGVDbGllbnQ7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2lu
Z1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFj
a2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOworICAgIGZsb2F0IG1fY29udGVudHNT
Y2FsZTsKKyNlbmRpZgogfTsKIAogV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xheWVy
KEdyYXBoaWNzTGF5ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhLmgKaW5kZXggNTJmZGRkZC4uZDg3MGViMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTc0LDEwICs3NCwxMSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSB7IH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNp
ZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJTeW5jKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXllcnMo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXIqKSA9IDA7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKaW5k
ZXggOTdmZjgyNy4uN2RkN2M4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKQEAgLTY3Myw1ICs2NzMsMTMgQEAgdm9p
ZCBEcmF3aW5nQXJlYUltcGw6OmRpc3BsYXkoVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKICAgICBt
X2xhc3REaXNwbGF5VGltZSA9IGN1cnJlbnRUaW1lKCk7CiB9CiAKKyNpZiBFTkFCTEUoVElMRURf
QkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3
aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25u
ZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0
KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2Fn
ZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7Cit9CisjZW5kaWYKKwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYUltcGwuaAppbmRleCBjYzhhODA1Li4zNWIyMDg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCkBA
IC03MSw2ICs3MSwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNoaWxk
V2luZG93R2VvbWV0cnlVcGRhdGUoY29uc3QgV2luZG93R2VvbWV0cnkmKTsKICNlbmRpZgogCisj
aWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciopOworI2VuZGlmCisKICAgICAvLyBDb3JlSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdT
dG9yZVN0YXRlSUQsIGJvb2wgcmVzcG9uZEltbWVkaWF0ZWx5LCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNj
cm9sbE9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGRh
NDJhZTYuLjAzMWMzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjZW5kaWYKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oUVQpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJx
dC9MYXllclRyZWVIb3N0UXQuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NCw2ICs0OCw4IEBAIFBhc3NSZWZQdHI8TGF5ZXJU
cmVlSG9zdD4gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgcmV0
dXJuIExheWVyVHJlZUhvc3RDQU1hYzo6Y3JlYXRlKHdlYlBhZ2UpOwogI2VsaWYgUExBVEZPUk0o
V0lOKSAmJiBIQVZFKFdLUUNBKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FXaW46OmNyZWF0
ZSh3ZWJQYWdlKTsKKyNlbGlmIFBMQVRGT1JNKFFUKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisg
ICAgcmV0dXJuIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKHdlYlBhZ2UpOwogI2Vsc2UKICAgICBy
ZXR1cm4gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVIb3N0LmgKaW5kZXggNjdjODA3Yi4uNTFmOTkyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNiwxMyAr
MjYsMjAgQEAKICNpZm5kZWYgTGF5ZXJUcmVlSG9zdF9oCiAjZGVmaW5lIExheWVyVHJlZUhvc3Rf
aAogCisjaW5jbHVkZSA8Q29yZUlQQy9NZXNzYWdlSUQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKK25hbWVzcGFjZSBDb3JlSVBD
IHsKK2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIENvbm5lY3Rpb247Cit9CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnRSZWN0OwotICAgIGNsYXNzIEludFNpemU7Ci0g
ICAgY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBJbnRSZWN0
OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7CiB9CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewpAQCAtNzIsNiArNzksMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXVz
ZVJlbmRlcmluZygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IH0K
IAorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRW
aXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQg
c2NhbGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0
b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBD
OjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRhdGUoY29uc3QgV2luZG93R2VvbWV0cnkmKSA9IDA7
CiAjZW5kaWYKQEAgLTgwLDYgKzk1LDExIEBAIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBMYXll
clRyZWVIb3N0KFdlYlBhZ2UqKTsKIAogICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKKworCisjaWYg
RU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgYm9vbCBtX3dhaXRpbmdGb3JVSVByb2Nl
c3M7CisjZW5kaWYKIH07CiAKICNpZiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oUVQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVIb3N0Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZk
ZTk4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI4IEBACisjCisjICAgIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIwor
IyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorIworCisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkK
K21lc3NhZ2VzIC0+IExheWVyVHJlZUhvc3QgeworICAgIFNldFZpc2libGVDb250ZW50UmVjdEZv
ckxheWVyKGludCBsYXllcklELCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdCkK
KyAgICBTZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKFdlYkNvcmU6OkZsb2F0
UG9pbnQgdHJhamVjdG9yeVZlY3RvcnkpCisgICAgU2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2Nh
bGUoV2ViQ29yZTo6SW50UmVjdCBjb250ZW50UmVjdCwgZmxvYXQgc2NhbGUpCisgICAgUmVuZGVy
TmV4dEZyYW1lKCkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwCmluZGV4IGZhYTZjZGQuLmU3MjA4YTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdp
bmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRE
cmF3aW5nQXJlYS5jcHAKQEAgLTE3Nyw2ICsxNzcsMTAgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVh
OjpyZW1vdmVUaWxlKGludCB0aWxlSUQpCiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpE
cmF3aW5nQXJlYVByb3h5OjpSZW1vdmVUaWxlKHRpbGVJRCkpOwogfQogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBUaWxlZERyYXdpbmdBcmVhOjpkaWRSZWNlaXZlTGF5
ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQ
Qzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykgeyB9Cisj
ZW5kaWYKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCisKICNlbmRpZiAvLyBUSUxFRF9CQUNLSU5H
X1NUT1JFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGls
ZWREcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVk
RHJhd2luZ0FyZWEuaAppbmRleCBlZDEzZDJhLi41ZWI3OWFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgKQEAgLTQ5LDYg
KzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXll
cihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllclN5bmMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0
aW5nTGF5ZXJzKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqKTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDU1ZjVlZmUuLmYxOWI2YmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAg
LTIxNTQsNiArMjE1NCwxNCBAQCB2b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZwogICAgICAgICAgICAg
bV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZURyYXdpbmdBcmVhTWVzc2FnZShjb25uZWN0aW9uLCBt
ZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyNpZiBFTkFC
TEUoVElMRURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdD4o
KSkgeworICAgICAgICBpZiAobV9kcmF3aW5nQXJlYSkKKyAgICAgICAgICAgIG1fZHJhd2luZ0Fy
ZWEtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQs
IGFyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICAKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNs
YXNzV2ViSW5zcGVjdG9yPigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCmluZGV4IDU3OGFlMDguLjhjNDQ2
OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9x
dC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0yNSw4ICsyNSw0MTMgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNs
dWRlICJMYXllclRyZWVIb3N0UXQuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94
eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiV2ViR3JhcGhp
Y3NMYXllci5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Bh
Z2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0
UXQ+IExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBMYXllclRyZWVIb3N0UXQod2ViUGFnZSkpOworfQorCitMYXllclRy
ZWVIb3N0UXQ6On5MYXllclRyZWVIb3N0UXQoKQoreworfQorCitMYXllclRyZWVIb3N0UXQ6Okxh
eWVyVHJlZUhvc3RRdChXZWJQYWdlKiB3ZWJQYWdlKQorICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQ
YWdlKQorICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCisgICAg
LCBtX2lzVmFsaWQodHJ1ZSkKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAs
IG1fd2FpdGluZ0ZvclVJUHJvY2VzcyhmYWxzZSkKKyAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2Up
CisjZW5kaWYKKyAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQorICAgICwgbV9zaG91bGRT
eW5jUm9vdExheWVyKHRydWUpCisgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAmTGF5ZXJU
cmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKKyAgICAsIG1fbGF5ZXJGbHVzaFNjaGVk
dWxpbmdFbmFibGVkKHRydWUpCit7CisgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4KKyAgICBt
X3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBXZWJHcmFwaGlj
c0xheWVyKiB3ZWJSb290TGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0
KCkpOworICAgIHdlYlJvb3RMYXllci0+c2V0Um9vdExheWVyKHRydWUpOworI2lmbmRlZiBOREVC
VUcKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFF0IHJvb3QgbGF5ZXIi
KTsKKyNlbmRpZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAg
IG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBtX2xheWVyVHJl
ZUNvbnRleHQud2ViTGF5ZXJJRCA9IHRvV2ViR3JhcGhpY3NMYXllcih3ZWJSb290TGF5ZXIpLT5p
ZCgpOworCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKHRoaXMpOworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHRvV2Vi
R3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldExheWVyVHJlZVRpbGVDbGllbnQo
dGhpcyk7CisjZW5kaWYKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0UXQgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIp
OworI2VuZGlmCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09w
YXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJh
bnNwYXJlbnRCYWNrZ3JvdW5kKCkpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+
c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQo
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKTsKKworICAgIGlmIChtX3dlYlBhZ2Ut
Pmhhc1BhZ2VPdmVybGF5KCkpCisgICAgICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKwor
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0
TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCit7
CisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1c2hpbmdF
bmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZCA9IGxheWVyRmx1c2hpbmdFbmFibGVkOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVk
dWxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJG
bHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2NoZWR1bGVMYXllckZsdXNoKCkK
K3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1f
bGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UXQ6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5z
dG9wKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRTaG91bGROb3RpZnlBZnRlck5l
eHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
KQoreworICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sK
KyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisK
KyAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxheWVyIHRyZWUgaGllcmFyY2h5LgorICAgIGlm
IChncmFwaGljc0xheWVyKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFk
ZENoaWxkKGdyYXBoaWNzTGF5ZXIpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6aW52YWxp
ZGF0ZSgpCit7CisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKworICAgIEFTU0VSVCht
X2lzVmFsaWQpOworICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKKyAgICBtX2lzVmFsaWQgPSBm
YWxzZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50
c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAg
aWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRO
ZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
Y3JvbGxPZmZzZXQpCit7CisgICAgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXko
c2Nyb2xsUmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQoKQor
eworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6
c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKQoreworICAgIG1f
cm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1NpemUgZXhw
b3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rp
c3BsYXkgaXMgbmVlZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCisg
ICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUo
KTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisK
KyAgICBpZiAobmV3U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGZs
b2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgp
KSwgb2xkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5l
d1NpemUud2lkdGgoKSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQorCisgICAg
aWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwg
b2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xk
U2l6ZS5oZWlnaHQoKSkpOworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAg
bV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWRJbnN0YWxsUGFnZU92ZXJs
YXkoKQoreworICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKKworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92
ZXJsYXkoKQoreworICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRQYWdlT3ZlcmxheU5l
ZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVCht
X3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KHJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitib29sIExh
eWVyVHJlZUhvc3RRdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBib29sIGRp
ZFN5bmMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmND
b21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAg
ICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnN5
bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgbV9yb290TGF5ZXIt
PnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHJldHVybiBkaWRT
eW5jOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVG
b3JMYXllcihjb25zdCBXZWJMYXllckluZm8mIGluZm8pCit7CisgICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFBy
b3h5OjpTeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKGluZm8pKTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UXQ6OmRpZERlbGV0ZUxheWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
SG9zdFByb3h5OjpEZWxldGVDb21wb3NpdGluZ0xheWVyKGlkKSk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCit7CisgICAgbV93ZWJQYWdl
LT5sYXlvdXRJZk5lZWRlZCgpOworCisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVy
bjsKKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIGlmIChtX2lzU3VzcGVu
ZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisK
KyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOworICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpOworICAgIGlmICghbV9zaG91bGRTeW5jRnJhbWUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRv
V2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKKyAgICAgICAgbV9z
aG91bGRTeW5jUm9vdExheWVyID0gZmFsc2U7CisgICAgfQorCisgICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRpZFJlbmRlckZyYW1lKCkpOworCisgICAg
aWYgKCFtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gTGV0IHRoZSBkcmF3aW5nIGFyZWEga25vdyB0aGF0IHdlJ3ZlIGRvbmUgYSBmbHVz
aCBvZiB0aGUgbGF5ZXIgY2hhbmdlcy4KKyAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwq
PihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOwor
ICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxMYXllclRyZWVIb3N0
UXQ+KikKK3sKKyAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RRdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJUKCFt
X3BhZ2VPdmVybGF5TGF5ZXIpOworCisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3RRdCBwYWdlIG92ZXJsYXkgY29udGVudCIpOworI2Vu
ZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAg
bV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFF0OjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNT
RVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5yZW1vdmVG
cm9tUGFyZW50KCk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gbnVsbHB0cjsKK30KKworaW50
NjRfdCBMYXllclRyZWVIb3N0UXQ6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdl
KQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsK
KyAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKKworICAgIGlmICghcGl4bWFwKQorICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7
CisKKyAgICBpbnQ2NF90IGtleSA9IHBpeG1hcC0+Y2FjaGVLZXkoKTsKKyAgICBIYXNoTWFwPGlu
dDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNv
dW50cy5maW5kKGtleSk7CisKKyAgICBpZiAoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZVJlZkNvdW50cy5lbmQoKSkgeworICAgICAgICArKyhpdC0+c2Vjb25kKTsKKyAgICAgICAgcmV0
dXJuIGtleTsKKyAgICB9CisKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgpLCBpbWFnZS0+Y3Vy
cmVudEZyYW1lSGFzQWxwaGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDAp
OworICAgIHsKKyAgICAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhp
Y3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBv
aW50Ojp6ZXJvKCkpOworICAgIH0KKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRs
ZTsKKyAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOworICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZShrZXksIGhhbmRsZSkpOworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3Vu
dHMuYWRkKGtleSwgMSk7CisgICAgcmV0dXJuIGtleTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UXQ6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKK3sKKyAgICBpZiAoIWtl
eSkKKyAgICAgICAgcmV0dXJuOworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3Ig
aXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKKyAgICBp
ZiAoaXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaXQtPnNlY29uZC0tOworCisgICAgaWYgKGl0LT5zZWNvbmQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMu
cmVtb3ZlKGl0KTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQ
cm94eTo6RGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSkpOworfQorCisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6
Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFw
aGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVj
dChncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChncmFwaGljc0xheWVyID09IG1fcGFnZU92ZXJsYXlMYXllcikgeworICAgICAgICBt
X3dlYlBhZ2UtPmRyYXdQYWdlT3ZlcmxheShncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6OnNob3dEZWJ1
Z0JvcmRlcnMoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNl
dHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMoKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6
OnNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7Cit9CisKK2Jvb2wgTGF5
ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFF0OjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwg
Y29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRp
bGVJRCwgdXBkYXRlSW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6dXBkYXRlVGls
ZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8pCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJv
eHk6OlVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8pKTsKK30K
K3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50
IHRpbGVJRCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQ
cm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgV2ViR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBXZWJHcmFwaGljc0xheWVyOjpsYXllckJ5SUQobGF5ZXJJRCk7CisgICAgaWYgKCFs
YXllcikKKyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdChyZWN0KTsK
KyAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KHJlY3QpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoY29uc3QgSW50UmVjdCYg
cmVjdCwgZmxvYXQgc2NhbGUpCit7CisgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dl
YkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIGlmICghbGF5ZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBsYXllci0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7CisgICAgdG9X
ZWJHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZp
c2libGVDb250ZW50UmVjdChyZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVj
dG9yeVZlY3RvcikKK3sKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLmdldCgpKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0
cmFqZWN0b3J5VmVjdG9yKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbmRlck5leHRG
cmFtZSgpCit7CisgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7CisgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpsYXllclRyZWVUaWxl
VXBkYXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAh
bV93YWl0aW5nRm9yVUlQcm9jZXNzOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisjZWxzZQogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKIAordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBib29sIExheWVyVHJlZUhvc3Q6OnN1
cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCkBAIC0zNSwzICs0NDAsNCBAQCBib29sIExh
eWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uM2IxNjE2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaApAQCAtMCwwICsxLDEyNiBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMYXllclRyZWVIb3N0UXRfaAorI2RlZmlu
ZSBMYXllclRyZWVIb3N0UXRfaAorCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIu
aCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBVcGRhdGVJbmZvOworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgTGF5ZXJUcmVlSG9zdFF0IDog
cHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKKyNpZiBF
TkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAgICAgICAgICAgICAgICAgICAsIHB1Ymxp
YyBXZWJMYXllclRyZWVUaWxlQ2xpZW50CisjZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IGNyZWF0ZShXZWJQYWdlKik7CisgICAgdmlydHVh
bCB+TGF5ZXJUcmVlSG9zdFF0KCk7CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKTsKKworICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYg
bGF5ZXJUcmVlQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91
bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Cisg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROb25D
b21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZz
ZXQpOworICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKworICAgIHZp
cnR1YWwgdm9pZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
VW5pbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlO
ZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lk
IHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
dm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVM
YXllckZsdXNoKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFu
Z2UoKSB7IH0KKyAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFn
ZSopOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7
CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShX
ZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNp
YmxlQ29udGVudFJlY3RGb3JMYXllcihpbnQgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IEludFJlY3QmLCBmbG9hdCBzY2Fs
ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0
b3IoY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTeW5jQ29tcG9zaXRp
bmdTdGF0ZUZvckxheWVyKGNvbnN0IFdlYkxheWVySW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBk
aWREZWxldGVMYXllcihXZWJMYXllcklEKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgZXhw
bGljaXQgTGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsKKworcHJpdmF0ZToKKyAgICAvLyBHcmFw
aGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG93
UmVwYWludENvdW50ZXIoKSBjb25zdDsKKworICAgIC8vIExheWVyVHJlZUhvc3RRdAorICAgIHZv
aWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5
TGF5ZXIoKTsKKyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIHZvaWQg
Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICB2b2lkIHBlcmZvcm1TY2hlZHVsZWRMYXll
ckZsdXNoKCk7CisgICAgdm9pZCBzZW5kTGF5ZXJzVG9VSSgpOworCisgICAgT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworCisgICAgLy8gVGhlIGxheWVyIHdoaWNo
IGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7CisKKyAgICAvLyBU
aGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBwYWdlIG92
ZXJsYXkuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlM
YXllcjsKKworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50PiBtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlUmVmQ291bnRzOworCisgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVz
aDsKKyAgICBib29sIG1faXNWYWxpZDsKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkK
KyAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKKyAgICBib29sIG1faXNTdXNwZW5kZWQ7
CisjZW5kaWYKKyAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKKyAgICBi
b29sIG1fc2hvdWxkU3luY0ZyYW1lOworICAgIGJvb2wgbV9zaG91bGRTeW5jUm9vdExheWVyOwor
ICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlSG9z
dFF0PiopOworICAgIFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhvc3RRdD4gbV9sYXllckZsdXNo
VGltZXI7CisgICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKK307CisKK30K
KworI2VuZGlmIC8vIExheWVyVHJlZUhvc3RRdF9oCg==
</data>
<flag name="review"
          id="108505"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110878</attachid>
            <date>2011-10-13 10:53:24 -0700</date>
            <delta_ts>2011-10-14 08:56:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>103675</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2N2ZjYjUyLi4yNzI2MTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcy
IEBACisyMDExLTEwLTExICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1F0XVtXSzJdIFN5bmNocm9uaXplIHRpbGluZyB3aXRoIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE1MQorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgorCisg
ICAgICAgIE1ha2UgdGhlIHRpbGVkICJub24tY29tcG9zaXRlZCIgY29udGVudCBhbmQgdGhlIGNv
bXBvc2l0ZWQgbGF5ZXJzIGdvIHRocm91Z2ggdGhlIHNhbWUKKyAgICAgICAgY29kZSBwYXRoIG9u
IFdlYktpdDIuIEluc3RlYWQgb2YgaGF2aW5nIGEgImRyYXdpbmcgYXJlYSIgdGhhdCBoYW5kbGVz
IHRoZSBub24tY29tcG9zaXRlZAorICAgICAgICBjb250ZW50IGFuZCBhIHNlcGVyYXRlIGxheWVy
IHRyZWUsIHdlIHB1dCBldmVyeXRoaW5nIGluIGEgbGF5ZXIgdHJlZSwgd2l0aCB0aGUgbm9uLQor
ICAgICAgICBjb21wb3NpdGVkIGNvbnRlbnQgYmVpbmcgYSBsYXllciBpbiB0aGUgdHJlZS4KKwor
ICAgICAgICBUaGlzIGFsbG93cyBmaXhpbmcgc2V2ZXJhbCBpc3N1ZXMgd2l0aCB3ZWJzaXRlcyB0
aGF0IGhhdmUgbGFyZ2UgY29udGVudCBhcmVhcyB0aGF0IGFyZQorICAgICAgICBjb21wb3NpdGVk
IG9yIG92ZXJsYXAgd2l0aCBjb21wb3NpdGVkIGxheWVycy4KKworICAgICAgICBMYXllci10cmVl
IHN5bmNocm9uaXphdGlvbiBpcyBkb25lIGJ5IHBhc3NpbmcgV2ViS2l0MiBtZXNzYWdlcyBiZXR3
ZWVuIGEgTGF5ZXJUcmVlSG9zdAorICAgICAgICBvbiB0aGUgV2ViUHJvY2VzcyBhbmQgYSBMYXll
clRyZWVIb3N0UHJveHkgb24gdGhlIFVJIHByb2Nlc3MuIEV2ZXJ5IGxheWVyIGluIHRoZSB0cmVl
IGhhcworICAgICAgICBpdHMgb3duIHRpbGVkIGJhY2tpbmcgc3RvcmUsIGFuZCB1c2VzIHRoZSBM
YXllclRyZWVIb3N0IGNvbW11bmljYXRpb24gY2hhbm5lbCB0byBwYXNzCisgICAgICAgIGNvbnRl
bnQgdXAgdG8gdGhlIFVJIHByb2Nlc3MuIFRoZSBVSSBwcm9jZXNzIHdpbGwgbGF0ZXIgY3JlYXRl
cyBpdHMgb3duIEdyYXBoaWNzTGF5ZXIgdHJlZSwKKyAgICAgICAgYmFzZWQgb24gVGV4dHVyZU1h
cHBlciwgd2hpY2ggY2FuIGJlIHBhaW50ZWQgZGlyZWN0bHkgd2l0aCBPcGVuR0wuCisKKyAgICAg
ICAgU2V2ZXJhbCBvcHRpbWl6YXRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBub24tY29tcG9z
aXRlZCBsYXllciBhcyB3ZWxsLCBlLmcuIHNwZWNpZnlpbmcKKyAgICAgICAgYSB0cmFqZWN0b3J5
IGFuZCB1cGRhdGluZyB0aGUgdmlzaWJsZSByZWN0IHRvZ2V0aGVyIHdpdGggdGhlIGNvbnRlbnQg
c2NhbGUuCisKKyAgICAgICAgVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBkaXNhYmxlZCwgYSBzZXBh
cmF0ZSBwYXRjaCB3aWxsIGVuYWJsZSBpdCBhbmQgZ2x1ZSBpdCB0bworICAgICAgICBRVG91Y2hX
ZWJQYWdlLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJvOgorICAgICAgICAqIFBsYXRm
b3JtL0NvcmVJUEMvTWVzc2FnZUlELmg6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQyL21lc3Nh
Z2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9MYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICog
U2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcklu
Zm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9xdC9M
YXllclRyZWVDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0
OjpMYXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6
fkxheWVyVHJlZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojpl
bmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpkZWNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktp
dDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KToKKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVByb3h5Ojp2aWV3cG9ydFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eTo6aXNCYWNraW5nU3RvcmVSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhUHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVj
dG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnJlbW92ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2Vp
dmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6cGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxl
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6bGF5
ZXJCeUlEKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpyb290TGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeVN5bmNS
ZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd0RlYnVn
Qm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd1JlcGFp
bnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludENv
bnRlbnRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2Vz
LmluOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDogQWRkZWQuCisgICAgICAgICog
V2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6fldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVQYWludEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNl
dFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0
ZXNBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpsYXllclRyZWVUaWxlQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldExheWVyVHJlZVRpbGVDbGllbnQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RB
bmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3
aW5nQXJlYTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVy
TmV4dFNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UXQ6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZERlbGV0ZUxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRlc3Ryb3lQYWdl
T3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjphZG9wdElt
YWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZWxl
YXNlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6
Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RR
dDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hv
d0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hvd1Jl
cGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVU
aWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZW1vdmVUaWxlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRl
bnRSZWN0QW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKToKKwogMjAxMS0xMC0xMSAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBTbWFsbCBl
bWJlZGRlZCBQREZzIGFyZSBub3QgZnVsbHkgcmVwYWludGVkIHdoZW4gc2Nyb2xsaW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8gYi9Tb3VyY2UvV2ViS2l0
Mi9EZXJpdmVkU291cmNlcy5wcm8KaW5kZXggZmNlNTljNS4uYjkzZTc2NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rl
cml2ZWRTb3VyY2VzLnBybwpAQCAtOTIsNiArOTIsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwK
ICAgICBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gXAogICAgIERvd25sb2FkUHJv
eHkubWVzc2FnZXMuaW4gXAogICAgIERyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4gXAorICAg
IExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luQ29udHJvbGxlclBy
b3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Qcm9jZXNzLm1lc3NhZ2VzLmluIFwKICAgICBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBcCkBAIC0xMTYsNiArMTE3LDcgQEAg
TUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMu
aW4gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gXAogICAgIFdl
YlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gXAorICAgIFdlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gXAog
ICAgIFdlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVz
c2FnZUlELmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCmlu
ZGV4IDEzYjIxODMuLjQ1NTFkN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvTWVzc2FnZUlELmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9NZXNzYWdlSUQuaApAQCAtMzgsNiArMzgsNyBAQCBlbnVtIE1lc3NhZ2VDbGFzcyB7CiAgICAg
TWVzc2FnZUNsYXNzQXV0aGVudGljYXRpb25NYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc0RyYXdp
bmdBcmVhLAogICAgIE1lc3NhZ2VDbGFzc0luamVjdGVkQnVuZGxlLAorICAgIE1lc3NhZ2VDbGFz
c0xheWVyVHJlZUhvc3QsCiAgICAgTWVzc2FnZUNsYXNzV2ViQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXIsCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29va2llTWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NX
ZWJEYXRhYmFzZU1hbmFnZXIsCkBAIC01NCw2ICs1NSw3IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsK
ICAgICAvLyBNZXNzYWdlcyBzZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgVUkgcHJvY2Vz
cy4KICAgICBNZXNzYWdlQ2xhc3NEb3dubG9hZFByb3h5LAogICAgIE1lc3NhZ2VDbGFzc0RyYXdp
bmdBcmVhUHJveHksCisgICAgTWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdFByb3h5LAogICAgIE1l
c3NhZ2VDbGFzc1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHksCiAgICAgTWVzc2FnZUNs
YXNzV2ViQ29udGV4dCwKICAgICBNZXNzYWdlQ2xhc3NXZWJDb250ZXh0TGVnYWN5LApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5IGIvU291cmNl
L1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CmluZGV4IGI4NWRhOTguLmQyZTRl
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5w
eQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKQEAgLTM4
MSw2ICszODEsOCBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dlYktp
dDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwKICAgICAgICAgJ1dlYktp
dDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rlcic6IFtdLAogICAgICAgICAnV2ViS2l0OjpX
ZWJHZXN0dXJlRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAorICAgICAgICAnV2ViS2l0OjpXZWJM
YXllcklEJzogWyciV2ViTGF5ZXJUcmVlSW5mby5oIiddLAorICAgICAgICAnV2ViS2l0OjpXZWJM
YXllckluZm8nOiBbJyJXZWJMYXllclRyZWVJbmZvLmgiJ10sCiAgICAgICAgICdXZWJLaXQ6Oldl
YktleWJvYXJkRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAogICAgICAgICAnV2ViS2l0OjpXZWJN
b3VzZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViVG91Y2hF
dmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNv
bnRleHQuaAppbmRleCA4NjY3Yzk4Li4yZGI1ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9M
YXllclRyZWVDb250ZXh0LmgKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogICAgIHVpbnQzMl90
IGNvbnRleHRJRDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBIV05EIHdpbmRvdzsKKyNlbGlm
IFBMQVRGT1JNKFFUKQorICAgIHVpbnQzMl90IHdlYkxheWVySUQ7CiAjZW5kaWYKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAppbmRleCBhMDEyODU1Li5l
ZGI2MmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5m
by5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCkBA
IC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAKKyNpbmNs
dWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKIApAQCAtMzMsMzUgKzM0LDE3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogdm9pZCBXZWJMYXllckluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgLy8gV2UgaGF2ZSB0byBkaXZpZGUgaXQgdG8gc2V2
ZXJhbCBsaW5lcywgYmVjYXVzZSBDb3JlSVBDOjpJbi9PdXQgdGFrZXMgYSBtYXhpbXVtIG9mIDEw
IGFyZ3VtZW50cy4KLSAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4oaWQsIG5hbWUsIHBh
cmVudCwgY2hpbGRyZW4sIGZsYWdzLCByZXBsaWNhLCBtYXNrKSk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlKENvcmVJUEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGlj
YSwgbWFzaywgaW1hZ2VCYWNraW5nU3RvcmVJRCkpOwogICAgIGVuY29kZXItPmVuY29kZShDb3Jl
SVBDOjpJbihwb3MsIHNpemUsIHRyYW5zZm9ybSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQsIGNoaWxk
cmVuVHJhbnNmb3JtLCBjb250ZW50c1JlY3QpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoaW1hZ2VC
YWNraW5nU3RvcmUgPyBpbWFnZUJhY2tpbmdTdG9yZS0+c2l6ZSgpIDogSW50U2l6ZSgpKTsKLQot
ICAgIGlmICghaW1hZ2VCYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlIGltYWdlSGFuZGxlOwotICAgIGlmIChpbWFnZUJhY2tpbmdTdG9y
ZS0+Y3JlYXRlSGFuZGxlKGltYWdlSGFuZGxlKSkKLSAgICAgICAgaW1hZ2VIYW5kbGUuZW5jb2Rl
KGVuY29kZXIpOwogfQogCiBib29sIFdlYkxheWVySW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgV2ViTGF5ZXJJbmZvJiBpbmZvKQogewogICAgIC8vIFdlIGhh
dmUgdG8gZGl2aWRlIGl0IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0
IHRha2VzIGEgbWF4aW11bSBvZiAxMCBhcmd1bWVudHMuCi0gICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwgaW5mby5wYXJlbnQsIGluZm8uY2hp
bGRyZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5mby5tYXNrKSkpCisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwgaW5mby5wYXJl
bnQsIGluZm8uY2hpbGRyZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5mby5tYXNrLCBp
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLnBvcywgaW5mby5zaXplLCBpbmZv
LnRyYW5zZm9ybSwgaW5mby5vcGFjaXR5LCBpbmZvLmFuY2hvclBvaW50LCBpbmZvLmNoaWxkcmVu
VHJhbnNmb3JtLCBpbmZvLmNvbnRlbnRzUmVjdCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBJbnRTaXplIGltYWdlQmFja2luZ1N0b3JlU2l6ZTsKLSAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShpbWFnZUJhY2tpbmdTdG9yZVNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGltYWdlQmFja2luZ1N0b3JlU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaW1hZ2VIYW5kbGU7Ci0gICAgaWYgKFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpkZWNvZGUoZGVjb2RlciwgaW1hZ2VIYW5kbGUpKQotICAg
ICAgICBpbmZvLmltYWdlQmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaW1h
Z2VIYW5kbGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkxheWVyVHJlZUluZm8uaAppbmRleCBhMGU2OGQzLi4yNTAwM2U3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKQEAgLTM0LDYgKzM0LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdHlwZWRlZiB1aW50MzJfdCBXZWJM
YXllcklEOworZW51bSB7IEludmFsaWRXZWJMYXllcklEID0gMCB9OwogCiBzdHJ1Y3QgV2ViTGF5
ZXJVcGRhdGVJbmZvIHsKICAgICBXZWJMYXllclVwZGF0ZUluZm8oKSB7IH0KQEAgLTU0LDYgKzU1
LDcgQEAgc3RydWN0IFdlYkxheWVySW5mbyB7CiAgICAgV2ViTGF5ZXJJRCBwYXJlbnQ7CiAgICAg
V2ViTGF5ZXJJRCByZXBsaWNhOwogICAgIFdlYkxheWVySUQgbWFzazsKKyAgICBpbnQ2NF90IGlt
YWdlQmFja2luZ1N0b3JlSUQ7CiAKICAgICBGbG9hdFBvaW50IHBvczsKICAgICBGbG9hdFBvaW50
M0QgYW5jaG9yUG9pbnQ7CkBAIC03MSw2ICs3Myw4IEBAIHN0cnVjdCBXZWJMYXllckluZm8gewog
ICAgICAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsKICAgICAgICAgICAgIGJvb2wgcHJl
c2VydmVzM0QgOiAxOwogICAgICAgICAgICAgYm9vbCBjb250ZW50TmVlZHNEaXNwbGF5IDogMTsK
KyAgICAgICAgICAgIGJvb2wgaW1hZ2VJc1VwZGF0ZWQ6IDE7CisgICAgICAgICAgICBib29sIGlz
Um9vdExheWVyOiAxOwogICAgICAgICB9OwogICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAg
ICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9MYXllclRyZWVDb250
ZXh0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5j
cHAKaW5kZXggZjFiZjFiNC4uZDM3ZDc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKQEAgLTI2LDQxICsyNiwzOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKIAotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAi
QXJndW1lbnRFbmNvZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBMYXllclRyZWVDb250
ZXh0OjpMYXllclRyZWVDb250ZXh0KCkKKyAgICA6IHdlYkxheWVySUQoMCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCiBMYXllclRyZWVDb250ZXh0Ojp+TGF5ZXJUcmVlQ29udGV4dCgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb250ZXh0Ojpl
bmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3QKK3ZvaWQgTGF5ZXJUcmVlQ29u
dGV4dDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGVuY29kZXItPmVuY29kZSh3ZWJMYXllcklEKTsK
IH0KIAotYm9vbCBMYXllclRyZWVDb250ZXh0OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiwgTGF5ZXJUcmVlQ29udGV4dCYpCitib29sIExheWVyVHJlZUNvbnRleHQ6OmRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIExheWVyVHJlZUNvbnRleHQmIGNvbnRl
eHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZGVjb2Rlci0+ZGVjb2RlKGNvbnRleHQud2ViTGF5ZXJJRCk7CiB9CiAKIGJvb2wgTGF5ZXJU
cmVlQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdlYkxheWVySUQ7CiB9CiAKLWJvb2wgb3BlcmF0
b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpCiti
b29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYSwgY29uc3QgTGF5ZXJUcmVl
Q29udGV4dCYgYikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBhLndlYkxheWVySUQgPT0gYi53ZWJMYXllcklEOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmNwcAppbmRleCBmODUyZTJmLi4zOWQ2MGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0yOCw2ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01
Myw0ICs1NywxNiBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHk6OnNldFNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQogICAgIHNpemVEaWRDaGFuZ2Uo
KTsKIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQordm9pZCBEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAg
bV93ZWJQYWdlUHJveHktPnNldFZpZXdOZWVkc0Rpc3BsYXkodmlld3BvcnRWaXNpYmxlUmVjdCgp
KTsKK30KKworV2ViQ29yZTo6SW50UmVjdCBEcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3Qo
KSBjb25zdAoreworICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFn
ZVByb3h5LT52aWV3U2l6ZSgpKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDA4OGZj
OGIuLmExOTQ5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkuaApAQCAtMjcsOSArMjcsMTEgQEAKICNpZm5kZWYgRHJhd2luZ0FyZWFQcm94eV9oCiAjZGVm
aW5lIERyYXdpbmdBcmVhUHJveHlfaAogCisjaW5jbHVkZSA8Q29yZUlQQy9NZXNzYWdlSUQuaD4K
ICNpbmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKLSNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNp
bmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogI2lmIFBM
QVRGT1JNKFFUKQpAQCAtNDUsMTMgKzQ3LDE3IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIH0KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEludFJlY3Q7CisgICAgY2xhc3MgRmxvYXRQ
b2ludDsKKyAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIH0KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIExheWVyVHJlZUNvbnRleHQ7CitjbGFzcyBMYXllclRyZWVIb3N0UHJv
eHk7CiBjbGFzcyBVcGRhdGVJbmZvOworY2xhc3MgV2ViTGF5ZXJUcmVlSW5mbzsKK2NsYXNzIFdl
YkxheWVyVXBkYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAogY2xhc3MgRHJhd2luZ0Fy
ZWFQcm94eSB7CkBAIC03Nyw2ICs4MywyNCBAQCBwdWJsaWM6CiAgICAgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
T2Zmc2V0KTsKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4g
Y29udGVudHNSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udGVudHNS
ZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQmFja2luZ1N0b3JlUmVhZHkoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSkg
eyB9CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZp
c2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3Qg
V2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGVGb3JM
YXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciogYXJndW1lbnRzKSB7IH0KKworICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJu
IG1fd2ViUGFnZVByb3h5OyB9CisjZW5kaWYKKyNlbmRpZgogcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlLCBXZWJQYWdlUHJveHkqKTsKIApA
QCAtODYsNiArMTEwLDEwIEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6
ZTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRyPExh
eWVyVHJlZUhvc3RQcm94eT4gbV9sYXllclRyZWVIb3N0UHJveHk7CisjZW5kaWYKKwogcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZSgpID0gMDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5kZXggNjE5ZDUw
OC4uNGQ3YmQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eUltcGwuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXllclRy
ZWVIb3N0UHJveHkuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC0zMjgsOCArMzMyLDM4IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29u
dGV4CiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fbGF5ZXJUcmVlQ29udGV4
dCA9IGxheWVyVHJlZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIGlmICghbV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7CisjZW5k
aWYKK30KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQordm9pZCBEcmF3aW5nQXJl
YVByb3h5SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVl
SG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+ZGlkUmVjZWl2ZUxheWVy
VHJlZUhvc3RQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOwor
fQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5k
U2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQg
c2NhbGUpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVy
VHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKHZpc2libGVDb250
ZW50c1JlY3QsIHNjYWxlKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CiB9CiAKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUlt
cGw6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQor
ICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQobWF0
cml4LCBvcGFjaXR5KTsKK30KKyNlbmRpZgorCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQogewogICAgIEFTU0VSVChpc0luQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4IGQwOTFmOTcuLmFhYzcxZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCkBAIC0zOSw2ICsz
OSw4IEBAIGNsYXNzIFJlZ2lvbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIExheWVy
VHJlZUhvc3RQcm94eTsKKwogY2xhc3MgRHJhd2luZ0FyZWFQcm94eUltcGwgOiBwdWJsaWMgRHJh
d2luZ0FyZWFQcm94eSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RHJhd2luZ0Fy
ZWFQcm94eUltcGw+IGNyZWF0ZShXZWJQYWdlUHJveHkqKTsKQEAgLTc1LDYgKzc3LDEzIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKIAogICAg
IGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gIW1f
bGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCk7IH0KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9y
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOworI2VuZGlmCiAjZWxzZQogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmNlZjFmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTAsMCArMSwxMzUgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKyNkZWZpbmUg
TGF5ZXJUcmVlSG9zdFByb3h5X2gKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1
ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJNZXNzYWdlUXVldWUuaCIKKyNpbmNs
dWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViTGF5ZXJJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOworCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI7CisKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSop
OworICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOworICAgIHZvaWQgc3luY0NvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdM
YXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciop
OworICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgSW50UmVjdCYsIGZsb2F0KTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOworI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQorICAgIHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICB2b2lkIHN3YXBD
b250ZW50QnVmZmVycygpOworICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKKyAgICB2b2lkIGNy
ZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpV
cGRhdGVJbmZvJik7CisgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZvaWQgcmVtb3ZlVGls
ZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2b2lkIGNyZWF0ZURpcmVj
dGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmKTsKKyAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2
NF90KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvckxheWVyKFdlYkxheWVy
SUQsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CisjZW5kaWYK
KworcHJvdGVjdGVkOgorICAgIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRlTGF5ZXIo
V2ViTGF5ZXJJRCk7CisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBp
ZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQo
aWQpOyB9CisgICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5
ZXIuZ2V0KCk7IH0KKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQorCisgICAgUnVuTG9vcDo6VGltZXI8TGF5ZXJU
cmVlSG9zdFByb3h5PiBtX2FuaW1hdGlvblRpbWVyOworICAgIERyYXdpbmdBcmVhUHJveHkqIG1f
ZHJhd2luZ0FyZWFQcm94eTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgSW50UmVjdCBtX3Zpc2libGVDb250
ZW50c1JlY3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworCisgICAgTWVzc2FnZVF1ZXVl
PExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyPiBtX21lc3NhZ2VzVG9SZW5kZXJlcjsKKyAgICB2
b2lkIHB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI+KTsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBl
cj4gbV90ZXh0dXJlTWFwcGVyOworI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8SW50UG9pbnQsIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IFRpbGVkSW1hZ2U7
CisgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwIG1fbm9kZVZpc3VhbENvbnRlbnRz
UmVjdE1hcDsKKyAgICBIYXNoTWFwPGludCwgaW50PiBtX3RpbGVUb05vZGVUaWxlOworICAgIGlu
dCByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3Q7CisgICAgSGFzaE1h
cDxpbnQ2NF90LCBUaWxlZEltYWdlPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKworICAg
IHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7CisgICAgdm9pZCBzeW5jaHJvbml6ZVZpZXdw
b3J0KCk7CisgICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIHNldFJv
b3RMYXllcklEKFdlYkxheWVySUQpOworICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycyhjb25z
dCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBm
bG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7CisgICAg
dm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBRSW1hZ2UmKTsKKyAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIGNv
bnN0IFFJbWFnZSYpOworICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOworICAgIHZvaWQg
YXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdl
SUQpOworICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGVuc3VyZVJvb3RM
YXllcigpOworICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7CisKKyNlbmRpZgorCisg
ICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZlY3RvcjxXZWJMYXll
cklEPiBtX2xheWVyc1RvRGVsZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgV2Vi
TGF5ZXJJRCBtX3Jvb3RMYXllcklEOworICAgIGludCBtX2lkOworfTsKKworfQorCisjZW5kaWYg
Ly8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmJjN2FmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzIg
QEAKKyMKKyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisj
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorbWVzc2FnZXMgLT4g
TGF5ZXJUcmVlSG9zdFByb3h5IHsKKyAgICBTeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKFdlYktp
dDo6V2ViTGF5ZXJJbmZvIGxheWVySW5mbykKKyAgICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1
aW50MzJfdCBpZCkKKyAgICBEZWxldGVDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQorICAg
IENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJLaXQ6
OlVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3Qg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAg
UmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCisgICAgQ3Jl
YXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUgaGFuZGxlKQorICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90IGtleSkKKyAgICBEaWRSZW5kZXJGcmFtZSgpCit9CisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYWE4NmVmMi4uZTZkZjVjMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJEb3dubG9hZFByb3h5LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQ
cm94eS5oIgogI2luY2x1ZGUgIkZpbmRJbmRpY2F0b3IuaCIKKyNpbmNsdWRlICJMYXllclRyZWVI
b3N0UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZXNz
YWdlSUQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCkBAIC0xMzk3LDYg
KzEzOTgsMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBpZiAobWVzc2FnZUlELmlz
PENvcmVJUEM6Ok1lc3NhZ2VDbGFzc0xheWVyVHJlZUhvc3RQcm94eT4oKSkgeworICAgICAgICBt
X2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShjb25uZWN0
aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYKKwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBD
OjpNZXNzYWdlQ2xhc3NXZWJJbnNwZWN0b3JQcm94eT4oKSkgewogICAgICAgICBpZiAoV2ViSW5z
cGVjdG9yUHJveHkqIGluc3BlY3RvciA9IHRoaXMtPmluc3BlY3RvcigpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwMzZlNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKQEAg
LTAsMCArMSw1OTQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJMYXllclRyZWVI
b3N0UHJveHkuaCIKKworI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIk1haW5UaHJlYWQuaCIKKyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJTaGFy
ZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJV
cGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVk
ZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgInRleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVk
ZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgiCisjaW5jbHVkZSA8UURhdGVUaW1lPgorI2lu
Y2x1ZGUgPGNhaXJvL09wZW5HTFNoaW1zLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlciB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsK
KyAgICAgICAgRGVsZXRlTGF5ZXIsCisgICAgICAgIENyZWF0ZVRpbGUsCisgICAgICAgIFJlbW92
ZVRpbGUsCisgICAgICAgIFVwZGF0ZVRpbGUsCisgICAgICAgIENyZWF0ZUltYWdlLAorICAgICAg
ICBEZXN0cm95SW1hZ2UsCisgICAgICAgIFN5bmNMYXllclBhcmFtZXRlcnMsCisgICAgICAgIEZs
dXNoTGF5ZXJDaGFuZ2VzLAorICAgICAgICBTZXRSb290TGF5ZXIKKyAgICB9OworICAgIHZpcnR1
YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworfTsKKwordGVtcGxhdGU8Y2xhc3MgTWVzc2FnZURh
dGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpUeXBlIG1lc3NhZ2VUeXBlPgorY2xhc3Mg
TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YSA6IHB1YmxpYyBMYXllclRyZWVNZXNz
YWdlVG9SZW5kZXJlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtZXNzYWdlVHlwZTsgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUcmVl
TWVzc2FnZVRvUmVuZGVyZXI+IGNyZWF0ZShjb25zdCBNZXNzYWdlRGF0YSYgZGF0YSA9IE1lc3Nh
Z2VEYXRhKCkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVHJlZU1l
c3NhZ2VUb1JlbmRlcmVyV2l0aERhdGEoZGF0YSkpOworICAgIH0KKworICAgIGNvbnN0IE1lc3Nh
Z2VEYXRhJiBkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGE7CisgICAg
fQorCitwcml2YXRlOgorICAgIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGEoY29u
c3QgTWVzc2FnZURhdGEmIGRhdGEpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAg
IH0KKworICAgIE1lc3NhZ2VEYXRhIG1fZGF0YTsKK307CisKKworbmFtZXNwYWNlIHsKK3N0cnVj
dCBDcmVhdGVUaWxlTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKKyAgICBp
bnQgcmVtb3RlVGlsZUlEOworICAgIGZsb2F0IHNjYWxlOworfTsKKworc3RydWN0IFVwZGF0ZVRp
bGVNZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworICAgIGludCByZW1vdGVU
aWxlSUQ7CisgICAgSW50UmVjdCBzb3VyY2VSZWN0OworICAgIEludFJlY3QgdGFyZ2V0UmVjdDsK
KyAgICBRSW1hZ2UgaW1hZ2U7Cit9OworCitzdHJ1Y3QgUmVtb3ZlVGlsZU1lc3NhZ2VEYXRhIHsK
KyAgICBXZWJMYXllcklEIGxheWVySUQ7CisgICAgaW50IHJlbW90ZVRpbGVJRDsKK307CisKK3N0
cnVjdCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhIHsKKyAgICBpbnQ2NF90IGltYWdlSUQ7CisgICAg
UUltYWdlIGltYWdlOworfTsKKworc3RydWN0IERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhIHsKKyAg
ICBpbnQ2NF90IGltYWdlSUQ7Cit9OworCitzdHJ1Y3QgU3luY0xheWVyUGFyYW1ldGVyc01lc3Nh
Z2VEYXRhIHsKKyAgICBXZWJMYXllckluZm8gbGF5ZXJJbmZvOworfTsKKworc3RydWN0IEVtcHR5
TWVzc2FnZURhdGEgeyB9Oworc3RydWN0IERlbGV0ZUxheWVyTWVzc2FnZURhdGEgeworICAgIFdl
YkxheWVySUQgbGF5ZXJJRDsKK307CitzdHJ1Y3QgU2V0Um9vdExheWVyTWVzc2FnZURhdGEgewor
ICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKK307CisKK2NsYXNzIENyZWF0ZVRpbGVNZXNzYWdlCisg
ICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8Q3JlYXRl
VGlsZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Q3JlYXRlVGlsZT4g
eyB9OworY2xhc3MgVXBkYXRlVGlsZU1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVl
TWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxVcGRhdGVUaWxlTWVzc2FnZURhdGEsIExheWVyVHJl
ZU1lc3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVUaWxlPiB7IH07CitjbGFzcyBSZW1vdmVUaWxlTWVz
c2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRh
PFJlbW92ZVRpbGVNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92
ZVRpbGU+IHsgfTsKK2NsYXNzIENyZWF0ZUltYWdlTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBM
YXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPENyZWF0ZUltYWdlTWVzc2FnZURhdGEs
IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpDcmVhdGVJbWFnZT4geyB9OworY2xhc3MgRGVz
dHJveUltYWdlTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5k
ZXJlcldpdGhEYXRhPERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9S
ZW5kZXJlcjo6RGVzdHJveUltYWdlPiB7IH07CitjbGFzcyBGbHVzaExheWVyQ2hhbmdlc01lc3Nh
Z2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxF
bXB0eU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Rmx1c2hMYXllckNo
YW5nZXM+IHsgfTsKK2NsYXNzIFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlCisgICAgICAgIDog
cHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8U3luY0xheWVyUGFyYW1l
dGVyc01lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6U3luY0xheWVyUGFy
YW1ldGVycz4geyB9OworY2xhc3MgRGVsZXRlTGF5ZXJNZXNzYWdlCisgICAgICAgIDogcHVibGlj
IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8RGVsZXRlTGF5ZXJNZXNzYWdlRGF0
YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkRlbGV0ZUxheWVyPiB7IH07CitjbGFzcyBT
ZXRSb290TGF5ZXJNZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyV2l0aERhdGE8U2V0Um9vdExheWVyTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VU
b1JlbmRlcmVyOjpTZXRSb290TGF5ZXI+IHsgfTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0xh
eWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkK
K3sKKyAgICBHcmFwaGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcih0aGlzKTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1h
cHBlck5vZGUobmV3TGF5ZXIpOworICAgIG5vZGUtPnNldElEKGxheWVySUQpOworICAgIG5vZGUt
PnNldFRpbGVPd25lcnNoaXAoVGV4dHVyZU1hcHBlck5vZGU6OkV4dGVybmFsbHlNYW5hZ2VkVGls
ZXMpOworICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7Cit9CisKK0xheWVyVHJlZUhvc3RQ
cm94eTo6TGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJv
eHkpCisgICAgOiBtX2FuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkxheWVy
VHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQpCisgICAgLCBtX2RyYXdpbmdBcmVhUHJveHko
ZHJhd2luZ0FyZWFQcm94eSkKKyAgICAsIG1fcm9vdExheWVySUQoMCkKK3sKK30KKworTGF5ZXJU
cmVlSG9zdFByb3h5Ojp+TGF5ZXJUcmVlSG9zdFByb3h5KCkKK3sKK30KKworLy8gVGhpcyBmdW5j
dGlvbiBuZWVkcyB0byBiZSByZWVudHJhbnQuCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFp
bnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90
ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKKworICAgIHN5bmNSZW1v
dGVDb250ZW50KCk7CisgICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RM
YXllcigpOworICAgIGlmICghY3VycmVudFJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGN1cnJlbnRS
b290TGF5ZXIpOworCisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBHTGlu
dCB2aWV3cG9ydFs0XTsKKyAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCk7
CisgICAgSW50UmVjdCB2aWV3cG9ydFJlY3Qodmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCB2aWV3
cG9ydFsyXSwgdmlld3BvcnRbM10pOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0Vmlld3BvcnRT
aXplKEludFNpemUodmlld3BvcnRbMl0sIHZpZXdwb3J0WzNdKSk7CisgICAgbm9kZS0+c2V0VGV4
dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+
YmVnaW5QYWludGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CisK
KyAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3BhY2l0eSgpICE9IG9wYWNpdHkgfHwgY3VycmVu
dFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4KSB7CisgICAgICAgIGN1cnJlbnRSb290
TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNl
dFRyYW5zZm9ybShtYXRyaXgpOworICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICB9CisKKyAgICBUZXh0dXJlTWFwcGVy
Tm9kZTo6Tm9kZVJlY3RNYXAgbm9kZVZpc3VhbENvbnRlbnRzUmVjdE1hcDsKKyAgICBpZiAobm9k
ZS0+Y29sbGVjdFZpc2libGVDb250ZW50c1JlY3RzKG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAs
IHZpZXdwb3J0UmVjdCkpIHsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFw
OjppdGVyYXRvciBlbmRJdGVyYXRvciA9IG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAuZW5kKCk7
CisgICAgICAgIGZvciAoVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwOjppdGVyYXRvciBp
dCA9IG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAuYmVnaW4oKTsgaXQgIT0gZW5kSXRlcmF0b3I7
ICsraXQpIHsKKyAgICAgICAgICAgIFdlYkxheWVySUQgbGF5ZXJJRCA9IGl0LT5maXJzdC0+aWQo
KTsKKyAgICAgICAgICAgIC8vIGF2b2lkIHVwZGF0aW5nIG5vbi1zeW5jZWQgcm9vdCBsYXllcgor
ICAgICAgICAgICAgaWYgKCFsYXllcklEKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IEludFJlY3QoaXQtPnNlY29uZCk7CisgICAg
ICAgICAgICBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIobGF5ZXJJRCwgdmlzaWJsZVJl
Y3QpOworICAgICAgICB9CisgICAgfQorICAgIG5vZGUtPnBhaW50KCk7CisKKyAgICBtX3RleHR1
cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CisKKyAgICBpZiAobm9kZS0+ZGVzY2VuZGFudHNPclNl
bGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAgdXBkYXRlVmlld3BvcnQoKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKK3sKKyAgICBtX2Ry
YXdpbmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklE
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgp
LT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250
ZW50UmVjdEZvckxheWVyKGxheWVySUQsIHJlY3QpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2Uo
KS0+cGFnZUlEKCkpOworfQorCitpbnQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdGVUaWxlSURU
b05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPGludCwgaW50Pjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVUb05vZGVUaWxlLmZpbmQodGlsZUlEKTsKKyAgICBp
ZiAoaXQgPT0gbV90aWxlVG9Ob2RlVGlsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGl0LT5zZWNvbmQ7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jTGF5
ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvKQoreworICAgIFdlYkxh
eWVySUQgaWQgPSBsYXllckluZm8uaWQ7CisgICAgZW5zdXJlTGF5ZXIoaWQpOworICAgIExheWVy
TWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOworICAgIEdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gaXQtPnNlY29uZDsKKworICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1l
KTsKKworICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5SUQobGF5ZXJJbmZv
LnJlcGxpY2EpKTsKKyAgICBsYXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChsYXllckluZm8u
bWFzaykpOworCisgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOworICAgIGxh
eWVyLT5zZXRTaXplKGxheWVySW5mby5zaXplKTsKKyAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxh
eWVySW5mby50cmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8u
YW5jaG9yUG9pbnQpOworICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8u
Y2hpbGRyZW5UcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5
ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxh
eWVySW5mby5jb250ZW50c09wYXF1ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXll
ckluZm8uY29udGVudHNSZWN0KTsKKyAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5m
by5kcmF3c0NvbnRlbnQpOworCisgICAgaWYgKGxheWVySW5mby5pbWFnZUlzVXBkYXRlZCkKKyAg
ICAgICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1hZ2VCYWNraW5nU3Rv
cmVJRCk7CisKKyAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCisgICAgbGF5
ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXll
ckluZm8ubWFza3NUb0JvdW5kcyk7CisgICAgbGF5ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9w
YWNpdHkpOworICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0Qp
OworICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW47CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxheWVySW5mby5jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBX
ZWJMYXllcklEIGNoaWxkSUQgPSBsYXllckluZm8uY2hpbGRyZW5baV07CisgICAgICAgIEdyYXBo
aWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNoaWxkSUQpOworICAgICAgICBpZiAoIWNoaWxk
KSB7CisgICAgICAgICAgICBjaGlsZCA9IGNyZWF0ZUxheWVyKGNoaWxkSUQpLmxlYWtQdHIoKTsK
KyAgICAgICAgICAgIG1fbGF5ZXJzLmFkZChjaGlsZElELCBjaGlsZCk7CisgICAgICAgIH0KKyAg
ICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICB9CisgICAgbGF5ZXItPnNldENoaWxk
cmVuKGNoaWxkcmVuKTsKKworICAgIGlmIChsYXllckluZm8uaXNSb290TGF5ZXIgJiYgbV9yb290
TGF5ZXJJRCAhPSBpZCkKKyAgICAgICAgc2V0Um9vdExheWVySUQoaWQpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIGlmICghbGF5
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Cisg
ICAgbV9sYXllcnMucmVtb3ZlKGxheWVySUQpOworICAgIGRlbGV0ZSBsYXllcjsKK30KKworCit2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAg
ICAvLyBXZSBoYXZlIHRvIGxlYWsgdGhlIG5ldyBsYXllcidzIHBvaW50ZXIgYW5kIG1hbmFnZSBp
dCBvdXJzZWx2ZXMsCisgICAgLy8gYmVjYXVzZSBPd25QdHIgaXMgbm90IGNvcHlhYmxlLgorICAg
IGlmIChtX2xheWVycy5maW5kKGlkKSA9PSBtX2xheWVycy5lbmQoKSkKKyAgICAgICAgbV9sYXll
cnMuYWRkKGlkLCBjcmVhdGVMYXllcihpZCkubGVha1B0cigpKTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnNldFJvb3RMYXllcklEKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBp
ZiAobGF5ZXJJRCA9PSBtX3Jvb3RMYXllcklEKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jv
b3RMYXllcklEID0gbGF5ZXJJRDsKKworICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJl
bigpOworCisgICAgaWYgKCFsYXllcklEKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGlj
c0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGlu
dCB0aWxlSUQsIGZsb2F0IHNjYWxlKQoreworICAgIGVuc3VyZUxheWVyKGxheWVySUQpOworICAg
IFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQo
bGF5ZXJJRCkpOworCisgICAgaW50IG5vZGVUaWxlSUQgPSBub2RlLT5jcmVhdGVDb250ZW50c1Rp
bGUoc2NhbGUpOworICAgIG1fdGlsZVRvTm9kZVRpbGUuYWRkKHRpbGVJRCwgbm9kZVRpbGVJRCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5
ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4
dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGludCBub2RlVGlsZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2RlVGls
ZUlEKHRpbGVJRCk7CisgICAgaWYgKCFub2RlVGlsZUlEKQorICAgICAgICByZXR1cm47CisKKyAg
ICBub2RlLT5yZW1vdmVDb250ZW50c1RpbGUobm9kZVRpbGVJRCk7CisgICAgbV90aWxlVG9Ob2Rl
VGlsZS5yZW1vdmUodGlsZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0
ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBRSW1hZ2UmIGltYWdlKQor
eworICAgIGVuc3VyZUxheWVyKGxheWVySUQpOworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2Rl
ID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IG5vZGVUaWxlSUQgPSByZW1vdGVUaWxlSURU
b05vZGVUaWxlSUQodGlsZUlEKTsKKyAgICBpZiAoIW5vZGVUaWxlSUQpCisgICAgICAgIHJldHVy
bjsKKworICAgIFFJbWFnZSBpbWFnZVJlZihpbWFnZSk7CisgICAgbm9kZS0+c2V0VGV4dHVyZU1h
cHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG5vZGUtPnNldENvbnRlbnRzVGlsZUJh
Y2tCdWZmZXIobm9kZVRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwgaW1hZ2VSZWYuYml0
cygpLCBCaXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgY29uc3QgUUltYWdlJiBpbWFnZSkK
K3sKKyAgICBUaWxlZEltYWdlIHRpbGVkSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0IGludCBUaWxl
RGltZW5zaW9uID0gMTAyNDsKKyAgICBib29sIGltYWdlSGFzQWxwaGEgPSBpbWFnZS5oYXNBbHBo
YUNoYW5uZWwoKTsKKyAgICBJbnRSZWN0IGltYWdlUmVjdCgwLCAwLCBpbWFnZS53aWR0aCgpLCBp
bWFnZS5oZWlnaHQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZS5oZWlnaHQoKTsg
eSArPSBUaWxlRGltZW5zaW9uKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2Uu
d2lkdGgoKTsgeCArPSBUaWxlRGltZW5zaW9uKSB7CisgICAgICAgICAgICBRSW1hZ2Ugc3ViSW1h
Z2U7CisgICAgICAgICAgICBJbnRSZWN0IHJlY3QoeCwgeSwgVGlsZURpbWVuc2lvbiwgVGlsZURp
bWVuc2lvbik7CisgICAgICAgICAgICByZWN0LmludGVyc2VjdChpbWFnZVJlY3QpOworICAgICAg
ICAgICAgaWYgKFFTaXplKHJlY3Quc2l6ZSgpKSA9PSBpbWFnZS5zaXplKCkpCisgICAgICAgICAg
ICAgICAgc3ViSW1hZ2UgPSBpbWFnZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBzdWJJbWFnZSA9IGltYWdlLmNvcHkocmVjdCk7CisgICAgICAgICAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOworICAg
ICAgICAgICAgdGV4dHVyZS0+cmVzZXQocmVjdC5zaXplKCksICFpbWFnZUhhc0FscGhhKTsKKyAg
ICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlSGFzQWxwaGEgPyBCaXRtYXBU
ZXh0dXJlOjpCR1JBRm9ybWF0IDogQml0bWFwVGV4dHVyZTo6QkdSRm9ybWF0LCBJbnRSZWN0KElu
dFBvaW50Ojp6ZXJvKCksIHJlY3Quc2l6ZSgpKSwgc3ViSW1hZ2UuYml0cygpKTsKKyAgICAgICAg
ICAgIHRpbGVkSW1hZ2UuYWRkKHJlY3QubG9jYXRpb24oKSwgdGV4dHVyZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5yZW1vdmUoaW1hZ2VJRCk7
CisgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuYWRkKGltYWdlSUQsIHRpbGVkSW1hZ2Up
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveUltYWdlKGludDY0X3QgaW1h
Z2VJRCkKK3sKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5yZW1vdmUoaW1hZ2VJRCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhp
Y3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJRCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTm9k
ZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXIpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbWFnZUlEKSB7CisgICAgICAgIG5vZGUtPmNsZWFy
QWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgRmxvYXRTaXplIHNpemUobGF5ZXItPnNpemUoKSk7CisgICAgRmxvYXRSZWN0IGNv
bnRlbnRzUmVjdChsYXllci0+Y29udGVudHNSZWN0KCkpOworICAgIGZsb2F0IGhvcml6b250YWxG
YWN0b3IgPSBjb250ZW50c1JlY3Qud2lkdGgoKSAvIHNpemUud2lkdGgoKTsKKyAgICBmbG9hdCB2
ZXJ0aWNhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC5oZWlnaHQoKSAvIHNpemUuaGVpZ2h0KCk7Cisg
ICAgSGFzaE1hcDxpbnQ2NF90LCBUaWxlZEltYWdlPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOworICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGlsZWRJbWFn
ZTo6aXRlcmF0b3IgZW5kVGlsZUl0ZXJhdG9yID0gaXQtPnNlY29uZC5lbmQoKTsKKyAgICBmb3Ig
KFRpbGVkSW1hZ2U6Oml0ZXJhdG9yIHRpbGVJdCA9IGl0LT5zZWNvbmQuYmVnaW4oKTsgdGlsZUl0
ICE9IGVuZFRpbGVJdGVyYXRvcjsgKyt0aWxlSXQpIHsKKyAgICAgICAgRmxvYXRSZWN0IHNvdXJj
ZVJlY3QoRmxvYXRQb2ludCh0aWxlSXQtPmZpcnN0KSwgRmxvYXRTaXplKHRpbGVJdC0+c2Vjb25k
LT5zaXplKCkpKTsKKyAgICAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3Qoc291cmNlUmVjdC54KCkg
KiBob3Jpem9udGFsRmFjdG9yICsgY29udGVudHNSZWN0LngoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc291cmNlUmVjdC55KCkgKiB2ZXJ0aWNhbEZhY3RvciArIGNvbnRlbnRzUmVj
dC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY3Qud2lkdGgoKSAq
IGhvcml6b250YWxGYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJl
Y3QuaGVpZ2h0KCkgKiB2ZXJ0aWNhbEZhY3Rvcik7CisgICAgICAgIGludCBuZXdUaWxlSUQgPSBu
b2RlLT5jcmVhdGVDb250ZW50c1RpbGUoMS4wKTsKKyAgICAgICAgbm9kZS0+c2V0VGlsZUJhY2tC
dWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UobmV3VGlsZUlELCBJbnRSZWN0
KHNvdXJjZVJlY3QpLCB0YXJnZXRSZWN0LCB0aWxlSXQtPnNlY29uZC5nZXQoKSk7CisgICAgfQor
fQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Zmx1c2hMYXllckNoYW5nZXMoKQoreworICAg
IG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShGbG9hdFJlY3QoKSk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVSb290TGF5ZXIoKQoreworICAgIGlmIChtX3Jv
b3RMYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcm9vdExheWVyID0gY3JlYXRlTGF5ZXIo
SW52YWxpZFdlYkxheWVySUQpOworICAgIG1fcm9vdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZh
bHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jv
b3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKKworICAgIC8v
IFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJl
IG9wdGltaXplZCBvdXQuCisgICAgbV9yb290TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwg
MS4wKSk7CisgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsK
KyAgICB0b1RleHR1cmVNYXBwZXJOb2RlKG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1h
cHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6c3luY1JlbW90ZUNvbnRlbnQoKQoreworICAgIC8vIFdlIGVucXVldWUgbWVzc2FnZXMgYW5k
IGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWlyZSBhbiBhY3RpdmUgR0wg
Y29udGV4dC4KKyAgICBlbnN1cmVSb290TGF5ZXIoKTsKKworICAgIHdoaWxlIChPd25QdHI8TGF5
ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG5leHRNZXNzYWdlID0gbV9tZXNzYWdlc1RvUmVuZGVy
ZXIudHJ5R2V0TWVzc2FnZSgpKSB7CisgICAgICAgIHN3aXRjaCAobmV4dE1lc3NhZ2UtPnR5cGUo
KSkgeworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpTZXRSb290TGF5
ZXI6IHsKKyAgICAgICAgICAgIGNvbnN0IFNldFJvb3RMYXllck1lc3NhZ2VEYXRhJiBkYXRhID0g
c3RhdGljX2Nhc3Q8U2V0Um9vdExheWVyTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0
YSgpOworICAgICAgICAgICAgc2V0Um9vdExheWVySUQoZGF0YS5sYXllcklEKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9S
ZW5kZXJlcjo6RGVsZXRlTGF5ZXI6IHsKKyAgICAgICAgICAgIGNvbnN0IERlbGV0ZUxheWVyTWVz
c2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxEZWxldGVMYXllck1lc3NhZ2UqPihuZXh0TWVz
c2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGRlbGV0ZUxheWVyKGRhdGEubGF5ZXJJ
RCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJU
cmVlTWVzc2FnZVRvUmVuZGVyZXI6OlN5bmNMYXllclBhcmFtZXRlcnM6IHsKKyAgICAgICAgICAg
IGNvbnN0IFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0
PFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7
CisgICAgICAgICAgICBzeW5jTGF5ZXJQYXJhbWV0ZXJzKGRhdGEubGF5ZXJJbmZvKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdl
VG9SZW5kZXJlcjo6Q3JlYXRlVGlsZTogeworICAgICAgICAgICAgY29uc3QgQ3JlYXRlVGlsZU1l
c3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8Q3JlYXRlVGlsZU1lc3NhZ2UqPihuZXh0TWVz
c2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGNyZWF0ZVRpbGUoZGF0YS5sYXllcklE
LCBkYXRhLnJlbW90ZVRpbGVJRCwgZGF0YS5zY2FsZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92
ZVRpbGU6IHsKKyAgICAgICAgICAgIGNvbnN0IFJlbW92ZVRpbGVNZXNzYWdlRGF0YSYgZGF0YSA9
IHN0YXRpY19jYXN0PFJlbW92ZVRpbGVNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRh
KCk7CisgICAgICAgICAgICByZW1vdmVUaWxlKGRhdGEubGF5ZXJJRCwgZGF0YS5yZW1vdGVUaWxl
SUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVy
VHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVUaWxlOiB7CisgICAgICAgICAgICBjb25zdCBV
cGRhdGVUaWxlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxVcGRhdGVUaWxlTWVzc2Fn
ZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAgICAgdXBkYXRlVGlsZShk
YXRhLmxheWVySUQsIGRhdGEucmVtb3RlVGlsZUlELCBkYXRhLnNvdXJjZVJlY3QsIGRhdGEudGFy
Z2V0UmVjdCwgZGF0YS5pbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkNyZWF0ZUltYWdlOiB7Cisg
ICAgICAgICAgICBjb25zdCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nh
c3Q8Q3JlYXRlSW1hZ2VNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAg
ICAgICAgICBjcmVhdGVJbWFnZShkYXRhLmltYWdlSUQsIGRhdGEuaW1hZ2UpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyOjpEZXN0cm95SW1hZ2U6IHsKKyAgICAgICAgICAgIGNvbnN0IENyZWF0ZUltYWdlTWVz
c2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxDcmVhdGVJbWFnZU1lc3NhZ2UqPihuZXh0TWVz
c2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGRlc3Ryb3lJbWFnZShkYXRhLmltYWdl
SUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVy
VHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpGbHVzaExheWVyQ2hhbmdlczoKKyAgICAgICAgICAgIGZs
dXNoTGF5ZXJDaGFuZ2VzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25Q
dHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG1lc3NhZ2UpCit7CisgICAgbV9tZXNzYWdl
c1RvUmVuZGVyZXIuYXBwZW5kKG1lc3NhZ2UpOworICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQs
IGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAg
ICBDcmVhdGVUaWxlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySUQgPSBsYXllcklE
OworICAgIGRhdGEucmVtb3RlVGlsZUlEID0gdGlsZUlEOworICAgIGRhdGEuc2NhbGUgPSB1cGRh
dGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yOworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKENyZWF0ZVRp
bGVNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklE
LCB0aWxlSUQsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBk
YXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgVXBkYXRlVGlsZU1lc3NhZ2VEYXRhIGRhdGE7
CisgICAgZGF0YS5sYXllcklEID0gbGF5ZXJJRDsKKyAgICBkYXRhLnJlbW90ZVRpbGVJRCA9IHRp
bGVJRDsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRt
YXA6OmNyZWF0ZSh1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSk7CisgICAgZGF0YS5pbWFnZSA9IGJp
dG1hcC0+Y3JlYXRlUUltYWdlKCkuY29weSgpOworICAgIGRhdGEuc291cmNlUmVjdCA9IEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzLnNpemUoKSk7
CisgICAgZGF0YS50YXJnZXRSZWN0ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzOworICAg
IHB1c2hVcGRhdGVUb1F1ZXVlKFVwZGF0ZVRpbGVNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlEKQoreworICAgIFJlbW92ZVRpbGVNZXNzYWdlRGF0YSBkYXRhOworICAgIGRh
dGEubGF5ZXJJRCA9IGxheWVySUQ7CisgICAgZGF0YS5yZW1vdGVUaWxlSUQgPSB0aWxlSUQ7Cisg
ICAgcHVzaFVwZGF0ZVRvUXVldWUoUmVtb3ZlVGlsZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9
CisKKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2Vi
TGF5ZXJJRCBpZCkKK3sKKyAgICBEZWxldGVMYXllck1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0
YS5sYXllcklEID0gaWQ7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoRGVsZXRlTGF5ZXJNZXNzYWdl
OjpjcmVhdGUoZGF0YSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBTZXRSb290TGF5ZXJNZXNzYWdl
RGF0YSBkYXRhOworICAgIGRhdGEubGF5ZXJJRCA9IGlkOworICAgIHB1c2hVcGRhdGVUb1F1ZXVl
KFNldFJvb3RMYXllck1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpzeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKGNvbnN0IFdlYkxheWVySW5mbyYg
aW5mbykKK3sKKyAgICBTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZURhdGEgZGF0YTsKKyAgICBk
YXRhLmxheWVySW5mbyA9IGluZm87CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoU3luY0xheWVyUGFy
YW1ldGVyc01lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFBy
b3h5OjpkaWRSZW5kZXJGcmFtZSgpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkt
PnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1l
KCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgcHVzaFVwZGF0
ZVRvUXVldWUoRmx1c2hMYXllckNoYW5nZXNNZXNzYWdlOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90
IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlKQorewor
ICAgIENyZWF0ZUltYWdlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGRhdGEu
aW1hZ2VJRCA9IGtleTsKKyAgICBkYXRhLmltYWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKS5j
b3B5KCk7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoQ3JlYXRlSW1hZ2VNZXNzYWdlOjpjcmVhdGUo
ZGF0YSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29t
cG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQoreworICAgIERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRh
IGRhdGE7CisgICAgZGF0YS5pbWFnZUlEID0ga2V5OworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKERl
c3Ryb3lJbWFnZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0
UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNv
bnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKSwgbV9kcmF3aW5nQXJl
YVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9h
dCBzY2FsZSkKK3sKKyAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworICAgIG1fY29u
dGVudHNTY2FsZSA9IHNjYWxlOworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVj
dEFuZFNjYWxlKHJlY3QsIHNjYWxlKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJ
RCgpKTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
LnBybyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCmluZGV4IDI3NzVlOGEuLjM2YTg1MDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIucHJvCkBAIC0yOSw2ICsyOSw4IEBAIFdFQktJVDFfU09VUkNFU19TSEFSRURf
V0lUSF9XRUJLSVQyID0gXAogV0VCS0lUMl9HRU5FUkFURURfSEVBREVSUyA9IFwKICAgICAkJFdF
QktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0F1dGhlbnRpY2F0aW9uTWFuYWdlck1lc3NhZ2Vz
LmggXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRG93bmxvYWRQcm94eU1l
c3NhZ2VzLmggXAorICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVl
SG9zdE1lc3NhZ2VzLmggXAorICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5
ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggXAogICAgICQkV0VCS0lU
Ml9HRU5FUkFURURfU09VUkNFU19ESVIvUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBc
CiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5Qcm9jZXNzQ29ubmVj
dGlvbk1lc3NhZ2VzLmggXApAQCAtNjcsNiArNjksOCBAQCBXRUJLSVQyX0dFTkVSQVRFRF9TT1VS
Q0VTID0gXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRG93bmxvYWRQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19E
SVIvRHJhd2luZ0FyZWFNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJB
VEVEX1NPVVJDRVNfRElSL0RyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKKyAg
ICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJlZUhvc3RNZXNzYWdlUmVj
ZWl2ZXIuY3BwIFwKKyAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJl
ZUhvc3RQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURf
U09VUkNFU19ESVIvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIFwK
ICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL1BsdWdpbkNvbnRyb2xsZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19E
SVIvUGx1Z2luUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgXApAQCAtMTYyLDYgKzE2Niw3IEBA
IEhFQURFUlMgKz0gXAogICAgIFNoYXJlZC9XZWJHcmFwaGljc0NvbnRleHQuaCBcCiAgICAgU2hh
cmVkL1dlYkhpdFRlc3RSZXN1bHQuaCBcCiAgICAgU2hhcmVkL1dlYkltYWdlLmggXAorICAgIFNo
YXJlZC9XZWJMYXllclRyZWVJbmZvLmggXAogICAgIFNoYXJlZC9XZWJOYXZpZ2F0aW9uRGF0YVN0
b3JlLmggXAogICAgIFNoYXJlZC9XZWJOdW1iZXIuaCBcCiAgICAgU2hhcmVkL1dlYk9wZW5QYW5l
bFBhcmFtZXRlcnMuaCBcCkBAIC0zMTYsNiArMzIxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFcnJvcnMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmggXAorICAgIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggXApAQCAtMzk5LDYgKzQwNSw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIFNoYXJlZC9XZWJIaXRUZXN0UmVzdWx0LmNwcCBcCiAgICAgU2hhcmVkL1dl
YktleWJvYXJkRXZlbnQuY3BwIFwKICAgICBTaGFyZWQvV2ViSW1hZ2UuY3BwIFwKKyAgICBTaGFy
ZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAgXAogICAgIFNoYXJlZC9XZWJNb3VzZUV2ZW50LmNwcCBc
CiAgICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuY3BwIFwKICAgICBTaGFyZWQvV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAgXApAQCAtNDg2LDYgKzQ5Myw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVBy
b2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAg
XAorICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0
dXJlUmVjb2duaXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25p
emVyLmNwcCBcCkBAIC01NjUsNiArNTczLDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAgXAorICAgIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcAppbmRleCAyMThmMmZmLi4xNTBkOWM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NM
YXllci5jcHAKQEAgLTI1LDEzICsyNSwxMyBAQAogCiAjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCiAj
aW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5o
IgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94
eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZS5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJ0ZXh0L0NT
dHJpbmcuaCIKICNpbmNsdWRlIDxIYXNoTWFwLmg+CkBAIC01OCwxMiArNTgsNiBAQCBXZWJHcmFw
aGljc0xheWVyKiBXZWJHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklE
IGlkKQogICAgIHJldHVybiBpdC0+c2Vjb25kOwogfQogCi1zdGF0aWMgVmVjdG9yPFdlYkxheWVy
SUQ+JiBkZWxldGVkTGF5ZXJJRHMoKQotewotICAgIHN0YXRpYyBWZWN0b3I8V2ViTGF5ZXJJRD4g
bGF5ZXJzOwotICAgIHJldHVybiBsYXllcnM7Ci19Ci0KIHN0YXRpYyBXZWJMYXllcklEIHRvV2Vi
TGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICByZXR1cm4gbGF5ZXIgPyB0b1dl
YkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDogMDsKQEAgLTc5LDY3ICs3Myw5MSBAQCB2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6Om5vdGlmeUNoYW5nZSgpCiBXZWJHcmFwaGljc0xheWVyOjpXZWJH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdyYXBoaWNz
TGF5ZXIoY2xpZW50KQogICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCi0gICAgLCBtX21vZGlm
aWVkKGZhbHNlKQorICAgICwgbV9tb2RpZmllZCh0cnVlKQogICAgICwgbV9jb250ZW50TmVlZHNE
aXNwbGF5KGZhbHNlKQogICAgICwgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyhmYWxzZSkKLSAgICAs
IG1fY29udGVudFNjYWxlKDEuZikKKyAgICAsIG1faW5VcGRhdGVNb2RlKGZhbHNlKQorI2lmIEVO
QUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICwgbV9sYXllclRyZWVUaWxlQ2xpZW50KDAp
CisgICAgLCBtX21haW5CYWNraW5nU3RvcmUoYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3Jl
KHRoaXMsIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkp
KQorI2VuZGlmCiB7Ci0gICAgLy8gU3RhcnRpbmcgbGF5ZXIgSURzIGZyb20gMTAwMCwgdG8gaGVs
cCBkZXRlY3QgZmF1bHR5IElEcyBlYXNpbHkuCi0gICAgc3RhdGljIFdlYkxheWVySUQgc0lEID0g
MTAwMDsKLSAgICBtX2xheWVySW5mby5pZCA9ICsrc0lEOworICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZS0+c2V0Q29udGVudHNTY2FsZSgxLjApOworICAgIHN0YXRpYyBXZWJMYXllcklEIG5leHRMYXll
cklEID0gMTsKKyAgICBtX2xheWVySW5mby5pZCA9IG5leHRMYXllcklEKys7CiAgICAgbGF5ZXJC
eUlETWFwKCkuYWRkKGlkKCksIHRoaXMpOwogfQogCiBXZWJHcmFwaGljc0xheWVyOjp+V2ViR3Jh
cGhpY3NMYXllcigpCiB7CiAgICAgbGF5ZXJCeUlETWFwKCkucmVtb3ZlKGlkKCkpOwotICAgIGRl
bGV0ZWRMYXllcklEcygpLmFwcGVuZChpZCgpKTsKKworICAgIC8vIFRoaXMgd291bGQgdGVsbCB0
aGUgVUkgcHJvY2VzcyB0byByZWxlYXNlIHRoZSBiYWNraW5nIHN0b3JlLgorICAgIHNldENvbnRl
bnRzVG9JbWFnZSgwKTsKKworICAgIGlmIChtX2xheWVyVHJlZVRpbGVDbGllbnQpCisgICAgICAg
IG1fbGF5ZXJUcmVlVGlsZUNsaWVudC0+ZGlkRGVsZXRlTGF5ZXIoaWQoKSk7CiB9CiAKIGJvb2wg
V2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIq
PiYgY2hpbGRyZW4pCiB7CiAgICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVu
KGNoaWxkcmVuKTsKLSAgICBpZiAob2spCi0gICAgICAgIG5vdGlmeUNoYW5nZSgpOwotICAgIHJl
dHVybiBvazsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJHcmFwaGlj
c0xheWVyKiBjaGlsZCA9IHRvV2ViR3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7CisgICAgICAg
IGNoaWxkLT5zZXRDb250ZW50c1NjYWxlKG1fY29udGVudHNTY2FsZSk7CisgICAgICAgIGNoaWxk
LT5ub3RpZnlDaGFuZ2UoKTsKKyAgICB9CisgICAgbm90aWZ5Q2hhbmdlKCk7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIpOworICAgIHRv
V2ViR3JhcGhpY3NMYXllcihsYXllciktPm5vdGlmeUNoYW5nZSgpOwogICAgIG5vdGlmeUNoYW5n
ZSgpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGlj
c0xheWVyKiBsYXllciwgaW50IGluZGV4KQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
QXRJbmRleChsYXllciwgaW5kZXgpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPm5v
dGlmeUNoYW5nZSgpOwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIq
IHNpYmxpbmcpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShsYXllciwgc2li
bGluZyk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAg
ICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRC
ZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKICAg
ICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b1dl
YkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5ub3RpZnlDaGFuZ2UoKTsKICAgICBub3RpZnlDaGFuZ2Uo
KTsKIH0KIAogYm9vbCBXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXll
ciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQogewogICAgIGJvb2wgb2sgPSBH
cmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKLQotICAgIGlm
IChvaykKLSAgICAgICAgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgcmV0dXJuIG9rOworICAgIGlmICgh
b2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICB0b1dl
YkdyYXBoaWNzTGF5ZXIob2xkQ2hpbGQpLT5ub3RpZnlDaGFuZ2UoKTsKKyAgICB0b1dlYkdyYXBo
aWNzTGF5ZXIobmV3Q2hpbGQpLT5ub3RpZnlDaGFuZ2UoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCkKIHsKKyAgICBpZiAo
V2ViR3JhcGhpY3NMYXllciogcGFyZW50TGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocGFyZW50
KCkpKQorICAgICAgICBwYXJlbnRMYXllci0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgR3JhcGhpY3NM
YXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOworCiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKQEAg
LTI3NCwxMyArMjkyLDI4IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlQW5pbWF0aW9u
KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKIHsKIH0KIAordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCit7CisgICAgc2V0Q29udGVudHNUb0ltYWdl
KDApOworICAgIHNldENvbnRlbnRzVG9JbWFnZShtX2ltYWdlLmdldCgpKTsKK30KKwogdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogewotICAg
IGlmIChpbWFnZSA9PSBtX2ltYWdlLmdldCgpKQorICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQor
ICAgICAgICByZXR1cm47CisgICAgV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0gbGF5
ZXJUcmVlVGlsZUNsaWVudCgpOworICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm47CiAK
KyAgICAvLyBXZSBhZG9wdCBmaXJzdCwgaW4gY2FzZSB0aGlzIGlzIHRoZSBzYW1lIGZyYW1lIC0g
dGhhdCB3YXkgd2UgYXZvaWQgZGVzdHJveWluZyBhbmQgcmVjcmVhdGluZyB0aGUgaW1hZ2UuCisg
ICAgaW50NjRfdCBuZXdJRCA9IGNsaWVudC0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShpbWFnZSk7
CisgICAgY2xpZW50LT5yZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VC
YWNraW5nU3RvcmVJRCk7CisgICAgaWYgKG5ld0lEID09IG1fbGF5ZXJJbmZvLmltYWdlQmFja2lu
Z1N0b3JlSUQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdT
dG9yZUlEID0gbmV3SUQ7CiAgICAgbV9pbWFnZSA9IGltYWdlOwotICAgIHNldE5lZWRzRGlzcGxh
eSgpOworICAgIG1fbGF5ZXJJbmZvLmltYWdlSXNVcGRhdGVkID0gdHJ1ZTsKICAgICBHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOwogICAgIG5vdGlmeUNoYW5nZSgpOwog
fQpAQCAtMzAxLDUwICszMzQsMjkgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNh
dGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIAogdm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLSAgICBu
b3RpZnlDaGFuZ2UoKTsKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSk7CiB9
CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX25lZWRzRGlzcGxheVJlY3QudW5pdGUocmVjdCk7Cisg
ICAgbV9tYWluQmFja2luZ1N0b3JlLT5pbnZhbGlkYXRlKEludFJlY3QocmVjdCkpOwogICAgIG5v
dGlmeUNoYW5nZSgpOwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQogV2ViTGF5ZXJJRCBX
ZWJHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGF5ZXJJbmZvLmlk
OwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZFN5bmNocm9uaXplKCkKK3ZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgbV9tb2RpZmllZCA9IGZhbHNl
OwotICAgIG1fbmVlZHNEaXNwbGF5UmVjdCA9IEZsb2F0UmVjdCgpOwotICAgIGlmIChtX2hhc1Bl
bmRpbmdBbmltYXRpb25zKQotICAgICAgICBub3RpZnlBbmltYXRpb25TdGFydGVkKFdURjo6Y3Vy
cmVudFRpbWUoKSk7Ci0gICAgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA9IGZhbHNlOwotfQotCi1j
b25zdCBXZWJMYXllckluZm8mIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVySW5mbygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fbGF5ZXJJbmZvOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5
bmNDb21wb3NpdGluZ1N0YXRlKCkKLXsKLSAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpCi0gICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7Cisg
ICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOwogICAgIGlm
IChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgcmVwbGljYUxheWVyKCktPnN5bmNDb21wb3NpdGlu
Z1N0YXRlKCk7CisgICAgICAgIHJlcGxpY2FMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShy
ZWN0KTsKICAgICBpZiAobWFza0xheWVyKCkpCi0gICAgICAgIG1hc2tMYXllcigpLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZSgpOworICAgICAgICBtYXNrTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3Rh
dGUocmVjdCk7CisgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiB9
CiAKIFdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBs
YXllcikKQEAgLTM1MiwzMCArMzY0LDIyIEBAIFdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhp
Y3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vi
R3JhcGhpY3NMYXllcio+KGxheWVyKTsKIH0KIAotRmxvYXRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6
Om5lZWRzRGlzcGxheVJlY3QoKSBjb25zdAotewotICAgIEZsb2F0UmVjdCByZWN0ID0gRmxvYXRS
ZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOwotICAgIGlmICghbV9u
ZWVkc0Rpc3BsYXkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KG1fbmVlZHNEaXNwbGF5UmVjdCk7
Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLVZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IFdlYkdy
YXBoaWNzTGF5ZXI6OnRha2VMYXllcnNUb0RlbGV0ZSgpCi17Ci0gICAgVmVjdG9yPFdlYktpdDo6
V2ViTGF5ZXJJRD4gbGF5ZXJzID0gZGVsZXRlZExheWVySURzKCk7Ci0gICAgZGVsZXRlZExheWVy
SURzKCkuY2xlYXIoKTsKLSAgICByZXR1cm4gbGF5ZXJzOwotfQotCiB2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiB7CisgICAgaWYg
KCFtX2xheWVyVHJlZVRpbGVDbGllbnQpCisgICAgICAgIG1fbGF5ZXJUcmVlVGlsZUNsaWVudCA9
IGxheWVyVHJlZVRpbGVDbGllbnQoKTsKKyAgICB1cGRhdGVDb250ZW50QnVmZmVycygpOworCiAg
ICAgbV9sYXllckluZm8ubmFtZSA9IG5hbWUoKTsKICAgICBtX2xheWVySW5mby5hbmNob3JQb2lu
dCA9IGFuY2hvclBvaW50KCk7CiAgICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFj
a2ZhY2VWaXNpYmlsaXR5KCk7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBj
aGlsZHJlblRyYW5zZm9ybSgpOwogICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29u
dGVudHNPcGFxdWUoKTsKICAgICBtX2xheWVySW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1Jl
Y3QoKTsKLSAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKKwor
ICAgIC8vIEluIHRoZSBzaGFkb3cgbGF5ZXIgdHJlZSB3ZSBjcmVhdGUgaW4gdGhlIFVJIHByb2Nl
c3MsIGxheWVycyB3aXRoIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2VzIGFyZSBhbHdheXMgY29u
c2lkZXJlZCB0byBkcmF3IGNvbnRlbnQuCisgICAgLy8gT3RoZXJ3aXNlLCB3ZSdkIGhhdmUgdG8g
Y2hlY2sgd2hldGhlciBhbiBsYXllciB3aXRoIGRyYXdzQ29udGVudD09ZmFsc2UgaGFzIGEgZGly
ZWN0bHkgY29tcG9zaXRlZCBpbWFnZSBtdWx0aXBsZSB0aW1lcy4KKyAgICBtX2xheWVySW5mby5k
cmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKSB8fCBtX2ltYWdlOwogICAgIG1fbGF5ZXJJbmZv
Lm1hc2sgPSB0b1dlYkxheWVySUQobWFza0xheWVyKCkpOwogICAgIG1fbGF5ZXJJbmZvLm1hc2tz
VG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7CiAgICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9w
YWNpdHkoKTsKQEAgLTM4MywxMjIgKzM4NywxNTkgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
eW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQogICAgIG1fbGF5ZXJJbmZvLnBv
cyA9IHBvc2l0aW9uKCk7CiAgICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMz
RCgpOwogICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVy
KCkpOwotICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBGbG9hdFNpemUoc2l6ZSgpLndpZHRoKCkgKiBt
X2NvbnRlbnRTY2FsZSwgc2l6ZSgpLmhlaWdodCgpICogbV9jb250ZW50U2NhbGUpOworICAgIG1f
bGF5ZXJJbmZvLnNpemUgPSBzaXplKCk7CiAgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJh
bnNmb3JtKCk7CiAgICAgbV9jb250ZW50TmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAgICAgbV9sYXll
ckluZm8uY2hpbGRyZW4uY2xlYXIoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hp
bGRyZW4oKS5zaXplKCk7ICsraSkKICAgICAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uYXBwZW5k
KHRvV2ViTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CisKKyAgICBtX2xheWVyVHJlZVRpbGVDbGll
bnQtPmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIobV9sYXllckluZm8pOworICAgIG1f
bW9kaWZpZWQgPSBmYWxzZTsKKyAgICBtX2xheWVySW5mby5pbWFnZUlzVXBkYXRlZCA9IGZhbHNl
OworICAgIGlmIChtX2hhc1BlbmRpbmdBbmltYXRpb25zKQorICAgICAgICBub3RpZnlBbmltYXRp
b25TdGFydGVkKFdURjo6Y3VycmVudFRpbWUoKSk7CisgICAgbV9oYXNQZW5kaW5nQW5pbWF0aW9u
cyA9IGZhbHNlOwogfQogCi1zdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gZGl2aWRlSW50b1RpbGVz
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkK
K3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKIHsK
LSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlczsKLSAgICBmb3IgKGZsb2F0IHkgPSByZWN0Lnko
KTsgeSA8IHJlY3QubWF4WSgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAgIGZvciAo
ZmxvYXQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7IHggKz0gZ1RpbGVEaW1lbnNpb24p
IHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlKHgsIHksIGdUaWxlRGltZW5zaW9uLCBnVGls
ZURpbWVuc2lvbik7Ci0gICAgICAgICAgICB0aWxlLmludGVyc2VjdChyZWN0KTsKLSAgICAgICAg
ICAgIHRpbGVzLmFwcGVuZCh0aWxlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdGls
ZXM7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIo
R3JhcGhpY3NMYXllciogbGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dEluZm8sIFZlY3RvcjxX
ZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKIHsKLSAgICBXZWJHcmFwaGljc0xheWVyKiBsYXll
ciA9IHRvV2ViR3JhcGhpY3NMYXllcihsYXllcik7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghbGF5ZXItPmlzTW9kaWZpZWQoKSkKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViR3JhcGhpY3NM
YXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hpbGRyZW4oKVtpXSk7Cisg
ICAgICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKKyAgICB9CisKKyAgICBtX2Nv
bnRlbnRzU2NhbGUgPSBzY2FsZTsKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlICYmIG1fbWFp
bkJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpID09IHNjYWxlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBvdXRMYXllcnMuYXBwZW5kKGxheWVyKTsKLSAgICBvdXRJbmZvLmxheWVycy5hcHBl
bmQobGF5ZXItPmxheWVySW5mbygpKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKKworICAgIG1fcHJl
dmlvdXNCYWNraW5nU3RvcmUgPSBtX21haW5CYWNraW5nU3RvcmUucmVsZWFzZSgpOworICAgIG1f
bWFpbkJhY2tpbmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBU
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKKyAgICBt
X21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOworfQorCit2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldFJvb3RMYXllcihib29sIGlzUm9vdCkKK3sKKyAgICBtX2xheWVy
SW5mby5pc1Jvb3RMYXllciA9IGlzUm9vdDsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KIAotICAg
IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvID0gb3V0SW5mby5sYXllcnNbb3V0SW5mby5sYXllcnMu
c2l6ZSgpIC0gMV07Ci0gICAgaWYgKGxheWVyLT5pbWFnZSgpKQotICAgICAgICBsYXllckluZm8u
ZHJhd3NDb250ZW50ID0gdHJ1ZTsKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNv
bnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVj
dG9yKQoreworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0VmlzaWJsZVJlY3RUcmFqZWN0b3J5
VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOwogfQogCi1zdGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9z
aXRpbmdJbmZvUmVjdXJzaXZlbHkoR3JhcGhpY3NMYXllciogcm9vdExheWVyLCBXZWJMYXllclRy
ZWVJbmZvJiBvdXRJbmZvLCBWZWN0b3I8V2ViR3JhcGhpY3NMYXllcio+JiBvdXRMYXllcnMpCit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KQogewotICAgIGlmICghcm9vdExheWVyKQorICAgIG1fdmlzaWJsZUNvbnRlbnRSZWN0
ID0gcmVjdDsKKyAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPmFk
anVzdFZpc2libGVSZWN0KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNr
aW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CisgICAgbV9t
b2RpZmllZCA9IHRydWU7CisgICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmNvbnRleHQs
IHJlY3QpOworfQogCi0gICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihyb290
TGF5ZXIsIG91dEluZm8sIG91dExheWVycyk7Ci0gICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0Zv
clRoaXNMYXllcihyb290TGF5ZXItPm1hc2tMYXllcigpLCBvdXRJbmZvLCBvdXRMYXllcnMpOwot
ICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseShyb290TGF5ZXItPnJlcGxpY2FM
YXllcigpLCBvdXRJbmZvLCBvdXRMYXllcnMpOwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp0aWxl
ZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3Rz
KQoreworfQogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290TGF5ZXItPmNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVs
eShyb290TGF5ZXItPmNoaWxkcmVuKClbaV0sIG91dEluZm8sIG91dExheWVycyk7Citib29sIFdl
YkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAor
eworICAgIGlmICghbV9pblVwZGF0ZU1vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgp
KQorICAgICAgICByZXR1cm4gY2xpZW50LT5sYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKTsK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2VuZExheWVy
c1RvVUlQcm9jZXNzKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciwgV2ViUGFnZSog
d2ViUGFnZSkKK0ludFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVDb250
ZW50c1JlY3QoKQogewotICAgIHdlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Ci0gICAgd2ViUGFn
ZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJ
bmNsdWRpbmdTdWJmcmFtZXMoKTsKLSAgICBXZWJMYXllclRyZWVJbmZvIGNvbXBvc2l0aW5nSW5m
bzsKLSAgICBjb21wb3NpdGluZ0luZm8ucm9vdExheWVySUQgPSByb290TGF5ZXIgPyB0b1dlYkdy
YXBoaWNzTGF5ZXIocm9vdExheWVyKS0+aWQoKSA6IDA7Ci0gICAgY29tcG9zaXRpbmdJbmZvLmNv
bnRlbnRTY2FsZSA9IDEuMDsKLSAgICBjb21wb3NpdGluZ0luZm8uZGVsZXRlZExheWVySURzID0g
V2ViR3JhcGhpY3NMYXllcjo6dGFrZUxheWVyc1RvRGVsZXRlKCk7Ci0gICAgVmVjdG9yPFdlYkdy
YXBoaWNzTGF5ZXIqPiBsYXllcnM7Ci0gICAgaWYgKHJvb3RMYXllcikKLSAgICAgICAgY29sbGVj
dENvbXBvc2l0aW5nSW5mb1JlY3Vyc2l2ZWx5KHJvb3RMYXllciwgY29tcG9zaXRpbmdJbmZvLCBs
YXllcnMpOworICAgIGlmIChtX2ltYWdlKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAg
IHJldHVybiBJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOwor
fQogCi0gICAgaWYgKGNvbXBvc2l0aW5nSW5mby5kZWxldGVkTGF5ZXJJRHMuaXNFbXB0eSgpICYm
IGNvbXBvc2l0aW5nSW5mby5sYXllcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CitJbnRS
ZWN0IFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKQorewor
ICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50UmVjdDsKK30KIAotICAgIHdlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OlN5bmNDb21wb3NpdGluZ0xheWVycyhjb21wb3Np
dGluZ0luZm8pKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJzW2ldOwotICAg
ICAgICBGbG9hdFJlY3QgdXBkYXRlUmVjdCA9IGxheWVyLT5uZWVkc0Rpc3BsYXlSZWN0KCk7Ci0K
LSAgICAgICAgbGF5ZXItPmRpZFN5bmNocm9uaXplKCk7Ci0KLSAgICAgICAgaWYgKHVwZGF0ZVJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUmVmUHRyPElt
YWdlPiBkaXJlY3RJbWFnZSA9IGxheWVyLT5pbWFnZSgpOwotICAgICAgICBpZiAoZGlyZWN0SW1h
Z2UpCi0gICAgICAgICAgICB1cGRhdGVSZWN0ID0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpOwotICAg
ICAgICBlbHNlIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGlsZVJlY3RzID0gZGl2aWRlSW50b1Rp
bGVzKHVwZGF0ZVJlY3QpOwotICAgICAgICBmb3IgKHNpemVfdCB0aWxlSW5kZXggPSAwOyB0aWxl
SW5kZXggPCB0aWxlUmVjdHMuc2l6ZSgpOyArK3RpbGVJbmRleCkgewotICAgICAgICAgICAgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCA9IHRpbGVSZWN0c1t0aWxlSW5kZXhdOwotICAgICAgICAg
ICAgSW50UmVjdCBlbmNsb3NpbmdVcGRhdGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh0aWxlUmVj
dCk7Ci0KLSAgICAgICAgICAgIFdlYkxheWVyVXBkYXRlSW5mbyBjaHVuayhlbmNsb3NpbmdVcGRh
dGVSZWN0KTsKLSAgICAgICAgICAgIGNodW5rLmxheWVySUQgPSB1aW50MzJfdChsYXllci0+aWQo
KSk7Ci0gICAgICAgICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShjaHVuay5yZWN0LnNpemUoKSwgU2hhcmVhYmxlQml0
bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICAgICAgICAgIGlmICghYml0bWFwKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKCFiaXRtYXAtPmNyZWF0ZUhhbmRsZShj
aHVuay5iaXRtYXBIYW5kbGUpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRG
T1JNKFFUKQotICAgICAgICAgICAgUUltYWdlIHRpbGVJbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUlt
YWdlKCk7Ci0gICAgICAgICAgICB0aWxlSW1hZ2UuZmlsbCgwKTsKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBRUGFpbnRlciBwYWludGVyKCZ0aWxlSW1hZ2UpOwotICAgICAgICAgICAg
ICAgIHBhaW50ZXIudHJhbnNsYXRlKC10aWxlUmVjdC54KCksIC10aWxlUmVjdC55KCkpOwotICAg
ICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZwYWludGVyKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZGlyZWN0SW1hZ2UpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJh
d0ltYWdlKGRpcmVjdEltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBsYXllci0+Y29u
dGVudHNSZWN0KCksIEZsb2F0UmVjdCgwLCAwLCBkaXJlY3RJbWFnZS0+d2lkdGgoKSwgZGlyZWN0
SW1hZ2UtPmhlaWdodCgpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBsYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgZW5jbG9zaW5n
VXBkYXRlUmVjdCk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKK0NvbG9yIFdlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gY29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsK
IAotICAgICAgICAgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6
VXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQoY2h1bmspKTsKLSAgICAgICAgfQorfQordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUlu
Zm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV9tb2RpZmllZCA9IHRydWU7CisgICAgaWYgKFdlYkxh
eWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKSkKKyAgICAg
ICAgY2xpZW50LT5jcmVhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbyk7Cit9CisKK3Zv
aWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvKQoreworICAgIG1fbW9kaWZpZWQgPSB0cnVlOworICAgIGlmIChXZWJM
YXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCkpCisgICAg
ICAgIGNsaWVudC0+dXBkYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8pOworfQorCit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKK3sKKyAgICBtX21v
ZGlmaWVkID0gdHJ1ZTsKKyAgICBpZiAoV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0g
bGF5ZXJUcmVlVGlsZUNsaWVudCgpKQorICAgICAgICBjbGllbnQtPnJlbW92ZVRpbGUoaWQoKSwg
dGlsZUlEKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlQnVmZmVyc1Jl
Y3Vyc2l2ZWx5KCkKK3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJz
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7
CisgICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHRo
aXMtPmNoaWxkcmVuKClbaV0pOworICAgICAgICBsYXllci0+dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1
cnNpdmVseSgpOwogICAgIH0KIH0KIAorV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogV2ViR3JhcGhp
Y3NMYXllcjo6bGF5ZXJUcmVlVGlsZUNsaWVudCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGF5ZXJU
cmVlVGlsZUNsaWVudCkKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlVGlsZUNsaWVudDsKKyAg
ICBXZWJHcmFwaGljc0xheWVyKiBwYXJlbnQgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+cGFy
ZW50KCkpOworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
cGFyZW50LT5sYXllclRyZWVUaWxlQ2xpZW50KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQoreworICAgIC8vIEJhY2tpbmctc3RvcmVzIGZvciBk
aXJlY3RseSBjb21wb3NpdGVkIGltYWdlcyBpcyBoYW5kbGVkIGluIExheWVyVHJlZUhvc3QuCisg
ICAgaWYgKG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZHJhd3NDb250ZW50
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQg
PSBsYXllclRyZWVUaWxlQ2xpZW50KCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2luVXBkYXRlTW9kZSA9IHRydWU7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT51
cGRhdGVUaWxlQnVmZmVycygpOworICAgIG1faW5VcGRhdGVNb2RlID0gZmFsc2U7Cit9CisKKyNl
bmRpZgorCiBzdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVXZWJHcmFwaGlj
c0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFdlYkdyYXBoaWNzTGF5ZXIoY2xpZW50KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCmlu
ZGV4IGFkNjAyMWUuLmM1ODFiNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCkBAIC0yNywxOSAr
MjcsNDAgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgogI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgi
CisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJUaWxlZEJh
Y2tpbmdTdG9yZVJlbW90ZVRpbGUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFdlYkxh
eWVyVHJlZVRpbGVDbGllbnQgeworcHVibGljOgorICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSopID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBX
ZWJMYXllckluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZERlbGV0ZUxheWVyKFdlYkxh
eWVySUQpID0gMDsKK307CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR3Jh
cGhpY3NMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyIHsKK2NsYXNzIFdlYkdy
YXBoaWNzTGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllcgorI2lmIEVOQUJMRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBUaWxl
ZEJhY2tpbmdTdG9yZUNsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJL
aXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorI2VuZGlmCit7CiBwdWJsaWM6
CiAgICAgV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CiAgICAgdmlydHVh
bCB+V2ViR3JhcGhpY3NMYXllcigpOwpAQCAtNzMsMTMgKzk0LDEzIEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICB2b2lkIHNldFZpc2li
bGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVu
dFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2
b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHZvaWQgc2V0
Um9vdExheWVyKGJvb2wpOwogCiAgICAgV2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7Ci0g
ICAgY29uc3QgV2ViS2l0OjpXZWJMYXllckluZm8mIGxheWVySW5mbygpIGNvbnN0OwotICAgIEZs
b2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0KCkgY29uc3Q7Ci0gICAgc3RhdGljIFZlY3RvcjxXZWJL
aXQ6OldlYkxheWVySUQ+IHRha2VMYXllcnNUb0RlbGV0ZSgpOwogICAgIHN0YXRpYyBXZWJHcmFw
aGljc0xheWVyKiBsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEKTsKICAgICBib29sIGlzTW9k
aWZpZWQoKSBjb25zdCB7IHJldHVybiBtX21vZGlmaWVkOyB9CiAgICAgdm9pZCBkaWRTeW5jaHJv
bml6ZSgpOwpAQCAtODcsMjEgKzEwOCw1MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnlBbmlt
YXRpb25TdGFydGVkKGRvdWJsZSk7CiAKICAgICBzdGF0aWMgdm9pZCBpbml0RmFjdG9yeSgpOwot
ICAgIHN0YXRpYyB2b2lkIHNlbmRMYXllcnNUb1VJUHJvY2VzcyhXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgV2ViS2l0OjpXZWJQYWdlKik7CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9S
RSkKKyAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxl
ZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5n
U3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBw
YWludGVkQXJlYSk7CisgICAgdmlydHVhbCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0Fs
bG93ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250
ZW50c1JlY3QoKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxl
UmVjdCgpOworICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdDsKKworICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBk
YXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0
IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0
aWxlSUQpOworCisgICAgdm9pZCBzZXRMYXllclRyZWVUaWxlQ2xpZW50KFdlYktpdDo6V2ViTGF5
ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50KSB7IG1fbGF5ZXJUcmVlVGlsZUNsaWVudCA9IGNsaWVu
dDsgfQorICAgIFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogbGF5ZXJUcmVlVGlsZUNs
aWVudCgpIGNvbnN0OworCisgICAgYm9vbCBpc1JlYWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBjb25z
dDsKKyAgICB2b2lkIHVwZGF0ZVRpbGVCdWZmZXJzUmVjdXJzaXZlbHkoKTsKKyAgICB2b2lkIHNl
dENvbnRlbnRzU2NhbGUoZmxvYXQpOworICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsK
KyNlbmRpZgogCiBwcml2YXRlOgogICAgIFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZv
OwotICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcD4gbV9iYWNraW5nU3RvcmU7Cisg
ICAgV2ViS2l0OjpXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBtX2xheWVyVGlsZUNsaWVudDsKICAg
ICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVj
dDsKLSAgICBib29sIG1fbmVlZHNEaXNwbGF5OwotICAgIGJvb2wgbV9tb2RpZmllZDsKLSAgICBi
b29sIG1fY29udGVudE5lZWRzRGlzcGxheTsKLSAgICBib29sIG1faGFzUGVuZGluZ0FuaW1hdGlv
bnM7Ci0KLSAgICBmbG9hdCBtX2NvbnRlbnRTY2FsZTsKKyAgICBJbnRSZWN0IG1fdmlzaWJsZUNv
bnRlbnRSZWN0OworICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXkgOiAxOworICAgIGJvb2wgbV9tb2Rp
ZmllZCA6IDE7CisgICAgYm9vbCBtX2NvbnRlbnROZWVkc0Rpc3BsYXkgOiAxOworICAgIGJvb2wg
bV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA6IDE7CisgICAgYm9vbCBtX2luVXBkYXRlTW9kZSA6IDI7
CiAKICAgICB2b2lkIG5vdGlmeUNoYW5nZSgpOworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCisgICAgV2ViS2l0OjpXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBtX2xheWVyVHJlZVRp
bGVDbGllbnQ7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5C
YWNraW5nU3RvcmU7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3By
ZXZpb3VzQmFja2luZ1N0b3JlOworICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKyNlbmRpZgog
fTsKIAogV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgK
aW5kZXggNTJmZGRkZC4uZDg3MGViMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTc0LDEwICs3NCwxMSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7
IH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpZiBFTkFCTEUoVElMRURf
QkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1
YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXllcnMoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0
aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKSA9IDA7
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKaW5kZXggOTdmZjgyNy4uN2Rk
N2M4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Ry
YXdpbmdBcmVhSW1wbC5jcHAKQEAgLTY3Myw1ICs2NzMsMTMgQEAgdm9pZCBEcmF3aW5nQXJlYUlt
cGw6OmRpc3BsYXkoVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKICAgICBtX2xhc3REaXNwbGF5VGlt
ZSA9IGN1cnJlbnRUaW1lKCk7CiB9CiAKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkg
JiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3aW5nQXJlYUltcGw6OmRp
ZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0
aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqIGFyZ3VtZW50cykKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBt
ZXNzYWdlSUQsIGFyZ3VtZW50cyk7Cit9CisjZW5kaWYKKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuaAppbmRleCBjYzhhODA1Li4zNWIyMDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCkBAIC03MSw2ICs3MSwxMCBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNoaWxkV2luZG93R2VvbWV0cnlV
cGRhdGUoY29uc3QgV2luZG93R2VvbWV0cnkmKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFRJTEVE
X0JBQ0tJTkdfU1RPUkUpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rp
b24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworI2Vu
ZGlmCisKICAgICAvLyBDb3JlSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJv
b2wgcmVzcG9uZEltbWVkaWF0ZWx5LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGRhNDJhZTYuLjAzMWMzZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
SG9zdC5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oUVQpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJxdC9MYXllclRyZWVIb3N0
UXQuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdl
YktpdCB7CkBAIC00NCw2ICs0OCw4IEBAIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdD4gTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgcmV0dXJuIExheWVyVHJlZUhv
c3RDQU1hYzo6Y3JlYXRlKHdlYlBhZ2UpOwogI2VsaWYgUExBVEZPUk0oV0lOKSAmJiBIQVZFKFdL
UUNBKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FXaW46OmNyZWF0ZSh3ZWJQYWdlKTsKKyNl
bGlmIFBMQVRGT1JNKFFUKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgcmV0dXJuIExheWVy
VHJlZUhvc3RRdDo6Y3JlYXRlKHdlYlBhZ2UpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0
LmgKaW5kZXggNjdjODA3Yi4uNTFmOTkyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNiwxMyArMjYsMjAgQEAKICNpZm5k
ZWYgTGF5ZXJUcmVlSG9zdF9oCiAjZGVmaW5lIExheWVyVHJlZUhvc3RfaAogCisjaW5jbHVkZSA8
Q29yZUlQQy9NZXNzYWdlSUQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKK25hbWVzcGFjZSBDb3JlSVBDIHsKK2NsYXNzIEFyZ3Vt
ZW50RGVjb2RlcjsKK2NsYXNzIENvbm5lY3Rpb247Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICBjbGFzcyBJbnRSZWN0OwotICAgIGNsYXNzIEludFNpemU7Ci0gICAgY2xhc3MgR3JhcGhp
Y3NMYXllcjsKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6
ZTsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNzIs
NiArNzksMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IH0KIAorI2lmIEVOQUJMRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJl
Y3RBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNv
bnRlbnRSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwg
Q29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyNlbmRpZgor
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNoaWxkV2luZG93
R2VvbWV0cnlVcGRhdGUoY29uc3QgV2luZG93R2VvbWV0cnkmKSA9IDA7CiAjZW5kaWYKQEAgLTgw
LDYgKzk1LDExIEBAIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0KFdlYlBh
Z2UqKTsKIAogICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKKworCisjaWYgRU5BQkxFKFRJTEVEX0JB
Q0tJTkdfU1RPUkUpCisgICAgYm9vbCBtX3dhaXRpbmdGb3JVSVByb2Nlc3M7CisjZW5kaWYKIH07
CiAKICNpZiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oUVQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2Vz
LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTk4NzAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI4IEBACisjCisjICAgIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyMKKyMgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorIworCisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKK21lc3NhZ2VzIC0+IExh
eWVyVHJlZUhvc3QgeworICAgIFNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVyKGludCBsYXll
cklELCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdCkKKyAgICBTZXRWaXNpYmxl
Q29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKFdlYkNvcmU6OkZsb2F0UG9pbnQgdHJhamVjdG9y
eVZlY3RvcnkpCisgICAgU2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoV2ViQ29yZTo6SW50
UmVjdCBjb250ZW50UmVjdCwgZmxvYXQgc2NhbGUpCisgICAgUmVuZGVyTmV4dEZyYW1lKCkKK30K
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Rp
bGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Rp
bGVkRHJhd2luZ0FyZWEuY3BwCmluZGV4IGZhYTZjZGQuLmU3MjA4YTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAK
QEAgLTE3Nyw2ICsxNzcsMTAgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhOjpyZW1vdmVUaWxlKGlu
dCB0aWxlSUQpCiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5
OjpSZW1vdmVUaWxlKHRpbGVJRCkpOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQordm9pZCBUaWxlZERyYXdpbmdBcmVhOjpkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3Nh
Z2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlELCBD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykgeyB9CisjZW5kaWYKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAogCisKICNlbmRpZiAvLyBUSUxFRF9CQUNLSU5HX1NUT1JFCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaApp
bmRleCBlZDEzZDJhLi41ZWI3OWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFw
aGljc0xheWVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXll
clN5bmMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nTGF5ZXJzKCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBD
OjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqKTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDU1ZjVlZmUuLmYxOWI2YmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTIxNTQsNiArMjE1NCwx
NCBAQCB2b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24q
IGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZwogICAgICAgICAgICAgbV9kcmF3aW5nQXJlYS0+
ZGlkUmVjZWl2ZURyYXdpbmdBcmVhTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3Vt
ZW50cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lO
R19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtZXNzYWdl
SUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdD4oKSkgeworICAgICAgICBp
ZiAobV9kcmF3aW5nQXJlYSkKKyAgICAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVM
YXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzV2ViSW5zcGVjdG9y
PigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQv
TGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9x
dC9MYXllclRyZWVIb3N0UXQuY3BwCmluZGV4IDU3OGFlMDguLjhjNDQ2OGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuY3BwCkBAIC0yNSw4ICsyNSw0MTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllclRyZWVI
b3N0UXQuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgorI2lu
Y2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IExheWVyVHJlZUhv
c3RRdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBMYXllclRyZWVIb3N0UXQod2ViUGFnZSkpOworfQorCitMYXllclRyZWVIb3N0UXQ6On5MYXll
clRyZWVIb3N0UXQoKQoreworfQorCitMYXllclRyZWVIb3N0UXQ6OkxheWVyVHJlZUhvc3RRdChX
ZWJQYWdlKiB3ZWJQYWdlKQorICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQorICAgICwgbV9u
b3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2lzVmFsaWQodHJ1
ZSkKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAsIG1fd2FpdGluZ0ZvclVJ
UHJvY2VzcyhmYWxzZSkKKyAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCisjZW5kaWYKKyAgICAs
IG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQorICAgICwgbV9zaG91bGRTeW5jUm9vdExheWVyKHRy
dWUpCisgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAmTGF5ZXJUcmVlSG9zdFF0OjpsYXll
ckZsdXNoVGltZXJGaXJlZCkKKyAgICAsIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRy
dWUpCit7CisgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4KKyAgICBtX3Jvb3RMYXllciA9IEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBXZWJHcmFwaGljc0xheWVyKiB3ZWJSb290
TGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIHdlYlJv
b3RMYXllci0+c2V0Um9vdExheWVyKHRydWUpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RM
YXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFF0IHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAg
IG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5z
ZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQud2ViTGF5
ZXJJRCA9IHRvV2ViR3JhcGhpY3NMYXllcih3ZWJSb290TGF5ZXIpLT5pZCgpOworCisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwor
I2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHRvV2ViR3JhcGhpY3NMYXllciht
X3Jvb3RMYXllci5nZXQoKSktPnNldExheWVyVHJlZVRpbGVDbGllbnQodGhpcyk7CisjZW5kaWYK
KyNpZm5kZWYgTkRFQlVHCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1l
KCJMYXllclRyZWVIb3N0UXQgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dlYlBhZ2Ut
PmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kKCkpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBh
Z2UtPnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLmdldCgpKTsKKworICAgIGlmIChtX3dlYlBhZ2UtPmhhc1BhZ2VPdmVybGF5
KCkpCisgICAgICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0TGF5ZXJGbHVzaFNjaGVk
dWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCit7CisgICAgaWYgKG1fbGF5
ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1c2hpbmdFbmFibGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxheWVyRmx1
c2hpbmdFbmFibGVkOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RRdDo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1f
bGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXll
ckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQoreworICAgIG1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZs
dXNoOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
V2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICAvLyBBZGQgdGhl
IGFjY2VsZXJhdGVkIGxheWVyIHRyZWUgaGllcmFyY2h5LgorICAgIGlmIChncmFwaGljc0xheWVy
KQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNz
TGF5ZXIpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6aW52YWxpZGF0ZSgpCit7CisgICAg
Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAg
IG1fcm9vdExheWVyID0gbnVsbHB0cjsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UXQ6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgaWYgKG1fcGFnZU92ZXJs
YXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJl
Y3QocmVjdCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UXQ6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpCit7
CisgICAgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoc2Nyb2xsUmVjdCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQoKQoreworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2l6ZURpZENoYW5nZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKQoreworICAgIG1fcm9vdExheWVyLT5zZXRT
aXplKG5ld1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMg
b2YgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVk
CisgICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCisgICAgRmxvYXRTaXplIG9s
ZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBpZiAobmV3U2l6
ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0
ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWln
aHQoKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAt
IG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYgKG5ld1NpemUuaGVp
Z2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQo
KSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkp
OworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGNy
ZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAg
IGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5
ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3Qp
OworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitib29sIExheWVyVHJlZUhvc3RRdDo6
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBib29sIGRpZFN5bmMgPSBtX3dlYlBh
Z2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRl
SW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
eW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAobV9wYWdlT3Zl
cmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHJldHVybiBkaWRTeW5jOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RRdDo6ZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBX
ZWJMYXllckluZm8mIGluZm8pCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpTeW5jQ29tcG9z
aXRpbmdMYXllclN0YXRlKGluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZERl
bGV0ZUxheWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEZWxl
dGVDb21wb3NpdGluZ0xheWVyKGlkKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpwZXJm
b3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCit7CisgICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRl
ZCgpOworCisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJM
RShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGlu
Z0ZvclVJUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKKyAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IGZhbHNlOworICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIGlm
ICghbV9zaG91bGRTeW5jRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Nob3Vs
ZFN5bmNSb290TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVIb3N0UHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRvV2ViR3JhcGhpY3NMYXll
cihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKKyAgICAgICAgbV9zaG91bGRTeW5jUm9vdExh
eWVyID0gZmFsc2U7CisgICAgfQorCisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVIb3N0UHJveHk6OkRpZFJlbmRlckZyYW1lKCkpOworCisgICAgaWYgKCFtX25vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTGV0IHRo
ZSBkcmF3aW5nIGFyZWEga25vdyB0aGF0IHdlJ3ZlIGRvbmUgYSBmbHVzaCBvZiB0aGUgbGF5ZXIg
Y2hhbmdlcy4KKyAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRy
YXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOworICAgIG1fbm90aWZ5QWZ0
ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxMYXllclRyZWVIb3N0UXQ+KikKK3sKKyAgICBw
ZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6
Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJUKCFtX3BhZ2VPdmVybGF5TGF5
ZXIpOworCisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRo
aXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5hbWUoIkxh
eWVyVHJlZUhvc3RRdCBwYWdlIG92ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5
TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFk
ZENoaWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJs
YXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Cisg
ICAgbV9wYWdlT3ZlcmxheUxheWVyID0gbnVsbHB0cjsKK30KKworaW50NjRfdCBMYXllclRyZWVI
b3N0UXQ6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQoreworICAgIGlmICgh
aW1hZ2UpCisgICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKKyAgICBRUGl4bWFwKiBw
aXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKworICAgIGlmICgh
cGl4bWFwKQorICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBpbnQ2NF90
IGtleSA9IHBpeG1hcC0+Y2FjaGVLZXkoKTsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0
ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7
CisKKyAgICBpZiAoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQo
KSkgeworICAgICAgICArKyhpdC0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICB9
CisKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgpLCBpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxw
aGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApOworICAgIHsKKyAgICAg
ICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0
bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOwor
ICAgIH0KKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBiaXRtYXAt
PmNyZWF0ZUhhbmRsZShoYW5kbGUpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXksIGhhbmRs
ZSkpOworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuYWRkKGtleSwgMSk7
CisgICAgcmV0dXJuIGtleTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbGVhc2VJbWFn
ZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKK3sKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0
dXJuOworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgPT0gbV9kaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaXQtPnNlY29uZC0tOworCisgICAgaWYgKGl0LT5zZWNvbmQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSkpOworfQorCisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0
Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBk
b3VibGUgdGltZSkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1
aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UXQ6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3Jh
cGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBjbGlwUmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRl
eHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChncmFwaGlj
c0xheWVyID09IG1fcGFnZU92ZXJsYXlMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQ
YWdlT3ZlcmxheShncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6OnNob3dEZWJ1Z0JvcmRlcnMoKSBjb25z
dAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dE
ZWJ1Z0JvcmRlcnMoKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6OnNob3dSZXBhaW50Q291
bnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGlu
Z3MoKS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6c3Vw
cG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
KyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpj
cmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5m
byYgdXBkYXRlSW5mbykKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5m
bykpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxh
eWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZVRpbGVG
b3JMYXllcihsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8pKTsKK30KK3ZvaWQgTGF5ZXJUcmVl
SG9zdFF0OjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlVGls
ZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6
c2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHJlY3QpCit7CisgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSBXZWJHcmFw
aGljc0xheWVyOjpsYXllckJ5SUQobGF5ZXJJRCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAg
cmV0dXJuOworICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdChyZWN0KTsKKyAgICBsYXllci0+c2V0
VmlzaWJsZUNvbnRlbnRSZWN0KHJlY3QpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0
VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2Nh
bGUpCit7CisgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIo
bV9yb290TGF5ZXIuZ2V0KCkpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAg
ICBsYXllci0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7CisgICAgdG9XZWJHcmFwaGljc0xheWVy
KG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVj
dChyZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50UmVj
dFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sK
KyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgp
KS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9y
KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAg
bV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQo
KSBjb25zdAoreworICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQ
cm9jZXNzOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZWxzZQogI2lu
Y2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZygpCkBAIC0zNSwzICs0NDAsNCBAQCBib29sIExheWVyVHJlZUhvc3Q6OnN1
cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvTGF5ZXJUcmVlSG9zdFF0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvTGF5ZXJUcmVlSG9zdFF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MjBhYzk2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2lmbmRlZiBMYXllclRyZWVIb3N0UXRfaAorI2RlZmluZSBMYXllclRyZWVIb3N0
UXRfaAorCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyVHJl
ZUhvc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBVcGRhdGVJbmZvOwor
Y2xhc3MgV2ViUGFnZTsKKworY2xhc3MgTGF5ZXJUcmVlSG9zdFF0IDogcHVibGljIExheWVyVHJl
ZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKKyNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkKKyAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJMYXllclRyZWVU
aWxlQ2xpZW50CisjZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXll
clRyZWVIb3N0UXQ+IGNyZWF0ZShXZWJQYWdlKik7CisgICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9z
dFF0KCk7CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmco
KTsKKworICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4
dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRM
YXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5l
eHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29t
cG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVu
dHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lk
IHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3Jv
bGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworICAgIHZpcnR1
YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRJ
bnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92
ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5n
KCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5k
ZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KKyAgICB2
aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSopOworICAgIHZpcnR1
YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7CisKKyNpZiBFTkFCTEUo
VElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXll
cklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcihpbnQgbGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IElu
dFJlY3QmLCBmbG9hdCBzY2FsZSk7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50
UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKGNvbnN0IFdlYkxheWVySW5mbyYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWREZWxldGVMYXllcihXZWJMYXllcklEKTsKKyNlbmRpZgorCitw
cm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsKKworcHJp
dmF0ZToKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0
aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNs
aXBSZWN0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoKSBjb25zdDsKKworICAgIC8vIExheWVy
VHJlZUhvc3RRdAorICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQg
ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpOworICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICB2b2lkIHBl
cmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CisgICAgdm9pZCBzZW5kTGF5ZXJzVG9VSSgpOwor
CisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworCisgICAg
Ly8gVGhlIGxheWVyIHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50Lgor
ICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXI7CisKKyAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYg
dGhlcmUncyBubyBwYWdlIG92ZXJsYXkuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKKworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50PiBtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOworCisgICAgYm9vbCBtX25vdGlmeUFmdGVy
U2NoZWR1bGVkTGF5ZXJGbHVzaDsKKyAgICBib29sIG1faXNWYWxpZDsKKyNpZiBFTkFCTEUoVElM
RURfQkFDS0lOR19TVE9SRSkKKyAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKKyAgICBi
b29sIG1faXNTdXNwZW5kZWQ7CisjZW5kaWYKKyAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJU
cmVlQ29udGV4dDsKKyAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOworICAgIGJvb2wgbV9zaG91
bGRTeW5jUm9vdExheWVyOworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6
VGltZXI8TGF5ZXJUcmVlSG9zdFF0PiopOworICAgIFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhv
c3RRdD4gbV9sYXllckZsdXNoVGltZXI7CisgICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5n
RW5hYmxlZDsKK307CisKK30KKworI2VuZGlmIC8vIExheWVyVHJlZUhvc3RRdF9oCg==
</data>
<flag name="commit-queue"
          id="108622"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110938</attachid>
            <date>2011-10-13 17:09:29 -0700</date>
            <delta_ts>2011-10-13 21:31:35 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-69151-20111013170336.patch</filename>
            <type>text/plain</type>
            <size>103747</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NDI1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcyIEBACisyMDExLTEwLTEzICBObydhbSBS
b3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJd
IFN5bmNocm9uaXplIHRpbGluZyB3aXRoIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE1MQorCisgICAgICAg
IFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgorCisgICAgICAgIE1ha2UgdGhlIHRpbGVkICJu
b24tY29tcG9zaXRlZCIgY29udGVudCBhbmQgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGdvIHRocm91
Z2ggdGhlIHNhbWUKKyAgICAgICAgY29kZSBwYXRoIG9uIFdlYktpdDIuIEluc3RlYWQgb2YgaGF2
aW5nIGEgImRyYXdpbmcgYXJlYSIgdGhhdCBoYW5kbGVzIHRoZSBub24tY29tcG9zaXRlZAorICAg
ICAgICBjb250ZW50IGFuZCBhIHNlcGVyYXRlIGxheWVyIHRyZWUsIHdlIHB1dCBldmVyeXRoaW5n
IGluIGEgbGF5ZXIgdHJlZSwgd2l0aCB0aGUgbm9uLQorICAgICAgICBjb21wb3NpdGVkIGNvbnRl
bnQgYmVpbmcgYSBsYXllciBpbiB0aGUgdHJlZS4KKworICAgICAgICBUaGlzIGFsbG93cyBmaXhp
bmcgc2V2ZXJhbCBpc3N1ZXMgd2l0aCB3ZWJzaXRlcyB0aGF0IGhhdmUgbGFyZ2UgY29udGVudCBh
cmVhcyB0aGF0IGFyZQorICAgICAgICBjb21wb3NpdGVkIG9yIG92ZXJsYXAgd2l0aCBjb21wb3Np
dGVkIGxheWVycy4KKworICAgICAgICBMYXllci10cmVlIHN5bmNocm9uaXphdGlvbiBpcyBkb25l
IGJ5IHBhc3NpbmcgV2ViS2l0MiBtZXNzYWdlcyBiZXR3ZWVuIGEgTGF5ZXJUcmVlSG9zdAorICAg
ICAgICBvbiB0aGUgV2ViUHJvY2VzcyBhbmQgYSBMYXllclRyZWVIb3N0UHJveHkgb24gdGhlIFVJ
IHByb2Nlc3MuIEV2ZXJ5IGxheWVyIGluIHRoZSB0cmVlIGhhcworICAgICAgICBpdHMgb3duIHRp
bGVkIGJhY2tpbmcgc3RvcmUsIGFuZCB1c2VzIHRoZSBMYXllclRyZWVIb3N0IGNvbW11bmljYXRp
b24gY2hhbm5lbCB0byBwYXNzCisgICAgICAgIGNvbnRlbnQgdXAgdG8gdGhlIFVJIHByb2Nlc3Mu
IFRoZSBVSSBwcm9jZXNzIHdpbGwgbGF0ZXIgY3JlYXRlcyBpdHMgb3duIEdyYXBoaWNzTGF5ZXIg
dHJlZSwKKyAgICAgICAgYmFzZWQgb24gVGV4dHVyZU1hcHBlciwgd2hpY2ggY2FuIGJlIHBhaW50
ZWQgZGlyZWN0bHkgd2l0aCBPcGVuR0wuCisKKyAgICAgICAgU2V2ZXJhbCBvcHRpbWl6YXRpb25z
IGFyZSBhdmFpbGFibGUgZm9yIHRoZSBub24tY29tcG9zaXRlZCBsYXllciBhcyB3ZWxsLCBlLmcu
IHNwZWNpZnlpbmcKKyAgICAgICAgYSB0cmFqZWN0b3J5IGFuZCB1cGRhdGluZyB0aGUgdmlzaWJs
ZSByZWN0IHRvZ2V0aGVyIHdpdGggdGhlIGNvbnRlbnQgc2NhbGUuCisKKyAgICAgICAgVGhpcyBj
b2RlIGlzIGN1cnJlbnRseSBkaXNhYmxlZCwgYSBzZXBhcmF0ZSBwYXRjaCB3aWxsIGVuYWJsZSBp
dCBhbmQgZ2x1ZSBpdCB0bworICAgICAgICBRVG91Y2hXZWJQYWdlLgorCisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMucHJvOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmg6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJl
ZC9MYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8u
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckluZm86OmVuY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVySW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJU
cmVlSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9xdC9MYXllclRyZWVDb250ZXh0UXQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0KToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6fkxheWVyVHJlZUNvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb250ZXh0OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b250ZXh0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3
aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojp2aWV3cG9ydFZpc2li
bGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6aXNCYWNraW5nU3Rv
cmVSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6c2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQ
cm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcik6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNz
YWdlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6cGFnZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgor
ICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJl
ZUhvc3RQcm94eU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1w
bDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3Ip
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6cGFpbnRUb0N1cnJlbnRH
TENvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6bGF5ZXJCeUlEKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpyb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UHJveHk6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhv
c3RQcm94eVF0LmNwcDogQWRkZWQuCisgICAgICAgICogV2ViS2l0Mi5wcm86CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6fldlYkdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBo
aWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6cmVt
b3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRD
b250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xh
eWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzU2NhbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Um9vdExheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWpl
Y3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRp
bGVkQmFja2luZ1N0b3JlUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlz
aWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNr
aW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp1
cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZUJ1ZmZl
cnNSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpsYXll
clRyZWVUaWxlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnVw
ZGF0ZUNvbnRlbnRCdWZmZXJzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OnNldExheWVyVHJlZVRpbGVDbGllbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUlt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXll
clRyZWVIb3N0TWVzc2FnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhSW1wbC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZSk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3Ip
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RG
b3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFt
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QubWVzc2FnZXMu
aW46IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVh
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6ZGlkUmVjZWl2ZUxheWVy
VHJlZUhvc3RNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3
aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RRdDo6fkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RR
dDo6TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpz
ZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2gp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFJvb3RDb21wb3NpdGluZ0xh
eWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNO
ZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2Nyb2xsTm9u
Q29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpm
b3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNpemVEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZEluc3RhbGxQYWdl
T3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxs
UGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFBhZ2VP
dmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpm
bHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OmRpZERlbGV0ZUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UXQ6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6cGFpbnRDb250ZW50cyk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGVUaWxlKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFF0OjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnJlbmRlck5leHRG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVw
ZGF0ZXNBbGxvd2VkKToKKwogMjAxMS0xMC0xMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBQREYgRG9jdW1lbnRzIGF0IGVwby5vcmcgbG9vayB2
ZXJ5IGJsdXJyeQpJbmRleDogU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybwkocmV2aXNpb24gOTc0
MjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8JKHdvcmtpbmcgY29weSkK
QEAgLTkyLDYgKzkyLDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgQXV0aGVudGljYXRp
b25NYW5hZ2VyLm1lc3NhZ2VzLmluIFwKICAgICBEb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluIFwK
ICAgICBEcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluIFwKKyAgICBMYXllclRyZWVIb3N0UHJv
eHkubWVzc2FnZXMuaW4gXAogICAgIFBsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbiBc
CiAgICAgUGx1Z2luUHJvY2Vzcy5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb24ubWVzc2FnZXMuaW4gXApAQCAtMTE2LDYgKzExNyw3IEBAIE1FU1NBR0VfUkVDRUlWRVJT
ID0gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluIFwKICAgICBXZWJGdWxs
U2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlL0RyYXdpbmdBcmVh
Lm1lc3NhZ2VzLmluIFwKKyAgICBXZWJQYWdlL0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4gXAog
ICAgIFdlYlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4gXAogICAgIFdlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBcCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnBybwkocmV2aXNpb24gOTc0MjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBy
bwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQCBXRUJLSVQxX1NPVVJDRVNfU0hBUkVE
X1dJVEhfV0VCS0lUMiA9IFwKIFdFQktJVDJfR0VORVJBVEVEX0hFQURFUlMgPSBcCiAgICAgJCRX
RUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9BdXRoZW50aWNhdGlvbk1hbmFnZXJNZXNzYWdl
cy5oIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0Rvd25sb2FkUHJveHlN
ZXNzYWdlcy5oIFwKKyAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJl
ZUhvc3RNZXNzYWdlcy5oIFwKKyAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xh
eWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmggXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09V
UkNFU19ESVIvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlcy5oIFwKICAgICAkJFdFQktJ
VDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmgg
XAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlcy5oIFwKQEAgLTY3LDYgKzY5LDggQEAgV0VCS0lUMl9HRU5FUkFURURfU09V
UkNFUyA9IFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0Rvd25sb2FkUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNf
RElSL0RyYXdpbmdBcmVhTWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRXRUJLSVQyX0dFTkVS
QVRFRF9TT1VSQ0VTX0RJUi9EcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCisg
ICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9MYXllclRyZWVIb3N0TWVzc2FnZVJl
Y2VpdmVyLmNwcCBcCisgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9MYXllclRy
ZWVIb3N0UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVE
X1NPVVJDRVNfRElSL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZVJlY2VpdmVyLmNwcCBc
CiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5Db250cm9sbGVyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNf
RElSL1BsdWdpblByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKQEAgLTE2Miw2ICsxNjYsNyBA
QCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvV2ViR3JhcGhpY3NDb250ZXh0LmggXAogICAgIFNo
YXJlZC9XZWJIaXRUZXN0UmVzdWx0LmggXAogICAgIFNoYXJlZC9XZWJJbWFnZS5oIFwKKyAgICBT
aGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIFwKICAgICBTaGFyZWQvV2ViTmF2aWdhdGlvbkRhdGFT
dG9yZS5oIFwKICAgICBTaGFyZWQvV2ViTnVtYmVyLmggXAogICAgIFNoYXJlZC9XZWJPcGVuUGFu
ZWxQYXJhbWV0ZXJzLmggXApAQCAtMzE4LDYgKzMyMyw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRXJyb3JzLmggXAogICAgIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIFwKQEAgLTQwMSw2ICs0MDcsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBTaGFyZWQvV2ViSGl0VGVzdFJlc3VsdC5jcHAgXAogICAgIFNoYXJlZC9X
ZWJLZXlib2FyZEV2ZW50LmNwcCBcCiAgICAgU2hhcmVkL1dlYkltYWdlLmNwcCBcCisgICAgU2hh
cmVkL1dlYkxheWVyVHJlZUluZm8uY3BwIFwKICAgICBTaGFyZWQvV2ViTW91c2VFdmVudC5jcHAg
XAogICAgIFNoYXJlZC9XZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmNwcCBcCiAgICAgU2hhcmVkL1dl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwIFwKQEAgLTQ4OCw2ICs0OTUsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmNwcCBcCiAgICAgVUlQ
cm9jZXNzL1dlYlVJQ2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuY3Bw
IFwKKyAgICBVSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIFwKICAgICBVSVBy
b2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0R2Vz
dHVyZVJlY29nbml6ZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2du
aXplci5jcHAgXApAQCAtNTY4LDYgKzU3Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuY3BwIFwKKyAgICBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuY3BwIFwKICAgICBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgXApJbmRleDogU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCShyZXZpc2lvbiA5NzQy
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgZW51bSBNZXNzYWdlQ2xhc3MgewogICAgIE1lc3Nh
Z2VDbGFzc0F1dGhlbnRpY2F0aW9uTWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NEcmF3aW5nQXJl
YSwKICAgICBNZXNzYWdlQ2xhc3NJbmplY3RlZEJ1bmRsZSwKKyAgICBNZXNzYWdlQ2xhc3NMYXll
clRyZWVIb3N0LAogICAgIE1lc3NhZ2VDbGFzc1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLAog
ICAgIE1lc3NhZ2VDbGFzc1dlYkNvb2tpZU1hbmFnZXIsCiAgICAgTWVzc2FnZUNsYXNzV2ViRGF0
YWJhc2VNYW5hZ2VyLApAQCAtNTQsNiArNTUsNyBAQCBlbnVtIE1lc3NhZ2VDbGFzcyB7CiAgICAg
Ly8gTWVzc2FnZXMgc2VudCBieSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIFVJIHByb2Nlc3MuCiAg
ICAgTWVzc2FnZUNsYXNzRG93bmxvYWRQcm94eSwKICAgICBNZXNzYWdlQ2xhc3NEcmF3aW5nQXJl
YVByb3h5LAorICAgIE1lc3NhZ2VDbGFzc0xheWVyVHJlZUhvc3RQcm94eSwKICAgICBNZXNzYWdl
Q2xhc3NXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LAogICAgIE1lc3NhZ2VDbGFzc1dl
YkNvbnRleHQsCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29udGV4dExlZ2FjeSwKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJKHJldmlzaW9uIDk3NDI1KQor
KysgU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zODIsNiArMzgyLDggQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAg
ICAgICdXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyJzogW10sCiAgICAg
ICAgICdXZWJLaXQ6OldlYkNvbnRleHRVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwKICAgICAgICAg
J1dlYktpdDo6V2ViR2VzdHVyZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKKyAgICAgICAgJ1dl
YktpdDo6V2ViTGF5ZXJJRCc6IFsnIldlYkxheWVyVHJlZUluZm8uaCInXSwKKyAgICAgICAgJ1dl
YktpdDo6V2ViTGF5ZXJJbmZvJzogWyciV2ViTGF5ZXJUcmVlSW5mby5oIiddLAogICAgICAgICAn
V2ViS2l0OjpXZWJLZXlib2FyZEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAgJ1dl
YktpdDo6V2ViTW91c2VFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCiAgICAgICAgICdXZWJLaXQ6
OldlYlRvdWNoRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLApJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCShyZXZpc2lvbiA5NzQyNSkKKysrIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDggQEAgcHVibGljOgogICAgIHVpbnQzMl90IGNvbnRleHRJRDsKICNlbGlmIFBMQVRGT1JNKFdJ
TikKICAgICBIV05EIHdpbmRvdzsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIHVpbnQzMl90IHdl
YkxheWVySUQ7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
TGF5ZXJUcmVlSW5mby5jcHAJKHJldmlzaW9uIDk3NDI1KQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBA
CiAKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAKKyNpbmNsdWRlICJBcmd1bWVudHMu
aCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKIApAQCAtMzMsMzUgKzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdm9pZCBX
ZWJMYXllckluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNv
bnN0CiB7CiAgICAgLy8gV2UgaGF2ZSB0byBkaXZpZGUgaXQgdG8gc2V2ZXJhbCBsaW5lcywgYmVj
YXVzZSBDb3JlSVBDOjpJbi9PdXQgdGFrZXMgYSBtYXhpbXVtIG9mIDEwIGFyZ3VtZW50cy4KLSAg
ICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4oaWQsIG5hbWUsIHBhcmVudCwgY2hpbGRyZW4s
IGZsYWdzLCByZXBsaWNhLCBtYXNrKSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6Oklu
KGlkLCBuYW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGljYSwgbWFzaywgaW1hZ2VC
YWNraW5nU3RvcmVJRCkpOwogICAgIGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihwb3MsIHNp
emUsIHRyYW5zZm9ybSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQsIGNoaWxkcmVuVHJhbnNmb3JtLCBj
b250ZW50c1JlY3QpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoaW1hZ2VCYWNraW5nU3RvcmUgPyBp
bWFnZUJhY2tpbmdTdG9yZS0+c2l6ZSgpIDogSW50U2l6ZSgpKTsKLQotICAgIGlmICghaW1hZ2VC
YWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlIGltYWdlSGFuZGxlOwotICAgIGlmIChpbWFnZUJhY2tpbmdTdG9yZS0+Y3JlYXRlSGFuZGxl
KGltYWdlSGFuZGxlKSkKLSAgICAgICAgaW1hZ2VIYW5kbGUuZW5jb2RlKGVuY29kZXIpOwogfQog
CiBib29sIFdlYkxheWVySW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgV2ViTGF5ZXJJbmZvJiBpbmZvKQogewogICAgIC8vIFdlIGhhdmUgdG8gZGl2aWRlIGl0
IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0IHRha2VzIGEgbWF4aW11
bSBvZiAxMCBhcmd1bWVudHMuCi0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0
KGluZm8uaWQsIGluZm8ubmFtZSwgaW5mby5wYXJlbnQsIGluZm8uY2hpbGRyZW4sIGluZm8uZmxh
Z3MsIGluZm8ucmVwbGljYSwgaW5mby5tYXNrKSkpCisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
Q29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwgaW5mby5wYXJlbnQsIGluZm8uY2hpbGRy
ZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5mby5tYXNrLCBpbmZvLmltYWdlQmFja2lu
Z1N0b3JlSUQpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVj
b2RlKENvcmVJUEM6Ok91dChpbmZvLnBvcywgaW5mby5zaXplLCBpbmZvLnRyYW5zZm9ybSwgaW5m
by5vcGFjaXR5LCBpbmZvLmFuY2hvclBvaW50LCBpbmZvLmNoaWxkcmVuVHJhbnNmb3JtLCBpbmZv
LmNvbnRlbnRzUmVjdCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbnRTaXplIGlt
YWdlQmFja2luZ1N0b3JlU2l6ZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShpbWFnZUJhY2tp
bmdTdG9yZVNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGltYWdlQmFja2lu
Z1N0b3JlU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUgaW1hZ2VIYW5kbGU7Ci0gICAgaWYgKFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlOjpkZWNvZGUoZGVjb2RlciwgaW1hZ2VIYW5kbGUpKQotICAgICAgICBpbmZvLmltYWdl
QmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaW1hZ2VIYW5kbGUpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJU
cmVlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRy
ZWVJbmZvLmgJKHJldmlzaW9uIDk3NDI1KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxh
eWVyVHJlZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB0eXBlZGVmIHVpbnQzMl90IFdl
YkxheWVySUQ7CitlbnVtIHsgSW52YWxpZFdlYkxheWVySUQgPSAwIH07CiAKIHN0cnVjdCBXZWJM
YXllclVwZGF0ZUluZm8gewogICAgIFdlYkxheWVyVXBkYXRlSW5mbygpIHsgfQpAQCAtNTQsNiAr
NTUsNyBAQCBzdHJ1Y3QgV2ViTGF5ZXJJbmZvIHsKICAgICBXZWJMYXllcklEIHBhcmVudDsKICAg
ICBXZWJMYXllcklEIHJlcGxpY2E7CiAgICAgV2ViTGF5ZXJJRCBtYXNrOworICAgIGludDY0X3Qg
aW1hZ2VCYWNraW5nU3RvcmVJRDsKIAogICAgIEZsb2F0UG9pbnQgcG9zOwogICAgIEZsb2F0UG9p
bnQzRCBhbmNob3JQb2ludDsKQEAgLTcxLDYgKzczLDggQEAgc3RydWN0IFdlYkxheWVySW5mbyB7
CiAgICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOwogICAgICAgICAgICAgYm9vbCBw
cmVzZXJ2ZXMzRCA6IDE7CiAgICAgICAgICAgICBib29sIGNvbnRlbnROZWVkc0Rpc3BsYXkgOiAx
OworICAgICAgICAgICAgYm9vbCBpbWFnZUlzVXBkYXRlZDogMTsKKyAgICAgICAgICAgIGJvb2wg
aXNSb290TGF5ZXI6IDE7CiAgICAgICAgIH07CiAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsK
ICAgICB9OwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNv
bnRleHRRdC5jcHAJKHJldmlzaW9uIDk3NDI1KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL3F0
L0xheWVyVHJlZUNvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDQxICsyNiwzOCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKIAot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgi
CisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBM
YXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0KCkKKyAgICA6IHdlYkxheWVySUQoMCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiBMYXllclRyZWVDb250ZXh0Ojp+TGF5ZXJU
cmVlQ29udGV4dCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXllclRy
ZWVDb250ZXh0OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3QKK3ZvaWQg
TGF5ZXJUcmVlQ29udGV4dDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
cikgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGVuY29kZXItPmVuY29kZSh3
ZWJMYXllcklEKTsKIH0KIAotYm9vbCBMYXllclRyZWVDb250ZXh0OjpkZWNvZGUoQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKiwgTGF5ZXJUcmVlQ29udGV4dCYpCitib29sIExheWVyVHJlZUNvbnRl
eHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIExheWVyVHJlZUNv
bnRleHQmIGNvbnRleHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKGNvbnRleHQud2ViTGF5ZXJJRCk7CiB9CiAK
IGJvb2wgTGF5ZXJUcmVlQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdlYkxheWVySUQ7CiB9CiAK
LWJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiwgY29uc3QgTGF5ZXJUcmVl
Q29udGV4dCYpCitib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYSwgY29u
c3QgTGF5ZXJUcmVlQ29udGV4dCYgYikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBhLndlYkxheWVySUQgPT0gYi53ZWJMYXllcklEOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvRHJhd2luZ0FyZWFQcm94eS5jcHAJKHJldmlzaW9uIDk3NDI1KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXll
clRyZWVIb3N0UHJveHkuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CkBAIC01Myw0ICs1NywxNiBAQCB2b2lkIERyYXdpbmdBcmVhUHJv
eHk6OnNldFNpemUoY29uc3QgSW50CiAgICAgc2l6ZURpZENoYW5nZSgpOwogfQogCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCit2b2lkIERy
YXdpbmdBcmVhUHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+
c2V0Vmlld05lZWRzRGlzcGxheSh2aWV3cG9ydFZpc2libGVSZWN0KCkpOworfQorCitXZWJDb3Jl
OjpJbnRSZWN0IERyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRzUmVjdCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV93ZWJQYWdlUHJveHktPnZpZXdTaXpl
KCkpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCShyZXZpc2lvbiA5NzQyNSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDkgKzI3LDExIEBACiAjaWZuZGVmIERyYXdpbmdBcmVhUHJveHlfaAogI2RlZmlu
ZSBEcmF3aW5nQXJlYVByb3h5X2gKIAorI2luY2x1ZGUgPENvcmVJUEMvTWVzc2FnZUlELmg+CiAj
aW5jbHVkZSAiRHJhd2luZ0FyZWFJbmZvLmgiCi0jaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5j
bHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKICNpZiBQTEFU
Rk9STShRVCkKQEAgLTQ1LDEzICs0NywxNyBAQCBuYW1lc3BhY2UgQ29yZUlQQyB7CiB9CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnRSZWN0OworICAgIGNsYXNzIEZsb2F0UG9p
bnQ7CisgICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiB9CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBjbGFzcyBMYXllclRyZWVDb250ZXh0OworY2xhc3MgTGF5ZXJUcmVlSG9zdFByb3h5
OwogY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdlYkxheWVyVHJlZUluZm87CitjbGFzcyBXZWJM
YXllclVwZGF0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CiAKIGNsYXNzIERyYXdpbmdBcmVh
UHJveHkgewpAQCAtNzcsNiArODMsMjQgQEAgcHVibGljOgogICAgIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICB2b2lkIHNldFNpemUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9m
ZnNldCk7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJF
X01BUFBFUikKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGNv
bnRlbnRzUmVjdCgpOyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRzUmVj
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tpbmdTdG9yZVJlYWR5KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4
dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpIHsg
fQorCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgdmlydHVhbCB2b2lkIHNl
dFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aXNp
YmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQs
IGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdl
YktpdDo6VXBkYXRlSW5mbyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlRm9yTGF5
ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0
aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqIGFyZ3VtZW50cykgeyB9CisKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBt
X3dlYlBhZ2VQcm94eTsgfQorI2VuZGlmCisjZW5kaWYKIHByb3RlY3RlZDoKICAgICBleHBsaWNp
dCBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZSwgV2ViUGFnZVByb3h5Kik7CiAKQEAg
LTg2LDYgKzExMCwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7
CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIE93blB0cjxMYXll
clRyZWVIb3N0UHJveHk+IG1fbGF5ZXJUcmVlSG9zdFByb3h5OworI2VuZGlmCisKIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoKSA9IDA7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAkocmV2aXNp
b24gOTc0MjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUlt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJM
YXllclRyZWVIb3N0UHJveHkuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0zMjgsOCArMzMyLDM4IEBAIHZvaWQgRHJhd2luZ0Fy
ZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmEKICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7
CiAgICAgbV9sYXllclRyZWVDb250ZXh0ID0gbGF5ZXJUcmVlQ29udGV4dDsKICAgICBtX3dlYlBh
Z2VQcm94eS0+ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0
KTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RQcm94
eSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHkgPSBhZG9wdFB0cihuZXcgTGF5ZXJUcmVl
SG9zdFByb3h5KHRoaXMpKTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlSG9z
dFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpN
ZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykK
K3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dFByb3h5LT5kaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShjb25uZWN0aW9uLCBt
ZXNzYWdlSUQsIGFyZ3VtZW50cyk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnNl
dFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aXNp
YmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSkKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0
UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5zZXRWaXNpYmxlQ29udGVudHNS
ZWN0QW5kU2NhbGUodmlzaWJsZUNvbnRlbnRzUmVjdCwgc2NhbGUpOworfQorCit2b2lkIERyYXdp
bmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKIH0KIAor
dm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAo
bV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5wYWlu
dFRvQ3VycmVudEdMQ29udGV4dChtYXRyaXgsIG9wYWNpdHkpOworfQorI2VuZGlmCisKIHZvaWQg
RHJhd2luZ0FyZWFQcm94eUltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCiB7
CiAgICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCShyZXZp
c2lvbiA5NzQyNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBAIGNsYXNzIFJlZ2lvbjsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKKwogY2xhc3Mg
RHJhd2luZ0FyZWFQcm94eUltcGwgOiBwdWJsaWMgRHJhd2luZ0FyZWFQcm94eSB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eUltcGw+IGNyZWF0ZShXZWJQ
YWdlUHJveHkqKTsKQEAgLTc1LDYgKzc3LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBleGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKIAogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gIW1fbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5
KCk7IH0KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
dmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRW
aXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2Vi
Q29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKKyAgICB2b2lkIGRp
ZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBD
b3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworI2VuZGlmCiAj
ZWxzZQogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUhvc3RQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXllclRyZWVIb3N0UHJveHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzUg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKyNk
ZWZpbmUgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgor
I2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJNZXNzYWdlUXVldWUuaCIK
KyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2Vi
TGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViTGF5ZXJJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZv
OworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTGF5ZXJUcmVlTWVzc2FnZVRv
UmVuZGVyZXI7CisKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBHcmFwaGljc0xh
eWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQ
cm94eSopOworICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOworICAgIHZvaWQgc3lu
Y0NvbXBvc2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGRl
bGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRSb290Q29tcG9z
aXRpbmdMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOworICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBmbG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5k
U2NhbGUoY29uc3QgSW50UmVjdCYsIGZsb2F0KTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50
UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOworI2lmIEVOQUJMRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQorICAgIHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICB2b2lk
IHN3YXBDb250ZW50QnVmZmVycygpOworICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKKyAgICB2
b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2Vi
S2l0OjpVcGRhdGVJbmZvJik7CisgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZvaWQgcmVt
b3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2b2lkIGNyZWF0
ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUmKTsKKyAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvckxheWVyKFdl
YkxheWVySUQsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7Cisj
ZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRl
TGF5ZXIoV2ViTGF5ZXJJRCk7CisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViTGF5
ZXJJRCBpZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xheWVy
cy5nZXQoaWQpOyB9CisgICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9y
b290TGF5ZXIuZ2V0KCk7IH0KKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9u
U3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQ
aGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQorCisgICAgUnVuTG9vcDo6VGltZXI8
TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2FuaW1hdGlvblRpbWVyOworICAgIERyYXdpbmdBcmVhUHJv
eHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklE
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgSW50UmVjdCBtX3Zpc2li
bGVDb250ZW50c1JlY3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworCisgICAgTWVzc2Fn
ZVF1ZXVlPExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyPiBtX21lc3NhZ2VzVG9SZW5kZXJlcjsK
KyAgICB2b2lkIHB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRv
UmVuZGVyZXI+KTsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8VGV4dHVy
ZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOworI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8SW50UG9pbnQsIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IFRpbGVk
SW1hZ2U7CisgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwIG1fbm9kZVZpc3VhbENv
bnRlbnRzUmVjdE1hcDsKKyAgICBIYXNoTWFwPGludCwgaW50PiBtX3RpbGVUb05vZGVUaWxlOwor
ICAgIGludCByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3Q7CisgICAg
SGFzaE1hcDxpbnQ2NF90LCBUaWxlZEltYWdlPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsK
KworICAgIHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7CisgICAgdm9pZCBzeW5jaHJvbml6
ZVZpZXdwb3J0KCk7CisgICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lk
IHNldFJvb3RMYXllcklEKFdlYkxheWVySUQpOworICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVy
cyhjb25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwg
aW50LCBmbG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7
CisgICAgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFJlY3QmLCBjb25zdCBRSW1hZ2UmKTsKKyAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0
X3QsIGNvbnN0IFFJbWFnZSYpOworICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOworICAg
IHZvaWQgYXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90
IGltYWdlSUQpOworICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGVuc3Vy
ZVJvb3RMYXllcigpOworICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7CisKKyNlbmRp
ZgorCisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZlY3RvcjxX
ZWJMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXllcnM7Cisg
ICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOworICAgIGludCBtX2lkOworfTsKKworfQorCisj
ZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVz
c2FnZXMuaW4JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKyMKKyMgICAgQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
IworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
IyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisjICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJM
RShUSUxFRF9CQUNLSU5HX1NUT1JFKQorbWVzc2FnZXMgLT4gTGF5ZXJUcmVlSG9zdFByb3h5IHsK
KyAgICBTeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKFdlYktpdDo6V2ViTGF5ZXJJbmZvIGxheWVy
SW5mbykKKyAgICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKKyAgICBEZWxl
dGVDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQorICAgIENyZWF0ZVRpbGVGb3JMYXllcih1
aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJLaXQ6OlVwZGF0ZUluZm8gdXBkYXRlSW5m
bykKKyAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwg
V2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgUmVtb3ZlVGlsZUZvckxheWVyKHVp
bnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCisgICAgQ3JlYXRlRGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxl
KQorICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKKyAgICBE
aWRSZW5kZXJGcmFtZSgpCit9CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA5NzQyNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eS5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHku
aCIKICNpbmNsdWRlICJGaW5kSW5kaWNhdG9yLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFBy
b3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlE
LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgpAQCAtMTQwNSw2ICsxNDA2
LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShDb3IKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBpZiAo
bWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc0xheWVyVHJlZUhvc3RQcm94eT4oKSkg
eworICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVz
c2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG1lc3NhZ2VJ
RC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NXZWJJbnNwZWN0b3JQcm94eT4oKSkgewogICAgICAg
ICBpZiAoV2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvciA9IHRoaXMtPmluc3BlY3RvcigpKQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9z
dFByb3h5UXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OTQgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKwor
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3RNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk1haW5UaHJlYWQu
aCIKKyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVl
SW5mby5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eS5oIgorI2luY2x1ZGUgInRleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgor
I2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmgiCisjaW5jbHVkZSA8UURhdGVUaW1lPgorI2luY2x1ZGUgPGNhaXJvL09w
ZW5HTFNoaW1zLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBMYXllclRyZWVNZXNz
YWdlVG9SZW5kZXJlciB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgRGVsZXRl
TGF5ZXIsCisgICAgICAgIENyZWF0ZVRpbGUsCisgICAgICAgIFJlbW92ZVRpbGUsCisgICAgICAg
IFVwZGF0ZVRpbGUsCisgICAgICAgIENyZWF0ZUltYWdlLAorICAgICAgICBEZXN0cm95SW1hZ2Us
CisgICAgICAgIFN5bmNMYXllclBhcmFtZXRlcnMsCisgICAgICAgIEZsdXNoTGF5ZXJDaGFuZ2Vz
LAorICAgICAgICBTZXRSb290TGF5ZXIKKyAgICB9OworICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkg
Y29uc3QgPSAwOworfTsKKwordGVtcGxhdGU8Y2xhc3MgTWVzc2FnZURhdGEsIExheWVyVHJlZU1l
c3NhZ2VUb1JlbmRlcmVyOjpUeXBlIG1lc3NhZ2VUeXBlPgorY2xhc3MgTGF5ZXJUcmVlTWVzc2Fn
ZVRvUmVuZGVyZXJXaXRoRGF0YSA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtZXNzYWdl
VHlwZTsgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI+IGNyZWF0ZShjb25zdCBNZXNzYWdlRGF0YSYgZGF0YSA9IE1lc3NhZ2VEYXRhKCkpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVy
V2l0aERhdGEoZGF0YSkpOworICAgIH0KKworICAgIGNvbnN0IE1lc3NhZ2VEYXRhJiBkYXRhKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGE7CisgICAgfQorCitwcml2YXRlOgor
ICAgIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGEoY29uc3QgTWVzc2FnZURhdGEm
IGRhdGEpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIE1lc3Nh
Z2VEYXRhIG1fZGF0YTsKK307CisKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDcmVhdGVUaWxlTWVz
c2FnZURhdGEgeworICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKKyAgICBpbnQgcmVtb3RlVGlsZUlE
OworICAgIGZsb2F0IHNjYWxlOworfTsKKworc3RydWN0IFVwZGF0ZVRpbGVNZXNzYWdlRGF0YSB7
CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworICAgIGludCByZW1vdGVUaWxlSUQ7CisgICAgSW50
UmVjdCBzb3VyY2VSZWN0OworICAgIEludFJlY3QgdGFyZ2V0UmVjdDsKKyAgICBRSW1hZ2UgaW1h
Z2U7Cit9OworCitzdHJ1Y3QgUmVtb3ZlVGlsZU1lc3NhZ2VEYXRhIHsKKyAgICBXZWJMYXllcklE
IGxheWVySUQ7CisgICAgaW50IHJlbW90ZVRpbGVJRDsKK307CisKK3N0cnVjdCBDcmVhdGVJbWFn
ZU1lc3NhZ2VEYXRhIHsKKyAgICBpbnQ2NF90IGltYWdlSUQ7CisgICAgUUltYWdlIGltYWdlOwor
fTsKKworc3RydWN0IERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhIHsKKyAgICBpbnQ2NF90IGltYWdl
SUQ7Cit9OworCitzdHJ1Y3QgU3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2VEYXRhIHsKKyAgICBX
ZWJMYXllckluZm8gbGF5ZXJJbmZvOworfTsKKworc3RydWN0IEVtcHR5TWVzc2FnZURhdGEgeyB9
Oworc3RydWN0IERlbGV0ZUxheWVyTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySUQgbGF5ZXJJ
RDsKK307CitzdHJ1Y3QgU2V0Um9vdExheWVyTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySUQg
bGF5ZXJJRDsKK307CisKK2NsYXNzIENyZWF0ZVRpbGVNZXNzYWdlCisgICAgICAgIDogcHVibGlj
IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8Q3JlYXRlVGlsZU1lc3NhZ2VEYXRh
LCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Q3JlYXRlVGlsZT4geyB9OworY2xhc3MgVXBk
YXRlVGlsZU1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXJXaXRoRGF0YTxVcGRhdGVUaWxlTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRl
cmVyOjpVcGRhdGVUaWxlPiB7IH07CitjbGFzcyBSZW1vdmVUaWxlTWVzc2FnZQorICAgICAgICA6
IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPFJlbW92ZVRpbGVNZXNz
YWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92ZVRpbGU+IHsgfTsKK2Ns
YXNzIENyZWF0ZUltYWdlTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdl
VG9SZW5kZXJlcldpdGhEYXRhPENyZWF0ZUltYWdlTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyOjpDcmVhdGVJbWFnZT4geyB9OworY2xhc3MgRGVzdHJveUltYWdlTWVzc2Fn
ZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPERl
c3Ryb3lJbWFnZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6RGVzdHJv
eUltYWdlPiB7IH07CitjbGFzcyBGbHVzaExheWVyQ2hhbmdlc01lc3NhZ2UKKyAgICAgICAgOiBw
dWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxFbXB0eU1lc3NhZ2VEYXRh
LCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Rmx1c2hMYXllckNoYW5nZXM+IHsgfTsKK2Ns
YXNzIFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJl
ZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8U3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2VEYXRh
LCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6U3luY0xheWVyUGFyYW1ldGVycz4geyB9Owor
Y2xhc3MgRGVsZXRlTGF5ZXJNZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyV2l0aERhdGE8RGVsZXRlTGF5ZXJNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVz
c2FnZVRvUmVuZGVyZXI6OkRlbGV0ZUxheWVyPiB7IH07CitjbGFzcyBTZXRSb290TGF5ZXJNZXNz
YWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8
U2V0Um9vdExheWVyTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpTZXRS
b290TGF5ZXI+IHsgfTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBMYXllclRyZWVI
b3N0UHJveHk6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBHcmFwaGlj
c0xheWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcih0aGlzKTsK
KyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobmV3TGF5
ZXIpOworICAgIG5vZGUtPnNldElEKGxheWVySUQpOworICAgIG5vZGUtPnNldFRpbGVPd25lcnNo
aXAoVGV4dHVyZU1hcHBlck5vZGU6OkV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpOworICAgIHJldHVy
biBhZG9wdFB0cihuZXdMYXllcik7Cit9CisKK0xheWVyVHJlZUhvc3RQcm94eTo6TGF5ZXJUcmVl
SG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCisgICAgOiBtX2Fu
aW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkxheWVyVHJlZUhvc3RQcm94eTo6
dXBkYXRlVmlld3BvcnQpCisgICAgLCBtX2RyYXdpbmdBcmVhUHJveHkoZHJhd2luZ0FyZWFQcm94
eSkKKyAgICAsIG1fcm9vdExheWVySUQoMCkKK3sKK30KKworTGF5ZXJUcmVlSG9zdFByb3h5Ojp+
TGF5ZXJUcmVlSG9zdFByb3h5KCkKK3sKK30KKworLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBi
ZSByZWVudHJhbnQuCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENv
bnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkK
K3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0g
VGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKKworICAgIHN5bmNSZW1vdGVDb250ZW50KCk7Cisg
ICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOworICAgIGlm
ICghY3VycmVudFJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4dHVyZU1hcHBl
ck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGN1cnJlbnRSb290TGF5ZXIpOworCisg
ICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBHTGludCB2aWV3cG9ydFs0XTsK
KyAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCk7CisgICAgSW50UmVjdCB2
aWV3cG9ydFJlY3Qodmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCB2aWV3cG9ydFsyXSwgdmlld3Bv
cnRbM10pOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0Vmlld3BvcnRTaXplKEludFNpemUodmll
d3BvcnRbMl0sIHZpZXdwb3J0WzNdKSk7CisgICAgbm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3Rl
eHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygp
OworICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CisKKyAgICBpZiAoY3VycmVu
dFJvb3RMYXllci0+b3BhY2l0eSgpICE9IG9wYWNpdHkgfHwgY3VycmVudFJvb3RMYXllci0+dHJh
bnNmb3JtKCkgIT0gbWF0cml4KSB7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNp
dHkob3BhY2l0eSk7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9ybShtYXRy
aXgpOworICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKTsKKyAgICB9CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZTo6Tm9kZVJlY3RN
YXAgbm9kZVZpc3VhbENvbnRlbnRzUmVjdE1hcDsKKyAgICBpZiAobm9kZS0+Y29sbGVjdFZpc2li
bGVDb250ZW50c1JlY3RzKG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAsIHZpZXdwb3J0UmVjdCkp
IHsKKyAgICAgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwOjppdGVyYXRvciBlbmRJ
dGVyYXRvciA9IG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAuZW5kKCk7CisgICAgICAgIGZvciAo
VGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwOjppdGVyYXRvciBpdCA9IG5vZGVWaXN1YWxD
b250ZW50c1JlY3RNYXAuYmVnaW4oKTsgaXQgIT0gZW5kSXRlcmF0b3I7ICsraXQpIHsKKyAgICAg
ICAgICAgIFdlYkxheWVySUQgbGF5ZXJJRCA9IGl0LT5maXJzdC0+aWQoKTsKKyAgICAgICAgICAg
IC8vIGF2b2lkIHVwZGF0aW5nIG5vbi1zeW5jZWQgcm9vdCBsYXllcgorICAgICAgICAgICAgaWYg
KCFsYXllcklEKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgSW50UmVj
dCB2aXNpYmxlUmVjdCA9IEludFJlY3QoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBzZXRWaXNp
YmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIobGF5ZXJJRCwgdmlzaWJsZVJlY3QpOworICAgICAgICB9
CisgICAgfQorICAgIG5vZGUtPnBhaW50KCk7CisKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBh
aW50aW5nKCk7CisKKyAgICBpZiAobm9kZS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0Fu
aW1hdGlvbnMoKSkKKyAgICAgICAgdXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKK3sKKyAgICBtX2RyYXdpbmdBcmVhUHJveHkt
PnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNp
YmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklELCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVy
KGxheWVySUQsIHJlY3QpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwor
fQorCitpbnQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50
IHRpbGVJRCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPGludCwgaW50Pjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RpbGVUb05vZGVUaWxlLmZpbmQodGlsZUlEKTsKKyAgICBpZiAoaXQgPT0gbV90aWxl
VG9Ob2RlVGlsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGl0LT5zZWNv
bmQ7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNv
bnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvKQoreworICAgIFdlYkxheWVySUQgaWQgPSBsYXll
ckluZm8uaWQ7CisgICAgZW5zdXJlTGF5ZXIoaWQpOworICAgIExheWVyTWFwOjppdGVyYXRvciBp
dCA9IG1fbGF5ZXJzLmZpbmQoaWQpOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNl
Y29uZDsKKworICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1lKTsKKworICAgIGxheWVy
LT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLnJlcGxpY2EpKTsKKyAg
ICBsYXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChsYXllckluZm8ubWFzaykpOworCisgICAg
bGF5ZXItPnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOworICAgIGxheWVyLT5zZXRTaXplKGxh
eWVySW5mby5zaXplKTsKKyAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVySW5mby50cmFuc2Zv
cm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8uYW5jaG9yUG9pbnQpOwor
ICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8uY2hpbGRyZW5UcmFuc2Zv
cm0pOworICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJJbmZvLmJhY2tmYWNl
VmlzaWJsZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxheWVySW5mby5jb250ZW50
c09wYXF1ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllckluZm8uY29udGVudHNS
ZWN0KTsKKyAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQp
OworCisgICAgaWYgKGxheWVySW5mby5pbWFnZUlzVXBkYXRlZCkKKyAgICAgICAgYXNzaWduSW1h
Z2VUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7CisKKyAgICAv
LyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCisgICAgbGF5ZXItPnNldE1hc2tzVG9C
b3VuZHMobGF5ZXJJbmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0Jv
dW5kcyk7CisgICAgbGF5ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOworICAgIGxh
eWVyLT5zZXRQcmVzZXJ2ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0QpOworICAgIFZlY3RvcjxH
cmFwaGljc0xheWVyKj4gY2hpbGRyZW47CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxh
eWVySW5mby5jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJMYXllcklEIGNoaWxk
SUQgPSBsYXllckluZm8uY2hpbGRyZW5baV07CisgICAgICAgIEdyYXBoaWNzTGF5ZXIqIGNoaWxk
ID0gbGF5ZXJCeUlEKGNoaWxkSUQpOworICAgICAgICBpZiAoIWNoaWxkKSB7CisgICAgICAgICAg
ICBjaGlsZCA9IGNyZWF0ZUxheWVyKGNoaWxkSUQpLmxlYWtQdHIoKTsKKyAgICAgICAgICAgIG1f
bGF5ZXJzLmFkZChjaGlsZElELCBjaGlsZCk7CisgICAgICAgIH0KKyAgICAgICAgY2hpbGRyZW4u
YXBwZW5kKGNoaWxkKTsKKyAgICB9CisgICAgbGF5ZXItPnNldENoaWxkcmVuKGNoaWxkcmVuKTsK
KworICAgIGlmIChsYXllckluZm8uaXNSb290TGF5ZXIgJiYgbV9yb290TGF5ZXJJRCAhPSBpZCkK
KyAgICAgICAgc2V0Um9vdExheWVySUQoaWQpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6ZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIEdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgbV9sYXllcnMucmVt
b3ZlKGxheWVySUQpOworICAgIGRlbGV0ZSBsYXllcjsKK30KKworCit2b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6ZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICAvLyBXZSBoYXZlIHRv
IGxlYWsgdGhlIG5ldyBsYXllcidzIHBvaW50ZXIgYW5kIG1hbmFnZSBpdCBvdXJzZWx2ZXMsCisg
ICAgLy8gYmVjYXVzZSBPd25QdHIgaXMgbm90IGNvcHlhYmxlLgorICAgIGlmIChtX2xheWVycy5m
aW5kKGlkKSA9PSBtX2xheWVycy5lbmQoKSkKKyAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBjcmVh
dGVMYXllcihpZCkubGVha1B0cigpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNl
dFJvb3RMYXllcklEKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBpZiAobGF5ZXJJRCA9PSBt
X3Jvb3RMYXllcklEKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllcklEID0gbGF5
ZXJJRDsKKworICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgaWYg
KCFsYXllcklEKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9
IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGZsb2F0
IHNjYWxlKQoreworICAgIGVuc3VyZUxheWVyKGxheWVySUQpOworICAgIFRleHR1cmVNYXBwZXJO
b2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOworCisg
ICAgaW50IG5vZGVUaWxlSUQgPSBub2RlLT5jcmVhdGVDb250ZW50c1RpbGUoc2NhbGUpOworICAg
IG1fdGlsZVRvTm9kZVRpbGUuYWRkKHRpbGVJRCwgbm9kZVRpbGVJRCk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJ
RCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUo
bGF5ZXJCeUlEKGxheWVySUQpKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludCBub2RlVGlsZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKHRpbGVJRCk7Cisg
ICAgaWYgKCFub2RlVGlsZUlEKQorICAgICAgICByZXR1cm47CisKKyAgICBub2RlLT5yZW1vdmVD
b250ZW50c1RpbGUobm9kZVRpbGVJRCk7CisgICAgbV90aWxlVG9Ob2RlVGlsZS5yZW1vdmUodGls
ZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJ
RCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBRSW1hZ2UmIGltYWdlKQoreworICAgIGVuc3VyZUxh
eWVyKGxheWVySUQpOworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFw
cGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW50IG5vZGVUaWxlSUQgPSByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQodGls
ZUlEKTsKKyAgICBpZiAoIW5vZGVUaWxlSUQpCisgICAgICAgIHJldHVybjsKKworICAgIFFJbWFn
ZSBpbWFnZVJlZihpbWFnZSk7CisgICAgbm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVN
YXBwZXIuZ2V0KCkpOworICAgIG5vZGUtPnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIobm9kZVRp
bGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwgaW1hZ2VSZWYuYml0cygpLCBCaXRtYXBUZXh0
dXJlOjpCR1JBRm9ybWF0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUlt
YWdlKGludDY0X3QgaW1hZ2VJRCwgY29uc3QgUUltYWdlJiBpbWFnZSkKK3sKKyAgICBUaWxlZElt
YWdlIHRpbGVkSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0IGludCBUaWxlRGltZW5zaW9uID0gMTAy
NDsKKyAgICBib29sIGltYWdlSGFzQWxwaGEgPSBpbWFnZS5oYXNBbHBoYUNoYW5uZWwoKTsKKyAg
ICBJbnRSZWN0IGltYWdlUmVjdCgwLCAwLCBpbWFnZS53aWR0aCgpLCBpbWFnZS5oZWlnaHQoKSk7
CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZS5oZWlnaHQoKTsgeSArPSBUaWxlRGltZW5z
aW9uKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2Uud2lkdGgoKTsgeCArPSBU
aWxlRGltZW5zaW9uKSB7CisgICAgICAgICAgICBRSW1hZ2Ugc3ViSW1hZ2U7CisgICAgICAgICAg
ICBJbnRSZWN0IHJlY3QoeCwgeSwgVGlsZURpbWVuc2lvbiwgVGlsZURpbWVuc2lvbik7CisgICAg
ICAgICAgICByZWN0LmludGVyc2VjdChpbWFnZVJlY3QpOworICAgICAgICAgICAgaWYgKFFTaXpl
KHJlY3Quc2l6ZSgpKSA9PSBpbWFnZS5zaXplKCkpCisgICAgICAgICAgICAgICAgc3ViSW1hZ2Ug
PSBpbWFnZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGlt
YWdlLmNvcHkocmVjdCk7CisgICAgICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVy
ZSA9IG1fdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOworICAgICAgICAgICAgdGV4dHVy
ZS0+cmVzZXQocmVjdC5zaXplKCksICFpbWFnZUhhc0FscGhhKTsKKyAgICAgICAgICAgIHRleHR1
cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdlSGFzQWxwaGEgPyBCaXRtYXBUZXh0dXJlOjpCR1JBRm9y
bWF0IDogQml0bWFwVGV4dHVyZTo6QkdSRm9ybWF0LCBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHJlY3Quc2l6ZSgpKSwgc3ViSW1hZ2UuYml0cygpKTsKKyAgICAgICAgICAgIHRpbGVkSW1hZ2Uu
YWRkKHJlY3QubG9jYXRpb24oKSwgdGV4dHVyZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5yZW1vdmUoaW1hZ2VJRCk7CisgICAgbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZXMuYWRkKGltYWdlSUQsIHRpbGVkSW1hZ2UpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveUltYWdlKGludDY0X3QgaW1hZ2VJRCkKK3sKKyAgICBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5yZW1vdmUoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5Ojphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIs
IGludDY0X3QgaW1hZ2VJRCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4
dHVyZU1hcHBlck5vZGUobGF5ZXIpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFpbWFnZUlEKSB7CisgICAgICAgIG5vZGUtPmNsZWFyQWxsRGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VUaWxlcygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRmxvYXRT
aXplIHNpemUobGF5ZXItPnNpemUoKSk7CisgICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdChsYXll
ci0+Y29udGVudHNSZWN0KCkpOworICAgIGZsb2F0IGhvcml6b250YWxGYWN0b3IgPSBjb250ZW50
c1JlY3Qud2lkdGgoKSAvIHNpemUud2lkdGgoKTsKKyAgICBmbG9hdCB2ZXJ0aWNhbEZhY3RvciA9
IGNvbnRlbnRzUmVjdC5oZWlnaHQoKSAvIHNpemUuaGVpZ2h0KCk7CisgICAgSGFzaE1hcDxpbnQ2
NF90LCBUaWxlZEltYWdlPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
cy5maW5kKGltYWdlSUQpOworICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGlsZWRJbWFnZTo6aXRlcmF0b3IgZW5k
VGlsZUl0ZXJhdG9yID0gaXQtPnNlY29uZC5lbmQoKTsKKyAgICBmb3IgKFRpbGVkSW1hZ2U6Oml0
ZXJhdG9yIHRpbGVJdCA9IGl0LT5zZWNvbmQuYmVnaW4oKTsgdGlsZUl0ICE9IGVuZFRpbGVJdGVy
YXRvcjsgKyt0aWxlSXQpIHsKKyAgICAgICAgRmxvYXRSZWN0IHNvdXJjZVJlY3QoRmxvYXRQb2lu
dCh0aWxlSXQtPmZpcnN0KSwgRmxvYXRTaXplKHRpbGVJdC0+c2Vjb25kLT5zaXplKCkpKTsKKyAg
ICAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3Qoc291cmNlUmVjdC54KCkgKiBob3Jpem9udGFsRmFj
dG9yICsgY29udGVudHNSZWN0LngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291
cmNlUmVjdC55KCkgKiB2ZXJ0aWNhbEZhY3RvciArIGNvbnRlbnRzUmVjdC55KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY3Qud2lkdGgoKSAqIGhvcml6b250YWxGYWN0
b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY3QuaGVpZ2h0KCkgKiB2
ZXJ0aWNhbEZhY3Rvcik7CisgICAgICAgIGludCBuZXdUaWxlSUQgPSBub2RlLT5jcmVhdGVDb250
ZW50c1RpbGUoMS4wKTsKKyAgICAgICAgbm9kZS0+c2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9y
RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UobmV3VGlsZUlELCBJbnRSZWN0KHNvdXJjZVJlY3QpLCB0
YXJnZXRSZWN0LCB0aWxlSXQtPnNlY29uZC5nZXQoKSk7CisgICAgfQorfQorCit2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6Zmx1c2hMYXllckNoYW5nZXMoKQoreworICAgIG1fcm9vdExheWVyLT5z
eW5jQ29tcG9zaXRpbmdTdGF0ZShGbG9hdFJlY3QoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjplbnN1cmVSb290TGF5ZXIoKQoreworICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fcm9vdExheWVyID0gY3JlYXRlTGF5ZXIoSW52YWxpZFdlYkxheWVy
SUQpOworICAgIG1fcm9vdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICBtX3Jv
b3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKKworICAgIC8vIFRoZSByb290IGxheWVy
IHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQu
CisgICAgbV9yb290TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7CisgICAgbV90
ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKKyAgICB0b1RleHR1cmVN
YXBwZXJOb2RlKG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVN
YXBwZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY1JlbW90ZUNv
bnRlbnQoKQoreworICAgIC8vIFdlIGVucXVldWUgbWVzc2FnZXMgYW5kIGV4ZWN1dGUgdGhlbSBk
dXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWlyZSBhbiBhY3RpdmUgR0wgY29udGV4dC4KKyAgICBl
bnN1cmVSb290TGF5ZXIoKTsKKworICAgIHdoaWxlIChPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRv
UmVuZGVyZXI+IG5leHRNZXNzYWdlID0gbV9tZXNzYWdlc1RvUmVuZGVyZXIudHJ5R2V0TWVzc2Fn
ZSgpKSB7CisgICAgICAgIHN3aXRjaCAobmV4dE1lc3NhZ2UtPnR5cGUoKSkgeworICAgICAgICBj
YXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpTZXRSb290TGF5ZXI6IHsKKyAgICAgICAg
ICAgIGNvbnN0IFNldFJvb3RMYXllck1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8U2V0
Um9vdExheWVyTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAg
ICAgc2V0Um9vdExheWVySUQoZGF0YS5sYXllcklEKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6RGVsZXRl
TGF5ZXI6IHsKKyAgICAgICAgICAgIGNvbnN0IERlbGV0ZUxheWVyTWVzc2FnZURhdGEmIGRhdGEg
PSBzdGF0aWNfY2FzdDxEZWxldGVMYXllck1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRh
dGEoKTsKKyAgICAgICAgICAgIGRlbGV0ZUxheWVyKGRhdGEubGF5ZXJJRCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVu
ZGVyZXI6OlN5bmNMYXllclBhcmFtZXRlcnM6IHsKKyAgICAgICAgICAgIGNvbnN0IFN5bmNMYXll
clBhcmFtZXRlcnNNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PFN5bmNMYXllclBhcmFt
ZXRlcnNNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAgICAgICAgICBz
eW5jTGF5ZXJQYXJhbWV0ZXJzKGRhdGEubGF5ZXJJbmZvKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Q3Jl
YXRlVGlsZTogeworICAgICAgICAgICAgY29uc3QgQ3JlYXRlVGlsZU1lc3NhZ2VEYXRhJiBkYXRh
ID0gc3RhdGljX2Nhc3Q8Q3JlYXRlVGlsZU1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRh
dGEoKTsKKyAgICAgICAgICAgIGNyZWF0ZVRpbGUoZGF0YS5sYXllcklELCBkYXRhLnJlbW90ZVRp
bGVJRCwgZGF0YS5zY2FsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92ZVRpbGU6IHsKKyAgICAg
ICAgICAgIGNvbnN0IFJlbW92ZVRpbGVNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PFJl
bW92ZVRpbGVNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAgICAgICAg
ICByZW1vdmVUaWxlKGRhdGEubGF5ZXJJRCwgZGF0YS5yZW1vdGVUaWxlSUQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyOjpVcGRhdGVUaWxlOiB7CisgICAgICAgICAgICBjb25zdCBVcGRhdGVUaWxlTWVzc2Fn
ZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxVcGRhdGVUaWxlTWVzc2FnZSo+KG5leHRNZXNzYWdl
LmdldCgpKS0+ZGF0YSgpOworICAgICAgICAgICAgdXBkYXRlVGlsZShkYXRhLmxheWVySUQsIGRh
dGEucmVtb3RlVGlsZUlELCBkYXRhLnNvdXJjZVJlY3QsIGRhdGEudGFyZ2V0UmVjdCwgZGF0YS5p
bWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5
ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkNyZWF0ZUltYWdlOiB7CisgICAgICAgICAgICBjb25z
dCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8Q3JlYXRlSW1hZ2VN
ZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAgICAgICAgICBjcmVhdGVJ
bWFnZShkYXRhLmltYWdlSUQsIGRhdGEuaW1hZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpEZXN0cm95
SW1hZ2U6IHsKKyAgICAgICAgICAgIGNvbnN0IENyZWF0ZUltYWdlTWVzc2FnZURhdGEmIGRhdGEg
PSBzdGF0aWNfY2FzdDxDcmVhdGVJbWFnZU1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRh
dGEoKTsKKyAgICAgICAgICAgIGRlc3Ryb3lJbWFnZShkYXRhLmltYWdlSUQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyOjpGbHVzaExheWVyQ2hhbmdlczoKKyAgICAgICAgICAgIGZsdXNoTGF5ZXJDaGFuZ2Vz
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OnB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVz
c2FnZVRvUmVuZGVyZXI+IG1lc3NhZ2UpCit7CisgICAgbV9tZXNzYWdlc1RvUmVuZGVyZXIuYXBw
ZW5kKG1lc3NhZ2UpOworICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNv
bnN0IFdlYktpdDo6VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBDcmVhdGVUaWxlTWVz
c2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySUQgPSBsYXllcklEOworICAgIGRhdGEucmVt
b3RlVGlsZUlEID0gdGlsZUlEOworICAgIGRhdGEuc2NhbGUgPSB1cGRhdGVJbmZvLnVwZGF0ZVNj
YWxlRmFjdG9yOworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKENyZWF0ZVRpbGVNZXNzYWdlOjpjcmVh
dGUoZGF0YSkpOworICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHVwZGF0
ZUluZm8pOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVy
KGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8pCit7CisgICAgVXBkYXRlVGlsZU1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0YS5sYXll
cklEID0gbGF5ZXJJRDsKKyAgICBkYXRhLnJlbW90ZVRpbGVJRCA9IHRpbGVJRDsKKyAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSh1cGRh
dGVJbmZvLmJpdG1hcEhhbmRsZSk7CisgICAgZGF0YS5pbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUlt
YWdlKCkuY29weSgpOworICAgIGRhdGEuc291cmNlUmVjdCA9IEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzLnNpemUoKSk7CisgICAgZGF0YS50YXJn
ZXRSZWN0ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzOworICAgIHB1c2hVcGRhdGVUb1F1
ZXVlKFVwZGF0ZVRpbGVNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQor
eworICAgIFJlbW92ZVRpbGVNZXNzYWdlRGF0YSBkYXRhOworICAgIGRhdGEubGF5ZXJJRCA9IGxh
eWVySUQ7CisgICAgZGF0YS5yZW1vdGVUaWxlSUQgPSB0aWxlSUQ7CisgICAgcHVzaFVwZGF0ZVRv
UXVldWUoUmVtb3ZlVGlsZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKKwordm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sK
KyAgICBEZWxldGVMYXllck1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0YS5sYXllcklEID0gaWQ7
CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoRGVsZXRlTGF5ZXJNZXNzYWdlOjpjcmVhdGUoZGF0YSkp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
V2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBTZXRSb290TGF5ZXJNZXNzYWdlRGF0YSBkYXRhOworICAg
IGRhdGEubGF5ZXJJRCA9IGlkOworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKFNldFJvb3RMYXllck1l
c3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5j
Q29tcG9zaXRpbmdMYXllclN0YXRlKGNvbnN0IFdlYkxheWVySW5mbyYgaW5mbykKK3sKKyAgICBT
eW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySW5mbyA9
IGluZm87CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoU3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2U6
OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJG
cmFtZSgpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1lKCksIG1fZHJhd2luZ0Fy
ZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoRmx1c2hM
YXllckNoYW5nZXNNZXNzYWdlOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFBy
b3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlKQoreworICAgIENyZWF0ZUltYWdl
TWVzc2FnZURhdGEgZGF0YTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGRhdGEuaW1hZ2VJRCA9IGtleTsK
KyAgICBkYXRhLmltYWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKS5jb3B5KCk7CisgICAgcHVz
aFVwZGF0ZVRvUXVldWUoQ3JlYXRlSW1hZ2VNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGlu
dDY0X3Qga2V5KQoreworICAgIERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0
YS5pbWFnZUlEID0ga2V5OworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKERlc3Ryb3lJbWFnZU1lc3Nh
Z2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNp
YmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3Rv
cnlWZWN0b3IpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVj
dG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkt
PnBhZ2VJRCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250
ZW50c1JlY3RBbmRTY2FsZShjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSkKK3sKKyAg
ICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworICAgIG1fY29udGVudHNTY2FsZSA9IHNj
YWxlOworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVz
c2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKHJlY3Qs
IHNjYWxlKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKworfQor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkdyYXBoaWNzTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAJKHJldmlzaW9uIDk3NDI1KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xh
eWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTMgKzI1LDEzIEBACiAKICNpbmNsdWRlICJB
bmltYXRpb24uaCIKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJEcmF3aW5n
QXJlYU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTGF5
ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2lu
Y2x1ZGUgInRleHQvQ1N0cmluZy5oIgogI2luY2x1ZGUgPEhhc2hNYXAuaD4KQEAgLTU4LDEyICs1
OCw2IEBAIFdlYkdyYXBoaWNzTGF5ZXIqIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWUKICAgICByZXR1
cm4gaXQtPnNlY29uZDsKIH0KIAotc3RhdGljIFZlY3RvcjxXZWJMYXllcklEPiYgZGVsZXRlZExh
eWVySURzKCkKLXsKLSAgICBzdGF0aWMgVmVjdG9yPFdlYkxheWVySUQ+IGxheWVyczsKLSAgICBy
ZXR1cm4gbGF5ZXJzOwotfQotCiBzdGF0aWMgV2ViTGF5ZXJJRCB0b1dlYkxheWVySUQoR3JhcGhp
Y3NMYXllciogbGF5ZXIpCiB7CiAgICAgcmV0dXJuIGxheWVyID8gdG9XZWJHcmFwaGljc0xheWVy
KGxheWVyKS0+aWQoKSA6IDA7CkBAIC03OSw2NyArNzMsOTEgQEAgdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpub3RpZnlDaGFuZ2UoKQogV2ViR3JhcGhpY3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcihH
cmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkK
ICAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQotICAgICwgbV9tb2RpZmllZChmYWxzZSkKKyAg
ICAsIG1fbW9kaWZpZWQodHJ1ZSkKICAgICAsIG1fY29udGVudE5lZWRzRGlzcGxheShmYWxzZSkK
ICAgICAsIG1faGFzUGVuZGluZ0FuaW1hdGlvbnMoZmFsc2UpCi0gICAgLCBtX2NvbnRlbnRTY2Fs
ZSgxLmYpCisgICAgLCBtX2luVXBkYXRlTW9kZShmYWxzZSkKKyNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkKKyAgICAsIG1fbGF5ZXJUcmVlVGlsZUNsaWVudCgwKQorICAgICwgbV9tYWlu
QmFja2luZ1N0b3JlKGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBUaWxlZEJh
Y2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKSkKKyNlbmRpZgogewot
ICAgIC8vIFN0YXJ0aW5nIGxheWVyIElEcyBmcm9tIDEwMDAsIHRvIGhlbHAgZGV0ZWN0IGZhdWx0
eSBJRHMgZWFzaWx5LgotICAgIHN0YXRpYyBXZWJMYXllcklEIHNJRCA9IDEwMDA7Ci0gICAgbV9s
YXllckluZm8uaWQgPSArK3NJRDsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRz
U2NhbGUoMS4wKTsKKyAgICBzdGF0aWMgV2ViTGF5ZXJJRCBuZXh0TGF5ZXJJRCA9IDE7CisgICAg
bV9sYXllckluZm8uaWQgPSBuZXh0TGF5ZXJJRCsrOwogICAgIGxheWVyQnlJRE1hcCgpLmFkZChp
ZCgpLCB0aGlzKTsKIH0KIAogV2ViR3JhcGhpY3NMYXllcjo6fldlYkdyYXBoaWNzTGF5ZXIoKQog
ewogICAgIGxheWVyQnlJRE1hcCgpLnJlbW92ZShpZCgpKTsKLSAgICBkZWxldGVkTGF5ZXJJRHMo
KS5hcHBlbmQoaWQoKSk7CisKKyAgICAvLyBUaGlzIHdvdWxkIHRlbGwgdGhlIFVJIHByb2Nlc3Mg
dG8gcmVsZWFzZSB0aGUgYmFja2luZyBzdG9yZS4KKyAgICBzZXRDb250ZW50c1RvSW1hZ2UoMCk7
CisKKyAgICBpZiAobV9sYXllclRyZWVUaWxlQ2xpZW50KQorICAgICAgICBtX2xheWVyVHJlZVRp
bGVDbGllbnQtPmRpZERlbGV0ZUxheWVyKGlkKCkpOwogfQogCiBib29sIFdlYkdyYXBoaWNzTGF5
ZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQog
ewogICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjaGlsZHJlbik7Ci0g
ICAgaWYgKG9rKQotICAgICAgICBub3RpZnlDaGFuZ2UoKTsKLSAgICByZXR1cm4gb2s7CisgICAg
aWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViR3JhcGhpY3NMYXllciogY2hpbGQg
PSB0b1dlYkdyYXBoaWNzTGF5ZXIoY2hpbGRyZW5baV0pOworICAgICAgICBjaGlsZC0+c2V0Q29u
dGVudHNTY2FsZShtX2NvbnRlbnRzU2NhbGUpOworICAgICAgICBjaGlsZC0+bm90aWZ5Q2hhbmdl
KCk7CisgICAgfQorICAgIG5vdGlmeUNoYW5nZSgpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewog
ICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGxheWVyKTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5
ZXIobGF5ZXIpLT5ub3RpZnlDaGFuZ2UoKTsKICAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAogdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogbGF5ZXIs
IGludCBpbmRleCkKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgobGF5ZXIs
IGluZGV4KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5ub3RpZnlDaGFuZ2UoKTsK
ICAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGls
ZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQogewog
ICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUobGF5ZXIsIHNpYmxpbmcpOworICAgIHRv
V2ViR3JhcGhpY3NMYXllcihsYXllciktPm5vdGlmeUNoYW5nZSgpOwogICAgIG5vdGlmeUNoYW5n
ZSgpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3coR3JhcGhpY3NM
YXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCiB7CiAgICAgR3JhcGhpY3NMYXll
cjo6YWRkQ2hpbGRCZWxvdyhsYXllciwgc2libGluZyk7CisgICAgdG9XZWJHcmFwaGljc0xheWVy
KGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKIGJvb2wg
V2ViR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBH
cmFwaGljc0xheWVyKiBuZXdDaGlsZCkKIHsKICAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6
cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7Ci0KLSAgICBpZiAob2spCi0gICAgICAg
IG5vdGlmeUNoYW5nZSgpOwotICAgIHJldHVybiBvazsKKyAgICBpZiAoIW9rKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgbm90aWZ5Q2hhbmdlKCk7CisgICAgdG9XZWJHcmFwaGljc0xheWVy
KG9sZENoaWxkKS0+bm90aWZ5Q2hhbmdlKCk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKG5ld0No
aWxkKS0+bm90aWZ5Q2hhbmdlKCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCiB7CisgICAgaWYgKFdlYkdyYXBoaWNzTGF5
ZXIqIHBhcmVudExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHBhcmVudCgpKSkKKyAgICAgICAg
cGFyZW50TGF5ZXItPm5vdGlmeUNoYW5nZSgpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZy
b21QYXJlbnQoKTsKKwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCkBAIC0yNzQsMTMgKzI5Miwy
OCBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZUFuaW1hdGlvbihjCiB7CiB9CiAKK3Zv
aWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQoreworICAgIHNl
dENvbnRlbnRzVG9JbWFnZSgwKTsKKyAgICBzZXRDb250ZW50c1RvSW1hZ2UobV9pbWFnZS5nZXQo
KSk7Cit9CisKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdl
KiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZS5nZXQoKSkKKyAgICBpZiAoaW1h
Z2UgPT0gbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkxheWVyVHJlZVRpbGVDbGll
bnQqIGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKTsKKyAgICBpZiAoIWNsaWVudCkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgLy8gV2UgYWRvcHQgZmlyc3QsIGluIGNhc2UgdGhpcyBpcyB0
aGUgc2FtZSBmcmFtZSAtIHRoYXQgd2F5IHdlIGF2b2lkIGRlc3Ryb3lpbmcgYW5kIHJlY3JlYXRp
bmcgdGhlIGltYWdlLgorICAgIGludDY0X3QgbmV3SUQgPSBjbGllbnQtPmFkb3B0SW1hZ2VCYWNr
aW5nU3RvcmUoaW1hZ2UpOworICAgIGNsaWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1f
bGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworICAgIGlmIChuZXdJRCA9PSBtX2xheWVy
SW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQorICAgICAgICByZXR1cm47CisgICAgbV9sYXllcklu
Zm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG5ld0lEOwogICAgIG1faW1hZ2UgPSBpbWFnZTsKLSAg
ICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX2xheWVySW5mby5pbWFnZUlzVXBkYXRlZCA9IHRy
dWU7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKICAgICBu
b3RpZnlDaGFuZ2UoKTsKIH0KQEAgLTMwMSw1MCArMzM0LDI5IEBAIHZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c2V0UmVwbGljYXRlZEJ5TGEKIAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVk
c0Rpc3BsYXkoKQogewotICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLSAgICBub3RpZnlDaGFu
Z2UoKTsKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSk7CiB9CiAKIHZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBtX25lZWRzRGlzcGxheVJlY3QudW5pdGUocmVjdCk7CisgICAgbV9tYWlu
QmFja2luZ1N0b3JlLT5pbnZhbGlkYXRlKEludFJlY3QocmVjdCkpOwogICAgIG5vdGlmeUNoYW5n
ZSgpOwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5
KCkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQogV2ViTGF5ZXJJRCBXZWJHcmFwaGlj
c0xheWVyOjppZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGF5ZXJJbmZvLmlkOwogfQogCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZFN5bmNocm9uaXplKCkKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgbV9tb2RpZmllZCA9IGZhbHNlOwotICAgIG1f
bmVlZHNEaXNwbGF5UmVjdCA9IEZsb2F0UmVjdCgpOwotICAgIGlmIChtX2hhc1BlbmRpbmdBbmlt
YXRpb25zKQotICAgICAgICBub3RpZnlBbmltYXRpb25TdGFydGVkKFdURjo6Y3VycmVudFRpbWUo
KSk7Ci0gICAgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA9IGZhbHNlOwotfQotCi1jb25zdCBXZWJM
YXllckluZm8mIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVySW5mbygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fbGF5ZXJJbmZvOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3Np
dGluZ1N0YXRlKCkKLXsKLSAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHko
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgICAgIGNo
aWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOwogICAgIGlmIChyZXBsaWNh
TGF5ZXIoKSkKLSAgICAgICAgcmVwbGljYUxheWVyKCktPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7
CisgICAgICAgIHJlcGxpY2FMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShyZWN0KTsKICAg
ICBpZiAobWFza0xheWVyKCkpCi0gICAgICAgIG1hc2tMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZSgpOworICAgICAgICBtYXNrTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7
CisgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiB9CiAKIFdlYkdy
YXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKQEAg
LTM1MiwzMCArMzY0LDIyIEBAIFdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihH
cmEKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViR3JhcGhpY3NMYXllcio+KGxheWVyKTsKIH0K
IAotRmxvYXRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6Om5lZWRzRGlzcGxheVJlY3QoKSBjb25zdAot
ewotICAgIEZsb2F0UmVjdCByZWN0ID0gRmxvYXRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBz
aXplKCkuaGVpZ2h0KCkpOwotICAgIGlmICghbV9uZWVkc0Rpc3BsYXkpCi0gICAgICAgIHJlY3Qu
aW50ZXJzZWN0KG1fbmVlZHNEaXNwbGF5UmVjdCk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLVZl
Y3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IFdlYkdyYXBoaWNzTGF5ZXI6OnRha2VMYXllcnNUb0Rl
bGV0ZSgpCi17Ci0gICAgVmVjdG9yPFdlYktpdDo6V2ViTGF5ZXJJRD4gbGF5ZXJzID0gZGVsZXRl
ZExheWVySURzKCk7Ci0gICAgZGVsZXRlZExheWVySURzKCkuY2xlYXIoKTsKLSAgICByZXR1cm4g
bGF5ZXJzOwotfQotCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpCiB7CisgICAgaWYgKCFtX2xheWVyVHJlZVRpbGVDbGllbnQpCisg
ICAgICAgIG1fbGF5ZXJUcmVlVGlsZUNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKTsKKyAg
ICB1cGRhdGVDb250ZW50QnVmZmVycygpOworCiAgICAgbV9sYXllckluZm8ubmFtZSA9IG5hbWUo
KTsKICAgICBtX2xheWVySW5mby5hbmNob3JQb2ludCA9IGFuY2hvclBvaW50KCk7CiAgICAgbV9s
YXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7CiAgICAgbV9s
YXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOwogICAgIG1f
bGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsKICAgICBtX2xheWVy
SW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3QoKTsKLSAgICBtX2xheWVySW5mby5kcmF3
c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKKworICAgIC8vIEluIHRoZSBzaGFkb3cgbGF5ZXIg
dHJlZSB3ZSBjcmVhdGUgaW4gdGhlIFVJIHByb2Nlc3MsIGxheWVycyB3aXRoIGRpcmVjdGx5IGNv
bXBvc2l0ZWQgaW1hZ2VzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0byBkcmF3IGNvbnRlbnQuCisg
ICAgLy8gT3RoZXJ3aXNlLCB3ZSdkIGhhdmUgdG8gY2hlY2sgd2hldGhlciBhbiBsYXllciB3aXRo
IGRyYXdzQ29udGVudD09ZmFsc2UgaGFzIGEgZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZSBtdWx0
aXBsZSB0aW1lcy4KKyAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQo
KSB8fCBtX2ltYWdlOwogICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVySUQobWFza0xh
eWVyKCkpOwogICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7
CiAgICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKQEAgLTM4MywxMjIgKzM4Nywx
NTkgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdAogICAgIG1fbGF5
ZXJJbmZvLnBvcyA9IHBvc2l0aW9uKCk7CiAgICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBw
cmVzZXJ2ZXMzRCgpOwogICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVw
bGljYUxheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBGbG9hdFNpemUoc2l6ZSgpLndp
ZHRoKCkgKiBtX2NvbnRlbnRTY2FsZSwgc2l6ZSgpLmhlaWdodCgpICogbV9jb250ZW50U2NhbGUp
OworICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBzaXplKCk7CiAgICAgbV9sYXllckluZm8udHJhbnNm
b3JtID0gdHJhbnNmb3JtKCk7CiAgICAgbV9jb250ZW50TmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAg
ICAgbV9sYXllckluZm8uY2hpbGRyZW4uY2xlYXIoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKICAgICAgICAgbV9sYXllckluZm8uY2hpbGRy
ZW4uYXBwZW5kKHRvV2ViTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CisKKyAgICBtX2xheWVyVHJl
ZVRpbGVDbGllbnQtPmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIobV9sYXllckluZm8p
OworICAgIG1fbW9kaWZpZWQgPSBmYWxzZTsKKyAgICBtX2xheWVySW5mby5pbWFnZUlzVXBkYXRl
ZCA9IGZhbHNlOworICAgIGlmIChtX2hhc1BlbmRpbmdBbmltYXRpb25zKQorICAgICAgICBub3Rp
ZnlBbmltYXRpb25TdGFydGVkKFdURjo6Y3VycmVudFRpbWUoKSk7CisgICAgbV9oYXNQZW5kaW5n
QW5pbWF0aW9ucyA9IGZhbHNlOwogfQogCi1zdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gZGl2aWRl
SW50b1RpbGVzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lO
R19TVE9SRSkKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJl
Z2luKCkKIHsKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlczsKLSAgICBmb3IgKGZsb2F0IHkg
PSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7Ci0gICAg
ICAgIGZvciAoZmxvYXQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7IHggKz0gZ1RpbGVE
aW1lbnNpb24pIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlKHgsIHksIGdUaWxlRGltZW5z
aW9uLCBnVGlsZURpbWVuc2lvbik7Ci0gICAgICAgICAgICB0aWxlLmludGVyc2VjdChyZWN0KTsK
LSAgICAgICAgICAgIHRpbGVzLmFwcGVuZCh0aWxlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gdGlsZXM7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9Gb3JU
aGlzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dEluZm8s
IFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKIHsKLSAgICBXZWJHcmFwaGljc0xh
eWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihsYXllcik7Ci0gICAgaWYgKCFsYXllcikK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbGF5ZXItPmlzTW9kaWZpZWQoKSkKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2Vi
R3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hpbGRyZW4o
KVtpXSk7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKKyAgICB9CisK
KyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3Jl
ICYmIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpID09IHNjYWxlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBvdXRMYXllcnMuYXBwZW5kKGxheWVyKTsKLSAgICBvdXRJbmZvLmxh
eWVycy5hcHBlbmQobGF5ZXItPmxheWVySW5mbygpKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKIAot
ICAgIFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvID0gb3V0SW5mby5sYXllcnNbb3V0SW5mby5sYXll
cnMuc2l6ZSgpIC0gMV07Ci0gICAgaWYgKGxheWVyLT5pbWFnZSgpKQotICAgICAgICBsYXllcklu
Zm8uZHJhd3NDb250ZW50ID0gdHJ1ZTsKKyAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlID0gbV9t
YWluQmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUgPSBhZG9w
dFB0cihuZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVU
aWxlQmFja2VuZDo6Y3JlYXRlKHRoaXMpKSk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRD
b250ZW50c1NjYWxlKHNjYWxlKTsKIH0KIAotc3RhdGljIHZvaWQgY29sbGVjdENvbXBvc2l0aW5n
SW5mb1JlY3Vyc2l2ZWx5KEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciwgV2ViTGF5ZXJUcmVlSW5m
byYgb3V0SW5mbywgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiYgb3V0TGF5ZXJzKQordm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3QpCiB7Ci0gICAgaWYgKCFy
b290TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9G
b3JUaGlzTGF5ZXIocm9vdExheWVyLCBvdXRJbmZvLCBvdXRMYXllcnMpOwotICAgIGNvbGxlY3RD
b21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIocm9vdExheWVyLT5tYXNrTGF5ZXIoKSwgb3V0SW5m
bywgb3V0TGF5ZXJzKTsKLSAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkocm9v
dExheWVyLT5yZXBsaWNhTGF5ZXIoKSwgb3V0SW5mbywgb3V0TGF5ZXJzKTsKKyAgICBtX2xheWVy
SW5mby5pc1Jvb3RMYXllciA9IGlzUm9vdDsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KIAotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdExheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytp
KQotICAgICAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkocm9vdExheWVyLT5j
aGlsZHJlbigpW2ldLCBvdXRJbmZvLCBvdXRMYXllcnMpOwordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQm
IHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRWaXNpYmxl
UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CiB9CiAKLXZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6c2VuZExheWVyc1RvVUlQcm9jZXNzKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
IHJvb3RMYXllciwgV2ViUGFnZSogd2ViUGFnZSkKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
VmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgd2ViUGFnZS0+
bGF5b3V0SWZOZWVkZWQoKTsKLSAgICB3ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+
dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwotICAgIFdl
YkxheWVyVHJlZUluZm8gY29tcG9zaXRpbmdJbmZvOwotICAgIGNvbXBvc2l0aW5nSW5mby5yb290
TGF5ZXJJRCA9IHJvb3RMYXllciA/IHRvV2ViR3JhcGhpY3NMYXllcihyb290TGF5ZXIpLT5pZCgp
IDogMDsKLSAgICBjb21wb3NpdGluZ0luZm8uY29udGVudFNjYWxlID0gMS4wOwotICAgIGNvbXBv
c2l0aW5nSW5mby5kZWxldGVkTGF5ZXJJRHMgPSBXZWJHcmFwaGljc0xheWVyOjp0YWtlTGF5ZXJz
VG9EZWxldGUoKTsKLSAgICBWZWN0b3I8V2ViR3JhcGhpY3NMYXllcio+IGxheWVyczsKLSAgICBp
ZiAocm9vdExheWVyKQotICAgICAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHko
cm9vdExheWVyLCBjb21wb3NpdGluZ0luZm8sIGxheWVycyk7CisgICAgbV92aXNpYmxlQ29udGVu
dFJlY3QgPSByZWN0OworICAgIG5vdGlmeUNoYW5nZSgpOworICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZS0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKK30KIAotICAgIGlmIChjb21wb3NpdGluZ0luZm8uZGVs
ZXRlZExheWVySURzLmlzRW1wdHkoKSAmJiBjb21wb3NpdGluZ0luZm8ubGF5ZXJzLmlzRW1wdHko
KSkKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CisgICAgbV9tb2RpZmllZCA9IHRydWU7CisgICAg
cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmNvbnRleHQsIHJlY3QpOworfQogCi0gICAgd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6U3luY0NvbXBvc2l0aW5nTGF5
ZXJzKGNvbXBvc2l0aW5nSW5mbykpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXll
cnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXll
cnNbaV07Ci0gICAgICAgIEZsb2F0UmVjdCB1cGRhdGVSZWN0ID0gbGF5ZXItPm5lZWRzRGlzcGxh
eVJlY3QoKTsKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVu
ZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKK3sKK30KIAotICAgICAgICBs
YXllci0+ZGlkU3luY2hyb25pemUoKTsKK2Jvb2wgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNr
aW5nU3RvcmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2luVXBkYXRlTW9k
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChXZWJMYXllclRyZWVUaWxlQ2xpZW50
KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCkpCisgICAgICAgIHJldHVybiBjbGllbnQt
PmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KIAot
ICAgICAgICBpZiAodXBkYXRlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
K0ludFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3Qo
KQoreworICAgIGlmIChtX2ltYWdlKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIHJl
dHVybiBJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworfQog
Ci0gICAgICAgIFJlZlB0cjxJbWFnZT4gZGlyZWN0SW1hZ2UgPSBsYXllci0+aW1hZ2UoKTsKLSAg
ICAgICAgaWYgKGRpcmVjdEltYWdlKQotICAgICAgICAgICAgdXBkYXRlUmVjdCA9IGxheWVyLT5j
b250ZW50c1JlY3QoKTsKLSAgICAgICAgZWxzZSBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOworSW50UmVjdCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJh
Y2tpbmdTdG9yZVZpc2libGVSZWN0KCkKK3sKKyAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudFJl
Y3Q7Cit9CiAKLSAgICAgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGlsZVJlY3RzID0gZGl2aWRlSW50
b1RpbGVzKHVwZGF0ZVJlY3QpOwotICAgICAgICBmb3IgKHNpemVfdCB0aWxlSW5kZXggPSAwOyB0
aWxlSW5kZXggPCB0aWxlUmVjdHMuc2l6ZSgpOyArK3RpbGVJbmRleCkgewotICAgICAgICAgICAg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCA9IHRpbGVSZWN0c1t0aWxlSW5kZXhdOwotICAgICAg
ICAgICAgSW50UmVjdCBlbmNsb3NpbmdVcGRhdGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh0aWxl
UmVjdCk7CitDb2xvciBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91
bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBDb2xvcjo6
d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAKLSAgICAgICAgICAgIFdlYkxheWVyVXBkYXRl
SW5mbyBjaHVuayhlbmNsb3NpbmdVcGRhdGVSZWN0KTsKLSAgICAgICAgICAgIGNodW5rLmxheWVy
SUQgPSB1aW50MzJfdChsYXllci0+aWQoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShjaHVuay5y
ZWN0LnNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICAgICAgICAg
IGlmICghYml0bWFwKQotICAgICAgICAgICAgICAgIHJldHVybjsKK30KK3ZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvKQoreworICAgIG1fbW9kaWZpZWQgPSB0cnVlOworICAgIGlmIChXZWJMYXllclRyZWVUaWxl
Q2xpZW50KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+
Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8pOworfQogCi0gICAgICAgICAgICBp
ZiAoIWJpdG1hcC0+Y3JlYXRlSGFuZGxlKGNodW5rLmJpdG1hcEhhbmRsZSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKGludCB0aWxl
SUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV9tb2RpZmllZCA9IHRy
dWU7CisgICAgaWYgKFdlYkxheWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJlZVRp
bGVDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT51cGRhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBk
YXRlSW5mbyk7Cit9CiAKLSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgICAgIFFJbWFnZSB0aWxl
SW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZVFJbWFnZSgpOwotICAgICAgICAgICAgdGlsZUltYWdlLmZp
bGwoMCk7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigm
dGlsZUltYWdlKTsKLSAgICAgICAgICAgICAgICBwYWludGVyLnRyYW5zbGF0ZSgtdGlsZVJlY3Qu
eCgpLCAtdGlsZVJlY3QueSgpKTsKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dCgmcGFpbnRlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGRpcmVjdEltYWdlKQotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShkaXJlY3RJbWFnZS5nZXQoKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgbGF5ZXItPmNvbnRlbnRzUmVjdCgpLCBGbG9hdFJlY3QoMCwgMCwgZGly
ZWN0SW1hZ2UtPndpZHRoKCksIGRpcmVjdEltYWdlLT5oZWlnaHQoKSkpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNv
bnRlbnRzKGNvbnRleHQsIGVuY2xvc2luZ1VwZGF0ZVJlY3QpOwotICAgICAgICAgICAgfQotI2Vu
ZGlmCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKK3sKKyAg
ICBtX21vZGlmaWVkID0gdHJ1ZTsKKyAgICBpZiAoV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xp
ZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgpKQorICAgICAgICBjbGllbnQtPnJlbW92ZVRpbGUo
aWQoKSwgdGlsZUlEKTsKK30KIAotICAgICAgICAgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
RHJhd2luZ0FyZWFQcm94eTo6VXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQoY2h1bmspKTsK
LSAgICAgICAgfQordm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlQnVmZmVyc1JlY3Vy
c2l2ZWx5KCkKK3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHRoaXMt
PmNoaWxkcmVuKClbaV0pOworICAgICAgICBsYXllci0+dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNp
dmVseSgpOwogICAgIH0KIH0KIAorV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogV2ViR3JhcGhpY3NM
YXllcjo6bGF5ZXJUcmVlVGlsZUNsaWVudCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGF5ZXJUcmVl
VGlsZUNsaWVudCkKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlVGlsZUNsaWVudDsKKyAgICBX
ZWJHcmFwaGljc0xheWVyKiBwYXJlbnQgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+cGFyZW50
KCkpOworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gcGFy
ZW50LT5sYXllclRyZWVUaWxlQ2xpZW50KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQoreworICAgIC8vIEJhY2tpbmctc3RvcmVzIGZvciBkaXJl
Y3RseSBjb21wb3NpdGVkIGltYWdlcyBpcyBoYW5kbGVkIGluIExheWVyVHJlZUhvc3QuCisgICAg
aWYgKG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZHJhd3NDb250ZW50KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBs
YXllclRyZWVUaWxlQ2xpZW50KCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2luVXBkYXRlTW9kZSA9IHRydWU7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT51cGRh
dGVUaWxlQnVmZmVycygpOworICAgIG1faW5VcGRhdGVNb2RlID0gZmFsc2U7Cit9CisKKyNlbmRp
ZgorCiBzdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVXZWJHcmFwaGljc0xh
eWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFdlYkdyYXBoaWNzTGF5ZXIoY2xpZW50KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIu
aAkocmV2aXNpb24gOTc0MjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTkgKzI3LDQw
IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlJ1bkxvb3AuaCIKICNpbmNsdWRl
ICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgorI2lu
Y2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5n
U3RvcmVSZW1vdGVUaWxlLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNp
bmNsdWRlICJVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3MuaCIKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
IAogbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJMYXllclRy
ZWVUaWxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGls
ZUlELCBjb25zdCBVcGRhdGVJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxl
KFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIoY29uc3QgV2ViTGF5
ZXJJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWREZWxldGVMYXllcihXZWJMYXllcklE
KSA9IDA7Cit9OwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdyYXBoaWNz
TGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllciB7CitjbGFzcyBXZWJHcmFwaGlj
c0xheWVyIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIKKyNpZiBFTkFCTEUoVElMRURf
QkFDS0lOR19TVE9SRSkKKyAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgVGlsZWRCYWNr
aW5nU3RvcmVDbGllbnQKKyAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViS2l0OjpU
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQKKyNlbmRpZgorewogcHVibGljOgogICAg
IFdlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCopOwogICAgIHZpcnR1YWwgfldl
YkdyYXBoaWNzTGF5ZXIoKTsKQEAgLTczLDEzICs5NCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXROZWVkc0Rpc3BsYXkoKTsKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBG
bG9hdFJlY3QmKTsKICAgICB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7Ci0gICAgdmly
dHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29u
dGVudFJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0
VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHN5
bmNDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBz
eW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICB2b2lkIHNldFJvb3RM
YXllcihib29sKTsKIAogICAgIFdlYktpdDo6V2ViTGF5ZXJJRCBpZCgpIGNvbnN0OwotICAgIGNv
bnN0IFdlYktpdDo6V2ViTGF5ZXJJbmZvJiBsYXllckluZm8oKSBjb25zdDsKLSAgICBGbG9hdFJl
Y3QgbmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0OwotICAgIHN0YXRpYyBWZWN0b3I8V2ViS2l0OjpX
ZWJMYXllcklEPiB0YWtlTGF5ZXJzVG9EZWxldGUoKTsKICAgICBzdGF0aWMgV2ViR3JhcGhpY3NM
YXllciogbGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5ZXJJRCk7CiAgICAgYm9vbCBpc01vZGlmaWVk
KCkgY29uc3QgeyByZXR1cm4gbV9tb2RpZmllZDsgfQogICAgIHZvaWQgZGlkU3luY2hyb25pemUo
KTsKQEAgLTg3LDIxICsxMDgsNTEgQEAgcHVibGljOgogICAgIHZvaWQgbm90aWZ5QW5pbWF0aW9u
U3RhcnRlZChkb3VibGUpOwogCiAgICAgc3RhdGljIHZvaWQgaW5pdEZhY3RvcnkoKTsKLSAgICBz
dGF0aWMgdm9pZCBzZW5kTGF5ZXJzVG9VSVByb2Nlc3MoV2ViQ29yZTo6R3JhcGhpY3NMYXllcios
IFdlYktpdDo6V2ViUGFnZSopOworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisg
ICAgLy8gVGlsZWRCYWNraW5nU3RvcmVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNr
aW5nU3RvcmVQYWludEJlZ2luKCk7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3Jl
UGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcGFpbnRl
ZEFyZWEpOworICAgIHZpcnR1YWwgYm9vbCB0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2Vk
KCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNS
ZWN0KCk7CisgICAgdmlydHVhbCBJbnRSZWN0IHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3Qo
KTsKKyAgICB2aXJ0dWFsIENvbG9yIHRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7CisKKyAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUlu
Zm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJL
aXQ6OlVwZGF0ZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlE
KTsKKworICAgIHZvaWQgc2V0TGF5ZXJUcmVlVGlsZUNsaWVudChXZWJLaXQ6OldlYkxheWVyVHJl
ZVRpbGVDbGllbnQqIGNsaWVudCkgeyBtX2xheWVyVHJlZVRpbGVDbGllbnQgPSBjbGllbnQ7IH0K
KyAgICBXZWJLaXQ6OldlYkxheWVyVHJlZVRpbGVDbGllbnQqIGxheWVyVHJlZVRpbGVDbGllbnQo
KSBjb25zdDsKKworICAgIGJvb2wgaXNSZWFkeUZvclRpbGVCdWZmZXJTd2FwKCkgY29uc3Q7Cisg
ICAgdm9pZCB1cGRhdGVUaWxlQnVmZmVyc1JlY3Vyc2l2ZWx5KCk7CisgICAgdm9pZCBzZXRDb250
ZW50c1NjYWxlKGZsb2F0KTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CisjZW5k
aWYKIAogcHJpdmF0ZToKICAgICBXZWJLaXQ6OldlYkxheWVySW5mbyBtX2xheWVySW5mbzsKLSAg
ICBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA+IG1fYmFja2luZ1N0b3JlOworICAgIFdl
YktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogbV9sYXllclRpbGVDbGllbnQ7CiAgICAgUmVm
UHRyPEltYWdlPiBtX2ltYWdlOwogICAgIEZsb2F0UmVjdCBtX25lZWRzRGlzcGxheVJlY3Q7Ci0g
ICAgYm9vbCBtX25lZWRzRGlzcGxheTsKLSAgICBib29sIG1fbW9kaWZpZWQ7Ci0gICAgYm9vbCBt
X2NvbnRlbnROZWVkc0Rpc3BsYXk7Ci0gICAgYm9vbCBtX2hhc1BlbmRpbmdBbmltYXRpb25zOwot
Ci0gICAgZmxvYXQgbV9jb250ZW50U2NhbGU7CisgICAgSW50UmVjdCBtX3Zpc2libGVDb250ZW50
UmVjdDsKKyAgICBib29sIG1fbmVlZHNEaXNwbGF5IDogMTsKKyAgICBib29sIG1fbW9kaWZpZWQg
OiAxOworICAgIGJvb2wgbV9jb250ZW50TmVlZHNEaXNwbGF5IDogMTsKKyAgICBib29sIG1faGFz
UGVuZGluZ0FuaW1hdGlvbnMgOiAxOworICAgIGJvb2wgbV9pblVwZGF0ZU1vZGUgOiAyOwogCiAg
ICAgdm9pZCBub3RpZnlDaGFuZ2UoKTsKKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JF
KQorICAgIFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogbV9sYXllclRyZWVUaWxlQ2xp
ZW50OworICAgIE93blB0cjxXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZT4gbV9tYWluQmFja2lu
Z1N0b3JlOworICAgIE93blB0cjxXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZT4gbV9wcmV2aW91
c0JhY2tpbmdTdG9yZTsKKyAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CisjZW5kaWYKIH07CiAK
IFdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
aAkocmV2aXNpb24gOTc0MjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTAgKzc0LDExIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIHsgfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIEVOQUJMRShU
SUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAg
dmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMo
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ0xheWVycygpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciop
ID0gMDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAJKHJldmlz
aW9uIDk3NDI1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Myw1ICs2NzMsMTMgQEAgdm9pZCBEcmF3
aW5nQXJlYUltcGw6OmRpc3BsYXkoVXBkYXRlSW5mbwogICAgIG1fbGFzdERpc3BsYXlUaW1lID0g
Y3VycmVudFRpbWUoKTsKIH0KIAorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCit2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlkUmVj
ZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24s
IENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciog
YXJndW1lbnRzKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3Nh
Z2VJRCwgYXJndW1lbnRzKTsKK30KKyNlbmRpZgorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYUltcGwuaAkocmV2aXNpb24gOTc0MjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDEw
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ2hpbGRXaW5kb3dHZW9tZXRy
eVVwZGF0ZShjb25zdCBXaW5kb3dHZW9tZXRyeSYpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVElM
RURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7Cisj
ZW5kaWYKKwogICAgIC8vIENvcmVJUEMgbWVzc2FnZSBoYW5kbGVycy4KICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlQmFja2luZ1N0b3JlU3RhdGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwg
Ym9vbCByZXNwb25kSW1tZWRpYXRlbHksIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCShyZXZpc2lvbiA5NzQy
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTAgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNp
ZiBQTEFURk9STShRVCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgInF0L0xheWVy
VHJlZUhvc3RRdC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKQEAgLTQ0LDYgKzQ4LDggQEAgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0
PiBMYXllclRyZWVIb3N0OgogICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FNYWM6OmNyZWF0ZSh3
ZWJQYWdlKTsKICNlbGlmIFBMQVRGT1JNKFdJTikgJiYgSEFWRShXS1FDQSkKICAgICByZXR1cm4g
TGF5ZXJUcmVlSG9zdENBV2luOjpjcmVhdGUod2ViUGFnZSk7CisjZWxpZiBQTEFURk9STShRVCkg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHJldHVybiBMYXllclRyZWVIb3N0UXQ6OmNyZWF0
ZSh3ZWJQYWdlKTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAkocmV2aXNp
b24gOTc0MjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
SG9zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsMjAgQEAKICNpZm5kZWYgTGF5ZXJU
cmVlSG9zdF9oCiAjZGVmaW5lIExheWVyVHJlZUhvc3RfaAogCisjaW5jbHVkZSA8Q29yZUlQQy9N
ZXNzYWdlSUQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKK25hbWVzcGFjZSBDb3JlSVBDIHsKK2NsYXNzIEFyZ3VtZW50RGVjb2Rl
cjsKK2NsYXNzIENvbm5lY3Rpb247Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFz
cyBJbnRSZWN0OwotICAgIGNsYXNzIEludFNpemU7Ci0gICAgY2xhc3MgR3JhcGhpY3NMYXllcjsK
K2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNz
IEdyYXBoaWNzTGF5ZXI7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNzIsNiArNzksMTQg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IH0KIAorI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2Fs
ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0
Rm9yTGF5ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6
TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyNlbmRpZgorCiAjaWYgUExB
VEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNoaWxkV2luZG93R2VvbWV0cnlV
cGRhdGUoY29uc3QgV2luZG93R2VvbWV0cnkmKSA9IDA7CiAjZW5kaWYKQEAgLTgwLDYgKzk1LDEx
IEBAIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0KFdlYlBhZ2UqKTsKIAog
ICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKKworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCisgICAgYm9vbCBtX3dhaXRpbmdGb3JVSVByb2Nlc3M7CisjZW5kaWYKIH07CiAKICNpZiAh
UExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5p
bgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVIb3N0Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACisjCisj
ICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIworCisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19T
VE9SRSkKK21lc3NhZ2VzIC0+IExheWVyVHJlZUhvc3QgeworICAgIFNldFZpc2libGVDb250ZW50
UmVjdEZvckxheWVyKGludCBsYXllcklELCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50
UmVjdCkKKyAgICBTZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKFdlYkNvcmU6
OkZsb2F0UG9pbnQgdHJhamVjdG9yeVZlY3RvcnkpCisgICAgU2V0VmlzaWJsZUNvbnRlbnRSZWN0
QW5kU2NhbGUoV2ViQ29yZTo6SW50UmVjdCBjb250ZW50UmVjdCwgZmxvYXQgc2NhbGUpCisgICAg
UmVuZGVyTmV4dEZyYW1lKCkKK30KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcAkocmV2aXNpb24g
OTc0MjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5n
QXJlYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsMTAgQEAgdm9pZCBUaWxlZERy
YXdpbmdBcmVhOjpyZW1vdmVUaWxlKGludCB0aQogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6RHJhd2luZ0FyZWFQcm94eTo6UmVtb3ZlVGlsZSh0aWxlSUQpKTsKIH0KIAorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYTo6ZGlkUmVjZWl2
ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENv
cmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpIHsg
fQorI2VuZGlmCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorCiAjZW5kaWYgLy8gVElMRURfQkFD
S0lOR19TVE9SRQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVk
RHJhd2luZ0FyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oCShyZXZpc2lvbiA5NzQyNSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9z
aXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0NvbXBvc2l0aW5nTGF5ZXJzKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXll
clRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlE
LCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNp
b24gOTc0MjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNjUsNiArMjE2NSwxNCBAQCB2b2lkIFdlYlBhZ2U6OmRp
ZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6CiAgICAgICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRS
ZWNlaXZlRHJhd2luZ0FyZWFNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRz
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NU
T1JFKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1lc3NhZ2VJRC5p
czxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXllclRyZWVIb3N0PigpKSB7CisgICAgICAgIGlmICht
X2RyYXdpbmdBcmVhKQorICAgICAgICAgICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZUxheWVy
VHJlZUhvc3RNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgogICAgIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAg
ICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NXZWJJbnNwZWN0b3I+KCkp
IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVI
b3N0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCShyZXZpc2lvbiA5NzQyNSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw4ICsyNSw0MTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0
UXQuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgorI2luY2x1
ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IExheWVyVHJlZUhvc3RR
dDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBM
YXllclRyZWVIb3N0UXQod2ViUGFnZSkpOworfQorCitMYXllclRyZWVIb3N0UXQ6On5MYXllclRy
ZWVIb3N0UXQoKQoreworfQorCitMYXllclRyZWVIb3N0UXQ6OkxheWVyVHJlZUhvc3RRdChXZWJQ
YWdlKiB3ZWJQYWdlKQorICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQorICAgICwgbV9ub3Rp
ZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2lzVmFsaWQodHJ1ZSkK
KyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAsIG1fd2FpdGluZ0ZvclVJUHJv
Y2VzcyhmYWxzZSkKKyAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1f
c2hvdWxkU3luY0ZyYW1lKGZhbHNlKQorICAgICwgbV9zaG91bGRTeW5jUm9vdExheWVyKHRydWUp
CisgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAmTGF5ZXJUcmVlSG9zdFF0OjpsYXllckZs
dXNoVGltZXJGaXJlZCkKKyAgICAsIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUp
Cit7CisgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4KKyAgICBtX3Jvb3RMYXllciA9IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBXZWJHcmFwaGljc0xheWVyKiB3ZWJSb290TGF5
ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIHdlYlJvb3RM
YXllci0+c2V0Um9vdExheWVyKHRydWUpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RMYXll
ci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFF0IHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAgIG1f
cm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRT
aXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQud2ViTGF5ZXJJ
RCA9IHRvV2ViR3JhcGhpY3NMYXllcih3ZWJSb290TGF5ZXIpLT5pZCgpOworCisgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworI2lm
IEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX3Jv
b3RMYXllci5nZXQoKSktPnNldExheWVyVHJlZVRpbGVDbGllbnQodGhpcyk7CisjZW5kaWYKKyNp
Zm5kZWYgTkRFQlVHCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJM
YXllclRyZWVIb3N0UXQgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRy
YXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5k
KCkpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2Ut
PnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLmdldCgpKTsKKworICAgIGlmIChtX3dlYlBhZ2UtPmhhc1BhZ2VPdmVybGF5KCkp
CisgICAgICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKworICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCit7CisgICAgaWYgKG1fbGF5ZXJG
bHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1c2hpbmdFbmFibGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxheWVyRmx1c2hp
bmdFbmFibGVkOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RRdDo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5
ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1f
bGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0
YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmNhbmNlbFBlbmRpbmdM
YXllckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZs
dXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQoreworICAgIG1fbm90aWZ5
QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICAvLyBBZGQgdGhlIGFj
Y2VsZXJhdGVkIGxheWVyIHRyZWUgaGllcmFyY2h5LgorICAgIGlmIChncmFwaGljc0xheWVyKQor
ICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5
ZXIpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6aW52YWxpZGF0ZSgpCit7CisgICAgY2Fu
Y2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgIG1f
cm9vdExheWVyID0gbnVsbHB0cjsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0UXQ6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlM
YXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
cmVjdCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0UXQ6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpCit7Cisg
ICAgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoc2Nyb2xsUmVjdCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQoKQoreworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2l6ZURpZENoYW5nZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKQoreworICAgIG1fcm9vdExheWVyLT5zZXRTaXpl
KG5ld1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMgb2Yg
dGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCisg
ICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCisgICAgRmxvYXRTaXplIG9sZFNp
emUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBpZiAobmV3U2l6ZS53
aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6
bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQo
KSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9s
ZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYgKG5ld1NpemUuaGVpZ2h0
KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwg
bmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOwor
CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVy
LT5zZXRTaXplKG5ld1NpemUpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGNyZWF0
ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKworfQorCit2
b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGRl
c3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIp
OworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwor
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitib29sIExheWVyVHJlZUhvc3RRdDo6Zmx1
c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBib29sIGRpZFN5bmMgPSBtX3dlYlBhZ2Ut
PmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5j
bHVkaW5nU3ViZnJhbWVzKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zeW5j
Q29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAobV9wYWdlT3Zlcmxh
eUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOworCisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHJldHVybiBkaWRTeW5jOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RRdDo6ZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJM
YXllckluZm8mIGluZm8pCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpTeW5jQ29tcG9zaXRp
bmdMYXllclN0YXRlKGluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZERlbGV0
ZUxheWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwor
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEZWxldGVD
b21wb3NpdGluZ0xheWVyKGlkKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpwZXJmb3Jt
U2NoZWR1bGVkTGF5ZXJGbHVzaCgpCit7CisgICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgp
OworCisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0Zv
clVJUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKKyAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IGZhbHNlOworICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIGlmICgh
bV9zaG91bGRTeW5jRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Nob3VsZFN5
bmNSb290TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVIb3N0UHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRvV2ViR3JhcGhpY3NMYXllciht
X3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKKyAgICAgICAgbV9zaG91bGRTeW5jUm9vdExheWVy
ID0gZmFsc2U7CisgICAgfQorCisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVIb3N0UHJveHk6OkRpZFJlbmRlckZyYW1lKCkpOworCisgICAgaWYgKCFtX25vdGlmeUFmdGVy
U2NoZWR1bGVkTGF5ZXJGbHVzaCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTGV0IHRoZSBk
cmF3aW5nIGFyZWEga25vdyB0aGF0IHdlJ3ZlIGRvbmUgYSBmbHVzaCBvZiB0aGUgbGF5ZXIgY2hh
bmdlcy4KKyAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdp
bmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOworICAgIG1fbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojps
YXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxMYXllclRyZWVIb3N0UXQ+KikKK3sKKyAgICBwZXJm
b3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6Y3Jl
YXRlUGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJUKCFtX3BhZ2VPdmVybGF5TGF5ZXIp
OworCisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMp
OworI2lmbmRlZiBOREVCVUcKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5hbWUoIkxheWVy
VHJlZUhvc3RRdCBwYWdlIG92ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VP
dmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENo
aWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlM
YXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAg
bV9wYWdlT3ZlcmxheUxheWVyID0gbnVsbHB0cjsKK30KKworaW50NjRfdCBMYXllclRyZWVIb3N0
UXQ6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQoreworICAgIGlmICghaW1h
Z2UpCisgICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKKyAgICBRUGl4bWFwKiBwaXht
YXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKworICAgIGlmICghcGl4
bWFwKQorICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBpbnQ2NF90IGtl
eSA9IHBpeG1hcC0+Y2FjaGVLZXkoKTsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJh
dG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CisK
KyAgICBpZiAoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkg
eworICAgICAgICArKyhpdC0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICB9CisK
KyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgpLCBpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEo
KSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApOworICAgIHsKKyAgICAgICAg
T3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFw
LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOworICAg
IH0KKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBiaXRtYXAtPmNy
ZWF0ZUhhbmRsZShoYW5kbGUpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlSG9zdFByb3h5OjpDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXksIGhhbmRsZSkp
OworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuYWRkKGtleSwgMSk7Cisg
ICAgcmV0dXJuIGtleTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbGVhc2VJbWFnZUJh
Y2tpbmdTdG9yZShpbnQ2NF90IGtleSkKK3sKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJu
OworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgPT0gbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aXQtPnNlY29uZC0tOworCisgICAgaWYgKGl0LT5zZWNvbmQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKKyAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveURpcmVj
dGx5Q29tcG9zaXRlZEltYWdlKGtleSkpOworfQorCisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpu
b3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3Vi
bGUgdGltZSkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1aXJl
ZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30KKwordm9pZCBMYXllclRyZWVI
b3N0UXQ6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhp
Y3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBj
bGlwUmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQs
IGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChncmFwaGljc0xh
eWVyID09IG1fcGFnZU92ZXJsYXlMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQYWdl
T3ZlcmxheShncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6OnNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdAor
eworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dEZWJ1
Z0JvcmRlcnMoKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6OnNob3dSZXBhaW50Q291bnRl
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3Mo
KS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9y
dHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNp
ZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpjcmVh
dGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYg
dXBkYXRlSW5mbykKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhv
c3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mbykp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZVRpbGVGb3JM
YXllcihsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8pKTsKK30KK3ZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlVGlsZUZv
ckxheWVyKGxheWVySUQsIHRpbGVJRCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0
VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHJlY3QpCit7CisgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSBXZWJHcmFwaGlj
c0xheWVyOjpsYXllckJ5SUQobGF5ZXJJRCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0
dXJuOworICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdChyZWN0KTsKKyAgICBsYXllci0+c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0KHJlY3QpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUp
Cit7CisgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobV9y
b290TGF5ZXIuZ2V0KCkpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBs
YXllci0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdChy
ZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAg
ICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+
c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsK
K30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV93
YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9
CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBj
b25zdAoreworICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQcm9j
ZXNzOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZWxzZQogI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3QuaCIKIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpCkBAIC0zNSwzICs0NDAsNCBAQCBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBv
cnRzQWNjZWxlcmF0ZWRDCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNiBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMYXllclRyZWVIb3N0UXRfaAorI2RlZmlu
ZSBMYXllclRyZWVIb3N0UXRfaAorCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldl
YkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQu
aD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBVcGRhdGVJbmZvOworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgTGF5ZXJUcmVlSG9zdFF0IDog
cHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKKyNpZiBF
TkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAgICAgICAgICAgICAgICAgICAsIHB1Ymxp
YyBXZWJMYXllclRyZWVUaWxlQ2xpZW50CisjZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IGNyZWF0ZShXZWJQYWdlKik7CisgICAgdmlydHVh
bCB+TGF5ZXJUcmVlSG9zdFF0KCk7CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKTsKKworICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYg
bGF5ZXJUcmVlQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91
bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Cisg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROb25D
b21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZz
ZXQpOworICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKworICAgIHZp
cnR1YWwgdm9pZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
VW5pbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlO
ZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lk
IHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
dm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVM
YXllckZsdXNoKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFu
Z2UoKSB7IH0KKyAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFn
ZSopOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7
CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJik7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBk
YXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0
aWxlSUQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcihp
bnQgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBy
ZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNB
bGxvd2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdEFu
ZFNjYWxlKGNvbnN0IEludFJlY3QmLCBmbG9hdCBzY2FsZSk7CisgICAgdmlydHVhbCB2b2lkIHNl
dFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKGNvbnN0IFdl
YkxheWVySW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBkaWREZWxldGVMYXllcihXZWJMYXllcklE
KTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdFF0KFdl
YlBhZ2UqKTsKKworcHJpdmF0ZToKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmly
dHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciosIGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRD
b250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVy
cygpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoKSBjb25zdDsK
KworICAgIC8vIExheWVyVHJlZUhvc3RRdAorICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXll
cigpOworICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBib29sIGZsdXNo
UGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2go
KTsKKyAgICB2b2lkIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CisgICAgdm9pZCBzZW5k
TGF5ZXJzVG9VSSgpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9v
dExheWVyOworCisgICAgLy8gVGhlIGxheWVyIHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9z
aXRlZCBjb250ZW50LgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXI7CisKKyAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBX
aWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJsYXkuCisgICAgT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKKworICAgIEhhc2hNYXA8aW50
NjRfdCwgaW50PiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOworCisgICAgYm9v
bCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKKyAgICBib29sIG1faXNWYWxpZDsK
KyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBib29sIG1fd2FpdGluZ0ZvclVJ
UHJvY2VzczsKKyAgICBib29sIG1faXNTdXNwZW5kZWQ7CisjZW5kaWYKKyAgICBMYXllclRyZWVD
b250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKKyAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOwor
ICAgIGJvb2wgbV9zaG91bGRTeW5jUm9vdExheWVyOworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVy
RmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlSG9zdFF0PiopOworICAgIFdlYkNvcmU6OlRp
bWVyPExheWVyVHJlZUhvc3RRdD4gbV9sYXllckZsdXNoVGltZXI7CisgICAgYm9vbCBtX2xheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKK307CisKK30KKworI2VuZGlmIC8vIExheWVyVHJlZUhv
c3RRdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111020</attachid>
            <date>2011-10-14 08:56:35 -0700</date>
            <delta_ts>2011-10-14 12:26:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>104107</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2N2ZjYjUyLi4yNzI2MTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcy
IEBACisyMDExLTEwLTExICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1F0XVtXSzJdIFN5bmNocm9uaXplIHRpbGluZyB3aXRoIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE1MQorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgorCisg
ICAgICAgIE1ha2UgdGhlIHRpbGVkICJub24tY29tcG9zaXRlZCIgY29udGVudCBhbmQgdGhlIGNv
bXBvc2l0ZWQgbGF5ZXJzIGdvIHRocm91Z2ggdGhlIHNhbWUKKyAgICAgICAgY29kZSBwYXRoIG9u
IFdlYktpdDIuIEluc3RlYWQgb2YgaGF2aW5nIGEgImRyYXdpbmcgYXJlYSIgdGhhdCBoYW5kbGVz
IHRoZSBub24tY29tcG9zaXRlZAorICAgICAgICBjb250ZW50IGFuZCBhIHNlcGVyYXRlIGxheWVy
IHRyZWUsIHdlIHB1dCBldmVyeXRoaW5nIGluIGEgbGF5ZXIgdHJlZSwgd2l0aCB0aGUgbm9uLQor
ICAgICAgICBjb21wb3NpdGVkIGNvbnRlbnQgYmVpbmcgYSBsYXllciBpbiB0aGUgdHJlZS4KKwor
ICAgICAgICBUaGlzIGFsbG93cyBmaXhpbmcgc2V2ZXJhbCBpc3N1ZXMgd2l0aCB3ZWJzaXRlcyB0
aGF0IGhhdmUgbGFyZ2UgY29udGVudCBhcmVhcyB0aGF0IGFyZQorICAgICAgICBjb21wb3NpdGVk
IG9yIG92ZXJsYXAgd2l0aCBjb21wb3NpdGVkIGxheWVycy4KKworICAgICAgICBMYXllci10cmVl
IHN5bmNocm9uaXphdGlvbiBpcyBkb25lIGJ5IHBhc3NpbmcgV2ViS2l0MiBtZXNzYWdlcyBiZXR3
ZWVuIGEgTGF5ZXJUcmVlSG9zdAorICAgICAgICBvbiB0aGUgV2ViUHJvY2VzcyBhbmQgYSBMYXll
clRyZWVIb3N0UHJveHkgb24gdGhlIFVJIHByb2Nlc3MuIEV2ZXJ5IGxheWVyIGluIHRoZSB0cmVl
IGhhcworICAgICAgICBpdHMgb3duIHRpbGVkIGJhY2tpbmcgc3RvcmUsIGFuZCB1c2VzIHRoZSBM
YXllclRyZWVIb3N0IGNvbW11bmljYXRpb24gY2hhbm5lbCB0byBwYXNzCisgICAgICAgIGNvbnRl
bnQgdXAgdG8gdGhlIFVJIHByb2Nlc3MuIFRoZSBVSSBwcm9jZXNzIHdpbGwgbGF0ZXIgY3JlYXRl
cyBpdHMgb3duIEdyYXBoaWNzTGF5ZXIgdHJlZSwKKyAgICAgICAgYmFzZWQgb24gVGV4dHVyZU1h
cHBlciwgd2hpY2ggY2FuIGJlIHBhaW50ZWQgZGlyZWN0bHkgd2l0aCBPcGVuR0wuCisKKyAgICAg
ICAgU2V2ZXJhbCBvcHRpbWl6YXRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBub24tY29tcG9z
aXRlZCBsYXllciBhcyB3ZWxsLCBlLmcuIHNwZWNpZnlpbmcKKyAgICAgICAgYSB0cmFqZWN0b3J5
IGFuZCB1cGRhdGluZyB0aGUgdmlzaWJsZSByZWN0IHRvZ2V0aGVyIHdpdGggdGhlIGNvbnRlbnQg
c2NhbGUuCisKKyAgICAgICAgVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBkaXNhYmxlZCwgYSBzZXBh
cmF0ZSBwYXRjaCB3aWxsIGVuYWJsZSBpdCBhbmQgZ2x1ZSBpdCB0bworICAgICAgICBRVG91Y2hX
ZWJQYWdlLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJvOgorICAgICAgICAqIFBsYXRm
b3JtL0NvcmVJUEMvTWVzc2FnZUlELmg6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQyL21lc3Nh
Z2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9MYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICog
U2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcklu
Zm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9xdC9M
YXllclRyZWVDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0
OjpMYXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6
fkxheWVyVHJlZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojpl
bmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpkZWNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktp
dDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KToKKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVByb3h5Ojp2aWV3cG9ydFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eTo6aXNCYWNraW5nU3RvcmVSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhUHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVj
dG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnJlbW92ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2Vp
dmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6cGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxl
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6bGF5
ZXJCeUlEKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpyb290TGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeVN5bmNS
ZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd0RlYnVn
Qm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd1JlcGFp
bnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludENv
bnRlbnRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2Vz
LmluOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDogQWRkZWQuCisgICAgICAgICog
V2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6fldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVQYWludEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNl
dFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0
ZXNBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpsYXllclRyZWVUaWxlQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldExheWVyVHJlZVRpbGVDbGllbnQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RB
bmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3
aW5nQXJlYTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVy
TmV4dFNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UXQ6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZERlbGV0ZUxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRlc3Ryb3lQYWdl
T3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjphZG9wdElt
YWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZWxl
YXNlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6
Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RR
dDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hv
d0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hvd1Jl
cGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVU
aWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZW1vdmVUaWxlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRl
bnRSZWN0QW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKToKKwogMjAxMS0xMC0xMSAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBTbWFsbCBl
bWJlZGRlZCBQREZzIGFyZSBub3QgZnVsbHkgcmVwYWludGVkIHdoZW4gc2Nyb2xsaW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8gYi9Tb3VyY2UvV2ViS2l0
Mi9EZXJpdmVkU291cmNlcy5wcm8KaW5kZXggZmNlNTljNS4uYjkzZTc2NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rl
cml2ZWRTb3VyY2VzLnBybwpAQCAtOTIsNiArOTIsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwK
ICAgICBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gXAogICAgIERvd25sb2FkUHJv
eHkubWVzc2FnZXMuaW4gXAogICAgIERyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4gXAorICAg
IExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luQ29udHJvbGxlclBy
b3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Qcm9jZXNzLm1lc3NhZ2VzLmluIFwKICAgICBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBcCkBAIC0xMTYsNiArMTE3LDcgQEAg
TUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMu
aW4gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gXAogICAgIFdl
YlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gXAorICAgIFdlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gXAog
ICAgIFdlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVz
c2FnZUlELmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCmlu
ZGV4IDEzYjIxODMuLjQ1NTFkN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvTWVzc2FnZUlELmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9NZXNzYWdlSUQuaApAQCAtMzgsNiArMzgsNyBAQCBlbnVtIE1lc3NhZ2VDbGFzcyB7CiAgICAg
TWVzc2FnZUNsYXNzQXV0aGVudGljYXRpb25NYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc0RyYXdp
bmdBcmVhLAogICAgIE1lc3NhZ2VDbGFzc0luamVjdGVkQnVuZGxlLAorICAgIE1lc3NhZ2VDbGFz
c0xheWVyVHJlZUhvc3QsCiAgICAgTWVzc2FnZUNsYXNzV2ViQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXIsCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29va2llTWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NX
ZWJEYXRhYmFzZU1hbmFnZXIsCkBAIC01NCw2ICs1NSw3IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsK
ICAgICAvLyBNZXNzYWdlcyBzZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgVUkgcHJvY2Vz
cy4KICAgICBNZXNzYWdlQ2xhc3NEb3dubG9hZFByb3h5LAogICAgIE1lc3NhZ2VDbGFzc0RyYXdp
bmdBcmVhUHJveHksCisgICAgTWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdFByb3h5LAogICAgIE1l
c3NhZ2VDbGFzc1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHksCiAgICAgTWVzc2FnZUNs
YXNzV2ViQ29udGV4dCwKICAgICBNZXNzYWdlQ2xhc3NXZWJDb250ZXh0TGVnYWN5LApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5IGIvU291cmNl
L1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CmluZGV4IGI4NWRhOTguLmQyZTRl
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5w
eQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKQEAgLTM4
MSw2ICszODEsOCBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dlYktp
dDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwKICAgICAgICAgJ1dlYktp
dDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rlcic6IFtdLAogICAgICAgICAnV2ViS2l0OjpX
ZWJHZXN0dXJlRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAorICAgICAgICAnV2ViS2l0OjpXZWJM
YXllcklEJzogWyciV2ViTGF5ZXJUcmVlSW5mby5oIiddLAorICAgICAgICAnV2ViS2l0OjpXZWJM
YXllckluZm8nOiBbJyJXZWJMYXllclRyZWVJbmZvLmgiJ10sCiAgICAgICAgICdXZWJLaXQ6Oldl
YktleWJvYXJkRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAogICAgICAgICAnV2ViS2l0OjpXZWJN
b3VzZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViVG91Y2hF
dmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNv
bnRleHQuaAppbmRleCA4NjY3Yzk4Li4yZGI1ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9M
YXllclRyZWVDb250ZXh0LmgKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogICAgIHVpbnQzMl90
IGNvbnRleHRJRDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBIV05EIHdpbmRvdzsKKyNlbGlm
IFBMQVRGT1JNKFFUKQorICAgIHVpbnQzMl90IHdlYkxheWVySUQ7CiAjZW5kaWYKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAppbmRleCBhMDEyODU1Li5l
ZGI2MmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5m
by5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCkBA
IC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAKKyNpbmNs
dWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKIApAQCAtMzMsMzUgKzM0LDE3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogdm9pZCBXZWJMYXllckluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgLy8gV2UgaGF2ZSB0byBkaXZpZGUgaXQgdG8gc2V2
ZXJhbCBsaW5lcywgYmVjYXVzZSBDb3JlSVBDOjpJbi9PdXQgdGFrZXMgYSBtYXhpbXVtIG9mIDEw
IGFyZ3VtZW50cy4KLSAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4oaWQsIG5hbWUsIHBh
cmVudCwgY2hpbGRyZW4sIGZsYWdzLCByZXBsaWNhLCBtYXNrKSk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlKENvcmVJUEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGlj
YSwgbWFzaywgaW1hZ2VCYWNraW5nU3RvcmVJRCkpOwogICAgIGVuY29kZXItPmVuY29kZShDb3Jl
SVBDOjpJbihwb3MsIHNpemUsIHRyYW5zZm9ybSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQsIGNoaWxk
cmVuVHJhbnNmb3JtLCBjb250ZW50c1JlY3QpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoaW1hZ2VC
YWNraW5nU3RvcmUgPyBpbWFnZUJhY2tpbmdTdG9yZS0+c2l6ZSgpIDogSW50U2l6ZSgpKTsKLQot
ICAgIGlmICghaW1hZ2VCYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlIGltYWdlSGFuZGxlOwotICAgIGlmIChpbWFnZUJhY2tpbmdTdG9y
ZS0+Y3JlYXRlSGFuZGxlKGltYWdlSGFuZGxlKSkKLSAgICAgICAgaW1hZ2VIYW5kbGUuZW5jb2Rl
KGVuY29kZXIpOwogfQogCiBib29sIFdlYkxheWVySW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgV2ViTGF5ZXJJbmZvJiBpbmZvKQogewogICAgIC8vIFdlIGhh
dmUgdG8gZGl2aWRlIGl0IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0
IHRha2VzIGEgbWF4aW11bSBvZiAxMCBhcmd1bWVudHMuCi0gICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwgaW5mby5wYXJlbnQsIGluZm8uY2hp
bGRyZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5mby5tYXNrKSkpCisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwgaW5mby5wYXJl
bnQsIGluZm8uY2hpbGRyZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5mby5tYXNrLCBp
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLnBvcywgaW5mby5zaXplLCBpbmZv
LnRyYW5zZm9ybSwgaW5mby5vcGFjaXR5LCBpbmZvLmFuY2hvclBvaW50LCBpbmZvLmNoaWxkcmVu
VHJhbnNmb3JtLCBpbmZvLmNvbnRlbnRzUmVjdCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBJbnRTaXplIGltYWdlQmFja2luZ1N0b3JlU2l6ZTsKLSAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShpbWFnZUJhY2tpbmdTdG9yZVNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGltYWdlQmFja2luZ1N0b3JlU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaW1hZ2VIYW5kbGU7Ci0gICAgaWYgKFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpkZWNvZGUoZGVjb2RlciwgaW1hZ2VIYW5kbGUpKQotICAg
ICAgICBpbmZvLmltYWdlQmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaW1h
Z2VIYW5kbGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkxheWVyVHJlZUluZm8uaAppbmRleCBhMGU2OGQzLi4yNTAwM2U3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKQEAgLTM0LDYgKzM0LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdHlwZWRlZiB1aW50MzJfdCBXZWJM
YXllcklEOworZW51bSB7IEludmFsaWRXZWJMYXllcklEID0gMCB9OwogCiBzdHJ1Y3QgV2ViTGF5
ZXJVcGRhdGVJbmZvIHsKICAgICBXZWJMYXllclVwZGF0ZUluZm8oKSB7IH0KQEAgLTU0LDYgKzU1
LDcgQEAgc3RydWN0IFdlYkxheWVySW5mbyB7CiAgICAgV2ViTGF5ZXJJRCBwYXJlbnQ7CiAgICAg
V2ViTGF5ZXJJRCByZXBsaWNhOwogICAgIFdlYkxheWVySUQgbWFzazsKKyAgICBpbnQ2NF90IGlt
YWdlQmFja2luZ1N0b3JlSUQ7CiAKICAgICBGbG9hdFBvaW50IHBvczsKICAgICBGbG9hdFBvaW50
M0QgYW5jaG9yUG9pbnQ7CkBAIC03MSw2ICs3Myw4IEBAIHN0cnVjdCBXZWJMYXllckluZm8gewog
ICAgICAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsKICAgICAgICAgICAgIGJvb2wgcHJl
c2VydmVzM0QgOiAxOwogICAgICAgICAgICAgYm9vbCBjb250ZW50TmVlZHNEaXNwbGF5IDogMTsK
KyAgICAgICAgICAgIGJvb2wgaW1hZ2VJc1VwZGF0ZWQ6IDE7CisgICAgICAgICAgICBib29sIGlz
Um9vdExheWVyOiAxOwogICAgICAgICB9OwogICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAg
ICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9MYXllclRyZWVDb250
ZXh0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5j
cHAKaW5kZXggZjFiZjFiNC4uZDM3ZDc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKQEAgLTI2LDQxICsyNiwzOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKIAotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAi
QXJndW1lbnRFbmNvZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBMYXllclRyZWVDb250
ZXh0OjpMYXllclRyZWVDb250ZXh0KCkKKyAgICA6IHdlYkxheWVySUQoMCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCiBMYXllclRyZWVDb250ZXh0Ojp+TGF5ZXJUcmVlQ29udGV4dCgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb250ZXh0Ojpl
bmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3QKK3ZvaWQgTGF5ZXJUcmVlQ29u
dGV4dDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGVuY29kZXItPmVuY29kZSh3ZWJMYXllcklEKTsK
IH0KIAotYm9vbCBMYXllclRyZWVDb250ZXh0OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiwgTGF5ZXJUcmVlQ29udGV4dCYpCitib29sIExheWVyVHJlZUNvbnRleHQ6OmRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIExheWVyVHJlZUNvbnRleHQmIGNvbnRl
eHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZGVjb2Rlci0+ZGVjb2RlKGNvbnRleHQud2ViTGF5ZXJJRCk7CiB9CiAKIGJvb2wgTGF5ZXJU
cmVlQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdlYkxheWVySUQ7CiB9CiAKLWJvb2wgb3BlcmF0
b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpCiti
b29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYSwgY29uc3QgTGF5ZXJUcmVl
Q29udGV4dCYgYikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBhLndlYkxheWVySUQgPT0gYi53ZWJMYXllcklEOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmNwcAppbmRleCBmODUyZTJmLi4zOWQ2MGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0yOCw2ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01
Myw0ICs1NywxNiBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHk6OnNldFNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQogICAgIHNpemVEaWRDaGFuZ2Uo
KTsKIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQordm9pZCBEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAg
bV93ZWJQYWdlUHJveHktPnNldFZpZXdOZWVkc0Rpc3BsYXkodmlld3BvcnRWaXNpYmxlUmVjdCgp
KTsKK30KKworV2ViQ29yZTo6SW50UmVjdCBEcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3Qo
KSBjb25zdAoreworICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFn
ZVByb3h5LT52aWV3U2l6ZSgpKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDA4OGZj
OGIuLmExOTQ5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkuaApAQCAtMjcsOSArMjcsMTEgQEAKICNpZm5kZWYgRHJhd2luZ0FyZWFQcm94eV9oCiAjZGVm
aW5lIERyYXdpbmdBcmVhUHJveHlfaAogCisjaW5jbHVkZSA8Q29yZUlQQy9NZXNzYWdlSUQuaD4K
ICNpbmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKLSNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNp
bmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogI2lmIFBM
QVRGT1JNKFFUKQpAQCAtNDUsMTMgKzQ3LDE3IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIH0KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEludFJlY3Q7CisgICAgY2xhc3MgRmxvYXRQ
b2ludDsKKyAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIH0KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIExheWVyVHJlZUNvbnRleHQ7CitjbGFzcyBMYXllclRyZWVIb3N0UHJv
eHk7CiBjbGFzcyBVcGRhdGVJbmZvOworY2xhc3MgV2ViTGF5ZXJUcmVlSW5mbzsKK2NsYXNzIFdl
YkxheWVyVXBkYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAogY2xhc3MgRHJhd2luZ0Fy
ZWFQcm94eSB7CkBAIC03Nyw2ICs4MywyNCBAQCBwdWJsaWM6CiAgICAgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
T2Zmc2V0KTsKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4g
Y29udGVudHNSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udGVudHNS
ZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQmFja2luZ1N0b3JlUmVhZHkoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSkg
eyB9CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZp
c2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3Qg
V2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGVGb3JM
YXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciogYXJndW1lbnRzKSB7IH0KKworICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJu
IG1fd2ViUGFnZVByb3h5OyB9CisjZW5kaWYKKyNlbmRpZgogcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlLCBXZWJQYWdlUHJveHkqKTsKIApA
QCAtODYsNiArMTEwLDEwIEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6
ZTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRyPExh
eWVyVHJlZUhvc3RQcm94eT4gbV9sYXllclRyZWVIb3N0UHJveHk7CisjZW5kaWYKKwogcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZSgpID0gMDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5kZXggNjE5ZDUw
OC4uNGQ3YmQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eUltcGwuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXllclRy
ZWVIb3N0UHJveHkuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC0zMjgsOCArMzMyLDM4IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29u
dGV4CiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fbGF5ZXJUcmVlQ29udGV4
dCA9IGxheWVyVHJlZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIGlmICghbV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7CisjZW5k
aWYKK30KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQordm9pZCBEcmF3aW5nQXJl
YVByb3h5SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVl
SG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+ZGlkUmVjZWl2ZUxheWVy
VHJlZUhvc3RQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOwor
fQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5k
U2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQg
c2NhbGUpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVy
VHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKHZpc2libGVDb250
ZW50c1JlY3QsIHNjYWxlKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CiB9CiAKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUlt
cGw6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQor
ICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQobWF0
cml4LCBvcGFjaXR5KTsKK30KKyNlbmRpZgorCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQogewogICAgIEFTU0VSVChpc0luQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4IGQwOTFmOTcuLmFhYzcxZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCkBAIC0zOSw2ICsz
OSw4IEBAIGNsYXNzIFJlZ2lvbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIExheWVy
VHJlZUhvc3RQcm94eTsKKwogY2xhc3MgRHJhd2luZ0FyZWFQcm94eUltcGwgOiBwdWJsaWMgRHJh
d2luZ0FyZWFQcm94eSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RHJhd2luZ0Fy
ZWFQcm94eUltcGw+IGNyZWF0ZShXZWJQYWdlUHJveHkqKTsKQEAgLTc1LDYgKzc3LDEzIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKIAogICAg
IGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gIW1f
bGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCk7IH0KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9y
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOworI2VuZGlmCiAjZWxzZQogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmNlZjFmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTAsMCArMSwxMzUgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKyNkZWZpbmUg
TGF5ZXJUcmVlSG9zdFByb3h5X2gKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1
ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJNZXNzYWdlUXVldWUuaCIKKyNpbmNs
dWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViTGF5ZXJJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOworCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI7CisKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSop
OworICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOworICAgIHZvaWQgc3luY0NvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdM
YXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciop
OworICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgSW50UmVjdCYsIGZsb2F0KTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOworI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQorICAgIHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICB2b2lkIHN3YXBD
b250ZW50QnVmZmVycygpOworICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKKyAgICB2b2lkIGNy
ZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpV
cGRhdGVJbmZvJik7CisgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZvaWQgcmVtb3ZlVGls
ZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2b2lkIGNyZWF0ZURpcmVj
dGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmKTsKKyAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2
NF90KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvckxheWVyKFdlYkxheWVy
SUQsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CisjZW5kaWYK
KworcHJvdGVjdGVkOgorICAgIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRlTGF5ZXIo
V2ViTGF5ZXJJRCk7CisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBp
ZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQo
aWQpOyB9CisgICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5
ZXIuZ2V0KCk7IH0KKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQorCisgICAgUnVuTG9vcDo6VGltZXI8TGF5ZXJU
cmVlSG9zdFByb3h5PiBtX2FuaW1hdGlvblRpbWVyOworICAgIERyYXdpbmdBcmVhUHJveHkqIG1f
ZHJhd2luZ0FyZWFQcm94eTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgSW50UmVjdCBtX3Zpc2libGVDb250
ZW50c1JlY3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworCisgICAgTWVzc2FnZVF1ZXVl
PExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyPiBtX21lc3NhZ2VzVG9SZW5kZXJlcjsKKyAgICB2
b2lkIHB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI+KTsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBl
cj4gbV90ZXh0dXJlTWFwcGVyOworI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8SW50UG9pbnQsIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IFRpbGVkSW1hZ2U7
CisgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwIG1fbm9kZVZpc3VhbENvbnRlbnRz
UmVjdE1hcDsKKyAgICBIYXNoTWFwPGludCwgaW50PiBtX3RpbGVUb05vZGVUaWxlOworICAgIGlu
dCByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3Q7CisgICAgSGFzaE1h
cDxpbnQ2NF90LCBUaWxlZEltYWdlPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKworICAg
IHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7CisgICAgdm9pZCBzeW5jaHJvbml6ZVZpZXdw
b3J0KCk7CisgICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIHNldFJv
b3RMYXllcklEKFdlYkxheWVySUQpOworICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycyhjb25z
dCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBm
bG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7CisgICAg
dm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBRSW1hZ2UmKTsKKyAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIGNv
bnN0IFFJbWFnZSYpOworICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOworICAgIHZvaWQg
YXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdl
SUQpOworICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGVuc3VyZVJvb3RM
YXllcigpOworICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7CisKKyNlbmRpZgorCisg
ICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZlY3RvcjxXZWJMYXll
cklEPiBtX2xheWVyc1RvRGVsZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgV2Vi
TGF5ZXJJRCBtX3Jvb3RMYXllcklEOworICAgIGludCBtX2lkOworfTsKKworfQorCisjZW5kaWYg
Ly8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmJjN2FmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzIg
QEAKKyMKKyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisj
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorbWVzc2FnZXMgLT4g
TGF5ZXJUcmVlSG9zdFByb3h5IHsKKyAgICBTeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKFdlYktp
dDo6V2ViTGF5ZXJJbmZvIGxheWVySW5mbykKKyAgICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1
aW50MzJfdCBpZCkKKyAgICBEZWxldGVDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQorICAg
IENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJLaXQ6
OlVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3Qg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAg
UmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCisgICAgQ3Jl
YXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUgaGFuZGxlKQorICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90IGtleSkKKyAgICBEaWRSZW5kZXJGcmFtZSgpCit9CisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYWE4NmVmMi4uNDZkMDBjOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTc5LDYgKzc5
LDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dGZWF0dXJlcy5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJF
X01BUFBFUikKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgorI2VuZGlm
CisKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlICJBcmd1bWVudENvZGVyc1F0LmgiCiAjZW5k
aWYKQEAgLTEzOTcsNiArMTQwMSwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIGlm
IChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdFByb3h5Pigp
KSB7CisgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlN
ZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAobWVzc2Fn
ZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc1dlYkluc3BlY3RvclByb3h5PigpKSB7CiAgICAg
ICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eSogaW5zcGVjdG9yID0gdGhpcy0+aW5zcGVjdG9yKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFBy
b3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eVF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzAzNmU0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQ
cm94eVF0LmNwcApAQCAtMCwwICsxLDU5NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdE1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiTWFpblRocmVhZC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgor
I2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5o
IgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAidGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBw
ZXIuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNpbmNsdWRlIDxR
RGF0ZVRpbWU+CisjaW5jbHVkZSA8Y2Fpcm8vT3BlbkdMU2hpbXMuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIFR5cGUgeworICAgICAgICBEZWxldGVMYXllciwKKyAgICAgICAgQ3JlYXRlVGlsZSwK
KyAgICAgICAgUmVtb3ZlVGlsZSwKKyAgICAgICAgVXBkYXRlVGlsZSwKKyAgICAgICAgQ3JlYXRl
SW1hZ2UsCisgICAgICAgIERlc3Ryb3lJbWFnZSwKKyAgICAgICAgU3luY0xheWVyUGFyYW1ldGVy
cywKKyAgICAgICAgRmx1c2hMYXllckNoYW5nZXMsCisgICAgICAgIFNldFJvb3RMYXllcgorICAg
IH07CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7Cit9OworCit0ZW1wbGF0ZTxj
bGFzcyBNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlR5cGUgbWVzc2Fn
ZVR5cGU+CitjbGFzcyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhIDogcHVibGlj
IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1lc3NhZ2VUeXBlOyB9CisKKyAgICBzdGF0aWMgUGFzc093
blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4gY3JlYXRlKGNvbnN0IE1lc3NhZ2VEYXRh
JiBkYXRhID0gTWVzc2FnZURhdGEoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YShkYXRhKSk7CisgICAgfQorCisg
ICAgY29uc3QgTWVzc2FnZURhdGEmIGRhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fZGF0YTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXJXaXRoRGF0YShjb25zdCBNZXNzYWdlRGF0YSYgZGF0YSkKKyAgICAgICAgOiBtX2RhdGEoZGF0
YSkKKyAgICB7CisgICAgfQorCisgICAgTWVzc2FnZURhdGEgbV9kYXRhOworfTsKKworCituYW1l
c3BhY2Ugeworc3RydWN0IENyZWF0ZVRpbGVNZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBs
YXllcklEOworICAgIGludCByZW1vdGVUaWxlSUQ7CisgICAgZmxvYXQgc2NhbGU7Cit9OworCitz
dHJ1Y3QgVXBkYXRlVGlsZU1lc3NhZ2VEYXRhIHsKKyAgICBXZWJMYXllcklEIGxheWVySUQ7Cisg
ICAgaW50IHJlbW90ZVRpbGVJRDsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3Q7CisgICAgSW50UmVj
dCB0YXJnZXRSZWN0OworICAgIFFJbWFnZSBpbWFnZTsKK307CisKK3N0cnVjdCBSZW1vdmVUaWxl
TWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKKyAgICBpbnQgcmVtb3RlVGls
ZUlEOworfTsKKworc3RydWN0IENyZWF0ZUltYWdlTWVzc2FnZURhdGEgeworICAgIGludDY0X3Qg
aW1hZ2VJRDsKKyAgICBRSW1hZ2UgaW1hZ2U7Cit9OworCitzdHJ1Y3QgRGVzdHJveUltYWdlTWVz
c2FnZURhdGEgeworICAgIGludDY0X3QgaW1hZ2VJRDsKK307CisKK3N0cnVjdCBTeW5jTGF5ZXJQ
YXJhbWV0ZXJzTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySW5mbyBsYXllckluZm87Cit9Owor
CitzdHJ1Y3QgRW1wdHlNZXNzYWdlRGF0YSB7IH07CitzdHJ1Y3QgRGVsZXRlTGF5ZXJNZXNzYWdl
RGF0YSB7CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworfTsKK3N0cnVjdCBTZXRSb290TGF5ZXJN
ZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworfTsKKworY2xhc3MgQ3JlYXRl
VGlsZU1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJX
aXRoRGF0YTxDcmVhdGVUaWxlTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVy
OjpDcmVhdGVUaWxlPiB7IH07CitjbGFzcyBVcGRhdGVUaWxlTWVzc2FnZQorICAgICAgICA6IHB1
YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPFVwZGF0ZVRpbGVNZXNzYWdl
RGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlVwZGF0ZVRpbGU+IHsgfTsKK2NsYXNz
IFJlbW92ZVRpbGVNZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyV2l0aERhdGE8UmVtb3ZlVGlsZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9S
ZW5kZXJlcjo6UmVtb3ZlVGlsZT4geyB9OworY2xhc3MgQ3JlYXRlSW1hZ2VNZXNzYWdlCisgICAg
ICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8Q3JlYXRlSW1h
Z2VNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkNyZWF0ZUltYWdlPiB7
IH07CitjbGFzcyBEZXN0cm95SW1hZ2VNZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJl
ZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8RGVzdHJveUltYWdlTWVzc2FnZURhdGEsIExheWVy
VHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpEZXN0cm95SW1hZ2U+IHsgfTsKK2NsYXNzIEZsdXNoTGF5
ZXJDaGFuZ2VzTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5k
ZXJlcldpdGhEYXRhPEVtcHR5TWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVy
OjpGbHVzaExheWVyQ2hhbmdlcz4geyB9OworY2xhc3MgU3luY0xheWVyUGFyYW1ldGVyc01lc3Nh
Z2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxT
eW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVy
OjpTeW5jTGF5ZXJQYXJhbWV0ZXJzPiB7IH07CitjbGFzcyBEZWxldGVMYXllck1lc3NhZ2UKKyAg
ICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxEZWxldGVM
YXllck1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6RGVsZXRlTGF5ZXI+
IHsgfTsKK2NsYXNzIFNldFJvb3RMYXllck1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJU
cmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxTZXRSb290TGF5ZXJNZXNzYWdlRGF0YSwgTGF5
ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlNldFJvb3RMYXllcj4geyB9OworfQorCitQYXNzT3du
UHRyPEdyYXBoaWNzTGF5ZXI+IExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlTGF5ZXIoV2ViTGF5
ZXJJRCBsYXllcklEKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIG5ld0xheWVyID0gbmV3IEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRoaXMpOworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2Rl
ID0gdG9UZXh0dXJlTWFwcGVyTm9kZShuZXdMYXllcik7CisgICAgbm9kZS0+c2V0SUQobGF5ZXJJ
RCk7CisgICAgbm9kZS0+c2V0VGlsZU93bmVyc2hpcChUZXh0dXJlTWFwcGVyTm9kZTo6RXh0ZXJu
YWxseU1hbmFnZWRUaWxlcyk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKK30KKwor
TGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSog
ZHJhd2luZ0FyZWFQcm94eSkKKyAgICA6IG1fYW5pbWF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigp
LCB0aGlzLCAmTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCkKKyAgICAsIG1fZHJh
d2luZ0FyZWFQcm94eShkcmF3aW5nQXJlYVByb3h5KQorICAgICwgbV9yb290TGF5ZXJJRCgwKQor
eworfQorCitMYXllclRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJveHkoKQoreworfQor
CisvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJlZW50cmFudC4KK3ZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQoreworICAgIGlmICghbV90ZXh0dXJlTWFwcGVy
KQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOwor
CisgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICBHcmFwaGljc0xheWVyKiBjdXJyZW50Um9v
dExheWVyID0gcm9vdExheWVyKCk7CisgICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBl
ck5vZGUoY3VycmVudFJvb3RMYXllcik7CisKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdMaW50IHZpZXdwb3J0WzRdOworICAgIGdsR2V0SW50ZWdlcnYoR0xfVklFV1BP
UlQsIHZpZXdwb3J0KTsKKyAgICBJbnRSZWN0IHZpZXdwb3J0UmVjdCh2aWV3cG9ydFswXSwgdmll
d3BvcnRbMV0sIHZpZXdwb3J0WzJdLCB2aWV3cG9ydFszXSk7CisgICAgbV90ZXh0dXJlTWFwcGVy
LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSh2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10pKTsKKyAg
ICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisgICAgbV90
ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5iaW5k
U3VyZmFjZSgwKTsKKworICAgIGlmIChjdXJyZW50Um9vdExheWVyLT5vcGFjaXR5KCkgIT0gb3Bh
Y2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRyaXgpIHsKKyAgICAg
ICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAgICAgICAgY3VycmVu
dFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgICAgIGN1cnJlbnRSb290TGF5
ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIH0KKworICAg
IFRleHR1cmVNYXBwZXJOb2RlOjpOb2RlUmVjdE1hcCBub2RlVmlzdWFsQ29udGVudHNSZWN0TWFw
OworICAgIGlmIChub2RlLT5jb2xsZWN0VmlzaWJsZUNvbnRlbnRzUmVjdHMobm9kZVZpc3VhbENv
bnRlbnRzUmVjdE1hcCwgdmlld3BvcnRSZWN0KSkgeworICAgICAgICBUZXh0dXJlTWFwcGVyTm9k
ZTo6Tm9kZVJlY3RNYXA6Oml0ZXJhdG9yIGVuZEl0ZXJhdG9yID0gbm9kZVZpc3VhbENvbnRlbnRz
UmVjdE1hcC5lbmQoKTsKKyAgICAgICAgZm9yIChUZXh0dXJlTWFwcGVyTm9kZTo6Tm9kZVJlY3RN
YXA6Oml0ZXJhdG9yIGl0ID0gbm9kZVZpc3VhbENvbnRlbnRzUmVjdE1hcC5iZWdpbigpOyBpdCAh
PSBlbmRJdGVyYXRvcjsgKytpdCkgeworICAgICAgICAgICAgV2ViTGF5ZXJJRCBsYXllcklEID0g
aXQtPmZpcnN0LT5pZCgpOworICAgICAgICAgICAgLy8gYXZvaWQgdXBkYXRpbmcgbm9uLXN5bmNl
ZCByb290IGxheWVyCisgICAgICAgICAgICBpZiAoIWxheWVySUQpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gSW50UmVjdChpdC0+
c2Vjb25kKTsKKyAgICAgICAgICAgIHNldFZpc2libGVDb250ZW50c1JlY3RGb3JMYXllcihsYXll
cklELCB2aXNpYmxlUmVjdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgbm9kZS0+cGFpbnQoKTsK
KworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAgIGlmIChub2RlLT5k
ZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICB1cGRhdGVW
aWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQo
KQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RGb3JMYXllcihXZWJM
YXllcklEIGxheWVySUQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbV9kcmF3aW5nQXJl
YVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6
U2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIobGF5ZXJJRCwgcmVjdCksIG1fZHJhd2luZ0Fy
ZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Cit9CisKK2ludCBMYXllclRyZWVIb3N0UHJveHk6
OnJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRChpbnQgdGlsZUlEKSBjb25zdAoreworICAgIEhhc2hN
YXA8aW50LCBpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZVRvTm9kZVRpbGUuZmluZCh0
aWxlSUQpOworICAgIGlmIChpdCA9PSBtX3RpbGVUb05vZGVUaWxlLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gaXQtPnNlY29uZDsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllckluZm8p
Cit7CisgICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5pZDsKKyAgICBlbnN1cmVMYXllcihp
ZCk7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7CisgICAg
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworCisgICAgbGF5ZXItPnNldE5hbWUo
bGF5ZXJJbmZvLm5hbWUpOworCisgICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVy
QnlJRChsYXllckluZm8ucmVwbGljYSkpOworICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIobGF5ZXJC
eUlEKGxheWVySW5mby5tYXNrKSk7CisKKyAgICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZv
LnBvcyk7CisgICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOworICAgIGxheWVyLT5z
ZXRUcmFuc2Zvcm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldEFuY2hvclBv
aW50KGxheWVySW5mby5hbmNob3JQb2ludCk7CisgICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNm
b3JtKGxheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldEJhY2tmYWNl
VmlzaWJpbGl0eShsYXllckluZm8uYmFja2ZhY2VWaXNpYmxlKTsKKyAgICBsYXllci0+c2V0Q29u
dGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsKKyAgICBsYXllci0+c2V0Q29u
dGVudHNSZWN0KGxheWVySW5mby5jb250ZW50c1JlY3QpOworICAgIGxheWVyLT5zZXREcmF3c0Nv
bnRlbnQobGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7CisKKyAgICBpZiAobGF5ZXJJbmZvLmltYWdl
SXNVcGRhdGVkKQorICAgICAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5p
bWFnZUJhY2tpbmdTdG9yZUlEKTsKKworICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIg
Y2xpcC4KKyAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8uaXNSb290TGF5ZXIg
PyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKKyAgICBsYXllci0+c2V0T3BhY2l0
eShsYXllckluZm8ub3BhY2l0eSk7CisgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKGxheWVySW5m
by5wcmVzZXJ2ZXMzRCk7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbmZvLmNoaWxkcmVuLnNpemUoKTsgKytp
KSB7CisgICAgICAgIFdlYkxheWVySUQgY2hpbGRJRCA9IGxheWVySW5mby5jaGlsZHJlbltpXTsK
KyAgICAgICAgR3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5SUQoY2hpbGRJRCk7CisgICAg
ICAgIGlmICghY2hpbGQpIHsKKyAgICAgICAgICAgIGNoaWxkID0gY3JlYXRlTGF5ZXIoY2hpbGRJ
RCkubGVha1B0cigpOworICAgICAgICAgICAgbV9sYXllcnMuYWRkKGNoaWxkSUQsIGNoaWxkKTsK
KyAgICAgICAgfQorICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOworICAgIH0KKyAgICBs
YXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworCisgICAgaWYgKGxheWVySW5mby5pc1Jvb3RM
YXllciAmJiBtX3Jvb3RMYXllcklEICE9IGlkKQorICAgICAgICBzZXRSb290TGF5ZXJJRChpZCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVMYXllcihXZWJMYXllcklEIGxh
eWVySUQpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7
CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF5ZXItPnJlbW92ZUZy
b21QYXJlbnQoKTsKKyAgICBtX2xheWVycy5yZW1vdmUobGF5ZXJJRCk7CisgICAgZGVsZXRlIGxh
eWVyOworfQorCisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVMYXllcihXZWJMYXll
cklEIGlkKQoreworICAgIC8vIFdlIGhhdmUgdG8gbGVhayB0aGUgbmV3IGxheWVyJ3MgcG9pbnRl
ciBhbmQgbWFuYWdlIGl0IG91cnNlbHZlcywKKyAgICAvLyBiZWNhdXNlIE93blB0ciBpcyBub3Qg
Y29weWFibGUuCisgICAgaWYgKG1fbGF5ZXJzLmZpbmQoaWQpID09IG1fbGF5ZXJzLmVuZCgpKQor
ICAgICAgICBtX2xheWVycy5hZGQoaWQsIGNyZWF0ZUxheWVyKGlkKS5sZWFrUHRyKCkpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdExheWVySUQoV2ViTGF5ZXJJRCBsYXll
cklEKQoreworICAgIGlmIChsYXllcklEID09IG1fcm9vdExheWVySUQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fcm9vdExheWVySUQgPSBsYXllcklEOworCisgICAgbV9yb290TGF5ZXItPnJl
bW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICBpZiAoIWxheWVySUQpCisgICAgICAgIHJldHVybjsK
KworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIGlm
ICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChs
YXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlKFdlYkxheWVy
SUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAgZW5zdXJlTGF5ZXIo
bGF5ZXJJRCk7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJO
b2RlKGxheWVyQnlJRChsYXllcklEKSk7CisKKyAgICBpbnQgbm9kZVRpbGVJRCA9IG5vZGUtPmNy
ZWF0ZUNvbnRlbnRzVGlsZShzY2FsZSk7CisgICAgbV90aWxlVG9Ob2RlVGlsZS5hZGQodGlsZUlE
LCBub2RlVGlsZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGUo
V2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQoreworICAgIFRleHR1cmVNYXBwZXJOb2Rl
KiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IG5vZGVUaWxlSUQgPSByZW1vdGVU
aWxlSURUb05vZGVUaWxlSUQodGlsZUlEKTsKKyAgICBpZiAoIW5vZGVUaWxlSUQpCisgICAgICAg
IHJldHVybjsKKworICAgIG5vZGUtPnJlbW92ZUNvbnRlbnRzVGlsZShub2RlVGlsZUlEKTsKKyAg
ICBtX3RpbGVUb05vZGVUaWxlLnJlbW92ZSh0aWxlSUQpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFFJ
bWFnZSYgaW1hZ2UpCit7CisgICAgZW5zdXJlTGF5ZXIobGF5ZXJJRCk7CisgICAgVGV4dHVyZU1h
cHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGxheWVyQnlJRChsYXllcklEKSk7
CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgbm9kZVRpbGVJRCA9
IHJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRCh0aWxlSUQpOworICAgIGlmICghbm9kZVRpbGVJRCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUUltYWdlIGltYWdlUmVmKGltYWdlKTsKKyAgICBub2Rl
LT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisgICAgbm9kZS0+c2V0
Q29udGVudHNUaWxlQmFja0J1ZmZlcihub2RlVGlsZUlELCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0
LCBpbWFnZVJlZi5iaXRzKCksIEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBjb25zdCBR
SW1hZ2UmIGltYWdlKQoreworICAgIFRpbGVkSW1hZ2UgdGlsZWRJbWFnZTsKKyAgICBzdGF0aWMg
Y29uc3QgaW50IFRpbGVEaW1lbnNpb24gPSAxMDI0OworICAgIGJvb2wgaW1hZ2VIYXNBbHBoYSA9
IGltYWdlLmhhc0FscGhhQ2hhbm5lbCgpOworICAgIEludFJlY3QgaW1hZ2VSZWN0KDAsIDAsIGlt
YWdlLndpZHRoKCksIGltYWdlLmhlaWdodCgpKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGlt
YWdlLmhlaWdodCgpOyB5ICs9IFRpbGVEaW1lbnNpb24pIHsKKyAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBpbWFnZS53aWR0aCgpOyB4ICs9IFRpbGVEaW1lbnNpb24pIHsKKyAgICAgICAgICAg
IFFJbWFnZSBzdWJJbWFnZTsKKyAgICAgICAgICAgIEludFJlY3QgcmVjdCh4LCB5LCBUaWxlRGlt
ZW5zaW9uLCBUaWxlRGltZW5zaW9uKTsKKyAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGltYWdl
UmVjdCk7CisgICAgICAgICAgICBpZiAoUVNpemUocmVjdC5zaXplKCkpID09IGltYWdlLnNpemUo
KSkKKyAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2UuY29weShyZWN0KTsKKyAgICAgICAgICAg
IFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlTWFwcGVyLT5jcmVhdGVU
ZXh0dXJlKCk7CisgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChyZWN0LnNpemUoKSwgIWltYWdl
SGFzQWxwaGEpOworICAgICAgICAgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2VIYXNB
bHBoYSA/IEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQgOiBCaXRtYXBUZXh0dXJlOjpCR1JGb3Jt
YXQsIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVjdC5zaXplKCkpLCBzdWJJbWFnZS5iaXRz
KCkpOworICAgICAgICAgICAgdGlsZWRJbWFnZS5hZGQocmVjdC5sb2NhdGlvbigpLCB0ZXh0dXJl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJl
bW92ZShpbWFnZUlEKTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5hZGQoaW1hZ2VJ
RCwgdGlsZWRJbWFnZSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95SW1h
Z2UoaW50NjRfdCBpbWFnZUlEKQoreworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJl
bW92ZShpbWFnZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmFzc2lnbkltYWdl
VG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFnZUlEKQoreworICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllcik7CisgICAg
aWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWltYWdlSUQpIHsKKyAgICAg
ICAgbm9kZS0+Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBGbG9hdFNpemUgc2l6ZShsYXllci0+c2l6ZSgpKTsKKyAg
ICBGbG9hdFJlY3QgY29udGVudHNSZWN0KGxheWVyLT5jb250ZW50c1JlY3QoKSk7CisgICAgZmxv
YXQgaG9yaXpvbnRhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC53aWR0aCgpIC8gc2l6ZS53aWR0aCgp
OworICAgIGZsb2F0IHZlcnRpY2FsRmFjdG9yID0gY29udGVudHNSZWN0LmhlaWdodCgpIC8gc2l6
ZS5oZWlnaHQoKTsKKyAgICBIYXNoTWFwPGludDY0X3QsIFRpbGVkSW1hZ2U+OjppdGVyYXRvciBp
dCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CisgICAgaWYgKGl0
ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBUaWxlZEltYWdlOjppdGVyYXRvciBlbmRUaWxlSXRlcmF0b3IgPSBpdC0+c2Vjb25kLmVu
ZCgpOworICAgIGZvciAoVGlsZWRJbWFnZTo6aXRlcmF0b3IgdGlsZUl0ID0gaXQtPnNlY29uZC5i
ZWdpbigpOyB0aWxlSXQgIT0gZW5kVGlsZUl0ZXJhdG9yOyArK3RpbGVJdCkgeworICAgICAgICBG
bG9hdFJlY3Qgc291cmNlUmVjdChGbG9hdFBvaW50KHRpbGVJdC0+Zmlyc3QpLCBGbG9hdFNpemUo
dGlsZUl0LT5zZWNvbmQtPnNpemUoKSkpOworICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdChz
b3VyY2VSZWN0LngoKSAqIGhvcml6b250YWxGYWN0b3IgKyBjb250ZW50c1JlY3QueCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LnkoKSAqIHZlcnRpY2FsRmFjdG9y
ICsgY29udGVudHNSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
UmVjdC53aWR0aCgpICogaG9yaXpvbnRhbEZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc291cmNlUmVjdC5oZWlnaHQoKSAqIHZlcnRpY2FsRmFjdG9yKTsKKyAgICAgICAgaW50
IG5ld1RpbGVJRCA9IG5vZGUtPmNyZWF0ZUNvbnRlbnRzVGlsZSgxLjApOworICAgICAgICBub2Rl
LT5zZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShuZXdU
aWxlSUQsIEludFJlY3Qoc291cmNlUmVjdCksIHRhcmdldFJlY3QsIHRpbGVJdC0+c2Vjb25kLmdl
dCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpmbHVzaExheWVyQ2hh
bmdlcygpCit7CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVj
dCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmVuc3VyZVJvb3RMYXllcigpCit7
CisgICAgaWYgKG1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisgICAgbV9yb290TGF5ZXIg
PSBjcmVhdGVMYXllcihJbnZhbGlkV2ViTGF5ZXJJRCk7CisgICAgbV9yb290TGF5ZXItPnNldE1h
c2tzVG9Cb3VuZHMoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFs
c2UpOworICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoMCwgMCwg
MCkpOworCisgICAgLy8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZlIHplcm8gc2l6ZSwg
b3IgaXQgd291bGQgYmUgb3B0aW1pemVkIG91dC4KKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShG
bG9hdFNpemUoMS4wLCAxLjApKTsKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVy
R0w6OmNyZWF0ZSgpOworICAgIHRvVGV4dHVyZU1hcHBlck5vZGUobV9yb290TGF5ZXIuZ2V0KCkp
LT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpzeW5jUmVtb3RlQ29udGVudCgpCit7CisgICAgLy8gV2UgZW5xdWV1
ZSBtZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMgdGhleSByZXF1aXJl
IGFuIGFjdGl2ZSBHTCBjb250ZXh0LgorICAgIGVuc3VyZVJvb3RMYXllcigpOworCisgICAgd2hp
bGUgKE93blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4gbmV4dE1lc3NhZ2UgPSBtX21l
c3NhZ2VzVG9SZW5kZXJlci50cnlHZXRNZXNzYWdlKCkpIHsKKyAgICAgICAgc3dpdGNoIChuZXh0
TWVzc2FnZS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI6OlNldFJvb3RMYXllcjogeworICAgICAgICAgICAgY29uc3QgU2V0Um9vdExheWVyTWVzc2Fn
ZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxTZXRSb290TGF5ZXJNZXNzYWdlKj4obmV4dE1lc3Nh
Z2UuZ2V0KCkpLT5kYXRhKCk7CisgICAgICAgICAgICBzZXRSb290TGF5ZXJJRChkYXRhLmxheWVy
SUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVy
VHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpEZWxldGVMYXllcjogeworICAgICAgICAgICAgY29uc3Qg
RGVsZXRlTGF5ZXJNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PERlbGV0ZUxheWVyTWVz
c2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAgICAgZGVsZXRlTGF5
ZXIoZGF0YS5sYXllcklEKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6U3luY0xheWVyUGFyYW1ldGVyczog
eworICAgICAgICAgICAgY29uc3QgU3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2VEYXRhJiBkYXRh
ID0gc3RhdGljX2Nhc3Q8U3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2UqPihuZXh0TWVzc2FnZS5n
ZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIHN5bmNMYXllclBhcmFtZXRlcnMoZGF0YS5sYXll
ckluZm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExh
eWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpDcmVhdGVUaWxlOiB7CisgICAgICAgICAgICBjb25z
dCBDcmVhdGVUaWxlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxDcmVhdGVUaWxlTWVz
c2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAgICAgY3JlYXRlVGls
ZShkYXRhLmxheWVySUQsIGRhdGEucmVtb3RlVGlsZUlELCBkYXRhLnNjYWxlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9S
ZW5kZXJlcjo6UmVtb3ZlVGlsZTogeworICAgICAgICAgICAgY29uc3QgUmVtb3ZlVGlsZU1lc3Nh
Z2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8UmVtb3ZlVGlsZU1lc3NhZ2UqPihuZXh0TWVzc2Fn
ZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIHJlbW92ZVRpbGUoZGF0YS5sYXllcklELCBk
YXRhLnJlbW90ZVRpbGVJRCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlVwZGF0ZVRpbGU6IHsKKyAgICAg
ICAgICAgIGNvbnN0IFVwZGF0ZVRpbGVNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PFVw
ZGF0ZVRpbGVNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAgICAgICAg
ICB1cGRhdGVUaWxlKGRhdGEubGF5ZXJJRCwgZGF0YS5yZW1vdGVUaWxlSUQsIGRhdGEuc291cmNl
UmVjdCwgZGF0YS50YXJnZXRSZWN0LCBkYXRhLmltYWdlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Q3Jl
YXRlSW1hZ2U6IHsKKyAgICAgICAgICAgIGNvbnN0IENyZWF0ZUltYWdlTWVzc2FnZURhdGEmIGRh
dGEgPSBzdGF0aWNfY2FzdDxDcmVhdGVJbWFnZU1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSkt
PmRhdGEoKTsKKyAgICAgICAgICAgIGNyZWF0ZUltYWdlKGRhdGEuaW1hZ2VJRCwgZGF0YS5pbWFn
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJU
cmVlTWVzc2FnZVRvUmVuZGVyZXI6OkRlc3Ryb3lJbWFnZTogeworICAgICAgICAgICAgY29uc3Qg
Q3JlYXRlSW1hZ2VNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PENyZWF0ZUltYWdlTWVz
c2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAgICAgZGVzdHJveUlt
YWdlKGRhdGEuaW1hZ2VJRCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkZsdXNoTGF5ZXJDaGFuZ2VzOgor
ICAgICAgICAgICAgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cHVzaFVwZGF0ZVRv
UXVldWUoUGFzc093blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4gbWVzc2FnZSkKK3sK
KyAgICBtX21lc3NhZ2VzVG9SZW5kZXJlci5hcHBlbmQobWVzc2FnZSk7CisgICAgdXBkYXRlVmll
d3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXll
cihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJiB1cGRh
dGVJbmZvKQoreworICAgIENyZWF0ZVRpbGVNZXNzYWdlRGF0YSBkYXRhOworICAgIGRhdGEubGF5
ZXJJRCA9IGxheWVySUQ7CisgICAgZGF0YS5yZW1vdGVUaWxlSUQgPSB0aWxlSUQ7CisgICAgZGF0
YS5zY2FsZSA9IHVwZGF0ZUluZm8udXBkYXRlU2NhbGVGYWN0b3I7CisgICAgcHVzaFVwZGF0ZVRv
UXVldWUoQ3JlYXRlVGlsZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7CisgICAgdXBkYXRlVGlsZUZv
ckxheWVyKGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mbyk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNv
bnN0IFdlYktpdDo6VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBVcGRhdGVUaWxlTWVz
c2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySUQgPSBsYXllcklEOworICAgIGRhdGEucmVt
b3RlVGlsZUlEID0gdGlsZUlEOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9
IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKHVwZGF0ZUluZm8uYml0bWFwSGFuZGxlKTsKKyAgICBk
YXRhLmltYWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKS5jb3B5KCk7CisgICAgZGF0YS5zb3Vy
Y2VSZWN0ID0gSW50UmVjdChJbnRQb2ludDo6emVybygpLCB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RC
b3VuZHMuc2l6ZSgpKTsKKyAgICBkYXRhLnRhcmdldFJlY3QgPSB1cGRhdGVJbmZvLnVwZGF0ZVJl
Y3RCb3VuZHM7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoVXBkYXRlVGlsZU1lc3NhZ2U6OmNyZWF0
ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlRm9yTGF5
ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpCit7CisgICAgUmVtb3ZlVGlsZU1lc3NhZ2VEYXRh
IGRhdGE7CisgICAgZGF0YS5sYXllcklEID0gbGF5ZXJJRDsKKyAgICBkYXRhLnJlbW90ZVRpbGVJ
RCA9IHRpbGVJRDsKKyAgICBwdXNoVXBkYXRlVG9RdWV1ZShSZW1vdmVUaWxlTWVzc2FnZTo6Y3Jl
YXRlKGRhdGEpKTsKK30KKworCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlQ29tcG9z
aXRpbmdMYXllcihXZWJMYXllcklEIGlkKQoreworICAgIERlbGV0ZUxheWVyTWVzc2FnZURhdGEg
ZGF0YTsKKyAgICBkYXRhLmxheWVySUQgPSBpZDsKKyAgICBwdXNoVXBkYXRlVG9RdWV1ZShEZWxl
dGVMYXllck1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEIGlkKQoreworICAgIFNldFJv
b3RMYXllck1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0YS5sYXllcklEID0gaWQ7CisgICAgcHVz
aFVwZGF0ZVRvUXVldWUoU2V0Um9vdExheWVyTWVzc2FnZTo6Y3JlYXRlKGRhdGEpKTsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNDb21wb3NpdGluZ0xheWVyU3RhdGUoY29uc3Qg
V2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlRGF0
YSBkYXRhOworICAgIGRhdGEubGF5ZXJJbmZvID0gaW5mbzsKKyAgICBwdXNoVXBkYXRlVG9RdWV1
ZShTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZTo6Y3JlYXRlKGRhdGEpKTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKCkKK3sKKyAgICBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpS
ZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsK
KyAgICBwdXNoVXBkYXRlVG9RdWV1ZShGbHVzaExheWVyQ2hhbmdlc01lc3NhZ2U6OmNyZWF0ZSgp
KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZURpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlKGludDY0X3Qga2V5LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiBoYW5kbGUpCit7CisgICAgQ3JlYXRlSW1hZ2VNZXNzYWdlRGF0YSBkYXRhOworICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRs
ZSk7CisgICAgZGF0YS5pbWFnZUlEID0ga2V5OworICAgIGRhdGEuaW1hZ2UgPSBiaXRtYXAtPmNy
ZWF0ZVFJbWFnZSgpLmNvcHkoKTsKKyAgICBwdXNoVXBkYXRlVG9RdWV1ZShDcmVhdGVJbWFnZU1l
c3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0
cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCit7CisgICAgRGVzdHJveUlt
YWdlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmltYWdlSUQgPSBrZXk7CisgICAgcHVzaFVw
ZGF0ZVRvUXVldWUoRGVzdHJveUltYWdlTWVzc2FnZTo6Y3JlYXRlKGRhdGEpKTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0
b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0
OjpTZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3Ip
LCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IEludFJl
Y3QmIHJlY3QsIGZsb2F0IHNjYWxlKQoreworICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJl
Y3Q7CisgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5
LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0Vmlz
aWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUocmVjdCwgc2NhbGUpLCBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KaW5kZXggMjc3
NWU4YS4uMzZhODUwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KKysr
IGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTI5LDYgKzI5LDggQEAgV0VCS0lUMV9T
T1VSQ0VTX1NIQVJFRF9XSVRIX1dFQktJVDIgPSBcCiBXRUJLSVQyX0dFTkVSQVRFRF9IRUFERVJT
ID0gXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvQXV0aGVudGljYXRpb25N
YW5hZ2VyTWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9E
b3dubG9hZFByb3h5TWVzc2FnZXMuaCBcCisgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VT
X0RJUi9MYXllclRyZWVIb3N0TWVzc2FnZXMuaCBcCisgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9T
T1VSQ0VTX0RJUi9MYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIFwKICAgICAkJFdFQktJVDJf
R0VORVJBVEVEX1NPVVJDRVNfRElSL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZXMuaCBc
CiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5Db250cm9sbGVyUHJv
eHlNZXNzYWdlcy5oIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL1BsdWdp
blByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBcCkBAIC02Nyw2ICs2OSw4IEBAIFdFQktJVDJf
R0VORVJBVEVEX1NPVVJDRVMgPSBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJ
Ui9Eb3dubG9hZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRXRUJLSVQyX0dFTkVS
QVRFRF9TT1VSQ0VTX0RJUi9EcmF3aW5nQXJlYU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQk
V0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgXAorICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVl
SG9zdE1lc3NhZ2VSZWNlaXZlci5jcHAgXAorICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNF
U19ESVIvTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRXRUJL
SVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvUGx1Z2lu
Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRXRUJLSVQyX0dFTkVS
QVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5Qcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBcCkBAIC0x
NjIsNiArMTY2LDcgQEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL1dlYkdyYXBoaWNzQ29udGV4
dC5oIFwKICAgICBTaGFyZWQvV2ViSGl0VGVzdFJlc3VsdC5oIFwKICAgICBTaGFyZWQvV2ViSW1h
Z2UuaCBcCisgICAgU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBcCiAgICAgU2hhcmVkL1dlYk5h
dmlnYXRpb25EYXRhU3RvcmUuaCBcCiAgICAgU2hhcmVkL1dlYk51bWJlci5oIFwKICAgICBTaGFy
ZWQvV2ViT3BlblBhbmVsUGFyYW1ldGVycy5oIFwKQEAgLTMxNiw2ICszMjEsNyBAQCBIRUFERVJT
ICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVycm9ycy5oIFwKICAgICBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmggXAogICAgIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuaCBcCisgICAgV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmggXAogICAgIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBcCkBAIC0zOTksNiAr
NDA1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHQuY3BwIFwK
ICAgICBTaGFyZWQvV2ViS2V5Ym9hcmRFdmVudC5jcHAgXAogICAgIFNoYXJlZC9XZWJJbWFnZS5j
cHAgXAorICAgIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBcCiAgICAgU2hhcmVkL1dlYk1v
dXNlRXZlbnQuY3BwIFwKICAgICBTaGFyZWQvV2ViT3BlblBhbmVsUGFyYW1ldGVycy5jcHAgXAog
ICAgIFNoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBcCkBAIC00ODYsNiArNDkz
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZENsaWVudC5j
cHAgXAogICAgIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9D
bGllbnRJbXBsLmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNw
cCBcCiAgICAgVUlQcm9jZXNzL3F0L1RvdWNoVmlld0ludGVyZmFjZS5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0UGFu
R2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKQEAgLTU2NSw2ICs1NzMsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgXAogICAg
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIFwKICAg
ICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcCBcCisg
ICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwIFwKICAgICBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmNwcCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDIxOGYyZmYuLjQzNjdmYzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhp
Y3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJHcmFwaGljc0xheWVyLmNwcApAQCAtMjUsMTMgKzI1LDEzIEBACiAKICNpbmNsdWRlICJB
bmltYXRpb24uaCIKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJEcmF3aW5n
QXJlYU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTGF5
ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2lu
Y2x1ZGUgInRleHQvQ1N0cmluZy5oIgogI2luY2x1ZGUgPEhhc2hNYXAuaD4KQEAgLTU4LDEyICs1
OCw2IEBAIFdlYkdyYXBoaWNzTGF5ZXIqIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVyQnlJRChXZWJL
aXQ6OldlYkxheWVySUQgaWQpCiAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiB9CiAKLXN0YXRpYyBW
ZWN0b3I8V2ViTGF5ZXJJRD4mIGRlbGV0ZWRMYXllcklEcygpCi17Ci0gICAgc3RhdGljIFZlY3Rv
cjxXZWJMYXllcklEPiBsYXllcnM7Ci0gICAgcmV0dXJuIGxheWVyczsKLX0KLQogc3RhdGljIFdl
YkxheWVySUQgdG9XZWJMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIHJldHVy
biBsYXllciA/IHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPmlkKCkgOiAwOwpAQCAtNzksNjcg
KzczLDkxIEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6bm90aWZ5Q2hhbmdlKCkKIFdlYkdyYXBo
aWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQog
ICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCiAgICAgLCBtX25lZWRzRGlzcGxheShmYWxzZSkK
LSAgICAsIG1fbW9kaWZpZWQoZmFsc2UpCisgICAgLCBtX21vZGlmaWVkKHRydWUpCiAgICAgLCBt
X2NvbnRlbnROZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX2hhc1BlbmRpbmdBbmltYXRpb25z
KGZhbHNlKQotICAgICwgbV9jb250ZW50U2NhbGUoMS5mKQorICAgICwgbV9pblVwZGF0ZU1vZGUo
ZmFsc2UpCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgLCBtX2xheWVyVHJl
ZVRpbGVDbGllbnQoMCkKKyAgICAsIG1fbWFpbkJhY2tpbmdTdG9yZShhZG9wdFB0cihuZXcgVGls
ZWRCYWNraW5nU3RvcmUodGhpcywgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZDo6
Y3JlYXRlKHRoaXMpKSkpCisjZW5kaWYKIHsKLSAgICAvLyBTdGFydGluZyBsYXllciBJRHMgZnJv
bSAxMDAwLCB0byBoZWxwIGRldGVjdCBmYXVsdHkgSURzIGVhc2lseS4KLSAgICBzdGF0aWMgV2Vi
TGF5ZXJJRCBzSUQgPSAxMDAwOwotICAgIG1fbGF5ZXJJbmZvLmlkID0gKytzSUQ7CisgICAgbV9t
YWluQmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxlKDEuMCk7CisgICAgc3RhdGljIFdlYkxh
eWVySUQgbmV4dExheWVySUQgPSAxOworICAgIG1fbGF5ZXJJbmZvLmlkID0gbmV4dExheWVySUQr
KzsKICAgICBsYXllckJ5SURNYXAoKS5hZGQoaWQoKSwgdGhpcyk7CiB9CiAKIFdlYkdyYXBoaWNz
TGF5ZXI6On5XZWJHcmFwaGljc0xheWVyKCkKIHsKICAgICBsYXllckJ5SURNYXAoKS5yZW1vdmUo
aWQoKSk7Ci0gICAgZGVsZXRlZExheWVySURzKCkuYXBwZW5kKGlkKCkpOworCisgICAgLy8gVGhp
cyB3b3VsZCB0ZWxsIHRoZSBVSSBwcm9jZXNzIHRvIHJlbGVhc2UgdGhlIGJhY2tpbmcgc3RvcmUu
CisgICAgc2V0Q29udGVudHNUb0ltYWdlKDApOworCisgICAgaWYgKG1fbGF5ZXJUcmVlVGlsZUNs
aWVudCkKKyAgICAgICAgbV9sYXllclRyZWVUaWxlQ2xpZW50LT5kaWREZWxldGVMYXllcihpZCgp
KTsKIH0KIAogYm9vbCBXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8
R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHsKICAgICBib29sIG9rID0gR3JhcGhpY3NMYXll
cjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwotICAgIGlmIChvaykKLSAgICAgICAgbm90aWZ5Q2hh
bmdlKCk7Ci0gICAgcmV0dXJuIG9rOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gdG9XZWJHcmFwaGljc0xheWVyKGNoaWxkcmVu
W2ldKTsKKyAgICAgICAgY2hpbGQtPnNldENvbnRlbnRzU2NhbGUobV9jb250ZW50c1NjYWxlKTsK
KyAgICAgICAgY2hpbGQtPm5vdGlmeUNoYW5nZSgpOworICAgIH0KKyAgICBub3RpZnlDaGFuZ2Uo
KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGls
ZChHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChs
YXllcik7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAg
ICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRB
dEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQgaW5kZXgpCiB7CiAgICAgR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBpbmRleCk7CisgICAgdG9XZWJHcmFwaGljc0xh
eWVyKGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZv
aWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwg
R3JhcGhpY3NMYXllciogc2libGluZykKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFi
b3ZlKGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5ub3Rp
ZnlDaGFuZ2UoKTsKICAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBz
aWJsaW5nKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxp
bmcpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPm5vdGlmeUNoYW5nZSgpOwogICAg
IG5vdGlmeUNoYW5nZSgpOwogfQogCiBib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGls
ZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpCiB7CiAg
ICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgbmV3Q2hp
bGQpOwotCi0gICAgaWYgKG9rKQotICAgICAgICBub3RpZnlDaGFuZ2UoKTsKLSAgICByZXR1cm4g
b2s7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG5vdGlmeUNoYW5n
ZSgpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihvbGRDaGlsZCktPm5vdGlmeUNoYW5nZSgpOwor
ICAgIHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPm5vdGlmeUNoYW5nZSgpOworICAgIHJl
dHVybiB0cnVlOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQo
KQogeworICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiBwYXJlbnRMYXllciA9IHRvV2ViR3JhcGhp
Y3NMYXllcihwYXJlbnQoKSkpCisgICAgICAgIHBhcmVudExheWVyLT5ub3RpZnlDaGFuZ2UoKTsK
ICAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7CisKICAgICBub3RpZnlDaGFu
Z2UoKTsKIH0KIApAQCAtMjQ3LDggKzI2NSw2IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKGNvbnRlbnRzUmVjdCgp
ID09IHIpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgc2V0TmVl
ZHNEaXNwbGF5KCk7CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3Qocik7CiAg
ICAgbm90aWZ5Q2hhbmdlKCk7CkBAIC0yNzQsMTUgKzI5MCwzMCBAQCB2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCiB7CiB9
CiAKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQorewor
ICAgIHNldENvbnRlbnRzVG9JbWFnZSgwKTsKKyAgICBzZXRDb250ZW50c1RvSW1hZ2UobV9pbWFn
ZS5nZXQoKSk7Cit9CisKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZS5nZXQoKSkKKyAgICBp
ZiAoaW1hZ2UgPT0gbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkxheWVyVHJlZVRp
bGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKTsKKyAgICBpZiAoIWNsaWVu
dCkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gV2UgYWRvcHQgZmlyc3QsIGluIGNhc2UgdGhp
cyBpcyB0aGUgc2FtZSBmcmFtZSAtIHRoYXQgd2F5IHdlIGF2b2lkIGRlc3Ryb3lpbmcgYW5kIHJl
Y3JlYXRpbmcgdGhlIGltYWdlLgorICAgIGludDY0X3QgbmV3SUQgPSBjbGllbnQtPmFkb3B0SW1h
Z2VCYWNraW5nU3RvcmUoaW1hZ2UpOworICAgIGNsaWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0
b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworICAgIG5vdGlmeUNoYW5nZSgp
OworICAgIGlmIChuZXdJRCA9PSBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQorICAg
ICAgICByZXR1cm47CisgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG5ld0lE
OwogICAgIG1faW1hZ2UgPSBpbWFnZTsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX2xh
eWVySW5mby5pbWFnZUlzVXBkYXRlZCA9IHRydWU7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29u
dGVudHNUb0ltYWdlKGltYWdlKTsKLSAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAogdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC0zMDEs
NTAgKzMzMiwyOSBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVy
KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRz
RGlzcGxheSgpCiB7Ci0gICAgbV9uZWVkc0Rpc3BsYXkgPSB0cnVlOwotICAgIG5vdGlmeUNoYW5n
ZSgpOworICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IEludFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpKTsKIH0KIAogdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIG1fbmVlZHNEaXNwbGF5UmVjdC51bml0ZShyZWN0KTsKKyAgICBtX21haW5C
YWNraW5nU3RvcmUtPmludmFsaWRhdGUoSW50UmVjdChyZWN0KSk7CiAgICAgbm90aWZ5Q2hhbmdl
KCk7CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXko
KQotewotICAgIHNldE5lZWRzRGlzcGxheSgpOwotfQotCiBXZWJMYXllcklEIFdlYkdyYXBoaWNz
TGF5ZXI6OmlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9sYXllckluZm8uaWQ7CiB9CiAKLXZv
aWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlkU3luY2hyb25pemUoKQordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
bV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLSAgICBtX21vZGlmaWVkID0gZmFsc2U7Ci0gICAgbV9u
ZWVkc0Rpc3BsYXlSZWN0ID0gRmxvYXRSZWN0KCk7Ci0gICAgaWYgKG1faGFzUGVuZGluZ0FuaW1h
dGlvbnMpCi0gICAgICAgIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoV1RGOjpjdXJyZW50VGltZSgp
KTsKLSAgICBtX2hhc1BlbmRpbmdBbmltYXRpb25zID0gZmFsc2U7Ci19Ci0KLWNvbnN0IFdlYkxh
eWVySW5mbyYgV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJJbmZvKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9sYXllckluZm87Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0
aW5nU3RhdGUoKQotewotICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKLSAg
ICAgICAgY2hpbGRyZW4oKVtpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICAgICAgY2hp
bGRyZW4oKVtpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7CiAgICAgaWYgKHJlcGxpY2FM
YXllcigpKQotICAgICAgICByZXBsaWNhTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsK
KyAgICAgICAgcmVwbGljYUxheWVyKCktPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOwogICAg
IGlmIChtYXNrTGF5ZXIoKSkKLSAgICAgICAgbWFza0xheWVyKCktPnN5bmNDb21wb3NpdGluZ1N0
YXRlKCk7CisgICAgICAgIG1hc2tMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShyZWN0KTsK
KyAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIH0KIAogV2ViR3Jh
cGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpAQCAt
MzUyLDMwICszNjIsMjUgQEAgV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xheWVyKEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJHcmFwaGljc0xh
eWVyKj4obGF5ZXIpOwogfQogCi1GbG9hdFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6bmVlZHNEaXNw
bGF5UmVjdCgpIGNvbnN0Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpCiB7Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBGbG9hdFJlY3Qo
MCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7Ci0gICAgaWYgKCFtX25lZWRz
RGlzcGxheSkKLSAgICAgICAgcmVjdC5pbnRlcnNlY3QobV9uZWVkc0Rpc3BsYXlSZWN0KTsKLSAg
ICByZXR1cm4gcmVjdDsKLX0KKyAgICBpZiAoIW1fbGF5ZXJUcmVlVGlsZUNsaWVudCkKKyAgICAg
ICAgbV9sYXllclRyZWVUaWxlQ2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgpOworICAgIHVw
ZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CiAKLVZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IFdlYkdy
YXBoaWNzTGF5ZXI6OnRha2VMYXllcnNUb0RlbGV0ZSgpCi17Ci0gICAgVmVjdG9yPFdlYktpdDo6
V2ViTGF5ZXJJRD4gbGF5ZXJzID0gZGVsZXRlZExheWVySURzKCk7Ci0gICAgZGVsZXRlZExheWVy
SURzKCkuY2xlYXIoKTsKLSAgICByZXR1cm4gbGF5ZXJzOwotfQorICAgIGlmICghbV9tb2RpZmll
ZCkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCi17CiAgICAgbV9sYXllckluZm8ubmFtZSA9IG5h
bWUoKTsKICAgICBtX2xheWVySW5mby5hbmNob3JQb2ludCA9IGFuY2hvclBvaW50KCk7CiAgICAg
bV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7CiAgICAg
bV9sYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOwogICAg
IG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsKICAgICBtX2xh
eWVySW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3QoKTsKLSAgICBtX2xheWVySW5mby5k
cmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKKworICAgIC8vIEluIHRoZSBzaGFkb3cgbGF5
ZXIgdHJlZSB3ZSBjcmVhdGUgaW4gdGhlIFVJIHByb2Nlc3MsIGxheWVycyB3aXRoIGRpcmVjdGx5
IGNvbXBvc2l0ZWQgaW1hZ2VzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0byBkcmF3IGNvbnRlbnQu
CisgICAgLy8gT3RoZXJ3aXNlLCB3ZSdkIGhhdmUgdG8gY2hlY2sgd2hldGhlciBhbiBsYXllciB3
aXRoIGRyYXdzQ29udGVudD09ZmFsc2UgaGFzIGEgZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZSBt
dWx0aXBsZSB0aW1lcy4KKyAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRl
bnQoKSB8fCBtX2ltYWdlOwogICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVySUQobWFz
a0xheWVyKCkpOwogICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRz
KCk7CiAgICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKQEAgLTM4MywxMjIgKzM4
OCwxNTkgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKQogICAgIG1fbGF5ZXJJbmZvLnBvcyA9IHBvc2l0aW9uKCk7CiAgICAgbV9s
YXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOwogICAgIG1fbGF5ZXJJbmZvLnJl
cGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLnNp
emUgPSBGbG9hdFNpemUoc2l6ZSgpLndpZHRoKCkgKiBtX2NvbnRlbnRTY2FsZSwgc2l6ZSgpLmhl
aWdodCgpICogbV9jb250ZW50U2NhbGUpOworICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBzaXplKCk7
CiAgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAgbV9jb250ZW50
TmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uY2xlYXIoKTsK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKICAg
ICAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uYXBwZW5kKHRvV2ViTGF5ZXJJRChjaGlsZHJlbigp
W2ldKSk7CisKKyAgICBtX2xheWVyVHJlZVRpbGVDbGllbnQtPmRpZFN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yTGF5ZXIobV9sYXllckluZm8pOworICAgIG1fbW9kaWZpZWQgPSBmYWxzZTsKKyAgICBt
X2xheWVySW5mby5pbWFnZUlzVXBkYXRlZCA9IGZhbHNlOworICAgIGlmIChtX2hhc1BlbmRpbmdB
bmltYXRpb25zKQorICAgICAgICBub3RpZnlBbmltYXRpb25TdGFydGVkKFdURjo6Y3VycmVudFRp
bWUoKSk7CisgICAgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA9IGZhbHNlOwogfQogCi1zdGF0aWMg
VmVjdG9yPEZsb2F0UmVjdD4gZGl2aWRlSW50b1RpbGVzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
KyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKIHsKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0
aWxlczsKLSAgICBmb3IgKGZsb2F0IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyB5ICs9
IGdUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAgIGZvciAoZmxvYXQgeCA9IHJlY3QueCgpOyB4IDwg
cmVjdC5tYXhYKCk7IHggKz0gZ1RpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgICAgIEZsb2F0UmVj
dCB0aWxlKHgsIHksIGdUaWxlRGltZW5zaW9uLCBnVGlsZURpbWVuc2lvbik7Ci0gICAgICAgICAg
ICB0aWxlLmludGVyc2VjdChyZWN0KTsKLSAgICAgICAgICAgIHRpbGVzLmFwcGVuZCh0aWxlKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdGlsZXM7CiB9CiAKLXN0YXRpYyB2b2lkIGNv
bGxlY3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIFdl
YkxheWVyVHJlZUluZm8mIG91dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExh
eWVycykKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2Fs
ZSkKIHsKLSAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihs
YXllcik7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbGF5ZXIt
PmlzTW9kaWZpZWQoKSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBo
aWNzTGF5ZXIodGhpcy0+Y2hpbGRyZW4oKVtpXSk7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50
c1NjYWxlKHNjYWxlKTsKKyAgICB9CisKKyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKKyAg
ICBpZiAobV9tYWluQmFja2luZ1N0b3JlICYmIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y29udGVudHNT
Y2FsZSgpID09IHNjYWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBvdXRMYXllcnMuYXBwZW5k
KGxheWVyKTsKLSAgICBvdXRJbmZvLmxheWVycy5hcHBlbmQobGF5ZXItPmxheWVySW5mbygpKTsK
KyAgICBub3RpZnlDaGFuZ2UoKTsKKworICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUgPSBtX21h
aW5CYWNraW5nU3RvcmUucmVsZWFzZSgpOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9IGFkb3B0
UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENv
bnRlbnRzU2NhbGUoc2NhbGUpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFJvb3RM
YXllcihib29sIGlzUm9vdCkKK3sKKyAgICBtX2xheWVySW5mby5pc1Jvb3RMYXllciA9IGlzUm9v
dDsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRW
aXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWpl
Y3RvcnlWZWN0b3IpCit7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRWaXNpYmxlUmVjdFRy
YWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Cit9CiAKLSAgICBXZWJMYXllckluZm8m
IGxheWVySW5mbyA9IG91dEluZm8ubGF5ZXJzW291dEluZm8ubGF5ZXJzLnNpemUoKSAtIDFdOwot
ICAgIGlmIChsYXllci0+aW1hZ2UoKSkKLSAgICAgICAgbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9
IHRydWU7Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fdmlzaWJsZUNvbnRlbnRSZWN0ID0gcmVjdDsKKyAg
ICBub3RpZnlDaGFuZ2UoKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPmFkanVzdFZpc2libGVS
ZWN0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVs
eShHcmFwaGljc0xheWVyKiByb290TGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dEluZm8sIFZl
Y3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyb290TGF5ZXIpCisgICAgaWYgKHJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CisgICAgbV9tb2RpZmllZCA9IHRydWU7CisgICAgcGFp
bnRHcmFwaGljc0xheWVyQ29udGVudHMoKmNvbnRleHQsIHJlY3QpOworfQogCi0gICAgY29sbGVj
dENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihyb290TGF5ZXIsIG91dEluZm8sIG91dExheWVy
cyk7Ci0gICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihyb290TGF5ZXItPm1h
c2tMYXllcigpLCBvdXRJbmZvLCBvdXRMYXllcnMpOwotICAgIGNvbGxlY3RDb21wb3NpdGluZ0lu
Zm9SZWN1cnNpdmVseShyb290TGF5ZXItPnJlcGxpY2FMYXllcigpLCBvdXRJbmZvLCBvdXRMYXll
cnMpOwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNv
bnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3RzKQoreworfQogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByb290TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAg
IGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseShyb290TGF5ZXItPmNoaWxkcmVuKClb
aV0sIG91dEluZm8sIG91dExheWVycyk7Citib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIGlmICghbV9pblVwZGF0ZU1v
ZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoV2ViTGF5ZXJUcmVlVGlsZUNsaWVu
dCogY2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgpKQorICAgICAgICByZXR1cm4gY2xpZW50
LT5sYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2VuZExheWVyc1RvVUlQcm9jZXNzKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqIHJvb3RMYXllciwgV2ViUGFnZSogd2ViUGFnZSkKK0ludFJlY3QgV2ViR3Jh
cGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKQogewotICAgIHdlYlBh
Z2UtPmxheW91dElmTmVlZGVkKCk7Ci0gICAgd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1l
KCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKLSAg
ICBXZWJMYXllclRyZWVJbmZvIGNvbXBvc2l0aW5nSW5mbzsKLSAgICBjb21wb3NpdGluZ0luZm8u
cm9vdExheWVySUQgPSByb290TGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIocm9vdExheWVyKS0+
aWQoKSA6IDA7Ci0gICAgY29tcG9zaXRpbmdJbmZvLmNvbnRlbnRTY2FsZSA9IDEuMDsKLSAgICBj
b21wb3NpdGluZ0luZm8uZGVsZXRlZExheWVySURzID0gV2ViR3JhcGhpY3NMYXllcjo6dGFrZUxh
eWVyc1RvRGVsZXRlKCk7Ci0gICAgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiBsYXllcnM7Ci0g
ICAgaWYgKHJvb3RMYXllcikKLSAgICAgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb1JlY3Vyc2l2
ZWx5KHJvb3RMYXllciwgY29tcG9zaXRpbmdJbmZvLCBsYXllcnMpOworICAgIGlmIChtX2ltYWdl
KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHNp
emUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworfQogCi0gICAgaWYgKGNvbXBvc2l0aW5n
SW5mby5kZWxldGVkTGF5ZXJJRHMuaXNFbXB0eSgpICYmIGNvbXBvc2l0aW5nSW5mby5sYXllcnMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CitJbnRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6OnRp
bGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKQoreworICAgIHJldHVybiBtX3Zpc2libGVDb250
ZW50UmVjdDsKK30KIAotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJv
eHk6OlN5bmNDb21wb3NpdGluZ0xheWVycyhjb21wb3NpdGluZ0luZm8pKTsKLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYkdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJzW2ldOwotICAgICAgICBGbG9hdFJlY3QgdXBkYXRlUmVj
dCA9IGxheWVyLT5uZWVkc0Rpc3BsYXlSZWN0KCk7Ci0KLSAgICAgICAgbGF5ZXItPmRpZFN5bmNo
cm9uaXplKCk7Ci0KLSAgICAgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgUmVmUHRyPEltYWdlPiBkaXJlY3RJbWFnZSA9IGxheWVy
LT5pbWFnZSgpOwotICAgICAgICBpZiAoZGlyZWN0SW1hZ2UpCi0gICAgICAgICAgICB1cGRhdGVS
ZWN0ID0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpOwotICAgICAgICBlbHNlIGlmICghbGF5ZXItPmRy
YXdzQ29udGVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgVmVjdG9yPEZs
b2F0UmVjdD4gdGlsZVJlY3RzID0gZGl2aWRlSW50b1RpbGVzKHVwZGF0ZVJlY3QpOwotICAgICAg
ICBmb3IgKHNpemVfdCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCB0aWxlUmVjdHMuc2l6ZSgp
OyArK3RpbGVJbmRleCkgewotICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCA9
IHRpbGVSZWN0c1t0aWxlSW5kZXhdOwotICAgICAgICAgICAgSW50UmVjdCBlbmNsb3NpbmdVcGRh
dGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh0aWxlUmVjdCk7Ci0KLSAgICAgICAgICAgIFdlYkxh
eWVyVXBkYXRlSW5mbyBjaHVuayhlbmNsb3NpbmdVcGRhdGVSZWN0KTsKLSAgICAgICAgICAgIGNo
dW5rLmxheWVySUQgPSB1aW50MzJfdChsYXllci0+aWQoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJs
ZShjaHVuay5yZWN0LnNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAg
ICAgICAgICAgIGlmICghYml0bWFwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgaWYgKCFiaXRtYXAtPmNyZWF0ZUhhbmRsZShjaHVuay5iaXRtYXBIYW5kbGUpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRGT1JNKFFUKQotICAgICAgICAgICAgUUlt
YWdlIHRpbGVJbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCk7Ci0gICAgICAgICAgICB0aWxl
SW1hZ2UuZmlsbCgwKTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBRUGFpbnRlciBw
YWludGVyKCZ0aWxlSW1hZ2UpOwotICAgICAgICAgICAgICAgIHBhaW50ZXIudHJhbnNsYXRlKC10
aWxlUmVjdC54KCksIC10aWxlUmVjdC55KCkpOwotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0KCZwYWludGVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlyZWN0SW1hZ2Up
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGRpcmVjdEltYWdlLmdldCgp
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBsYXllci0+Y29udGVudHNSZWN0KCksIEZsb2F0UmVjdCgw
LCAwLCBkaXJlY3RJbWFnZS0+d2lkdGgoKSwgZGlyZWN0SW1hZ2UtPmhlaWdodCgpKSk7Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBsYXllci0+cGFpbnRHcmFwaGlj
c0xheWVyQ29udGVudHMoY29udGV4dCwgZW5jbG9zaW5nVXBkYXRlUmVjdCk7Ci0gICAgICAgICAg
ICB9Ci0jZW5kaWYKK0NvbG9yIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFj
a2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGVudHNPcGFxdWUoKSA/IENv
bG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIAotICAgICAgICAgICAgd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6VXBkYXRlQ29tcG9zaXRpbmdMYXllckNv
bnRlbnQoY2h1bmspKTsKLSAgICAgICAgfQorfQordm9pZCBXZWJHcmFwaGljc0xheWVyOjpjcmVh
dGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAg
bV9tb2RpZmllZCA9IHRydWU7CisgICAgaWYgKFdlYkxheWVyVHJlZVRpbGVDbGllbnQqIGNsaWVu
dCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5jcmVhdGVUaWxlKGlk
KCksIHRpbGVJRCwgdXBkYXRlSW5mbyk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBk
YXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAg
IG1fbW9kaWZpZWQgPSB0cnVlOworICAgIGlmIChXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGll
bnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+dXBkYXRlVGlsZShp
ZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJl
bW92ZVRpbGUoaW50IHRpbGVJRCkKK3sKKyAgICBtX21vZGlmaWVkID0gdHJ1ZTsKKyAgICBpZiAo
V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgpKQor
ICAgICAgICBjbGllbnQtPnJlbW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKK30KKwordm9pZCBXZWJH
cmFwaGljc0xheWVyOjp1cGRhdGVUaWxlQnVmZmVyc1JlY3Vyc2l2ZWx5KCkKK3sKKyAgICBtX21h
aW5CYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkdyYXBoaWNzTGF5
ZXIqIGxheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHRoaXMtPmNoaWxkcmVuKClbaV0pOworICAg
ICAgICBsYXllci0+dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSgpOwogICAgIH0KIH0KIAor
V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJUcmVlVGlsZUNs
aWVudCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGF5ZXJUcmVlVGlsZUNsaWVudCkKKyAgICAgICAg
cmV0dXJuIG1fbGF5ZXJUcmVlVGlsZUNsaWVudDsKKyAgICBXZWJHcmFwaGljc0xheWVyKiBwYXJl
bnQgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+cGFyZW50KCkpOworICAgIGlmICghcGFyZW50
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gcGFyZW50LT5sYXllclRyZWVUaWxlQ2xp
ZW50KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMo
KQoreworICAgIC8vIEJhY2tpbmctc3RvcmVzIGZvciBkaXJlY3RseSBjb21wb3NpdGVkIGltYWdl
cyBpcyBoYW5kbGVkIGluIExheWVyVHJlZUhvc3QuCisgICAgaWYgKG1faW1hZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCk7
CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2luVXBkYXRlTW9kZSA9
IHRydWU7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOworICAg
IG1faW5VcGRhdGVNb2RlID0gZmFsc2U7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgUGFzc093blB0
cjxHcmFwaGljc0xheWVyPiBjcmVhdGVXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGll
bnQqIGNsaWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYkdyYXBoaWNzTGF5ZXIo
Y2xpZW50KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCmluZGV4IGFkNjAyMWUuLmM1ODFiNTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3Jh
cGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViR3JhcGhpY3NMYXllci5oCkBAIC0yNywxOSArMjcsNDAgQEAKICNpbmNsdWRlICJJbnRT
aXplLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5o
IgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5n
U3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCIK
ICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8u
aCIKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKLWNsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFdlYkxheWVyVHJlZVRpbGVDbGllbnQgeworcHVi
bGljOgorICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUlu
Zm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGls
ZShXZWJMYXllcklELCBpbnQgdGlsZUlEKSA9IDA7CisgICAgdmlydHVhbCBib29sIGxheWVyVHJl
ZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludDY0X3QgYWRv
cHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFz
ZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRpZERlbGV0ZUxheWVyKFdlYkxheWVySUQpID0gMDsKK307CiB9CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR3JhcGhpY3NMYXllciA6IHB1YmxpYyBXZWJD
b3JlOjpHcmFwaGljc0xheWVyIHsKK2NsYXNzIFdlYkdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcgorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZUNsaWVudAorI2VuZGlmCit7CiBwdWJsaWM6CiAgICAgV2ViR3JhcGhpY3NMYXllcihH
cmFwaGljc0xheWVyQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+V2ViR3JhcGhpY3NMYXllcigpOwpA
QCAtNzMsMTMgKzk0LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwog
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZv
aWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBv
c2l0aW5nU3RhdGUoKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBJbnRS
ZWN0Jik7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNv
bnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUo
Y29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOworICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wpOwogCiAgICAg
V2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJMYXll
ckluZm8mIGxheWVySW5mbygpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0
KCkgY29uc3Q7Ci0gICAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IHRha2VMYXll
cnNUb0RlbGV0ZSgpOwogICAgIHN0YXRpYyBXZWJHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2Vi
S2l0OjpXZWJMYXllcklEKTsKICAgICBib29sIGlzTW9kaWZpZWQoKSBjb25zdCB7IHJldHVybiBt
X21vZGlmaWVkOyB9CiAgICAgdm9pZCBkaWRTeW5jaHJvbml6ZSgpOwpAQCAtODcsMjEgKzEwOCw1
MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSk7CiAK
ICAgICBzdGF0aWMgdm9pZCBpbml0RmFjdG9yeSgpOwotICAgIHN0YXRpYyB2b2lkIHNlbmRMYXll
cnNUb1VJUHJvY2VzcyhXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViS2l0OjpXZWJQYWdlKik7
CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAvLyBUaWxlZEJhY2tpbmdT
dG9yZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4o
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3Jl
UGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7CisgICAgdmlydHVh
bCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKKyAgICB2aXJ0dWFs
IEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOworICAgIHZpcnR1YWwgQ29s
b3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKworICAgIC8vIFRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVU
aWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpOworCisgICAgdm9pZCBzZXRM
YXllclRyZWVUaWxlQ2xpZW50KFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50
KSB7IG1fbGF5ZXJUcmVlVGlsZUNsaWVudCA9IGNsaWVudDsgfQorICAgIFdlYktpdDo6V2ViTGF5
ZXJUcmVlVGlsZUNsaWVudCogbGF5ZXJUcmVlVGlsZUNsaWVudCgpIGNvbnN0OworCisgICAgYm9v
bCBpc1JlYWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVRpbGVC
dWZmZXJzUmVjdXJzaXZlbHkoKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOwor
ICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyNlbmRpZgogCiBwcml2YXRlOgogICAg
IFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwotICAgIFJlZlB0cjxXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcD4gbV9iYWNraW5nU3RvcmU7CisgICAgV2ViS2l0OjpXZWJMYXllclRyZWVU
aWxlQ2xpZW50KiBtX2xheWVyVGlsZUNsaWVudDsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7
CiAgICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKLSAgICBib29sIG1fbmVlZHNEaXNw
bGF5OwotICAgIGJvb2wgbV9tb2RpZmllZDsKLSAgICBib29sIG1fY29udGVudE5lZWRzRGlzcGxh
eTsKLSAgICBib29sIG1faGFzUGVuZGluZ0FuaW1hdGlvbnM7Ci0KLSAgICBmbG9hdCBtX2NvbnRl
bnRTY2FsZTsKKyAgICBJbnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRSZWN0OworICAgIGJvb2wgbV9u
ZWVkc0Rpc3BsYXkgOiAxOworICAgIGJvb2wgbV9tb2RpZmllZCA6IDE7CisgICAgYm9vbCBtX2Nv
bnRlbnROZWVkc0Rpc3BsYXkgOiAxOworICAgIGJvb2wgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA6
IDE7CisgICAgYm9vbCBtX2luVXBkYXRlTW9kZSA6IDI7CiAKICAgICB2b2lkIG5vdGlmeUNoYW5n
ZSgpOworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgV2ViS2l0OjpXZWJM
YXllclRyZWVUaWxlQ2xpZW50KiBtX2xheWVyVHJlZVRpbGVDbGllbnQ7CisgICAgT3duUHRyPFdl
YkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7CisgICAgT3duUHRy
PFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOworICAg
IGZsb2F0IG1fY29udGVudHNTY2FsZTsKKyNlbmRpZgogfTsKIAogV2ViR3JhcGhpY3NMYXllciog
dG9XZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggNTJmZGRkZC4uZDg3MGViMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgK
QEAgLTc0LDEwICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFs
bFBhZ2VPdmVybGF5KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNE
aXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KIAotI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRp
bmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5j
Q29tcG9zaXRpbmdMYXllcnMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXll
clRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlE
LCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKSA9IDA7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3
aW5nQXJlYUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhSW1wbC5jcHAKaW5kZXggOTdmZjgyNy4uN2RkN2M4OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKQEAgLTY3
Myw1ICs2NzMsMTMgQEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpc3BsYXkoVXBkYXRlSW5mbyYg
dXBkYXRlSW5mbykKICAgICBtX2xhc3REaXNwbGF5VGltZSA9IGN1cnJlbnRUaW1lKCk7CiB9CiAK
KyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQordm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQg
bWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKK3sKKyAgICBp
ZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY2VpdmVM
YXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7Cit9
CisjZW5kaWYKKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaAppbmRleCBjYzhhODA1Li4z
NWIyMDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Ry
YXdpbmdBcmVhSW1wbC5oCkBAIC03MSw2ICs3MSwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBzY2hlZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRhdGUoY29uc3QgV2luZG93R2VvbWV0
cnkmKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVy
VHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworI2VuZGlmCisKICAgICAvLyBDb3JlSVBDIG1l
c3NhZ2UgaGFuZGxlcnMuCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
KHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJvb2wgcmVzcG9uZEltbWVkaWF0ZWx5LCBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVy
VHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuY3BwCmluZGV4IGRhNDJhZTYuLjAzMWMzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM0LDYgKzM0LDEw
IEBACiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQpICYmIFVTRShURVhUVVJFX01B
UFBFUikKKyNpbmNsdWRlICJxdC9MYXllclRyZWVIb3N0UXQuaCIKKyNlbmRpZgorCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NCw2ICs0OCw4IEBA
IFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdD4gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKFdlYlBhZ2Uq
IHdlYlBhZ2UpCiAgICAgcmV0dXJuIExheWVyVHJlZUhvc3RDQU1hYzo6Y3JlYXRlKHdlYlBhZ2Up
OwogI2VsaWYgUExBVEZPUk0oV0lOKSAmJiBIQVZFKFdLUUNBKQogICAgIHJldHVybiBMYXllclRy
ZWVIb3N0Q0FXaW46OmNyZWF0ZSh3ZWJQYWdlKTsKKyNlbGlmIFBMQVRGT1JNKFFUKSAmJiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCisgICAgcmV0dXJuIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKHdlYlBh
Z2UpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKaW5kZXggNjdjODA3Yi4uNTFmOTky
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
SG9zdC5oCkBAIC0yNiwxMyArMjYsMjAgQEAKICNpZm5kZWYgTGF5ZXJUcmVlSG9zdF9oCiAjZGVm
aW5lIExheWVyVHJlZUhvc3RfaAogCisjaW5jbHVkZSA8Q29yZUlQQy9NZXNzYWdlSUQuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
K25hbWVzcGFjZSBDb3JlSVBDIHsKK2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIENvbm5l
Y3Rpb247Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnRSZWN0OwotICAg
IGNsYXNzIEludFNpemU7Ci0gICAgY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIEZsb2F0UG9p
bnQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7
CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNzIsNiArNzksMTQgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1
bWVSZW5kZXJpbmcoKSB7IH0KIAorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAg
IHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxl
Q29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIoaW50IGxh
eWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVu
ZGVyTmV4dEZyYW1lKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVI
b3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAg
IHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRhdGUoY29uc3QgV2lu
ZG93R2VvbWV0cnkmKSA9IDA7CiAjZW5kaWYKQEAgLTgwLDYgKzk1LDExIEBAIHByb3RlY3RlZDoK
ICAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0KFdlYlBhZ2UqKTsKIAogICAgIFdlYlBhZ2UqIG1f
d2ViUGFnZTsKKworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgYm9vbCBt
X3dhaXRpbmdGb3JVSVByb2Nlc3M7CisjZW5kaWYKIH07CiAKICNpZiAhUExBVEZPUk0oV0lOKSAm
JiAhUExBVEZPUk0oUVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmZkZTk4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgpAQCAtMCwwICsx
LDI4IEBACisjCisjICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisj
CisjICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIworCisKKyNpZiBFTkFCTEUoVElM
RURfQkFDS0lOR19TVE9SRSkKK21lc3NhZ2VzIC0+IExheWVyVHJlZUhvc3QgeworICAgIFNldFZp
c2libGVDb250ZW50UmVjdEZvckxheWVyKGludCBsYXllcklELCBXZWJDb3JlOjpJbnRSZWN0IHZp
c2libGVDb250ZW50UmVjdCkKKyAgICBTZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVj
dG9yKFdlYkNvcmU6OkZsb2F0UG9pbnQgdHJhamVjdG9yeVZlY3RvcnkpCisgICAgU2V0VmlzaWJs
ZUNvbnRlbnRSZWN0QW5kU2NhbGUoV2ViQ29yZTo6SW50UmVjdCBjb250ZW50UmVjdCwgZmxvYXQg
c2NhbGUpCisgICAgUmVuZGVyTmV4dEZyYW1lKCkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwCmluZGV4
IGZhYTZjZGQuLmU3MjA4YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAKQEAgLTE3Nyw2ICsxNzcsMTAgQEAgdm9p
ZCBUaWxlZERyYXdpbmdBcmVhOjpyZW1vdmVUaWxlKGludCB0aWxlSUQpCiAgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpSZW1vdmVUaWxlKHRpbGVJRCkpOwog
fQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBUaWxlZERyYXdpbmdB
cmVhOjpkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiog
Y29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
IGFyZ3VtZW50cykgeyB9CisjZW5kaWYKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCisKICNlbmRp
ZiAvLyBUSUxFRF9CQUNLSU5HX1NUT1JFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaAppbmRleCBlZDEzZDJhLi41ZWI3OWFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5n
QXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdp
bmdBcmVhLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRS
b290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc3luY0NvbXBvc2l0aW5nTGF5ZXJzKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6
TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKICNlbmRpZgogCiBwcml2YXRl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4
IDU1ZjVlZmUuLmYxOWI2YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKQEAgLTIxNTQsNiArMjE1NCwxNCBAQCB2b2lkIFdlYlBhZ2U6OmRpZFJl
Y2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1l
c3NhZwogICAgICAgICAgICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZURyYXdpbmdBcmVhTWVz
c2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNs
YXNzTGF5ZXJUcmVlSG9zdD4oKSkgeworICAgICAgICBpZiAobV9kcmF3aW5nQXJlYSkKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShjb25u
ZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKICAgICAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChtZXNzYWdlSUQuaXM8
Q29yZUlQQzo6TWVzc2FnZUNsYXNzV2ViSW5zcGVjdG9yPigpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCmlu
ZGV4IDU3OGFlMDguLjhjNDQ2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0yNSw4ICsyNSw0MTMg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UXQuaCIKKworI2luY2x1ZGUgIkRy
YXdpbmdBcmVhSW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisj
aW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1Jl
ZlB0cjxMYXllclRyZWVIb3N0UXQ+IExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKFdlYlBhZ2UqIHdl
YlBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRyZWVIb3N0UXQod2ViUGFn
ZSkpOworfQorCitMYXllclRyZWVIb3N0UXQ6On5MYXllclRyZWVIb3N0UXQoKQoreworfQorCitM
YXllclRyZWVIb3N0UXQ6OkxheWVyVHJlZUhvc3RRdChXZWJQYWdlKiB3ZWJQYWdlKQorICAgIDog
TGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQorICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVy
Rmx1c2goZmFsc2UpCisgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkKKyAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyhmYWxzZSkKKyAgICAsIG1f
aXNTdXNwZW5kZWQoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNl
KQorICAgICwgbV9zaG91bGRTeW5jUm9vdExheWVyKHRydWUpCisgICAgLCBtX2xheWVyRmx1c2hU
aW1lcih0aGlzLCAmTGF5ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKKyAgICAs
IG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUpCit7CisgICAgLy8gQ3JlYXRlIGEg
cm9vdCBsYXllci4KKyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlz
KTsKKyAgICBXZWJHcmFwaGljc0xheWVyKiB3ZWJSb290TGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5
ZXIobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIHdlYlJvb3RMYXllci0+c2V0Um9vdExheWVyKHRy
dWUpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVl
SG9zdFF0IHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0Nv
bnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgp
KTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQud2ViTGF5ZXJJRCA9IHRvV2ViR3JhcGhpY3NMYXll
cih3ZWJSb290TGF5ZXIpLT5pZCgpOworCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
ID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQorICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldExh
eWVyVHJlZVRpbGVDbGllbnQodGhpcyk7CisjZW5kaWYKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0UXQgbm9uLWNv
bXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFt
X3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpOworICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisKKyAgICBtX3Jv
b3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKTsKKwor
ICAgIGlmIChtX3dlYlBhZ2UtPmhhc1BhZ2VPdmVybGF5KCkpCisgICAgICAgIGNyZWF0ZVBhZ2VP
dmVybGF5TGF5ZXIoKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RRdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJG
bHVzaGluZ0VuYWJsZWQpCit7CisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVk
ID09IGxheWVyRmx1c2hpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxheWVyRmx1c2hpbmdFbmFibGVkOworCisgICAgaWYg
KG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBj
YW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2No
ZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0
aXZlKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0UXQ6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBt
X2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRT
aG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoKQoreworICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZs
dXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3RRdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllcikKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92
ZUFsbENoaWxkcmVuKCk7CisKKyAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxheWVyIHRyZWUg
aGllcmFyY2h5LgorICAgIGlmIChncmFwaGljc0xheWVyKQorICAgICAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RRdDo6aW52YWxpZGF0ZSgpCit7CisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2go
KTsKKworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsK
KyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QocmVjdCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisKKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNjcm9sbE5vbkNvbXBv
c2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpCit7CisgICAgc2V0Tm9uQ29tcG9zaXRlZENv
bnRlbnRzTmVlZERpc3BsYXkoc2Nyb2xsUmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0
Ojpmb3JjZVJlcGFpbnQoKQoreworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RRdDo6c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBu
ZXdTaXplKQoreworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgLy8g
SWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNv
bnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5
IGV4cG9zZWQgYXJlYXMuCisgICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dFNpemUobmV3U2l6ZSk7CisKKyAgICBpZiAobmV3U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0
aCgpKSB7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0
PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRT
aXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0
KSk7CisgICAgfQorCisgICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgp
KQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdT
aXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOworCisgICAgaWYgKG1fcGFnZU92ZXJs
YXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG5ld1NpemUpOwor
CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpk
aWRJbnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsK
KyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6
ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVy
KCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0
KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlM
YXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCitib29sIExheWVyVHJlZUhvc3RRdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
KCkKK3sKKyAgICBib29sIGRpZFN5bmMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7Cisg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwor
CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OworICAgIHJldHVybiBkaWRTeW5jOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkU3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mIGluZm8pCit7Cisg
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlSG9zdFByb3h5OjpTeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKGluZm8pKTsK
K30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZERlbGV0ZUxheWVyKFdlYkxheWVySUQgaWQp
Cit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEZWxldGVDb21wb3NpdGluZ0xheWVyKGlkKSk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgp
Cit7CisgICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOworCisgICAgaWYgKCFtX2lzVmFs
aWQpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQor
ICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICAgICAg
cmV0dXJuOworI2VuZGlmCisKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOworICAgIGZs
dXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIGlmICghbV9zaG91bGRTeW5jRnJhbWUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIpIHsKKyAgICAg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlNldFJvb3RD
b21wb3NpdGluZ0xheWVyKHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlk
KCkpKTsKKyAgICAgICAgbV9zaG91bGRTeW5jUm9vdExheWVyID0gZmFsc2U7CisgICAgfQorCisg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRpZFJlbmRl
ckZyYW1lKCkpOworCisgICAgaWYgKCFtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTGV0IHRoZSBkcmF3aW5nIGFyZWEga25vdyB0aGF0
IHdlJ3ZlIGRvbmUgYSBmbHVzaCBvZiB0aGUgbGF5ZXIgY2hhbmdlcy4KKyAgICBzdGF0aWNfY2Fz
dDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3RE
aWRGbHVzaExheWVycygpOworICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0g
ZmFsc2U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJlZChU
aW1lcjxMYXllclRyZWVIb3N0UXQ+KikKK3sKKyAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigp
Cit7CisgICAgQVNTRVJUKCFtX3BhZ2VPdmVybGF5TGF5ZXIpOworCisgICAgbV9wYWdlT3Zlcmxh
eUxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3RRdCBwYWdlIG92ZXJs
YXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERyYXdz
Q29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQYWdl
LT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXll
ci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkZXN0cm95UGFnZU92ZXJsYXlM
YXllcigpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3Zl
cmxheUxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0g
bnVsbHB0cjsKK30KKworaW50NjRfdCBMYXllclRyZWVIb3N0UXQ6OmFkb3B0SW1hZ2VCYWNraW5n
U3RvcmUoSW1hZ2UqIGltYWdlKQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBJ
bnZhbGlkV2ViTGF5ZXJJRDsKKyAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKKworICAgIGlmICghcGl4bWFwKQorICAgICAgICByZXR1cm4g
SW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBpbnQ2NF90IGtleSA9IHBpeG1hcC0+Y2FjaGVLZXko
KTsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CisKKyAgICBpZiAoaXQgIT0gbV9kaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkgeworICAgICAgICArKyhpdC0+c2Vj
b25kKTsKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICB9CisKKyAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZS0+
c2l6ZSgpLCBpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6
U3VwcG9ydHNBbHBoYSA6IDApOworICAgIHsKKyAgICAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRl
eHQoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOworICAgIH0KKworICAgIFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwor
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXksIGhhbmRsZSkpOworICAgIG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VSZWZDb3VudHMuYWRkKGtleSwgMSk7CisgICAgcmV0dXJuIGtleTsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtl
eSkKK3sKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJuOworICAgIEhhc2hNYXA8aW50NjRf
dCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRz
LmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNv
dW50cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXQtPnNlY29uZC0tOworCisgICAg
aWYgKGl0LT5zZWNvbmQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtl
eSkpOworfQorCisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlBbmltYXRpb25TdGFydGVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKK3sKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKikKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnBhaW50Q29udGVudHMo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWlu
dGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBpZiAo
Z3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpIHsKKyAgICAgICAg
bV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChncmFwaGljc0xheWVyID09IG1fcGFnZU92ZXJsYXlM
YXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQYWdlT3ZlcmxheShncmFwaGljc0NvbnRl
eHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBMYXllclRy
ZWVIb3N0UXQ6OnNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBh
Z2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMoKTsKK30KKworYm9v
bCBMYXllclRyZWVIb3N0UXQ6OnNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd1JlcGFpbnRDb3VudGVy
KCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lO
R19TVE9SRSkKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5
ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZv
ckxheWVyKGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mbykpOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3RRdDo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQs
IHVwZGF0ZUluZm8pKTsKK30KK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZW1vdmVUaWxlKFdlYkxh
eWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJ
RCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9y
TGF5ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAg
V2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSBXZWJHcmFwaGljc0xheWVyOjpsYXllckJ5SUQobGF5
ZXJJRCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCB2
aXNpYmxlUmVjdChyZWN0KTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KHJlY3Qp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2Nh
bGUoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUpCit7CisgICAgV2ViR3JhcGhpY3NM
YXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOworICAg
IGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBsYXllci0+c2V0Q29udGVudHNTY2Fs
ZShzY2FsZSk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdChyZWN0KTsKK30KKwordm9pZCBMYXll
clRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3Qg
RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIo
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0
VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0UXQ6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0g
ZmFsc2U7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9z
dFF0OjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIHJldHVybiAh
bV9pc1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQcm9jZXNzOworfQorCisjZW5kaWYKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZWxzZQogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIK
IAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBib29s
IExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCkBAIC0zNSwz
ICs0NDAsNCBAQCBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhYzk2YQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
aApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMYXllclRy
ZWVIb3N0UXRfaAorI2RlZmluZSBMYXllclRyZWVIb3N0UXRfaAorCisjaW5jbHVkZSAiTGF5ZXJU
cmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBVcGRhdGVJbmZvOworY2xhc3MgV2ViUGFnZTsKKworY2xhc3Mg
TGF5ZXJUcmVlSG9zdFF0IDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDbGllbnQKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBXZWJMYXllclRyZWVUaWxlQ2xpZW50CisjZW5kaWYKK3sKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IGNyZWF0ZShXZWJQ
YWdlKik7CisgICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdFF0KCk7CisKKyAgICBzdGF0aWMgYm9v
bCBzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKworICAgIHZpcnR1YWwgY29uc3Qg
TGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVl
Q29udGV4dDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJs
ZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJv
b2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpH
cmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZp
cnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzY3JvbGxPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBu
ZXdTaXplKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwor
CisgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQg
PSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGV2aWNl
U2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KKyAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFn
ZUJhY2tpbmdTdG9yZShJbWFnZSopOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNr
aW5nU3RvcmUoaW50NjRfdCk7CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBV
cGRhdGVJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50
IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxl
KFdlYkxheWVySUQsIGludCB0aWxlSUQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29u
dGVudFJlY3RGb3JMYXllcihpbnQgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5
ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IEludFJlY3QmLCBmbG9hdCBzY2FsZSk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29u
c3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTeW5jQ29tcG9zaXRpbmdTdGF0
ZUZvckxheWVyKGNvbnN0IFdlYkxheWVySW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBkaWREZWxl
dGVMYXllcihXZWJMYXllcklEKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQg
TGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsKKworcHJpdmF0ZToKKyAgICAvLyBHcmFwaGljc0xh
eWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5n
UGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWlu
dENvdW50ZXIoKSBjb25zdDsKKworICAgIC8vIExheWVyVHJlZUhvc3RRdAorICAgIHZvaWQgY3Jl
YXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIo
KTsKKyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIHZvaWQgY2FuY2Vs
UGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICB2b2lkIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNo
KCk7CisgICAgdm9pZCBzZW5kTGF5ZXJzVG9VSSgpOworCisgICAgT3duUHRyPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworCisgICAgLy8gVGhlIGxheWVyIHdoaWNoIGNvbnRh
aW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7CisKKyAgICAvLyBUaGUgcGFn
ZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJsYXku
CisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsK
KworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50PiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVm
Q291bnRzOworCisgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKKyAg
ICBib29sIG1faXNWYWxpZDsKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBi
b29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKKyAgICBib29sIG1faXNTdXNwZW5kZWQ7CisjZW5k
aWYKKyAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKKyAgICBib29sIG1f
c2hvdWxkU3luY0ZyYW1lOworICAgIGJvb2wgbV9zaG91bGRTeW5jUm9vdExheWVyOworICAgIHZv
aWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlSG9zdFF0Piop
OworICAgIFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhvc3RRdD4gbV9sYXllckZsdXNoVGltZXI7
CisgICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKK307CisKK30KKworI2Vu
ZGlmIC8vIExheWVyVHJlZUhvc3RRdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111051</attachid>
            <date>2011-10-14 12:26:48 -0700</date>
            <delta_ts>2011-10-17 09:21:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>103868</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2N2ZjYjUyLi4yNzI2MTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcy
IEBACisyMDExLTEwLTExICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1F0XVtXSzJdIFN5bmNocm9uaXplIHRpbGluZyB3aXRoIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE1MQorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgorCisg
ICAgICAgIE1ha2UgdGhlIHRpbGVkICJub24tY29tcG9zaXRlZCIgY29udGVudCBhbmQgdGhlIGNv
bXBvc2l0ZWQgbGF5ZXJzIGdvIHRocm91Z2ggdGhlIHNhbWUKKyAgICAgICAgY29kZSBwYXRoIG9u
IFdlYktpdDIuIEluc3RlYWQgb2YgaGF2aW5nIGEgImRyYXdpbmcgYXJlYSIgdGhhdCBoYW5kbGVz
IHRoZSBub24tY29tcG9zaXRlZAorICAgICAgICBjb250ZW50IGFuZCBhIHNlcGVyYXRlIGxheWVy
IHRyZWUsIHdlIHB1dCBldmVyeXRoaW5nIGluIGEgbGF5ZXIgdHJlZSwgd2l0aCB0aGUgbm9uLQor
ICAgICAgICBjb21wb3NpdGVkIGNvbnRlbnQgYmVpbmcgYSBsYXllciBpbiB0aGUgdHJlZS4KKwor
ICAgICAgICBUaGlzIGFsbG93cyBmaXhpbmcgc2V2ZXJhbCBpc3N1ZXMgd2l0aCB3ZWJzaXRlcyB0
aGF0IGhhdmUgbGFyZ2UgY29udGVudCBhcmVhcyB0aGF0IGFyZQorICAgICAgICBjb21wb3NpdGVk
IG9yIG92ZXJsYXAgd2l0aCBjb21wb3NpdGVkIGxheWVycy4KKworICAgICAgICBMYXllci10cmVl
IHN5bmNocm9uaXphdGlvbiBpcyBkb25lIGJ5IHBhc3NpbmcgV2ViS2l0MiBtZXNzYWdlcyBiZXR3
ZWVuIGEgTGF5ZXJUcmVlSG9zdAorICAgICAgICBvbiB0aGUgV2ViUHJvY2VzcyBhbmQgYSBMYXll
clRyZWVIb3N0UHJveHkgb24gdGhlIFVJIHByb2Nlc3MuIEV2ZXJ5IGxheWVyIGluIHRoZSB0cmVl
IGhhcworICAgICAgICBpdHMgb3duIHRpbGVkIGJhY2tpbmcgc3RvcmUsIGFuZCB1c2VzIHRoZSBM
YXllclRyZWVIb3N0IGNvbW11bmljYXRpb24gY2hhbm5lbCB0byBwYXNzCisgICAgICAgIGNvbnRl
bnQgdXAgdG8gdGhlIFVJIHByb2Nlc3MuIFRoZSBVSSBwcm9jZXNzIHdpbGwgbGF0ZXIgY3JlYXRl
cyBpdHMgb3duIEdyYXBoaWNzTGF5ZXIgdHJlZSwKKyAgICAgICAgYmFzZWQgb24gVGV4dHVyZU1h
cHBlciwgd2hpY2ggY2FuIGJlIHBhaW50ZWQgZGlyZWN0bHkgd2l0aCBPcGVuR0wuCisKKyAgICAg
ICAgU2V2ZXJhbCBvcHRpbWl6YXRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBub24tY29tcG9z
aXRlZCBsYXllciBhcyB3ZWxsLCBlLmcuIHNwZWNpZnlpbmcKKyAgICAgICAgYSB0cmFqZWN0b3J5
IGFuZCB1cGRhdGluZyB0aGUgdmlzaWJsZSByZWN0IHRvZ2V0aGVyIHdpdGggdGhlIGNvbnRlbnQg
c2NhbGUuCisKKyAgICAgICAgVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBkaXNhYmxlZCwgYSBzZXBh
cmF0ZSBwYXRjaCB3aWxsIGVuYWJsZSBpdCBhbmQgZ2x1ZSBpdCB0bworICAgICAgICBRVG91Y2hX
ZWJQYWdlLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJvOgorICAgICAgICAqIFBsYXRm
b3JtL0NvcmVJUEMvTWVzc2FnZUlELmg6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQyL21lc3Nh
Z2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9MYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICog
U2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcklu
Zm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9xdC9M
YXllclRyZWVDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0
OjpMYXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6
fkxheWVyVHJlZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojpl
bmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpkZWNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktp
dDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KToKKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVByb3h5Ojp2aWV3cG9ydFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eTo6aXNCYWNraW5nU3RvcmVSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhUHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVj
dG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnJlbW92ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2Vp
dmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6cGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxl
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6bGF5
ZXJCeUlEKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpyb290TGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeVN5bmNS
ZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd0RlYnVn
Qm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd1JlcGFp
bnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludENv
bnRlbnRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2Vz
LmluOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDogQWRkZWQuCisgICAgICAgICog
V2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6fldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVQYWludEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNl
dFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0
ZXNBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpsYXllclRyZWVUaWxlQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldExheWVyVHJlZVRpbGVDbGllbnQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RB
bmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3
aW5nQXJlYTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVy
TmV4dFNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UXQ6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZERlbGV0ZUxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRlc3Ryb3lQYWdl
T3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjphZG9wdElt
YWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZWxl
YXNlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6
Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RR
dDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hv
d0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hvd1Jl
cGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVU
aWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZW1vdmVUaWxlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRl
bnRSZWN0QW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKToKKwogMjAxMS0xMC0xMSAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBTbWFsbCBl
bWJlZGRlZCBQREZzIGFyZSBub3QgZnVsbHkgcmVwYWludGVkIHdoZW4gc2Nyb2xsaW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8gYi9Tb3VyY2UvV2ViS2l0
Mi9EZXJpdmVkU291cmNlcy5wcm8KaW5kZXggZmNlNTljNS4uYjkzZTc2NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rl
cml2ZWRTb3VyY2VzLnBybwpAQCAtOTIsNiArOTIsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwK
ICAgICBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gXAogICAgIERvd25sb2FkUHJv
eHkubWVzc2FnZXMuaW4gXAogICAgIERyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4gXAorICAg
IExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luQ29udHJvbGxlclBy
b3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Qcm9jZXNzLm1lc3NhZ2VzLmluIFwKICAgICBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBcCkBAIC0xMTYsNiArMTE3LDcgQEAg
TUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMu
aW4gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gXAogICAgIFdl
YlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gXAorICAgIFdlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gXAog
ICAgIFdlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVz
c2FnZUlELmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCmlu
ZGV4IDEzYjIxODMuLjQ1NTFkN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvTWVzc2FnZUlELmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9NZXNzYWdlSUQuaApAQCAtMzgsNiArMzgsNyBAQCBlbnVtIE1lc3NhZ2VDbGFzcyB7CiAgICAg
TWVzc2FnZUNsYXNzQXV0aGVudGljYXRpb25NYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc0RyYXdp
bmdBcmVhLAogICAgIE1lc3NhZ2VDbGFzc0luamVjdGVkQnVuZGxlLAorICAgIE1lc3NhZ2VDbGFz
c0xheWVyVHJlZUhvc3QsCiAgICAgTWVzc2FnZUNsYXNzV2ViQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXIsCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29va2llTWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NX
ZWJEYXRhYmFzZU1hbmFnZXIsCkBAIC01NCw2ICs1NSw3IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsK
ICAgICAvLyBNZXNzYWdlcyBzZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgVUkgcHJvY2Vz
cy4KICAgICBNZXNzYWdlQ2xhc3NEb3dubG9hZFByb3h5LAogICAgIE1lc3NhZ2VDbGFzc0RyYXdp
bmdBcmVhUHJveHksCisgICAgTWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdFByb3h5LAogICAgIE1l
c3NhZ2VDbGFzc1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHksCiAgICAgTWVzc2FnZUNs
YXNzV2ViQ29udGV4dCwKICAgICBNZXNzYWdlQ2xhc3NXZWJDb250ZXh0TGVnYWN5LApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5IGIvU291cmNl
L1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CmluZGV4IGI4NWRhOTguLmQyZTRl
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5w
eQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKQEAgLTM4
MSw2ICszODEsOCBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dlYktp
dDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwKICAgICAgICAgJ1dlYktp
dDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rlcic6IFtdLAogICAgICAgICAnV2ViS2l0OjpX
ZWJHZXN0dXJlRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAorICAgICAgICAnV2ViS2l0OjpXZWJM
YXllcklEJzogWyciV2ViTGF5ZXJUcmVlSW5mby5oIiddLAorICAgICAgICAnV2ViS2l0OjpXZWJM
YXllckluZm8nOiBbJyJXZWJMYXllclRyZWVJbmZvLmgiJ10sCiAgICAgICAgICdXZWJLaXQ6Oldl
YktleWJvYXJkRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAogICAgICAgICAnV2ViS2l0OjpXZWJN
b3VzZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViVG91Y2hF
dmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNv
bnRleHQuaAppbmRleCA4NjY3Yzk4Li4yZGI1ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9M
YXllclRyZWVDb250ZXh0LmgKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogICAgIHVpbnQzMl90
IGNvbnRleHRJRDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBIV05EIHdpbmRvdzsKKyNlbGlm
IFBMQVRGT1JNKFFUKQorICAgIHVpbnQzMl90IHdlYkxheWVySUQ7CiAjZW5kaWYKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAppbmRleCBhMDEyODU1Li5l
ZGI2MmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5m
by5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCkBA
IC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAKKyNpbmNs
dWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKIApAQCAtMzMsMzUgKzM0LDE3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogdm9pZCBXZWJMYXllckluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgLy8gV2UgaGF2ZSB0byBkaXZpZGUgaXQgdG8gc2V2
ZXJhbCBsaW5lcywgYmVjYXVzZSBDb3JlSVBDOjpJbi9PdXQgdGFrZXMgYSBtYXhpbXVtIG9mIDEw
IGFyZ3VtZW50cy4KLSAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4oaWQsIG5hbWUsIHBh
cmVudCwgY2hpbGRyZW4sIGZsYWdzLCByZXBsaWNhLCBtYXNrKSk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlKENvcmVJUEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGlj
YSwgbWFzaywgaW1hZ2VCYWNraW5nU3RvcmVJRCkpOwogICAgIGVuY29kZXItPmVuY29kZShDb3Jl
SVBDOjpJbihwb3MsIHNpemUsIHRyYW5zZm9ybSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQsIGNoaWxk
cmVuVHJhbnNmb3JtLCBjb250ZW50c1JlY3QpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoaW1hZ2VC
YWNraW5nU3RvcmUgPyBpbWFnZUJhY2tpbmdTdG9yZS0+c2l6ZSgpIDogSW50U2l6ZSgpKTsKLQot
ICAgIGlmICghaW1hZ2VCYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlIGltYWdlSGFuZGxlOwotICAgIGlmIChpbWFnZUJhY2tpbmdTdG9y
ZS0+Y3JlYXRlSGFuZGxlKGltYWdlSGFuZGxlKSkKLSAgICAgICAgaW1hZ2VIYW5kbGUuZW5jb2Rl
KGVuY29kZXIpOwogfQogCiBib29sIFdlYkxheWVySW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgV2ViTGF5ZXJJbmZvJiBpbmZvKQogewogICAgIC8vIFdlIGhh
dmUgdG8gZGl2aWRlIGl0IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0
IHRha2VzIGEgbWF4aW11bSBvZiAxMCBhcmd1bWVudHMuCi0gICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwgaW5mby5wYXJlbnQsIGluZm8uY2hp
bGRyZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5mby5tYXNrKSkpCisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwgaW5mby5wYXJl
bnQsIGluZm8uY2hpbGRyZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5mby5tYXNrLCBp
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLnBvcywgaW5mby5zaXplLCBpbmZv
LnRyYW5zZm9ybSwgaW5mby5vcGFjaXR5LCBpbmZvLmFuY2hvclBvaW50LCBpbmZvLmNoaWxkcmVu
VHJhbnNmb3JtLCBpbmZvLmNvbnRlbnRzUmVjdCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBJbnRTaXplIGltYWdlQmFja2luZ1N0b3JlU2l6ZTsKLSAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShpbWFnZUJhY2tpbmdTdG9yZVNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGltYWdlQmFja2luZ1N0b3JlU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaW1hZ2VIYW5kbGU7Ci0gICAgaWYgKFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpkZWNvZGUoZGVjb2RlciwgaW1hZ2VIYW5kbGUpKQotICAg
ICAgICBpbmZvLmltYWdlQmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaW1h
Z2VIYW5kbGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkxheWVyVHJlZUluZm8uaAppbmRleCBhMGU2OGQzLi4yNTAwM2U3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKQEAgLTM0LDYgKzM0LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdHlwZWRlZiB1aW50MzJfdCBXZWJM
YXllcklEOworZW51bSB7IEludmFsaWRXZWJMYXllcklEID0gMCB9OwogCiBzdHJ1Y3QgV2ViTGF5
ZXJVcGRhdGVJbmZvIHsKICAgICBXZWJMYXllclVwZGF0ZUluZm8oKSB7IH0KQEAgLTU0LDYgKzU1
LDcgQEAgc3RydWN0IFdlYkxheWVySW5mbyB7CiAgICAgV2ViTGF5ZXJJRCBwYXJlbnQ7CiAgICAg
V2ViTGF5ZXJJRCByZXBsaWNhOwogICAgIFdlYkxheWVySUQgbWFzazsKKyAgICBpbnQ2NF90IGlt
YWdlQmFja2luZ1N0b3JlSUQ7CiAKICAgICBGbG9hdFBvaW50IHBvczsKICAgICBGbG9hdFBvaW50
M0QgYW5jaG9yUG9pbnQ7CkBAIC03MSw2ICs3Myw4IEBAIHN0cnVjdCBXZWJMYXllckluZm8gewog
ICAgICAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsKICAgICAgICAgICAgIGJvb2wgcHJl
c2VydmVzM0QgOiAxOwogICAgICAgICAgICAgYm9vbCBjb250ZW50TmVlZHNEaXNwbGF5IDogMTsK
KyAgICAgICAgICAgIGJvb2wgaW1hZ2VJc1VwZGF0ZWQ6IDE7CisgICAgICAgICAgICBib29sIGlz
Um9vdExheWVyOiAxOwogICAgICAgICB9OwogICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAg
ICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9MYXllclRyZWVDb250
ZXh0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5j
cHAKaW5kZXggZjFiZjFiNC4uZDM3ZDc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKQEAgLTI2LDQxICsyNiwzOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKIAotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAi
QXJndW1lbnRFbmNvZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBMYXllclRyZWVDb250
ZXh0OjpMYXllclRyZWVDb250ZXh0KCkKKyAgICA6IHdlYkxheWVySUQoMCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCiBMYXllclRyZWVDb250ZXh0Ojp+TGF5ZXJUcmVlQ29udGV4dCgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb250ZXh0Ojpl
bmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3QKK3ZvaWQgTGF5ZXJUcmVlQ29u
dGV4dDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGVuY29kZXItPmVuY29kZSh3ZWJMYXllcklEKTsK
IH0KIAotYm9vbCBMYXllclRyZWVDb250ZXh0OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiwgTGF5ZXJUcmVlQ29udGV4dCYpCitib29sIExheWVyVHJlZUNvbnRleHQ6OmRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIExheWVyVHJlZUNvbnRleHQmIGNvbnRl
eHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZGVjb2Rlci0+ZGVjb2RlKGNvbnRleHQud2ViTGF5ZXJJRCk7CiB9CiAKIGJvb2wgTGF5ZXJU
cmVlQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdlYkxheWVySUQ7CiB9CiAKLWJvb2wgb3BlcmF0
b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpCiti
b29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYSwgY29uc3QgTGF5ZXJUcmVl
Q29udGV4dCYgYikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBhLndlYkxheWVySUQgPT0gYi53ZWJMYXllcklEOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmNwcAppbmRleCBmODUyZTJmLi4zOWQ2MGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0yOCw2ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01
Myw0ICs1NywxNiBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHk6OnNldFNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQogICAgIHNpemVEaWRDaGFuZ2Uo
KTsKIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQordm9pZCBEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAg
bV93ZWJQYWdlUHJveHktPnNldFZpZXdOZWVkc0Rpc3BsYXkodmlld3BvcnRWaXNpYmxlUmVjdCgp
KTsKK30KKworV2ViQ29yZTo6SW50UmVjdCBEcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3Qo
KSBjb25zdAoreworICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFn
ZVByb3h5LT52aWV3U2l6ZSgpKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDA4OGZj
OGIuLmExOTQ5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkuaApAQCAtMjcsOSArMjcsMTEgQEAKICNpZm5kZWYgRHJhd2luZ0FyZWFQcm94eV9oCiAjZGVm
aW5lIERyYXdpbmdBcmVhUHJveHlfaAogCisjaW5jbHVkZSA8Q29yZUlQQy9NZXNzYWdlSUQuaD4K
ICNpbmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKLSNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNp
bmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogI2lmIFBM
QVRGT1JNKFFUKQpAQCAtNDUsMTMgKzQ3LDE3IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIH0KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEludFJlY3Q7CisgICAgY2xhc3MgRmxvYXRQ
b2ludDsKKyAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIH0KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIExheWVyVHJlZUNvbnRleHQ7CitjbGFzcyBMYXllclRyZWVIb3N0UHJv
eHk7CiBjbGFzcyBVcGRhdGVJbmZvOworY2xhc3MgV2ViTGF5ZXJUcmVlSW5mbzsKK2NsYXNzIFdl
YkxheWVyVXBkYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAogY2xhc3MgRHJhd2luZ0Fy
ZWFQcm94eSB7CkBAIC03Nyw2ICs4MywyNCBAQCBwdWJsaWM6CiAgICAgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xs
T2Zmc2V0KTsKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4g
Y29udGVudHNSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udGVudHNS
ZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQmFja2luZ1N0b3JlUmVhZHkoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSkg
eyB9CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZp
c2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3Qg
V2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGVGb3JM
YXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciogYXJndW1lbnRzKSB7IH0KKworICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJu
IG1fd2ViUGFnZVByb3h5OyB9CisjZW5kaWYKKyNlbmRpZgogcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlLCBXZWJQYWdlUHJveHkqKTsKIApA
QCAtODYsNiArMTEwLDEwIEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6
ZTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRyPExh
eWVyVHJlZUhvc3RQcm94eT4gbV9sYXllclRyZWVIb3N0UHJveHk7CisjZW5kaWYKKwogcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZSgpID0gMDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5kZXggNjE5ZDUw
OC4uNGQ3YmQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eUltcGwuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXllclRy
ZWVIb3N0UHJveHkuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC0zMjgsOCArMzMyLDM4IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29u
dGV4CiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fbGF5ZXJUcmVlQ29udGV4
dCA9IGxheWVyVHJlZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIGlmICghbV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7CisjZW5k
aWYKK30KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQordm9pZCBEcmF3aW5nQXJl
YVByb3h5SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVl
SG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+ZGlkUmVjZWl2ZUxheWVy
VHJlZUhvc3RQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOwor
fQorCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5k
U2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQg
c2NhbGUpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVy
VHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKHZpc2libGVDb250
ZW50c1JlY3QsIHNjYWxlKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CiB9CiAKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUlt
cGw6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQor
ICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQobWF0
cml4LCBvcGFjaXR5KTsKK30KKyNlbmRpZgorCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQogewogICAgIEFTU0VSVChpc0luQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4IGQwOTFmOTcuLmFhYzcxZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCkBAIC0zOSw2ICsz
OSw4IEBAIGNsYXNzIFJlZ2lvbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIExheWVy
VHJlZUhvc3RQcm94eTsKKwogY2xhc3MgRHJhd2luZ0FyZWFQcm94eUltcGwgOiBwdWJsaWMgRHJh
d2luZ0FyZWFQcm94eSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RHJhd2luZ0Fy
ZWFQcm94eUltcGw+IGNyZWF0ZShXZWJQYWdlUHJveHkqKTsKQEAgLTc1LDYgKzc3LDEzIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKIAogICAg
IGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gIW1f
bGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCk7IH0KKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9y
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOworI2VuZGlmCiAjZWxzZQogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmNlZjFmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTAsMCArMSwxMzUgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKyNkZWZpbmUg
TGF5ZXJUcmVlSG9zdFByb3h5X2gKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1
ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJNZXNzYWdlUXVldWUuaCIKKyNpbmNs
dWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViTGF5ZXJJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOworCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI7CisKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSop
OworICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOworICAgIHZvaWQgc3luY0NvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdM
YXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciop
OworICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgSW50UmVjdCYsIGZsb2F0KTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOworI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQorICAgIHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICB2b2lkIHN3YXBD
b250ZW50QnVmZmVycygpOworICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKKyAgICB2b2lkIGNy
ZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpV
cGRhdGVJbmZvJik7CisgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZvaWQgcmVtb3ZlVGls
ZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2b2lkIGNyZWF0ZURpcmVj
dGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmKTsKKyAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2
NF90KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvckxheWVyKFdlYkxheWVy
SUQsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CisjZW5kaWYK
KworcHJvdGVjdGVkOgorICAgIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRlTGF5ZXIo
V2ViTGF5ZXJJRCk7CisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBp
ZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQo
aWQpOyB9CisgICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5
ZXIuZ2V0KCk7IH0KKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQorCisgICAgUnVuTG9vcDo6VGltZXI8TGF5ZXJU
cmVlSG9zdFByb3h5PiBtX2FuaW1hdGlvblRpbWVyOworICAgIERyYXdpbmdBcmVhUHJveHkqIG1f
ZHJhd2luZ0FyZWFQcm94eTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgSW50UmVjdCBtX3Zpc2libGVDb250
ZW50c1JlY3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworCisgICAgTWVzc2FnZVF1ZXVl
PExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyPiBtX21lc3NhZ2VzVG9SZW5kZXJlcjsKKyAgICB2
b2lkIHB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI+KTsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBl
cj4gbV90ZXh0dXJlTWFwcGVyOworI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8SW50UG9pbnQsIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IFRpbGVkSW1hZ2U7
CisgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwIG1fbm9kZVZpc3VhbENvbnRlbnRz
UmVjdE1hcDsKKyAgICBIYXNoTWFwPGludCwgaW50PiBtX3RpbGVUb05vZGVUaWxlOworICAgIGlu
dCByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3Q7CisgICAgSGFzaE1h
cDxpbnQ2NF90LCBUaWxlZEltYWdlPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKworICAg
IHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7CisgICAgdm9pZCBzeW5jaHJvbml6ZVZpZXdw
b3J0KCk7CisgICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIHNldFJv
b3RMYXllcklEKFdlYkxheWVySUQpOworICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycyhjb25z
dCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBm
bG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7CisgICAg
dm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBRSW1hZ2UmKTsKKyAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIGNv
bnN0IFFJbWFnZSYpOworICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOworICAgIHZvaWQg
YXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdl
SUQpOworICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGVuc3VyZVJvb3RM
YXllcigpOworICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7CisKKyNlbmRpZgorCisg
ICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZlY3RvcjxXZWJMYXll
cklEPiBtX2xheWVyc1RvRGVsZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgV2Vi
TGF5ZXJJRCBtX3Jvb3RMYXllcklEOworICAgIGludCBtX2lkOworfTsKKworfQorCisjZW5kaWYg
Ly8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmJjN2FmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzIg
QEAKKyMKKyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisj
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorbWVzc2FnZXMgLT4g
TGF5ZXJUcmVlSG9zdFByb3h5IHsKKyAgICBTeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKFdlYktp
dDo6V2ViTGF5ZXJJbmZvIGxheWVySW5mbykKKyAgICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1
aW50MzJfdCBpZCkKKyAgICBEZWxldGVDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQorICAg
IENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJLaXQ6
OlVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3Qg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAg
UmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCisgICAgQ3Jl
YXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUgaGFuZGxlKQorICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90IGtleSkKKyAgICBEaWRSZW5kZXJGcmFtZSgpCit9CisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYWE4NmVmMi4uNDA2Y2Y4OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTc5LDYgKzc5
LDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dGZWF0dXJlcy5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJF
X01BUFBFUikKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgorI2VuZGlm
CisKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlICJBcmd1bWVudENvZGVyc1F0LmgiCiAjZW5k
aWYKQEAgLTEzOTcsNiArMTQwMSwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVIpCisgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdl
Q2xhc3NMYXllclRyZWVIb3N0UHJveHk+KCkpIHsKKyAgICAgICAgbV9kcmF3aW5nQXJlYS0+ZGlk
UmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBh
cmd1bWVudHMpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQogICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzV2Vi
SW5zcGVjdG9yUHJveHk+KCkpIHsKICAgICAgICAgaWYgKFdlYkluc3BlY3RvclByb3h5KiBpbnNw
ZWN0b3IgPSB0aGlzLT5pbnNwZWN0b3IoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjBjMDM2ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCkBAIC0wLDAgKzEsNTk0IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisKKyNp
bmNsdWRlICJMYXllclRyZWVIb3N0TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJNYWluVGhyZWFkLmgi
CisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUlu
Zm8uaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJv
eHkuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKKyNp
bmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJl
TWFwcGVyTm9kZS5oIgorI2luY2x1ZGUgPFFEYXRlVGltZT4KKyNpbmNsdWRlIDxjYWlyby9PcGVu
R0xTaGltcy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTGF5ZXJUcmVlTWVzc2Fn
ZVRvUmVuZGVyZXIgeworcHVibGljOgorICAgIGVudW0gVHlwZSB7CisgICAgICAgIERlbGV0ZUxh
eWVyLAorICAgICAgICBDcmVhdGVUaWxlLAorICAgICAgICBSZW1vdmVUaWxlLAorICAgICAgICBV
cGRhdGVUaWxlLAorICAgICAgICBDcmVhdGVJbWFnZSwKKyAgICAgICAgRGVzdHJveUltYWdlLAor
ICAgICAgICBTeW5jTGF5ZXJQYXJhbWV0ZXJzLAorICAgICAgICBGbHVzaExheWVyQ2hhbmdlcywK
KyAgICAgICAgU2V0Um9vdExheWVyCisgICAgfTsKKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNv
bnN0ID0gMDsKK307CisKK3RlbXBsYXRlPGNsYXNzIE1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNz
YWdlVG9SZW5kZXJlcjo6VHlwZSBtZXNzYWdlVHlwZT4KK2NsYXNzIExheWVyVHJlZU1lc3NhZ2VU
b1JlbmRlcmVyV2l0aERhdGEgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXIgewor
cHVibGljOgorICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbWVzc2FnZVR5
cGU7IH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVy
PiBjcmVhdGUoY29uc3QgTWVzc2FnZURhdGEmIGRhdGEgPSBNZXNzYWdlRGF0YSgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldp
dGhEYXRhKGRhdGEpKTsKKyAgICB9CisKKyAgICBjb25zdCBNZXNzYWdlRGF0YSYgZGF0YSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhKGNvbnN0IE1lc3NhZ2VEYXRhJiBk
YXRhKQorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBNZXNzYWdl
RGF0YSBtX2RhdGE7Cit9OworCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ3JlYXRlVGlsZU1lc3Nh
Z2VEYXRhIHsKKyAgICBXZWJMYXllcklEIGxheWVySUQ7CisgICAgaW50IHJlbW90ZVRpbGVJRDsK
KyAgICBmbG9hdCBzY2FsZTsKK307CisKK3N0cnVjdCBVcGRhdGVUaWxlTWVzc2FnZURhdGEgewor
ICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKKyAgICBpbnQgcmVtb3RlVGlsZUlEOworICAgIEludFJl
Y3Qgc291cmNlUmVjdDsKKyAgICBJbnRSZWN0IHRhcmdldFJlY3Q7CisgICAgUUltYWdlIGltYWdl
OworfTsKKworc3RydWN0IFJlbW92ZVRpbGVNZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBs
YXllcklEOworICAgIGludCByZW1vdGVUaWxlSUQ7Cit9OworCitzdHJ1Y3QgQ3JlYXRlSW1hZ2VN
ZXNzYWdlRGF0YSB7CisgICAgaW50NjRfdCBpbWFnZUlEOworICAgIFFJbWFnZSBpbWFnZTsKK307
CisKK3N0cnVjdCBEZXN0cm95SW1hZ2VNZXNzYWdlRGF0YSB7CisgICAgaW50NjRfdCBpbWFnZUlE
OworfTsKKworc3RydWN0IFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlRGF0YSB7CisgICAgV2Vi
TGF5ZXJJbmZvIGxheWVySW5mbzsKK307CisKK3N0cnVjdCBFbXB0eU1lc3NhZ2VEYXRhIHsgfTsK
K3N0cnVjdCBEZWxldGVMYXllck1lc3NhZ2VEYXRhIHsKKyAgICBXZWJMYXllcklEIGxheWVySUQ7
Cit9Oworc3RydWN0IFNldFJvb3RMYXllck1lc3NhZ2VEYXRhIHsKKyAgICBXZWJMYXllcklEIGxh
eWVySUQ7Cit9OworCitjbGFzcyBDcmVhdGVUaWxlTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBM
YXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPENyZWF0ZVRpbGVNZXNzYWdlRGF0YSwg
TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkNyZWF0ZVRpbGU+IHsgfTsKK2NsYXNzIFVwZGF0
ZVRpbGVNZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVy
V2l0aERhdGE8VXBkYXRlVGlsZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJl
cjo6VXBkYXRlVGlsZT4geyB9OworY2xhc3MgUmVtb3ZlVGlsZU1lc3NhZ2UKKyAgICAgICAgOiBw
dWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxSZW1vdmVUaWxlTWVzc2Fn
ZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpSZW1vdmVUaWxlPiB7IH07CitjbGFz
cyBDcmVhdGVJbWFnZU1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRv
UmVuZGVyZXJXaXRoRGF0YTxDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdl
VG9SZW5kZXJlcjo6Q3JlYXRlSW1hZ2U+IHsgfTsKK2NsYXNzIERlc3Ryb3lJbWFnZU1lc3NhZ2UK
KyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxEZXN0
cm95SW1hZ2VNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkRlc3Ryb3lJ
bWFnZT4geyB9OworY2xhc3MgRmx1c2hMYXllckNoYW5nZXNNZXNzYWdlCisgICAgICAgIDogcHVi
bGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8RW1wdHlNZXNzYWdlRGF0YSwg
TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkZsdXNoTGF5ZXJDaGFuZ2VzPiB7IH07CitjbGFz
cyBTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVN
ZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlRGF0YSwg
TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlN5bmNMYXllclBhcmFtZXRlcnM+IHsgfTsKK2Ns
YXNzIERlbGV0ZUxheWVyTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdl
VG9SZW5kZXJlcldpdGhEYXRhPERlbGV0ZUxheWVyTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyOjpEZWxldGVMYXllcj4geyB9OworY2xhc3MgU2V0Um9vdExheWVyTWVzc2Fn
ZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPFNl
dFJvb3RMYXllck1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6U2V0Um9v
dExheWVyPiB7IH07Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gTGF5ZXJUcmVlSG9z
dFByb3h5OjpjcmVhdGVMYXllcihXZWJMYXllcklEIGxheWVySUQpCit7CisgICAgR3JhcGhpY3NM
YXllciogbmV3TGF5ZXIgPSBuZXcgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIodGhpcyk7Cisg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKG5ld0xheWVy
KTsKKyAgICBub2RlLT5zZXRJRChsYXllcklEKTsKKyAgICBub2RlLT5zZXRUaWxlT3duZXJzaGlw
KFRleHR1cmVNYXBwZXJOb2RlOjpFeHRlcm5hbGx5TWFuYWdlZFRpbGVzKTsKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3TGF5ZXIpOworfQorCitMYXllclRyZWVIb3N0UHJveHk6OkxheWVyVHJlZUhv
c3RQcm94eShEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KQorICAgIDogbV9hbmlt
YXRpb25UaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZMYXllclRyZWVIb3N0UHJveHk6OnVw
ZGF0ZVZpZXdwb3J0KQorICAgICwgbV9kcmF3aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVhUHJveHkp
CisgICAgLCBtX3Jvb3RMYXllcklEKDApCit7Cit9CisKK0xheWVyVHJlZUhvc3RQcm94eTo6fkxh
eWVyVHJlZUhvc3RQcm94eSgpCit7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUg
cmVlbnRyYW50Lgordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250
ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7
CisgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRl
eHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7CisKKyAgICBzeW5jUmVtb3RlQ29udGVudCgpOworICAg
IEdyYXBoaWNzTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsKKyAgICBpZiAo
IWN1cnJlbnRSb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFRleHR1cmVNYXBwZXJO
b2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShjdXJyZW50Um9vdExheWVyKTsKKworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR0xpbnQgdmlld3BvcnRbNF07Cisg
ICAgZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgdmlld3BvcnQpOworICAgIEludFJlY3Qgdmll
d3BvcnRSZWN0KHZpZXdwb3J0WzBdLCB2aWV3cG9ydFsxXSwgdmlld3BvcnRbMl0sIHZpZXdwb3J0
WzNdKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKHZpZXdw
b3J0WzJdLCB2aWV3cG9ydFszXSkpOworICAgIG5vZGUtPnNldFRleHR1cmVNYXBwZXIobV90ZXh0
dXJlTWFwcGVyLmdldCgpKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsK
KyAgICBtX3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOworCisgICAgaWYgKGN1cnJlbnRS
b290TGF5ZXItPm9wYWNpdHkoKSAhPSBvcGFjaXR5IHx8IGN1cnJlbnRSb290TGF5ZXItPnRyYW5z
Zm9ybSgpICE9IG1hdHJpeCkgeworICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRPcGFjaXR5
KG9wYWNpdHkpOworICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRUcmFuc2Zvcm0obWF0cml4
KTsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7CisgICAgfQorCisgICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFw
IG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXA7CisgICAgaWYgKG5vZGUtPmNvbGxlY3RWaXNpYmxl
Q29udGVudHNSZWN0cyhub2RlVmlzdWFsQ29udGVudHNSZWN0TWFwLCB2aWV3cG9ydFJlY3QpKSB7
CisgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlOjpOb2RlUmVjdE1hcDo6aXRlcmF0b3IgZW5kSXRl
cmF0b3IgPSBub2RlVmlzdWFsQ29udGVudHNSZWN0TWFwLmVuZCgpOworICAgICAgICBmb3IgKFRl
eHR1cmVNYXBwZXJOb2RlOjpOb2RlUmVjdE1hcDo6aXRlcmF0b3IgaXQgPSBub2RlVmlzdWFsQ29u
dGVudHNSZWN0TWFwLmJlZ2luKCk7IGl0ICE9IGVuZEl0ZXJhdG9yOyArK2l0KSB7CisgICAgICAg
ICAgICBXZWJMYXllcklEIGxheWVySUQgPSBpdC0+Zmlyc3QtPmlkKCk7CisgICAgICAgICAgICAv
LyBhdm9pZCB1cGRhdGluZyBub24tc3luY2VkIHJvb3QgbGF5ZXIKKyAgICAgICAgICAgIGlmICgh
bGF5ZXJJRCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEludFJlY3Qg
dmlzaWJsZVJlY3QgPSBJbnRSZWN0KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgc2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdEZvckxheWVyKGxheWVySUQsIHZpc2libGVSZWN0KTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBub2RlLT5wYWludCgpOworCisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWlu
dGluZygpOworCisgICAgaWYgKG5vZGUtPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmlt
YXRpb25zKCkpCisgICAgICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT51
cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdEZvckxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCwgY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5k
KE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcihs
YXllcklELCByZWN0KSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30K
KworaW50IExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKGludCB0
aWxlSUQpIGNvbnN0Cit7CisgICAgSGFzaE1hcDxpbnQsIGludD46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV90aWxlVG9Ob2RlVGlsZS5maW5kKHRpbGVJRCk7CisgICAgaWYgKGl0ID09IG1fdGlsZVRv
Tm9kZVRpbGUuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBpdC0+c2Vjb25k
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY0xheWVyUGFyYW1ldGVycyhjb25z
dCBXZWJMYXllckluZm8mIGxheWVySW5mbykKK3sKKyAgICBXZWJMYXllcklEIGlkID0gbGF5ZXJJ
bmZvLmlkOworICAgIGVuc3VyZUxheWVyKGlkKTsKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQg
PSBtX2xheWVycy5maW5kKGlkKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNv
bmQ7CisKKyAgICBsYXllci0+c2V0TmFtZShsYXllckluZm8ubmFtZSk7CisKKyAgICBsYXllci0+
c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5yZXBsaWNhKSk7CisgICAg
bGF5ZXItPnNldE1hc2tMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLm1hc2spKTsKKworICAgIGxh
eWVyLT5zZXRQb3NpdGlvbihsYXllckluZm8ucG9zKTsKKyAgICBsYXllci0+c2V0U2l6ZShsYXll
ckluZm8uc2l6ZSk7CisgICAgbGF5ZXItPnNldFRyYW5zZm9ybShsYXllckluZm8udHJhbnNmb3Jt
KTsKKyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobGF5ZXJJbmZvLmFuY2hvclBvaW50KTsKKyAg
ICBsYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3Jt
KTsKKyAgICBsYXllci0+c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVySW5mby5iYWNrZmFjZVZp
c2libGUpOworICAgIGxheWVyLT5zZXRDb250ZW50c09wYXF1ZShsYXllckluZm8uY29udGVudHNP
cGFxdWUpOworICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJJbmZvLmNvbnRlbnRzUmVj
dCk7CisgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllckluZm8uZHJhd3NDb250ZW50KTsK
KworICAgIGlmIChsYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQpCisgICAgICAgIGFzc2lnbkltYWdl
VG9MYXllcihsYXllciwgbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworCisgICAgLy8g
TmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgorICAgIGxheWVyLT5zZXRNYXNrc1RvQm91
bmRzKGxheWVySW5mby5pc1Jvb3RMYXllciA/IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3Vu
ZHMpOworICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVySW5mby5vcGFjaXR5KTsKKyAgICBsYXll
ci0+c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNlcnZlczNEKTsKKyAgICBWZWN0b3I8R3Jh
cGhpY3NMYXllcio+IGNoaWxkcmVuOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXll
ckluZm8uY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViTGF5ZXJJRCBjaGlsZElE
ID0gbGF5ZXJJbmZvLmNoaWxkcmVuW2ldOworICAgICAgICBHcmFwaGljc0xheWVyKiBjaGlsZCA9
IGxheWVyQnlJRChjaGlsZElEKTsKKyAgICAgICAgaWYgKCFjaGlsZCkgeworICAgICAgICAgICAg
Y2hpbGQgPSBjcmVhdGVMYXllcihjaGlsZElEKS5sZWFrUHRyKCk7CisgICAgICAgICAgICBtX2xh
eWVycy5hZGQoY2hpbGRJRCwgY2hpbGQpOworICAgICAgICB9CisgICAgICAgIGNoaWxkcmVuLmFw
cGVuZChjaGlsZCk7CisgICAgfQorICAgIGxheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7CisK
KyAgICBpZiAobGF5ZXJJbmZvLmlzUm9vdExheWVyICYmIG1fcm9vdExheWVySUQgIT0gaWQpCisg
ICAgICAgIHNldFJvb3RMYXllcklEKGlkKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OmRlbGV0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBsYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fbGF5ZXJzLnJlbW92
ZShsYXllcklEKTsKKyAgICBkZWxldGUgbGF5ZXI7Cit9CisKKwordm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OmVuc3VyZUxheWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgLy8gV2UgaGF2ZSB0byBs
ZWFrIHRoZSBuZXcgbGF5ZXIncyBwb2ludGVyIGFuZCBtYW5hZ2UgaXQgb3Vyc2VsdmVzLAorICAg
IC8vIGJlY2F1c2UgT3duUHRyIGlzIG5vdCBjb3B5YWJsZS4KKyAgICBpZiAobV9sYXllcnMuZmlu
ZChpZCkgPT0gbV9sYXllcnMuZW5kKCkpCisgICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgY3JlYXRl
TGF5ZXIoaWQpLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRS
b290TGF5ZXJJRChXZWJMYXllcklEIGxheWVySUQpCit7CisgICAgaWYgKGxheWVySUQgPT0gbV9y
b290TGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXJJRCA9IGxheWVy
SUQ7CisKKyAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKworICAgIGlmICgh
bGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBs
YXllckJ5SUQobGF5ZXJJRCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGxheWVyKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBmbG9hdCBz
Y2FsZSkKK3sKKyAgICBlbnN1cmVMYXllcihsYXllcklEKTsKKyAgICBUZXh0dXJlTWFwcGVyTm9k
ZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKKworICAg
IGludCBub2RlVGlsZUlEID0gbm9kZS0+Y3JlYXRlQ29udGVudHNUaWxlKHNjYWxlKTsKKyAgICBt
X3RpbGVUb05vZGVUaWxlLmFkZCh0aWxlSUQsIG5vZGVUaWxlSUQpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQp
Cit7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGxh
eWVyQnlJRChsYXllcklEKSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbnQgbm9kZVRpbGVJRCA9IHJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRCh0aWxlSUQpOworICAg
IGlmICghbm9kZVRpbGVJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm9kZS0+cmVtb3ZlQ29u
dGVudHNUaWxlKG5vZGVUaWxlSUQpOworICAgIG1fdGlsZVRvTm9kZVRpbGUucmVtb3ZlKHRpbGVJ
RCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlKFdlYkxheWVySUQg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgUUltYWdlJiBpbWFnZSkKK3sKKyAgICBlbnN1cmVMYXll
cihsYXllcklEKTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBl
ck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGludCBub2RlVGlsZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKHRpbGVJ
RCk7CisgICAgaWYgKCFub2RlVGlsZUlEKQorICAgICAgICByZXR1cm47CisKKyAgICBRSW1hZ2Ug
aW1hZ2VSZWYoaW1hZ2UpOworICAgIG5vZGUtPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFw
cGVyLmdldCgpKTsKKyAgICBub2RlLT5zZXRDb250ZW50c1RpbGVCYWNrQnVmZmVyKG5vZGVUaWxl
SUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGltYWdlUmVmLmJpdHMoKSwgQml0bWFwVGV4dHVy
ZTo6QkdSQUZvcm1hdCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFn
ZShpbnQ2NF90IGltYWdlSUQsIGNvbnN0IFFJbWFnZSYgaW1hZ2UpCit7CisgICAgVGlsZWRJbWFn
ZSB0aWxlZEltYWdlOworICAgIHN0YXRpYyBjb25zdCBpbnQgVGlsZURpbWVuc2lvbiA9IDEwMjQ7
CisgICAgYm9vbCBpbWFnZUhhc0FscGhhID0gaW1hZ2UuaGFzQWxwaGFDaGFubmVsKCk7CisgICAg
SW50UmVjdCBpbWFnZVJlY3QoMCwgMCwgaW1hZ2Uud2lkdGgoKSwgaW1hZ2UuaGVpZ2h0KCkpOwor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2UuaGVpZ2h0KCk7IHkgKz0gVGlsZURpbWVuc2lv
bikgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlLndpZHRoKCk7IHggKz0gVGls
ZURpbWVuc2lvbikgeworICAgICAgICAgICAgUUltYWdlIHN1YkltYWdlOworICAgICAgICAgICAg
SW50UmVjdCByZWN0KHgsIHksIFRpbGVEaW1lbnNpb24sIFRpbGVEaW1lbnNpb24pOworICAgICAg
ICAgICAgcmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0KTsKKyAgICAgICAgICAgIGlmIChRU2l6ZShy
ZWN0LnNpemUoKSkgPT0gaW1hZ2Uuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHN1YkltYWdlID0g
aW1hZ2U7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3ViSW1hZ2UgPSBpbWFn
ZS5jb3B5KHJlY3QpOworICAgICAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUg
PSBtX3RleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgICAgIHRleHR1cmUt
PnJlc2V0KHJlY3Quc2l6ZSgpLCAhaW1hZ2VIYXNBbHBoYSk7CisgICAgICAgICAgICB0ZXh0dXJl
LT51cGRhdGVDb250ZW50cyhpbWFnZUhhc0FscGhhID8gQml0bWFwVGV4dHVyZTo6QkdSQUZvcm1h
dCA6IEJpdG1hcFRleHR1cmU6OkJHUkZvcm1hdCwgSW50UmVjdChJbnRQb2ludDo6emVybygpLCBy
ZWN0LnNpemUoKSksIHN1YkltYWdlLmJpdHMoKSk7CisgICAgICAgICAgICB0aWxlZEltYWdlLmFk
ZChyZWN0LmxvY2F0aW9uKCksIHRleHR1cmUpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOworICAgIG1fZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VzLmFkZChpbWFnZUlELCB0aWxlZEltYWdlKTsKK30KKwordm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCit7CisgICAgbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBp
bnQ2NF90IGltYWdlSUQpCit7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1
cmVNYXBwZXJOb2RlKGxheWVyKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghaW1hZ2VJRCkgeworICAgICAgICBub2RlLT5jbGVhckFsbERpcmVjdGx5Q29tcG9z
aXRlZEltYWdlVGlsZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZsb2F0U2l6
ZSBzaXplKGxheWVyLT5zaXplKCkpOworICAgIEZsb2F0UmVjdCBjb250ZW50c1JlY3QobGF5ZXIt
PmNvbnRlbnRzUmVjdCgpKTsKKyAgICBmbG9hdCBob3Jpem9udGFsRmFjdG9yID0gY29udGVudHNS
ZWN0LndpZHRoKCkgLyBzaXplLndpZHRoKCk7CisgICAgZmxvYXQgdmVydGljYWxGYWN0b3IgPSBj
b250ZW50c1JlY3QuaGVpZ2h0KCkgLyBzaXplLmhlaWdodCgpOworICAgIEhhc2hNYXA8aW50NjRf
dCwgVGlsZWRJbWFnZT46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMu
ZmluZChpbWFnZUlEKTsKKyAgICBpZiAoaXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFRpbGVkSW1hZ2U6Oml0ZXJhdG9yIGVuZFRp
bGVJdGVyYXRvciA9IGl0LT5zZWNvbmQuZW5kKCk7CisgICAgZm9yIChUaWxlZEltYWdlOjppdGVy
YXRvciB0aWxlSXQgPSBpdC0+c2Vjb25kLmJlZ2luKCk7IHRpbGVJdCAhPSBlbmRUaWxlSXRlcmF0
b3I7ICsrdGlsZUl0KSB7CisgICAgICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0KEZsb2F0UG9pbnQo
dGlsZUl0LT5maXJzdCksIEZsb2F0U2l6ZSh0aWxlSXQtPnNlY29uZC0+c2l6ZSgpKSk7CisgICAg
ICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0KHNvdXJjZVJlY3QueCgpICogaG9yaXpvbnRhbEZhY3Rv
ciArIGNvbnRlbnRzUmVjdC54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZVJlY3QueSgpICogdmVydGljYWxGYWN0b3IgKyBjb250ZW50c1JlY3QueSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRoKCkgKiBob3Jpem9udGFsRmFjdG9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCgpICogdmVy
dGljYWxGYWN0b3IpOworICAgICAgICBpbnQgbmV3VGlsZUlEID0gbm9kZS0+Y3JlYXRlQ29udGVu
dHNUaWxlKDEuMCk7CisgICAgICAgIG5vZGUtPnNldFRpbGVCYWNrQnVmZmVyVGV4dHVyZUZvckRp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKG5ld1RpbGVJRCwgSW50UmVjdChzb3VyY2VSZWN0KSwgdGFy
Z2V0UmVjdCwgdGlsZUl0LT5zZWNvbmQuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBtX3Jvb3RMYXllci0+c3lu
Y0NvbXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQ
cm94eTo6ZW5zdXJlUm9vdExheWVyKCkKK3sKKyAgICBpZiAobV9yb290TGF5ZXIpCisgICAgICAg
IHJldHVybjsKKyAgICBtX3Jvb3RMYXllciA9IGNyZWF0ZUxheWVyKEludmFsaWRXZWJMYXllcklE
KTsKKyAgICBtX3Jvb3RMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgbV9yb290
TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAwKSk7CisKKyAgICAvLyBUaGUgcm9vdCBsYXllciBz
aG91bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0Lgor
ICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOworICAgIG1fdGV4
dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7CisgICAgdG9UZXh0dXJlTWFw
cGVyTm9kZShtX3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFw
cGVyLmdldCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNSZW1vdGVDb250
ZW50KCkKK3sKKyAgICAvLyBXZSBlbnF1ZXVlIG1lc3NhZ2VzIGFuZCBleGVjdXRlIHRoZW0gZHVy
aW5nIHBhaW50LCBhcyB0aGV5IHJlcXVpcmUgYW4gYWN0aXZlIEdMIGNvbnRleHQuCisgICAgZW5z
dXJlUm9vdExheWVyKCk7CisKKyAgICB3aGlsZSAoT3duUHRyPExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyPiBuZXh0TWVzc2FnZSA9IG1fbWVzc2FnZXNUb1JlbmRlcmVyLnRyeUdldE1lc3NhZ2Uo
KSkgeworICAgICAgICBzd2l0Y2ggKG5leHRNZXNzYWdlLT50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6U2V0Um9vdExheWVyOiB7CisgICAgICAgICAg
ICBjb25zdCBTZXRSb290TGF5ZXJNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PFNldFJv
b3RMYXllck1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAg
IHNldFJvb3RMYXllcklEKGRhdGEubGF5ZXJJRCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkRlbGV0ZUxh
eWVyOiB7CisgICAgICAgICAgICBjb25zdCBEZWxldGVMYXllck1lc3NhZ2VEYXRhJiBkYXRhID0g
c3RhdGljX2Nhc3Q8RGVsZXRlTGF5ZXJNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRh
KCk7CisgICAgICAgICAgICBkZWxldGVMYXllcihkYXRhLmxheWVySUQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRl
cmVyOjpTeW5jTGF5ZXJQYXJhbWV0ZXJzOiB7CisgICAgICAgICAgICBjb25zdCBTeW5jTGF5ZXJQ
YXJhbWV0ZXJzTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxTeW5jTGF5ZXJQYXJhbWV0
ZXJzTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAgICAgc3lu
Y0xheWVyUGFyYW1ldGVycyhkYXRhLmxheWVySW5mbyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkNyZWF0
ZVRpbGU6IHsKKyAgICAgICAgICAgIGNvbnN0IENyZWF0ZVRpbGVNZXNzYWdlRGF0YSYgZGF0YSA9
IHN0YXRpY19jYXN0PENyZWF0ZVRpbGVNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRh
KCk7CisgICAgICAgICAgICBjcmVhdGVUaWxlKGRhdGEubGF5ZXJJRCwgZGF0YS5yZW1vdGVUaWxl
SUQsIGRhdGEuc2NhbGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpSZW1vdmVUaWxlOiB7CisgICAgICAg
ICAgICBjb25zdCBSZW1vdmVUaWxlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxSZW1v
dmVUaWxlTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAgICAg
cmVtb3ZlVGlsZShkYXRhLmxheWVySUQsIGRhdGEucmVtb3RlVGlsZUlEKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5k
ZXJlcjo6VXBkYXRlVGlsZTogeworICAgICAgICAgICAgY29uc3QgVXBkYXRlVGlsZU1lc3NhZ2VE
YXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8VXBkYXRlVGlsZU1lc3NhZ2UqPihuZXh0TWVzc2FnZS5n
ZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIHVwZGF0ZVRpbGUoZGF0YS5sYXllcklELCBkYXRh
LnJlbW90ZVRpbGVJRCwgZGF0YS5zb3VyY2VSZWN0LCBkYXRhLnRhcmdldFJlY3QsIGRhdGEuaW1h
Z2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIExheWVy
VHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpDcmVhdGVJbWFnZTogeworICAgICAgICAgICAgY29uc3Qg
Q3JlYXRlSW1hZ2VNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PENyZWF0ZUltYWdlTWVz
c2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAgICAgY3JlYXRlSW1h
Z2UoZGF0YS5pbWFnZUlELCBkYXRhLmltYWdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6RGVzdHJveUlt
YWdlOiB7CisgICAgICAgICAgICBjb25zdCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhJiBkYXRhID0g
c3RhdGljX2Nhc3Q8Q3JlYXRlSW1hZ2VNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRh
KCk7CisgICAgICAgICAgICBkZXN0cm95SW1hZ2UoZGF0YS5pbWFnZUlEKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5k
ZXJlcjo6Rmx1c2hMYXllckNoYW5nZXM6CisgICAgICAgICAgICBmbHVzaExheWVyQ2hhbmdlcygp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5OjpwdXNoVXBkYXRlVG9RdWV1ZShQYXNzT3duUHRyPExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyPiBtZXNzYWdlKQoreworICAgIG1fbWVzc2FnZXNUb1JlbmRlcmVyLmFwcGVu
ZChtZXNzYWdlKTsKKyAgICB1cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25z
dCBXZWJLaXQ6OlVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgQ3JlYXRlVGlsZU1lc3Nh
Z2VEYXRhIGRhdGE7CisgICAgZGF0YS5sYXllcklEID0gbGF5ZXJJRDsKKyAgICBkYXRhLnJlbW90
ZVRpbGVJRCA9IHRpbGVJRDsKKyAgICBkYXRhLnNjYWxlID0gdXBkYXRlSW5mby51cGRhdGVTY2Fs
ZUZhY3RvcjsKKyAgICBwdXNoVXBkYXRlVG9RdWV1ZShDcmVhdGVUaWxlTWVzc2FnZTo6Y3JlYXRl
KGRhdGEpKTsKKyAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJ
bmZvKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihp
bnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvKQoreworICAgIFVwZGF0ZVRpbGVNZXNzYWdlRGF0YSBkYXRhOworICAgIGRhdGEubGF5ZXJJ
RCA9IGxheWVySUQ7CisgICAgZGF0YS5yZW1vdGVUaWxlSUQgPSB0aWxlSUQ7CisgICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUodXBkYXRl
SW5mby5iaXRtYXBIYW5kbGUpOworICAgIGRhdGEuaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZVFJbWFn
ZSgpLmNvcHkoKTsKKyAgICBkYXRhLnNvdXJjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50Ojp6ZXJv
KCksIHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5zaXplKCkpOworICAgIGRhdGEudGFyZ2V0
UmVjdCA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kczsKKyAgICBwdXNoVXBkYXRlVG9RdWV1
ZShVcGRhdGVUaWxlTWVzc2FnZTo6Y3JlYXRlKGRhdGEpKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sK
KyAgICBSZW1vdmVUaWxlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySUQgPSBsYXll
cklEOworICAgIGRhdGEucmVtb3RlVGlsZUlEID0gdGlsZUlEOworICAgIHB1c2hVcGRhdGVUb1F1
ZXVlKFJlbW92ZVRpbGVNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOworfQorCisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQgaWQpCit7Cisg
ICAgRGVsZXRlTGF5ZXJNZXNzYWdlRGF0YSBkYXRhOworICAgIGRhdGEubGF5ZXJJRCA9IGlkOwor
ICAgIHB1c2hVcGRhdGVUb1F1ZXVlKERlbGV0ZUxheWVyTWVzc2FnZTo6Y3JlYXRlKGRhdGEpKTsK
K30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdl
YkxheWVySUQgaWQpCit7CisgICAgU2V0Um9vdExheWVyTWVzc2FnZURhdGEgZGF0YTsKKyAgICBk
YXRhLmxheWVySUQgPSBpZDsKKyAgICBwdXNoVXBkYXRlVG9RdWV1ZShTZXRSb290TGF5ZXJNZXNz
YWdlOjpjcmVhdGUoZGF0YSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY0Nv
bXBvc2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8mIGluZm8pCit7CisgICAgU3lu
Y0xheWVyUGFyYW1ldGVyc01lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0YS5sYXllckluZm8gPSBp
bmZvOworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlOjpj
cmVhdGUoZGF0YSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJh
bWUoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworICAgIHB1c2hVcGRhdGVUb1F1ZXVlKEZsdXNoTGF5
ZXJDaGFuZ2VzTWVzc2FnZTo6Y3JlYXRlKCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIGNvbnN0IFdlYktp
dDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBDcmVhdGVJbWFnZU1l
c3NhZ2VEYXRhIGRhdGE7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hh
cmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBkYXRhLmltYWdlSUQgPSBrZXk7Cisg
ICAgZGF0YS5pbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCkuY29weSgpOworICAgIHB1c2hV
cGRhdGVUb1F1ZXVlKENyZWF0ZUltYWdlTWVzc2FnZTo6Y3JlYXRlKGRhdGEpKTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2
NF90IGtleSkKK3sKKyAgICBEZXN0cm95SW1hZ2VNZXNzYWdlRGF0YSBkYXRhOworICAgIGRhdGEu
aW1hZ2VJRCA9IGtleTsKKyAgICBwdXNoVXBkYXRlVG9RdWV1ZShEZXN0cm95SW1hZ2VNZXNzYWdl
OjpjcmVhdGUoZGF0YSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJs
ZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5
VmVjdG9yKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IodHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5w
YWdlSUQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVu
dHNSZWN0QW5kU2NhbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUpCit7CisgICAg
bV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKKyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2Fs
ZTsKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShyZWN0LCBz
Y2FsZSksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Cit9CisKK30KKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8gYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnBybwppbmRleCAyNzc1ZThhLi4zNmE4NTA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwpA
QCAtMjksNiArMjksOCBAQCBXRUJLSVQxX1NPVVJDRVNfU0hBUkVEX1dJVEhfV0VCS0lUMiA9IFwK
IFdFQktJVDJfR0VORVJBVEVEX0hFQURFUlMgPSBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9T
T1VSQ0VTX0RJUi9BdXRoZW50aWNhdGlvbk1hbmFnZXJNZXNzYWdlcy5oIFwKICAgICAkJFdFQktJ
VDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0Rvd25sb2FkUHJveHlNZXNzYWdlcy5oIFwKKyAgICAk
JFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJlZUhvc3RNZXNzYWdlcy5oIFwK
KyAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJlZUhvc3RQcm94eU1l
c3NhZ2VzLmggXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTlBPYmplY3RN
ZXNzYWdlUmVjZWl2ZXJNZXNzYWdlcy5oIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJD
RVNfRElSL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggXAogICAgICQkV0VCS0lUMl9H
RU5FUkFURURfU09VUkNFU19ESVIvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIFwK
QEAgLTY3LDYgKzY5LDggQEAgV0VCS0lUMl9HRU5FUkFURURfU09VUkNFUyA9IFwKICAgICAkJFdF
QktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0Rvd25sb2FkUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0RyYXdpbmdBcmVhTWVz
c2FnZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9E
cmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCisgICAgJCRXRUJLSVQyX0dFTkVS
QVRFRF9TT1VSQ0VTX0RJUi9MYXllclRyZWVIb3N0TWVzc2FnZVJlY2VpdmVyLmNwcCBcCisgICAg
JCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9MYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL05QT2Jq
ZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRXRUJLSVQyX0dF
TkVSQVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL1BsdWdpblByb2Nlc3NN
ZXNzYWdlUmVjZWl2ZXIuY3BwIFwKQEAgLTE2Miw2ICsxNjYsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBTaGFyZWQvV2ViR3JhcGhpY3NDb250ZXh0LmggXAogICAgIFNoYXJlZC9XZWJIaXRUZXN0UmVz
dWx0LmggXAogICAgIFNoYXJlZC9XZWJJbWFnZS5oIFwKKyAgICBTaGFyZWQvV2ViTGF5ZXJUcmVl
SW5mby5oIFwKICAgICBTaGFyZWQvV2ViTmF2aWdhdGlvbkRhdGFTdG9yZS5oIFwKICAgICBTaGFy
ZWQvV2ViTnVtYmVyLmggXAogICAgIFNoYXJlZC9XZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmggXApA
QCAtMzE2LDYgKzMyMSw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRXJyb3JzLmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9s
b2NhdGlvbkNsaWVudC5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBo
aWNzTGF5ZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5oIFwKQEAgLTM5OSw2ICs0MDUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBTaGFy
ZWQvV2ViSGl0VGVzdFJlc3VsdC5jcHAgXAogICAgIFNoYXJlZC9XZWJLZXlib2FyZEV2ZW50LmNw
cCBcCiAgICAgU2hhcmVkL1dlYkltYWdlLmNwcCBcCisgICAgU2hhcmVkL1dlYkxheWVyVHJlZUlu
Zm8uY3BwIFwKICAgICBTaGFyZWQvV2ViTW91c2VFdmVudC5jcHAgXAogICAgIFNoYXJlZC9XZWJP
cGVuUGFuZWxQYXJhbWV0ZXJzLmNwcCBcCiAgICAgU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwIFwKQEAgLTQ4Niw2ICs0OTMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYlVJQ2xpZW50
LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuY3BwIFwKKyAgICBVSVByb2Nlc3Mv
cXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvVG91Y2hWaWV3
SW50ZXJmYWNlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3Bw
IFwKICAgICBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAgXApAQCAtNTY1
LDYgKzU3Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
R2VvbG9jYXRpb25DbGllbnQuY3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkdyYXBoaWNzTGF5ZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKaW5k
ZXggMjE4ZjJmZi4uNDM2N2ZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0yNSwx
MyArMjUsMTMgQEAKIAogI2luY2x1ZGUgIkFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkJhY2tpbmdT
dG9yZS5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJEcmF3
aW5nQXJlYVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCIK
ICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAidGV4dC9DU3RyaW5nLmgiCiAjaW5jbHVk
ZSA8SGFzaE1hcC5oPgpAQCAtNTgsMTIgKzU4LDYgQEAgV2ViR3JhcGhpY3NMYXllciogV2ViR3Jh
cGhpY3NMYXllcjo6bGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5ZXJJRCBpZCkKICAgICByZXR1cm4g
aXQtPnNlY29uZDsKIH0KIAotc3RhdGljIFZlY3RvcjxXZWJMYXllcklEPiYgZGVsZXRlZExheWVy
SURzKCkKLXsKLSAgICBzdGF0aWMgVmVjdG9yPFdlYkxheWVySUQ+IGxheWVyczsKLSAgICByZXR1
cm4gbGF5ZXJzOwotfQotCiBzdGF0aWMgV2ViTGF5ZXJJRCB0b1dlYkxheWVySUQoR3JhcGhpY3NM
YXllciogbGF5ZXIpCiB7CiAgICAgcmV0dXJuIGxheWVyID8gdG9XZWJHcmFwaGljc0xheWVyKGxh
eWVyKS0+aWQoKSA6IDA7CkBAIC03OSw2NyArNzMsOTEgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVy
Ojpub3RpZnlDaGFuZ2UoKQogV2ViR3JhcGhpY3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcihHcmFw
aGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKICAg
ICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQotICAgICwgbV9tb2RpZmllZChmYWxzZSkKKyAgICAs
IG1fbW9kaWZpZWQodHJ1ZSkKICAgICAsIG1fY29udGVudE5lZWRzRGlzcGxheShmYWxzZSkKICAg
ICAsIG1faGFzUGVuZGluZ0FuaW1hdGlvbnMoZmFsc2UpCi0gICAgLCBtX2NvbnRlbnRTY2FsZSgx
LmYpCisgICAgLCBtX2luVXBkYXRlTW9kZShmYWxzZSkKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lO
R19TVE9SRSkKKyAgICAsIG1fbGF5ZXJUcmVlVGlsZUNsaWVudCgwKQorICAgICwgbV9tYWluQmFj
a2luZ1N0b3JlKGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBUaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKSkKKyNlbmRpZgogewotICAg
IC8vIFN0YXJ0aW5nIGxheWVyIElEcyBmcm9tIDEwMDAsIHRvIGhlbHAgZGV0ZWN0IGZhdWx0eSBJ
RHMgZWFzaWx5LgotICAgIHN0YXRpYyBXZWJMYXllcklEIHNJRCA9IDEwMDA7Ci0gICAgbV9sYXll
ckluZm8uaWQgPSArK3NJRDsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2Nh
bGUoMS4wKTsKKyAgICBzdGF0aWMgV2ViTGF5ZXJJRCBuZXh0TGF5ZXJJRCA9IDE7CisgICAgbV9s
YXllckluZm8uaWQgPSBuZXh0TGF5ZXJJRCsrOwogICAgIGxheWVyQnlJRE1hcCgpLmFkZChpZCgp
LCB0aGlzKTsKIH0KIAogV2ViR3JhcGhpY3NMYXllcjo6fldlYkdyYXBoaWNzTGF5ZXIoKQogewog
ICAgIGxheWVyQnlJRE1hcCgpLnJlbW92ZShpZCgpKTsKLSAgICBkZWxldGVkTGF5ZXJJRHMoKS5h
cHBlbmQoaWQoKSk7CisKKyAgICAvLyBUaGlzIHdvdWxkIHRlbGwgdGhlIFVJIHByb2Nlc3MgdG8g
cmVsZWFzZSB0aGUgYmFja2luZyBzdG9yZS4KKyAgICBzZXRDb250ZW50c1RvSW1hZ2UoMCk7CisK
KyAgICBpZiAobV9sYXllclRyZWVUaWxlQ2xpZW50KQorICAgICAgICBtX2xheWVyVHJlZVRpbGVD
bGllbnQtPmRpZERlbGV0ZUxheWVyKGlkKCkpOwogfQogCiBib29sIFdlYkdyYXBoaWNzTGF5ZXI6
OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQogewog
ICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjaGlsZHJlbik7Ci0gICAg
aWYgKG9rKQotICAgICAgICBub3RpZnlDaGFuZ2UoKTsKLSAgICByZXR1cm4gb2s7CisgICAgaWYg
KCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hp
bGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViR3JhcGhpY3NMYXllciogY2hpbGQgPSB0
b1dlYkdyYXBoaWNzTGF5ZXIoY2hpbGRyZW5baV0pOworICAgICAgICBjaGlsZC0+c2V0Q29udGVu
dHNTY2FsZShtX2NvbnRlbnRzU2NhbGUpOworICAgICAgICBjaGlsZC0+bm90aWZ5Q2hhbmdlKCk7
CisgICAgfQorICAgIG5vdGlmeUNoYW5nZSgpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAg
IEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGxheWVyKTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIo
bGF5ZXIpLT5ub3RpZnlDaGFuZ2UoKTsKICAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAogdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogbGF5ZXIsIGlu
dCBpbmRleCkKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgobGF5ZXIsIGlu
ZGV4KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5ub3RpZnlDaGFuZ2UoKTsKICAg
ICBub3RpZnlDaGFuZ2UoKTsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEFi
b3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQogewogICAg
IEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUobGF5ZXIsIHNpYmxpbmcpOworICAgIHRvV2Vi
R3JhcGhpY3NMYXllcihsYXllciktPm5vdGlmeUNoYW5nZSgpOwogICAgIG5vdGlmeUNoYW5nZSgp
OwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXll
ciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6
YWRkQ2hpbGRCZWxvdyhsYXllciwgc2libGluZyk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxh
eWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKIGJvb2wgV2Vi
R3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFw
aGljc0xheWVyKiBuZXdDaGlsZCkKIHsKICAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6cmVw
bGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7Ci0KLSAgICBpZiAob2spCi0gICAgICAgIG5v
dGlmeUNoYW5nZSgpOwotICAgIHJldHVybiBvazsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgbm90aWZ5Q2hhbmdlKCk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKG9s
ZENoaWxkKS0+bm90aWZ5Q2hhbmdlKCk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKG5ld0NoaWxk
KS0+bm90aWZ5Q2hhbmdlKCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCiB7CisgICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIq
IHBhcmVudExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHBhcmVudCgpKSkKKyAgICAgICAgcGFy
ZW50TGF5ZXItPm5vdGlmeUNoYW5nZSgpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21Q
YXJlbnQoKTsKKwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCkBAIC0yNDcsOCArMjY1LDYgQEAg
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcikK
IHsKICAgICBpZiAoY29udGVudHNSZWN0KCkgPT0gcikKICAgICAgICAgcmV0dXJuOwotICAgIGlm
IChtX2ltYWdlKQotICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAgIEdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzUmVjdChyKTsKICAgICBub3RpZnlDaGFuZ2UoKTsKQEAgLTI3NCwxNSAr
MjkwLDMwIEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0
cmluZyYgYW5pbWF0aW9uTmFtZSkKIHsKIH0KIAordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRD
b250ZW50c05lZWRzRGlzcGxheSgpCit7CisgICAgc2V0Q29udGVudHNUb0ltYWdlKDApOworICAg
IHNldENvbnRlbnRzVG9JbWFnZShtX2ltYWdlLmdldCgpKTsKK30KKwogdm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogewotICAgIGlmIChpbWFn
ZSA9PSBtX2ltYWdlLmdldCgpKQorICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0gbGF5ZXJUcmVlVGls
ZUNsaWVudCgpOworICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBX
ZSBhZG9wdCBmaXJzdCwgaW4gY2FzZSB0aGlzIGlzIHRoZSBzYW1lIGZyYW1lIC0gdGhhdCB3YXkg
d2UgYXZvaWQgZGVzdHJveWluZyBhbmQgcmVjcmVhdGluZyB0aGUgaW1hZ2UuCisgICAgaW50NjRf
dCBuZXdJRCA9IGNsaWVudC0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShpbWFnZSk7CisgICAgY2xp
ZW50LT5yZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3Rv
cmVJRCk7CisgICAgbm90aWZ5Q2hhbmdlKCk7CisgICAgaWYgKG5ld0lEID09IG1fbGF5ZXJJbmZv
LmltYWdlQmFja2luZ1N0b3JlSUQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2xheWVySW5mby5p
bWFnZUJhY2tpbmdTdG9yZUlEID0gbmV3SUQ7CiAgICAgbV9pbWFnZSA9IGltYWdlOwotICAgIHNl
dE5lZWRzRGlzcGxheSgpOworICAgIG1fbGF5ZXJJbmZvLmltYWdlSXNVcGRhdGVkID0gdHJ1ZTsK
ICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOwotICAgIG5vdGlm
eUNoYW5nZSgpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFw
aGljc0xheWVyKiBsYXllcikKQEAgLTMwMSw1MCArMzMyLDI5IEBAIHZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAKIHZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBtX25lZWRzRGlzcGxh
eSA9IHRydWU7Ci0gICAgbm90aWZ5Q2hhbmdlKCk7CisgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0
KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgp
LmhlaWdodCgpKSkpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9uZWVkc0Rpc3BsYXlSZWN0
LnVuaXRlKHJlY3QpOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+aW52YWxpZGF0ZShJbnRSZWN0
KHJlY3QpKTsKICAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAotdm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCi17Ci0gICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci19
Ci0KIFdlYkxheWVySUQgV2ViR3JhcGhpY3NMYXllcjo6aWQoKSBjb25zdAogewogICAgIHJldHVy
biBtX2xheWVySW5mby5pZDsKIH0KIAotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpkaWRTeW5jaHJv
bml6ZSgpCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwotICAgIG1f
bW9kaWZpZWQgPSBmYWxzZTsKLSAgICBtX25lZWRzRGlzcGxheVJlY3QgPSBGbG9hdFJlY3QoKTsK
LSAgICBpZiAobV9oYXNQZW5kaW5nQW5pbWF0aW9ucykKLSAgICAgICAgbm90aWZ5QW5pbWF0aW9u
U3RhcnRlZChXVEY6OmN1cnJlbnRUaW1lKCkpOwotICAgIG1faGFzUGVuZGluZ0FuaW1hdGlvbnMg
PSBmYWxzZTsKLX0KLQotY29uc3QgV2ViTGF5ZXJJbmZvJiBXZWJHcmFwaGljc0xheWVyOjpsYXll
ckluZm8oKSBjb25zdAotewotICAgIHJldHVybiBtX2xheWVySW5mbzsKLX0KLQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpCi17Ci0gICAgc3luY0NvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
aGlsZHJlbigpLnNpemUoKTsgKytpKQotICAgICAgICBjaGlsZHJlbigpW2ldLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZSgpOworICAgICAgICBjaGlsZHJlbigpW2ldLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZShyZWN0KTsKICAgICBpZiAocmVwbGljYUxheWVyKCkpCi0gICAgICAgIHJlcGxpY2FMYXllcigp
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgICAgICByZXBsaWNhTGF5ZXIoKS0+c3luY0Nv
bXBvc2l0aW5nU3RhdGUocmVjdCk7CiAgICAgaWYgKG1hc2tMYXllcigpKQotICAgICAgICBtYXNr
TGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICAgICAgbWFza0xheWVyKCktPnN5
bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOworICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOwogfQogCiBXZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIo
R3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC0zNTIsMzAgKzM2MiwyNSBAQCBXZWJHcmFwaGljc0xh
eWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdlYkdyYXBoaWNzTGF5ZXIqPihsYXllcik7CiB9CiAKLUZsb2F0UmVjdCBX
ZWJHcmFwaGljc0xheWVyOjpuZWVkc0Rpc3BsYXlSZWN0KCkgY29uc3QKK3ZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKIHsKLSAgICBG
bG9hdFJlY3QgcmVjdCA9IEZsb2F0UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhl
aWdodCgpKTsKLSAgICBpZiAoIW1fbmVlZHNEaXNwbGF5KQotICAgICAgICByZWN0LmludGVyc2Vj
dChtX25lZWRzRGlzcGxheVJlY3QpOwotICAgIHJldHVybiByZWN0OwotfQorICAgIGlmICghbV9s
YXllclRyZWVUaWxlQ2xpZW50KQorICAgICAgICBtX2xheWVyVHJlZVRpbGVDbGllbnQgPSBsYXll
clRyZWVUaWxlQ2xpZW50KCk7CisgICAgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKIAotVmVjdG9y
PFdlYktpdDo6V2ViTGF5ZXJJRD4gV2ViR3JhcGhpY3NMYXllcjo6dGFrZUxheWVyc1RvRGVsZXRl
KCkKLXsKLSAgICBWZWN0b3I8V2ViS2l0OjpXZWJMYXllcklEPiBsYXllcnMgPSBkZWxldGVkTGF5
ZXJJRHMoKTsKLSAgICBkZWxldGVkTGF5ZXJJRHMoKS5jbGVhcigpOwotICAgIHJldHVybiBsYXll
cnM7Ci19CisgICAgaWYgKCFtX21vZGlmaWVkKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKLXsK
ICAgICBtX2xheWVySW5mby5uYW1lID0gbmFtZSgpOwogICAgIG1fbGF5ZXJJbmZvLmFuY2hvclBv
aW50ID0gYW5jaG9yUG9pbnQoKTsKICAgICBtX2xheWVySW5mby5iYWNrZmFjZVZpc2libGUgPSBi
YWNrZmFjZVZpc2liaWxpdHkoKTsKICAgICBtX2xheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSA9
IGNoaWxkcmVuVHJhbnNmb3JtKCk7CiAgICAgbV9sYXllckluZm8uY29udGVudHNPcGFxdWUgPSBj
b250ZW50c09wYXF1ZSgpOwogICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRz
UmVjdCgpOwotICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgpOwor
CisgICAgLy8gSW4gdGhlIHNoYWRvdyBsYXllciB0cmVlIHdlIGNyZWF0ZSBpbiB0aGUgVUkgcHJv
Y2VzcywgbGF5ZXJzIHdpdGggZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMgYXJlIGFsd2F5cyBj
b25zaWRlcmVkIHRvIGRyYXcgY29udGVudC4KKyAgICAvLyBPdGhlcndpc2UsIHdlJ2QgaGF2ZSB0
byBjaGVjayB3aGV0aGVyIGFuIGxheWVyIHdpdGggZHJhd3NDb250ZW50PT1mYWxzZSBoYXMgYSBk
aXJlY3RseSBjb21wb3NpdGVkIGltYWdlIG11bHRpcGxlIHRpbWVzLgorICAgIG1fbGF5ZXJJbmZv
LmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgpIHx8IG1faW1hZ2U7CiAgICAgbV9sYXllcklu
Zm8ubWFzayA9IHRvV2ViTGF5ZXJJRChtYXNrTGF5ZXIoKSk7CiAgICAgbV9sYXllckluZm8ubWFz
a3NUb0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsKICAgICBtX2xheWVySW5mby5vcGFjaXR5ID0g
b3BhY2l0eSgpOwpAQCAtMzgzLDEyMiArMzg4LDE1OSBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiAgICAgbV9sYXllckluZm8u
cG9zID0gcG9zaXRpb24oKTsKICAgICBtX2xheWVySW5mby5wcmVzZXJ2ZXMzRCA9IHByZXNlcnZl
czNEKCk7CiAgICAgbV9sYXllckluZm8ucmVwbGljYSA9IHRvV2ViTGF5ZXJJRChyZXBsaWNhTGF5
ZXIoKSk7Ci0gICAgbV9sYXllckluZm8uc2l6ZSA9IEZsb2F0U2l6ZShzaXplKCkud2lkdGgoKSAq
IG1fY29udGVudFNjYWxlLCBzaXplKCkuaGVpZ2h0KCkgKiBtX2NvbnRlbnRTY2FsZSk7CisgICAg
bV9sYXllckluZm8uc2l6ZSA9IHNpemUoKTsKICAgICBtX2xheWVySW5mby50cmFuc2Zvcm0gPSB0
cmFuc2Zvcm0oKTsKICAgICBtX2NvbnRlbnROZWVkc0Rpc3BsYXkgPSBmYWxzZTsKICAgICBtX2xh
eWVySW5mby5jaGlsZHJlbi5jbGVhcigpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
aGlsZHJlbigpLnNpemUoKTsgKytpKQogICAgICAgICBtX2xheWVySW5mby5jaGlsZHJlbi5hcHBl
bmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKKworICAgIG1fbGF5ZXJUcmVlVGlsZUNs
aWVudC0+ZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihtX2xheWVySW5mbyk7CisgICAg
bV9tb2RpZmllZCA9IGZhbHNlOworICAgIG1fbGF5ZXJJbmZvLmltYWdlSXNVcGRhdGVkID0gZmFs
c2U7CisgICAgaWYgKG1faGFzUGVuZGluZ0FuaW1hdGlvbnMpCisgICAgICAgIG5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQoV1RGOjpjdXJyZW50VGltZSgpKTsKKyAgICBtX2hhc1BlbmRpbmdBbmltYXRp
b25zID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBWZWN0b3I8RmxvYXRSZWN0PiBkaXZpZGVJbnRvVGls
ZXMoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JF
KQordm9pZCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQog
ewotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRpbGVzOwotICAgIGZvciAoZmxvYXQgeSA9IHJlY3Qu
eSgpOyB5IDwgcmVjdC5tYXhZKCk7IHkgKz0gZ1RpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgZm9y
IChmbG9hdCB4ID0gcmVjdC54KCk7IHggPCByZWN0Lm1heFgoKTsgeCArPSBnVGlsZURpbWVuc2lv
bikgewotICAgICAgICAgICAgRmxvYXRSZWN0IHRpbGUoeCwgeSwgZ1RpbGVEaW1lbnNpb24sIGdU
aWxlRGltZW5zaW9uKTsKLSAgICAgICAgICAgIHRpbGUuaW50ZXJzZWN0KHJlY3QpOwotICAgICAg
ICAgICAgdGlsZXMuYXBwZW5kKHRpbGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0
aWxlczsKIH0KIAotc3RhdGljIHZvaWQgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXll
cihHcmFwaGljc0xheWVyKiBsYXllciwgV2ViTGF5ZXJUcmVlSW5mbyYgb3V0SW5mbywgVmVjdG9y
PFdlYkdyYXBoaWNzTGF5ZXIqPiYgb3V0TGF5ZXJzKQordm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQogewotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKTsKLSAgICBpZiAoIWxheWVyKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFsYXllci0+aXNNb2RpZmllZCgpKQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJHcmFwaGlj
c0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcih0aGlzLT5jaGlsZHJlbigpW2ldKTsK
KyAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOworICAgIH0KKworICAgIG1f
Y29udGVudHNTY2FsZSA9IHNjYWxlOworICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUgJiYgbV9t
YWluQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCkgPT0gc2NhbGUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG91dExheWVycy5hcHBlbmQobGF5ZXIpOwotICAgIG91dEluZm8ubGF5ZXJzLmFw
cGVuZChsYXllci0+bGF5ZXJJbmZvKCkpOworICAgIG5vdGlmeUNoYW5nZSgpOworCisgICAgbV9w
cmV2aW91c0JhY2tpbmdTdG9yZSA9IG1fbWFpbkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CisgICAg
bV9tYWluQmFja2luZ1N0b3JlID0gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMs
IFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpOworICAg
IG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7Cit9CisKK3ZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6c2V0Um9vdExheWVyKGJvb2wgaXNSb290KQoreworICAgIG1fbGF5
ZXJJbmZvLmlzUm9vdExheWVyID0gaXNSb290OworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0
b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICBtX21haW5CYWNr
aW5nU3RvcmUtPnNldFZpc2libGVSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9y
KTsKK30KIAotICAgIFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvID0gb3V0SW5mby5sYXllcnNbb3V0
SW5mby5sYXllcnMuc2l6ZSgpIC0gMV07Ci0gICAgaWYgKGxheWVyLT5pbWFnZSgpKQotICAgICAg
ICBsYXllckluZm8uZHJhd3NDb250ZW50ID0gdHJ1ZTsKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
c2V0VmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbV92aXNp
YmxlQ29udGVudFJlY3QgPSByZWN0OworICAgIG5vdGlmeUNoYW5nZSgpOworICAgIG1fbWFpbkJh
Y2tpbmdTdG9yZS0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKIH0KIAotc3RhdGljIHZvaWQgY29sbGVj
dENvbXBvc2l0aW5nSW5mb1JlY3Vyc2l2ZWx5KEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciwgV2Vi
TGF5ZXJUcmVlSW5mbyYgb3V0SW5mbywgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiYgb3V0TGF5
ZXJzKQordm9pZCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIXJv
b3RMYXllcikKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKKyAgICBt
X21vZGlmaWVkID0gdHJ1ZTsKKyAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4
dCwgcmVjdCk7Cit9CiAKLSAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvRm9yVGhpc0xheWVyKHJv
b3RMYXllciwgb3V0SW5mbywgb3V0TGF5ZXJzKTsKLSAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZv
Rm9yVGhpc0xheWVyKHJvb3RMYXllci0+bWFza0xheWVyKCksIG91dEluZm8sIG91dExheWVycyk7
Ci0gICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb1JlY3Vyc2l2ZWx5KHJvb3RMYXllci0+cmVwbGlj
YUxheWVyKCksIG91dEluZm8sIG91dExheWVycyk7Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnRp
bGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB1cGRhdGVkUmVj
dHMpCit7Cit9CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3RMYXllci0+Y2hpbGRy
ZW4oKS5zaXplKCk7ICsraSkKLSAgICAgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb1JlY3Vyc2l2
ZWx5KHJvb3RMYXllci0+Y2hpbGRyZW4oKVtpXSwgb3V0SW5mbywgb3V0TGF5ZXJzKTsKK2Jvb2wg
V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2luVXBkYXRlTW9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50
KCkpCisgICAgICAgIHJldHVybiBjbGllbnQtPmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgp
OworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZW5kTGF5
ZXJzVG9VSVByb2Nlc3MoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogcm9vdExheWVyLCBXZWJQYWdl
KiB3ZWJQYWdlKQorSW50UmVjdCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUNv
bnRlbnRzUmVjdCgpCiB7Ci0gICAgd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKLSAgICB3ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwotICAgIFdlYkxheWVyVHJlZUluZm8gY29tcG9zaXRpbmdJ
bmZvOwotICAgIGNvbXBvc2l0aW5nSW5mby5yb290TGF5ZXJJRCA9IHJvb3RMYXllciA/IHRvV2Vi
R3JhcGhpY3NMYXllcihyb290TGF5ZXIpLT5pZCgpIDogMDsKLSAgICBjb21wb3NpdGluZ0luZm8u
Y29udGVudFNjYWxlID0gMS4wOwotICAgIGNvbXBvc2l0aW5nSW5mby5kZWxldGVkTGF5ZXJJRHMg
PSBXZWJHcmFwaGljc0xheWVyOjp0YWtlTGF5ZXJzVG9EZWxldGUoKTsKLSAgICBWZWN0b3I8V2Vi
R3JhcGhpY3NMYXllcio+IGxheWVyczsKLSAgICBpZiAocm9vdExheWVyKQotICAgICAgICBjb2xs
ZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkocm9vdExheWVyLCBjb21wb3NpdGluZ0luZm8s
IGxheWVycyk7CisgICAgaWYgKG1faW1hZ2UpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Cisg
ICAgcmV0dXJuIEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7
Cit9CiAKLSAgICBpZiAoY29tcG9zaXRpbmdJbmZvLmRlbGV0ZWRMYXllcklEcy5pc0VtcHR5KCkg
JiYgY29tcG9zaXRpbmdJbmZvLmxheWVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKK0lu
dFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpCit7
CisgICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRSZWN0OworfQogCi0gICAgd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6U3luY0NvbXBvc2l0aW5nTGF5ZXJzKGNvbXBv
c2l0aW5nSW5mbykpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllcnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllcnNbaV07Ci0g
ICAgICAgIEZsb2F0UmVjdCB1cGRhdGVSZWN0ID0gbGF5ZXItPm5lZWRzRGlzcGxheVJlY3QoKTsK
LQotICAgICAgICBsYXllci0+ZGlkU3luY2hyb25pemUoKTsKLQotICAgICAgICBpZiAodXBkYXRl
UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBSZWZQdHI8
SW1hZ2U+IGRpcmVjdEltYWdlID0gbGF5ZXItPmltYWdlKCk7Ci0gICAgICAgIGlmIChkaXJlY3RJ
bWFnZSkKLSAgICAgICAgICAgIHVwZGF0ZVJlY3QgPSBsYXllci0+Y29udGVudHNSZWN0KCk7Ci0g
ICAgICAgIGVsc2UgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlUmVjdHMgPSBkaXZpZGVJbnRv
VGlsZXModXBkYXRlUmVjdCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRp
bGVJbmRleCA8IHRpbGVSZWN0cy5zaXplKCk7ICsrdGlsZUluZGV4KSB7Ci0gICAgICAgICAgICBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0ID0gdGlsZVJlY3RzW3RpbGVJbmRleF07Ci0gICAgICAg
ICAgICBJbnRSZWN0IGVuY2xvc2luZ1VwZGF0ZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGVS
ZWN0KTsKLQotICAgICAgICAgICAgV2ViTGF5ZXJVcGRhdGVJbmZvIGNodW5rKGVuY2xvc2luZ1Vw
ZGF0ZVJlY3QpOwotICAgICAgICAgICAgY2h1bmsubGF5ZXJJRCA9IHVpbnQzMl90KGxheWVyLT5p
ZCgpKTsKLSAgICAgICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJl
YWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGNodW5rLnJlY3Quc2l6ZSgpLCBTaGFyZWFibGVC
aXRtYXA6OlN1cHBvcnRzQWxwaGEpOwotICAgICAgICAgICAgaWYgKCFiaXRtYXApCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoIWJpdG1hcC0+Y3JlYXRlSGFuZGxl
KGNodW5rLmJpdG1hcEhhbmRsZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0jaWYgUExB
VEZPUk0oUVQpCi0gICAgICAgICAgICBRSW1hZ2UgdGlsZUltYWdlID0gYml0bWFwLT5jcmVhdGVR
SW1hZ2UoKTsKLSAgICAgICAgICAgIHRpbGVJbWFnZS5maWxsKDApOwotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnRpbGVJbWFnZSk7Ci0gICAgICAgICAg
ICAgICAgcGFpbnRlci50cmFuc2xhdGUoLXRpbGVSZWN0LngoKSwgLXRpbGVSZWN0LnkoKSk7Ci0g
ICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBhaW50ZXIpOwotICAgICAg
ICAgICAgICAgIGlmIChkaXJlY3RJbWFnZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5k
cmF3SW1hZ2UoZGlyZWN0SW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGxheWVyLT5j
b250ZW50c1JlY3QoKSwgRmxvYXRSZWN0KDAsIDAsIGRpcmVjdEltYWdlLT53aWR0aCgpLCBkaXJl
Y3RJbWFnZS0+aGVpZ2h0KCkpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBlbmNsb3Np
bmdVcGRhdGVSZWN0KTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgorQ29sb3IgV2ViR3JhcGhpY3NM
YXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJl
dHVybiBjb250ZW50c09wYXF1ZSgpID8gQ29sb3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50
OwogCi0gICAgICAgICAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5
OjpVcGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChjaHVuaykpOwotICAgICAgICB9Cit9Cit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRl
SW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBtX21vZGlmaWVkID0gdHJ1ZTsKKyAgICBpZiAoV2Vi
TGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgpKQorICAg
ICAgICBjbGllbnQtPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvKTsKK30KKwor
dm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0
ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV9tb2RpZmllZCA9IHRydWU7CisgICAgaWYgKFdl
YkxheWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKSkKKyAg
ICAgICAgY2xpZW50LT51cGRhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbyk7Cit9CisK
K3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlVGlsZShpbnQgdGlsZUlEKQoreworICAgIG1f
bW9kaWZpZWQgPSB0cnVlOworICAgIGlmIChXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQg
PSBsYXllclRyZWVUaWxlQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+cmVtb3ZlVGlsZShpZCgp
LCB0aWxlSUQpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGVCdWZmZXJz
UmVjdXJzaXZlbHkoKQoreworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZUJ1ZmZl
cnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIo
dGhpcy0+Y2hpbGRyZW4oKVtpXSk7CisgICAgICAgIGxheWVyLT51cGRhdGVUaWxlQnVmZmVyc1Jl
Y3Vyc2l2ZWx5KCk7CiAgICAgfQogfQogCitXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBXZWJHcmFw
aGljc0xheWVyOjpsYXllclRyZWVUaWxlQ2xpZW50KCkgY29uc3QKK3sKKyAgICBpZiAobV9sYXll
clRyZWVUaWxlQ2xpZW50KQorICAgICAgICByZXR1cm4gbV9sYXllclRyZWVUaWxlQ2xpZW50Owor
ICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHBhcmVudCA9IHRvV2ViR3JhcGhpY3NMYXllcih0aGlzLT5w
YXJlbnQoKSk7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBwYXJlbnQtPmxheWVyVHJlZVRpbGVDbGllbnQoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpCit7CisgICAgLy8gQmFja2luZy1zdG9yZXMgZm9y
IGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2VzIGlzIGhhbmRsZWQgaW4gTGF5ZXJUcmVlSG9zdC4K
KyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFkcmF3c0NvbnRl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkxheWVyVHJlZVRpbGVDbGllbnQqIGNsaWVu
dCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKTsKKyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0
dXJuOworICAgIG1faW5VcGRhdGVNb2RlID0gdHJ1ZTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUt
PnVwZGF0ZVRpbGVCdWZmZXJzKCk7CisgICAgbV9pblVwZGF0ZU1vZGUgPSBmYWxzZTsKK30KKwor
I2VuZGlmCisKIHN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZVdlYkdyYXBo
aWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogewogICAgIHJldHVybiBhZG9w
dFB0cihuZXcgV2ViR3JhcGhpY3NMYXllcihjbGllbnQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgK
aW5kZXggYWQ2MDIxZS4uYzU4MWI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgKQEAgLTI3LDE5
ICsyNyw0MCBAQAogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJSdW5Mb29wLmgiCiAj
aW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUu
aCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgorI2luY2x1ZGUgIlRpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8u
aCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2Vi
TGF5ZXJUcmVlVGlsZUNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwg
aW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKGNvbnN0
IFdlYkxheWVySW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGVsZXRlTGF5ZXIoV2Vi
TGF5ZXJJRCkgPSAwOworfTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJH
cmFwaGljc0xheWVyIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIgeworY2xhc3MgV2Vi
R3JhcGhpY3NMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyCisjaWYgRU5BQkxF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFRp
bGVkQmFja2luZ1N0b3JlQ2xpZW50CisgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdl
YktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50CisjZW5kaWYKK3sKIHB1Ymxp
YzoKICAgICBXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKICAgICB2aXJ0
dWFsIH5XZWJHcmFwaGljc0xheWVyKCk7CkBAIC03MywxMyArOTQsMTMgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwot
ICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIHZvaWQgc2V0Vmlz
aWJsZUNvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwg
dm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgdm9pZCBz
ZXRSb290TGF5ZXIoYm9vbCk7CiAKICAgICBXZWJLaXQ6OldlYkxheWVySUQgaWQoKSBjb25zdDsK
LSAgICBjb25zdCBXZWJLaXQ6OldlYkxheWVySW5mbyYgbGF5ZXJJbmZvKCkgY29uc3Q7Ci0gICAg
RmxvYXRSZWN0IG5lZWRzRGlzcGxheVJlY3QoKSBjb25zdDsKLSAgICBzdGF0aWMgVmVjdG9yPFdl
YktpdDo6V2ViTGF5ZXJJRD4gdGFrZUxheWVyc1RvRGVsZXRlKCk7CiAgICAgc3RhdGljIFdlYkdy
YXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQpOwogICAgIGJvb2wgaXNN
b2RpZmllZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kaWZpZWQ7IH0KICAgICB2b2lkIGRpZFN5bmNo
cm9uaXplKCk7CkBAIC04NywyMSArMTA4LDUxIEBAIHB1YmxpYzoKICAgICB2b2lkIG5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoZG91YmxlKTsKIAogICAgIHN0YXRpYyB2b2lkIGluaXRGYWN0b3J5KCk7
Ci0gICAgc3RhdGljIHZvaWQgc2VuZExheWVyc1RvVUlQcm9jZXNzKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqLCBXZWJLaXQ6OldlYlBhZ2UqKTsKKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NU
T1JFKQorICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHRp
bGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpOworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tp
bmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4m
IHBhaW50ZWRBcmVhKTsKKyAgICB2aXJ0dWFsIGJvb2wgdGlsZWRCYWNraW5nU3RvcmVVcGRhdGVz
QWxsb3dlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNv
bnRlbnRzUmVjdCgpOworICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZVZpc2li
bGVSZWN0KCk7CisgICAgdmlydHVhbCBDb2xvciB0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRD
b2xvcigpIGNvbnN0OworCisgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50
CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpV
cGRhdGVJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29u
c3QgV2ViS2l0OjpVcGRhdGVJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50
IHRpbGVJRCk7CisKKyAgICB2b2lkIHNldExheWVyVHJlZVRpbGVDbGllbnQoV2ViS2l0OjpXZWJM
YXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQpIHsgbV9sYXllclRyZWVUaWxlQ2xpZW50ID0gY2xp
ZW50OyB9CisgICAgV2ViS2l0OjpXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBsYXllclRyZWVUaWxl
Q2xpZW50KCkgY29uc3Q7CisKKyAgICBib29sIGlzUmVhZHlGb3JUaWxlQnVmZmVyU3dhcCgpIGNv
bnN0OworICAgIHZvaWQgdXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSgpOworICAgIHZvaWQg
c2V0Q29udGVudHNTY2FsZShmbG9hdCk7CisgICAgdm9pZCB1cGRhdGVDb250ZW50QnVmZmVycygp
OworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgV2ViS2l0OjpXZWJMYXllckluZm8gbV9sYXllcklu
Zm87Ci0gICAgUmVmUHRyPFdlYktpdDo6U2hhcmVhYmxlQml0bWFwPiBtX2JhY2tpbmdTdG9yZTsK
KyAgICBXZWJLaXQ6OldlYkxheWVyVHJlZVRpbGVDbGllbnQqIG1fbGF5ZXJUaWxlQ2xpZW50Owog
ICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlS
ZWN0OwotICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7Ci0gICAgYm9vbCBtX21vZGlmaWVkOwotICAg
IGJvb2wgbV9jb250ZW50TmVlZHNEaXNwbGF5OwotICAgIGJvb2wgbV9oYXNQZW5kaW5nQW5pbWF0
aW9uczsKLQotICAgIGZsb2F0IG1fY29udGVudFNjYWxlOworICAgIEludFJlY3QgbV92aXNpYmxl
Q29udGVudFJlY3Q7CisgICAgYm9vbCBtX25lZWRzRGlzcGxheSA6IDE7CisgICAgYm9vbCBtX21v
ZGlmaWVkIDogMTsKKyAgICBib29sIG1fY29udGVudE5lZWRzRGlzcGxheSA6IDE7CisgICAgYm9v
bCBtX2hhc1BlbmRpbmdBbmltYXRpb25zIDogMTsKKyAgICBib29sIG1faW5VcGRhdGVNb2RlIDog
MjsKIAogICAgIHZvaWQgbm90aWZ5Q2hhbmdlKCk7CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lO
R19TVE9SRSkKKyAgICBXZWJLaXQ6OldlYkxheWVyVHJlZVRpbGVDbGllbnQqIG1fbGF5ZXJUcmVl
VGlsZUNsaWVudDsKKyAgICBPd25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fbWFp
bkJhY2tpbmdTdG9yZTsKKyAgICBPd25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1f
cHJldmlvdXNCYWNraW5nU3RvcmU7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworI2VuZGlm
CiB9OwogCiBXZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXll
ciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
aAppbmRleCA1MmZkZGRkLi4wNmRlY2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaApAQCAtNzgsNiArNzgsOSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMo
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ0xheWVycygpID0gMDsKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRy
ZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqKSA9IDA7CisjZW5kaWYKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWFJbXBsLmNwcAppbmRleCA5N2ZmODI3Li5hOWIxM2M3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcApA
QCAtNjczLDUgKzY3MywxMyBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheShVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvKQogICAgIG1fbGFzdERpc3BsYXlUaW1lID0gY3VycmVudFRpbWUoKTsK
IH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQordm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVz
c2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKK3sKKyAgICBpZiAo
bV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY2VpdmVMYXll
clRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7Cit9Cisj
ZW5kaWYKKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaAppbmRleCBjYzhhODA1Li41Y2E1
NTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhSW1wbC5oCkBAIC03MSw2ICs3MSwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCBzY2hlZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRhdGUoY29uc3QgV2luZG93R2VvbWV0cnkm
KTsKICNlbmRpZgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVY
VFVSRV9NQVBQRVIpCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqKTsKKyNlbmRpZgorCiAgICAgLy8gQ29yZUlQQyBtZXNzYWdlIGhhbmRs
ZXJzLgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBi
YWNraW5nU3RvcmVTdGF0ZUlELCBib29sIHJlc3BvbmRJbW1lZGlhdGVseSwgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBzY3JvbGxPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcApp
bmRleCBkYTQyYWU2Li4wMzFjM2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2VuZGlm
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5j
bHVkZSAicXQvTGF5ZXJUcmVlSG9zdFF0LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDQsNiArNDgsOCBAQCBQYXNzUmVmUHRy
PExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQog
ICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FNYWM6OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbGlmIFBM
QVRGT1JNKFdJTikgJiYgSEFWRShXS1FDQSkKICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdENBV2lu
OjpjcmVhdGUod2ViUGFnZSk7CisjZWxpZiBQTEFURk9STShRVCkgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIHJldHVybiBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbHNl
CiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDY3YzgwN2IuLjUxZjk5MjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAt
MjYsMTMgKzI2LDIwIEBACiAjaWZuZGVmIExheWVyVHJlZUhvc3RfaAogI2RlZmluZSBMYXllclRy
ZWVIb3N0X2gKIAorI2luY2x1ZGUgPENvcmVJUEMvTWVzc2FnZUlELmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCituYW1lc3BhY2Ug
Q29yZUlQQyB7CitjbGFzcyBBcmd1bWVudERlY29kZXI7CitjbGFzcyBDb25uZWN0aW9uOworfQor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgSW50UmVjdDsKLSAgICBjbGFzcyBJbnRT
aXplOwotICAgIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CitjbGFzcyBGbG9hdFBvaW50OworY2xhc3Mg
SW50UmVjdDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBHcmFwaGljc0xheWVyOwogfQogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKQEAgLTcyLDYgKzc5LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcGF1c2VSZW5kZXJpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5n
KCkgeyB9CiAKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IGZsb2F0IHNjYWxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0
VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikgeyB9CisgICAgdmly
dHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVyKGludCBsYXllcklELCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFt
ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2Uo
Q29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKik7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIHZv
aWQgc2NoZWR1bGVDaGlsZFdpbmRvd0dlb21ldHJ5VXBkYXRlKGNvbnN0IFdpbmRvd0dlb21ldHJ5
JikgPSAwOwogI2VuZGlmCkBAIC04MCw2ICs5NSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGlj
aXQgTGF5ZXJUcmVlSG9zdChXZWJQYWdlKik7CiAKICAgICBXZWJQYWdlKiBtX3dlYlBhZ2U7CisK
KworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIGJvb2wgbV93YWl0aW5nRm9y
VUlQcm9jZXNzOworI2VuZGlmCiB9OwogCiAjaWYgIVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JN
KFFUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVy
VHJlZUhvc3QubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
TGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mZGU5ODcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyOCBAQAorIwor
IyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyMgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisjICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisjICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyMgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMKKworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCittZXNzYWdlcyAtPiBMYXllclRyZWVIb3N0IHsKKyAgICBTZXRWaXNpYmxlQ29udGVu
dFJlY3RGb3JMYXllcihpbnQgbGF5ZXJJRCwgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVu
dFJlY3QpCisgICAgU2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3RvcihXZWJDb3Jl
OjpGbG9hdFBvaW50IHRyYWplY3RvcnlWZWN0b3J5KQorICAgIFNldFZpc2libGVDb250ZW50UmVj
dEFuZFNjYWxlKFdlYkNvcmU6OkludFJlY3QgY29udGVudFJlY3QsIGZsb2F0IHNjYWxlKQorICAg
IFJlbmRlck5leHRGcmFtZSgpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcAppbmRleCBmYWE2Y2RkLi5l
NzIwOGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGls
ZWREcmF3aW5nQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1RpbGVkRHJhd2luZ0FyZWEuY3BwCkBAIC0xNzcsNiArMTc3LDEwIEBAIHZvaWQgVGlsZWREcmF3
aW5nQXJlYTo6cmVtb3ZlVGlsZShpbnQgdGlsZUlEKQogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6RHJhd2luZ0FyZWFQcm94eTo6UmVtb3ZlVGlsZSh0aWxlSUQpKTsKIH0KIAorI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYTo6ZGlkUmVj
ZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24s
IENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMp
IHsgfQorI2VuZGlmCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorCiAjZW5kaWYgLy8gVElMRURf
QkFDS0lOR19TVE9SRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1RpbGVkRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9UaWxlZERyYXdpbmdBcmVhLmgKaW5kZXggZWQxM2QyYS4uNWViNzlhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oCkBA
IC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0
aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHN5bmND
b21wb3NpdGluZ0xheWVycygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJU
cmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwg
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA1NWY1ZWZlLi5m
MTliNmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCkBAIC0yMTU0LDYgKzIxNTQsMTQgQEAgdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZlTWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWcKICAgICAg
ICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVEcmF3aW5nQXJlYU1lc3NhZ2UoY29ubmVj
dGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisj
aWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc0xheWVyVHJl
ZUhvc3Q+KCkpIHsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0FyZWEpCisgICAgICAgICAgICBtX2Ry
YXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoY29ubmVjdGlvbiwgbWVz
c2FnZUlELCBhcmd1bWVudHMpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCiAgICAg
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1l
c3NhZ2VDbGFzc1dlYkluc3BlY3Rvcj4oKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAppbmRleCA1NzhhZTA4
Li44YzQ0NjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApAQCAtMjUsOCArMjUsNDEzIEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFF0LmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQXJlYUlt
cGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJMYXllclRyZWVI
b3N0UHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIldl
YkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8TGF5ZXJU
cmVlSG9zdFF0PiBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUcmVlSG9zdFF0KHdlYlBhZ2UpKTsKK30KKwor
TGF5ZXJUcmVlSG9zdFF0Ojp+TGF5ZXJUcmVlSG9zdFF0KCkKK3sKK30KKworTGF5ZXJUcmVlSG9z
dFF0OjpMYXllclRyZWVIb3N0UXQoV2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IExheWVyVHJlZUhv
c3Qod2ViUGFnZSkKKyAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNl
KQorICAgICwgbV9pc1ZhbGlkKHRydWUpCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
CisgICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3MoZmFsc2UpCisgICAgLCBtX2lzU3VzcGVuZGVk
KGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKKyAgICAsIG1f
c2hvdWxkU3luY1Jvb3RMYXllcih0cnVlKQorICAgICwgbV9sYXllckZsdXNoVGltZXIodGhpcywg
JkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCisgICAgLCBtX2xheWVyRmx1
c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQoreworICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIu
CisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgV2Vi
R3JhcGhpY3NMYXllciogd2ViUm9vdExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExh
eWVyLmdldCgpKTsKKyAgICB3ZWJSb290TGF5ZXItPnNldFJvb3RMYXllcih0cnVlKTsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3RRdCByb290
IGxheWVyIik7CisjZW5kaWYKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNl
KTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9s
YXllclRyZWVDb250ZXh0LndlYkxheWVySUQgPSB0b1dlYkdyYXBoaWNzTGF5ZXIod2ViUm9vdExh
eWVyKS0+aWQoKTsKKworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNz
TGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAg
ICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5zZXRMYXllclRyZWVUaWxl
Q2xpZW50KHRoaXMpOworI2VuZGlmCisjaWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFF0IG5vbi1jb21wb3NpdGVkIGNv
bnRlbnQiKTsKKyNlbmRpZgorICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJh
d3NDb250ZW50KHRydWUpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29u
dGVudHNPcGFxdWUobV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5k
cmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFk
ZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7CisKKyAgICBpZiAobV93
ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgpKQorICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVy
KCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UXQ6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVyRmx1c2hpbmdFbmFi
bGVkKQoreworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9PSBsYXllckZs
dXNoaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKKworICAgIGlmIChtX2xheWVyRmx1
c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FuY2VsUGVuZGlu
Z0xheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJG
bHVzaCgpCit7CisgICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdFF0OjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCit7CisgICAgbV9sYXllckZsdXNo
VGltZXIuc3RvcCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0U2hvdWxkTm90aWZ5
QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5
ZXJGbHVzaCkKK3sKKyAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IG5vdGlm
eUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNl
dFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5
ZXIpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJl
bigpOworCisgICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4K
KyAgICBpZiAoZ3JhcGhpY3NMYXllcikKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6
OmludmFsaWRhdGUoKQoreworICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisKKyAgICBB
U1NFUlQobV9pc1ZhbGlkKTsKKyAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7CisgICAgbV9pc1Zh
bGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXROb25Db21wb3NpdGVk
Q29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3Qp
OworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXll
ci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVu
dHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWRE
aXNwbGF5KHNjcm9sbFJlY3QpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6Zm9yY2VSZXBh
aW50KCkKK3sKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0UXQ6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKK3sK
KyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIC8vIElmIHRoZSBuZXdT
aXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0
TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAorICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFy
ZWFzLgorICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zaXplKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1Np
emUpOworCisgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgeworICAg
ICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5o
ZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgp
LCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOworICAgIH0K
KworICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRS
ZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQo
KSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKKworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisg
ICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkSW5zdGFsbFBh
Z2VPdmVybGF5KCkKK3sKKyAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7CisKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZFVuaW5zdGFs
bFBhZ2VPdmVybGF5KCkKK3sKKyAgICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0UGFnZU92
ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBB
U1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwor
Ym9vbCBMYXllclRyZWVIb3N0UXQ6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCit7CisgICAg
Ym9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIG1fcm9v
dExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICByZXR1
cm4gZGlkU3luYzsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZFN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yTGF5ZXIoY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUhvc3RQcm94eTo6U3luY0NvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpbmZvKSk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpkaWREZWxldGVMYXllcihXZWJMYXllcklEIGlkKQoreworICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUhvc3RQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihpZCkpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RRdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQoreworICAgIG1f
d2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAg
ICByZXR1cm47CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBpZiAobV9p
c1N1c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKyNl
bmRpZgorCisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsKKyAgICBmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMoKTsKKyAgICBpZiAoIW1fc2hvdWxkU3luY0ZyYW1lKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9zaG91bGRTeW5jUm9vdExheWVyKSB7CisgICAgICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRSb290Q29tcG9zaXRpbmdM
YXllcih0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7CisgICAg
ICAgIG1fc2hvdWxkU3luY1Jvb3RMYXllciA9IGZhbHNlOworICAgIH0KKworICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRSZW5kZXJGcmFtZSgpKTsK
KworICAgIGlmICghbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIExldCB0aGUgZHJhd2luZyBhcmVhIGtub3cgdGhhdCB3ZSd2ZSBkb25l
IGEgZmx1c2ggb2YgdGhlIGxheWVyIGNoYW5nZXMuCisgICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0Fy
ZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXll
cnMoKTsKKyAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJU
cmVlSG9zdFF0PiopCit7CisgICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQoreworICAgIEFT
U0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKKworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9wYWdlT3Zl
cmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0UXQgcGFnZSBvdmVybGF5IGNvbnRlbnQi
KTsKKyNlbmRpZgorCisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1
ZSk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsK
KworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQorewor
ICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+
cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7Cit9
CisKK2ludDY0X3QgTGF5ZXJUcmVlSG9zdFF0OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdl
KiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxh
eWVySUQ7CisgICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CisKKyAgICBpZiAoIXBpeG1hcCkKKyAgICAgICAgcmV0dXJuIEludmFsaWRXZWJM
YXllcklEOworCisgICAgaW50NjRfdCBrZXkgPSBwaXhtYXAtPmNhY2hlS2V5KCk7CisgICAgSGFz
aE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VSZWZDb3VudHMuZmluZChrZXkpOworCisgICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKKyAgICAgICAgKysoaXQtPnNlY29uZCk7CisgICAg
ICAgIHJldHVybiBrZXk7CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0
bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgaW1h
Z2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxw
aGEgOiAwKTsKKyAgICB7CisgICAgICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBJbnRQb2ludDo6emVybygpKTsKKyAgICB9CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSBoYW5kbGU7CisgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlRGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2Uoa2V5LCBoYW5kbGUpKTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
UmVmQ291bnRzLmFkZChrZXksIDEpOworICAgIHJldHVybiBrZXk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdFF0OjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCit7CisgICAg
aWYgKCFrZXkpCisgICAgICAgIHJldHVybjsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0
ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7
CisgICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGl0LT5zZWNvbmQtLTsKKworICAgIGlmIChpdC0+c2Vj
b25kKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVm
Q291bnRzLnJlbW92ZShpdCk7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVIb3N0UHJveHk6OkRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXkpKTsKK30KKwor
Cit2b2lkIExheWVyVHJlZUhvc3RRdDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFF0Ojpub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciop
Cit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgaWYgKGdyYXBoaWNzTGF5
ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyKSB7CisgICAgICAgIG1fd2ViUGFnZS0+
ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsKKyAg
ICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVj
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0Ojpz
aG93RGVidWdCb3JkZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVl
SG9zdFF0OjpzaG93UmVwYWludENvdW50ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBh
Z2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dSZXBhaW50Q291bnRlcigpOworfQorCiti
b29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCit2
b2lkIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXll
cklELCB0aWxlSUQsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnVw
ZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
SG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZv
KSk7Cit9Cit2b2lkIExheWVyVHJlZUhvc3RRdDo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVIb3N0UHJveHk6OlJlbW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVyKGludCBs
YXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIFdlYkdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKGxheWVySUQpOworICAg
IGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3Qo
cmVjdCk7CisgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChyZWN0KTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IElu
dFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlKQoreworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICBpZiAoIWxheWVy
KQorICAgICAgICByZXR1cm47CisgICAgbGF5ZXItPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOwor
ICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkp
LT5zZXRWaXNpYmxlQ29udGVudFJlY3QocmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQm
IHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlW
ZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZW5k
ZXJOZXh0RnJhbWUoKQoreworICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOworICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitib29sIExheWVyVHJlZUhvc3RRdDo6bGF5ZXJU
cmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faXNTdXNwZW5k
ZWQgJiYgIW1fd2FpdGluZ0ZvclVJUHJvY2VzczsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorI2Vsc2UKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogYm9vbCBMYXllclRyZWVI
b3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQpAQCAtMzUsMyArNDQwLDQgQEAg
Ym9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYWM5NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgKQEAgLTAsMCAr
MSwxMjYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFF0X2gK
KyNkZWZpbmUgTGF5ZXJUcmVlSG9zdFF0X2gKKworI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQu
aCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNs
dWRlICJXZWJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVy
Q2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIExheWVyVHJlZUhv
c3RRdCA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50
CisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgICAgICAgICAgICAgICAgICAg
LCBwdWJsaWMgV2ViTGF5ZXJUcmVlVGlsZUNsaWVudAorI2VuZGlmCit7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdFF0PiBjcmVhdGUoV2ViUGFnZSopOworICAg
IHZpcnR1YWwgfkxheWVyVHJlZUhvc3RRdCgpOworCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IExheWVyVHJlZUNv
bnRleHQmIGxheWVyVHJlZUNvbnRleHQoKSB7IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOwor
ICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Ny
b2xsT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yY2VSZXBhaW50KCk7CisgICAgdmlydHVh
bCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2
b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VP
dmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworICAgIHZpcnR1
YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRldmljZVNjYWxlRmFjdG9y
RGlkQ2hhbmdlKCkgeyB9CisgICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3Rv
cmUoSW1hZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGlu
dDY0X3QpOworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYp
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNv
bnN0IFVwZGF0ZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklE
LCBpbnQgdGlsZUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9y
TGF5ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVV
cGRhdGVzQWxsb3dlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVu
dFJlY3RBbmRTY2FsZShjb25zdCBJbnRSZWN0JiwgZmxvYXQgc2NhbGUpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihj
b25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGVsZXRlTGF5ZXIoV2Vi
TGF5ZXJJRCk7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IExheWVyVHJlZUhv
c3RRdChXZWJQYWdlKik7CisKK3ByaXZhdGU6CisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNS
ZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1
Z0JvcmRlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkg
Y29uc3Q7CisKKyAgICAvLyBMYXllclRyZWVIb3N0UXQKKyAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIoKTsKKyAgICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgYm9v
bCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGNhbmNlbFBlbmRpbmdMYXll
ckZsdXNoKCk7CisgICAgdm9pZCBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworICAgIHZv
aWQgc2VuZExheWVyc1RvVUkoKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
PiBtX3Jvb3RMYXllcjsKKworICAgIC8vIFRoZSBsYXllciB3aGljaCBjb250YWlucyBhbGwgbm9u
LWNvbXBvc2l0ZWQgY29udGVudC4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOworCisgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBs
YXllci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgorICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7CisKKyAgICBIYXNo
TWFwPGludDY0X3QsIGludD4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKKwor
ICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7CisgICAgYm9vbCBtX2lz
VmFsaWQ7CisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgYm9vbCBtX3dhaXRp
bmdGb3JVSVByb2Nlc3M7CisgICAgYm9vbCBtX2lzU3VzcGVuZGVkOworI2VuZGlmCisgICAgTGF5
ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNG
cmFtZTsKKyAgICBib29sIG1fc2hvdWxkU3luY1Jvb3RMYXllcjsKKyAgICB2b2lkIGxheWVyRmx1
c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhvc3RRdD4qKTsKKyAgICBXZWJD
b3JlOjpUaW1lcjxMYXllclRyZWVIb3N0UXQ+IG1fbGF5ZXJGbHVzaFRpbWVyOworICAgIGJvb2wg
bV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMYXll
clRyZWVIb3N0UXRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111274</attachid>
            <date>2011-10-17 09:21:27 -0700</date>
            <delta_ts>2011-10-17 11:42:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch2.diff</filename>
            <type>text/plain</type>
            <size>103862</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2ZDY2NDUyLi5iZWI1NDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcz
IEBACisyMDExLTEwLTE3ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1F0XVtXSzJdIFN5bmNocm9uaXplIHRpbGluZyB3aXRoIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE1MQorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgorCisg
ICAgICAgIE1ha2UgdGhlIHRpbGVkICJub24tY29tcG9zaXRlZCIgY29udGVudCBhbmQgdGhlIGNv
bXBvc2l0ZWQgbGF5ZXJzIGdvIHRocm91Z2ggdGhlIHNhbWUKKyAgICAgICAgY29kZSBwYXRoIG9u
IFdlYktpdDIuIEluc3RlYWQgb2YgaGF2aW5nIGEgImRyYXdpbmcgYXJlYSIgdGhhdCBoYW5kbGVz
IHRoZSBub24tY29tcG9zaXRlZAorICAgICAgICBjb250ZW50IGFuZCBhIHNlcGVyYXRlIGxheWVy
IHRyZWUsIHdlIHB1dCBldmVyeXRoaW5nIGluIGEgbGF5ZXIgdHJlZSwgd2l0aCB0aGUgbm9uLQor
ICAgICAgICBjb21wb3NpdGVkIGNvbnRlbnQgYmVpbmcgYSBsYXllciBpbiB0aGUgdHJlZS4KKwor
ICAgICAgICBUaGlzIGFsbG93cyBmaXhpbmcgc2V2ZXJhbCBpc3N1ZXMgd2l0aCB3ZWJzaXRlcyB0
aGF0IGhhdmUgbGFyZ2UgY29udGVudCBhcmVhcyB0aGF0IGFyZQorICAgICAgICBjb21wb3NpdGVk
IG9yIG92ZXJsYXAgd2l0aCBjb21wb3NpdGVkIGxheWVycy4KKworICAgICAgICBMYXllci10cmVl
IHN5bmNocm9uaXphdGlvbiBpcyBkb25lIGJ5IHBhc3NpbmcgV2ViS2l0MiBtZXNzYWdlcyBiZXR3
ZWVuIGEgTGF5ZXJUcmVlSG9zdAorICAgICAgICBvbiB0aGUgV2ViUHJvY2VzcyBhbmQgYSBMYXll
clRyZWVIb3N0UHJveHkgb24gdGhlIFVJIHByb2Nlc3MuIEV2ZXJ5IGxheWVyIGluIHRoZSB0cmVl
IGhhcworICAgICAgICBpdHMgb3duIHRpbGVkIGJhY2tpbmcgc3RvcmUsIGFuZCB1c2VzIHRoZSBM
YXllclRyZWVIb3N0IGNvbW11bmljYXRpb24gY2hhbm5lbCB0byBwYXNzCisgICAgICAgIGNvbnRl
bnQgdXAgdG8gdGhlIFVJIHByb2Nlc3MuIFRoZSBVSSBwcm9jZXNzIHdpbGwgbGF0ZXIgY3JlYXRl
cyBpdHMgb3duIEdyYXBoaWNzTGF5ZXIgdHJlZSwKKyAgICAgICAgYmFzZWQgb24gVGV4dHVyZU1h
cHBlciwgd2hpY2ggY2FuIGJlIHBhaW50ZWQgZGlyZWN0bHkgd2l0aCBPcGVuR0wuCisKKyAgICAg
ICAgU2V2ZXJhbCBvcHRpbWl6YXRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBub24tY29tcG9z
aXRlZCBsYXllciBhcyB3ZWxsLCBlLmcuIHNwZWNpZnlpbmcKKyAgICAgICAgYSB0cmFqZWN0b3J5
IGFuZCB1cGRhdGluZyB0aGUgdmlzaWJsZSByZWN0IHRvZ2V0aGVyIHdpdGggdGhlIGNvbnRlbnQg
c2NhbGUuCisKKyAgICAgICAgVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBkaXNhYmxlZCwgYSBzZXBh
cmF0ZSBwYXRjaCB3aWxsIGVuYWJsZSBpdCBhbmQgZ2x1ZSBpdCB0bworICAgICAgICBRVG91Y2hX
ZWJQYWdlLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJvOgorICAgICAgICAqIFBsYXRm
b3JtL0NvcmVJUEMvTWVzc2FnZUlELmg6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQyL21lc3Nh
Z2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9MYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICog
U2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcklu
Zm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9xdC9M
YXllclRyZWVDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0
OjpMYXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6
fkxheWVyVHJlZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojpl
bmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpkZWNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktp
dDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KToKKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVByb3h5Ojp2aWV3cG9ydFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eTo6aXNCYWNraW5nU3RvcmVSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhUHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVj
dG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnJlbW92ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2Vp
dmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6cGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxl
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6bGF5
ZXJCeUlEKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpyb290TGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeVN5bmNS
ZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd0RlYnVn
Qm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd1JlcGFp
bnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludENv
bnRlbnRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2Vz
LmluOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDogQWRkZWQuCisgICAgICAgICog
V2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6fldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVQYWludEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNl
dFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0
ZXNBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpsYXllclRyZWVUaWxlQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldExheWVyVHJlZVRpbGVDbGllbnQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RB
bmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3
aW5nQXJlYTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVy
TmV4dFNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UXQ6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZERlbGV0ZUxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRlc3Ryb3lQYWdl
T3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjphZG9wdElt
YWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZWxl
YXNlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6
Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RR
dDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hv
d0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hvd1Jl
cGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVU
aWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZW1vdmVUaWxlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRl
bnRSZWN0QW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKToKKysKKwogMjAxMS0xMC0xNCAg
SmVzdXMgU2FuY2hlei1QYWxlbmNpYSAgPGplc3VzLnBhbGVuY2lhQG9wZW5ib3NzYS5vcmc+CiAK
ICAgICAgICAgW1F0XVtXSzJdIEltcGxlbWVudCBkZWNpZGVQb2xpY3lGb3JSZXNwb25zZSBpbiBv
dXIgUG9saWN5Q2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNl
cy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8KaW5kZXggZmNlNTljNS4u
YjkzZTc2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybwpAQCAtOTIsNiArOTIsNyBAQCBN
RVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2FnZXMu
aW4gXAogICAgIERvd25sb2FkUHJveHkubWVzc2FnZXMuaW4gXAogICAgIERyYXdpbmdBcmVhUHJv
eHkubWVzc2FnZXMuaW4gXAorICAgIExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBcCiAg
ICAgUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Qcm9jZXNz
Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBc
CkBAIC0xMTYsNiArMTE3LDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViRnVsbFNj
cmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW4gXAogICAgIFdlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gXAorICAg
IFdlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZS9XZWJJbnNw
ZWN0b3IubWVzc2FnZXMuaW4gXAogICAgIFdlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBcCiAg
ICAgV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL01lc3NhZ2VJRC5oCmluZGV4IDEzYjIxODMuLjQ1NTFkN2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgKKysrIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaApAQCAtMzgsNiArMzgsNyBAQCBlbnVt
IE1lc3NhZ2VDbGFzcyB7CiAgICAgTWVzc2FnZUNsYXNzQXV0aGVudGljYXRpb25NYW5hZ2VyLAog
ICAgIE1lc3NhZ2VDbGFzc0RyYXdpbmdBcmVhLAogICAgIE1lc3NhZ2VDbGFzc0luamVjdGVkQnVu
ZGxlLAorICAgIE1lc3NhZ2VDbGFzc0xheWVyVHJlZUhvc3QsCiAgICAgTWVzc2FnZUNsYXNzV2Vi
QXBwbGljYXRpb25DYWNoZU1hbmFnZXIsCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29va2llTWFuYWdl
ciwKICAgICBNZXNzYWdlQ2xhc3NXZWJEYXRhYmFzZU1hbmFnZXIsCkBAIC01NCw2ICs1NSw3IEBA
IGVudW0gTWVzc2FnZUNsYXNzIHsKICAgICAvLyBNZXNzYWdlcyBzZW50IGJ5IHRoZSB3ZWIgcHJv
Y2VzcyB0byB0aGUgVUkgcHJvY2Vzcy4KICAgICBNZXNzYWdlQ2xhc3NEb3dubG9hZFByb3h5LAog
ICAgIE1lc3NhZ2VDbGFzc0RyYXdpbmdBcmVhUHJveHksCisgICAgTWVzc2FnZUNsYXNzTGF5ZXJU
cmVlSG9zdFByb3h5LAogICAgIE1lc3NhZ2VDbGFzc1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
UHJveHksCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29udGV4dCwKICAgICBNZXNzYWdlQ2xhc3NXZWJD
b250ZXh0TGVnYWN5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQy
L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5
CmluZGV4IDZhMmQxOTAuLjZjYzUzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Njcmlw
dHMvd2Via2l0Mi9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtp
dDIvbWVzc2FnZXMucHkKQEAgLTM4Miw2ICszODIsOCBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0
eXBlKToKICAgICAgICAgJ1dlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIn
OiBbXSwKICAgICAgICAgJ1dlYktpdDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rlcic6IFtd
LAogICAgICAgICAnV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAor
ICAgICAgICAnV2ViS2l0OjpXZWJMYXllcklEJzogWyciV2ViTGF5ZXJUcmVlSW5mby5oIiddLAor
ICAgICAgICAnV2ViS2l0OjpXZWJMYXllckluZm8nOiBbJyJXZWJMYXllclRyZWVJbmZvLmgiJ10s
CiAgICAgICAgICdXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAog
ICAgICAgICAnV2ViS2l0OjpXZWJNb3VzZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAg
ICAgJ1dlYktpdDo6V2ViVG91Y2hFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaAppbmRleCA4NjY3Yzk4Li4yZGI1ODRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgKQEAgLTQ3LDYgKzQ3LDggQEAg
cHVibGljOgogICAgIHVpbnQzMl90IGNvbnRleHRJRDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAg
ICBIV05EIHdpbmRvdzsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIHVpbnQzMl90IHdlYkxheWVy
SUQ7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZv
LmNwcAppbmRleCBhMDEyODU1Li5lZGI2MmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkxheWVyVHJlZUluZm8uY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJXZWJMYXll
clRyZWVJbmZvLmgiCiAKKyNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTaGFyZWRN
ZW1vcnkuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKIApAQCAtMzMsMzUg
KzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdm9pZCBXZWJMYXllckluZm86OmVuY29kZShD
b3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgLy8gV2UgaGF2
ZSB0byBkaXZpZGUgaXQgdG8gc2V2ZXJhbCBsaW5lcywgYmVjYXVzZSBDb3JlSVBDOjpJbi9PdXQg
dGFrZXMgYSBtYXhpbXVtIG9mIDEwIGFyZ3VtZW50cy4KLSAgICBlbmNvZGVyLT5lbmNvZGUoQ29y
ZUlQQzo6SW4oaWQsIG5hbWUsIHBhcmVudCwgY2hpbGRyZW4sIGZsYWdzLCByZXBsaWNhLCBtYXNr
KSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNo
aWxkcmVuLCBmbGFncywgcmVwbGljYSwgbWFzaywgaW1hZ2VCYWNraW5nU3RvcmVJRCkpOwogICAg
IGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihwb3MsIHNpemUsIHRyYW5zZm9ybSwgb3BhY2l0
eSwgYW5jaG9yUG9pbnQsIGNoaWxkcmVuVHJhbnNmb3JtLCBjb250ZW50c1JlY3QpKTsKLSAgICBl
bmNvZGVyLT5lbmNvZGUoaW1hZ2VCYWNraW5nU3RvcmUgPyBpbWFnZUJhY2tpbmdTdG9yZS0+c2l6
ZSgpIDogSW50U2l6ZSgpKTsKLQotICAgIGlmICghaW1hZ2VCYWNraW5nU3RvcmUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGltYWdlSGFuZGxlOwotICAg
IGlmIChpbWFnZUJhY2tpbmdTdG9yZS0+Y3JlYXRlSGFuZGxlKGltYWdlSGFuZGxlKSkKLSAgICAg
ICAgaW1hZ2VIYW5kbGUuZW5jb2RlKGVuY29kZXIpOwogfQogCiBib29sIFdlYkxheWVySW5mbzo6
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2ViTGF5ZXJJbmZvJiBp
bmZvKQogewogICAgIC8vIFdlIGhhdmUgdG8gZGl2aWRlIGl0IHRvIHNldmVyYWwgbGluZXMsIGJl
Y2F1c2UgQ29yZUlQQzo6SW4vT3V0IHRha2VzIGEgbWF4aW11bSBvZiAxMCBhcmd1bWVudHMuCi0g
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwg
aW5mby5wYXJlbnQsIGluZm8uY2hpbGRyZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5m
by5tYXNrKSkpCisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQs
IGluZm8ubmFtZSwgaW5mby5wYXJlbnQsIGluZm8uY2hpbGRyZW4sIGluZm8uZmxhZ3MsIGluZm8u
cmVwbGljYSwgaW5mby5tYXNrLCBpbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZv
LnBvcywgaW5mby5zaXplLCBpbmZvLnRyYW5zZm9ybSwgaW5mby5vcGFjaXR5LCBpbmZvLmFuY2hv
clBvaW50LCBpbmZvLmNoaWxkcmVuVHJhbnNmb3JtLCBpbmZvLmNvbnRlbnRzUmVjdCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbnRTaXplIGltYWdlQmFja2luZ1N0b3JlU2l6ZTsK
LSAgICBpZiAoIWRlY29kZXItPmRlY29kZShpbWFnZUJhY2tpbmdTdG9yZVNpemUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGltYWdlQmFja2luZ1N0b3JlU2l6ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaW1h
Z2VIYW5kbGU7Ci0gICAgaWYgKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpkZWNvZGUoZGVjb2Rl
ciwgaW1hZ2VIYW5kbGUpKQotICAgICAgICBpbmZvLmltYWdlQmFja2luZ1N0b3JlID0gU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGUoaW1hZ2VIYW5kbGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAppbmRleCBhMGU2OGQzLi4yNTAw
M2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKQEAgLTM0LDYg
KzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
dHlwZWRlZiB1aW50MzJfdCBXZWJMYXllcklEOworZW51bSB7IEludmFsaWRXZWJMYXllcklEID0g
MCB9OwogCiBzdHJ1Y3QgV2ViTGF5ZXJVcGRhdGVJbmZvIHsKICAgICBXZWJMYXllclVwZGF0ZUlu
Zm8oKSB7IH0KQEAgLTU0LDYgKzU1LDcgQEAgc3RydWN0IFdlYkxheWVySW5mbyB7CiAgICAgV2Vi
TGF5ZXJJRCBwYXJlbnQ7CiAgICAgV2ViTGF5ZXJJRCByZXBsaWNhOwogICAgIFdlYkxheWVySUQg
bWFzazsKKyAgICBpbnQ2NF90IGltYWdlQmFja2luZ1N0b3JlSUQ7CiAKICAgICBGbG9hdFBvaW50
IHBvczsKICAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7CkBAIC03MSw2ICs3Myw4IEBAIHN0
cnVjdCBXZWJMYXllckluZm8gewogICAgICAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsK
ICAgICAgICAgICAgIGJvb2wgcHJlc2VydmVzM0QgOiAxOwogICAgICAgICAgICAgYm9vbCBjb250
ZW50TmVlZHNEaXNwbGF5IDogMTsKKyAgICAgICAgICAgIGJvb2wgaW1hZ2VJc1VwZGF0ZWQ6IDE7
CisgICAgICAgICAgICBib29sIGlzUm9vdExheWVyOiAxOwogICAgICAgICB9OwogICAgICAgICB1
bnNpZ25lZCBpbnQgZmxhZ3M7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9xdC9MYXllclRyZWVDb250ZXh0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0
L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKaW5kZXggZjFiZjFiNC4uZDM3ZDc5YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKQEAgLTI2LDQx
ICsyNiwzOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRl
eHQuaCIKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQXJndW1lbnRE
ZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBMYXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0KCkKKyAgICA6IHdlYkxh
eWVySUQoMCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiBMYXllclRyZWVDb250ZXh0
Ojp+TGF5ZXJUcmVlQ29udGV4dCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBMYXllclRyZWVDb250ZXh0OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29u
c3QKK3ZvaWQgTGF5ZXJUcmVlQ29udGV4dDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rl
ciogZW5jb2RlcikgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGVuY29kZXIt
PmVuY29kZSh3ZWJMYXllcklEKTsKIH0KIAotYm9vbCBMYXllclRyZWVDb250ZXh0OjpkZWNvZGUo
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgTGF5ZXJUcmVlQ29udGV4dCYpCitib29sIExheWVy
VHJlZUNvbnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIExh
eWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKGNvbnRleHQud2ViTGF5ZXJJ
RCk7CiB9CiAKIGJvb2wgTGF5ZXJUcmVlQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdlYkxheWVy
SUQ7CiB9CiAKLWJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiwgY29uc3Qg
TGF5ZXJUcmVlQ29udGV4dCYpCitib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVlQ29udGV4
dCYgYSwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhLndlYkxheWVySUQgPT0gYi53ZWJMYXll
cklEOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcAppbmRleCBmODUyZTJmLi5hYTI1ZGQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0yOCw2ICsy
OCwxMSBAQAogCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXllclRy
ZWVIb3N0UHJveHkuaCIKKyNpbmNsdWRlIDxDb3JlSVBDL01lc3NhZ2VJRC5oPgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUzLDQg
KzU4LDIwIEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBz
aXplLCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCiAgICAgc2l6ZURpZENoYW5nZSgpOwog
fQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCit2b2lkIERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKK3sKKyAgICBtX3dl
YlBhZ2VQcm94eS0+c2V0Vmlld05lZWRzRGlzcGxheSh2aWV3cG9ydFZpc2libGVSZWN0KCkpOwor
fQorCitXZWJDb3JlOjpJbnRSZWN0IERyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRzUmVjdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV93ZWJQYWdlUHJv
eHktPnZpZXdTaXplKCkpOworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2VpdmVM
YXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpN
ZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykK
K3sKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IGE3OGIxOWUuLjFhYTE5ZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaApAQCAtMjgsOCArMjgs
OSBAQAogI2RlZmluZSBEcmF3aW5nQXJlYVByb3h5X2gKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVh
SW5mby5oIgotI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00NSwxMyAr
NDYsMTcgQEAgbmFtZXNwYWNlIENvcmVJUEMgewogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0g
ICAgY2xhc3MgSW50UmVjdDsKKyAgICBjbGFzcyBGbG9hdFBvaW50OworICAgIGNsYXNzIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJU
cmVlQ29udGV4dDsKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKIGNsYXNzIFVwZGF0ZUluZm87
CitjbGFzcyBXZWJMYXllclRyZWVJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogY2xh
c3MgV2ViUGFnZVByb3h5OwogCiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5IHsKQEAgLTc3LDYgKzgy
LDI0IEBAIHB1YmxpYzoKICAgICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwogCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZp
ZXdwb3J0VmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBjb250ZW50c1JlY3QoKTsgfQorICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNCYWNraW5nU3RvcmVSZWFkeSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KSB7IH0KKworI2lmIFVTRShUSUxFRF9C
QUNLSU5HX1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5k
U2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQg
c2NhbGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0
b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJL
aXQ6OlVwZGF0ZUluZm8mKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZUZvckxheWVy
KGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGls
ZUlEKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKik7CisKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBt
X3dlYlBhZ2VQcm94eTsgfQorI2VuZGlmCisjZW5kaWYKIHByb3RlY3RlZDoKICAgICBleHBsaWNp
dCBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZSwgV2ViUGFnZVByb3h5Kik7CiAKQEAg
LTg2LDYgKzEwOSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7
CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIE93blB0cjxMYXll
clRyZWVIb3N0UHJveHk+IG1fbGF5ZXJUcmVlSG9zdFByb3h5OworI2VuZGlmCisKIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4IDYxOWQ1MDgu
LjU1OTIyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHlJbXBsLmNwcApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJv
eHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgogCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdFByb3h5LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtMzI4LDggKzMzMiwzOCBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJ
bXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRl
eAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2xheWVyVHJlZUNvbnRleHQg
PSBsYXllclRyZWVDb250ZXh0OwogICAgIG1fd2ViUGFnZVByb3h5LT5lbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOworI2lmIFVTRShURVhUVVJFX01BUFBF
UikKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhv
c3RQcm94eSA9IGFkb3B0UHRyKG5ldyBMYXllclRyZWVIb3N0UHJveHkodGhpcykpOworI2VuZGlm
Cit9CisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKK3ZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5l
Y3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6
OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQ
cm94eSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPmRpZFJlY2VpdmVMYXllclRyZWVI
b3N0UHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKK30KKwor
dm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxl
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxl
KQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0UHJveHktPnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZSh2aXNpYmxlQ29udGVudHNS
ZWN0LCBzY2FsZSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVD
b250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJh
amVjdG9yeVZlY3RvcikKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVj
dG9yKHRyYWplY3RvcnlWZWN0b3IpOwogfQogCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpw
YWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
LCBmbG9hdCBvcGFjaXR5KQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0UHJveHktPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KG1hdHJpeCwg
b3BhY2l0eSk7Cit9CisjZW5kaWYKKwogdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKIHsKICAgICBBU1NFUlQoaXNJbkFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHlJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eUltcGwuaAppbmRleCBkMDkxZjk3Li4xN2NmMzhhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaApAQCAtMzksNiArMzksOCBA
QCBjbGFzcyBSZWdpb247CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBMYXllclRyZWVI
b3N0UHJveHk7CisKIGNsYXNzIERyYXdpbmdBcmVhUHJveHlJbXBsIDogcHVibGljIERyYXdpbmdB
cmVhUHJveHkgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJv
eHlJbXBsPiBjcmVhdGUoV2ViUGFnZVByb3h5Kik7CkBAIC03NSw2ICs3NywxMyBAQCBwcml2YXRl
OgogICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CiAKICAgICBib29s
IGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuICFtX2xheWVy
VHJlZUNvbnRleHQuaXNFbXB0eSgpOyB9CisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9DdXJyZW50R0xD
b250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0
eSk7CisgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBD
OjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqKTsKKyNlbmRpZgogI2Vsc2UKICAgICBib29sIGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40NWU4ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaWZuZGVmIExheWVyVHJlZUhvc3RQcm94eV9oCisjZGVmaW5lIExheWVyVHJl
ZUhvc3RQcm94eV9oCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJEcmF3
aW5nQXJlYVByb3h5LmgiCisjaW5jbHVkZSAiTWVzc2FnZVF1ZXVlLmgiCisjaW5jbHVkZSAiUmVn
aW9uLmgiCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8u
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpZiBV
U0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJOb2RlLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYkxheWVySW5mbzsKK2NsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOworCitj
bGFzcyBMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7Citw
dWJsaWM6CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKKyAgICB2
aXJ0dWFsIH5MYXllclRyZWVIb3N0UHJveHkoKTsKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ0xh
eWVyU3RhdGUoY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdm9pZCBkZWxldGVDb21wb3NpdGlu
Z0xheWVyKFdlYkxheWVySUQpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2Vi
TGF5ZXJJRCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9u
KiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2
b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
ZmxvYXQpOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IElu
dFJlY3QmLCBmbG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5
VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
KyAgICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgdm9pZCBzd2FwQ29udGVudEJ1ZmZl
cnMoKTsKKyAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9y
TGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYp
OworICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBj
b25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihp
bnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7CisgICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7
CisgICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7CisgICAg
dm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0
aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAg
ICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RGb3JMYXllcihXZWJMYXllcklELCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOworI2VuZGlmCisKK3Byb3RlY3Rl
ZDoKKyAgICBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUxheWVyKFdlYkxheWVySUQp
OworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKFdlYkxheWVySUQgaWQpIHsgcmV0dXJu
IChpZCA9PSBJbnZhbGlkV2ViTGF5ZXJJRCkgPyAwIDogbV9sYXllcnMuZ2V0KGlkKTsgfQorICAg
IEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9
CisKKyAgICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9tIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
bGllbnQuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3Jh
cGhpY3NMYXllciosIGRvdWJsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1
aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1
Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93
UmVwYWludENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgcGFpbnRD
b250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSB7IH0KKworICAgIFJ1bkxvb3A6OlRpbWVyPExheWVyVHJlZUhvc3RQcm94
eT4gbV9hbmltYXRpb25UaW1lcjsKKyAgICBEcmF3aW5nQXJlYVByb3h5KiBtX2RyYXdpbmdBcmVh
UHJveHk7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllcio+IExheWVyTWFwOworICAgIEludFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0Owor
ICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKworICAgIE1lc3NhZ2VRdWV1ZTxMYXllclRyZWVN
ZXNzYWdlVG9SZW5kZXJlcj4gbV9tZXNzYWdlc1RvUmVuZGVyZXI7CisgICAgdm9pZCBwdXNoVXBk
YXRlVG9RdWV1ZShQYXNzT3duUHRyPExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyPik7CisKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRyPFRleHR1cmVNYXBwZXI+IG1fdGV4dHVy
ZU1hcHBlcjsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCisgICAgdHlwZWRlZiBIYXNoTWFw
PEludFBvaW50LCBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gPiBUaWxlZEltYWdlOworICAgIFRleHR1
cmVNYXBwZXJOb2RlOjpOb2RlUmVjdE1hcCBtX25vZGVWaXN1YWxDb250ZW50c1JlY3RNYXA7Cisg
ICAgSGFzaE1hcDxpbnQsIGludD4gbV90aWxlVG9Ob2RlVGlsZTsKKyAgICBpbnQgcmVtb3RlVGls
ZUlEVG9Ob2RlVGlsZUlEKGludCB0aWxlSUQpIGNvbnN0OworICAgIEhhc2hNYXA8aW50NjRfdCwg
VGlsZWRJbWFnZT4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7CisKKyAgICB2b2lkIHNjaGVk
dWxlV2ViVmlld1VwZGF0ZSgpOworICAgIHZvaWQgc3luY2hyb25pemVWaWV3cG9ydCgpOworICAg
IHZvaWQgZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRSb290TGF5ZXJJRChX
ZWJMYXllcklEKTsKKyAgICB2b2lkIHN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJ
bmZvJik7CisgICAgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCwgZmxvYXQgc2NhbGUp
OworICAgIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQpOworICAgIHZvaWQgdXBkYXRl
VGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgUUltYWdlJik7CisgICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBjb25zdCBRSW1hZ2Um
KTsKKyAgICB2b2lkIGRlc3Ryb3lJbWFnZShpbnQ2NF90KTsKKyAgICB2b2lkIGFzc2lnbkltYWdl
VG9MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgaW50NjRfdCBpbWFnZUlEKTsKKyAgICB2
b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKKyAg
ICB2b2lkIGVuc3VyZUxheWVyKFdlYkxheWVySUQpOworCisjZW5kaWYKKworICAgIE93blB0cjxH
cmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXll
cnNUb0RlbGV0ZTsKKworICAgIExheWVyTWFwIG1fbGF5ZXJzOworICAgIFdlYkxheWVySUQgbV9y
b290TGF5ZXJJRDsKKyAgICBpbnQgbV9pZDsKK307CisKK30KKworI2VuZGlmIC8vIExheWVyVHJl
ZUhvc3RQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43MDQ2NWIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMyIEBACisjCisjICAg
IENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
IworIyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorIworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKK21lc3NhZ2VzIC0+IExheWVyVHJlZUhvc3RQ
cm94eSB7CisgICAgU3luY0NvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJLaXQ6OldlYkxheWVySW5m
byBsYXllckluZm8pCisgICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCisg
ICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKKyAgICBDcmVhdGVUaWxlRm9y
TGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVw
ZGF0ZUluZm8pCisgICAgVXBkYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0
aWxlSUQsIFdlYktpdDo6VXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFJlbW92ZVRpbGVGb3JM
YXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlEKQorICAgIENyZWF0ZURpcmVjdGx5Q29t
cG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
IGhhbmRsZSkKKyAgICBEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkp
CisgICAgRGlkUmVuZGVyRnJhbWUoKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDY4MGRjZjguLmNlNjRjNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC03OSw2ICs3OSwxMCBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5j
bHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oUVQpCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNRdC5oIgogI2VuZGlmCkBAIC0xNDA1LDYg
KzE0MDksMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVl
SG9zdFByb3h5PigpKSB7CisgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRy
ZWVIb3N0UHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAg
ICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc1dlYkluc3BlY3RvclByb3h5
PigpKSB7CiAgICAgICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eSogaW5zcGVjdG9yID0gdGhpcy0+
aW5zcGVjdG9yKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5
ZXJUcmVlSG9zdFByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVy
VHJlZUhvc3RQcm94eVF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w
YzAzNmU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xh
eWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAtMCwwICsxLDU5NCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorCisjaW5jbHVkZSAiTGF5ZXJU
cmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWFpblRocmVhZC5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VJRC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVk
ZSAidGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAidGV4bWFw
L1RleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCIK
KyNpbmNsdWRlIDxRRGF0ZVRpbWU+CisjaW5jbHVkZSA8Y2Fpcm8vT3BlbkdMU2hpbXMuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyIHsK
K3B1YmxpYzoKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBEZWxldGVMYXllciwKKyAgICAgICAg
Q3JlYXRlVGlsZSwKKyAgICAgICAgUmVtb3ZlVGlsZSwKKyAgICAgICAgVXBkYXRlVGlsZSwKKyAg
ICAgICAgQ3JlYXRlSW1hZ2UsCisgICAgICAgIERlc3Ryb3lJbWFnZSwKKyAgICAgICAgU3luY0xh
eWVyUGFyYW1ldGVycywKKyAgICAgICAgRmx1c2hMYXllckNoYW5nZXMsCisgICAgICAgIFNldFJv
b3RMYXllcgorICAgIH07CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7Cit9Owor
Cit0ZW1wbGF0ZTxjbGFzcyBNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6
OlR5cGUgbWVzc2FnZVR5cGU+CitjbGFzcyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhE
YXRhIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1lc3NhZ2VUeXBlOyB9CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4gY3JlYXRlKGNvbnN0
IE1lc3NhZ2VEYXRhJiBkYXRhID0gTWVzc2FnZURhdGEoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YShkYXRhKSk7
CisgICAgfQorCisgICAgY29uc3QgTWVzc2FnZURhdGEmIGRhdGEoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTGF5ZXJUcmVlTWVz
c2FnZVRvUmVuZGVyZXJXaXRoRGF0YShjb25zdCBNZXNzYWdlRGF0YSYgZGF0YSkKKyAgICAgICAg
OiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgTWVzc2FnZURhdGEgbV9kYXRhOwor
fTsKKworCituYW1lc3BhY2Ugeworc3RydWN0IENyZWF0ZVRpbGVNZXNzYWdlRGF0YSB7CisgICAg
V2ViTGF5ZXJJRCBsYXllcklEOworICAgIGludCByZW1vdGVUaWxlSUQ7CisgICAgZmxvYXQgc2Nh
bGU7Cit9OworCitzdHJ1Y3QgVXBkYXRlVGlsZU1lc3NhZ2VEYXRhIHsKKyAgICBXZWJMYXllcklE
IGxheWVySUQ7CisgICAgaW50IHJlbW90ZVRpbGVJRDsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3Q7
CisgICAgSW50UmVjdCB0YXJnZXRSZWN0OworICAgIFFJbWFnZSBpbWFnZTsKK307CisKK3N0cnVj
dCBSZW1vdmVUaWxlTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKKyAgICBp
bnQgcmVtb3RlVGlsZUlEOworfTsKKworc3RydWN0IENyZWF0ZUltYWdlTWVzc2FnZURhdGEgewor
ICAgIGludDY0X3QgaW1hZ2VJRDsKKyAgICBRSW1hZ2UgaW1hZ2U7Cit9OworCitzdHJ1Y3QgRGVz
dHJveUltYWdlTWVzc2FnZURhdGEgeworICAgIGludDY0X3QgaW1hZ2VJRDsKK307CisKK3N0cnVj
dCBTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySW5mbyBsYXll
ckluZm87Cit9OworCitzdHJ1Y3QgRW1wdHlNZXNzYWdlRGF0YSB7IH07CitzdHJ1Y3QgRGVsZXRl
TGF5ZXJNZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworfTsKK3N0cnVjdCBT
ZXRSb290TGF5ZXJNZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworfTsKKwor
Y2xhc3MgQ3JlYXRlVGlsZU1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2Fn
ZVRvUmVuZGVyZXJXaXRoRGF0YTxDcmVhdGVUaWxlTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyOjpDcmVhdGVUaWxlPiB7IH07CitjbGFzcyBVcGRhdGVUaWxlTWVzc2FnZQor
ICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPFVwZGF0
ZVRpbGVNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlVwZGF0ZVRpbGU+
IHsgfTsKK2NsYXNzIFJlbW92ZVRpbGVNZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJl
ZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8UmVtb3ZlVGlsZU1lc3NhZ2VEYXRhLCBMYXllclRy
ZWVNZXNzYWdlVG9SZW5kZXJlcjo6UmVtb3ZlVGlsZT4geyB9OworY2xhc3MgQ3JlYXRlSW1hZ2VN
ZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERh
dGE8Q3JlYXRlSW1hZ2VNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkNy
ZWF0ZUltYWdlPiB7IH07CitjbGFzcyBEZXN0cm95SW1hZ2VNZXNzYWdlCisgICAgICAgIDogcHVi
bGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8RGVzdHJveUltYWdlTWVzc2Fn
ZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpEZXN0cm95SW1hZ2U+IHsgfTsKK2Ns
YXNzIEZsdXNoTGF5ZXJDaGFuZ2VzTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVN
ZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPEVtcHR5TWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyOjpGbHVzaExheWVyQ2hhbmdlcz4geyB9OworY2xhc3MgU3luY0xheWVyUGFy
YW1ldGVyc01lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXJXaXRoRGF0YTxTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyOjpTeW5jTGF5ZXJQYXJhbWV0ZXJzPiB7IH07CitjbGFzcyBEZWxldGVMYXll
ck1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRo
RGF0YTxEZWxldGVMYXllck1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6
RGVsZXRlTGF5ZXI+IHsgfTsKK2NsYXNzIFNldFJvb3RMYXllck1lc3NhZ2UKKyAgICAgICAgOiBw
dWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxTZXRSb290TGF5ZXJNZXNz
YWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlNldFJvb3RMYXllcj4geyB9Owor
fQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRl
TGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIG5ld0xheWVy
ID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRoaXMpOworICAgIFRleHR1cmVNYXBw
ZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShuZXdMYXllcik7CisgICAgbm9kZS0+
c2V0SUQobGF5ZXJJRCk7CisgICAgbm9kZS0+c2V0VGlsZU93bmVyc2hpcChUZXh0dXJlTWFwcGVy
Tm9kZTo6RXh0ZXJuYWxseU1hbmFnZWRUaWxlcyk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xh
eWVyKTsKK30KKworTGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkoRHJhd2lu
Z0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKKyAgICA6IG1fYW5pbWF0aW9uVGltZXIoUnVu
TG9vcDo6bWFpbigpLCB0aGlzLCAmTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCkK
KyAgICAsIG1fZHJhd2luZ0FyZWFQcm94eShkcmF3aW5nQXJlYVByb3h5KQorICAgICwgbV9yb290
TGF5ZXJJRCgwKQoreworfQorCitMYXllclRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJv
eHkoKQoreworfQorCisvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJlZW50cmFudC4KK3Zv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQoreworICAgIGlmICghbV90
ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6
OmNyZWF0ZSgpOworCisgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICBHcmFwaGljc0xheWVy
KiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CisgICAgaWYgKCFjdXJyZW50Um9vdExh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRv
VGV4dHVyZU1hcHBlck5vZGUoY3VycmVudFJvb3RMYXllcik7CisKKyAgICBpZiAoIW5vZGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIEdMaW50IHZpZXdwb3J0WzRdOworICAgIGdsR2V0SW50ZWdl
cnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0KTsKKyAgICBJbnRSZWN0IHZpZXdwb3J0UmVjdCh2aWV3
cG9ydFswXSwgdmlld3BvcnRbMV0sIHZpZXdwb3J0WzJdLCB2aWV3cG9ydFszXSk7CisgICAgbV90
ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSh2aWV3cG9ydFsyXSwgdmlld3Bv
cnRbM10pKTsKKyAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQo
KSk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisgICAgbV90ZXh0dXJl
TWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKKworICAgIGlmIChjdXJyZW50Um9vdExheWVyLT5vcGFj
aXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRy
aXgpIHsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAg
ICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgICAgIGN1
cnJlbnRSb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwor
ICAgIH0KKworICAgIFRleHR1cmVNYXBwZXJOb2RlOjpOb2RlUmVjdE1hcCBub2RlVmlzdWFsQ29u
dGVudHNSZWN0TWFwOworICAgIGlmIChub2RlLT5jb2xsZWN0VmlzaWJsZUNvbnRlbnRzUmVjdHMo
bm9kZVZpc3VhbENvbnRlbnRzUmVjdE1hcCwgdmlld3BvcnRSZWN0KSkgeworICAgICAgICBUZXh0
dXJlTWFwcGVyTm9kZTo6Tm9kZVJlY3RNYXA6Oml0ZXJhdG9yIGVuZEl0ZXJhdG9yID0gbm9kZVZp
c3VhbENvbnRlbnRzUmVjdE1hcC5lbmQoKTsKKyAgICAgICAgZm9yIChUZXh0dXJlTWFwcGVyTm9k
ZTo6Tm9kZVJlY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbm9kZVZpc3VhbENvbnRlbnRzUmVjdE1hcC5i
ZWdpbigpOyBpdCAhPSBlbmRJdGVyYXRvcjsgKytpdCkgeworICAgICAgICAgICAgV2ViTGF5ZXJJ
RCBsYXllcklEID0gaXQtPmZpcnN0LT5pZCgpOworICAgICAgICAgICAgLy8gYXZvaWQgdXBkYXRp
bmcgbm9uLXN5bmNlZCByb290IGxheWVyCisgICAgICAgICAgICBpZiAoIWxheWVySUQpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0g
SW50UmVjdChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIHNldFZpc2libGVDb250ZW50c1JlY3RG
b3JMYXllcihsYXllcklELCB2aXNpYmxlUmVjdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgbm9k
ZS0+cGFpbnQoKTsKKworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAg
IGlmIChub2RlLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAg
ICAgICB1cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBk
YXRlVmlld3BvcnQoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+dXBkYXRlVmlld3BvcnQo
KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RG
b3JMYXllcihXZWJMYXllcklEIGxheWVySUQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIobGF5ZXJJRCwgcmVjdCks
IG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Cit9CisKK2ludCBMYXllclRy
ZWVIb3N0UHJveHk6OnJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRChpbnQgdGlsZUlEKSBjb25zdAor
eworICAgIEhhc2hNYXA8aW50LCBpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZVRvTm9k
ZVRpbGUuZmluZCh0aWxlSUQpOworICAgIGlmIChpdCA9PSBtX3RpbGVUb05vZGVUaWxlLmVuZCgp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaXQtPnNlY29uZDsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZv
JiBsYXllckluZm8pCit7CisgICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5pZDsKKyAgICBl
bnN1cmVMYXllcihpZCk7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmlu
ZChpZCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworCisgICAgbGF5
ZXItPnNldE5hbWUobGF5ZXJJbmZvLm5hbWUpOworCisgICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRC
eUxheWVyKGxheWVyQnlJRChsYXllckluZm8ucmVwbGljYSkpOworICAgIGxheWVyLT5zZXRNYXNr
TGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5tYXNrKSk7CisKKyAgICBsYXllci0+c2V0UG9zaXRp
b24obGF5ZXJJbmZvLnBvcyk7CisgICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOwor
ICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7CisgICAgbGF5ZXIt
PnNldEFuY2hvclBvaW50KGxheWVySW5mby5hbmNob3JQb2ludCk7CisgICAgbGF5ZXItPnNldENo
aWxkcmVuVHJhbnNmb3JtKGxheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgbGF5ZXIt
PnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllckluZm8uYmFja2ZhY2VWaXNpYmxlKTsKKyAgICBs
YXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsKKyAgICBs
YXllci0+c2V0Q29udGVudHNSZWN0KGxheWVySW5mby5jb250ZW50c1JlY3QpOworICAgIGxheWVy
LT5zZXREcmF3c0NvbnRlbnQobGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7CisKKyAgICBpZiAobGF5
ZXJJbmZvLmltYWdlSXNVcGRhdGVkKQorICAgICAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIs
IGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKworICAgIC8vIE5ldmVyIG1ha2UgdGhl
IHJvb3QgbGF5ZXIgY2xpcC4KKyAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8u
aXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKKyAgICBsYXll
ci0+c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7CisgICAgbGF5ZXItPnNldFByZXNlcnZl
czNEKGxheWVySW5mby5wcmVzZXJ2ZXMzRCk7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBj
aGlsZHJlbjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbmZvLmNoaWxkcmVu
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkxheWVySUQgY2hpbGRJRCA9IGxheWVySW5mby5j
aGlsZHJlbltpXTsKKyAgICAgICAgR3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5SUQoY2hp
bGRJRCk7CisgICAgICAgIGlmICghY2hpbGQpIHsKKyAgICAgICAgICAgIGNoaWxkID0gY3JlYXRl
TGF5ZXIoY2hpbGRJRCkubGVha1B0cigpOworICAgICAgICAgICAgbV9sYXllcnMuYWRkKGNoaWxk
SUQsIGNoaWxkKTsKKyAgICAgICAgfQorICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwor
ICAgIH0KKyAgICBsYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworCisgICAgaWYgKGxheWVy
SW5mby5pc1Jvb3RMYXllciAmJiBtX3Jvb3RMYXllcklEICE9IGlkKQorICAgICAgICBzZXRSb290
TGF5ZXJJRChpZCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVMYXllcihX
ZWJMYXllcklEIGxheWVySUQpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5
SUQobGF5ZXJJRCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF5
ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX2xheWVycy5yZW1vdmUobGF5ZXJJRCk7Cisg
ICAgZGVsZXRlIGxheWVyOworfQorCisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVM
YXllcihXZWJMYXllcklEIGlkKQoreworICAgIC8vIFdlIGhhdmUgdG8gbGVhayB0aGUgbmV3IGxh
eWVyJ3MgcG9pbnRlciBhbmQgbWFuYWdlIGl0IG91cnNlbHZlcywKKyAgICAvLyBiZWNhdXNlIE93
blB0ciBpcyBub3QgY29weWFibGUuCisgICAgaWYgKG1fbGF5ZXJzLmZpbmQoaWQpID09IG1fbGF5
ZXJzLmVuZCgpKQorICAgICAgICBtX2xheWVycy5hZGQoaWQsIGNyZWF0ZUxheWVyKGlkKS5sZWFr
UHRyKCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdExheWVySUQoV2Vi
TGF5ZXJJRCBsYXllcklEKQoreworICAgIGlmIChsYXllcklEID09IG1fcm9vdExheWVySUQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVySUQgPSBsYXllcklEOworCisgICAgbV9y
b290TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICBpZiAoIWxheWVySUQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVy
SUQpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVy
LT5hZGRDaGlsZChsYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVU
aWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAg
ZW5zdXJlTGF5ZXIobGF5ZXJJRCk7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1Rl
eHR1cmVNYXBwZXJOb2RlKGxheWVyQnlJRChsYXllcklEKSk7CisKKyAgICBpbnQgbm9kZVRpbGVJ
RCA9IG5vZGUtPmNyZWF0ZUNvbnRlbnRzVGlsZShzY2FsZSk7CisgICAgbV90aWxlVG9Ob2RlVGls
ZS5hZGQodGlsZUlELCBub2RlVGlsZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQoreworICAgIFRleHR1
cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJ
RCkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IG5vZGVUaWxl
SUQgPSByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQodGlsZUlEKTsKKyAgICBpZiAoIW5vZGVUaWxl
SUQpCisgICAgICAgIHJldHVybjsKKworICAgIG5vZGUtPnJlbW92ZUNvbnRlbnRzVGlsZShub2Rl
VGlsZUlEKTsKKyAgICBtX3RpbGVUb05vZGVUaWxlLnJlbW92ZSh0aWxlSUQpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IFFJbWFnZSYgaW1hZ2UpCit7CisgICAgZW5zdXJlTGF5ZXIobGF5ZXJJRCk7Cisg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGxheWVyQnlJ
RChsYXllcklEKSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQg
bm9kZVRpbGVJRCA9IHJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRCh0aWxlSUQpOworICAgIGlmICgh
bm9kZVRpbGVJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUUltYWdlIGltYWdlUmVmKGltYWdl
KTsKKyAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cisg
ICAgbm9kZS0+c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihub2RlVGlsZUlELCBzb3VyY2VSZWN0
LCB0YXJnZXRSZWN0LCBpbWFnZVJlZi5iaXRzKCksIEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFn
ZUlELCBjb25zdCBRSW1hZ2UmIGltYWdlKQoreworICAgIFRpbGVkSW1hZ2UgdGlsZWRJbWFnZTsK
KyAgICBzdGF0aWMgY29uc3QgaW50IFRpbGVEaW1lbnNpb24gPSAxMDI0OworICAgIGJvb2wgaW1h
Z2VIYXNBbHBoYSA9IGltYWdlLmhhc0FscGhhQ2hhbm5lbCgpOworICAgIEludFJlY3QgaW1hZ2VS
ZWN0KDAsIDAsIGltYWdlLndpZHRoKCksIGltYWdlLmhlaWdodCgpKTsKKyAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGltYWdlLmhlaWdodCgpOyB5ICs9IFRpbGVEaW1lbnNpb24pIHsKKyAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCBpbWFnZS53aWR0aCgpOyB4ICs9IFRpbGVEaW1lbnNpb24pIHsK
KyAgICAgICAgICAgIFFJbWFnZSBzdWJJbWFnZTsKKyAgICAgICAgICAgIEludFJlY3QgcmVjdCh4
LCB5LCBUaWxlRGltZW5zaW9uLCBUaWxlRGltZW5zaW9uKTsKKyAgICAgICAgICAgIHJlY3QuaW50
ZXJzZWN0KGltYWdlUmVjdCk7CisgICAgICAgICAgICBpZiAoUVNpemUocmVjdC5zaXplKCkpID09
IGltYWdlLnNpemUoKSkKKyAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2UuY29weShyZWN0KTsK
KyAgICAgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlTWFw
cGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChyZWN0LnNp
emUoKSwgIWltYWdlSGFzQWxwaGEpOworICAgICAgICAgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVu
dHMoaW1hZ2VIYXNBbHBoYSA/IEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQgOiBCaXRtYXBUZXh0
dXJlOjpCR1JGb3JtYXQsIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVjdC5zaXplKCkpLCBz
dWJJbWFnZS5iaXRzKCkpOworICAgICAgICAgICAgdGlsZWRJbWFnZS5hZGQocmVjdC5sb2NhdGlv
bigpLCB0ZXh0dXJlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
cy5hZGQoaW1hZ2VJRCwgdGlsZWRJbWFnZSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQoreworICAgIG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OmFzc2lnbkltYWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFnZUlE
KQoreworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShs
YXllcik7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWltYWdl
SUQpIHsKKyAgICAgICAgbm9kZS0+Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVz
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGbG9hdFNpemUgc2l6ZShsYXllci0+
c2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0KGxheWVyLT5jb250ZW50c1JlY3Qo
KSk7CisgICAgZmxvYXQgaG9yaXpvbnRhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC53aWR0aCgpIC8g
c2l6ZS53aWR0aCgpOworICAgIGZsb2F0IHZlcnRpY2FsRmFjdG9yID0gY29udGVudHNSZWN0Lmhl
aWdodCgpIC8gc2l6ZS5oZWlnaHQoKTsKKyAgICBIYXNoTWFwPGludDY0X3QsIFRpbGVkSW1hZ2U+
OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7
CisgICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBUaWxlZEltYWdlOjppdGVyYXRvciBlbmRUaWxlSXRlcmF0b3IgPSBp
dC0+c2Vjb25kLmVuZCgpOworICAgIGZvciAoVGlsZWRJbWFnZTo6aXRlcmF0b3IgdGlsZUl0ID0g
aXQtPnNlY29uZC5iZWdpbigpOyB0aWxlSXQgIT0gZW5kVGlsZUl0ZXJhdG9yOyArK3RpbGVJdCkg
eworICAgICAgICBGbG9hdFJlY3Qgc291cmNlUmVjdChGbG9hdFBvaW50KHRpbGVJdC0+Zmlyc3Qp
LCBGbG9hdFNpemUodGlsZUl0LT5zZWNvbmQtPnNpemUoKSkpOworICAgICAgICBGbG9hdFJlY3Qg
dGFyZ2V0UmVjdChzb3VyY2VSZWN0LngoKSAqIGhvcml6b250YWxGYWN0b3IgKyBjb250ZW50c1Jl
Y3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LnkoKSAqIHZl
cnRpY2FsRmFjdG9yICsgY29udGVudHNSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc291cmNlUmVjdC53aWR0aCgpICogaG9yaXpvbnRhbEZhY3RvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQoKSAqIHZlcnRpY2FsRmFjdG9yKTsK
KyAgICAgICAgaW50IG5ld1RpbGVJRCA9IG5vZGUtPmNyZWF0ZUNvbnRlbnRzVGlsZSgxLjApOwor
ICAgICAgICBub2RlLT5zZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShuZXdUaWxlSUQsIEludFJlY3Qoc291cmNlUmVjdCksIHRhcmdldFJlY3QsIHRpbGVJ
dC0+c2Vjb25kLmdldCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpm
bHVzaExheWVyQ2hhbmdlcygpCit7CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlKEZsb2F0UmVjdCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmVuc3VyZVJv
b3RMYXllcigpCit7CisgICAgaWYgKG1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisgICAg
bV9yb290TGF5ZXIgPSBjcmVhdGVMYXllcihJbnZhbGlkV2ViTGF5ZXJJRCk7CisgICAgbV9yb290
TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3
c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50M0QoMCwgMCwgMCkpOworCisgICAgLy8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZl
IHplcm8gc2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1pemVkIG91dC4KKyAgICBtX3Jvb3RMYXll
ci0+c2V0U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworICAgIHRvVGV4dHVyZU1hcHBlck5vZGUobV9yb290
TGF5ZXIuZ2V0KCkpLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jUmVtb3RlQ29udGVudCgpCit7CisgICAg
Ly8gV2UgZW5xdWV1ZSBtZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMg
dGhleSByZXF1aXJlIGFuIGFjdGl2ZSBHTCBjb250ZXh0LgorICAgIGVuc3VyZVJvb3RMYXllcigp
OworCisgICAgd2hpbGUgKE93blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4gbmV4dE1l
c3NhZ2UgPSBtX21lc3NhZ2VzVG9SZW5kZXJlci50cnlHZXRNZXNzYWdlKCkpIHsKKyAgICAgICAg
c3dpdGNoIChuZXh0TWVzc2FnZS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVz
c2FnZVRvUmVuZGVyZXI6OlNldFJvb3RMYXllcjogeworICAgICAgICAgICAgY29uc3QgU2V0Um9v
dExheWVyTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxTZXRSb290TGF5ZXJNZXNzYWdl
Kj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAgICAgICAgICBzZXRSb290TGF5ZXJJ
RChkYXRhLmxheWVySUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpEZWxldGVMYXllcjogeworICAgICAg
ICAgICAgY29uc3QgRGVsZXRlTGF5ZXJNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PERl
bGV0ZUxheWVyTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAg
ICAgZGVsZXRlTGF5ZXIoZGF0YS5sYXllcklEKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6U3luY0xheWVy
UGFyYW1ldGVyczogeworICAgICAgICAgICAgY29uc3QgU3luY0xheWVyUGFyYW1ldGVyc01lc3Nh
Z2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8U3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2UqPihu
ZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIHN5bmNMYXllclBhcmFtZXRl
cnMoZGF0YS5sYXllckluZm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpDcmVhdGVUaWxlOiB7CisgICAg
ICAgICAgICBjb25zdCBDcmVhdGVUaWxlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxD
cmVhdGVUaWxlTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAg
ICAgY3JlYXRlVGlsZShkYXRhLmxheWVySUQsIGRhdGEucmVtb3RlVGlsZUlELCBkYXRhLnNjYWxl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRy
ZWVNZXNzYWdlVG9SZW5kZXJlcjo6UmVtb3ZlVGlsZTogeworICAgICAgICAgICAgY29uc3QgUmVt
b3ZlVGlsZU1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8UmVtb3ZlVGlsZU1lc3NhZ2Uq
PihuZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIHJlbW92ZVRpbGUoZGF0
YS5sYXllcklELCBkYXRhLnJlbW90ZVRpbGVJRCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlVwZGF0ZVRp
bGU6IHsKKyAgICAgICAgICAgIGNvbnN0IFVwZGF0ZVRpbGVNZXNzYWdlRGF0YSYgZGF0YSA9IHN0
YXRpY19jYXN0PFVwZGF0ZVRpbGVNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7
CisgICAgICAgICAgICB1cGRhdGVUaWxlKGRhdGEubGF5ZXJJRCwgZGF0YS5yZW1vdGVUaWxlSUQs
IGRhdGEuc291cmNlUmVjdCwgZGF0YS50YXJnZXRSZWN0LCBkYXRhLmltYWdlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9S
ZW5kZXJlcjo6Q3JlYXRlSW1hZ2U6IHsKKyAgICAgICAgICAgIGNvbnN0IENyZWF0ZUltYWdlTWVz
c2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxDcmVhdGVJbWFnZU1lc3NhZ2UqPihuZXh0TWVz
c2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGNyZWF0ZUltYWdlKGRhdGEuaW1hZ2VJ
RCwgZGF0YS5pbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkRlc3Ryb3lJbWFnZTogeworICAgICAg
ICAgICAgY29uc3QgQ3JlYXRlSW1hZ2VNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PENy
ZWF0ZUltYWdlTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAg
ICAgZGVzdHJveUltYWdlKGRhdGEuaW1hZ2VJRCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkZsdXNoTGF5
ZXJDaGFuZ2VzOgorICAgICAgICAgICAgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
cHVzaFVwZGF0ZVRvUXVldWUoUGFzc093blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4g
bWVzc2FnZSkKK3sKKyAgICBtX21lc3NhZ2VzVG9SZW5kZXJlci5hcHBlbmQobWVzc2FnZSk7Cisg
ICAgdXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIENyZWF0ZVRpbGVNZXNzYWdlRGF0YSBkYXRhOwor
ICAgIGRhdGEubGF5ZXJJRCA9IGxheWVySUQ7CisgICAgZGF0YS5yZW1vdGVUaWxlSUQgPSB0aWxl
SUQ7CisgICAgZGF0YS5zY2FsZSA9IHVwZGF0ZUluZm8udXBkYXRlU2NhbGVGYWN0b3I7CisgICAg
cHVzaFVwZGF0ZVRvUXVldWUoQ3JlYXRlVGlsZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7CisgICAg
dXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mbyk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBV
cGRhdGVUaWxlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySUQgPSBsYXllcklEOwor
ICAgIGRhdGEucmVtb3RlVGlsZUlEID0gdGlsZUlEOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKHVwZGF0ZUluZm8uYml0bWFwSGFu
ZGxlKTsKKyAgICBkYXRhLmltYWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKS5jb3B5KCk7Cisg
ICAgZGF0YS5zb3VyY2VSZWN0ID0gSW50UmVjdChJbnRQb2ludDo6emVybygpLCB1cGRhdGVJbmZv
LnVwZGF0ZVJlY3RCb3VuZHMuc2l6ZSgpKTsKKyAgICBkYXRhLnRhcmdldFJlY3QgPSB1cGRhdGVJ
bmZvLnVwZGF0ZVJlY3RCb3VuZHM7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoVXBkYXRlVGlsZU1l
c3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1v
dmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpCit7CisgICAgUmVtb3ZlVGls
ZU1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0YS5sYXllcklEID0gbGF5ZXJJRDsKKyAgICBkYXRh
LnJlbW90ZVRpbGVJRCA9IHRpbGVJRDsKKyAgICBwdXNoVXBkYXRlVG9RdWV1ZShSZW1vdmVUaWxl
TWVzc2FnZTo6Y3JlYXRlKGRhdGEpKTsKK30KKworCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
ZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEIGlkKQoreworICAgIERlbGV0ZUxheWVy
TWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySUQgPSBpZDsKKyAgICBwdXNoVXBkYXRl
VG9RdWV1ZShEZWxldGVMYXllck1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEIGlkKQor
eworICAgIFNldFJvb3RMYXllck1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0YS5sYXllcklEID0g
aWQ7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoU2V0Um9vdExheWVyTWVzc2FnZTo6Y3JlYXRlKGRh
dGEpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNDb21wb3NpdGluZ0xheWVy
U3RhdGUoY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIFN5bmNMYXllclBhcmFtZXRl
cnNNZXNzYWdlRGF0YSBkYXRhOworICAgIGRhdGEubGF5ZXJJbmZvID0gaW5mbzsKKyAgICBwdXNo
VXBkYXRlVG9RdWV1ZShTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZTo6Y3JlYXRlKGRhdGEpKTsK
K30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKCkKK3sKKyAgICBt
X2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVIb3N0OjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkt
PnBhZ2VJRCgpKTsKKyAgICBwdXNoVXBkYXRlVG9RdWV1ZShGbHVzaExheWVyQ2hhbmdlc01lc3Nh
Z2U6OmNyZWF0ZSgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZURpcmVj
dGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgQ3JlYXRlSW1hZ2VNZXNzYWdlRGF0YSBkYXRh
OworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlKGhhbmRsZSk7CisgICAgZGF0YS5pbWFnZUlEID0ga2V5OworICAgIGRhdGEuaW1hZ2Ug
PSBiaXRtYXAtPmNyZWF0ZVFJbWFnZSgpLmNvcHkoKTsKKyAgICBwdXNoVXBkYXRlVG9RdWV1ZShD
cmVhdGVJbWFnZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCit7Cisg
ICAgRGVzdHJveUltYWdlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmltYWdlSUQgPSBrZXk7
CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoRGVzdHJveUltYWdlTWVzc2FnZTo6Y3JlYXRlKGRhdGEp
KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAg
ICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWpl
Y3RvcnlWZWN0b3IpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxl
KGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlKQoreworICAgIG1fdmlzaWJsZUNvbnRl
bnRzUmVjdCA9IHJlY3Q7CisgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisgICAgbV9kcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
SG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUocmVjdCwgc2NhbGUpLCBtX2RyYXdp
bmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5w
cm8KaW5kZXggY2ZkMjZlZi4uZTU5ZWY5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTI5LDYgKzI5LDgg
QEAgV0VCS0lUMV9TT1VSQ0VTX1NIQVJFRF9XSVRIX1dFQktJVDIgPSBcCiBXRUJLSVQyX0dFTkVS
QVRFRF9IRUFERVJTID0gXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvQXV0
aGVudGljYXRpb25NYW5hZ2VyTWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9T
T1VSQ0VTX0RJUi9Eb3dubG9hZFByb3h5TWVzc2FnZXMuaCBcCisgICAgJCRXRUJLSVQyX0dFTkVS
QVRFRF9TT1VSQ0VTX0RJUi9MYXllclRyZWVIb3N0TWVzc2FnZXMuaCBcCisgICAgJCRXRUJLSVQy
X0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9MYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIFwKICAg
ICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVy
TWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5D
b250cm9sbGVyUHJveHlNZXNzYWdlcy5oIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJD
RVNfRElSL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBcCkBAIC02Nyw2ICs2OSw4
IEBAIFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVMgPSBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRF
RF9TT1VSQ0VTX0RJUi9Eb3dubG9hZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRX
RUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9EcmF3aW5nQXJlYU1lc3NhZ2VSZWNlaXZlci5j
cHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRHJhd2luZ0FyZWFQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAorICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19E
SVIvTGF5ZXJUcmVlSG9zdE1lc3NhZ2VSZWNlaXZlci5jcHAgXAorICAgICQkV0VCS0lUMl9HRU5F
UkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBc
CiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9OUE9iamVjdE1lc3NhZ2VSZWNl
aXZlck1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNF
U19ESVIvUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRX
RUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5Qcm9jZXNzTWVzc2FnZVJlY2VpdmVy
LmNwcCBcCkBAIC0xNjIsNiArMTY2LDcgQEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL1dlYkdy
YXBoaWNzQ29udGV4dC5oIFwKICAgICBTaGFyZWQvV2ViSGl0VGVzdFJlc3VsdC5oIFwKICAgICBT
aGFyZWQvV2ViSW1hZ2UuaCBcCisgICAgU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBcCiAgICAg
U2hhcmVkL1dlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCBcCiAgICAgU2hhcmVkL1dlYk51bWJlci5o
IFwKICAgICBTaGFyZWQvV2ViT3BlblBhbmVsUGFyYW1ldGVycy5oIFwKQEAgLTMxOCw2ICszMjMs
NyBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVycm9y
cy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQu
aCBcCisgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmggXAog
ICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggXAogICAg
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBc
CkBAIC00MDEsNiArNDA3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVkL1dlYkhpdFRlc3RS
ZXN1bHQuY3BwIFwKICAgICBTaGFyZWQvV2ViS2V5Ym9hcmRFdmVudC5jcHAgXAogICAgIFNoYXJl
ZC9XZWJJbWFnZS5jcHAgXAorICAgIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBcCiAgICAg
U2hhcmVkL1dlYk1vdXNlRXZlbnQuY3BwIFwKICAgICBTaGFyZWQvV2ViT3BlblBhbmVsUGFyYW1l
dGVycy5jcHAgXAogICAgIFNoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBcCkBA
IC00ODgsNiArNDk1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZENsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhv
c3RQcm94eVF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1RvdWNoVmlld0ludGVyZmFjZS5jcHAg
XAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKQEAgLTU2OCw2ICs1NzYsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xp
ZW50LmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVy
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDIxOGYyZmYuLjZm
ZTkyZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcApAQCAtMjUsMTMgKzI1LDEzIEBACiAK
ICNpbmNsdWRlICJBbmltYXRpb24uaCIKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKLSNpbmNs
dWRlICJEcmF3aW5nQXJlYU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisj
aW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZS5oIgogI2luY2x1ZGUgInRleHQvQ1N0cmluZy5oIgogI2luY2x1ZGUgPEhhc2hNYXAuaD4K
QEAgLTU4LDEyICs1OCw2IEBAIFdlYkdyYXBoaWNzTGF5ZXIqIFdlYkdyYXBoaWNzTGF5ZXI6Omxh
eWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQgaWQpCiAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiB9
CiAKLXN0YXRpYyBWZWN0b3I8V2ViTGF5ZXJJRD4mIGRlbGV0ZWRMYXllcklEcygpCi17Ci0gICAg
c3RhdGljIFZlY3RvcjxXZWJMYXllcklEPiBsYXllcnM7Ci0gICAgcmV0dXJuIGxheWVyczsKLX0K
LQogc3RhdGljIFdlYkxheWVySUQgdG9XZWJMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQog
ewogICAgIHJldHVybiBsYXllciA/IHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPmlkKCkgOiAw
OwpAQCAtNzksNjcgKzczLDkxIEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6bm90aWZ5Q2hhbmdl
KCkKIFdlYkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVu
dCogY2xpZW50KQogICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCiAgICAgLCBtX25lZWRzRGlz
cGxheShmYWxzZSkKLSAgICAsIG1fbW9kaWZpZWQoZmFsc2UpCisgICAgLCBtX21vZGlmaWVkKHRy
dWUpCiAgICAgLCBtX2NvbnRlbnROZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX2hhc1BlbmRp
bmdBbmltYXRpb25zKGZhbHNlKQotICAgICwgbV9jb250ZW50U2NhbGUoMS5mKQorICAgICwgbV9p
blVwZGF0ZU1vZGUoZmFsc2UpCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgLCBt
X2xheWVyVHJlZVRpbGVDbGllbnQoMCkKKyAgICAsIG1fbWFpbkJhY2tpbmdTdG9yZShhZG9wdFB0
cihuZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
QmFja2VuZDo6Y3JlYXRlKHRoaXMpKSkpCisjZW5kaWYKIHsKLSAgICAvLyBTdGFydGluZyBsYXll
ciBJRHMgZnJvbSAxMDAwLCB0byBoZWxwIGRldGVjdCBmYXVsdHkgSURzIGVhc2lseS4KLSAgICBz
dGF0aWMgV2ViTGF5ZXJJRCBzSUQgPSAxMDAwOwotICAgIG1fbGF5ZXJJbmZvLmlkID0gKytzSUQ7
CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxlKDEuMCk7CisgICAgc3Rh
dGljIFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOworICAgIG1fbGF5ZXJJbmZvLmlkID0gbmV4
dExheWVySUQrKzsKICAgICBsYXllckJ5SURNYXAoKS5hZGQoaWQoKSwgdGhpcyk7CiB9CiAKIFdl
YkdyYXBoaWNzTGF5ZXI6On5XZWJHcmFwaGljc0xheWVyKCkKIHsKICAgICBsYXllckJ5SURNYXAo
KS5yZW1vdmUoaWQoKSk7Ci0gICAgZGVsZXRlZExheWVySURzKCkuYXBwZW5kKGlkKCkpOworCisg
ICAgLy8gVGhpcyB3b3VsZCB0ZWxsIHRoZSBVSSBwcm9jZXNzIHRvIHJlbGVhc2UgdGhlIGJhY2tp
bmcgc3RvcmUuCisgICAgc2V0Q29udGVudHNUb0ltYWdlKDApOworCisgICAgaWYgKG1fbGF5ZXJU
cmVlVGlsZUNsaWVudCkKKyAgICAgICAgbV9sYXllclRyZWVUaWxlQ2xpZW50LT5kaWREZWxldGVM
YXllcihpZCgpKTsKIH0KIAogYm9vbCBXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjb25z
dCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHsKICAgICBib29sIG9rID0gR3Jh
cGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwotICAgIGlmIChvaykKLSAgICAgICAg
bm90aWZ5Q2hhbmdlKCk7Ci0gICAgcmV0dXJuIG9rOworICAgIGlmICghb2spCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytp
KSB7CisgICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gdG9XZWJHcmFwaGljc0xheWVy
KGNoaWxkcmVuW2ldKTsKKyAgICAgICAgY2hpbGQtPnNldENvbnRlbnRzU2NhbGUobV9jb250ZW50
c1NjYWxlKTsKKyAgICAgICAgY2hpbGQtPm5vdGlmeUNoYW5nZSgpOworICAgIH0KKyAgICBub3Rp
ZnlDaGFuZ2UoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0xheWVy
OjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBHcmFwaGljc0xheWVyOjph
ZGRDaGlsZChsYXllcik7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+bm90aWZ5Q2hh
bmdlKCk7CiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQgaW5kZXgpCiB7CiAgICAg
R3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBpbmRleCk7CisgICAgdG9XZWJH
cmFwaGljc0xheWVyKGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgbm90aWZ5Q2hhbmdlKCk7
CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVy
KiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKICAgICBHcmFwaGljc0xheWVyOjph
ZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5
ZXIpLT5ub3RpZnlDaGFuZ2UoKTsKICAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAogdm9pZCBXZWJH
cmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGlj
c0xheWVyKiBzaWJsaW5nKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5
ZXIsIHNpYmxpbmcpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPm5vdGlmeUNoYW5n
ZSgpOwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCiBib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnJl
cGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hp
bGQpCiB7CiAgICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGls
ZCwgbmV3Q2hpbGQpOwotCi0gICAgaWYgKG9rKQotICAgICAgICBub3RpZnlDaGFuZ2UoKTsKLSAg
ICByZXR1cm4gb2s7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG5v
dGlmeUNoYW5nZSgpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihvbGRDaGlsZCktPm5vdGlmeUNo
YW5nZSgpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPm5vdGlmeUNoYW5nZSgp
OworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZy
b21QYXJlbnQoKQogeworICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiBwYXJlbnRMYXllciA9IHRv
V2ViR3JhcGhpY3NMYXllcihwYXJlbnQoKSkpCisgICAgICAgIHBhcmVudExheWVyLT5ub3RpZnlD
aGFuZ2UoKTsKICAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7CisKICAgICBu
b3RpZnlDaGFuZ2UoKTsKIH0KIApAQCAtMjQ3LDggKzI2NSw2IEBAIHZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKGNvbnRl
bnRzUmVjdCgpID09IHIpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAg
ICAgc2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Jl
Y3Qocik7CiAgICAgbm90aWZ5Q2hhbmdlKCk7CkBAIC0yNzQsMTUgKzI5MCwzMCBAQCB2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5h
bWUpCiB7CiB9CiAKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3Bs
YXkoKQoreworICAgIHNldENvbnRlbnRzVG9JbWFnZSgwKTsKKyAgICBzZXRDb250ZW50c1RvSW1h
Z2UobV9pbWFnZS5nZXQoKSk7Cit9CisKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZS5nZXQo
KSkKKyAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkxh
eWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKTsKKyAgICBp
ZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gV2UgYWRvcHQgZmlyc3QsIGlu
IGNhc2UgdGhpcyBpcyB0aGUgc2FtZSBmcmFtZSAtIHRoYXQgd2F5IHdlIGF2b2lkIGRlc3Ryb3lp
bmcgYW5kIHJlY3JlYXRpbmcgdGhlIGltYWdlLgorICAgIGludDY0X3QgbmV3SUQgPSBjbGllbnQt
PmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoaW1hZ2UpOworICAgIGNsaWVudC0+cmVsZWFzZUltYWdl
QmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworICAgIG5vdGlm
eUNoYW5nZSgpOworICAgIGlmIChuZXdJRCA9PSBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9y
ZUlEKQorICAgICAgICByZXR1cm47CisgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJ
RCA9IG5ld0lEOwogICAgIG1faW1hZ2UgPSBpbWFnZTsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsK
KyAgICBtX2xheWVySW5mby5pbWFnZUlzVXBkYXRlZCA9IHRydWU7CiAgICAgR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKLSAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAog
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIp
CkBAIC0zMDEsNTAgKzMzMiwyOSBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0
ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnNldE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgbV9uZWVkc0Rpc3BsYXkgPSB0cnVlOwotICAgIG5v
dGlmeUNoYW5nZSgpOworICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIEludFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpKTsKIH0K
IAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIG1fbmVlZHNEaXNwbGF5UmVjdC51bml0ZShyZWN0KTsKKyAg
ICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUoSW50UmVjdChyZWN0KSk7CiAgICAgbm90
aWZ5Q2hhbmdlKCk7CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVk
c0Rpc3BsYXkoKQotewotICAgIHNldE5lZWRzRGlzcGxheSgpOwotfQotCiBXZWJMYXllcklEIFdl
YkdyYXBoaWNzTGF5ZXI6OmlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9sYXllckluZm8uaWQ7
CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlkU3luY2hyb25pemUoKQordm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7Ci0gICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLSAgICBtX21vZGlmaWVkID0gZmFsc2U7
Ci0gICAgbV9uZWVkc0Rpc3BsYXlSZWN0ID0gRmxvYXRSZWN0KCk7Ci0gICAgaWYgKG1faGFzUGVu
ZGluZ0FuaW1hdGlvbnMpCi0gICAgICAgIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoV1RGOjpjdXJy
ZW50VGltZSgpKTsKLSAgICBtX2hhc1BlbmRpbmdBbmltYXRpb25zID0gZmFsc2U7Ci19Ci0KLWNv
bnN0IFdlYkxheWVySW5mbyYgV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJJbmZvKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9sYXllckluZm87Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGUoKQotewotICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7
ICsraSkKLSAgICAgICAgY2hpbGRyZW4oKVtpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAg
ICAgICAgY2hpbGRyZW4oKVtpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7CiAgICAgaWYg
KHJlcGxpY2FMYXllcigpKQotICAgICAgICByZXBsaWNhTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5n
U3RhdGUoKTsKKyAgICAgICAgcmVwbGljYUxheWVyKCktPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJl
Y3QpOwogICAgIGlmIChtYXNrTGF5ZXIoKSkKLSAgICAgICAgbWFza0xheWVyKCktPnN5bmNDb21w
b3NpdGluZ1N0YXRlKCk7CisgICAgICAgIG1hc2tMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZShyZWN0KTsKKyAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIH0K
IAogV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQpAQCAtMzUyLDMwICszNjIsMjUgQEAgV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFwaGlj
c0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJH
cmFwaGljc0xheWVyKj4obGF5ZXIpOwogfQogCi1GbG9hdFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6
bmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiB7Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBG
bG9hdFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7Ci0gICAgaWYg
KCFtX25lZWRzRGlzcGxheSkKLSAgICAgICAgcmVjdC5pbnRlcnNlY3QobV9uZWVkc0Rpc3BsYXlS
ZWN0KTsKLSAgICByZXR1cm4gcmVjdDsKLX0KKyAgICBpZiAoIW1fbGF5ZXJUcmVlVGlsZUNsaWVu
dCkKKyAgICAgICAgbV9sYXllclRyZWVUaWxlQ2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgp
OworICAgIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CiAKLVZlY3RvcjxXZWJLaXQ6OldlYkxheWVy
SUQ+IFdlYkdyYXBoaWNzTGF5ZXI6OnRha2VMYXllcnNUb0RlbGV0ZSgpCi17Ci0gICAgVmVjdG9y
PFdlYktpdDo6V2ViTGF5ZXJJRD4gbGF5ZXJzID0gZGVsZXRlZExheWVySURzKCk7Ci0gICAgZGVs
ZXRlZExheWVySURzKCkuY2xlYXIoKTsKLSAgICByZXR1cm4gbGF5ZXJzOwotfQorICAgIGlmICgh
bV9tb2RpZmllZCkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5
bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCi17CiAgICAgbV9sYXllckluZm8u
bmFtZSA9IG5hbWUoKTsKICAgICBtX2xheWVySW5mby5hbmNob3JQb2ludCA9IGFuY2hvclBvaW50
KCk7CiAgICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5
KCk7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9y
bSgpOwogICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsK
ICAgICBtX2xheWVySW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3QoKTsKLSAgICBtX2xh
eWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKKworICAgIC8vIEluIHRoZSBz
aGFkb3cgbGF5ZXIgdHJlZSB3ZSBjcmVhdGUgaW4gdGhlIFVJIHByb2Nlc3MsIGxheWVycyB3aXRo
IGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2VzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0byBkcmF3
IGNvbnRlbnQuCisgICAgLy8gT3RoZXJ3aXNlLCB3ZSdkIGhhdmUgdG8gY2hlY2sgd2hldGhlciBh
biBsYXllciB3aXRoIGRyYXdzQ29udGVudD09ZmFsc2UgaGFzIGEgZGlyZWN0bHkgY29tcG9zaXRl
ZCBpbWFnZSBtdWx0aXBsZSB0aW1lcy4KKyAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBk
cmF3c0NvbnRlbnQoKSB8fCBtX2ltYWdlOwogICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxh
eWVySUQobWFza0xheWVyKCkpOwogICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNr
c1RvQm91bmRzKCk7CiAgICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKQEAgLTM4
MywxMjIgKzM4OCwxNTkgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKQogICAgIG1fbGF5ZXJJbmZvLnBvcyA9IHBvc2l0aW9uKCk7
CiAgICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOwogICAgIG1fbGF5
ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkpOwotICAgIG1fbGF5
ZXJJbmZvLnNpemUgPSBGbG9hdFNpemUoc2l6ZSgpLndpZHRoKCkgKiBtX2NvbnRlbnRTY2FsZSwg
c2l6ZSgpLmhlaWdodCgpICogbV9jb250ZW50U2NhbGUpOworICAgIG1fbGF5ZXJJbmZvLnNpemUg
PSBzaXplKCk7CiAgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAg
bV9jb250ZW50TmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW4u
Y2xlYXIoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7
ICsraSkKICAgICAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uYXBwZW5kKHRvV2ViTGF5ZXJJRChj
aGlsZHJlbigpW2ldKSk7CisKKyAgICBtX2xheWVyVHJlZVRpbGVDbGllbnQtPmRpZFN5bmNDb21w
b3NpdGluZ1N0YXRlRm9yTGF5ZXIobV9sYXllckluZm8pOworICAgIG1fbW9kaWZpZWQgPSBmYWxz
ZTsKKyAgICBtX2xheWVySW5mby5pbWFnZUlzVXBkYXRlZCA9IGZhbHNlOworICAgIGlmIChtX2hh
c1BlbmRpbmdBbmltYXRpb25zKQorICAgICAgICBub3RpZnlBbmltYXRpb25TdGFydGVkKFdURjo6
Y3VycmVudFRpbWUoKSk7CisgICAgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA9IGZhbHNlOwogfQog
Ci1zdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gZGl2aWRlSW50b1RpbGVzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKIHsKLSAgICBWZWN0b3I8RmxvYXRS
ZWN0PiB0aWxlczsKLSAgICBmb3IgKGZsb2F0IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgp
OyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAgIGZvciAoZmxvYXQgeCA9IHJlY3QueCgp
OyB4IDwgcmVjdC5tYXhYKCk7IHggKz0gZ1RpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgICAgIEZs
b2F0UmVjdCB0aWxlKHgsIHksIGdUaWxlRGltZW5zaW9uLCBnVGlsZURpbWVuc2lvbik7Ci0gICAg
ICAgICAgICB0aWxlLmludGVyc2VjdChyZWN0KTsKLSAgICAgICAgICAgIHRpbGVzLmFwcGVuZCh0
aWxlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdGlsZXM7CiB9CiAKLXN0YXRpYyB2
b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5
ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4m
IG91dExheWVycykKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNTY2FsZShmbG9h
dCBzY2FsZSkKIHsKLSAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NM
YXllcihsYXllcik7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
bGF5ZXItPmlzTW9kaWZpZWQoKSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dl
YkdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hpbGRyZW4oKVtpXSk7CisgICAgICAgIGxheWVyLT5zZXRD
b250ZW50c1NjYWxlKHNjYWxlKTsKKyAgICB9CisKKyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2Fs
ZTsKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlICYmIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y29u
dGVudHNTY2FsZSgpID09IHNjYWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBvdXRMYXllcnMu
YXBwZW5kKGxheWVyKTsKLSAgICBvdXRJbmZvLmxheWVycy5hcHBlbmQobGF5ZXItPmxheWVySW5m
bygpKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKKworICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUg
PSBtX21haW5CYWNraW5nU3RvcmUucmVsZWFzZSgpOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9
IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBUaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUt
PnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNl
dFJvb3RMYXllcihib29sIGlzUm9vdCkKK3sKKyAgICBtX2xheWVySW5mby5pc1Jvb3RMYXllciA9
IGlzUm9vdDsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQm
IHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRWaXNpYmxl
UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Cit9CiAKLSAgICBXZWJMYXll
ckluZm8mIGxheWVySW5mbyA9IG91dEluZm8ubGF5ZXJzW291dEluZm8ubGF5ZXJzLnNpemUoKSAt
IDFdOwotICAgIGlmIChsYXllci0+aW1hZ2UoKSkKLSAgICAgICAgbGF5ZXJJbmZvLmRyYXdzQ29u
dGVudCA9IHRydWU7Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fdmlzaWJsZUNvbnRlbnRSZWN0ID0gcmVj
dDsKKyAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPmFkanVzdFZp
c2libGVSZWN0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1
cnNpdmVseShHcmFwaGljc0xheWVyKiByb290TGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dElu
Zm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKK3ZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyb290TGF5ZXIpCisgICAgaWYgKHJl
Y3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CisgICAgbV9tb2RpZmllZCA9IHRydWU7Cisg
ICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmNvbnRleHQsIHJlY3QpOworfQogCi0gICAg
Y29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihyb290TGF5ZXIsIG91dEluZm8sIG91
dExheWVycyk7Ci0gICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihyb290TGF5
ZXItPm1hc2tMYXllcigpLCBvdXRJbmZvLCBvdXRMYXllcnMpOwotICAgIGNvbGxlY3RDb21wb3Np
dGluZ0luZm9SZWN1cnNpdmVseShyb290TGF5ZXItPnJlcGxpY2FMYXllcigpLCBvdXRJbmZvLCBv
dXRMYXllcnMpOwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50
RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3RzKQoreworfQogCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByb290TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseShyb290TGF5ZXItPmNoaWxk
cmVuKClbaV0sIG91dEluZm8sIG91dExheWVycyk7Citib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnRp
bGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIGlmICghbV9pblVw
ZGF0ZU1vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoV2ViTGF5ZXJUcmVlVGls
ZUNsaWVudCogY2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgpKQorICAgICAgICByZXR1cm4g
Y2xpZW50LT5sYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2VuZExheWVyc1RvVUlQcm9jZXNzKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciwgV2ViUGFnZSogd2ViUGFnZSkKK0ludFJlY3Qg
V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKQogewotICAg
IHdlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Ci0gICAgd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMo
KTsKLSAgICBXZWJMYXllclRyZWVJbmZvIGNvbXBvc2l0aW5nSW5mbzsKLSAgICBjb21wb3NpdGlu
Z0luZm8ucm9vdExheWVySUQgPSByb290TGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIocm9vdExh
eWVyKS0+aWQoKSA6IDA7Ci0gICAgY29tcG9zaXRpbmdJbmZvLmNvbnRlbnRTY2FsZSA9IDEuMDsK
LSAgICBjb21wb3NpdGluZ0luZm8uZGVsZXRlZExheWVySURzID0gV2ViR3JhcGhpY3NMYXllcjo6
dGFrZUxheWVyc1RvRGVsZXRlKCk7Ci0gICAgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiBsYXll
cnM7Ci0gICAgaWYgKHJvb3RMYXllcikKLSAgICAgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb1Jl
Y3Vyc2l2ZWx5KHJvb3RMYXllciwgY29tcG9zaXRpbmdJbmZvLCBsYXllcnMpOworICAgIGlmICht
X2ltYWdlKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIHJldHVybiBJbnRSZWN0KDAs
IDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworfQogCi0gICAgaWYgKGNvbXBv
c2l0aW5nSW5mby5kZWxldGVkTGF5ZXJJRHMuaXNFbXB0eSgpICYmIGNvbXBvc2l0aW5nSW5mby5s
YXllcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CitJbnRSZWN0IFdlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKQoreworICAgIHJldHVybiBtX3Zpc2li
bGVDb250ZW50UmVjdDsKK30KIAotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdB
cmVhUHJveHk6OlN5bmNDb21wb3NpdGluZ0xheWVycyhjb21wb3NpdGluZ0luZm8pKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdl
YkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJzW2ldOwotICAgICAgICBGbG9hdFJlY3QgdXBk
YXRlUmVjdCA9IGxheWVyLT5uZWVkc0Rpc3BsYXlSZWN0KCk7Ci0KLSAgICAgICAgbGF5ZXItPmRp
ZFN5bmNocm9uaXplKCk7Ci0KLSAgICAgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUmVmUHRyPEltYWdlPiBkaXJlY3RJbWFnZSA9
IGxheWVyLT5pbWFnZSgpOwotICAgICAgICBpZiAoZGlyZWN0SW1hZ2UpCi0gICAgICAgICAgICB1
cGRhdGVSZWN0ID0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpOwotICAgICAgICBlbHNlIGlmICghbGF5
ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgVmVj
dG9yPEZsb2F0UmVjdD4gdGlsZVJlY3RzID0gZGl2aWRlSW50b1RpbGVzKHVwZGF0ZVJlY3QpOwot
ICAgICAgICBmb3IgKHNpemVfdCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCB0aWxlUmVjdHMu
c2l6ZSgpOyArK3RpbGVJbmRleCkgewotICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCA9IHRpbGVSZWN0c1t0aWxlSW5kZXhdOwotICAgICAgICAgICAgSW50UmVjdCBlbmNsb3Np
bmdVcGRhdGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh0aWxlUmVjdCk7Ci0KLSAgICAgICAgICAg
IFdlYkxheWVyVXBkYXRlSW5mbyBjaHVuayhlbmNsb3NpbmdVcGRhdGVSZWN0KTsKLSAgICAgICAg
ICAgIGNodW5rLmxheWVySUQgPSB1aW50MzJfdChsYXllci0+aWQoKSk7Ci0gICAgICAgICAgICBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNo
YXJlYWJsZShjaHVuay5yZWN0LnNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhh
KTsKLSAgICAgICAgICAgIGlmICghYml0bWFwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAgICAgaWYgKCFiaXRtYXAtPmNyZWF0ZUhhbmRsZShjaHVuay5iaXRtYXBIYW5kbGUp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRGT1JNKFFUKQotICAgICAgICAg
ICAgUUltYWdlIHRpbGVJbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCk7Ci0gICAgICAgICAg
ICB0aWxlSW1hZ2UuZmlsbCgwKTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBRUGFp
bnRlciBwYWludGVyKCZ0aWxlSW1hZ2UpOwotICAgICAgICAgICAgICAgIHBhaW50ZXIudHJhbnNs
YXRlKC10aWxlUmVjdC54KCksIC10aWxlUmVjdC55KCkpOwotICAgICAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KCZwYWludGVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlyZWN0
SW1hZ2UpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGRpcmVjdEltYWdl
LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBsYXllci0+Y29udGVudHNSZWN0KCksIEZsb2F0
UmVjdCgwLCAwLCBkaXJlY3RJbWFnZS0+d2lkdGgoKSwgZGlyZWN0SW1hZ2UtPmhlaWdodCgpKSk7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBsYXllci0+cGFpbnRH
cmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgZW5jbG9zaW5nVXBkYXRlUmVjdCk7Ci0gICAg
ICAgICAgICB9Ci0jZW5kaWYKK0NvbG9yIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0
b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGVudHNPcGFxdWUo
KSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIAotICAgICAgICAgICAgd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6VXBkYXRlQ29tcG9zaXRpbmdM
YXllckNvbnRlbnQoY2h1bmspKTsKLSAgICAgICAgfQorfQordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7
CisgICAgbV9tb2RpZmllZCA9IHRydWU7CisgICAgaWYgKFdlYkxheWVyVHJlZVRpbGVDbGllbnQq
IGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5jcmVhdGVU
aWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbyk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQor
eworICAgIG1fbW9kaWZpZWQgPSB0cnVlOworICAgIGlmIChXZWJMYXllclRyZWVUaWxlQ2xpZW50
KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+dXBkYXRl
VGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKK3sKKyAgICBtX21vZGlmaWVkID0gdHJ1ZTsKKyAg
ICBpZiAoV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVu
dCgpKQorICAgICAgICBjbGllbnQtPnJlbW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKK30KKwordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlQnVmZmVyc1JlY3Vyc2l2ZWx5KCkKK3sKKyAg
ICBtX21haW5CYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHRoaXMtPmNoaWxkcmVuKClbaV0p
OworICAgICAgICBsYXllci0+dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSgpOwogICAgIH0K
IH0KIAorV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJUcmVl
VGlsZUNsaWVudCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGF5ZXJUcmVlVGlsZUNsaWVudCkKKyAg
ICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlVGlsZUNsaWVudDsKKyAgICBXZWJHcmFwaGljc0xheWVy
KiBwYXJlbnQgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+cGFyZW50KCkpOworICAgIGlmICgh
cGFyZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gcGFyZW50LT5sYXllclRyZWVU
aWxlQ2xpZW50KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1
ZmZlcnMoKQoreworICAgIC8vIEJhY2tpbmctc3RvcmVzIGZvciBkaXJlY3RseSBjb21wb3NpdGVk
IGltYWdlcyBpcyBoYW5kbGVkIGluIExheWVyVHJlZUhvc3QuCisgICAgaWYgKG1faW1hZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xp
ZW50KCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2luVXBkYXRl
TW9kZSA9IHRydWU7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygp
OworICAgIG1faW5VcGRhdGVNb2RlID0gZmFsc2U7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgUGFz
c093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5
ZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYkdyYXBoaWNz
TGF5ZXIoY2xpZW50KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCmluZGV4IGFkNjAyMWUuLmFjMDU1
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCkBAIC0yNywxOSArMjcsNDAgQEAKICNpbmNsdWRl
ICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJp
dG1hcC5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRC
YWNraW5nU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlVwZGF0
ZUluZm8uaCIKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzcy5oIgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKLWNsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFdlYkxheWVyVHJlZVRpbGVDbGllbnQg
eworcHVibGljOgorICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVw
ZGF0ZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwg
aW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKSA9IDA7CisgICAgdmlydHVhbCBib29sIGxh
eWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludDY0
X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRpZERlbGV0ZUxheWVyKFdlYkxheWVySUQpID0gMDsKK307CiB9
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR3JhcGhpY3NMYXllciA6IHB1Ymxp
YyBXZWJDb3JlOjpHcmFwaGljc0xheWVyIHsKK2NsYXNzIFdlYkdyYXBoaWNzTGF5ZXIgOiBwdWJs
aWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllcgorI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQor
ICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAor
ICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZUNsaWVudAorI2VuZGlmCit7CiBwdWJsaWM6CiAgICAgV2ViR3JhcGhpY3NMYXll
cihHcmFwaGljc0xheWVyQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+V2ViR3JhcGhpY3NMYXllcigp
OwpAQCAtNzMsMTMgKzk0LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgp
OwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAg
IHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0Nv
bXBvc2l0aW5nU3RhdGUoKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBJ
bnRSZWN0Jik7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9y
KGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3Rh
dGUoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wpOwogCiAg
ICAgV2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJM
YXllckluZm8mIGxheWVySW5mbygpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlS
ZWN0KCkgY29uc3Q7Ci0gICAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IHRha2VM
YXllcnNUb0RlbGV0ZSgpOwogICAgIHN0YXRpYyBXZWJHcmFwaGljc0xheWVyKiBsYXllckJ5SUQo
V2ViS2l0OjpXZWJMYXllcklEKTsKICAgICBib29sIGlzTW9kaWZpZWQoKSBjb25zdCB7IHJldHVy
biBtX21vZGlmaWVkOyB9CiAgICAgdm9pZCBkaWRTeW5jaHJvbml6ZSgpOwpAQCAtODcsMjEgKzEw
OCw1MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSk7
CiAKICAgICBzdGF0aWMgdm9pZCBpbml0RmFjdG9yeSgpOwotICAgIHN0YXRpYyB2b2lkIHNlbmRM
YXllcnNUb1VJUHJvY2VzcyhXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViS2l0OjpXZWJQYWdl
Kik7CisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAvLyBUaWxlZEJhY2tpbmdT
dG9yZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4o
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3Jl
UGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7CisgICAgdmlydHVh
bCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKKyAgICB2aXJ0dWFs
IEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOworICAgIHZpcnR1YWwgQ29s
b3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKworICAgIC8vIFRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVU
aWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpOworCisgICAgdm9pZCBzZXRM
YXllclRyZWVUaWxlQ2xpZW50KFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50
KSB7IG1fbGF5ZXJUcmVlVGlsZUNsaWVudCA9IGNsaWVudDsgfQorICAgIFdlYktpdDo6V2ViTGF5
ZXJUcmVlVGlsZUNsaWVudCogbGF5ZXJUcmVlVGlsZUNsaWVudCgpIGNvbnN0OworCisgICAgYm9v
bCBpc1JlYWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVRpbGVC
dWZmZXJzUmVjdXJzaXZlbHkoKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOwor
ICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyNlbmRpZgogCiBwcml2YXRlOgogICAg
IFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwotICAgIFJlZlB0cjxXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcD4gbV9iYWNraW5nU3RvcmU7CisgICAgV2ViS2l0OjpXZWJMYXllclRyZWVU
aWxlQ2xpZW50KiBtX2xheWVyVGlsZUNsaWVudDsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7
CiAgICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKLSAgICBib29sIG1fbmVlZHNEaXNw
bGF5OwotICAgIGJvb2wgbV9tb2RpZmllZDsKLSAgICBib29sIG1fY29udGVudE5lZWRzRGlzcGxh
eTsKLSAgICBib29sIG1faGFzUGVuZGluZ0FuaW1hdGlvbnM7Ci0KLSAgICBmbG9hdCBtX2NvbnRl
bnRTY2FsZTsKKyAgICBJbnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRSZWN0OworICAgIGJvb2wgbV9u
ZWVkc0Rpc3BsYXkgOiAxOworICAgIGJvb2wgbV9tb2RpZmllZCA6IDE7CisgICAgYm9vbCBtX2Nv
bnRlbnROZWVkc0Rpc3BsYXkgOiAxOworICAgIGJvb2wgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA6
IDE7CisgICAgYm9vbCBtX2luVXBkYXRlTW9kZSA6IDI7CiAKICAgICB2b2lkIG5vdGlmeUNoYW5n
ZSgpOworCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgV2ViS2l0OjpXZWJMYXll
clRyZWVUaWxlQ2xpZW50KiBtX2xheWVyVHJlZVRpbGVDbGllbnQ7CisgICAgT3duUHRyPFdlYkNv
cmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7CisgICAgT3duUHRyPFdl
YkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOworICAgIGZs
b2F0IG1fY29udGVudHNTY2FsZTsKKyNlbmRpZgogfTsKIAogV2ViR3JhcGhpY3NMYXllciogdG9X
ZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggY2YzMDU3ZC4uOTMwNjU2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAg
LTc4LDYgKzc4LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRp
bmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5j
Q29tcG9zaXRpbmdMYXllcnMoKSA9IDA7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKikgPSAw
OworI2VuZGlmCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKaW5kZXggOTdm
ZjgyNy4uYTliMTNjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKQEAgLTY3Myw1ICs2NzMsMTMgQEAgdm9pZCBEcmF3
aW5nQXJlYUltcGw6OmRpc3BsYXkoVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKICAgICBtX2xhc3RE
aXNwbGF5VGltZSA9IGN1cnJlbnRUaW1lKCk7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKK3ZvaWQgRHJhd2luZ0FyZWFJbXBsOjpk
aWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVj
dGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiBhcmd1bWVudHMpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5kaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoY29ubmVjdGlvbiwg
bWVzc2FnZUlELCBhcmd1bWVudHMpOworfQorI2VuZGlmCisKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWFJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmgKaW5kZXggY2M4YTgwNS4uNWNhNTU0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaApAQCAtNzEsNiArNzEsMTAg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDaGlsZFdpbmRvd0dlb21ldHJ5
VXBkYXRlKGNvbnN0IFdpbmRvd0dlb21ldHJ5Jik7CiAjZW5kaWYKIAorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENv
cmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisjZW5kaWYKKwog
ICAgIC8vIENvcmVJUEMgbWVzc2FnZSBoYW5kbGVycy4KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
QmFja2luZ1N0b3JlU3RhdGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgYm9vbCByZXNw
b25kSW1tZWRpYXRlbHksIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkVXBkYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZGE0MmFlNi4uMDMxYzNmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNw
cApAQCAtMzQsNiArMzQsMTAgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgInF0L0xheWVyVHJlZUhvc3RRdC5oIgor
I2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
QEAgLTQ0LDYgKzQ4LDggQEAgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0PiBMYXllclRyZWVIb3N0
OjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdENBTWFj
OjpjcmVhdGUod2ViUGFnZSk7CiAjZWxpZiBQTEFURk9STShXSU4pICYmIEhBVkUoV0tRQ0EpCiAg
ICAgcmV0dXJuIExheWVyVHJlZUhvc3RDQVdpbjo6Y3JlYXRlKHdlYlBhZ2UpOworI2VsaWYgUExB
VEZPUk0oUVQpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICByZXR1cm4gTGF5ZXJUcmVlSG9z
dFF0OjpjcmVhdGUod2ViUGFnZSk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAppbmRl
eCA2N2M4MDdiLi5hZGFhZDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmgKQEAgLTI5LDEwICsyOSwxNiBAQAogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAorbmFtZXNwYWNl
IENvcmVJUEMgeworY2xhc3MgQXJndW1lbnREZWNvZGVyOworY2xhc3MgQ29ubmVjdGlvbjsKK30K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEludFJlY3Q7Ci0gICAgY2xhc3MgSW50
U2l6ZTsKLSAgICBjbGFzcyBHcmFwaGljc0xheWVyOworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNz
IEludFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgR3JhcGhpY3NMYXllcjsKIH0KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC03Miw2ICs3OCwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmlu
ZygpIHsgfQogCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgdmlydHVhbCB2b2lk
IHNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBm
bG9hdCBzY2FsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcihpbnQgbGF5ZXJJRCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciopOworI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4pCiAgICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlQ2hpbGRXaW5kb3dHZW9tZXRyeVVwZGF0ZShjb25zdCBXaW5kb3dHZW9tZXRyeSYp
ID0gMDsKICNlbmRpZgpAQCAtODAsNiArOTQsMTEgQEAgcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0
IExheWVyVHJlZUhvc3QoV2ViUGFnZSopOwogCiAgICAgV2ViUGFnZSogbV93ZWJQYWdlOworCisK
KyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJv
Y2VzczsKKyNlbmRpZgogfTsKIAogI2lmICFQTEFURk9STShXSU4pICYmICFQTEFURk9STShRVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVy
VHJlZUhvc3QubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NmI5MTM5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMjggQEAKKyMKKyMgICAg
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisj
CisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisjICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisjCisKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQor
bWVzc2FnZXMgLT4gTGF5ZXJUcmVlSG9zdCB7CisgICAgU2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9y
TGF5ZXIoaW50IGxheWVySUQsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0KQor
ICAgIFNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoV2ViQ29yZTo6RmxvYXRQ
b2ludCB0cmFqZWN0b3J5VmVjdG9yeSkKKyAgICBTZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2Fs
ZShXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRSZWN0LCBmbG9hdCBzY2FsZSkKKyAgICBSZW5kZXJO
ZXh0RnJhbWUoKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAKaW5kZXggYmFkOWE3ZS4uYzQ4MmU2NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2lu
Z0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERy
YXdpbmdBcmVhLmNwcApAQCAtMTc3LDYgKzE3NywxMSBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWE6
OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRy
YXdpbmdBcmVhUHJveHk6OlJlbW92ZVRpbGUodGlsZUlEKSk7CiB9CiAKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKK3ZvaWQgVGlsZWREcmF3
aW5nQXJlYTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rp
b24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiBhcmd1bWVudHMpCit7Cit9CisjZW5kaWYKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAj
ZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaAppbmRleCAwZDk2OTkzLi4x
NGFlNWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGls
ZWREcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9U
aWxlZERyYXdpbmdBcmVhLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nTGF5ZXJzKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwg
Q29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKICNlbmRpZgog
CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCmluZGV4IGY3OGUxZTcuLmYyMjA0ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTIxNjYsNiArMjE2NiwxNCBAQCB2b2lkIFdlYlBh
Z2U6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENv
cmVJUEM6Ok1lc3NhZwogICAgICAgICAgICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZURyYXdp
bmdBcmVhTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkgJiYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVz
c2FnZUNsYXNzTGF5ZXJUcmVlSG9zdD4oKSkgeworICAgICAgICBpZiAobV9kcmF3aW5nQXJlYSkK
KyAgICAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2Fn
ZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChtZXNzYWdl
SUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzV2ViSW5zcGVjdG9yPigpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
Y3BwCmluZGV4IDU3OGFlMDguLmQ4ZWJhMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0yNSw4ICsy
NSw0MTIgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UXQuaCIKKworI2luY2x1
ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUlE
LmgiCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
UGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKFdlYlBh
Z2UqIHdlYlBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRyZWVIb3N0UXQo
d2ViUGFnZSkpOworfQorCitMYXllclRyZWVIb3N0UXQ6On5MYXllclRyZWVIb3N0UXQoKQorewor
fQorCitMYXllclRyZWVIb3N0UXQ6OkxheWVyVHJlZUhvc3RRdChXZWJQYWdlKiB3ZWJQYWdlKQor
ICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQorICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxl
ZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyNpZiBVU0UoVElMRURf
QkFDS0lOR19TVE9SRSkKKyAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyhmYWxzZSkKKyAgICAs
IG1faXNTdXNwZW5kZWQoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZh
bHNlKQorICAgICwgbV9zaG91bGRTeW5jUm9vdExheWVyKHRydWUpCisgICAgLCBtX2xheWVyRmx1
c2hUaW1lcih0aGlzLCAmTGF5ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKKyAg
ICAsIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUpCit7CisgICAgLy8gQ3JlYXRl
IGEgcm9vdCBsYXllci4KKyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0
aGlzKTsKKyAgICBXZWJHcmFwaGljc0xheWVyKiB3ZWJSb290TGF5ZXIgPSB0b1dlYkdyYXBoaWNz
TGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIHdlYlJvb3RMYXllci0+c2V0Um9vdExheWVy
KHRydWUpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiTGF5ZXJU
cmVlSG9zdFF0IHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3
c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6
ZSgpKTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQud2ViTGF5ZXJJRCA9IHRvV2ViR3JhcGhpY3NM
YXllcih3ZWJSb290TGF5ZXIpLT5pZCgpOworCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworI2lmIFVTRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQorICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldExh
eWVyVHJlZVRpbGVDbGllbnQodGhpcyk7CisjZW5kaWYKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0UXQgbm9uLWNv
bXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFt
X3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpOworICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisKKyAgICBtX3Jv
b3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKTsKKwor
ICAgIGlmIChtX3dlYlBhZ2UtPmhhc1BhZ2VPdmVybGF5KCkpCisgICAgICAgIGNyZWF0ZVBhZ2VP
dmVybGF5TGF5ZXIoKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RRdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJG
bHVzaGluZ0VuYWJsZWQpCit7CisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVk
ID09IGxheWVyRmx1c2hpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxheWVyRmx1c2hpbmdFbmFibGVkOworCisgICAgaWYg
KG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBj
YW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2No
ZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0
aXZlKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0UXQ6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBt
X2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRT
aG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoKQoreworICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZs
dXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3RRdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllcikKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92
ZUFsbENoaWxkcmVuKCk7CisKKyAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxheWVyIHRyZWUg
aGllcmFyY2h5LgorICAgIGlmIChncmFwaGljc0xheWVyKQorICAgICAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RRdDo6aW52YWxpZGF0ZSgpCit7CisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2go
KTsKKworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsK
KyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QocmVjdCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisKKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNjcm9sbE5vbkNvbXBv
c2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpCit7CisgICAgc2V0Tm9uQ29tcG9zaXRlZENv
bnRlbnRzTmVlZERpc3BsYXkoc2Nyb2xsUmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0
Ojpmb3JjZVJlcGFpbnQoKQoreworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RRdDo6c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBu
ZXdTaXplKQoreworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgLy8g
SWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNv
bnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5
IGV4cG9zZWQgYXJlYXMuCisgICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dFNpemUobmV3U2l6ZSk7CisKKyAgICBpZiAobmV3U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0
aCgpKSB7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0
PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRT
aXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0
KSk7CisgICAgfQorCisgICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgp
KQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdT
aXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOworCisgICAgaWYgKG1fcGFnZU92ZXJs
YXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG5ld1NpemUpOwor
CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpk
aWRJbnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsK
KyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRp
ZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKK3sKKyAgICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigp
OworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6
c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkK
K3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygp
Cit7CisgICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUo
KS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKwor
ICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsK
KyAgICByZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZFN5bmND
b21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIoY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUhvc3RQcm94eTo6U3luY0NvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpbmZvKSk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWREZWxldGVMYXllcihXZWJMYXllcklEIGlkKQor
eworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihpZCkpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQor
eworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgIGlmICghbV9pc1ZhbGlk
KQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBp
ZiAobV9pc1N1c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCisgICAgICAgIHJldHVy
bjsKKyNlbmRpZgorCisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsKKyAgICBmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICBpZiAoIW1fc2hvdWxkU3luY0ZyYW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9zaG91bGRTeW5jUm9vdExheWVyKSB7CisgICAgICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRSb290Q29tcG9z
aXRpbmdMYXllcih0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7
CisgICAgICAgIG1fc2hvdWxkU3luY1Jvb3RMYXllciA9IGZhbHNlOworICAgIH0KKworICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRSZW5kZXJGcmFt
ZSgpKTsKKworICAgIGlmICghbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIExldCB0aGUgZHJhd2luZyBhcmVhIGtub3cgdGhhdCB3ZSd2
ZSBkb25lIGEgZmx1c2ggb2YgdGhlIGxheWVyIGNoYW5nZXMuCisgICAgc3RhdGljX2Nhc3Q8RHJh
d2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1
c2hMYXllcnMoKTsKKyAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNl
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8
TGF5ZXJUcmVlSG9zdFF0PiopCit7CisgICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsK
K30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQorewor
ICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKKworICAgIG1fcGFnZU92ZXJsYXlMYXll
ciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9w
YWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0UXQgcGFnZSBvdmVybGF5IGNv
bnRlbnQiKTsKKyNlbmRpZgorCisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6
ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0
KCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIo
KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlM
YXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxw
dHI7Cit9CisKK2ludDY0X3QgTGF5ZXJUcmVlSG9zdFF0OjphZG9wdEltYWdlQmFja2luZ1N0b3Jl
KEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gSW52YWxp
ZFdlYkxheWVySUQ7CisgICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7CisKKyAgICBpZiAoIXBpeG1hcCkKKyAgICAgICAgcmV0dXJuIEludmFs
aWRXZWJMYXllcklEOworCisgICAgaW50NjRfdCBrZXkgPSBwaXhtYXAtPmNhY2hlS2V5KCk7Cisg
ICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOworCisgICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKKyAgICAgICAgKysoaXQtPnNlY29uZCk7
CisgICAgICAgIHJldHVybiBrZXk7CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUo
KSwgaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBv
cnRzQWxwaGEgOiAwKTsKKyAgICB7CisgICAgICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7
CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKKyAgICB9CisKKyAgICBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSBoYW5kbGU7CisgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlRGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2Uoa2V5LCBoYW5kbGUpKTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlUmVmQ291bnRzLmFkZChrZXksIDEpOworICAgIHJldHVybiBrZXk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCit7
CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybjsKKyAgICBIYXNoTWFwPGludDY0X3QsIGlu
dD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5k
KGtleSk7CisgICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGl0LT5zZWNvbmQtLTsKKworICAgIGlmIChp
dC0+c2Vjb25kKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlUmVmQ291bnRzLnJlbW92ZShpdCk7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVIb3N0UHJveHk6OkRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXkpKTsK
K30KKworCit2b2lkIExheWVyVHJlZUhvc3RRdDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCit7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFF0Ojpub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpwYWludENvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQ
aGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgaWYgKGdyYXBo
aWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyKSB7CisgICAgICAgIG1fd2Vi
UGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIp
IHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBj
bGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9z
dFF0OjpzaG93RGVidWdCb3JkZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5j
b3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCk7Cit9CisKK2Jvb2wgTGF5
ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENvdW50ZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dSZXBhaW50Q291bnRlcigpOwor
fQorCitib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
Cit2b2lkIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihs
YXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6
OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJ
bmZvKSk7Cit9Cit2b2lkIExheWVyVHJlZUhvc3RRdDo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxh
eWVySUQsIGludCB0aWxlSUQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVIb3N0UHJveHk6OlJlbW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVyKGlu
dCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIFdlYkdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKGxheWVySUQpOwor
ICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJl
Y3QocmVjdCk7CisgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChyZWN0KTsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0
IEludFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlKQoreworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICBpZiAoIWxh
eWVyKQorICAgICAgICByZXR1cm47CisgICAgbGF5ZXItPnNldENvbnRlbnRzU2NhbGUoc2NhbGUp
OworICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0
KCkpLT5zZXRWaXNpYmxlQ29udGVudFJlY3QocmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9p
bnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpy
ZW5kZXJOZXh0RnJhbWUoKQoreworICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOwor
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitib29sIExheWVyVHJlZUhvc3RRdDo6bGF5
ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faXNTdXNw
ZW5kZWQgJiYgIW1fd2FpdGluZ0ZvclVJUHJvY2VzczsKK30KKworI2VuZGlmCisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorI2Vsc2UKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogYm9vbCBMYXllclRy
ZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQpAQCAtMzUsMyArNDM5LDQg
QEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMDExYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgKQEAgLTAs
MCArMSwxMjYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFF0
X2gKKyNkZWZpbmUgTGF5ZXJUcmVlSG9zdFF0X2gKKworI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRl
eHQuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNp
bmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIExheWVyVHJl
ZUhvc3RRdCA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50CisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgICAgICAgICAgICAgICAgICAg
LCBwdWJsaWMgV2ViTGF5ZXJUcmVlVGlsZUNsaWVudAorI2VuZGlmCit7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdFF0PiBjcmVhdGUoV2ViUGFnZSopOworICAg
IHZpcnR1YWwgfkxheWVyVHJlZUhvc3RRdCgpOworCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IExheWVyVHJlZUNv
bnRleHQmIGxheWVyVHJlZUNvbnRleHQoKSB7IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOwor
ICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Ny
b2xsT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yY2VSZXBhaW50KCk7CisgICAgdmlydHVh
bCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2
b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VP
dmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworICAgIHZpcnR1
YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRldmljZVNjYWxlRmFjdG9y
RGlkQ2hhbmdlKCkgeyB9CisgICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3Rv
cmUoSW1hZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGlu
dDY0X3QpOworCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IFVwZGF0ZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBp
bnQgdGlsZUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5
ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVVcGRh
dGVzQWxsb3dlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJl
Y3RBbmRTY2FsZShjb25zdCBJbnRSZWN0JiwgZmxvYXQgc2NhbGUpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25z
dCBXZWJMYXllckluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGVsZXRlTGF5ZXIoV2ViTGF5
ZXJJRCk7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3RR
dChXZWJQYWdlKik7CisKK3ByaXZhdGU6CisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAorICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1
aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0Jv
cmRlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkgY29u
c3Q7CisKKyAgICAvLyBMYXllclRyZWVIb3N0UXQKKyAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVybGF5
TGF5ZXIoKTsKKyAgICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgYm9vbCBm
bHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZs
dXNoKCk7CisgICAgdm9pZCBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworICAgIHZvaWQg
c2VuZExheWVyc1RvVUkoKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBt
X3Jvb3RMYXllcjsKKworICAgIC8vIFRoZSBsYXllciB3aGljaCBjb250YWlucyBhbGwgbm9uLWNv
bXBvc2l0ZWQgY29udGVudC4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyOworCisgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXll
ci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgorICAgIE93blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7CisKKyAgICBIYXNoTWFw
PGludDY0X3QsIGludD4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKKworICAg
IGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7CisgICAgYm9vbCBtX2lzVmFs
aWQ7CisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgYm9vbCBtX3dhaXRpbmdGb3JV
SVByb2Nlc3M7CisgICAgYm9vbCBtX2lzU3VzcGVuZGVkOworI2VuZGlmCisgICAgTGF5ZXJUcmVl
Q29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNGcmFtZTsK
KyAgICBib29sIG1fc2hvdWxkU3luY1Jvb3RMYXllcjsKKyAgICB2b2lkIGxheWVyRmx1c2hUaW1l
ckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhvc3RRdD4qKTsKKyAgICBXZWJDb3JlOjpU
aW1lcjxMYXllclRyZWVIb3N0UXQ+IG1fbGF5ZXJGbHVzaFRpbWVyOworICAgIGJvb2wgbV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMYXllclRyZWVI
b3N0UXRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111289</attachid>
            <date>2011-10-17 11:42:38 -0700</date>
            <delta_ts>2011-10-17 13:02:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>103880</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2ZDY2NDUyLi5iZWI1NDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcz
IEBACisyMDExLTEwLTE3ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1F0XVtXSzJdIFN5bmNocm9uaXplIHRpbGluZyB3aXRoIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE1MQorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgorCisg
ICAgICAgIE1ha2UgdGhlIHRpbGVkICJub24tY29tcG9zaXRlZCIgY29udGVudCBhbmQgdGhlIGNv
bXBvc2l0ZWQgbGF5ZXJzIGdvIHRocm91Z2ggdGhlIHNhbWUKKyAgICAgICAgY29kZSBwYXRoIG9u
IFdlYktpdDIuIEluc3RlYWQgb2YgaGF2aW5nIGEgImRyYXdpbmcgYXJlYSIgdGhhdCBoYW5kbGVz
IHRoZSBub24tY29tcG9zaXRlZAorICAgICAgICBjb250ZW50IGFuZCBhIHNlcGVyYXRlIGxheWVy
IHRyZWUsIHdlIHB1dCBldmVyeXRoaW5nIGluIGEgbGF5ZXIgdHJlZSwgd2l0aCB0aGUgbm9uLQor
ICAgICAgICBjb21wb3NpdGVkIGNvbnRlbnQgYmVpbmcgYSBsYXllciBpbiB0aGUgdHJlZS4KKwor
ICAgICAgICBUaGlzIGFsbG93cyBmaXhpbmcgc2V2ZXJhbCBpc3N1ZXMgd2l0aCB3ZWJzaXRlcyB0
aGF0IGhhdmUgbGFyZ2UgY29udGVudCBhcmVhcyB0aGF0IGFyZQorICAgICAgICBjb21wb3NpdGVk
IG9yIG92ZXJsYXAgd2l0aCBjb21wb3NpdGVkIGxheWVycy4KKworICAgICAgICBMYXllci10cmVl
IHN5bmNocm9uaXphdGlvbiBpcyBkb25lIGJ5IHBhc3NpbmcgV2ViS2l0MiBtZXNzYWdlcyBiZXR3
ZWVuIGEgTGF5ZXJUcmVlSG9zdAorICAgICAgICBvbiB0aGUgV2ViUHJvY2VzcyBhbmQgYSBMYXll
clRyZWVIb3N0UHJveHkgb24gdGhlIFVJIHByb2Nlc3MuIEV2ZXJ5IGxheWVyIGluIHRoZSB0cmVl
IGhhcworICAgICAgICBpdHMgb3duIHRpbGVkIGJhY2tpbmcgc3RvcmUsIGFuZCB1c2VzIHRoZSBM
YXllclRyZWVIb3N0IGNvbW11bmljYXRpb24gY2hhbm5lbCB0byBwYXNzCisgICAgICAgIGNvbnRl
bnQgdXAgdG8gdGhlIFVJIHByb2Nlc3MuIFRoZSBVSSBwcm9jZXNzIHdpbGwgbGF0ZXIgY3JlYXRl
cyBpdHMgb3duIEdyYXBoaWNzTGF5ZXIgdHJlZSwKKyAgICAgICAgYmFzZWQgb24gVGV4dHVyZU1h
cHBlciwgd2hpY2ggY2FuIGJlIHBhaW50ZWQgZGlyZWN0bHkgd2l0aCBPcGVuR0wuCisKKyAgICAg
ICAgU2V2ZXJhbCBvcHRpbWl6YXRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBub24tY29tcG9z
aXRlZCBsYXllciBhcyB3ZWxsLCBlLmcuIHNwZWNpZnlpbmcKKyAgICAgICAgYSB0cmFqZWN0b3J5
IGFuZCB1cGRhdGluZyB0aGUgdmlzaWJsZSByZWN0IHRvZ2V0aGVyIHdpdGggdGhlIGNvbnRlbnQg
c2NhbGUuCisKKyAgICAgICAgVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBkaXNhYmxlZCwgYSBzZXBh
cmF0ZSBwYXRjaCB3aWxsIGVuYWJsZSBpdCBhbmQgZ2x1ZSBpdCB0bworICAgICAgICBRVG91Y2hX
ZWJQYWdlLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJvOgorICAgICAgICAqIFBsYXRm
b3JtL0NvcmVJUEMvTWVzc2FnZUlELmg6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQyL21lc3Nh
Z2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9MYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICog
U2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcklu
Zm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9xdC9M
YXllclRyZWVDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0
OjpMYXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6
fkxheWVyVHJlZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojpl
bmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpkZWNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktp
dDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KToKKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVByb3h5Ojp2aWV3cG9ydFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eTo6aXNCYWNraW5nU3RvcmVSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhUHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVj
dG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnJlbW92ZVRp
bGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2Vp
dmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6cGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxl
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6bGF5
ZXJCeUlEKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpyb290TGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6Om5vdGlmeVN5bmNS
ZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd0RlYnVn
Qm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2hvd1JlcGFp
bnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludENv
bnRlbnRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2Vz
LmluOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDogQWRkZWQuCisgICAgICAgICog
V2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6fldlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVQYWludEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNl
dFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0
ZXNBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpsYXllclRyZWVUaWxlQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldExheWVyVHJlZVRpbGVDbGllbnQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RB
bmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3
aW5nQXJlYTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVy
TmV4dFNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UXQ6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZERlbGV0ZUxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRlc3Ryb3lQYWdl
T3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjphZG9wdElt
YWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZWxl
YXNlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6
Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RR
dDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hv
d0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2hvd1Jl
cGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVU
aWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZW1vdmVUaWxlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRl
bnRSZWN0QW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKToKKysKKwogMjAxMS0xMC0xNCAg
SmVzdXMgU2FuY2hlei1QYWxlbmNpYSAgPGplc3VzLnBhbGVuY2lhQG9wZW5ib3NzYS5vcmc+CiAK
ICAgICAgICAgW1F0XVtXSzJdIEltcGxlbWVudCBkZWNpZGVQb2xpY3lGb3JSZXNwb25zZSBpbiBv
dXIgUG9saWN5Q2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNl
cy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8KaW5kZXggZmNlNTljNS4u
YjkzZTc2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybwpAQCAtOTIsNiArOTIsNyBAQCBN
RVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2FnZXMu
aW4gXAogICAgIERvd25sb2FkUHJveHkubWVzc2FnZXMuaW4gXAogICAgIERyYXdpbmdBcmVhUHJv
eHkubWVzc2FnZXMuaW4gXAorICAgIExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBcCiAg
ICAgUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Qcm9jZXNz
Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBc
CkBAIC0xMTYsNiArMTE3LDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViRnVsbFNj
cmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW4gXAogICAgIFdlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gXAorICAg
IFdlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZS9XZWJJbnNw
ZWN0b3IubWVzc2FnZXMuaW4gXAogICAgIFdlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBcCiAg
ICAgV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL01lc3NhZ2VJRC5oCmluZGV4IDEzYjIxODMuLjQ1NTFkN2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgKKysrIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaApAQCAtMzgsNiArMzgsNyBAQCBlbnVt
IE1lc3NhZ2VDbGFzcyB7CiAgICAgTWVzc2FnZUNsYXNzQXV0aGVudGljYXRpb25NYW5hZ2VyLAog
ICAgIE1lc3NhZ2VDbGFzc0RyYXdpbmdBcmVhLAogICAgIE1lc3NhZ2VDbGFzc0luamVjdGVkQnVu
ZGxlLAorICAgIE1lc3NhZ2VDbGFzc0xheWVyVHJlZUhvc3QsCiAgICAgTWVzc2FnZUNsYXNzV2Vi
QXBwbGljYXRpb25DYWNoZU1hbmFnZXIsCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29va2llTWFuYWdl
ciwKICAgICBNZXNzYWdlQ2xhc3NXZWJEYXRhYmFzZU1hbmFnZXIsCkBAIC01NCw2ICs1NSw3IEBA
IGVudW0gTWVzc2FnZUNsYXNzIHsKICAgICAvLyBNZXNzYWdlcyBzZW50IGJ5IHRoZSB3ZWIgcHJv
Y2VzcyB0byB0aGUgVUkgcHJvY2Vzcy4KICAgICBNZXNzYWdlQ2xhc3NEb3dubG9hZFByb3h5LAog
ICAgIE1lc3NhZ2VDbGFzc0RyYXdpbmdBcmVhUHJveHksCisgICAgTWVzc2FnZUNsYXNzTGF5ZXJU
cmVlSG9zdFByb3h5LAogICAgIE1lc3NhZ2VDbGFzc1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
UHJveHksCiAgICAgTWVzc2FnZUNsYXNzV2ViQ29udGV4dCwKICAgICBNZXNzYWdlQ2xhc3NXZWJD
b250ZXh0TGVnYWN5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQy
L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5
CmluZGV4IDZhMmQxOTAuLjZjYzUzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Njcmlw
dHMvd2Via2l0Mi9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtp
dDIvbWVzc2FnZXMucHkKQEAgLTM4Miw2ICszODIsOCBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0
eXBlKToKICAgICAgICAgJ1dlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIn
OiBbXSwKICAgICAgICAgJ1dlYktpdDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rlcic6IFtd
LAogICAgICAgICAnV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAor
ICAgICAgICAnV2ViS2l0OjpXZWJMYXllcklEJzogWyciV2ViTGF5ZXJUcmVlSW5mby5oIiddLAor
ICAgICAgICAnV2ViS2l0OjpXZWJMYXllckluZm8nOiBbJyJXZWJMYXllclRyZWVJbmZvLmgiJ10s
CiAgICAgICAgICdXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAog
ICAgICAgICAnV2ViS2l0OjpXZWJNb3VzZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAg
ICAgJ1dlYktpdDo6V2ViVG91Y2hFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaAppbmRleCA4NjY3Yzk4Li4yZGI1ODRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgKQEAgLTQ3LDYgKzQ3LDggQEAg
cHVibGljOgogICAgIHVpbnQzMl90IGNvbnRleHRJRDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAg
ICBIV05EIHdpbmRvdzsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIHVpbnQzMl90IHdlYkxheWVy
SUQ7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZv
LmNwcAppbmRleCBhMDEyODU1Li5lZGI2MmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkxheWVyVHJlZUluZm8uY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJXZWJMYXll
clRyZWVJbmZvLmgiCiAKKyNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTaGFyZWRN
ZW1vcnkuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKIApAQCAtMzMsMzUg
KzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdm9pZCBXZWJMYXllckluZm86OmVuY29kZShD
b3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgLy8gV2UgaGF2
ZSB0byBkaXZpZGUgaXQgdG8gc2V2ZXJhbCBsaW5lcywgYmVjYXVzZSBDb3JlSVBDOjpJbi9PdXQg
dGFrZXMgYSBtYXhpbXVtIG9mIDEwIGFyZ3VtZW50cy4KLSAgICBlbmNvZGVyLT5lbmNvZGUoQ29y
ZUlQQzo6SW4oaWQsIG5hbWUsIHBhcmVudCwgY2hpbGRyZW4sIGZsYWdzLCByZXBsaWNhLCBtYXNr
KSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNo
aWxkcmVuLCBmbGFncywgcmVwbGljYSwgbWFzaywgaW1hZ2VCYWNraW5nU3RvcmVJRCkpOwogICAg
IGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihwb3MsIHNpemUsIHRyYW5zZm9ybSwgb3BhY2l0
eSwgYW5jaG9yUG9pbnQsIGNoaWxkcmVuVHJhbnNmb3JtLCBjb250ZW50c1JlY3QpKTsKLSAgICBl
bmNvZGVyLT5lbmNvZGUoaW1hZ2VCYWNraW5nU3RvcmUgPyBpbWFnZUJhY2tpbmdTdG9yZS0+c2l6
ZSgpIDogSW50U2l6ZSgpKTsKLQotICAgIGlmICghaW1hZ2VCYWNraW5nU3RvcmUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGltYWdlSGFuZGxlOwotICAg
IGlmIChpbWFnZUJhY2tpbmdTdG9yZS0+Y3JlYXRlSGFuZGxlKGltYWdlSGFuZGxlKSkKLSAgICAg
ICAgaW1hZ2VIYW5kbGUuZW5jb2RlKGVuY29kZXIpOwogfQogCiBib29sIFdlYkxheWVySW5mbzo6
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2ViTGF5ZXJJbmZvJiBp
bmZvKQogewogICAgIC8vIFdlIGhhdmUgdG8gZGl2aWRlIGl0IHRvIHNldmVyYWwgbGluZXMsIGJl
Y2F1c2UgQ29yZUlQQzo6SW4vT3V0IHRha2VzIGEgbWF4aW11bSBvZiAxMCBhcmd1bWVudHMuCi0g
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQsIGluZm8ubmFtZSwg
aW5mby5wYXJlbnQsIGluZm8uY2hpbGRyZW4sIGluZm8uZmxhZ3MsIGluZm8ucmVwbGljYSwgaW5m
by5tYXNrKSkpCisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQs
IGluZm8ubmFtZSwgaW5mby5wYXJlbnQsIGluZm8uY2hpbGRyZW4sIGluZm8uZmxhZ3MsIGluZm8u
cmVwbGljYSwgaW5mby5tYXNrLCBpbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZv
LnBvcywgaW5mby5zaXplLCBpbmZvLnRyYW5zZm9ybSwgaW5mby5vcGFjaXR5LCBpbmZvLmFuY2hv
clBvaW50LCBpbmZvLmNoaWxkcmVuVHJhbnNmb3JtLCBpbmZvLmNvbnRlbnRzUmVjdCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbnRTaXplIGltYWdlQmFja2luZ1N0b3JlU2l6ZTsK
LSAgICBpZiAoIWRlY29kZXItPmRlY29kZShpbWFnZUJhY2tpbmdTdG9yZVNpemUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGltYWdlQmFja2luZ1N0b3JlU2l6ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaW1h
Z2VIYW5kbGU7Ci0gICAgaWYgKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpkZWNvZGUoZGVjb2Rl
ciwgaW1hZ2VIYW5kbGUpKQotICAgICAgICBpbmZvLmltYWdlQmFja2luZ1N0b3JlID0gU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGUoaW1hZ2VIYW5kbGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAppbmRleCBhMGU2OGQzLi4yNTAw
M2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKQEAgLTM0LDYg
KzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
dHlwZWRlZiB1aW50MzJfdCBXZWJMYXllcklEOworZW51bSB7IEludmFsaWRXZWJMYXllcklEID0g
MCB9OwogCiBzdHJ1Y3QgV2ViTGF5ZXJVcGRhdGVJbmZvIHsKICAgICBXZWJMYXllclVwZGF0ZUlu
Zm8oKSB7IH0KQEAgLTU0LDYgKzU1LDcgQEAgc3RydWN0IFdlYkxheWVySW5mbyB7CiAgICAgV2Vi
TGF5ZXJJRCBwYXJlbnQ7CiAgICAgV2ViTGF5ZXJJRCByZXBsaWNhOwogICAgIFdlYkxheWVySUQg
bWFzazsKKyAgICBpbnQ2NF90IGltYWdlQmFja2luZ1N0b3JlSUQ7CiAKICAgICBGbG9hdFBvaW50
IHBvczsKICAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7CkBAIC03MSw2ICs3Myw4IEBAIHN0
cnVjdCBXZWJMYXllckluZm8gewogICAgICAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsK
ICAgICAgICAgICAgIGJvb2wgcHJlc2VydmVzM0QgOiAxOwogICAgICAgICAgICAgYm9vbCBjb250
ZW50TmVlZHNEaXNwbGF5IDogMTsKKyAgICAgICAgICAgIGJvb2wgaW1hZ2VJc1VwZGF0ZWQ6IDE7
CisgICAgICAgICAgICBib29sIGlzUm9vdExheWVyOiAxOwogICAgICAgICB9OwogICAgICAgICB1
bnNpZ25lZCBpbnQgZmxhZ3M7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9xdC9MYXllclRyZWVDb250ZXh0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0
L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKaW5kZXggZjFiZjFiNC4uZDM3ZDc5YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKQEAgLTI2LDQx
ICsyNiwzOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRl
eHQuaCIKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQXJndW1lbnRE
ZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBMYXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0KCkKKyAgICA6IHdlYkxh
eWVySUQoMCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiBMYXllclRyZWVDb250ZXh0
Ojp+TGF5ZXJUcmVlQ29udGV4dCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBMYXllclRyZWVDb250ZXh0OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29u
c3QKK3ZvaWQgTGF5ZXJUcmVlQ29udGV4dDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rl
ciogZW5jb2RlcikgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGVuY29kZXIt
PmVuY29kZSh3ZWJMYXllcklEKTsKIH0KIAotYm9vbCBMYXllclRyZWVDb250ZXh0OjpkZWNvZGUo
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgTGF5ZXJUcmVlQ29udGV4dCYpCitib29sIExheWVy
VHJlZUNvbnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIExh
eWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKGNvbnRleHQud2ViTGF5ZXJJ
RCk7CiB9CiAKIGJvb2wgTGF5ZXJUcmVlQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdlYkxheWVy
SUQ7CiB9CiAKLWJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiwgY29uc3Qg
TGF5ZXJUcmVlQ29udGV4dCYpCitib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVlQ29udGV4
dCYgYSwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhLndlYkxheWVySUQgPT0gYi53ZWJMYXll
cklEOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcAppbmRleCBmODUyZTJmLi5hYTI1ZGQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0yOCw2ICsy
OCwxMSBAQAogCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMYXllclRy
ZWVIb3N0UHJveHkuaCIKKyNpbmNsdWRlIDxDb3JlSVBDL01lc3NhZ2VJRC5oPgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUzLDQg
KzU4LDIwIEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBz
aXplLCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCiAgICAgc2l6ZURpZENoYW5nZSgpOwog
fQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCit2b2lkIERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKK3sKKyAgICBtX3dl
YlBhZ2VQcm94eS0+c2V0Vmlld05lZWRzRGlzcGxheSh2aWV3cG9ydFZpc2libGVSZWN0KCkpOwor
fQorCitXZWJDb3JlOjpJbnRSZWN0IERyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRzUmVjdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV93ZWJQYWdlUHJv
eHktPnZpZXdTaXplKCkpOworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2VpdmVM
YXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpN
ZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykK
K3sKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IGE3OGIxOWUuLjFhYTE5ZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaApAQCAtMjgsOCArMjgs
OSBAQAogI2RlZmluZSBEcmF3aW5nQXJlYVByb3h5X2gKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVh
SW5mby5oIgotI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00NSwxMyAr
NDYsMTcgQEAgbmFtZXNwYWNlIENvcmVJUEMgewogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0g
ICAgY2xhc3MgSW50UmVjdDsKKyAgICBjbGFzcyBGbG9hdFBvaW50OworICAgIGNsYXNzIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJU
cmVlQ29udGV4dDsKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKIGNsYXNzIFVwZGF0ZUluZm87
CitjbGFzcyBXZWJMYXllclRyZWVJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogY2xh
c3MgV2ViUGFnZVByb3h5OwogCiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5IHsKQEAgLTc3LDYgKzgy
LDI0IEBAIHB1YmxpYzoKICAgICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwogCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZp
ZXdwb3J0VmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBjb250ZW50c1JlY3QoKTsgfQorICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNCYWNraW5nU3RvcmVSZWFkeSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KSB7IH0KKworI2lmIFVTRShUSUxFRF9C
QUNLSU5HX1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5k
U2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQg
c2NhbGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0
b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJL
aXQ6OlVwZGF0ZUluZm8mKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZUZvckxheWVy
KGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGls
ZUlEKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKik7CisKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBt
X3dlYlBhZ2VQcm94eTsgfQorI2VuZGlmCisjZW5kaWYKIHByb3RlY3RlZDoKICAgICBleHBsaWNp
dCBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZSwgV2ViUGFnZVByb3h5Kik7CiAKQEAg
LTg2LDYgKzEwOSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7
CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIE93blB0cjxMYXll
clRyZWVIb3N0UHJveHk+IG1fbGF5ZXJUcmVlSG9zdFByb3h5OworI2VuZGlmCisKIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4IDYxOWQ1MDgu
LjU1OTIyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHlJbXBsLmNwcApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJv
eHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgogCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdFByb3h5LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtMzI4LDggKzMzMiwzOCBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJ
bXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRl
eAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2xheWVyVHJlZUNvbnRleHQg
PSBsYXllclRyZWVDb250ZXh0OwogICAgIG1fd2ViUGFnZVByb3h5LT5lbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOworI2lmIFVTRShURVhUVVJFX01BUFBF
UikKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhv
c3RQcm94eSA9IGFkb3B0UHRyKG5ldyBMYXllclRyZWVIb3N0UHJveHkodGhpcykpOworI2VuZGlm
Cit9CisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKK3ZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5l
Y3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6
OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQ
cm94eSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPmRpZFJlY2VpdmVMYXllclRyZWVI
b3N0UHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKK30KKwor
dm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxl
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxl
KQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0UHJveHktPnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZSh2aXNpYmxlQ29udGVudHNS
ZWN0LCBzY2FsZSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVD
b250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJh
amVjdG9yeVZlY3RvcikKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVj
dG9yKHRyYWplY3RvcnlWZWN0b3IpOwogfQogCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpw
YWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
LCBmbG9hdCBvcGFjaXR5KQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0UHJveHktPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KG1hdHJpeCwg
b3BhY2l0eSk7Cit9CisjZW5kaWYKKwogdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKIHsKICAgICBBU1NFUlQoaXNJbkFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHlJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eUltcGwuaAppbmRleCBkMDkxZjk3Li4xN2NmMzhhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaApAQCAtMzksNiArMzksOCBA
QCBjbGFzcyBSZWdpb247CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBMYXllclRyZWVI
b3N0UHJveHk7CisKIGNsYXNzIERyYXdpbmdBcmVhUHJveHlJbXBsIDogcHVibGljIERyYXdpbmdB
cmVhUHJveHkgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJv
eHlJbXBsPiBjcmVhdGUoV2ViUGFnZVByb3h5Kik7CkBAIC03NSw2ICs3NywxMyBAQCBwcml2YXRl
OgogICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CiAKICAgICBib29s
IGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuICFtX2xheWVy
VHJlZUNvbnRleHQuaXNFbXB0eSgpOyB9CisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9DdXJyZW50R0xD
b250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0
eSk7CisgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBD
OjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqKTsKKyNlbmRpZgogI2Vsc2UKICAgICBib29sIGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40NWU4ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaWZuZGVmIExheWVyVHJlZUhvc3RQcm94eV9oCisjZGVmaW5lIExheWVyVHJl
ZUhvc3RQcm94eV9oCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJEcmF3
aW5nQXJlYVByb3h5LmgiCisjaW5jbHVkZSAiTWVzc2FnZVF1ZXVlLmgiCisjaW5jbHVkZSAiUmVn
aW9uLmgiCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8u
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpZiBV
U0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJOb2RlLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYkxheWVySW5mbzsKK2NsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOworCitj
bGFzcyBMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7Citw
dWJsaWM6CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKKyAgICB2
aXJ0dWFsIH5MYXllclRyZWVIb3N0UHJveHkoKTsKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ0xh
eWVyU3RhdGUoY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdm9pZCBkZWxldGVDb21wb3NpdGlu
Z0xheWVyKFdlYkxheWVySUQpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2Vi
TGF5ZXJJRCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9u
KiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2
b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
ZmxvYXQpOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IElu
dFJlY3QmLCBmbG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5
VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
KyAgICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgdm9pZCBzd2FwQ29udGVudEJ1ZmZl
cnMoKTsKKyAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9y
TGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYp
OworICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBj
b25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihp
bnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7CisgICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7
CisgICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7CisgICAg
dm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0
aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAg
ICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RGb3JMYXllcihXZWJMYXllcklELCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOworI2VuZGlmCisKK3Byb3RlY3Rl
ZDoKKyAgICBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUxheWVyKFdlYkxheWVySUQp
OworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKFdlYkxheWVySUQgaWQpIHsgcmV0dXJu
IChpZCA9PSBJbnZhbGlkV2ViTGF5ZXJJRCkgPyAwIDogbV9sYXllcnMuZ2V0KGlkKTsgfQorICAg
IEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9
CisKKyAgICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9tIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
bGllbnQuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3Jh
cGhpY3NMYXllciosIGRvdWJsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1
aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1
Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93
UmVwYWludENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgcGFpbnRD
b250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSB7IH0KKworICAgIFJ1bkxvb3A6OlRpbWVyPExheWVyVHJlZUhvc3RQcm94
eT4gbV9hbmltYXRpb25UaW1lcjsKKyAgICBEcmF3aW5nQXJlYVByb3h5KiBtX2RyYXdpbmdBcmVh
UHJveHk7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllcio+IExheWVyTWFwOworICAgIEludFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0Owor
ICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKworICAgIE1lc3NhZ2VRdWV1ZTxMYXllclRyZWVN
ZXNzYWdlVG9SZW5kZXJlcj4gbV9tZXNzYWdlc1RvUmVuZGVyZXI7CisgICAgdm9pZCBwdXNoVXBk
YXRlVG9RdWV1ZShQYXNzT3duUHRyPExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyPik7CisKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRyPFRleHR1cmVNYXBwZXI+IG1fdGV4dHVy
ZU1hcHBlcjsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCisgICAgdHlwZWRlZiBIYXNoTWFw
PEludFBvaW50LCBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gPiBUaWxlZEltYWdlOworICAgIFRleHR1
cmVNYXBwZXJOb2RlOjpOb2RlUmVjdE1hcCBtX25vZGVWaXN1YWxDb250ZW50c1JlY3RNYXA7Cisg
ICAgSGFzaE1hcDxpbnQsIGludD4gbV90aWxlVG9Ob2RlVGlsZTsKKyAgICBpbnQgcmVtb3RlVGls
ZUlEVG9Ob2RlVGlsZUlEKGludCB0aWxlSUQpIGNvbnN0OworICAgIEhhc2hNYXA8aW50NjRfdCwg
VGlsZWRJbWFnZT4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7CisKKyAgICB2b2lkIHNjaGVk
dWxlV2ViVmlld1VwZGF0ZSgpOworICAgIHZvaWQgc3luY2hyb25pemVWaWV3cG9ydCgpOworICAg
IHZvaWQgZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRSb290TGF5ZXJJRChX
ZWJMYXllcklEKTsKKyAgICB2b2lkIHN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJ
bmZvJik7CisgICAgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCwgZmxvYXQgc2NhbGUp
OworICAgIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQpOworICAgIHZvaWQgdXBkYXRl
VGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgUUltYWdlJik7CisgICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBjb25zdCBRSW1hZ2Um
KTsKKyAgICB2b2lkIGRlc3Ryb3lJbWFnZShpbnQ2NF90KTsKKyAgICB2b2lkIGFzc2lnbkltYWdl
VG9MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgaW50NjRfdCBpbWFnZUlEKTsKKyAgICB2
b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKKyAg
ICB2b2lkIGVuc3VyZUxheWVyKFdlYkxheWVySUQpOworCisjZW5kaWYKKworICAgIE93blB0cjxH
cmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXll
cnNUb0RlbGV0ZTsKKworICAgIExheWVyTWFwIG1fbGF5ZXJzOworICAgIFdlYkxheWVySUQgbV9y
b290TGF5ZXJJRDsKKyAgICBpbnQgbV9pZDsKK307CisKK30KKworI2VuZGlmIC8vIExheWVyVHJl
ZUhvc3RQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43MDQ2NWIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMyIEBACisjCisjICAg
IENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
IworIyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorIworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKK21lc3NhZ2VzIC0+IExheWVyVHJlZUhvc3RQ
cm94eSB7CisgICAgU3luY0NvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJLaXQ6OldlYkxheWVySW5m
byBsYXllckluZm8pCisgICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCisg
ICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKKyAgICBDcmVhdGVUaWxlRm9y
TGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVw
ZGF0ZUluZm8pCisgICAgVXBkYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0
aWxlSUQsIFdlYktpdDo6VXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFJlbW92ZVRpbGVGb3JM
YXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlEKQorICAgIENyZWF0ZURpcmVjdGx5Q29t
cG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
IGhhbmRsZSkKKyAgICBEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkp
CisgICAgRGlkUmVuZGVyRnJhbWUoKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDY4MGRjZjguLmNlNjRjNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC03OSw2ICs3OSwxMCBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5j
bHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oUVQpCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNRdC5oIgogI2VuZGlmCkBAIC0xNDA1LDYg
KzE0MDksMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVl
SG9zdFByb3h5PigpKSB7CisgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRy
ZWVIb3N0UHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAg
ICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc1dlYkluc3BlY3RvclByb3h5
PigpKSB7CiAgICAgICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eSogaW5zcGVjdG9yID0gdGhpcy0+
aW5zcGVjdG9yKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5
ZXJUcmVlSG9zdFByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVy
VHJlZUhvc3RQcm94eVF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w
YzAzNmU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xh
eWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAtMCwwICsxLDU5NCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorCisjaW5jbHVkZSAiTGF5ZXJU
cmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWFpblRocmVhZC5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VJRC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVk
ZSAidGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAidGV4bWFw
L1RleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCIK
KyNpbmNsdWRlIDxRRGF0ZVRpbWU+CisjaW5jbHVkZSA8Y2Fpcm8vT3BlbkdMU2hpbXMuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyIHsK
K3B1YmxpYzoKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBEZWxldGVMYXllciwKKyAgICAgICAg
Q3JlYXRlVGlsZSwKKyAgICAgICAgUmVtb3ZlVGlsZSwKKyAgICAgICAgVXBkYXRlVGlsZSwKKyAg
ICAgICAgQ3JlYXRlSW1hZ2UsCisgICAgICAgIERlc3Ryb3lJbWFnZSwKKyAgICAgICAgU3luY0xh
eWVyUGFyYW1ldGVycywKKyAgICAgICAgRmx1c2hMYXllckNoYW5nZXMsCisgICAgICAgIFNldFJv
b3RMYXllcgorICAgIH07CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7Cit9Owor
Cit0ZW1wbGF0ZTxjbGFzcyBNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6
OlR5cGUgbWVzc2FnZVR5cGU+CitjbGFzcyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhE
YXRhIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1lc3NhZ2VUeXBlOyB9CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4gY3JlYXRlKGNvbnN0
IE1lc3NhZ2VEYXRhJiBkYXRhID0gTWVzc2FnZURhdGEoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YShkYXRhKSk7
CisgICAgfQorCisgICAgY29uc3QgTWVzc2FnZURhdGEmIGRhdGEoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTGF5ZXJUcmVlTWVz
c2FnZVRvUmVuZGVyZXJXaXRoRGF0YShjb25zdCBNZXNzYWdlRGF0YSYgZGF0YSkKKyAgICAgICAg
OiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgTWVzc2FnZURhdGEgbV9kYXRhOwor
fTsKKworCituYW1lc3BhY2Ugeworc3RydWN0IENyZWF0ZVRpbGVNZXNzYWdlRGF0YSB7CisgICAg
V2ViTGF5ZXJJRCBsYXllcklEOworICAgIGludCByZW1vdGVUaWxlSUQ7CisgICAgZmxvYXQgc2Nh
bGU7Cit9OworCitzdHJ1Y3QgVXBkYXRlVGlsZU1lc3NhZ2VEYXRhIHsKKyAgICBXZWJMYXllcklE
IGxheWVySUQ7CisgICAgaW50IHJlbW90ZVRpbGVJRDsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3Q7
CisgICAgSW50UmVjdCB0YXJnZXRSZWN0OworICAgIFFJbWFnZSBpbWFnZTsKK307CisKK3N0cnVj
dCBSZW1vdmVUaWxlTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKKyAgICBp
bnQgcmVtb3RlVGlsZUlEOworfTsKKworc3RydWN0IENyZWF0ZUltYWdlTWVzc2FnZURhdGEgewor
ICAgIGludDY0X3QgaW1hZ2VJRDsKKyAgICBRSW1hZ2UgaW1hZ2U7Cit9OworCitzdHJ1Y3QgRGVz
dHJveUltYWdlTWVzc2FnZURhdGEgeworICAgIGludDY0X3QgaW1hZ2VJRDsKK307CisKK3N0cnVj
dCBTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZURhdGEgeworICAgIFdlYkxheWVySW5mbyBsYXll
ckluZm87Cit9OworCitzdHJ1Y3QgRW1wdHlNZXNzYWdlRGF0YSB7IH07CitzdHJ1Y3QgRGVsZXRl
TGF5ZXJNZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworfTsKK3N0cnVjdCBT
ZXRSb290TGF5ZXJNZXNzYWdlRGF0YSB7CisgICAgV2ViTGF5ZXJJRCBsYXllcklEOworfTsKKwor
Y2xhc3MgQ3JlYXRlVGlsZU1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2Fn
ZVRvUmVuZGVyZXJXaXRoRGF0YTxDcmVhdGVUaWxlTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyOjpDcmVhdGVUaWxlPiB7IH07CitjbGFzcyBVcGRhdGVUaWxlTWVzc2FnZQor
ICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPFVwZGF0
ZVRpbGVNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlVwZGF0ZVRpbGU+
IHsgfTsKK2NsYXNzIFJlbW92ZVRpbGVNZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJl
ZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8UmVtb3ZlVGlsZU1lc3NhZ2VEYXRhLCBMYXllclRy
ZWVNZXNzYWdlVG9SZW5kZXJlcjo6UmVtb3ZlVGlsZT4geyB9OworY2xhc3MgQ3JlYXRlSW1hZ2VN
ZXNzYWdlCisgICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERh
dGE8Q3JlYXRlSW1hZ2VNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkNy
ZWF0ZUltYWdlPiB7IH07CitjbGFzcyBEZXN0cm95SW1hZ2VNZXNzYWdlCisgICAgICAgIDogcHVi
bGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8RGVzdHJveUltYWdlTWVzc2Fn
ZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpEZXN0cm95SW1hZ2U+IHsgfTsKK2Ns
YXNzIEZsdXNoTGF5ZXJDaGFuZ2VzTWVzc2FnZQorICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVN
ZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPEVtcHR5TWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyOjpGbHVzaExheWVyQ2hhbmdlcz4geyB9OworY2xhc3MgU3luY0xheWVyUGFy
YW1ldGVyc01lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXJXaXRoRGF0YTxTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyOjpTeW5jTGF5ZXJQYXJhbWV0ZXJzPiB7IH07CitjbGFzcyBEZWxldGVMYXll
ck1lc3NhZ2UKKyAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRo
RGF0YTxEZWxldGVMYXllck1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6
RGVsZXRlTGF5ZXI+IHsgfTsKK2NsYXNzIFNldFJvb3RMYXllck1lc3NhZ2UKKyAgICAgICAgOiBw
dWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxTZXRSb290TGF5ZXJNZXNz
YWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlNldFJvb3RMYXllcj4geyB9Owor
fQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRl
TGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIG5ld0xheWVy
ID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRoaXMpOworICAgIFRleHR1cmVNYXBw
ZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShuZXdMYXllcik7CisgICAgbm9kZS0+
c2V0SUQobGF5ZXJJRCk7CisgICAgbm9kZS0+c2V0VGlsZU93bmVyc2hpcChUZXh0dXJlTWFwcGVy
Tm9kZTo6RXh0ZXJuYWxseU1hbmFnZWRUaWxlcyk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xh
eWVyKTsKK30KKworTGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkoRHJhd2lu
Z0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKKyAgICA6IG1fYW5pbWF0aW9uVGltZXIoUnVu
TG9vcDo6bWFpbigpLCB0aGlzLCAmTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCkK
KyAgICAsIG1fZHJhd2luZ0FyZWFQcm94eShkcmF3aW5nQXJlYVByb3h5KQorICAgICwgbV9yb290
TGF5ZXJJRCgwKQoreworfQorCitMYXllclRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJv
eHkoKQoreworfQorCisvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJlZW50cmFudC4KK3Zv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQoreworICAgIGlmICghbV90
ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6
OmNyZWF0ZSgpOworCisgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICBHcmFwaGljc0xheWVy
KiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CisgICAgaWYgKCFjdXJyZW50Um9vdExh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRv
VGV4dHVyZU1hcHBlck5vZGUoY3VycmVudFJvb3RMYXllcik7CisKKyAgICBpZiAoIW5vZGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIEdMaW50IHZpZXdwb3J0WzRdOworICAgIGdsR2V0SW50ZWdl
cnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0KTsKKyAgICBJbnRSZWN0IHZpZXdwb3J0UmVjdCh2aWV3
cG9ydFswXSwgdmlld3BvcnRbMV0sIHZpZXdwb3J0WzJdLCB2aWV3cG9ydFszXSk7CisgICAgbV90
ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSh2aWV3cG9ydFsyXSwgdmlld3Bv
cnRbM10pKTsKKyAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQo
KSk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisgICAgbV90ZXh0dXJl
TWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKKworICAgIGlmIChjdXJyZW50Um9vdExheWVyLT5vcGFj
aXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRy
aXgpIHsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAg
ICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgICAgIGN1
cnJlbnRSb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwor
ICAgIH0KKworICAgIFRleHR1cmVNYXBwZXJOb2RlOjpOb2RlUmVjdE1hcCBub2RlVmlzdWFsQ29u
dGVudHNSZWN0TWFwOworICAgIGlmIChub2RlLT5jb2xsZWN0VmlzaWJsZUNvbnRlbnRzUmVjdHMo
bm9kZVZpc3VhbENvbnRlbnRzUmVjdE1hcCwgdmlld3BvcnRSZWN0KSkgeworICAgICAgICBUZXh0
dXJlTWFwcGVyTm9kZTo6Tm9kZVJlY3RNYXA6Oml0ZXJhdG9yIGVuZEl0ZXJhdG9yID0gbm9kZVZp
c3VhbENvbnRlbnRzUmVjdE1hcC5lbmQoKTsKKyAgICAgICAgZm9yIChUZXh0dXJlTWFwcGVyTm9k
ZTo6Tm9kZVJlY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbm9kZVZpc3VhbENvbnRlbnRzUmVjdE1hcC5i
ZWdpbigpOyBpdCAhPSBlbmRJdGVyYXRvcjsgKytpdCkgeworICAgICAgICAgICAgV2ViTGF5ZXJJ
RCBsYXllcklEID0gaXQtPmZpcnN0LT5pZCgpOworICAgICAgICAgICAgLy8gYXZvaWQgdXBkYXRp
bmcgbm9uLXN5bmNlZCByb290IGxheWVyCisgICAgICAgICAgICBpZiAoIWxheWVySUQpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0g
SW50UmVjdChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIHNldFZpc2libGVDb250ZW50c1JlY3RG
b3JMYXllcihsYXllcklELCB2aXNpYmxlUmVjdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgbm9k
ZS0+cGFpbnQoKTsKKworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAg
IGlmIChub2RlLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAg
ICAgICB1cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBk
YXRlVmlld3BvcnQoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+dXBkYXRlVmlld3BvcnQo
KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RG
b3JMYXllcihXZWJMYXllcklEIGxheWVySUQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIobGF5ZXJJRCwgcmVjdCks
IG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Cit9CisKK2ludCBMYXllclRy
ZWVIb3N0UHJveHk6OnJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRChpbnQgdGlsZUlEKSBjb25zdAor
eworICAgIEhhc2hNYXA8aW50LCBpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZVRvTm9k
ZVRpbGUuZmluZCh0aWxlSUQpOworICAgIGlmIChpdCA9PSBtX3RpbGVUb05vZGVUaWxlLmVuZCgp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaXQtPnNlY29uZDsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZv
JiBsYXllckluZm8pCit7CisgICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5pZDsKKyAgICBl
bnN1cmVMYXllcihpZCk7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmlu
ZChpZCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworCisgICAgbGF5
ZXItPnNldE5hbWUobGF5ZXJJbmZvLm5hbWUpOworCisgICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRC
eUxheWVyKGxheWVyQnlJRChsYXllckluZm8ucmVwbGljYSkpOworICAgIGxheWVyLT5zZXRNYXNr
TGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5tYXNrKSk7CisKKyAgICBsYXllci0+c2V0UG9zaXRp
b24obGF5ZXJJbmZvLnBvcyk7CisgICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOwor
ICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7CisgICAgbGF5ZXIt
PnNldEFuY2hvclBvaW50KGxheWVySW5mby5hbmNob3JQb2ludCk7CisgICAgbGF5ZXItPnNldENo
aWxkcmVuVHJhbnNmb3JtKGxheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgbGF5ZXIt
PnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllckluZm8uYmFja2ZhY2VWaXNpYmxlKTsKKyAgICBs
YXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsKKyAgICBs
YXllci0+c2V0Q29udGVudHNSZWN0KGxheWVySW5mby5jb250ZW50c1JlY3QpOworICAgIGxheWVy
LT5zZXREcmF3c0NvbnRlbnQobGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7CisKKyAgICBpZiAobGF5
ZXJJbmZvLmltYWdlSXNVcGRhdGVkKQorICAgICAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIs
IGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKworICAgIC8vIE5ldmVyIG1ha2UgdGhl
IHJvb3QgbGF5ZXIgY2xpcC4KKyAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8u
aXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKKyAgICBsYXll
ci0+c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7CisgICAgbGF5ZXItPnNldFByZXNlcnZl
czNEKGxheWVySW5mby5wcmVzZXJ2ZXMzRCk7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBj
aGlsZHJlbjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbmZvLmNoaWxkcmVu
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkxheWVySUQgY2hpbGRJRCA9IGxheWVySW5mby5j
aGlsZHJlbltpXTsKKyAgICAgICAgR3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5SUQoY2hp
bGRJRCk7CisgICAgICAgIGlmICghY2hpbGQpIHsKKyAgICAgICAgICAgIGNoaWxkID0gY3JlYXRl
TGF5ZXIoY2hpbGRJRCkubGVha1B0cigpOworICAgICAgICAgICAgbV9sYXllcnMuYWRkKGNoaWxk
SUQsIGNoaWxkKTsKKyAgICAgICAgfQorICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwor
ICAgIH0KKyAgICBsYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworCisgICAgaWYgKGxheWVy
SW5mby5pc1Jvb3RMYXllciAmJiBtX3Jvb3RMYXllcklEICE9IGlkKQorICAgICAgICBzZXRSb290
TGF5ZXJJRChpZCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVMYXllcihX
ZWJMYXllcklEIGxheWVySUQpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5
SUQobGF5ZXJJRCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF5
ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX2xheWVycy5yZW1vdmUobGF5ZXJJRCk7Cisg
ICAgZGVsZXRlIGxheWVyOworfQorCisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVM
YXllcihXZWJMYXllcklEIGlkKQoreworICAgIC8vIFdlIGhhdmUgdG8gbGVhayB0aGUgbmV3IGxh
eWVyJ3MgcG9pbnRlciBhbmQgbWFuYWdlIGl0IG91cnNlbHZlcywKKyAgICAvLyBiZWNhdXNlIE93
blB0ciBpcyBub3QgY29weWFibGUuCisgICAgaWYgKG1fbGF5ZXJzLmZpbmQoaWQpID09IG1fbGF5
ZXJzLmVuZCgpKQorICAgICAgICBtX2xheWVycy5hZGQoaWQsIGNyZWF0ZUxheWVyKGlkKS5sZWFr
UHRyKCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdExheWVySUQoV2Vi
TGF5ZXJJRCBsYXllcklEKQoreworICAgIGlmIChsYXllcklEID09IG1fcm9vdExheWVySUQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVySUQgPSBsYXllcklEOworCisgICAgbV9y
b290TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICBpZiAoIWxheWVySUQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVy
SUQpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVy
LT5hZGRDaGlsZChsYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVU
aWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAg
ZW5zdXJlTGF5ZXIobGF5ZXJJRCk7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1Rl
eHR1cmVNYXBwZXJOb2RlKGxheWVyQnlJRChsYXllcklEKSk7CisKKyAgICBpbnQgbm9kZVRpbGVJ
RCA9IG5vZGUtPmNyZWF0ZUNvbnRlbnRzVGlsZShzY2FsZSk7CisgICAgbV90aWxlVG9Ob2RlVGls
ZS5hZGQodGlsZUlELCBub2RlVGlsZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQoreworICAgIFRleHR1
cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJ
RCkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IG5vZGVUaWxl
SUQgPSByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQodGlsZUlEKTsKKyAgICBpZiAoIW5vZGVUaWxl
SUQpCisgICAgICAgIHJldHVybjsKKworICAgIG5vZGUtPnJlbW92ZUNvbnRlbnRzVGlsZShub2Rl
VGlsZUlEKTsKKyAgICBtX3RpbGVUb05vZGVUaWxlLnJlbW92ZSh0aWxlSUQpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IFFJbWFnZSYgaW1hZ2UpCit7CisgICAgZW5zdXJlTGF5ZXIobGF5ZXJJRCk7Cisg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGxheWVyQnlJ
RChsYXllcklEKSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQg
bm9kZVRpbGVJRCA9IHJlbW90ZVRpbGVJRFRvTm9kZVRpbGVJRCh0aWxlSUQpOworICAgIGlmICgh
bm9kZVRpbGVJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUUltYWdlIGltYWdlUmVmKGltYWdl
KTsKKyAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cisg
ICAgbm9kZS0+c2V0Q29udGVudHNUaWxlQmFja0J1ZmZlcihub2RlVGlsZUlELCBzb3VyY2VSZWN0
LCB0YXJnZXRSZWN0LCBpbWFnZVJlZi5iaXRzKCksIEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFn
ZUlELCBjb25zdCBRSW1hZ2UmIGltYWdlKQoreworICAgIFRpbGVkSW1hZ2UgdGlsZWRJbWFnZTsK
KyAgICBzdGF0aWMgY29uc3QgaW50IFRpbGVEaW1lbnNpb24gPSAxMDI0OworICAgIGJvb2wgaW1h
Z2VIYXNBbHBoYSA9IGltYWdlLmhhc0FscGhhQ2hhbm5lbCgpOworICAgIEludFJlY3QgaW1hZ2VS
ZWN0KDAsIDAsIGltYWdlLndpZHRoKCksIGltYWdlLmhlaWdodCgpKTsKKyAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGltYWdlLmhlaWdodCgpOyB5ICs9IFRpbGVEaW1lbnNpb24pIHsKKyAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCBpbWFnZS53aWR0aCgpOyB4ICs9IFRpbGVEaW1lbnNpb24pIHsK
KyAgICAgICAgICAgIFFJbWFnZSBzdWJJbWFnZTsKKyAgICAgICAgICAgIEludFJlY3QgcmVjdCh4
LCB5LCBUaWxlRGltZW5zaW9uLCBUaWxlRGltZW5zaW9uKTsKKyAgICAgICAgICAgIHJlY3QuaW50
ZXJzZWN0KGltYWdlUmVjdCk7CisgICAgICAgICAgICBpZiAoUVNpemUocmVjdC5zaXplKCkpID09
IGltYWdlLnNpemUoKSkKKyAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1YkltYWdlID0gaW1hZ2UuY29weShyZWN0KTsK
KyAgICAgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlTWFw
cGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChyZWN0LnNp
emUoKSwgIWltYWdlSGFzQWxwaGEpOworICAgICAgICAgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVu
dHMoaW1hZ2VIYXNBbHBoYSA/IEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQgOiBCaXRtYXBUZXh0
dXJlOjpCR1JGb3JtYXQsIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVjdC5zaXplKCkpLCBz
dWJJbWFnZS5iaXRzKCkpOworICAgICAgICAgICAgdGlsZWRJbWFnZS5hZGQocmVjdC5sb2NhdGlv
bigpLCB0ZXh0dXJlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
cy5hZGQoaW1hZ2VJRCwgdGlsZWRJbWFnZSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQoreworICAgIG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OmFzc2lnbkltYWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFnZUlE
KQoreworICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShs
YXllcik7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWltYWdl
SUQpIHsKKyAgICAgICAgbm9kZS0+Y2xlYXJBbGxEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVRpbGVz
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGbG9hdFNpemUgc2l6ZShsYXllci0+
c2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0KGxheWVyLT5jb250ZW50c1JlY3Qo
KSk7CisgICAgZmxvYXQgaG9yaXpvbnRhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC53aWR0aCgpIC8g
c2l6ZS53aWR0aCgpOworICAgIGZsb2F0IHZlcnRpY2FsRmFjdG9yID0gY29udGVudHNSZWN0Lmhl
aWdodCgpIC8gc2l6ZS5oZWlnaHQoKTsKKyAgICBIYXNoTWFwPGludDY0X3QsIFRpbGVkSW1hZ2U+
OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7
CisgICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBUaWxlZEltYWdlOjppdGVyYXRvciBlbmRUaWxlSXRlcmF0b3IgPSBp
dC0+c2Vjb25kLmVuZCgpOworICAgIGZvciAoVGlsZWRJbWFnZTo6aXRlcmF0b3IgdGlsZUl0ID0g
aXQtPnNlY29uZC5iZWdpbigpOyB0aWxlSXQgIT0gZW5kVGlsZUl0ZXJhdG9yOyArK3RpbGVJdCkg
eworICAgICAgICBGbG9hdFJlY3Qgc291cmNlUmVjdChGbG9hdFBvaW50KHRpbGVJdC0+Zmlyc3Qp
LCBGbG9hdFNpemUodGlsZUl0LT5zZWNvbmQtPnNpemUoKSkpOworICAgICAgICBGbG9hdFJlY3Qg
dGFyZ2V0UmVjdChzb3VyY2VSZWN0LngoKSAqIGhvcml6b250YWxGYWN0b3IgKyBjb250ZW50c1Jl
Y3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWN0LnkoKSAqIHZl
cnRpY2FsRmFjdG9yICsgY29udGVudHNSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc291cmNlUmVjdC53aWR0aCgpICogaG9yaXpvbnRhbEZhY3RvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQoKSAqIHZlcnRpY2FsRmFjdG9yKTsK
KyAgICAgICAgaW50IG5ld1RpbGVJRCA9IG5vZGUtPmNyZWF0ZUNvbnRlbnRzVGlsZSgxLjApOwor
ICAgICAgICBub2RlLT5zZXRUaWxlQmFja0J1ZmZlclRleHR1cmVGb3JEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShuZXdUaWxlSUQsIEludFJlY3Qoc291cmNlUmVjdCksIHRhcmdldFJlY3QsIHRpbGVJ
dC0+c2Vjb25kLmdldCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpm
bHVzaExheWVyQ2hhbmdlcygpCit7CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlKEZsb2F0UmVjdCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmVuc3VyZVJv
b3RMYXllcigpCit7CisgICAgaWYgKG1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisgICAg
bV9yb290TGF5ZXIgPSBjcmVhdGVMYXllcihJbnZhbGlkV2ViTGF5ZXJJRCk7CisgICAgbV9yb290
TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3
c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50M0QoMCwgMCwgMCkpOworCisgICAgLy8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZl
IHplcm8gc2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1pemVkIG91dC4KKyAgICBtX3Jvb3RMYXll
ci0+c2V0U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworICAgIHRvVGV4dHVyZU1hcHBlck5vZGUobV9yb290
TGF5ZXIuZ2V0KCkpLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jUmVtb3RlQ29udGVudCgpCit7CisgICAg
Ly8gV2UgZW5xdWV1ZSBtZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMg
dGhleSByZXF1aXJlIGFuIGFjdGl2ZSBHTCBjb250ZXh0LgorICAgIGVuc3VyZVJvb3RMYXllcigp
OworCisgICAgd2hpbGUgKE93blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4gbmV4dE1l
c3NhZ2UgPSBtX21lc3NhZ2VzVG9SZW5kZXJlci50cnlHZXRNZXNzYWdlKCkpIHsKKyAgICAgICAg
c3dpdGNoIChuZXh0TWVzc2FnZS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVz
c2FnZVRvUmVuZGVyZXI6OlNldFJvb3RMYXllcjogeworICAgICAgICAgICAgY29uc3QgU2V0Um9v
dExheWVyTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxTZXRSb290TGF5ZXJNZXNzYWdl
Kj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7CisgICAgICAgICAgICBzZXRSb290TGF5ZXJJ
RChkYXRhLmxheWVySUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpEZWxldGVMYXllcjogeworICAgICAg
ICAgICAgY29uc3QgRGVsZXRlTGF5ZXJNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PERl
bGV0ZUxheWVyTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAg
ICAgZGVsZXRlTGF5ZXIoZGF0YS5sYXllcklEKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6U3luY0xheWVy
UGFyYW1ldGVyczogeworICAgICAgICAgICAgY29uc3QgU3luY0xheWVyUGFyYW1ldGVyc01lc3Nh
Z2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8U3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2UqPihu
ZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIHN5bmNMYXllclBhcmFtZXRl
cnMoZGF0YS5sYXllckluZm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpDcmVhdGVUaWxlOiB7CisgICAg
ICAgICAgICBjb25zdCBDcmVhdGVUaWxlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxD
cmVhdGVUaWxlTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAg
ICAgY3JlYXRlVGlsZShkYXRhLmxheWVySUQsIGRhdGEucmVtb3RlVGlsZUlELCBkYXRhLnNjYWxl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRy
ZWVNZXNzYWdlVG9SZW5kZXJlcjo6UmVtb3ZlVGlsZTogeworICAgICAgICAgICAgY29uc3QgUmVt
b3ZlVGlsZU1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8UmVtb3ZlVGlsZU1lc3NhZ2Uq
PihuZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIHJlbW92ZVRpbGUoZGF0
YS5sYXllcklELCBkYXRhLnJlbW90ZVRpbGVJRCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlVwZGF0ZVRp
bGU6IHsKKyAgICAgICAgICAgIGNvbnN0IFVwZGF0ZVRpbGVNZXNzYWdlRGF0YSYgZGF0YSA9IHN0
YXRpY19jYXN0PFVwZGF0ZVRpbGVNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7
CisgICAgICAgICAgICB1cGRhdGVUaWxlKGRhdGEubGF5ZXJJRCwgZGF0YS5yZW1vdGVUaWxlSUQs
IGRhdGEuc291cmNlUmVjdCwgZGF0YS50YXJnZXRSZWN0LCBkYXRhLmltYWdlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9S
ZW5kZXJlcjo6Q3JlYXRlSW1hZ2U6IHsKKyAgICAgICAgICAgIGNvbnN0IENyZWF0ZUltYWdlTWVz
c2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxDcmVhdGVJbWFnZU1lc3NhZ2UqPihuZXh0TWVz
c2FnZS5nZXQoKSktPmRhdGEoKTsKKyAgICAgICAgICAgIGNyZWF0ZUltYWdlKGRhdGEuaW1hZ2VJ
RCwgZGF0YS5pbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkRlc3Ryb3lJbWFnZTogeworICAgICAg
ICAgICAgY29uc3QgQ3JlYXRlSW1hZ2VNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PENy
ZWF0ZUltYWdlTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOworICAgICAgICAg
ICAgZGVzdHJveUltYWdlKGRhdGEuaW1hZ2VJRCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkZsdXNoTGF5
ZXJDaGFuZ2VzOgorICAgICAgICAgICAgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
cHVzaFVwZGF0ZVRvUXVldWUoUGFzc093blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4g
bWVzc2FnZSkKK3sKKyAgICBtX21lc3NhZ2VzVG9SZW5kZXJlci5hcHBlbmQobWVzc2FnZSk7Cisg
ICAgdXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIENyZWF0ZVRpbGVNZXNzYWdlRGF0YSBkYXRhOwor
ICAgIGRhdGEubGF5ZXJJRCA9IGxheWVySUQ7CisgICAgZGF0YS5yZW1vdGVUaWxlSUQgPSB0aWxl
SUQ7CisgICAgZGF0YS5zY2FsZSA9IHVwZGF0ZUluZm8udXBkYXRlU2NhbGVGYWN0b3I7CisgICAg
cHVzaFVwZGF0ZVRvUXVldWUoQ3JlYXRlVGlsZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7CisgICAg
dXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mbyk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBV
cGRhdGVUaWxlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySUQgPSBsYXllcklEOwor
ICAgIGRhdGEucmVtb3RlVGlsZUlEID0gdGlsZUlEOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKHVwZGF0ZUluZm8uYml0bWFwSGFu
ZGxlKTsKKyAgICBkYXRhLmltYWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKS5jb3B5KCk7Cisg
ICAgZGF0YS5zb3VyY2VSZWN0ID0gSW50UmVjdChJbnRQb2ludDo6emVybygpLCB1cGRhdGVJbmZv
LnVwZGF0ZVJlY3RCb3VuZHMuc2l6ZSgpKTsKKyAgICBkYXRhLnRhcmdldFJlY3QgPSB1cGRhdGVJ
bmZvLnVwZGF0ZVJlY3RCb3VuZHM7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoVXBkYXRlVGlsZU1l
c3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1v
dmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpCit7CisgICAgUmVtb3ZlVGls
ZU1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0YS5sYXllcklEID0gbGF5ZXJJRDsKKyAgICBkYXRh
LnJlbW90ZVRpbGVJRCA9IHRpbGVJRDsKKyAgICBwdXNoVXBkYXRlVG9RdWV1ZShSZW1vdmVUaWxl
TWVzc2FnZTo6Y3JlYXRlKGRhdGEpKTsKK30KKworCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
ZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEIGlkKQoreworICAgIERlbGV0ZUxheWVy
TWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmxheWVySUQgPSBpZDsKKyAgICBwdXNoVXBkYXRl
VG9RdWV1ZShEZWxldGVMYXllck1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEIGlkKQor
eworICAgIFNldFJvb3RMYXllck1lc3NhZ2VEYXRhIGRhdGE7CisgICAgZGF0YS5sYXllcklEID0g
aWQ7CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoU2V0Um9vdExheWVyTWVzc2FnZTo6Y3JlYXRlKGRh
dGEpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNDb21wb3NpdGluZ0xheWVy
U3RhdGUoY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIFN5bmNMYXllclBhcmFtZXRl
cnNNZXNzYWdlRGF0YSBkYXRhOworICAgIGRhdGEubGF5ZXJJbmZvID0gaW5mbzsKKyAgICBwdXNo
VXBkYXRlVG9RdWV1ZShTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2FnZTo6Y3JlYXRlKGRhdGEpKTsK
K30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKCkKK3sKKyAgICBt
X2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVIb3N0OjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkt
PnBhZ2VJRCgpKTsKKyAgICBwdXNoVXBkYXRlVG9RdWV1ZShGbHVzaExheWVyQ2hhbmdlc01lc3Nh
Z2U6OmNyZWF0ZSgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZURpcmVj
dGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgQ3JlYXRlSW1hZ2VNZXNzYWdlRGF0YSBkYXRh
OworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlKGhhbmRsZSk7CisgICAgZGF0YS5pbWFnZUlEID0ga2V5OworICAgIGRhdGEuaW1hZ2Ug
PSBiaXRtYXAtPmNyZWF0ZVFJbWFnZSgpLmNvcHkoKTsKKyAgICBwdXNoVXBkYXRlVG9RdWV1ZShD
cmVhdGVJbWFnZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCit7Cisg
ICAgRGVzdHJveUltYWdlTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmltYWdlSUQgPSBrZXk7
CisgICAgcHVzaFVwZGF0ZVRvUXVldWUoRGVzdHJveUltYWdlTWVzc2FnZTo6Y3JlYXRlKGRhdGEp
KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAg
ICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWpl
Y3RvcnlWZWN0b3IpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxl
KGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlKQoreworICAgIG1fdmlzaWJsZUNvbnRl
bnRzUmVjdCA9IHJlY3Q7CisgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisgICAgbV9kcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
SG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUocmVjdCwgc2NhbGUpLCBtX2RyYXdp
bmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5w
cm8KaW5kZXggY2ZkMjZlZi4uZTU5ZWY5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTI5LDYgKzI5LDgg
QEAgV0VCS0lUMV9TT1VSQ0VTX1NIQVJFRF9XSVRIX1dFQktJVDIgPSBcCiBXRUJLSVQyX0dFTkVS
QVRFRF9IRUFERVJTID0gXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvQXV0
aGVudGljYXRpb25NYW5hZ2VyTWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9T
T1VSQ0VTX0RJUi9Eb3dubG9hZFByb3h5TWVzc2FnZXMuaCBcCisgICAgJCRXRUJLSVQyX0dFTkVS
QVRFRF9TT1VSQ0VTX0RJUi9MYXllclRyZWVIb3N0TWVzc2FnZXMuaCBcCisgICAgJCRXRUJLSVQy
X0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9MYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIFwKICAg
ICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVy
TWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5D
b250cm9sbGVyUHJveHlNZXNzYWdlcy5oIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJD
RVNfRElSL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBcCkBAIC02Nyw2ICs2OSw4
IEBAIFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVMgPSBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRF
RF9TT1VSQ0VTX0RJUi9Eb3dubG9hZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRX
RUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9EcmF3aW5nQXJlYU1lc3NhZ2VSZWNlaXZlci5j
cHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRHJhd2luZ0FyZWFQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAorICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19E
SVIvTGF5ZXJUcmVlSG9zdE1lc3NhZ2VSZWNlaXZlci5jcHAgXAorICAgICQkV0VCS0lUMl9HRU5F
UkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBc
CiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9OUE9iamVjdE1lc3NhZ2VSZWNl
aXZlck1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNF
U19ESVIvUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRX
RUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5Qcm9jZXNzTWVzc2FnZVJlY2VpdmVy
LmNwcCBcCkBAIC0xNjIsNiArMTY2LDcgQEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL1dlYkdy
YXBoaWNzQ29udGV4dC5oIFwKICAgICBTaGFyZWQvV2ViSGl0VGVzdFJlc3VsdC5oIFwKICAgICBT
aGFyZWQvV2ViSW1hZ2UuaCBcCisgICAgU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBcCiAgICAg
U2hhcmVkL1dlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCBcCiAgICAgU2hhcmVkL1dlYk51bWJlci5o
IFwKICAgICBTaGFyZWQvV2ViT3BlblBhbmVsUGFyYW1ldGVycy5oIFwKQEAgLTMxOCw2ICszMjMs
NyBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVycm9y
cy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQu
aCBcCisgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmggXAog
ICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggXAogICAg
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBc
CkBAIC00MDEsNiArNDA3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVkL1dlYkhpdFRlc3RS
ZXN1bHQuY3BwIFwKICAgICBTaGFyZWQvV2ViS2V5Ym9hcmRFdmVudC5jcHAgXAogICAgIFNoYXJl
ZC9XZWJJbWFnZS5jcHAgXAorICAgIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBcCiAgICAg
U2hhcmVkL1dlYk1vdXNlRXZlbnQuY3BwIFwKICAgICBTaGFyZWQvV2ViT3BlblBhbmVsUGFyYW1l
dGVycy5jcHAgXAogICAgIFNoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBcCkBA
IC00ODgsNiArNDk1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZENsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhv
c3RQcm94eVF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1RvdWNoVmlld0ludGVyZmFjZS5jcHAg
XAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKQEAgLTU2OCw2ICs1NzYsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xp
ZW50LmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVy
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDIxOGYyZmYuLjZm
ZTkyZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcApAQCAtMjUsMTMgKzI1LDEzIEBACiAK
ICNpbmNsdWRlICJBbmltYXRpb24uaCIKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKLSNpbmNs
dWRlICJEcmF3aW5nQXJlYU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisj
aW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZS5oIgogI2luY2x1ZGUgInRleHQvQ1N0cmluZy5oIgogI2luY2x1ZGUgPEhhc2hNYXAuaD4K
QEAgLTU4LDEyICs1OCw2IEBAIFdlYkdyYXBoaWNzTGF5ZXIqIFdlYkdyYXBoaWNzTGF5ZXI6Omxh
eWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQgaWQpCiAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiB9
CiAKLXN0YXRpYyBWZWN0b3I8V2ViTGF5ZXJJRD4mIGRlbGV0ZWRMYXllcklEcygpCi17Ci0gICAg
c3RhdGljIFZlY3RvcjxXZWJMYXllcklEPiBsYXllcnM7Ci0gICAgcmV0dXJuIGxheWVyczsKLX0K
LQogc3RhdGljIFdlYkxheWVySUQgdG9XZWJMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQog
ewogICAgIHJldHVybiBsYXllciA/IHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPmlkKCkgOiAw
OwpAQCAtNzksNjcgKzczLDkxIEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6bm90aWZ5Q2hhbmdl
KCkKIFdlYkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVu
dCogY2xpZW50KQogICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCiAgICAgLCBtX25lZWRzRGlz
cGxheShmYWxzZSkKLSAgICAsIG1fbW9kaWZpZWQoZmFsc2UpCisgICAgLCBtX21vZGlmaWVkKHRy
dWUpCiAgICAgLCBtX2NvbnRlbnROZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX2hhc1BlbmRp
bmdBbmltYXRpb25zKGZhbHNlKQotICAgICwgbV9jb250ZW50U2NhbGUoMS5mKQorICAgICwgbV9p
blVwZGF0ZU1vZGUoZmFsc2UpCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgLCBt
X2xheWVyVHJlZVRpbGVDbGllbnQoMCkKKyAgICAsIG1fbWFpbkJhY2tpbmdTdG9yZShhZG9wdFB0
cihuZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
QmFja2VuZDo6Y3JlYXRlKHRoaXMpKSkpCisjZW5kaWYKIHsKLSAgICAvLyBTdGFydGluZyBsYXll
ciBJRHMgZnJvbSAxMDAwLCB0byBoZWxwIGRldGVjdCBmYXVsdHkgSURzIGVhc2lseS4KLSAgICBz
dGF0aWMgV2ViTGF5ZXJJRCBzSUQgPSAxMDAwOwotICAgIG1fbGF5ZXJJbmZvLmlkID0gKytzSUQ7
CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxlKDEuMCk7CisgICAgc3Rh
dGljIFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOworICAgIG1fbGF5ZXJJbmZvLmlkID0gbmV4
dExheWVySUQrKzsKICAgICBsYXllckJ5SURNYXAoKS5hZGQoaWQoKSwgdGhpcyk7CiB9CiAKIFdl
YkdyYXBoaWNzTGF5ZXI6On5XZWJHcmFwaGljc0xheWVyKCkKIHsKICAgICBsYXllckJ5SURNYXAo
KS5yZW1vdmUoaWQoKSk7Ci0gICAgZGVsZXRlZExheWVySURzKCkuYXBwZW5kKGlkKCkpOworCisg
ICAgLy8gVGhpcyB3b3VsZCB0ZWxsIHRoZSBVSSBwcm9jZXNzIHRvIHJlbGVhc2UgdGhlIGJhY2tp
bmcgc3RvcmUuCisgICAgc2V0Q29udGVudHNUb0ltYWdlKDApOworCisgICAgaWYgKG1fbGF5ZXJU
cmVlVGlsZUNsaWVudCkKKyAgICAgICAgbV9sYXllclRyZWVUaWxlQ2xpZW50LT5kaWREZWxldGVM
YXllcihpZCgpKTsKIH0KIAogYm9vbCBXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjb25z
dCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHsKICAgICBib29sIG9rID0gR3Jh
cGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwotICAgIGlmIChvaykKLSAgICAgICAg
bm90aWZ5Q2hhbmdlKCk7Ci0gICAgcmV0dXJuIG9rOworICAgIGlmICghb2spCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytp
KSB7CisgICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gdG9XZWJHcmFwaGljc0xheWVy
KGNoaWxkcmVuW2ldKTsKKyAgICAgICAgY2hpbGQtPnNldENvbnRlbnRzU2NhbGUobV9jb250ZW50
c1NjYWxlKTsKKyAgICAgICAgY2hpbGQtPm5vdGlmeUNoYW5nZSgpOworICAgIH0KKyAgICBub3Rp
ZnlDaGFuZ2UoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0xheWVy
OjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBHcmFwaGljc0xheWVyOjph
ZGRDaGlsZChsYXllcik7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+bm90aWZ5Q2hh
bmdlKCk7CiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQgaW5kZXgpCiB7CiAgICAg
R3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBpbmRleCk7CisgICAgdG9XZWJH
cmFwaGljc0xheWVyKGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgbm90aWZ5Q2hhbmdlKCk7
CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVy
KiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKICAgICBHcmFwaGljc0xheWVyOjph
ZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5
ZXIpLT5ub3RpZnlDaGFuZ2UoKTsKICAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAogdm9pZCBXZWJH
cmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGlj
c0xheWVyKiBzaWJsaW5nKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5
ZXIsIHNpYmxpbmcpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPm5vdGlmeUNoYW5n
ZSgpOwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCiBib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnJl
cGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hp
bGQpCiB7CiAgICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGls
ZCwgbmV3Q2hpbGQpOwotCi0gICAgaWYgKG9rKQotICAgICAgICBub3RpZnlDaGFuZ2UoKTsKLSAg
ICByZXR1cm4gb2s7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG5v
dGlmeUNoYW5nZSgpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihvbGRDaGlsZCktPm5vdGlmeUNo
YW5nZSgpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPm5vdGlmeUNoYW5nZSgp
OworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZy
b21QYXJlbnQoKQogeworICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiBwYXJlbnRMYXllciA9IHRv
V2ViR3JhcGhpY3NMYXllcihwYXJlbnQoKSkpCisgICAgICAgIHBhcmVudExheWVyLT5ub3RpZnlD
aGFuZ2UoKTsKICAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7CisKICAgICBu
b3RpZnlDaGFuZ2UoKTsKIH0KIApAQCAtMjQ3LDggKzI2NSw2IEBAIHZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKGNvbnRl
bnRzUmVjdCgpID09IHIpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAg
ICAgc2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Jl
Y3Qocik7CiAgICAgbm90aWZ5Q2hhbmdlKCk7CkBAIC0yNzQsMTUgKzI5MCwzMCBAQCB2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5h
bWUpCiB7CiB9CiAKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3Bs
YXkoKQoreworICAgIHNldENvbnRlbnRzVG9JbWFnZSgwKTsKKyAgICBzZXRDb250ZW50c1RvSW1h
Z2UobV9pbWFnZS5nZXQoKSk7Cit9CisKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZS5nZXQo
KSkKKyAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkxh
eWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKTsKKyAgICBp
ZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gV2UgYWRvcHQgZmlyc3QsIGlu
IGNhc2UgdGhpcyBpcyB0aGUgc2FtZSBmcmFtZSAtIHRoYXQgd2F5IHdlIGF2b2lkIGRlc3Ryb3lp
bmcgYW5kIHJlY3JlYXRpbmcgdGhlIGltYWdlLgorICAgIGludDY0X3QgbmV3SUQgPSBjbGllbnQt
PmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoaW1hZ2UpOworICAgIGNsaWVudC0+cmVsZWFzZUltYWdl
QmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworICAgIG5vdGlm
eUNoYW5nZSgpOworICAgIGlmIChuZXdJRCA9PSBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9y
ZUlEKQorICAgICAgICByZXR1cm47CisgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJ
RCA9IG5ld0lEOwogICAgIG1faW1hZ2UgPSBpbWFnZTsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsK
KyAgICBtX2xheWVySW5mby5pbWFnZUlzVXBkYXRlZCA9IHRydWU7CiAgICAgR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKLSAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAog
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIp
CkBAIC0zMDEsNTAgKzMzMiwyOSBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0
ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnNldE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgbV9uZWVkc0Rpc3BsYXkgPSB0cnVlOwotICAgIG5v
dGlmeUNoYW5nZSgpOworICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIEludFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpKTsKIH0K
IAogdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIG1fbmVlZHNEaXNwbGF5UmVjdC51bml0ZShyZWN0KTsKKyAg
ICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUoSW50UmVjdChyZWN0KSk7CiAgICAgbm90
aWZ5Q2hhbmdlKCk7CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVk
c0Rpc3BsYXkoKQotewotICAgIHNldE5lZWRzRGlzcGxheSgpOwotfQotCiBXZWJMYXllcklEIFdl
YkdyYXBoaWNzTGF5ZXI6OmlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9sYXllckluZm8uaWQ7
CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlkU3luY2hyb25pemUoKQordm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7Ci0gICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLSAgICBtX21vZGlmaWVkID0gZmFsc2U7
Ci0gICAgbV9uZWVkc0Rpc3BsYXlSZWN0ID0gRmxvYXRSZWN0KCk7Ci0gICAgaWYgKG1faGFzUGVu
ZGluZ0FuaW1hdGlvbnMpCi0gICAgICAgIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoV1RGOjpjdXJy
ZW50VGltZSgpKTsKLSAgICBtX2hhc1BlbmRpbmdBbmltYXRpb25zID0gZmFsc2U7Ci19Ci0KLWNv
bnN0IFdlYkxheWVySW5mbyYgV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJJbmZvKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9sYXllckluZm87Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGUoKQotewotICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7
ICsraSkKLSAgICAgICAgY2hpbGRyZW4oKVtpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAg
ICAgICAgY2hpbGRyZW4oKVtpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7CiAgICAgaWYg
KHJlcGxpY2FMYXllcigpKQotICAgICAgICByZXBsaWNhTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5n
U3RhdGUoKTsKKyAgICAgICAgcmVwbGljYUxheWVyKCktPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJl
Y3QpOwogICAgIGlmIChtYXNrTGF5ZXIoKSkKLSAgICAgICAgbWFza0xheWVyKCktPnN5bmNDb21w
b3NpdGluZ1N0YXRlKCk7CisgICAgICAgIG1hc2tMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZShyZWN0KTsKKyAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIH0K
IAogV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQpAQCAtMzUyLDMwICszNjIsMjUgQEAgV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFwaGlj
c0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJH
cmFwaGljc0xheWVyKj4obGF5ZXIpOwogfQogCi1GbG9hdFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6
bmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiB7Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBG
bG9hdFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7Ci0gICAgaWYg
KCFtX25lZWRzRGlzcGxheSkKLSAgICAgICAgcmVjdC5pbnRlcnNlY3QobV9uZWVkc0Rpc3BsYXlS
ZWN0KTsKLSAgICByZXR1cm4gcmVjdDsKLX0KKyAgICBpZiAoIW1fbGF5ZXJUcmVlVGlsZUNsaWVu
dCkKKyAgICAgICAgbV9sYXllclRyZWVUaWxlQ2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgp
OworICAgIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CiAKLVZlY3RvcjxXZWJLaXQ6OldlYkxheWVy
SUQ+IFdlYkdyYXBoaWNzTGF5ZXI6OnRha2VMYXllcnNUb0RlbGV0ZSgpCi17Ci0gICAgVmVjdG9y
PFdlYktpdDo6V2ViTGF5ZXJJRD4gbGF5ZXJzID0gZGVsZXRlZExheWVySURzKCk7Ci0gICAgZGVs
ZXRlZExheWVySURzKCkuY2xlYXIoKTsKLSAgICByZXR1cm4gbGF5ZXJzOwotfQorICAgIGlmICgh
bV9tb2RpZmllZCkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5
bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCi17CiAgICAgbV9sYXllckluZm8u
bmFtZSA9IG5hbWUoKTsKICAgICBtX2xheWVySW5mby5hbmNob3JQb2ludCA9IGFuY2hvclBvaW50
KCk7CiAgICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5
KCk7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9y
bSgpOwogICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsK
ICAgICBtX2xheWVySW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3QoKTsKLSAgICBtX2xh
eWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKKworICAgIC8vIEluIHRoZSBz
aGFkb3cgbGF5ZXIgdHJlZSB3ZSBjcmVhdGUgaW4gdGhlIFVJIHByb2Nlc3MsIGxheWVycyB3aXRo
IGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2VzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0byBkcmF3
IGNvbnRlbnQuCisgICAgLy8gT3RoZXJ3aXNlLCB3ZSdkIGhhdmUgdG8gY2hlY2sgd2hldGhlciBh
biBsYXllciB3aXRoIGRyYXdzQ29udGVudD09ZmFsc2UgaGFzIGEgZGlyZWN0bHkgY29tcG9zaXRl
ZCBpbWFnZSBtdWx0aXBsZSB0aW1lcy4KKyAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBk
cmF3c0NvbnRlbnQoKSB8fCBtX2ltYWdlOwogICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxh
eWVySUQobWFza0xheWVyKCkpOwogICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNr
c1RvQm91bmRzKCk7CiAgICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKQEAgLTM4
MywxMjIgKzM4OCwxNTkgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKQogICAgIG1fbGF5ZXJJbmZvLnBvcyA9IHBvc2l0aW9uKCk7
CiAgICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOwogICAgIG1fbGF5
ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkpOwotICAgIG1fbGF5
ZXJJbmZvLnNpemUgPSBGbG9hdFNpemUoc2l6ZSgpLndpZHRoKCkgKiBtX2NvbnRlbnRTY2FsZSwg
c2l6ZSgpLmhlaWdodCgpICogbV9jb250ZW50U2NhbGUpOworICAgIG1fbGF5ZXJJbmZvLnNpemUg
PSBzaXplKCk7CiAgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAg
bV9jb250ZW50TmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW4u
Y2xlYXIoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7
ICsraSkKICAgICAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uYXBwZW5kKHRvV2ViTGF5ZXJJRChj
aGlsZHJlbigpW2ldKSk7CisKKyAgICBtX2xheWVyVHJlZVRpbGVDbGllbnQtPmRpZFN5bmNDb21w
b3NpdGluZ1N0YXRlRm9yTGF5ZXIobV9sYXllckluZm8pOworICAgIG1fbW9kaWZpZWQgPSBmYWxz
ZTsKKyAgICBtX2xheWVySW5mby5pbWFnZUlzVXBkYXRlZCA9IGZhbHNlOworICAgIGlmIChtX2hh
c1BlbmRpbmdBbmltYXRpb25zKQorICAgICAgICBub3RpZnlBbmltYXRpb25TdGFydGVkKFdURjo6
Y3VycmVudFRpbWUoKSk7CisgICAgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA9IGZhbHNlOwogfQog
Ci1zdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gZGl2aWRlSW50b1RpbGVzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKIHsKLSAgICBWZWN0b3I8RmxvYXRS
ZWN0PiB0aWxlczsKLSAgICBmb3IgKGZsb2F0IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgp
OyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAgIGZvciAoZmxvYXQgeCA9IHJlY3QueCgp
OyB4IDwgcmVjdC5tYXhYKCk7IHggKz0gZ1RpbGVEaW1lbnNpb24pIHsKLSAgICAgICAgICAgIEZs
b2F0UmVjdCB0aWxlKHgsIHksIGdUaWxlRGltZW5zaW9uLCBnVGlsZURpbWVuc2lvbik7Ci0gICAg
ICAgICAgICB0aWxlLmludGVyc2VjdChyZWN0KTsKLSAgICAgICAgICAgIHRpbGVzLmFwcGVuZCh0
aWxlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdGlsZXM7CiB9CiAKLXN0YXRpYyB2
b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5
ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4m
IG91dExheWVycykKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNTY2FsZShmbG9h
dCBzY2FsZSkKIHsKLSAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NM
YXllcihsYXllcik7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
bGF5ZXItPmlzTW9kaWZpZWQoKSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dl
YkdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hpbGRyZW4oKVtpXSk7CisgICAgICAgIGxheWVyLT5zZXRD
b250ZW50c1NjYWxlKHNjYWxlKTsKKyAgICB9CisKKyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2Fs
ZTsKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlICYmIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y29u
dGVudHNTY2FsZSgpID09IHNjYWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBvdXRMYXllcnMu
YXBwZW5kKGxheWVyKTsKLSAgICBvdXRJbmZvLmxheWVycy5hcHBlbmQobGF5ZXItPmxheWVySW5m
bygpKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKKworICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUg
PSBtX21haW5CYWNraW5nU3RvcmUucmVsZWFzZSgpOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9
IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBUaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUt
PnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNl
dFJvb3RMYXllcihib29sIGlzUm9vdCkKK3sKKyAgICBtX2xheWVySW5mby5pc1Jvb3RMYXllciA9
IGlzUm9vdDsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQm
IHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRWaXNpYmxl
UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Cit9CiAKLSAgICBXZWJMYXll
ckluZm8mIGxheWVySW5mbyA9IG91dEluZm8ubGF5ZXJzW291dEluZm8ubGF5ZXJzLnNpemUoKSAt
IDFdOwotICAgIGlmIChsYXllci0+aW1hZ2UoKSkKLSAgICAgICAgbGF5ZXJJbmZvLmRyYXdzQ29u
dGVudCA9IHRydWU7Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fdmlzaWJsZUNvbnRlbnRSZWN0ID0gcmVj
dDsKKyAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPmFkanVzdFZp
c2libGVSZWN0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1
cnNpdmVseShHcmFwaGljc0xheWVyKiByb290TGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dElu
Zm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKK3ZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyb290TGF5ZXIpCisgICAgaWYgKHJl
Y3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CisgICAgbV9tb2RpZmllZCA9IHRydWU7Cisg
ICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmNvbnRleHQsIHJlY3QpOworfQogCi0gICAg
Y29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihyb290TGF5ZXIsIG91dEluZm8sIG91
dExheWVycyk7Ci0gICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihyb290TGF5
ZXItPm1hc2tMYXllcigpLCBvdXRJbmZvLCBvdXRMYXllcnMpOwotICAgIGNvbGxlY3RDb21wb3Np
dGluZ0luZm9SZWN1cnNpdmVseShyb290TGF5ZXItPnJlcGxpY2FMYXllcigpLCBvdXRJbmZvLCBv
dXRMYXllcnMpOwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50
RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3RzKQoreworfQogCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByb290TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseShyb290TGF5ZXItPmNoaWxk
cmVuKClbaV0sIG91dEluZm8sIG91dExheWVycyk7Citib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnRp
bGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIGlmICghbV9pblVw
ZGF0ZU1vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoV2ViTGF5ZXJUcmVlVGls
ZUNsaWVudCogY2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgpKQorICAgICAgICByZXR1cm4g
Y2xpZW50LT5sYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2VuZExheWVyc1RvVUlQcm9jZXNzKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciwgV2ViUGFnZSogd2ViUGFnZSkKK0ludFJlY3Qg
V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKQogewotICAg
IHdlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Ci0gICAgd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMo
KTsKLSAgICBXZWJMYXllclRyZWVJbmZvIGNvbXBvc2l0aW5nSW5mbzsKLSAgICBjb21wb3NpdGlu
Z0luZm8ucm9vdExheWVySUQgPSByb290TGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIocm9vdExh
eWVyKS0+aWQoKSA6IDA7Ci0gICAgY29tcG9zaXRpbmdJbmZvLmNvbnRlbnRTY2FsZSA9IDEuMDsK
LSAgICBjb21wb3NpdGluZ0luZm8uZGVsZXRlZExheWVySURzID0gV2ViR3JhcGhpY3NMYXllcjo6
dGFrZUxheWVyc1RvRGVsZXRlKCk7Ci0gICAgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiBsYXll
cnM7Ci0gICAgaWYgKHJvb3RMYXllcikKLSAgICAgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb1Jl
Y3Vyc2l2ZWx5KHJvb3RMYXllciwgY29tcG9zaXRpbmdJbmZvLCBsYXllcnMpOworICAgIGlmICht
X2ltYWdlKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIHJldHVybiBJbnRSZWN0KDAs
IDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworfQogCi0gICAgaWYgKGNvbXBv
c2l0aW5nSW5mby5kZWxldGVkTGF5ZXJJRHMuaXNFbXB0eSgpICYmIGNvbXBvc2l0aW5nSW5mby5s
YXllcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CitJbnRSZWN0IFdlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKQoreworICAgIHJldHVybiBtX3Zpc2li
bGVDb250ZW50UmVjdDsKK30KIAotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdB
cmVhUHJveHk6OlN5bmNDb21wb3NpdGluZ0xheWVycyhjb21wb3NpdGluZ0luZm8pKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdl
YkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJzW2ldOwotICAgICAgICBGbG9hdFJlY3QgdXBk
YXRlUmVjdCA9IGxheWVyLT5uZWVkc0Rpc3BsYXlSZWN0KCk7Ci0KLSAgICAgICAgbGF5ZXItPmRp
ZFN5bmNocm9uaXplKCk7Ci0KLSAgICAgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUmVmUHRyPEltYWdlPiBkaXJlY3RJbWFnZSA9
IGxheWVyLT5pbWFnZSgpOwotICAgICAgICBpZiAoZGlyZWN0SW1hZ2UpCi0gICAgICAgICAgICB1
cGRhdGVSZWN0ID0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpOwotICAgICAgICBlbHNlIGlmICghbGF5
ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgVmVj
dG9yPEZsb2F0UmVjdD4gdGlsZVJlY3RzID0gZGl2aWRlSW50b1RpbGVzKHVwZGF0ZVJlY3QpOwot
ICAgICAgICBmb3IgKHNpemVfdCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCB0aWxlUmVjdHMu
c2l6ZSgpOyArK3RpbGVJbmRleCkgewotICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCA9IHRpbGVSZWN0c1t0aWxlSW5kZXhdOwotICAgICAgICAgICAgSW50UmVjdCBlbmNsb3Np
bmdVcGRhdGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh0aWxlUmVjdCk7Ci0KLSAgICAgICAgICAg
IFdlYkxheWVyVXBkYXRlSW5mbyBjaHVuayhlbmNsb3NpbmdVcGRhdGVSZWN0KTsKLSAgICAgICAg
ICAgIGNodW5rLmxheWVySUQgPSB1aW50MzJfdChsYXllci0+aWQoKSk7Ci0gICAgICAgICAgICBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNo
YXJlYWJsZShjaHVuay5yZWN0LnNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhh
KTsKLSAgICAgICAgICAgIGlmICghYml0bWFwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAgICAgaWYgKCFiaXRtYXAtPmNyZWF0ZUhhbmRsZShjaHVuay5iaXRtYXBIYW5kbGUp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRGT1JNKFFUKQotICAgICAgICAg
ICAgUUltYWdlIHRpbGVJbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCk7Ci0gICAgICAgICAg
ICB0aWxlSW1hZ2UuZmlsbCgwKTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBRUGFp
bnRlciBwYWludGVyKCZ0aWxlSW1hZ2UpOwotICAgICAgICAgICAgICAgIHBhaW50ZXIudHJhbnNs
YXRlKC10aWxlUmVjdC54KCksIC10aWxlUmVjdC55KCkpOwotICAgICAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KCZwYWludGVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlyZWN0
SW1hZ2UpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGRpcmVjdEltYWdl
LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBsYXllci0+Y29udGVudHNSZWN0KCksIEZsb2F0
UmVjdCgwLCAwLCBkaXJlY3RJbWFnZS0+d2lkdGgoKSwgZGlyZWN0SW1hZ2UtPmhlaWdodCgpKSk7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBsYXllci0+cGFpbnRH
cmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgZW5jbG9zaW5nVXBkYXRlUmVjdCk7Ci0gICAg
ICAgICAgICB9Ci0jZW5kaWYKK0NvbG9yIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0
b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGVudHNPcGFxdWUo
KSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIAotICAgICAgICAgICAgd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6VXBkYXRlQ29tcG9zaXRpbmdM
YXllckNvbnRlbnQoY2h1bmspKTsKLSAgICAgICAgfQorfQordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7
CisgICAgbV9tb2RpZmllZCA9IHRydWU7CisgICAgaWYgKFdlYkxheWVyVHJlZVRpbGVDbGllbnQq
IGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5jcmVhdGVU
aWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbyk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQor
eworICAgIG1fbW9kaWZpZWQgPSB0cnVlOworICAgIGlmIChXZWJMYXllclRyZWVUaWxlQ2xpZW50
KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+dXBkYXRl
VGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKK3sKKyAgICBtX21vZGlmaWVkID0gdHJ1ZTsKKyAg
ICBpZiAoV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVu
dCgpKQorICAgICAgICBjbGllbnQtPnJlbW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKK30KKwordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlQnVmZmVyc1JlY3Vyc2l2ZWx5KCkKK3sKKyAg
ICBtX21haW5CYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHRoaXMtPmNoaWxkcmVuKClbaV0p
OworICAgICAgICBsYXllci0+dXBkYXRlVGlsZUJ1ZmZlcnNSZWN1cnNpdmVseSgpOwogICAgIH0K
IH0KIAorV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJUcmVl
VGlsZUNsaWVudCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGF5ZXJUcmVlVGlsZUNsaWVudCkKKyAg
ICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlVGlsZUNsaWVudDsKKyAgICBXZWJHcmFwaGljc0xheWVy
KiBwYXJlbnQgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+cGFyZW50KCkpOworICAgIGlmICgh
cGFyZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gcGFyZW50LT5sYXllclRyZWVU
aWxlQ2xpZW50KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1
ZmZlcnMoKQoreworICAgIC8vIEJhY2tpbmctc3RvcmVzIGZvciBkaXJlY3RseSBjb21wb3NpdGVk
IGltYWdlcyBpcyBoYW5kbGVkIGluIExheWVyVHJlZUhvc3QuCisgICAgaWYgKG1faW1hZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xp
ZW50KCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2luVXBkYXRl
TW9kZSA9IHRydWU7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygp
OworICAgIG1faW5VcGRhdGVNb2RlID0gZmFsc2U7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgUGFz
c093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5
ZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYkdyYXBoaWNz
TGF5ZXIoY2xpZW50KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCmluZGV4IGFkNjAyMWUuLmFjMDU1
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCkBAIC0yNywxOSArMjcsNDAgQEAKICNpbmNsdWRl
ICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJp
dG1hcC5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRC
YWNraW5nU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlVwZGF0
ZUluZm8uaCIKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzcy5oIgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKLWNsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFdlYkxheWVyVHJlZVRpbGVDbGllbnQg
eworcHVibGljOgorICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVw
ZGF0ZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwg
aW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKSA9IDA7CisgICAgdmlydHVhbCBib29sIGxh
eWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludDY0
X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRpZERlbGV0ZUxheWVyKFdlYkxheWVySUQpID0gMDsKK307CiB9
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR3JhcGhpY3NMYXllciA6IHB1Ymxp
YyBXZWJDb3JlOjpHcmFwaGljc0xheWVyIHsKK2NsYXNzIFdlYkdyYXBoaWNzTGF5ZXIgOiBwdWJs
aWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllcgorI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQor
ICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAor
ICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZUNsaWVudAorI2VuZGlmCit7CiBwdWJsaWM6CiAgICAgV2ViR3JhcGhpY3NMYXll
cihHcmFwaGljc0xheWVyQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+V2ViR3JhcGhpY3NMYXllcigp
OwpAQCAtNzMsMTMgKzk0LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgp
OwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAg
IHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0Nv
bXBvc2l0aW5nU3RhdGUoKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBJ
bnRSZWN0Jik7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9y
KGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3Rh
dGUoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wpOwogCiAg
ICAgV2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJM
YXllckluZm8mIGxheWVySW5mbygpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlS
ZWN0KCkgY29uc3Q7Ci0gICAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IHRha2VM
YXllcnNUb0RlbGV0ZSgpOwogICAgIHN0YXRpYyBXZWJHcmFwaGljc0xheWVyKiBsYXllckJ5SUQo
V2ViS2l0OjpXZWJMYXllcklEKTsKICAgICBib29sIGlzTW9kaWZpZWQoKSBjb25zdCB7IHJldHVy
biBtX21vZGlmaWVkOyB9CiAgICAgdm9pZCBkaWRTeW5jaHJvbml6ZSgpOwpAQCAtODcsMjEgKzEw
OCw1MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSk7
CiAKICAgICBzdGF0aWMgdm9pZCBpbml0RmFjdG9yeSgpOwotICAgIHN0YXRpYyB2b2lkIHNlbmRM
YXllcnNUb1VJUHJvY2VzcyhXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViS2l0OjpXZWJQYWdl
Kik7CisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAvLyBUaWxlZEJhY2tpbmdT
dG9yZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4o
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3Jl
UGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7CisgICAgdmlydHVh
bCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKKyAgICB2aXJ0dWFs
IEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOworICAgIHZpcnR1YWwgQ29s
b3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKworICAgIC8vIFRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVU
aWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpOworCisgICAgdm9pZCBzZXRM
YXllclRyZWVUaWxlQ2xpZW50KFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50
KSB7IG1fbGF5ZXJUcmVlVGlsZUNsaWVudCA9IGNsaWVudDsgfQorICAgIFdlYktpdDo6V2ViTGF5
ZXJUcmVlVGlsZUNsaWVudCogbGF5ZXJUcmVlVGlsZUNsaWVudCgpIGNvbnN0OworCisgICAgYm9v
bCBpc1JlYWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVRpbGVC
dWZmZXJzUmVjdXJzaXZlbHkoKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOwor
ICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyNlbmRpZgogCiBwcml2YXRlOgogICAg
IFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwotICAgIFJlZlB0cjxXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcD4gbV9iYWNraW5nU3RvcmU7CisgICAgV2ViS2l0OjpXZWJMYXllclRyZWVU
aWxlQ2xpZW50KiBtX2xheWVyVGlsZUNsaWVudDsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7
CiAgICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKLSAgICBib29sIG1fbmVlZHNEaXNw
bGF5OwotICAgIGJvb2wgbV9tb2RpZmllZDsKLSAgICBib29sIG1fY29udGVudE5lZWRzRGlzcGxh
eTsKLSAgICBib29sIG1faGFzUGVuZGluZ0FuaW1hdGlvbnM7Ci0KLSAgICBmbG9hdCBtX2NvbnRl
bnRTY2FsZTsKKyAgICBJbnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRSZWN0OworICAgIGJvb2wgbV9u
ZWVkc0Rpc3BsYXkgOiAxOworICAgIGJvb2wgbV9tb2RpZmllZCA6IDE7CisgICAgYm9vbCBtX2Nv
bnRlbnROZWVkc0Rpc3BsYXkgOiAxOworICAgIGJvb2wgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA6
IDE7CisgICAgYm9vbCBtX2luVXBkYXRlTW9kZSA6IDI7CiAKICAgICB2b2lkIG5vdGlmeUNoYW5n
ZSgpOworCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgV2ViS2l0OjpXZWJMYXll
clRyZWVUaWxlQ2xpZW50KiBtX2xheWVyVHJlZVRpbGVDbGllbnQ7CisgICAgT3duUHRyPFdlYkNv
cmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7CisgICAgT3duUHRyPFdl
YkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOworICAgIGZs
b2F0IG1fY29udGVudHNTY2FsZTsKKyNlbmRpZgogfTsKIAogV2ViR3JhcGhpY3NMYXllciogdG9X
ZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggY2YzMDU3ZC4uOTMwNjU2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAg
LTc4LDYgKzc4LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRp
bmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5j
Q29tcG9zaXRpbmdMYXllcnMoKSA9IDA7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKikgPSAw
OworI2VuZGlmCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKaW5kZXggOTdm
ZjgyNy4uYTliMTNjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKQEAgLTY3Myw1ICs2NzMsMTMgQEAgdm9pZCBEcmF3
aW5nQXJlYUltcGw6OmRpc3BsYXkoVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKICAgICBtX2xhc3RE
aXNwbGF5VGltZSA9IGN1cnJlbnRUaW1lKCk7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKK3ZvaWQgRHJhd2luZ0FyZWFJbXBsOjpk
aWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVj
dGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiBhcmd1bWVudHMpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5kaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoY29ubmVjdGlvbiwg
bWVzc2FnZUlELCBhcmd1bWVudHMpOworfQorI2VuZGlmCisKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWFJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmgKaW5kZXggY2M4YTgwNS4uNWNhNTU0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaApAQCAtNzEsNiArNzEsMTAg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDaGlsZFdpbmRvd0dlb21ldHJ5
VXBkYXRlKGNvbnN0IFdpbmRvd0dlb21ldHJ5Jik7CiAjZW5kaWYKIAorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENv
cmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisjZW5kaWYKKwog
ICAgIC8vIENvcmVJUEMgbWVzc2FnZSBoYW5kbGVycy4KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
QmFja2luZ1N0b3JlU3RhdGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgYm9vbCByZXNw
b25kSW1tZWRpYXRlbHksIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkVXBkYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZGE0MmFlNi4uMDMxYzNmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNw
cApAQCAtMzQsNiArMzQsMTAgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgInF0L0xheWVyVHJlZUhvc3RRdC5oIgor
I2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
QEAgLTQ0LDYgKzQ4LDggQEAgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0PiBMYXllclRyZWVIb3N0
OjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdENBTWFj
OjpjcmVhdGUod2ViUGFnZSk7CiAjZWxpZiBQTEFURk9STShXSU4pICYmIEhBVkUoV0tRQ0EpCiAg
ICAgcmV0dXJuIExheWVyVHJlZUhvc3RDQVdpbjo6Y3JlYXRlKHdlYlBhZ2UpOworI2VsaWYgUExB
VEZPUk0oUVQpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICByZXR1cm4gTGF5ZXJUcmVlSG9z
dFF0OjpjcmVhdGUod2ViUGFnZSk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAppbmRl
eCA2N2M4MDdiLi45ODYwYTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmgKQEAgLTI5LDEwICsyOSwxNyBAQAogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAorbmFtZXNwYWNl
IENvcmVJUEMgeworY2xhc3MgQXJndW1lbnREZWNvZGVyOworY2xhc3MgQ29ubmVjdGlvbjsKK2Ns
YXNzIE1lc3NhZ2VJRDsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEludFJl
Y3Q7Ci0gICAgY2xhc3MgSW50U2l6ZTsKLSAgICBjbGFzcyBHcmFwaGljc0xheWVyOworY2xhc3Mg
RmxvYXRQb2ludDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgR3JhcGhp
Y3NMYXllcjsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC03Miw2ICs3OSwxNCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgfQogCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBmbG9hdCBzY2FsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcihp
bnQgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCByZW5kZXJOZXh0RnJhbWUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVy
VHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4p
CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ2hpbGRXaW5kb3dHZW9tZXRyeVVwZGF0ZShjb25z
dCBXaW5kb3dHZW9tZXRyeSYpID0gMDsKICNlbmRpZgpAQCAtODAsNiArOTUsMTEgQEAgcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3QoV2ViUGFnZSopOwogCiAgICAgV2ViUGFn
ZSogbV93ZWJQYWdlOworCisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBib29s
IG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKKyNlbmRpZgogfTsKIAogI2lmICFQTEFURk9STShXSU4p
ICYmICFQTEFURk9STShRVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNmI5MTM5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCkBAIC0wLDAg
KzEsMjggQEAKKyMKKyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorIyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorIyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyMKKyMgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisjICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKworI2lmIFVTRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQorbWVzc2FnZXMgLT4gTGF5ZXJUcmVlSG9zdCB7CisgICAgU2V0Vmlz
aWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQsIFdlYkNvcmU6OkludFJlY3Qgdmlz
aWJsZUNvbnRlbnRSZWN0KQorICAgIFNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0
b3IoV2ViQ29yZTo6RmxvYXRQb2ludCB0cmFqZWN0b3J5VmVjdG9yeSkKKyAgICBTZXRWaXNpYmxl
Q29udGVudFJlY3RBbmRTY2FsZShXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRSZWN0LCBmbG9hdCBz
Y2FsZSkKKyAgICBSZW5kZXJOZXh0RnJhbWUoKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAKaW5kZXgg
YmFkOWE3ZS4uYzQ4MmU2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcApAQCAtMTc3LDYgKzE3NywxMSBAQCB2b2lk
IFRpbGVkRHJhd2luZ0FyZWE6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKICAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OlJlbW92ZVRpbGUodGlsZUlEKSk7CiB9
CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBF
UikKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCit7Cit9CisjZW5kaWYKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJl
YS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEu
aAppbmRleCAwZDk2OTkzLi4xNGFlNWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllclN5bmMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nTGF5ZXJzKCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3Jl
SVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqKTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGY3OGUxZTcuLmYyMjA0ZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTIxNjYsNiArMjE2
NiwxNCBAQCB2b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rp
b24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZwogICAgICAgICAgICAgbV9kcmF3aW5nQXJl
YS0+ZGlkUmVjZWl2ZURyYXdpbmdBcmVhTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFy
Z3VtZW50cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyNpZiBVU0UoVElMRURfQkFDS0lO
R19TVE9SRSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtZXNzYWdl
SUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdD4oKSkgeworICAgICAgICBp
ZiAobV9kcmF3aW5nQXJlYSkKKyAgICAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVM
YXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzV2ViSW5zcGVjdG9y
PigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQv
TGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9x
dC9MYXllclRyZWVIb3N0UXQuY3BwCmluZGV4IDU3OGFlMDguLmQ4ZWJhMjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuY3BwCkBAIC0yNSw4ICsyNSw0MTIgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllclRyZWVI
b3N0UXQuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgorI2lu
Y2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IExheWVyVHJlZUhv
c3RRdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBMYXllclRyZWVIb3N0UXQod2ViUGFnZSkpOworfQorCitMYXllclRyZWVIb3N0UXQ6On5MYXll
clRyZWVIb3N0UXQoKQoreworfQorCitMYXllclRyZWVIb3N0UXQ6OkxheWVyVHJlZUhvc3RRdChX
ZWJQYWdlKiB3ZWJQYWdlKQorICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQorICAgICwgbV9u
b3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2lzVmFsaWQodHJ1
ZSkKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAsIG1fd2FpdGluZ0ZvclVJUHJv
Y2VzcyhmYWxzZSkKKyAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1f
c2hvdWxkU3luY0ZyYW1lKGZhbHNlKQorICAgICwgbV9zaG91bGRTeW5jUm9vdExheWVyKHRydWUp
CisgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAmTGF5ZXJUcmVlSG9zdFF0OjpsYXllckZs
dXNoVGltZXJGaXJlZCkKKyAgICAsIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUp
Cit7CisgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4KKyAgICBtX3Jvb3RMYXllciA9IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBXZWJHcmFwaGljc0xheWVyKiB3ZWJSb290TGF5
ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIHdlYlJvb3RM
YXllci0+c2V0Um9vdExheWVyKHRydWUpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RMYXll
ci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFF0IHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAgIG1f
cm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRT
aXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQud2ViTGF5ZXJJ
RCA9IHRvV2ViR3JhcGhpY3NMYXllcih3ZWJSb290TGF5ZXIpLT5pZCgpOworCisgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworI2lm
IFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RM
YXllci5nZXQoKSktPnNldExheWVyVHJlZVRpbGVDbGllbnQodGhpcyk7CisjZW5kaWYKKyNpZm5k
ZWYgTkRFQlVHCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJMYXll
clRyZWVIb3N0UXQgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdz
QmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkp
OworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNp
emUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLmdldCgpKTsKKworICAgIGlmIChtX3dlYlBhZ2UtPmhhc1BhZ2VPdmVybGF5KCkpCisg
ICAgICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdF
bmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCit7CisgICAgaWYgKG1fbGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1c2hpbmdFbmFibGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxheWVyRmx1c2hpbmdF
bmFibGVkOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RRdDo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJG
bHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5
ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmNhbmNlbFBlbmRpbmdMYXll
ckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFF0OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNo
KGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQoreworICAgIG1fbm90aWZ5QWZ0
ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICAvLyBBZGQgdGhlIGFjY2Vs
ZXJhdGVkIGxheWVyIHRyZWUgaGllcmFyY2h5LgorICAgIGlmIChncmFwaGljc0xheWVyKQorICAg
ICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6aW52YWxpZGF0ZSgpCit7CisgICAgY2FuY2Vs
UGVuZGluZ0xheWVyRmx1c2goKTsKKworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgIG1fcm9v
dExheWVyID0gbnVsbHB0cjsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKwordm9pZCBMYXll
clRyZWVIb3N0UXQ6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXll
cikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVj
dCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UXQ6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBz
Y3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpCit7CisgICAg
c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoc2Nyb2xsUmVjdCk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQoKQoreworICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2l6ZURpZENoYW5nZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKQoreworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5l
d1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhl
IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCisgICAg
Ly8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCisgICAgRmxvYXRTaXplIG9sZFNpemUg
PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBpZiAobmV3U2l6ZS53aWR0
aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWlu
KHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7
CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNp
emUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkg
PiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3
U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOworCisg
ICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5z
ZXRTaXplKG5ld1NpemUpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGNyZWF0ZVBh
Z2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0UXQ6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKK3sKKyAgICBkZXN0cm95
UGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RRdDo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6OmZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlcygpCit7CisgICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGlu
Z1N1YmZyYW1lcygpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXll
cikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKTsKKworICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKTsKKyAgICByZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UXQ6OmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIoY29uc3QgV2ViTGF5ZXJJ
bmZvJiBpbmZvKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U3luY0NvbXBvc2l0aW5nTGF5
ZXJTdGF0ZShpbmZvKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWREZWxldGVMYXll
cihXZWJMYXllcklEIGlkKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVsZXRlQ29tcG9z
aXRpbmdMYXllcihpZCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6cGVyZm9ybVNjaGVk
dWxlZExheWVyRmx1c2goKQoreworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKwor
ICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoVElMRURfQkFD
S0lOR19TVE9SRSkKKyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nl
c3MpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBm
YWxzZTsKKyAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICBpZiAoIW1fc2hvdWxk
U3luY0ZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zaG91bGRTeW5jUm9vdExh
eWVyKSB7CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFBy
b3h5OjpTZXRSb290Q29tcG9zaXRpbmdMYXllcih0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5
ZXIuZ2V0KCkpLT5pZCgpKSk7CisgICAgICAgIG1fc2hvdWxkU3luY1Jvb3RMYXllciA9IGZhbHNl
OworICAgIH0KKworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFBy
b3h5OjpEaWRSZW5kZXJGcmFtZSgpKTsKKworICAgIGlmICghbV9ub3RpZnlBZnRlclNjaGVkdWxl
ZExheWVyRmx1c2gpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIExldCB0aGUgZHJhd2luZyBh
cmVhIGtub3cgdGhhdCB3ZSd2ZSBkb25lIGEgZmx1c2ggb2YgdGhlIGxheWVyIGNoYW5nZXMuCisg
ICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgp
KS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKKyAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVk
TGF5ZXJGbHVzaCA9IGZhbHNlOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVz
aFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlSG9zdFF0PiopCit7CisgICAgcGVyZm9ybVNjaGVk
dWxlZExheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VP
dmVybGF5TGF5ZXIoKQoreworICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKKworICAg
IG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0
UXQgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKKyNlbmRpZgorCisgICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRT
aXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3Bh
Z2VPdmVybGF5TGF5ZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGVzdHJv
eVBhZ2VPdmVybGF5TGF5ZXIoKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOwor
ICAgIG1fcGFnZU92ZXJsYXlMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fcGFnZU92
ZXJsYXlMYXllciA9IG51bGxwdHI7Cit9CisKK2ludDY0X3QgTGF5ZXJUcmVlSG9zdFF0OjphZG9w
dEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAg
ICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisgICAgUVBpeG1hcCogcGl4bWFwID0gaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisKKyAgICBpZiAoIXBpeG1hcCkKKyAg
ICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOworCisgICAgaW50NjRfdCBrZXkgPSBwaXht
YXAtPmNhY2hlS2V5KCk7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOworCisgICAgaWYg
KGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKKyAgICAg
ICAgKysoaXQtPnNlY29uZCk7CisgICAgICAgIHJldHVybiBrZXk7CisgICAgfQorCisgICAgUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFy
ZWFibGUoaW1hZ2UtPnNpemUoKSwgaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFy
ZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwKTsKKyAgICB7CisgICAgICAgIE93blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRl
R3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGlt
YWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKKyAgICB9CisKKyAg
ICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgYml0bWFwLT5jcmVhdGVIYW5k
bGUoaGFuZGxlKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQ
cm94eTo6Q3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5LCBoYW5kbGUpKTsKKyAgICBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmFkZChrZXksIDEpOworICAgIHJldHVy
biBrZXk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZWxlYXNlSW1hZ2VCYWNraW5nU3Rv
cmUoaW50NjRfdCBrZXkpCit7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybjsKKyAgICBI
YXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZVJlZkNvdW50cy5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGl0LT5zZWNv
bmQtLTsKKworICAgIGlmIChpdC0+c2Vjb25kKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7CisgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRlc3Ryb3lEaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZShrZXkpKTsKK30KKworCit2b2lkIExheWVyVHJlZUhvc3RRdDo6bm90aWZ5QW5p
bWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUp
Cit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlTeW5jUmVxdWlyZWQoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpw
YWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIs
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3Qp
Cit7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
KSB7CisgICAgICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVj
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBt
X3BhZ2VPdmVybGF5TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXko
Z3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisK
K2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93RGVidWdCb3JkZXJzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJz
KCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENvdW50ZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dS
ZXBhaW50Q291bnRlcigpOworfQorCitib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgVVNFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCit2b2lkIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlVGlsZShXZWJM
YXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8p
Cit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkNy
ZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8pKTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UXQ6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGls
ZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJ
RCwgdGlsZUlELCB1cGRhdGVJbmZvKSk7Cit9Cit2b2lkIExheWVyVHJlZUhvc3RRdDo6cmVtb3Zl
VGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCit7CisgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZVRpbGVGb3JMYXllcihsYXll
cklELCB0aWxlSUQpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250
ZW50UmVjdEZvckxheWVyKGludCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0
KQoreworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gV2ViR3JhcGhpY3NMYXllcjo6bGF5
ZXJCeUlEKGxheWVySUQpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBG
bG9hdFJlY3QgdmlzaWJsZVJlY3QocmVjdCk7CisgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50
UmVjdChyZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50
UmVjdEFuZFNjYWxlKGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlKQoreworICAgIFdl
YkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdl
dCgpKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisgICAgbGF5ZXItPnNldENv
bnRlbnRzU2NhbGUoc2NhbGUpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29udGVudFJlY3QocmVjdCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVj
dG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgdG9XZWJHcmFw
aGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVD
b250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIG1fd2FpdGluZ0ZvclVJ
UHJvY2VzcyA9IGZhbHNlOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitib29sIExh
eWVyVHJlZUhvc3RRdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gIW1faXNTdXNwZW5kZWQgJiYgIW1fd2FpdGluZ0ZvclVJUHJvY2VzczsKK30KKwor
I2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorI2Vsc2UKICNpbmNsdWRlICJMYXllclRy
ZWVIb3N0LmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmco
KQpAQCAtMzUsMyArNDM5LDQgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhv
c3RRdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhv
c3RRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMDExYzYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJU
cmVlSG9zdFF0LmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5k
ZWYgTGF5ZXJUcmVlSG9zdFF0X2gKKyNkZWZpbmUgTGF5ZXJUcmVlSG9zdFF0X2gKKworI2luY2x1
ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCisjaW5j
bHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdlYlBhZ2U7
CisKK2NsYXNzIExheWVyVHJlZUhvc3RRdCA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2xpZW50CisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViTGF5ZXJUcmVlVGlsZUNsaWVudAorI2VuZGlm
Cit7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdFF0PiBjcmVh
dGUoV2ViUGFnZSopOworICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RRdCgpOworCisgICAgc3Rh
dGljIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CisKKyAgICB2aXJ0dWFs
IGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQoKSB7IHJldHVybiBtX2xh
eWVyVHJlZUNvbnRleHQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJG
bHVzaChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxOb25Db21wb3Np
dGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yY2VSZXBh
aW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgbmV3U2l6ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5
KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCk7CisgICAgdmly
dHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRl
ZCA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3Vz
cGVuZGVkID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CisgICAgdmlydHVhbCB2b2lk
IGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkgeyB9CisgICAgdmlydHVhbCBpbnQ2NF90IGFk
b3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUlt
YWdlQmFja2luZ1N0b3JlKGludDY0X3QpOworCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29u
c3QgVXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQs
IGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
VGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJs
ZUNvbnRlbnRSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdmlydHVhbCBib29s
IGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShjb25zdCBJbnRSZWN0JiwgZmxvYXQgc2NhbGUp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9y
KGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5n
U3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIGV4cGxp
Y2l0IExheWVyVHJlZUhvc3RRdChXZWJQYWdlKik7CisKK3ByaXZhdGU6CisgICAgLy8gR3JhcGhp
Y3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7CisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWlu
dGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CisgICAgdmlydHVh
bCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1Jl
cGFpbnRDb3VudGVyKCkgY29uc3Q7CisKKyAgICAvLyBMYXllclRyZWVIb3N0UXQKKyAgICB2b2lk
IGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxh
eWVyKCk7CisgICAgYm9vbCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGNh
bmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisgICAgdm9pZCBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCgpOworICAgIHZvaWQgc2VuZExheWVyc1RvVUkoKTsKKworICAgIE93blB0cjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKworICAgIC8vIFRoZSBsYXllciB3aGljaCBj
b250YWlucyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KKyAgICBPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOworCisgICAgLy8gVGhl
IHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVy
bGF5LgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5
ZXI7CisKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZVJlZkNvdW50czsKKworICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7
CisgICAgYm9vbCBtX2lzVmFsaWQ7CisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAg
Ym9vbCBtX3dhaXRpbmdGb3JVSVByb2Nlc3M7CisgICAgYm9vbCBtX2lzU3VzcGVuZGVkOworI2Vu
ZGlmCisgICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7CisgICAgYm9vbCBt
X3Nob3VsZFN5bmNGcmFtZTsKKyAgICBib29sIG1fc2hvdWxkU3luY1Jvb3RMYXllcjsKKyAgICB2
b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhvc3RRdD4q
KTsKKyAgICBXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVIb3N0UXQ+IG1fbGF5ZXJGbHVzaFRpbWVy
OworICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7Cit9OworCit9CisKKyNl
bmRpZiAvLyBMYXllclRyZWVIb3N0UXRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111706</attachid>
            <date>2011-10-19 18:19:47 -0700</date>
            <delta_ts>2011-10-21 10:18:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>23716</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0YjgyYmYxLi5lYjRmNmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYg
QEAKKzIwMTEtMTAtMTkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdW1dLMl0gU3luY2hyb25pemUgdGlsaW5nIHdpdGggYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY5MTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTWFrZSBRVG91Y2hXZWJWaWV3IGFsd2F5cyByZW5kZXIgd2l0aCBhY2NlbGVyYXRlZCBj
b21wb3NpdGluZy4KKworICAgICAgICBBdCBmaXJzdCwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgd2hl
biB0aGUgd2ViLXZpZXcgaXMgYmVoaW5kIG9yIGluIGZyb250IG9mIHRoZSByZXN0IG9mIHRoZQor
ICAgICAgICBzY2VuZS4gSW4gYSBzZXBhcmF0ZSBwYXRjaCwgd2UgY2FuIGVuYWJsaW5nIHJlbmRl
cmluZyBhIHRvdWNoIHdlYi12aWV3IGluIHRoZSBtaWRkbGUgb2YgdGhlCisgICAgICAgIHNjZW5l
LiBUaGlzIGlzIGJlY2F1c2Ugd2UgcGFpbnQgZGlyZWN0bHkgdG8gR0wsIGFuZCBRdCBTY2VuZWdy
YXBoIGRvZXMgbm90IGFsbG93IHBhaW50aW5nCisgICAgICAgIHdpdGggR0wgaW4gdGhlIG1pZGRs
ZSBvZiBwYWludGluZyB0aGUgb3RoZXIgc2NlbmUuCisKKyAgICAgICAgUmlnaHQgbm93IHRoaXMg
b25seSB3b3JrcyBmb3IgUVRvdWNoV2ViVmlldywgYW5kIHRodXMgYWNjZWxlcmF0ZWQgY29tcG9z
aXRpbmcgaXMgZGlzYWJsZWQKKyAgICAgICAgZm9yIGRlc2t0b3Agd2ViLXZpZXdzLiBUaGlzIHJl
cXVpcmVkIGFkZGluZyBzb21lIHNldHRpbmdzIGVuYWJsZXJzIGluCisgICAgICAgIFFXZWJQcmVm
ZXJlbmNlc1ByaXZhdGUuIFRob3NlIGFyZSBub3QgZXhwb3NlZCB0byB0aGUgcHVibGljIEFQSSwg
YXMgdGhleSBhcmUgYW4KKyAgICAgICAgaW1wbGVtZW50YXRpb24gZGV0YWlsLgorCisgICAgICAg
IFRoZSBmbG93IGdvZXMgYXMgc3VjaDoKKyAgICAgICAgMS4gV2Ugc3RhcnQgcGFpbnRpbmcgdGhl
IHNjZW5lLCBhbmQgcmVjZWl2ZSB0aGUgUVNHRW5naW5lOjphZnRlclJlbmRlcmluZygpIHNpZ25h
bC4KKyAgICAgICAgMi4gV2UgY2FsY3VsYXRlIGlmIHRoZSB3ZWIgdmlldyBoYXMgb3ZlcmxhcHBp
bmcgaXRlbXMgYmVoaW5kIG9yIGluIGZyb250IG9mIGl0LgorICAgICAgICAzLiBJZiB0aGVyZSBh
cmUgbm8gb3ZlcmxhcHMgYmVoaW5kIHRoZSB3ZWIgdmlldywgd2UgcGFpbnQgdGhlIHdlYiB2aWV3
IHJpZ2h0IGF3YXkuCisgICAgICAgIDQuIFdoZW4gdGhlIFFTR0VuZ2luZTo6YmVmb3JlUmVuZGVy
aW5nIHNpZ25hbCBpcyBlbWl0dGVkLCB3ZSBwYWludCB0aGUgd2ViIHZpZXcgaWYgaXQKKyAgICAg
ICAgICAgd2Fzbid0IHBhaW50ZWQgaW4gdGhlIHByZXZpb3VzIGl0ZXJhdGlvbi4KKworICAgICAg
ICBUaGlzIHBhdGNoIGVmZmVjdGl2ZWx5IG1ha2VzIFRpbGVkRHJhd2luZ0FyZWEgYW5kIFNHQWdl
bnQgdW51c2VkLCBhcyBhbGwgb2YgdGhlaXIgY29udGVudAorICAgICAgICBpcyBwb3J0cmF5ZWQg
aW4gVGV4dHVyZU1hcHBlck5vZGUgYW5kIExheWVyVHJlZVByb3h5SG9zdFF0LgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFUb3VjaFdl
YlBhZ2U6OlFUb3VjaFdlYlBhZ2UpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZTo6aW5pdFNjZW5l
R3JhcGhDb25uZWN0aW9ucyk6CisgICAgICAgIChRVG91Y2hXZWJQYWdlOjp1cGRhdGVQYWludE5v
ZGUpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZVByaXZhdGU6OlFUb3VjaFdlYlBhZ2VQcml2YXRl
KToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpzZXRQYWdlKToKKyAgICAgICAgKGNv
bXB1dGVPdmVybGFwcyk6CisgICAgICAgIChjb21wdXRlRWZmZWN0aXZlT3BhY2l0eSk6CisgICAg
ICAgIChRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAg
ICAgICAoUVRvdWNoV2ViUGFnZVByaXZhdGU6Ol9xX29uQWZ0ZXJTY2VuZVJlbmRlcik6CisgICAg
ICAgIChRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6X3Ffb25CZWZvcmVTY2VuZVJlbmRlcik6CisgICAg
ICAgIChRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6X3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQpOgor
ICAgICAgICAoUVRvdWNoV2ViUGFnZTo6aXRlbUNoYW5nZSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xdG91
Y2h3ZWJwYWdlX3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNl
cy5jcHA6CisgICAgICAgIChRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjp0ZXN0QXR0cmlidXRlKToK
KyAgICAgICAgKFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OnNldEF0dHJpYnV0ZSk6CisgICAgICAg
IChRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjpnZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
cXQvcXdlYnByZWZlcmVuY2VzX3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJlbmRlck5leHRGcmFtZSk6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L1RvdWNoVmlld0ludGVyZmFjZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlRvdWNoVmlld0ludGVyZmFjZTo6c2V0Vmlld05lZWRzRGlzcGxheSk6CisgICAg
ICAgICogVUlQcm9jZXNzL3F0L3FkZXNrdG9wd2VicGFnZXByb3h5LmNwcDoKKyAgICAgICAgKFFE
ZXNrdG9wV2ViUGFnZVByb3h5OjpRRGVza3RvcFdlYlBhZ2VQcm94eSk6CisgICAgICAgICogVUlQ
cm9jZXNzL3F0L3F0b3VjaHdlYnBhZ2Vwcm94eS5jcHA6CisgICAgICAgIChRVG91Y2hXZWJQYWdl
UHJveHk6OlFUb3VjaFdlYlBhZ2VQcm94eSk6CisgICAgICAgIChRVG91Y2hXZWJQYWdlUHJveHk6
OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZVByb3h5Ojpy
ZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZVByb3h5Ojpz
ZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZSk6CisgICAgICAgIChRVG91Y2hXZWJQYWdlUHJv
eHk6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoUVRv
dWNoV2ViUGFnZVByb3h5OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9xdG91Y2h3ZWJwYWdlcHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdB
cmVhLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc01haW5RdCk6CisKIDIwMTEtMTAtMTggIFNhbSBXZWluaWcgIDxzYW1Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIHVzZXMgb2YgQyBTUEkgb3V0IG9mIFdLVmlldy5oIGFu
ZCBpbnRvIFdLVmlld1ByaXZhdGUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXRvdWNod2VicGFnZS5jcHAKaW5kZXggMDFmNDA5OS4uODkxMjkxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuY3BwCkBAIC0y
MCwxMiArMjAsMTUgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInF0b3VjaHdl
YnBhZ2UuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlX3AuaCIKIAorI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAicXRvdWNod2VicGFnZV9wLmgiCiAjaW5jbHVk
ZSAicXRvdWNod2VicGFnZXByb3h5LmgiCiAjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgogI2luY2x1
ZGUgPFFHcmFwaGljc1NjZW5lTW91c2VFdmVudD4KICNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNs
dWRlIDxRU0dDYW52YXM+CisjaW5jbHVkZSA8UVNHRW5naW5lPgogI2luY2x1ZGUgPFFTR05vZGU+
CiAjaW5jbHVkZSA8UVVybD4KIApAQCAtMzgsOSArNDEsMjQgQEAgUVRvdWNoV2ViUGFnZTo6UVRv
dWNoV2ViUGFnZShRU0dJdGVtKiBwYXJlbnQpCiAgICAgLy8gV2UgZG8gdGhlIHRyYW5zZm9ybSBm
cm9tIHRoZSB0b3AgbGVmdCBzbyB0aGUgdmlld3BvcnQgY2FuIGFzc3VtZSB0aGUgcG9zaXRpb24g
MCwgMAogICAgIC8vIGlzIGFsd2F5cyB3aGVyZSByZW5kZXJpbmcgc3RhcnRzLgogICAgIHNldFRy
YW5zZm9ybU9yaWdpbihUb3BMZWZ0KTsKKyAgICBpbml0U2NlbmVHcmFwaENvbm5lY3Rpb25zKCk7
CiAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwodmlzaWJsZUNoYW5nZWQoKSksIFNMT1Qob25WaXNp
YmxlQ2hhbmdlZCgpKSk7CiB9CiAKK3ZvaWQgUVRvdWNoV2ViUGFnZTo6aW5pdFNjZW5lR3JhcGhD
b25uZWN0aW9ucygpCit7CisgICAgaWYgKGQtPnBhaW50aW5nSXNJbml0aWFsaXplZCkKKyAgICAg
ICAgcmV0dXJuOworICAgIGQtPnBhaW50aW5nSXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgUVNH
Q2FudmFzKiBjYW52YXMgPSB0aGlzLT5jYW52YXMoKTsKKyAgICBpZiAoIWNhbnZhcykKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChzY2VuZUdyYXBoRW5naW5lKCkpCisgICAgICAgIGQtPl9xX29u
U2NlbmVHcmFwaEluaXRpYWxpemVkKCk7CisgICAgZWxzZQorICAgICAgICBjb25uZWN0KGNhbnZh
cywgU0lHTkFMKHNjZW5lR3JhcGhJbml0aWFsaXplZCgpKSwgdGhpcywgU0xPVChfcV9vblNjZW5l
R3JhcGhJbml0aWFsaXplZCgpKSk7Cit9CisKIFFUb3VjaFdlYlBhZ2U6On5RVG91Y2hXZWJQYWdl
KCkKIHsKICAgICBkZWxldGUgZDsKQEAgLTczLDE4ICs5MSw3IEBAIFFTR05vZGUqIFFUb3VjaFdl
YlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVE
YXRhKikKICAgICBpZiAoIW9sZE5vZGUpCiAgICAgICAgIG9sZE5vZGUgPSBuZXcgUVNHTm9kZTsK
IAotICAgIC8vIEEgc3dhcCBpcyBvbiB0aGUgcXVldWUsIGFuZCBTR1VwZGF0ZVF1ZXVlOjphcHBs
eVVwZGF0ZXMgd2lsbCBlbXB0eSB0aGUgcXVldWUsIHNvIHdlIGtub3cgdGhhdAotICAgIC8vIHRo
ZSBvbGQgZnJhbWUncyBidWZmZXJzIHdvbid0IGJlIHVzZWQgYW55bW9yZSAoZm9yIGJ1ZmZlcnMg
dXNlZCBhbGwgdGhlIHdheSBmcm9tIHRoZSB3ZWIgcHJvY2VzcwotICAgIC8vIHRvIHRoZSBncmFw
aGljIGNhcmQpLiBOb3RpZnkgdGhlIHdlYiBwcm9jZXNzIHRoYXQgaXQgY2FuIHJlbmRlciB0aGUg
bmV4dCBmcmFtZS4KLSAgICBpZiAoZC0+c2dVcGRhdGVRdWV1ZS5pc1N3YXBQZW5kaW5nKCkpCi0g
ICAgICAgIC8vIFRoZSBVSSB0aHJlYWQgaXMgY3VycmVudGx5IGxvY2tlZCBhbmQgY2FsbGluZyB0
aGlzIGZyb20gdGhlIHJlbmRlcmluZyB0aHJlYWQgZGlkbid0IGNyYXNoCi0gICAgICAgIC8vIHll
dCwgc28gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBPSy4gRWxzZSB3ZSBoYXZlIHRvIHdhaXQg
dW50aWwgdGhlIFNHIHVwZGF0ZSBpcyBvdmVyCi0gICAgICAgIC8vIGFuZCB0aGUgVUkgdGhyZWFk
IHJldHVybnMgdG8gdGhlIGV2ZW50IGxvb3AgcGlja2luZyBvdXIgZXZlbnQgYmVmb3JlIGl0IGNh
biBiZSBzZW50IHRvCi0gICAgICAgIC8vIHRoZSB3ZWIgcHJvY2Vzcy4gVGhpcyB3b3VsZCBpbmNy
ZWFzZSBvdXIgY2hhbmNlcyBvZiBtaXNzaW5nIGEgZnJhbWUuCi0gICAgICAgIGQtPnBhZ2UtPnJl
bmRlck5leHRGcmFtZSgpOwotICAgIGQtPnNnVXBkYXRlUXVldWUuYXBwbHlVcGRhdGVzKG9sZE5v
ZGUpOwotCi0gICAgLy8gUVNHSXRlbSB0YWtlcyBvd25lcnNoaXAgb2YgdGhpcyByZXR1cm4gdmFs
dWUgYW5kIGl0J3MgY2hpbGRyZW4gYmV0d2VlbiBhbmQgYWZ0ZXIgdXBkYXRlUGFpbnROb2RlIGNh
bGxzLgorICAgIC8vIFRPRE86IFBhaW50IG5vZGUgd2hlbiBpbnNpZGUgKG5vdCBiZWZvcmUgb3Ig
YWZ0ZXIpIHNjZW5lLgogICAgIHJldHVybiBvbGROb2RlOwogfQogCkBAIC0xNTEsNiArMTU4LDcg
QEAgUVRvdWNoV2ViUGFnZVByaXZhdGU6OlFUb3VjaFdlYlBhZ2VQcml2YXRlKFFUb3VjaFdlYlBh
Z2UqIHZpZXcpCiAgICAgLCBwYWdlKDApCiAgICAgLCBuYXZpZ2F0aW9uQ29udHJvbGxlcigwKQog
ICAgICwgc2dVcGRhdGVRdWV1ZSh2aWV3KQorICAgICwgcGFpbnRpbmdJc0luaXRpYWxpemVkKGZh
bHNlKQogewogfQogCkBAIC0xNTksNiArMTY3LDEwMyBAQCB2b2lkIFFUb3VjaFdlYlBhZ2VQcml2
YXRlOjpzZXRQYWdlKFFUb3VjaFdlYlBhZ2VQcm94eSogcGFnZSkKICAgICBBU1NFUlQoIXRoaXMt
PnBhZ2UpOwogICAgIEFTU0VSVChwYWdlKTsKICAgICB0aGlzLT5wYWdlID0gcGFnZTsKKworfQor
CitzdGF0aWMgdm9pZCBjb21wdXRlT3ZlcmxhcHMoY29uc3QgUVNHSXRlbSogY3VySXRlbSwgY29u
c3QgUVNHSXRlbSogaXRlbSwgYm9vbCYgaGFzQmVoaW5kLCBib29sJiBoYXNJbkZyb250LCBjb25z
dCBRUmVjdEYmIGl0ZW1Cb3VuZGluZ1JlY3QsIGJvb2wgbm93SW5Gcm9udCA9IGZhbHNlKQorewor
ICAgIGlmIChoYXNJbkZyb250ICYmIG5vd0luRnJvbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChjdXJJdGVtID09IGl0ZW0pCisgICAgICAgIG5vd0luRnJvbnQgPSB0cnVlOworCisgICAg
UUxpc3Q8UVNHSXRlbSAqPiBjaGlsZEl0ZW1zID0gY3VySXRlbS0+Y2hpbGRJdGVtcygpOworICAg
IGZvcmVhY2ggKFFTR0l0ZW0qIGNoaWxkLCBjaGlsZEl0ZW1zKQorICAgICAgICBjb21wdXRlT3Zl
cmxhcHMoY2hpbGQsIGl0ZW0sIGhhc0JlaGluZCwgaGFzSW5Gcm9udCwgaXRlbUJvdW5kaW5nUmVj
dCwgbm93SW5Gcm9udCk7CisKKyAgICBpZiAoKGhhc0JlaGluZCAmJiAhbm93SW5Gcm9udCkgfHwg
Y3VySXRlbSA9PSBpdGVtKQorICAgICAgICByZXR1cm47CisKKyAgICBRUmVjdEYgY3VySXRlbUJv
dW5kaW5nUmVjdCA9IGN1ckl0ZW0tPm1hcFJlY3RUb1NjZW5lKGN1ckl0ZW0tPmJvdW5kaW5nUmVj
dCgpKTsKKyAgICBpZiAoaXRlbUJvdW5kaW5nUmVjdC5pbnRlcnNlY3RzKGN1ckl0ZW1Cb3VuZGlu
Z1JlY3QpKQorICAgICAgICAobm93SW5Gcm9udCA/IGhhc0luRnJvbnQgOiBoYXNCZWhpbmQpID0g
dHJ1ZTsKK30KKworZmxvYXQgY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHkoY29uc3QgUVNHSXRlbSog
aXRlbSkKK3sKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJldHVybiAxLjA7CisKKyAgICBmbG9h
dCBvcGFjaXR5ID0gaXRlbS0+b3BhY2l0eSgpOworICAgIGlmIChvcGFjaXR5IDwgMC4wMSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gb3BhY2l0eSAqIGNvbXB1dGVFZmZlY3RpdmVP
cGFjaXR5KGl0ZW0tPnBhcmVudEl0ZW0oKSk7Cit9CisKK3ZvaWQgUVRvdWNoV2ViUGFnZVByaXZh
dGU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCkKK3sKKyAgICBpZiAoIXEtPmlzVmlzaWJsZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBRVHJhbnNmb3JtIHRyYW5zZm9ybSA9IHEtPml0ZW1U
cmFuc2Zvcm0oMCwgMCk7CisgICAgZmxvYXQgb3BhY2l0eSA9IGNvbXB1dGVFZmZlY3RpdmVPcGFj
aXR5KHEpOworICAgIFFSZWN0RiBjbGlwUmVjdCA9IHEtPnBhcmVudEl0ZW0oKS0+bWFwUmVjdFRv
U2NlbmUocS0+cGFyZW50SXRlbSgpLT5ib3VuZGluZ1JlY3QoKSk7CisKKyAgICBnbEVuYWJsZShH
TF9TQ0lTU09SX1RFU1QpOworICAgIGNvbnN0IGludCBsZWZ0ID0gY2xpcFJlY3QubGVmdCgpOwor
ICAgIGNvbnN0IGludCB3aWR0aCA9IGNsaXBSZWN0LndpZHRoKCk7CisgICAgY29uc3QgaW50IGJv
dHRvbSA9IHEtPmNhbnZhcygpLT5oZWlnaHQoKSAtIChjbGlwUmVjdC5ib3R0b20oKSArIDEpOwor
ICAgIGNvbnN0IGludCBoZWlnaHQgPSBjbGlwUmVjdC5oZWlnaHQoKTsKKworICAgIGdsU2Npc3Nv
cihsZWZ0LCBib3R0b20sIHdpZHRoLCBoZWlnaHQpOworCisgICAgcGFnZS0+cmVuZGVyVG9DdXJy
ZW50R0xDb250ZXh0KHRyYW5zZm9ybSwgb3BhY2l0eSk7CisgICAgZ2xEaXNhYmxlKEdMX1NDSVNT
T1JfVEVTVCk7Cit9CisKK3ZvaWQgUVRvdWNoV2ViUGFnZVByaXZhdGU6Ol9xX29uQWZ0ZXJTY2Vu
ZVJlbmRlcigpCit7CisgICAgaWYgKCFxLT5jYW52YXMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKHJlbmRlclBoYXNlID09IFJlbmRlckFmdGVyU2NlbmUpCisgICAgICAgIHBhaW50VG9D
dXJyZW50R0xDb250ZXh0KCk7Cit9CisKK3ZvaWQgUVRvdWNoV2ViUGFnZVByaXZhdGU6Ol9xX29u
QmVmb3JlU2NlbmVSZW5kZXIoKQoreworICAgIGlmICghcS0+Y2FudmFzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJvb2wgaGFzT3ZlcmxhcHNCZWhpbmQgPSBmYWxzZTsKKyAgICBib29sIGhh
c092ZXJsYXBzSW5Gcm9udCA9IGZhbHNlOworICAgIFFSZWN0RiBpdGVtQm91bmRpbmdSZWN0ID0g
cS0+bWFwUmVjdFRvU2NlbmUocS0+Ym91bmRpbmdSZWN0KCkpOworICAgIGNvbXB1dGVPdmVybGFw
cyhxLCBxLT5jYW52YXMoKS0+cm9vdEl0ZW0oKSwgaGFzT3ZlcmxhcHNCZWhpbmQsIGhhc092ZXJs
YXBzSW5Gcm9udCwgaXRlbUJvdW5kaW5nUmVjdCk7CisgICAgaWYgKGhhc092ZXJsYXBzQmVoaW5k
ICYmIGhhc092ZXJsYXBzSW5Gcm9udCkKKyAgICAgICAgcmVuZGVyUGhhc2UgPSBSZW5kZXJJbnNp
ZGVTY2VuZTsKKyAgICBlbHNlIGlmIChoYXNPdmVybGFwc0JlaGluZCkKKyAgICAgICAgcmVuZGVy
UGhhc2UgPSBSZW5kZXJBZnRlclNjZW5lOworICAgIGVsc2UKKyAgICAgICAgcmVuZGVyUGhhc2Ug
PSBSZW5kZXJCZWZvcmVTY2VuZTsKKworICAgIGlmIChyZW5kZXJQaGFzZSA9PSBSZW5kZXJCZWZv
cmVTY2VuZSkKKyAgICAgICAgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKTsKK30KKwordm9pZCBR
VG91Y2hXZWJQYWdlUHJpdmF0ZTo6X3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKQoreworICAg
IFFTR0VuZ2luZSogZW5naW5lID0gcS0+c2NlbmVHcmFwaEVuZ2luZSgpOworICAgIFFPYmplY3Q6
OmNvbm5lY3QoZW5naW5lLCBTSUdOQUwoYmVmb3JlUmVuZGVyaW5nKCkpLCBxLCBTTE9UKF9xX29u
QmVmb3JlU2NlbmVSZW5kZXIoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBRT2JqZWN0
Ojpjb25uZWN0KGVuZ2luZSwgU0lHTkFMKGFmdGVyUmVuZGVyaW5nKCkpLCBxLCBTTE9UKF9xX29u
QWZ0ZXJTY2VuZVJlbmRlcigpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworfQorCit2b2lkIFFU
b3VjaFdlYlBhZ2U6Oml0ZW1DaGFuZ2UoSXRlbUNoYW5nZSBjaGFuZ2UsIGNvbnN0IEl0ZW1DaGFu
Z2VEYXRhICZkYXRhKQoreworICAgIGlmIChjaGFuZ2UgPT0gSXRlbVNjZW5lQ2hhbmdlKQorICAg
ICAgICBpbml0U2NlbmVHcmFwaENvbm5lY3Rpb25zKCk7CisgICAgUVNHSXRlbTo6aXRlbUNoYW5n
ZShjaGFuZ2UsIGRhdGEpOwogfQogCiB2b2lkIFFUb3VjaFdlYlBhZ2U6Om9uVmlzaWJsZUNoYW5n
ZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3
ZWJwYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2Uu
aAppbmRleCAwYWYwZGE1Li4yMjIyMGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuaApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSA8
UXREZWNsYXJhdGl2ZS9xc2dpdGVtLmg+CiAjaW5jbHVkZSA8UVNoYXJlZFBvaW50ZXI+CisjaW5j
bHVkZSA8V2ViS2l0Mi9XS1BhZ2UuaD4KIAogY2xhc3MgUVRvdWNoV2ViUGFnZVByaXZhdGU7CiBj
bGFzcyBRVG91Y2hXZWJQYWdlUHJveHk7CkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgUVNHTm9kZSogdXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVwZGF0
ZVBhaW50Tm9kZURhdGEqKTsKICAgICB2aXJ0dWFsIGJvb2wgZXZlbnQoUUV2ZW50Kik7Ci0KKyAg
ICAKIFFfU0lHTkFMUzoKICAgICB2b2lkIHVybENoYW5nZWQoY29uc3QgUVVybCYgdXJsKTsKICAg
ICB2b2lkIHRpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nJiB0aXRsZSk7CkBAIC04Nyw4ICs4OCwx
NSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHRvdWNoRXZlbnQoUVRvdWNoRXZlbnQq
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3RGJiwgY29u
c3QgUVJlY3RGJik7CisgICAgdmlydHVhbCB2b2lkIGl0ZW1DaGFuZ2UoSXRlbUNoYW5nZSwgY29u
c3QgSXRlbUNoYW5nZURhdGEgJik7CiAKIHByaXZhdGU6CisgICAgUV9QUklWQVRFX1NMT1QoZCwg
dm9pZCBfcV9vbkJlZm9yZVNjZW5lUmVuZGVyKCkpOworICAgIFFfUFJJVkFURV9TTE9UKGQsIHZv
aWQgX3Ffb25BZnRlclNjZW5lUmVuZGVyKCkpOworICAgIFFfUFJJVkFURV9TTE9UKGQsIHZvaWQg
X3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKSk7CisKKyAgICB2b2lkIGluaXRTY2VuZUdyYXBo
Q29ubmVjdGlvbnMoKTsKKwogICAgIFFUb3VjaFdlYlBhZ2VQcml2YXRlKiBkOwogICAgIGZyaWVu
ZCBjbGFzcyBRVG91Y2hXZWJWaWV3UHJpdmF0ZTsKICAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpU
b3VjaFZpZXdJbnRlcmZhY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F0b3VjaHdlYnBhZ2VfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xdG91Y2h3ZWJwYWdlX3AuaAppbmRleCAwMWZhODgxLi5mN2E2MDQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2VfcC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmgKQEAgLTM4LDEw
ICszOCwyMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFBhZ2UoUVRvdWNoV2ViUGFnZVByb3h5
Kik7CiAKKyAgICB2b2lkIF9xX29uQmVmb3JlU2NlbmVSZW5kZXIoKTsKKyAgICB2b2lkIF9xX29u
QWZ0ZXJTY2VuZVJlbmRlcigpOworICAgIHZvaWQgX3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQo
KTsKKyAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KCk7CisgICAgZW51bSBSZW5kZXJQ
aGFzZSB7CisgICAgICAgIFJlbmRlckJlZm9yZVNjZW5lLAorICAgICAgICBSZW5kZXJJbnNpZGVT
Y2VuZSwKKyAgICAgICAgUmVuZGVyQWZ0ZXJTY2VuZQorICAgIH07CisKKyAgICBSZW5kZXJQaGFz
ZSByZW5kZXJQaGFzZTsKKwogICAgIFFUb3VjaFdlYlBhZ2UqIGNvbnN0IHE7CiAgICAgUVRvdWNo
V2ViUGFnZVByb3h5KiBwYWdlOwogICAgIFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlciogbmF2aWdh
dGlvbkNvbnRyb2xsZXI7CiAgICAgV2ViS2l0OjpTR1VwZGF0ZVF1ZXVlIHNnVXBkYXRlUXVldWU7
CisgICAgYm9vbCBwYWludGluZ0lzSW5pdGlhbGl6ZWQ7CiB9OwogCiAjZW5kaWYgLyogcXRvdWNo
d2VicGFnZV9wX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXdlYnByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXdlYnByZWZlcmVuY2VzLmNwcAppbmRleCA5ZWFlNmU4Li5jMGJhMjFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwCkBAIC0y
Miw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJXS1BhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldLUHJl
ZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIgogI2luY2x1ZGUg
IldLUmV0YWluUHRyLmgiCiAjaW5jbHVkZSAiV0tTdHJpbmdRdC5oIgogI2luY2x1ZGUgInF3ZWJw
cmVmZXJlbmNlc19wLmgiCkBAIC01Miw2ICs1Myw4IEBAIGJvb2wgUVdlYlByZWZlcmVuY2VzUHJp
dmF0ZTo6dGVzdEF0dHJpYnV0ZShRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjpXZWJBdHRyaWJ1dGUK
ICAgICAgICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNHZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHJl
Zik7CiAgICAgY2FzZSBEbnNQcmVmZXRjaEVuYWJsZWQ6CiAgICAgICAgIHJldHVybiBXS1ByZWZl
cmVuY2VzR2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKHJlZik7CisgICAgY2FzZSBBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRW5hYmxlZDoKKyAgICAgICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNHZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChyZWYpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04NSw2ICs4OCw5
IEBAIHZvaWQgUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6c2V0QXR0cmlidXRlKFFXZWJQcmVmZXJl
bmNlc1ByaXZhdGU6OldlYkF0dHJpYnV0ZSBhCiAgICAgY2FzZSBEbnNQcmVmZXRjaEVuYWJsZWQ6
CiAgICAgICAgIFdLUHJlZmVyZW5jZXNTZXRETlNQcmVmZXRjaGluZ0VuYWJsZWQocmVmLCBlbmFi
bGUpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkOgorICAgICAgICBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQocmVmLCBlbmFibGUpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zNzYsMyArMzgyLDggQEAgdm9pZCBRV2Vi
UHJlZmVyZW5jZXM6OnNldERlZmF1bHRGaXhlZEZvbnRTaXplKHVuc2lnbmVkIHNpemUpCiAgICAg
ZC0+c2V0Rm9udFNpemUoUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6RGVmYXVsdEZpeGVkRm9udFNp
emUsIHNpemUpOwogICAgIGVtaXQgZGVmYXVsdEZpeGVkRm9udFNpemVDaGFuZ2VkKCk7CiB9CisK
K1FXZWJQcmVmZXJlbmNlc1ByaXZhdGUqIFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OmdldChRV2Vi
UHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzKQoreworICAgIHJldHVybiBwcmVmZXJlbmNlcy0+ZDsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZl
cmVuY2VzX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVu
Y2VzX3AuaAppbmRleCA1ZDQ2M2UxLi5kNTllZmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlc19wLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXNfcC5oCkBAIC0zMSw2ICszMSw3IEBA
IHB1YmxpYzoKICAgICAgICAgWFNTQXVkaXRpbmdFbmFibGVkLAogICAgICAgICBGcmFtZUZsYXR0
ZW5pbmdFbmFibGVkLAogICAgICAgICBQcml2YXRlQnJvd3NpbmdFbmFibGVkLAorICAgICAgICBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwKICAgICAgICAgRG5zUHJlZmV0Y2hFbmFibGVk
CiAgICAgfTsKIApAQCAtNjEsNCArNjIsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZm9udFNp
emUoRm9udFNpemVUeXBlIHR5cGUpIGNvbnN0OwogCiAgICAgV0tQcmVmZXJlbmNlc1JlZiByZWY7
CisKKyAgICBzdGF0aWMgUVdlYlByZWZlcmVuY2VzUHJpdmF0ZSogZ2V0KFFXZWJQcmVmZXJlbmNl
cyopOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmlu
ZGV4IDFhYTE5ZmMuLjE2ZjA2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHkuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBEcmF3aW5nQXJlYVByb3h5
X2gKICNkZWZpbmUgRHJhd2luZ0FyZWFQcm94eV9oCiAKKyNpbmNsdWRlIDxDb3JlSVBDL01lc3Nh
Z2VJRC5oPgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW5mby5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
SW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAppbmRleCAwZWE0ZmU2
Li41NDBiZjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3
aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3
aW5nQXJlYVByb3h5LmNwcApAQCAtNjgsNyArNjgsNiBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQ
cm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3Jl
OgogCiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVuZGVyTmV4dEZyYW1lKCkKIHsKLSAg
ICBwYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlJlbmRlck5l
eHRGcmFtZSgpLCBwYWdlKCktPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBUaWxlZERyYXdpbmdBcmVh
UHJveHk6OnNpemVEaWRDaGFuZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1RvdWNoVmlld0ludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvVG91Y2hWaWV3SW50ZXJmYWNlLmNwcAppbmRleCA5ZGRhM2RiLi40MjVlZGMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmNwcApA
QCAtNTEsNiArNTEsNyBAQCBTR1VwZGF0ZVF1ZXVlKiBUb3VjaFZpZXdJbnRlcmZhY2U6OnNjZW5l
R3JhcGhVcGRhdGVRdWV1ZSgpIGNvbnN0CiAKIHZvaWQgVG91Y2hWaWV3SW50ZXJmYWNlOjpzZXRW
aWV3TmVlZHNEaXNwbGF5KGNvbnN0IFFSZWN0JikKIHsKKyAgICBtX3BhZ2VWaWV3LT51cGRhdGUo
KTsKIH0KIAogUVNpemUgVG91Y2hWaWV3SW50ZXJmYWNlOjpkcmF3aW5nQXJlYVNpemUoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3FkZXNrdG9wd2VicGFnZXByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xZGVza3RvcHdlYnBhZ2Vwcm94eS5j
cHAKaW5kZXggYzcyZDFlZC4uNjVjNTE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L3FkZXNrdG9wd2VicGFnZXByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvcWRlc2t0b3B3ZWJwYWdlcHJveHkuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAK
ICNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXcuaCIKICNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXdf
cC5oIgorI2luY2x1ZGUgInF3ZWJwcmVmZXJlbmNlc19wLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0Fy
ZWFQcm94eUltcGwuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVk
ZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgpAQCAtNTQsNiArNTUsNyBAQCBRRGVza3RvcFdlYlBh
Z2VQcm94eTo6UURlc2t0b3BXZWJQYWdlUHJveHkoUURlc2t0b3BXZWJWaWV3UHJpdmF0ZSogZGVz
a3RvcFdlYlZpZQogICAgIDogUXRXZWJQYWdlUHJveHkoZGVza3RvcFdlYlZpZXcsIGRlc2t0b3BX
ZWJWaWV3LCBjb250ZXh0LCBwYWdlR3JvdXApCiB7CiAgICAgaW5pdCgpOworICAgIFFXZWJQcmVm
ZXJlbmNlc1ByaXZhdGU6OmdldChwcmVmZXJlbmNlcygpKS0+c2V0QXR0cmlidXRlKFFXZWJQcmVm
ZXJlbmNlc1ByaXZhdGU6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCBmYWxzZSk7CiB9
CiAKIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gUURlc2t0b3BXZWJQYWdlUHJveHk6OmNy
ZWF0ZURyYXdpbmdBcmVhUHJveHkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L3F0b3VjaHdlYnBhZ2Vwcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvcXRvdWNod2VicGFnZXByb3h5LmNwcAppbmRleCBjMjkyMWFmLi5iMWY2NmJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXRvdWNod2VicGFnZXByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXRvdWNod2VicGFnZXByb3h5LmNwcApA
QCAtMjEsOSArMjEsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJxdG91Y2h3
ZWJwYWdlcHJveHkuaCIKIAorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCiAjaW5j
bHVkZSA8SW50UmVjdC5oPgogI2luY2x1ZGUgPE5hdGl2ZVdlYlRvdWNoRXZlbnQuaD4KICNpbmNs
dWRlIDxXZWJFdmVudEZhY3RvcnlRdC5oPgorI2luY2x1ZGUgPHF3ZWJwcmVmZXJlbmNlc19wLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zMiwxMiArMzQsMTMgQEAgUVRvdWNo
V2ViUGFnZVByb3h5OjpRVG91Y2hXZWJQYWdlUHJveHkoVG91Y2hWaWV3SW50ZXJmYWNlKiB2aWV3
SW50ZXJmYWNlLCBWaWV3cG8KICAgICAsIG1fcGFuR2VzdHVyZVJlY29nbml6ZXIodmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZSkKICAgICAsIG1fcGluY2hHZXN0dXJlUmVjb2duaXplcih2aWV3cG9y
dEludGVyYWN0aW9uRW5naW5lKQogeworICAgIFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OmdldChw
cmVmZXJlbmNlcygpKS0+c2V0QXR0cmlidXRlKFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCB0cnVlKTsKICAgICBpbml0KCk7CiB9CiAKIFBhc3NP
d25QdHI8RHJhd2luZ0FyZWFQcm94eT4gUVRvdWNoV2ViUGFnZVByb3h5OjpjcmVhdGVEcmF3aW5n
QXJlYVByb3h5KCkKIHsKLSAgICByZXR1cm4gVGlsZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGUo
dG91Y2hWaWV3SW50ZXJmYWNlKCksIG1fd2ViUGFnZVByb3h5LmdldCgpKTsKKyAgICByZXR1cm4g
RHJhd2luZ0FyZWFQcm94eUltcGw6OmNyZWF0ZShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7CiB9CiAK
IHZvaWQgUVRvdWNoV2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkQ3Jhc2goKQpAQCAtNTEsNiArNTQs
MTMgQEAgdm9pZCBRVG91Y2hXZWJQYWdlUHJveHk6OnBhaW50Q29udGVudChRUGFpbnRlciogcGFp
bnRlciwgY29uc3QgUVJlY3QmIGFyZWEpCiB7CiB9CiAKK3ZvaWQgUVRvdWNoV2ViUGFnZVByb3h5
OjpyZW5kZXJUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5n
QXJlYSA9IG1fd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOworICAgIGlmIChkcmF3aW5nQXJl
YSkKKyAgICAgICAgZHJhd2luZ0FyZWEtPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHRyYW5zZm9y
bSwgb3BhY2l0eSk7Cit9CisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogdm9pZCBRVG91Y2hX
ZWJQYWdlUHJveHk6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50
JiBldmVudCwgYm9vbCB3YXNFdmVudEhhbmRsZWQpCiB7CkBAIC03OSw3ICs4OSw3IEBAIGJvb2wg
UVRvdWNoV2ViUGFnZVByb3h5OjpoYW5kbGVFdmVudChRRXZlbnQqIGV2KQogdm9pZCBRVG91Y2hX
ZWJQYWdlUHJveHk6OnNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IFFSZWN0RiYg
dmlzaWJsZUNvbnRlbnRSZWN0LCBmbG9hdCBzY2FsZSkKIHsKICAgICBRUmVjdCBhbGlnbmVkVmlz
aWJsZUNvbnRlbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0LnRvQWxpZ25lZFJlY3QoKTsKLSAg
ICBkcmF3aW5nQXJlYSgpLT5zZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShhbGlnbmVkVmlz
aWJsZUNvbnRlbnRSZWN0LCBzY2FsZSk7CisgICAgbV93ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVh
KCktPnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShhbGlnbmVkVmlzaWJsZUNvbnRlbnRS
ZWN0LCBzY2FsZSk7CiAKICAgICAvLyBGSVhNRTogT25jZSB3ZSBzdXBwb3J0IHN1c3BlbmQgYW5k
IHJlc3VtZSwgdGhpcyBzaG91bGQgYmUgZGVsYXllZCB1bnRpbCB0aGUgcGFnZSBpcyBhY3RpdmUg
aWYgdGhlIHBhZ2UgaXMgc3VzcGVuZGVkLgogICAgIG1fd2ViUGFnZVByb3h5LT5zZXRGaXhlZFZp
c2libGVDb250ZW50UmVjdChhbGlnbmVkVmlzaWJsZUNvbnRlbnRSZWN0KTsKQEAgLTg3LDcgKzk3
LDcgQEAgdm9pZCBRVG91Y2hXZWJQYWdlUHJveHk6OnNldFZpc2libGVDb250ZW50UmVjdEFuZFNj
YWxlKGNvbnN0IFFSZWN0RiYgdmlzaWJsZUNvbnQKIAogdm9pZCBRVG91Y2hXZWJQYWdlUHJveHk6
OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgUVBvaW50RiYgdHJh
amVjdG9yeVZlY3RvcikKIHsKLSAgICBkcmF3aW5nQXJlYSgpLT5zZXRWaXNpYmxlQ29udGVudFJl
Y3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOworICAgIG1fd2ViUGFnZVByb3h5
LT5kcmF3aW5nQXJlYSgpLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRy
YWplY3RvcnlWZWN0b3IpOwogfQogCiB2b2lkIFFUb3VjaFdlYlBhZ2VQcm94eTo6c2V0UmVzaXpl
c1RvQ29udGVudHNVc2luZ0xheW91dFNpemUoY29uc3QgUVNpemUmIHRhcmdldExheW91dFNpemUp
CkBAIC0xMTMsNSArMTIzLDQgQEAgdm9pZCBRVG91Y2hXZWJQYWdlUHJveHk6OmZpbmRab29tYWJs
ZUFyZWFGb3JQb2ludChjb25zdCBRUG9pbnQmIHBvaW50KQogCiB2b2lkIFFUb3VjaFdlYlBhZ2VQ
cm94eTo6cmVuZGVyTmV4dEZyYW1lKCkKIHsKLSAgICBkcmF3aW5nQXJlYSgpLT5yZW5kZXJOZXh0
RnJhbWUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xdG91
Y2h3ZWJwYWdlcHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xdG91Y2h3ZWJw
YWdlcHJveHkuaAppbmRleCA2Yjk2ZGRmLi5iOWQ1ZGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvcXRvdWNod2VicGFnZXByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L3F0b3VjaHdlYnBhZ2Vwcm94eS5oCkBAIC0yNiw3ICsyNiw2IEBACiAj
aW5jbHVkZSAiUXRQYW5HZXN0dXJlUmVjb2duaXplci5oIgogI2luY2x1ZGUgIlF0UGluY2hHZXN0
dXJlUmVjb2duaXplci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAi
VGlsZWREcmF3aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiVG91Y2hWaWV3SW50ZXJmYWNlLmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApAQCAtNDgsNiArNDcsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRSZXNpemVzVG9Db250ZW50c1VzaW5nTGF5b3V0U2l6ZShjb25zdCBRU2l6
ZSYgdGFyZ2V0TGF5b3V0U2l6ZSk7CiAgICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQo
Y29uc3QgUVBvaW50Jik7CiAgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIHJl
bmRlclRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGZsb2F0KTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnQo
UVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0JiBhcmVhKTsKQEAgLTYwLDcgKzYwLDYgQEAg
cHJpdmF0ZToKICNlbmRpZgogCiAgICAgVG91Y2hWaWV3SW50ZXJmYWNlKiB0b3VjaFZpZXdJbnRl
cmZhY2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUb3VjaFZpZXdJbnRlcmZhY2UqPiht
X3ZpZXdJbnRlcmZhY2UpOyB9Ci0gICAgVGlsZWREcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJl
YSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVBy
b3h5Kj4obV93ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpOyB9CiAKICAgICB2b2lkIHRvdWNo
RXZlbnQoUVRvdWNoRXZlbnQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmgKaW5kZXggOTg2MGE3YS4uYTdjMWMyNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCkBAIC0y
Niw2ICsyNiw3IEBACiAjaWZuZGVmIExheWVyVHJlZUhvc3RfaAogI2RlZmluZSBMYXllclRyZWVI
b3N0X2gKIAorI2luY2x1ZGUgPENvcmVJUEMvTWVzc2FnZUlELmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaAppbmRleCAx
NGFlNWYxLi4wZDA4MTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgKQEAgLTI5LDEwICsyOSwxMCBAQAogI2lmIFVTRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKKyNpbmNsdWRl
IDxDb3JlSVBDL01lc3NhZ2VJRC5oPgogI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50
LmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9JbnRSZWN0Lmg+Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBUaWxlZERy
YXdpbmdBcmVhIDogcHVibGljIERyYXdpbmdBcmVhLCBwdWJsaWMgV2ViQ29yZTo6VGlsZWRCYWNr
aW5nU3RvcmVDbGllbnQsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5
ZXJUcmVlSG9zdFF0LmNwcAppbmRleCBkOGViYTIwLi41MTk5MDA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNw
cApAQCAtMzcxLDcgKzM3MSw3IEBAIGJvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENv
dW50ZXIoKSBjb25zdAogCiBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQog
CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViUGFnZVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwCmluZGV4IGM4MGNlYTAuLmQyNmMxMjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdl
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdl
UXQuY3BwCkBAIC04NCw2ICs4NCwxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAKIHZvaWQg
V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIHsKKyAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBtX3BhZ2UtPnNldHRpbmdzKCk7CisKKyAgICAvLyBJZiBhY2NlbGVyYXRlZCBjb21wb3NpdGlu
ZyBpcyBlbmFibGVkLCB3ZSB3YW50IHRvIGJlIGluIGZvcmNlLWNvbXBvc2l0aW5nIG1vZGUsIHNv
IHRoYXQgd2UgZG9uJ3Qgc3dpdGNoIGJldHdlZW4gY29tcG9zaXRlZC9ub24tY29tcG9zaXRlZCBz
dGF0ZS4KKyAgICBzZXR0aW5ncy0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiB9CiAK
IHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1QcmVmZXJlbmNlc0RpZENoYW5nZShjb25zdCBXZWJQcmVm
ZXJlbmNlc1N0b3JlJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQv
V2ViUHJvY2Vzc01haW5RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlBy
b2Nlc3NNYWluUXQuY3BwCmluZGV4IDg1OThiYWMuLjIwM2FhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcApAQCAtNDIsNiArNDIs
MTAgQEAKICNpbmNsdWRlIDxNQ29tcG9uZW50RGF0YT4KICNlbmRpZgogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKKyNlbmRp
ZgorCiAjaWZuZGVmIE5ERUJVRwogI2lmICFPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHVuaXN0ZC5o
PgpAQCAtMTg2LDYgKzE5MCwxMCBAQCBRX0RFQ0xfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFpblF0
KGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFdlYkdyYXBoaWNzTGF5ZXI6OmluaXRG
YWN0b3J5KCk7CisjZW5kaWYKKwogICAgIFdlYktpdDo6V2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5p
dGlhbGl6ZShpZGVudGlmaWVyLCBSdW5Mb29wOjptYWluKCkpOwogCiAgICAgUnVuTG9vcDo6cnVu
KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111978</attachid>
            <date>2011-10-21 10:18:13 -0700</date>
            <delta_ts>2011-10-21 10:19:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>19964</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5Mzk0ODZlLi5hNWE3MjcwMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NTkgQEAKKzIwMTEtMTAtMjEgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lh
LmNvbT4KKworICAgICAgICBbUXRdW1dLMl0gU3luY2hyb25pemUgdGlsaW5nIHdpdGggYWNjZWxl
cmF0ZWQgY29tcG9zaXRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY5MTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTWFrZSBRVG91Y2hXZWJWaWV3IGFsd2F5cyByZW5kZXIgd2l0aCBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZy4KKyAgICAgICAgQXQgZmlyc3QsIHRoZSB3ZWIgY29udGVudCB3b3VsZCBv
bmx5IHJlbmRlciBhZnRlciB0aGUgcmVzdCBvZiB0aGUgc2NlbmUgaGFzIHJlbmRlcmVkLiBJbiBh
CisgICAgICAgIGZ1dHVyZSBwYXRjaCB3ZSdsbCBlbmFibGUgcmVuZGVyaW5nIHRoZSB3ZWIgY29u
dGVudCB2aWEgYW4gRkJPLCB3aGljaCB3b3VsZCBjb3ZlciBhbGwgb3RoZXIKKyAgICAgICAgY2Fz
ZXMgYXMgd2VsbC4KKworICAgICAgICBSaWdodCBub3cgdGhpcyBvbmx5IHdvcmtzIGZvciBRVG91
Y2hXZWJWaWV3LCBhbmQgdGh1cyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyBkaXNhYmxlZAor
ICAgICAgICBmb3IgZGVza3RvcCB3ZWItdmlld3MuIFRoaXMgcmVxdWlyZWQgYWRkaW5nIHNvbWUg
c2V0dGluZ3MgZW5hYmxlcnMgaW4gUQorICAgICAgICBXZWJQcmVmZXJlbmNlc1ByaXZhdGUuIFRo
b3NlIGFyZSBub3QgZXhwb3NlZCB0byB0aGUgcHVibGljIEFQSSwgYXMgdGhleSBhcmUgYW4gaW1w
bGVtZW50YXRpb24KKyAgICAgICAgZGV0YWlsLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9x
dC9xdG91Y2h3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6OlFUb3VjaFdlYlBh
Z2UpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZTo6aW5pdFNjZW5lR3JhcGhDb25uZWN0aW9ucyk6
CisgICAgICAgIChRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6UVRvdWNoV2ViUGFnZVByaXZhdGUpOgor
ICAgICAgICAoUVRvdWNoV2ViUGFnZVByaXZhdGU6OnNldFBhZ2UpOgorICAgICAgICAoY29tcHV0
ZUVmZmVjdGl2ZU9wYWNpdHkpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZVByaXZhdGU6OnBhaW50
VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpfcV9v
bkFmdGVyU2NlbmVSZW5kZXIpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZVByaXZhdGU6Ol9xX29u
U2NlbmVHcmFwaEluaXRpYWxpemVkKToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6Oml0ZW1DaGFu
Z2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoUVdlYlByZWZlcmVuY2Vz
UHJpdmF0ZTo6dGVzdEF0dHJpYnV0ZSk6CisgICAgICAgIChRV2ViUHJlZmVyZW5jZXNQcml2YXRl
OjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6Z2V0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlc19wLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvVGls
ZWREcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJl
YVByb3h5OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdERlc2t0
b3BXZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoUXREZXNrdG9wV2ViUGFnZVByb3h5OjpRdERl
c2t0b3BXZWJQYWdlUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFRvdWNoVmlld0lu
dGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0VG91Y2hWaWV3SW50ZXJmYWNlOjpzZXRW
aWV3TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRUb3VjaFdlYlBhZ2VQ
cm94eS5jcHA6CisgICAgICAgIChRdFRvdWNoV2ViUGFnZVByb3h5OjpRdFRvdWNoV2ViUGFnZVBy
b3h5KToKKyAgICAgICAgKFF0VG91Y2hXZWJQYWdlUHJveHk6OmNyZWF0ZURyYXdpbmdBcmVhUHJv
eHkpOgorICAgICAgICAoUXRUb3VjaFdlYlBhZ2VQcm94eTo6cmVuZGVyVG9DdXJyZW50R0xDb250
ZXh0KToKKyAgICAgICAgKFF0VG91Y2hXZWJQYWdlUHJveHk6OnNldFZpc2libGVDb250ZW50UmVj
dEFuZFNjYWxlKToKKyAgICAgICAgKFF0VG91Y2hXZWJQYWdlUHJveHk6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoUXRUb3VjaFdlYlBhZ2VQcm94eTo6
cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRUb3VjaFdlYlBhZ2VQ
cm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NNYWluUXQpOgorCiAyMDExLTEwLTIwICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vOTQxMjg0OT4gYW5kIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzNQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHAKaW5kZXggOGFhNjkz
YS4uN2U4YmIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
dG91Y2h3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0
b3VjaHdlYnBhZ2UuY3BwCkBAIC0yMiwyNSArMjIsNDEgQEAKICNpbmNsdWRlICJxdG91Y2h3ZWJw
YWdlLmgiCiAKICNpbmNsdWRlICJRdFRvdWNoV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlX3AuaCIKICNpbmNs
dWRlIDxRQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50Pgog
I2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFTR05vZGU+CisjaW5jbHVkZSA8UVNHQ2Fu
dmFzPgorI2luY2x1ZGUgPFFTR0VuZ2luZT4KICNpbmNsdWRlIDxRVXJsPgogCiBRVG91Y2hXZWJQ
YWdlOjpRVG91Y2hXZWJQYWdlKFFTR0l0ZW0qIHBhcmVudCkKICAgICA6IFFTR0l0ZW0ocGFyZW50
KQogICAgICwgZChuZXcgUVRvdWNoV2ViUGFnZVByaXZhdGUodGhpcykpCiB7Ci0gICAgc2V0Rmxh
ZyhJdGVtSGFzQ29udGVudHMpOworICAgIHNldEZsYWcoSXRlbUhhc0NvbnRlbnRzLCBmYWxzZSk7
CiAKICAgICAvLyBXZSBkbyB0aGUgdHJhbnNmb3JtIGZyb20gdGhlIHRvcCBsZWZ0IHNvIHRoZSB2
aWV3cG9ydCBjYW4gYXNzdW1lIHRoZSBwb3NpdGlvbiAwLCAwCiAgICAgLy8gaXMgYWx3YXlzIHdo
ZXJlIHJlbmRlcmluZyBzdGFydHMuCiAgICAgc2V0VHJhbnNmb3JtT3JpZ2luKFRvcExlZnQpOwor
ICAgIGluaXRTY2VuZUdyYXBoQ29ubmVjdGlvbnMoKTsKICAgICBjb25uZWN0KHRoaXMsIFNJR05B
TCh2aXNpYmxlQ2hhbmdlZCgpKSwgU0xPVChvblZpc2libGVDaGFuZ2VkKCkpKTsKIH0KIAordm9p
ZCBRVG91Y2hXZWJQYWdlOjppbml0U2NlbmVHcmFwaENvbm5lY3Rpb25zKCkKK3sKKyAgICBpZiAo
ZC0+cGFpbnRpbmdJc0luaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisgICAgZC0+cGFpbnRp
bmdJc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBpZiAoIWNhbnZhcygpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKHNjZW5lR3JhcGhFbmdpbmUoKSkKKyAgICAgICAgZC0+X3Ffb25TY2VuZUdy
YXBoSW5pdGlhbGl6ZWQoKTsKKyAgICBlbHNlCisgICAgICAgIGNvbm5lY3QoY2FudmFzKCksIFNJ
R05BTChzY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKSksIHRoaXMsIFNMT1QoX3Ffb25TY2VuZUdyYXBo
SW5pdGlhbGl6ZWQoKSkpOworfQorCiBRVG91Y2hXZWJQYWdlOjp+UVRvdWNoV2ViUGFnZSgpCiB7
CiAgICAgZGVsZXRlIGQ7CkBAIC02OCwyOCArODQsNiBAQCBpbnQgUVRvdWNoV2ViUGFnZTo6bG9h
ZFByb2dyZXNzKCkgY29uc3QKIAogLyohIFxyZWltcAogKi8KLVFTR05vZGUqIFFUb3VjaFdlYlBh
Z2U6OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRh
KikKLXsKLSAgICBpZiAoIW9sZE5vZGUpCi0gICAgICAgIG9sZE5vZGUgPSBuZXcgUVNHTm9kZTsK
LQotICAgIC8vIEEgc3dhcCBpcyBvbiB0aGUgcXVldWUsIGFuZCBRdFNHVXBkYXRlUXVldWU6OmFw
cGx5VXBkYXRlcyB3aWxsIGVtcHR5IHRoZSBxdWV1ZSwgc28gd2Uga25vdyB0aGF0Ci0gICAgLy8g
dGhlIG9sZCBmcmFtZSdzIGJ1ZmZlcnMgd29uJ3QgYmUgdXNlZCBhbnltb3JlIChmb3IgYnVmZmVy
cyB1c2VkIGFsbCB0aGUgd2F5IGZyb20gdGhlIHdlYiBwcm9jZXNzCi0gICAgLy8gdG8gdGhlIGdy
YXBoaWMgY2FyZCkuIE5vdGlmeSB0aGUgd2ViIHByb2Nlc3MgdGhhdCBpdCBjYW4gcmVuZGVyIHRo
ZSBuZXh0IGZyYW1lLgotICAgIGlmIChkLT5zZ1VwZGF0ZVF1ZXVlLmlzU3dhcFBlbmRpbmcoKSkK
LSAgICAgICAgLy8gVGhlIFVJIHRocmVhZCBpcyBjdXJyZW50bHkgbG9ja2VkIGFuZCBjYWxsaW5n
IHRoaXMgZnJvbSB0aGUgcmVuZGVyaW5nIHRocmVhZCBkaWRuJ3QgY3Jhc2gKLSAgICAgICAgLy8g
eWV0LCBzbyBJJ20gYXNzdW1pbmcgdGhhdCB0aGlzIGlzIE9LLiBFbHNlIHdlIGhhdmUgdG8gd2Fp
dCB1bnRpbCB0aGUgU0cgdXBkYXRlIGlzIG92ZXIKLSAgICAgICAgLy8gYW5kIHRoZSBVSSB0aHJl
YWQgcmV0dXJucyB0byB0aGUgZXZlbnQgbG9vcCBwaWNraW5nIG91ciBldmVudCBiZWZvcmUgaXQg
Y2FuIGJlIHNlbnQgdG8KLSAgICAgICAgLy8gdGhlIHdlYiBwcm9jZXNzLiBUaGlzIHdvdWxkIGlu
Y3JlYXNlIG91ciBjaGFuY2VzIG9mIG1pc3NpbmcgYSBmcmFtZS4KLSAgICAgICAgZC0+cGFnZS0+
cmVuZGVyTmV4dEZyYW1lKCk7Ci0gICAgZC0+c2dVcGRhdGVRdWV1ZS5hcHBseVVwZGF0ZXMob2xk
Tm9kZSk7Ci0KLSAgICAvLyBRU0dJdGVtIHRha2VzIG93bmVyc2hpcCBvZiB0aGlzIHJldHVybiB2
YWx1ZSBhbmQgaXQncyBjaGlsZHJlbiBiZXR3ZWVuIGFuZCBhZnRlciB1cGRhdGVQYWludE5vZGUg
Y2FsbHMuCi0gICAgcmV0dXJuIG9sZE5vZGU7Ci19Ci0KLS8qISBccmVpbXAKLSovCiBib29sIFFU
b3VjaFdlYlBhZ2U6OmV2ZW50KFFFdmVudCogZXYpCiB7CiAgICAgaWYgKGQtPnBhZ2UtPmhhbmRs
ZUV2ZW50KGV2KSkKQEAgLTE1MSw2ICsxNDUsNyBAQCBRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6UVRv
dWNoV2ViUGFnZVByaXZhdGUoUVRvdWNoV2ViUGFnZSogdmlldykKICAgICAsIHBhZ2UoMCkKICAg
ICAsIG5hdmlnYXRpb25Db250cm9sbGVyKDApCiAgICAgLCBzZ1VwZGF0ZVF1ZXVlKHZpZXcpCisg
ICAgLCBwYWludGluZ0lzSW5pdGlhbGl6ZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTE1OSw2ICsxNTQs
NTkgQEAgdm9pZCBRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6c2V0UGFnZShRdFRvdWNoV2ViUGFnZVBy
b3h5KiBwYWdlKQogICAgIEFTU0VSVCghdGhpcy0+cGFnZSk7CiAgICAgQVNTRVJUKHBhZ2UpOwog
ICAgIHRoaXMtPnBhZ2UgPSBwYWdlOworCit9CisKK2Zsb2F0IGNvbXB1dGVFZmZlY3RpdmVPcGFj
aXR5KGNvbnN0IFFTR0l0ZW0qIGl0ZW0pCit7CisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1
cm4gMS4wOworCisgICAgZmxvYXQgb3BhY2l0eSA9IGl0ZW0tPm9wYWNpdHkoKTsKKyAgICBpZiAo
b3BhY2l0eSA8IDAuMDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG9wYWNpdHkg
KiBjb21wdXRlRWZmZWN0aXZlT3BhY2l0eShpdGVtLT5wYXJlbnRJdGVtKCkpOworfQorCit2b2lk
IFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCgpCit7CisgICAg
aWYgKCFxLT5pc1Zpc2libGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVRyYW5zZm9ybSB0
cmFuc2Zvcm0gPSBxLT5pdGVtVHJhbnNmb3JtKDAsIDApOworICAgIGZsb2F0IG9wYWNpdHkgPSBj
b21wdXRlRWZmZWN0aXZlT3BhY2l0eShxKTsKKyAgICBRUmVjdEYgY2xpcFJlY3QgPSBxLT5wYXJl
bnRJdGVtKCktPm1hcFJlY3RUb1NjZW5lKHEtPnBhcmVudEl0ZW0oKS0+Ym91bmRpbmdSZWN0KCkp
OworCisgICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBjb25zdCBpbnQgbGVmdCA9
IGNsaXBSZWN0LmxlZnQoKTsKKyAgICBjb25zdCBpbnQgd2lkdGggPSBjbGlwUmVjdC53aWR0aCgp
OworICAgIGNvbnN0IGludCBib3R0b20gPSBxLT5jYW52YXMoKS0+aGVpZ2h0KCkgLSAoY2xpcFJl
Y3QuYm90dG9tKCkgKyAxKTsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gY2xpcFJlY3QuaGVpZ2h0
KCk7CisKKyAgICBnbFNjaXNzb3IobGVmdCwgYm90dG9tLCB3aWR0aCwgaGVpZ2h0KTsKKworICAg
IHBhZ2UtPnJlbmRlclRvQ3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHkpOworICAg
IGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworfQorCit2b2lkIFFUb3VjaFdlYlBhZ2VQcml2
YXRlOjpfcV9vbkFmdGVyU2NlbmVSZW5kZXIoKQoreworICAgIC8vIFRPRE86IEFsbG93IHBhaW50
aW5nIGJlZm9yZSB0aGUgc2NlbmUgb3IgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2NlbmUgd2l0aCBh
biBGQk8uCisgICAgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKTsKK30KKwordm9pZCBRVG91Y2hX
ZWJQYWdlUHJpdmF0ZTo6X3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKQoreworICAgIFFTR0Vu
Z2luZSogZW5naW5lID0gcS0+c2NlbmVHcmFwaEVuZ2luZSgpOworICAgIFFPYmplY3Q6OmNvbm5l
Y3QoZW5naW5lLCBTSUdOQUwoYWZ0ZXJSZW5kZXJpbmcoKSksIHEsIFNMT1QoX3Ffb25BZnRlclNj
ZW5lUmVuZGVyKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Cit9CisKK3ZvaWQgUVRvdWNoV2Vi
UGFnZTo6aXRlbUNoYW5nZShJdGVtQ2hhbmdlIGNoYW5nZSwgY29uc3QgSXRlbUNoYW5nZURhdGEg
JmRhdGEpCit7CisgICAgaWYgKGNoYW5nZSA9PSBJdGVtU2NlbmVDaGFuZ2UpCisgICAgICAgIGlu
aXRTY2VuZUdyYXBoQ29ubmVjdGlvbnMoKTsKKyAgICBRU0dJdGVtOjppdGVtQ2hhbmdlKGNoYW5n
ZSwgZGF0YSk7CiB9CiAKIHZvaWQgUVRvdWNoV2ViUGFnZTo6b25WaXNpYmxlQ2hhbmdlZCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5oCmluZGV4
IGI4ZDZlYTUuLjUwOGM2MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXRvdWNod2VicGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXRvdWNod2VicGFnZS5oCkBAIC02NCw3ICs2NCw2IEBAIHB1YmxpYzoKICAgICBRV2ViTmF2
aWdhdGlvbkNvbnRyb2xsZXIqIG5hdmlnYXRpb25Db250cm9sbGVyKCkgY29uc3Q7CiAgICAgUVdl
YlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBRU0dOb2Rl
KiB1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSwgVXBkYXRlUGFpbnROb2RlRGF0YSop
OwogICAgIHZpcnR1YWwgYm9vbCBldmVudChRRXZlbnQqKTsKIAogUV9TSUdOQUxTOgpAQCAtODcs
OCArODYsMTQgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB0b3VjaEV2ZW50KFFUb3Vj
aEV2ZW50Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0
RiYsIGNvbnN0IFFSZWN0RiYpOworICAgIHZpcnR1YWwgdm9pZCBpdGVtQ2hhbmdlKEl0ZW1DaGFu
Z2UsIGNvbnN0IEl0ZW1DaGFuZ2VEYXRhICYpOwogCiBwcml2YXRlOgorICAgIFFfUFJJVkFURV9T
TE9UKGQsIHZvaWQgX3Ffb25BZnRlclNjZW5lUmVuZGVyKCkpOworICAgIFFfUFJJVkFURV9TTE9U
KGQsIHZvaWQgX3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKSk7CisKKyAgICB2b2lkIGluaXRT
Y2VuZUdyYXBoQ29ubmVjdGlvbnMoKTsKKwogICAgIFFUb3VjaFdlYlBhZ2VQcml2YXRlKiBkOwog
ICAgIGZyaWVuZCBjbGFzcyBRVG91Y2hXZWJWaWV3UHJpdmF0ZTsKICAgICBmcmllbmQgY2xhc3Mg
V2ViS2l0OjpRdFRvdWNoVmlld0ludGVyZmFjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2VfcC5oCmluZGV4IGUyMmQ3MmYuLjcxYjk0OGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9w
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlX3Au
aApAQCAtMzgsMTAgKzM4LDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UGFnZShRdFRvdWNo
V2ViUGFnZVByb3h5Kik7CiAKKyAgICB2b2lkIF9xX29uQWZ0ZXJTY2VuZVJlbmRlcigpOworICAg
IHZvaWQgX3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKTsKKyAgICB2b2lkIHBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KCk7CisKICAgICBRVG91Y2hXZWJQYWdlKiBjb25zdCBxOwogICAgIFF0VG91
Y2hXZWJQYWdlUHJveHkqIHBhZ2U7CiAgICAgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyKiBuYXZp
Z2F0aW9uQ29udHJvbGxlcjsKICAgICBXZWJLaXQ6OlF0U0dVcGRhdGVRdWV1ZSBzZ1VwZGF0ZVF1
ZXVlOworICAgIGJvb2wgcGFpbnRpbmdJc0luaXRpYWxpemVkOwogfTsKIAogI2VuZGlmIC8qIHF0
b3VjaHdlYnBhZ2VfcF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAKaW5kZXggOWVhZTZlOC4uYzBiYTIxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzLmNwcApA
QCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiV0tQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJX
S1ByZWZlcmVuY2VzLmgiCisjaW5jbHVkZSAiV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCIKICNpbmNs
dWRlICJXS1JldGFpblB0ci5oIgogI2luY2x1ZGUgIldLU3RyaW5nUXQuaCIKICNpbmNsdWRlICJx
d2VicHJlZmVyZW5jZXNfcC5oIgpAQCAtNTIsNiArNTMsOCBAQCBib29sIFFXZWJQcmVmZXJlbmNl
c1ByaXZhdGU6OnRlc3RBdHRyaWJ1dGUoUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6V2ViQXR0cmli
dXRlCiAgICAgICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZChyZWYpOwogICAgIGNhc2UgRG5zUHJlZmV0Y2hFbmFibGVkOgogICAgICAgICByZXR1cm4gV0tQ
cmVmZXJlbmNlc0dldEROU1ByZWZldGNoaW5nRW5hYmxlZChyZWYpOworICAgIGNhc2UgQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQ6CisgICAgICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQocmVmKTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODUsNiAr
ODgsOSBAQCB2b2lkIFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OnNldEF0dHJpYnV0ZShRV2ViUHJl
ZmVyZW5jZXNQcml2YXRlOjpXZWJBdHRyaWJ1dGUgYQogICAgIGNhc2UgRG5zUHJlZmV0Y2hFbmFi
bGVkOgogICAgICAgICBXS1ByZWZlcmVuY2VzU2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKHJlZiwg
ZW5hYmxlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZDoKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkKHJlZiwgZW5hYmxlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMzc2LDMgKzM4Miw4IEBAIHZvaWQg
UVdlYlByZWZlcmVuY2VzOjpzZXREZWZhdWx0Rml4ZWRGb250U2l6ZSh1bnNpZ25lZCBzaXplKQog
ICAgIGQtPnNldEZvbnRTaXplKFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OkRlZmF1bHRGaXhlZEZv
bnRTaXplLCBzaXplKTsKICAgICBlbWl0IGRlZmF1bHRGaXhlZEZvbnRTaXplQ2hhbmdlZCgpOwog
fQorCitRV2ViUHJlZmVyZW5jZXNQcml2YXRlKiBRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjpnZXQo
UVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcykKK3sKKyAgICByZXR1cm4gcHJlZmVyZW5jZXMt
PmQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJw
cmVmZXJlbmNlc19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVm
ZXJlbmNlc19wLmgKaW5kZXggNWQ0NjNlMS4uZDU5ZWZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXNfcC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzX3AuaApAQCAtMzEsNiArMzEs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFhTU0F1ZGl0aW5nRW5hYmxlZCwKICAgICAgICAgRnJhbWVG
bGF0dGVuaW5nRW5hYmxlZCwKICAgICAgICAgUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwKKyAgICAg
ICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsCiAgICAgICAgIERuc1ByZWZldGNoRW5h
YmxlZAogICAgIH07CiAKQEAgLTYxLDQgKzYyLDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGZv
bnRTaXplKEZvbnRTaXplVHlwZSB0eXBlKSBjb25zdDsKIAogICAgIFdLUHJlZmVyZW5jZXNSZWYg
cmVmOworCisgICAgc3RhdGljIFFXZWJQcmVmZXJlbmNlc1ByaXZhdGUqIGdldChRV2ViUHJlZmVy
ZW5jZXMqKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
aAppbmRleCAxYWExOWZjLi4xNmYwNjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5LmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5kZWYgRHJhd2luZ0FyZWFQ
cm94eV9oCiAjZGVmaW5lIERyYXdpbmdBcmVhUHJveHlfaAogCisjaW5jbHVkZSA8Q29yZUlQQy9N
ZXNzYWdlSUQuaD4KICNpbmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHAKaW5kZXggMGVh
NGZlNi4uNTQwYmY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVk
RHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVk
RHJhd2luZ0FyZWFQcm94eS5jcHAKQEAgLTY4LDcgKzY4LDYgQEAgdm9pZCBUaWxlZERyYXdpbmdB
cmVhUHJveHk6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgV2Vi
Q29yZToKIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJlbmRlck5leHRGcmFtZSgpCiB7
Ci0gICAgcGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpSZW5k
ZXJOZXh0RnJhbWUoKSwgcGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgVGlsZWREcmF3aW5n
QXJlYVByb3h5OjpzaXplRGlkQ2hhbmdlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdERlc2t0b3BXZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0RGVza3RvcFdlYlBhZ2VQcm94eS5jcHAKaW5kZXggNjkwNWRkMy4uNDNlZDA0
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RGVza3RvcFdlYlBh
Z2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RGVza3RvcFdl
YlBhZ2VQcm94eS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQ
cm94eVF0RGVza3RvcC5oIgogI2luY2x1ZGUgInFkZXNrdG9wd2Vidmlldy5oIgogI2luY2x1ZGUg
InFkZXNrdG9wd2Vidmlld19wLmgiCisjaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzX3AuaCIKICNp
bmNsdWRlIDxRQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUV2ZW50PgogI2luY2x1ZGUgPFFHcmFw
aGljc1NjZW5lRHJhZ0Ryb3BFdmVudD4KQEAgLTU1LDYgKzU2LDcgQEAgUXREZXNrdG9wV2ViUGFn
ZVByb3h5OjpRdERlc2t0b3BXZWJQYWdlUHJveHkoUURlc2t0b3BXZWJWaWV3UHJpdmF0ZSogZGVz
a3RvcFdlYlYKICAgICA6IFF0V2ViUGFnZVByb3h5KGRlc2t0b3BXZWJWaWV3LCBkZXNrdG9wV2Vi
VmlldywgY29udGV4dCwgcGFnZUdyb3VwKQogewogICAgIGluaXQoKTsKKyAgICBRV2ViUHJlZmVy
ZW5jZXNQcml2YXRlOjpnZXQocHJlZmVyZW5jZXMoKSktPnNldEF0dHJpYnV0ZShRV2ViUHJlZmVy
ZW5jZXNQcml2YXRlOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgZmFsc2UpOwogfQog
CiBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IFF0RGVza3RvcFdlYlBhZ2VQcm94eTo6Y3Jl
YXRlRHJhd2luZ0FyZWFQcm94eSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0VG91Y2hWaWV3SW50ZXJmYWNlLmNwcAppbmRleCA0OWQyMzg4Li4zYWZkOGQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRvdWNoVmlld0ludGVyZmFj
ZS5jcHAKQEAgLTUxLDYgKzUxLDcgQEAgUXRTR1VwZGF0ZVF1ZXVlKiBRdFRvdWNoVmlld0ludGVy
ZmFjZTo6c2NlbmVHcmFwaFVwZGF0ZVF1ZXVlKCkgY29uc3QKIAogdm9pZCBRdFRvdWNoVmlld0lu
dGVyZmFjZTo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYpCiB7CisgICAgbV9wYWdl
Vmlldy0+dXBkYXRlKCk7CiB9CiAKIFFTaXplIFF0VG91Y2hWaWV3SW50ZXJmYWNlOjpkcmF3aW5n
QXJlYVNpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91
Y2hXZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hX
ZWJQYWdlUHJveHkuY3BwCmluZGV4IDE1MTQ1MzguLjk5OTIzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRvdWNoV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUb3VjaFdlYlBhZ2VQcm94eS5jcHAKQEAgLTIxLDkg
KzIxLDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUXRUb3VjaFdlYlBhZ2VQ
cm94eS5oIgogCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIKICNpbmNsdWRlIDxJ
bnRSZWN0Lmg+CiAjaW5jbHVkZSA8TmF0aXZlV2ViVG91Y2hFdmVudC5oPgogI2luY2x1ZGUgPFdl
YkV2ZW50RmFjdG9yeVF0Lmg+CisjaW5jbHVkZSA8cXdlYnByZWZlcmVuY2VzX3AuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTMyLDEyICszNCwxMyBAQCBRdFRvdWNoV2ViUGFn
ZVByb3h5OjpRdFRvdWNoV2ViUGFnZVByb3h5KFF0VG91Y2hWaWV3SW50ZXJmYWNlKiB2aWV3SW50
ZXJmYWNlLCBRdAogICAgICwgbV9wYW5HZXN0dXJlUmVjb2duaXplcih2aWV3cG9ydEludGVyYWN0
aW9uRW5naW5lKQogICAgICwgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyKHZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmUpCiB7CisgICAgUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6Z2V0KHByZWZlcmVu
Y2VzKCkpLT5zZXRBdHRyaWJ1dGUoUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQsIHRydWUpOwogICAgIGluaXQoKTsKIH0KIAogUGFzc093blB0cjxE
cmF3aW5nQXJlYVByb3h5PiBRdFRvdWNoV2ViUGFnZVByb3h5OjpjcmVhdGVEcmF3aW5nQXJlYVBy
b3h5KCkKIHsKLSAgICByZXR1cm4gVGlsZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGUodG91Y2hW
aWV3SW50ZXJmYWNlKCksIG1fd2ViUGFnZVByb3h5LmdldCgpKTsKKyAgICByZXR1cm4gRHJhd2lu
Z0FyZWFQcm94eUltcGw6OmNyZWF0ZShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7CiB9CiAKIHZvaWQg
UXRUb3VjaFdlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZENyYXNoKCkKQEAgLTUxLDYgKzU0LDEzIEBA
IHZvaWQgUXRUb3VjaFdlYlBhZ2VQcm94eTo6cGFpbnRDb250ZW50KFFQYWludGVyKiBwYWludGVy
LCBjb25zdCBRUmVjdCYgYXJlYSkKIHsKIH0KIAordm9pZCBRdFRvdWNoV2ViUGFnZVByb3h5Ojpy
ZW5kZXJUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJl
YSA9IG1fd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOworICAgIGlmIChkcmF3aW5nQXJlYSkK
KyAgICAgICAgZHJhd2luZ0FyZWEtPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHRyYW5zZm9ybSwg
b3BhY2l0eSk7Cit9CisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogdm9pZCBRdFRvdWNoV2Vi
UGFnZVByb3h5Ojpkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYg
ZXZlbnQsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKQogewpAQCAtNzksNyArODksNyBAQCBib29sIFF0
VG91Y2hXZWJQYWdlUHJveHk6OmhhbmRsZUV2ZW50KFFFdmVudCogZXYpCiB2b2lkIFF0VG91Y2hX
ZWJQYWdlUHJveHk6OnNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IFFSZWN0RiYg
dmlzaWJsZUNvbnRlbnRSZWN0LCBmbG9hdCBzY2FsZSkKIHsKICAgICBRUmVjdCBhbGlnbmVkVmlz
aWJsZUNvbnRlbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0LnRvQWxpZ25lZFJlY3QoKTsKLSAg
ICBkcmF3aW5nQXJlYSgpLT5zZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShhbGlnbmVkVmlz
aWJsZUNvbnRlbnRSZWN0LCBzY2FsZSk7CisgICAgbV93ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVh
KCktPnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShhbGlnbmVkVmlzaWJsZUNvbnRlbnRS
ZWN0LCBzY2FsZSk7CiAKICAgICAvLyBGSVhNRTogT25jZSB3ZSBzdXBwb3J0IHN1c3BlbmQgYW5k
IHJlc3VtZSwgdGhpcyBzaG91bGQgYmUgZGVsYXllZCB1bnRpbCB0aGUgcGFnZSBpcyBhY3RpdmUg
aWYgdGhlIHBhZ2UgaXMgc3VzcGVuZGVkLgogICAgIG1fd2ViUGFnZVByb3h5LT5zZXRGaXhlZFZp
c2libGVDb250ZW50UmVjdChhbGlnbmVkVmlzaWJsZUNvbnRlbnRSZWN0KTsKQEAgLTg3LDcgKzk3
LDcgQEAgdm9pZCBRdFRvdWNoV2ViUGFnZVByb3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3RBbmRT
Y2FsZShjb25zdCBRUmVjdEYmIHZpc2libGVDb24KIAogdm9pZCBRdFRvdWNoV2ViUGFnZVByb3h5
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IFFQb2ludEYmIHRy
YWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgZHJhd2luZ0FyZWEoKS0+c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKKyAgICBtX3dlYlBhZ2VQcm94
eS0+ZHJhd2luZ0FyZWEoKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0
cmFqZWN0b3J5VmVjdG9yKTsKIH0KIAogdm9pZCBRdFRvdWNoV2ViUGFnZVByb3h5OjpzZXRSZXNp
emVzVG9Db250ZW50c1VzaW5nTGF5b3V0U2l6ZShjb25zdCBRU2l6ZSYgdGFyZ2V0TGF5b3V0U2l6
ZSkKQEAgLTExMyw1ICsxMjMsNCBAQCB2b2lkIFF0VG91Y2hXZWJQYWdlUHJveHk6OmZpbmRab29t
YWJsZUFyZWFGb3JQb2ludChjb25zdCBRUG9pbnQmIHBvaW50KQogCiB2b2lkIFF0VG91Y2hXZWJQ
YWdlUHJveHk6OnJlbmRlck5leHRGcmFtZSgpCiB7Ci0gICAgZHJhd2luZ0FyZWEoKS0+cmVuZGVy
TmV4dEZyYW1lKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRUb3VjaFdlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91
Y2hXZWJQYWdlUHJveHkuaAppbmRleCAxZDRlOWVhLi5mZTQ5Njg3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUb3VjaFdlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRvdWNoV2ViUGFnZVByb3h5LmgKQEAgLTI3LDcgKzI3
LDYgQEAKICNpbmNsdWRlICJRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaCIKICNpbmNsdWRlICJR
dFRvdWNoVmlld0ludGVyZmFjZS5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCi0jaW5j
bHVkZSAiVGlsZWREcmF3aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00Nyw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFJlc2l6ZXNUb0NvbnRlbnRzVXNpbmdMYXlvdXRTaXplKGNvbnN0IFFTaXplJiB0YXJn
ZXRMYXlvdXRTaXplKTsKICAgICB2b2lkIGZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBR
UG9pbnQmKTsKICAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcmVuZGVyVG9D
dXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudChRUGFpbnRl
ciosIGNvbnN0IFFSZWN0JiBhcmVhKTsKQEAgLTU5LDcgKzU5LDYgQEAgcHJpdmF0ZToKICNlbmRp
ZgogCiAgICAgUXRUb3VjaFZpZXdJbnRlcmZhY2UqIHRvdWNoVmlld0ludGVyZmFjZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFF0VG91Y2hWaWV3SW50ZXJmYWNlKj4obV92aWV3SW50ZXJm
YWNlKTsgfQotICAgIFRpbGVkRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eSo+KG1fd2Vi
UGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKTsgfQogCiAgICAgdm9pZCB0b3VjaEV2ZW50KFFUb3Vj
aEV2ZW50Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKaW5kZXggZDhlYmEyMC4uNTE5OTAwOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RR
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJl
ZUhvc3RRdC5jcHAKQEAgLTM3MSw3ICszNzEsNyBAQCBib29sIExheWVyVHJlZUhvc3RRdDo6c2hv
d1JlcGFpbnRDb3VudGVyKCkgY29uc3QKIAogYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViUGFnZVF0LmNwcAppbmRleCBjODBjZWEw
Li5kMjZjMTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvV2ViUGFnZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvV2ViUGFnZVF0LmNwcApAQCAtODQsNiArODQsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAg
ICAgCiB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CisgICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gbV9wYWdlLT5zZXR0aW5ncygpOworCisgICAgLy8gSWYgYWNjZWxlcmF0ZWQg
Y29tcG9zaXRpbmcgaXMgZW5hYmxlZCwgd2Ugd2FudCB0byBiZSBpbiBmb3JjZS1jb21wb3NpdGlu
ZyBtb2RlLCBzbyB0aGF0IHdlIGRvbid0IHN3aXRjaCBiZXR3ZWVuIGNvbXBvc2l0ZWQvbm9uLWNv
bXBvc2l0ZWQgc3RhdGUuCisgICAgc2V0dGluZ3MtPnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRy
dWUpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtUHJlZmVyZW5jZXNEaWRDaGFuZ2UoY29u
c3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAppbmRleCA4NTk4YmFjLi4yMDNhYTc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKQEAg
LTQyLDYgKzQyLDEwIEBACiAjaW5jbHVkZSA8TUNvbXBvbmVudERhdGE+CiAjZW5kaWYKIAorI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVy
LmgiCisjZW5kaWYKKwogI2lmbmRlZiBOREVCVUcKICNpZiAhT1MoV0lORE9XUykKICNpbmNsdWRl
IDx1bmlzdGQuaD4KQEAgLTE4Niw2ICsxOTAsMTAgQEAgUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJv
Y2Vzc01haW5RdChpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJldHVybiAxOwogICAg
IH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBXZWJHcmFwaGljc0xh
eWVyOjppbml0RmFjdG9yeSgpOworI2VuZGlmCisKICAgICBXZWJLaXQ6OldlYlByb2Nlc3M6OnNo
YXJlZCgpLmluaXRpYWxpemUoaWRlbnRpZmllciwgUnVuTG9vcDo6bWFpbigpKTsKIAogICAgIFJ1
bkxvb3A6OnJ1bigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111979</attachid>
            <date>2011-10-21 10:19:44 -0700</date>
            <delta_ts>2011-10-27 07:21:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>19491</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5Mzk0ODZlLi5hNWE3MjcwMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NTkgQEAKKzIwMTEtMTAtMjEgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lh
LmNvbT4KKworICAgICAgICBbUXRdW1dLMl0gU3luY2hyb25pemUgdGlsaW5nIHdpdGggYWNjZWxl
cmF0ZWQgY29tcG9zaXRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY5MTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTWFrZSBRVG91Y2hXZWJWaWV3IGFsd2F5cyByZW5kZXIgd2l0aCBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZy4KKyAgICAgICAgQXQgZmlyc3QsIHRoZSB3ZWIgY29udGVudCB3b3VsZCBv
bmx5IHJlbmRlciBhZnRlciB0aGUgcmVzdCBvZiB0aGUgc2NlbmUgaGFzIHJlbmRlcmVkLiBJbiBh
CisgICAgICAgIGZ1dHVyZSBwYXRjaCB3ZSdsbCBlbmFibGUgcmVuZGVyaW5nIHRoZSB3ZWIgY29u
dGVudCB2aWEgYW4gRkJPLCB3aGljaCB3b3VsZCBjb3ZlciBhbGwgb3RoZXIKKyAgICAgICAgY2Fz
ZXMgYXMgd2VsbC4KKworICAgICAgICBSaWdodCBub3cgdGhpcyBvbmx5IHdvcmtzIGZvciBRVG91
Y2hXZWJWaWV3LCBhbmQgdGh1cyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyBkaXNhYmxlZAor
ICAgICAgICBmb3IgZGVza3RvcCB3ZWItdmlld3MuIFRoaXMgcmVxdWlyZWQgYWRkaW5nIHNvbWUg
c2V0dGluZ3MgZW5hYmxlcnMgaW4gUQorICAgICAgICBXZWJQcmVmZXJlbmNlc1ByaXZhdGUuIFRo
b3NlIGFyZSBub3QgZXhwb3NlZCB0byB0aGUgcHVibGljIEFQSSwgYXMgdGhleSBhcmUgYW4gaW1w
bGVtZW50YXRpb24KKyAgICAgICAgZGV0YWlsLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9x
dC9xdG91Y2h3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6OlFUb3VjaFdlYlBh
Z2UpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZTo6aW5pdFNjZW5lR3JhcGhDb25uZWN0aW9ucyk6
CisgICAgICAgIChRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6UVRvdWNoV2ViUGFnZVByaXZhdGUpOgor
ICAgICAgICAoUVRvdWNoV2ViUGFnZVByaXZhdGU6OnNldFBhZ2UpOgorICAgICAgICAoY29tcHV0
ZUVmZmVjdGl2ZU9wYWNpdHkpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZVByaXZhdGU6OnBhaW50
VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpfcV9v
bkFmdGVyU2NlbmVSZW5kZXIpOgorICAgICAgICAoUVRvdWNoV2ViUGFnZVByaXZhdGU6Ol9xX29u
U2NlbmVHcmFwaEluaXRpYWxpemVkKToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6Oml0ZW1DaGFu
Z2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoUVdlYlByZWZlcmVuY2Vz
UHJpdmF0ZTo6dGVzdEF0dHJpYnV0ZSk6CisgICAgICAgIChRV2ViUHJlZmVyZW5jZXNQcml2YXRl
OjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6Z2V0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlc19wLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvUXREZXNrdG9wV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFF0RGVza3RvcFdl
YlBhZ2VQcm94eTo6UXREZXNrdG9wV2ViUGFnZVByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
cXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdFRvdWNoVmll
d0ludGVyZmFjZTo6c2V0Vmlld05lZWRzRGlzcGxheSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L1F0VG91Y2hXZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoUXRUb3VjaFdlYlBhZ2VQcm94eTo6
UXRUb3VjaFdlYlBhZ2VQcm94eSk6CisgICAgICAgIChRdFRvdWNoV2ViUGFnZVByb3h5OjpjcmVh
dGVEcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFF0VG91Y2hXZWJQYWdlUHJveHk6OnJlbmRl
clRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChRdFRvdWNoV2ViUGFnZVByb3h5OjpzZXRW
aXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZSk6CisgICAgICAgIChRdFRvdWNoV2ViUGFnZVByb3h5
OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKToKKyAgICAgICAgKFF0VG91
Y2hXZWJQYWdlUHJveHk6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L1F0VG91Y2hXZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQv
TGF5ZXJUcmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3Vw
cG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvcXQvV2ViUGFnZVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1J
bml0aWFsaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpblF0KToKKwogMjAxMS0xMC0yMCAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
Lzk0MTI4NDk+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1
MzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vi
cGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2Uu
Y3BwCmluZGV4IDhhYTY5M2EuLjdlOGJiMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcApAQCAtMjIsMjUgKzIyLDQxIEBACiAjaW5j
bHVkZSAicXRvdWNod2VicGFnZS5oIgogCiAjaW5jbHVkZSAiUXRUb3VjaFdlYlBhZ2VQcm94eS5o
IgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAicXRvdWNod2Vi
cGFnZV9wLmgiCiAjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFHcmFwaGljc1Nj
ZW5lTW91c2VFdmVudD4KICNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRU0dOb2RlPgor
I2luY2x1ZGUgPFFTR0NhbnZhcz4KKyNpbmNsdWRlIDxRU0dFbmdpbmU+CiAjaW5jbHVkZSA8UVVy
bD4KIAogUVRvdWNoV2ViUGFnZTo6UVRvdWNoV2ViUGFnZShRU0dJdGVtKiBwYXJlbnQpCiAgICAg
OiBRU0dJdGVtKHBhcmVudCkKICAgICAsIGQobmV3IFFUb3VjaFdlYlBhZ2VQcml2YXRlKHRoaXMp
KQogewotICAgIHNldEZsYWcoSXRlbUhhc0NvbnRlbnRzKTsKKyAgICBzZXRGbGFnKEl0ZW1IYXND
b250ZW50cywgZmFsc2UpOwogCiAgICAgLy8gV2UgZG8gdGhlIHRyYW5zZm9ybSBmcm9tIHRoZSB0
b3AgbGVmdCBzbyB0aGUgdmlld3BvcnQgY2FuIGFzc3VtZSB0aGUgcG9zaXRpb24gMCwgMAogICAg
IC8vIGlzIGFsd2F5cyB3aGVyZSByZW5kZXJpbmcgc3RhcnRzLgogICAgIHNldFRyYW5zZm9ybU9y
aWdpbihUb3BMZWZ0KTsKKyAgICBpbml0U2NlbmVHcmFwaENvbm5lY3Rpb25zKCk7CiAgICAgY29u
bmVjdCh0aGlzLCBTSUdOQUwodmlzaWJsZUNoYW5nZWQoKSksIFNMT1Qob25WaXNpYmxlQ2hhbmdl
ZCgpKSk7CiB9CiAKK3ZvaWQgUVRvdWNoV2ViUGFnZTo6aW5pdFNjZW5lR3JhcGhDb25uZWN0aW9u
cygpCit7CisgICAgaWYgKGQtPnBhaW50aW5nSXNJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJu
OworICAgIGQtPnBhaW50aW5nSXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgaWYgKCFjYW52YXMo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzY2VuZUdyYXBoRW5naW5lKCkpCisgICAgICAg
IGQtPl9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKCk7CisgICAgZWxzZQorICAgICAgICBjb25u
ZWN0KGNhbnZhcygpLCBTSUdOQUwoc2NlbmVHcmFwaEluaXRpYWxpemVkKCkpLCB0aGlzLCBTTE9U
KF9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKCkpKTsKK30KKwogUVRvdWNoV2ViUGFnZTo6flFU
b3VjaFdlYlBhZ2UoKQogewogICAgIGRlbGV0ZSBkOwpAQCAtNjgsMjggKzg0LDYgQEAgaW50IFFU
b3VjaFdlYlBhZ2U6OmxvYWRQcm9ncmVzcygpIGNvbnN0CiAKIC8qISBccmVpbXAKICovCi1RU0dO
b2RlKiBRVG91Y2hXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSwgVXBk
YXRlUGFpbnROb2RlRGF0YSopCi17Ci0gICAgaWYgKCFvbGROb2RlKQotICAgICAgICBvbGROb2Rl
ID0gbmV3IFFTR05vZGU7Ci0KLSAgICAvLyBBIHN3YXAgaXMgb24gdGhlIHF1ZXVlLCBhbmQgUXRT
R1VwZGF0ZVF1ZXVlOjphcHBseVVwZGF0ZXMgd2lsbCBlbXB0eSB0aGUgcXVldWUsIHNvIHdlIGtu
b3cgdGhhdAotICAgIC8vIHRoZSBvbGQgZnJhbWUncyBidWZmZXJzIHdvbid0IGJlIHVzZWQgYW55
bW9yZSAoZm9yIGJ1ZmZlcnMgdXNlZCBhbGwgdGhlIHdheSBmcm9tIHRoZSB3ZWIgcHJvY2Vzcwot
ICAgIC8vIHRvIHRoZSBncmFwaGljIGNhcmQpLiBOb3RpZnkgdGhlIHdlYiBwcm9jZXNzIHRoYXQg
aXQgY2FuIHJlbmRlciB0aGUgbmV4dCBmcmFtZS4KLSAgICBpZiAoZC0+c2dVcGRhdGVRdWV1ZS5p
c1N3YXBQZW5kaW5nKCkpCi0gICAgICAgIC8vIFRoZSBVSSB0aHJlYWQgaXMgY3VycmVudGx5IGxv
Y2tlZCBhbmQgY2FsbGluZyB0aGlzIGZyb20gdGhlIHJlbmRlcmluZyB0aHJlYWQgZGlkbid0IGNy
YXNoCi0gICAgICAgIC8vIHlldCwgc28gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBPSy4gRWxz
ZSB3ZSBoYXZlIHRvIHdhaXQgdW50aWwgdGhlIFNHIHVwZGF0ZSBpcyBvdmVyCi0gICAgICAgIC8v
IGFuZCB0aGUgVUkgdGhyZWFkIHJldHVybnMgdG8gdGhlIGV2ZW50IGxvb3AgcGlja2luZyBvdXIg
ZXZlbnQgYmVmb3JlIGl0IGNhbiBiZSBzZW50IHRvCi0gICAgICAgIC8vIHRoZSB3ZWIgcHJvY2Vz
cy4gVGhpcyB3b3VsZCBpbmNyZWFzZSBvdXIgY2hhbmNlcyBvZiBtaXNzaW5nIGEgZnJhbWUuCi0g
ICAgICAgIGQtPnBhZ2UtPnJlbmRlck5leHRGcmFtZSgpOwotICAgIGQtPnNnVXBkYXRlUXVldWUu
YXBwbHlVcGRhdGVzKG9sZE5vZGUpOwotCi0gICAgLy8gUVNHSXRlbSB0YWtlcyBvd25lcnNoaXAg
b2YgdGhpcyByZXR1cm4gdmFsdWUgYW5kIGl0J3MgY2hpbGRyZW4gYmV0d2VlbiBhbmQgYWZ0ZXIg
dXBkYXRlUGFpbnROb2RlIGNhbGxzLgotICAgIHJldHVybiBvbGROb2RlOwotfQotCi0vKiEgXHJl
aW1wCi0qLwogYm9vbCBRVG91Y2hXZWJQYWdlOjpldmVudChRRXZlbnQqIGV2KQogewogICAgIGlm
IChkLT5wYWdlLT5oYW5kbGVFdmVudChldikpCkBAIC0xNTEsNiArMTQ1LDcgQEAgUVRvdWNoV2Vi
UGFnZVByaXZhdGU6OlFUb3VjaFdlYlBhZ2VQcml2YXRlKFFUb3VjaFdlYlBhZ2UqIHZpZXcpCiAg
ICAgLCBwYWdlKDApCiAgICAgLCBuYXZpZ2F0aW9uQ29udHJvbGxlcigwKQogICAgICwgc2dVcGRh
dGVRdWV1ZSh2aWV3KQorICAgICwgcGFpbnRpbmdJc0luaXRpYWxpemVkKGZhbHNlKQogewogfQog
CkBAIC0xNTksNiArMTU0LDU5IEBAIHZvaWQgUVRvdWNoV2ViUGFnZVByaXZhdGU6OnNldFBhZ2Uo
UXRUb3VjaFdlYlBhZ2VQcm94eSogcGFnZSkKICAgICBBU1NFUlQoIXRoaXMtPnBhZ2UpOwogICAg
IEFTU0VSVChwYWdlKTsKICAgICB0aGlzLT5wYWdlID0gcGFnZTsKKworfQorCitmbG9hdCBjb21w
dXRlRWZmZWN0aXZlT3BhY2l0eShjb25zdCBRU0dJdGVtKiBpdGVtKQoreworICAgIGlmICghaXRl
bSkKKyAgICAgICAgcmV0dXJuIDEuMDsKKworICAgIGZsb2F0IG9wYWNpdHkgPSBpdGVtLT5vcGFj
aXR5KCk7CisgICAgaWYgKG9wYWNpdHkgPCAwLjAxKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBvcGFjaXR5ICogY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHkoaXRlbS0+cGFyZW50SXRl
bSgpKTsKK30KKwordm9pZCBRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6cGFpbnRUb0N1cnJlbnRHTENv
bnRleHQoKQoreworICAgIGlmICghcS0+aXNWaXNpYmxlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFFUcmFuc2Zvcm0gdHJhbnNmb3JtID0gcS0+aXRlbVRyYW5zZm9ybSgwLCAwKTsKKyAgICBm
bG9hdCBvcGFjaXR5ID0gY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHkocSk7CisgICAgUVJlY3RGIGNs
aXBSZWN0ID0gcS0+cGFyZW50SXRlbSgpLT5tYXBSZWN0VG9TY2VuZShxLT5wYXJlbnRJdGVtKCkt
PmJvdW5kaW5nUmVjdCgpKTsKKworICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAg
Y29uc3QgaW50IGxlZnQgPSBjbGlwUmVjdC5sZWZ0KCk7CisgICAgY29uc3QgaW50IHdpZHRoID0g
Y2xpcFJlY3Qud2lkdGgoKTsKKyAgICBjb25zdCBpbnQgYm90dG9tID0gcS0+Y2FudmFzKCktPmhl
aWdodCgpIC0gKGNsaXBSZWN0LmJvdHRvbSgpICsgMSk7CisgICAgY29uc3QgaW50IGhlaWdodCA9
IGNsaXBSZWN0LmhlaWdodCgpOworCisgICAgZ2xTY2lzc29yKGxlZnQsIGJvdHRvbSwgd2lkdGgs
IGhlaWdodCk7CisKKyAgICBwYWdlLT5yZW5kZXJUb0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3Jt
LCBvcGFjaXR5KTsKKyAgICBnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKK30KKwordm9pZCBR
VG91Y2hXZWJQYWdlUHJpdmF0ZTo6X3Ffb25BZnRlclNjZW5lUmVuZGVyKCkKK3sKKyAgICAvLyBU
T0RPOiBBbGxvdyBwYWludGluZyBiZWZvcmUgdGhlIHNjZW5lIG9yIGluIHRoZSBtaWRkbGUgb2Yg
dGhlIHNjZW5lIHdpdGggYW4gRkJPLgorICAgIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KCk7Cit9
CisKK3ZvaWQgUVRvdWNoV2ViUGFnZVByaXZhdGU6Ol9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVk
KCkKK3sKKyAgICBRU0dFbmdpbmUqIGVuZ2luZSA9IHEtPnNjZW5lR3JhcGhFbmdpbmUoKTsKKyAg
ICBRT2JqZWN0Ojpjb25uZWN0KGVuZ2luZSwgU0lHTkFMKGFmdGVyUmVuZGVyaW5nKCkpLCBxLCBT
TE9UKF9xX29uQWZ0ZXJTY2VuZVJlbmRlcigpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworfQor
Cit2b2lkIFFUb3VjaFdlYlBhZ2U6Oml0ZW1DaGFuZ2UoSXRlbUNoYW5nZSBjaGFuZ2UsIGNvbnN0
IEl0ZW1DaGFuZ2VEYXRhICZkYXRhKQoreworICAgIGlmIChjaGFuZ2UgPT0gSXRlbVNjZW5lQ2hh
bmdlKQorICAgICAgICBpbml0U2NlbmVHcmFwaENvbm5lY3Rpb25zKCk7CisgICAgUVNHSXRlbTo6
aXRlbUNoYW5nZShjaGFuZ2UsIGRhdGEpOwogfQogCiB2b2lkIFFUb3VjaFdlYlBhZ2U6Om9uVmlz
aWJsZUNoYW5nZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xdG91Y2h3ZWJwYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3Vj
aHdlYnBhZ2UuaAppbmRleCBiOGQ2ZWE1Li41MDhjNjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuaApAQCAtNjQsNyArNjQsNiBAQCBwdWJs
aWM6CiAgICAgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyKiBuYXZpZ2F0aW9uQ29udHJvbGxlcigp
IGNvbnN0OwogICAgIFFXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMoKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgUVNHTm9kZSogdXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVwZGF0
ZVBhaW50Tm9kZURhdGEqKTsKICAgICB2aXJ0dWFsIGJvb2wgZXZlbnQoUUV2ZW50Kik7CiAKIFFf
U0lHTkFMUzoKQEAgLTg3LDggKzg2LDE0IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
dG91Y2hFdmVudChRVG91Y2hFdmVudCopOwogCiAgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5Q2hh
bmdlZChjb25zdCBRUmVjdEYmLCBjb25zdCBRUmVjdEYmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaXRl
bUNoYW5nZShJdGVtQ2hhbmdlLCBjb25zdCBJdGVtQ2hhbmdlRGF0YSYpOwogCiBwcml2YXRlOgor
ICAgIFFfUFJJVkFURV9TTE9UKGQsIHZvaWQgX3Ffb25BZnRlclNjZW5lUmVuZGVyKCkpOworICAg
IFFfUFJJVkFURV9TTE9UKGQsIHZvaWQgX3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKSk7CisK
KyAgICB2b2lkIGluaXRTY2VuZUdyYXBoQ29ubmVjdGlvbnMoKTsKKwogICAgIFFUb3VjaFdlYlBh
Z2VQcml2YXRlKiBkOwogICAgIGZyaWVuZCBjbGFzcyBRVG91Y2hXZWJWaWV3UHJpdmF0ZTsKICAg
ICBmcmllbmQgY2xhc3MgV2ViS2l0OjpRdFRvdWNoVmlld0ludGVyZmFjZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2VfcC5oCmluZGV4IGUyMmQ3
MmYuLjcxYjk0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXRvdWNod2VicGFnZV9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
dG91Y2h3ZWJwYWdlX3AuaApAQCAtMzgsMTAgKzM4LDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0UGFnZShRdFRvdWNoV2ViUGFnZVByb3h5Kik7CiAKKyAgICB2b2lkIF9xX29uQWZ0ZXJTY2Vu
ZVJlbmRlcigpOworICAgIHZvaWQgX3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKTsKKyAgICB2
b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KCk7CisKICAgICBRVG91Y2hXZWJQYWdlKiBjb25z
dCBxOwogICAgIFF0VG91Y2hXZWJQYWdlUHJveHkqIHBhZ2U7CiAgICAgUVdlYk5hdmlnYXRpb25D
b250cm9sbGVyKiBuYXZpZ2F0aW9uQ29udHJvbGxlcjsKICAgICBXZWJLaXQ6OlF0U0dVcGRhdGVR
dWV1ZSBzZ1VwZGF0ZVF1ZXVlOworICAgIGJvb2wgcGFpbnRpbmdJc0luaXRpYWxpemVkOwogfTsK
IAogI2VuZGlmIC8qIHF0b3VjaHdlYnBhZ2VfcF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAKaW5kZXggOWVhZTZlOC4uYzBi
YTIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJl
ZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnBy
ZWZlcmVuY2VzLmNwcApAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiV0tQYWdlR3JvdXAu
aCIKICNpbmNsdWRlICJXS1ByZWZlcmVuY2VzLmgiCisjaW5jbHVkZSAiV0tQcmVmZXJlbmNlc1By
aXZhdGUuaCIKICNpbmNsdWRlICJXS1JldGFpblB0ci5oIgogI2luY2x1ZGUgIldLU3RyaW5nUXQu
aCIKICNpbmNsdWRlICJxd2VicHJlZmVyZW5jZXNfcC5oIgpAQCAtNTIsNiArNTMsOCBAQCBib29s
IFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OnRlc3RBdHRyaWJ1dGUoUVdlYlByZWZlcmVuY2VzUHJp
dmF0ZTo6V2ViQXR0cmlidXRlCiAgICAgICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZChyZWYpOwogICAgIGNhc2UgRG5zUHJlZmV0Y2hFbmFibGVkOgogICAg
ICAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldEROU1ByZWZldGNoaW5nRW5hYmxlZChyZWYpOwor
ICAgIGNhc2UgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQ6CisgICAgICAgIHJldHVybiBX
S1ByZWZlcmVuY2VzR2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQocmVmKTsKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtODUsNiArODgsOSBAQCB2b2lkIFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OnNldEF0
dHJpYnV0ZShRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjpXZWJBdHRyaWJ1dGUgYQogICAgIGNhc2Ug
RG5zUHJlZmV0Y2hFbmFibGVkOgogICAgICAgICBXS1ByZWZlcmVuY2VzU2V0RE5TUHJlZmV0Y2hp
bmdFbmFibGVkKHJlZiwgZW5hYmxlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRW5hYmxlZDoKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKHJlZiwgZW5hYmxlKTsKKyAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMzc2LDMg
KzM4Miw4IEBAIHZvaWQgUVdlYlByZWZlcmVuY2VzOjpzZXREZWZhdWx0Rml4ZWRGb250U2l6ZSh1
bnNpZ25lZCBzaXplKQogICAgIGQtPnNldEZvbnRTaXplKFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6
OkRlZmF1bHRGaXhlZEZvbnRTaXplLCBzaXplKTsKICAgICBlbWl0IGRlZmF1bHRGaXhlZEZvbnRT
aXplQ2hhbmdlZCgpOwogfQorCitRV2ViUHJlZmVyZW5jZXNQcml2YXRlKiBRV2ViUHJlZmVyZW5j
ZXNQcml2YXRlOjpnZXQoUVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcykKK3sKKyAgICByZXR1
cm4gcHJlZmVyZW5jZXMtPmQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlc19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJwcmVmZXJlbmNlc19wLmgKaW5kZXggNWQ0NjNlMS4uZDU5ZWZkYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXNfcC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzX3Au
aApAQCAtMzEsNiArMzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIFhTU0F1ZGl0aW5nRW5hYmxlZCwK
ICAgICAgICAgRnJhbWVGbGF0dGVuaW5nRW5hYmxlZCwKICAgICAgICAgUHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCwKKyAgICAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsCiAgICAgICAg
IERuc1ByZWZldGNoRW5hYmxlZAogICAgIH07CiAKQEAgLTYxLDQgKzYyLDYgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIGZvbnRTaXplKEZvbnRTaXplVHlwZSB0eXBlKSBjb25zdDsKIAogICAgIFdL
UHJlZmVyZW5jZXNSZWYgcmVmOworCisgICAgc3RhdGljIFFXZWJQcmVmZXJlbmNlc1ByaXZhdGUq
IGdldChRV2ViUHJlZmVyZW5jZXMqKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4IDBlYTRmZTYuLjU0MGJmN2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHku
Y3BwCkBAIC02OCw3ICs2OCw2IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRWaXNp
YmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6CiAKIHZvaWQgVGls
ZWREcmF3aW5nQXJlYVByb3h5OjpyZW5kZXJOZXh0RnJhbWUoKQogewotICAgIHBhZ2UoKS0+cHJv
Y2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6UmVuZGVyTmV4dEZyYW1lKCksIHBh
Z2UoKS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2l6ZURp
ZENoYW5nZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXREZXNr
dG9wV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdERlc2t0
b3BXZWJQYWdlUHJveHkuY3BwCmluZGV4IDY5MDVkZDMuLjQzZWQwNGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdERlc2t0b3BXZWJQYWdlUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdERlc2t0b3BXZWJQYWdlUHJveHkuY3BwCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlRdERlc2t0b3AuaCIK
ICNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXcuaCIKICNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXdf
cC5oIgorI2luY2x1ZGUgInF3ZWJwcmVmZXJlbmNlc19wLmgiCiAjaW5jbHVkZSA8UUFwcGxpY2F0
aW9uPgogI2luY2x1ZGUgPFFFdmVudD4KICNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZURyYWdEcm9w
RXZlbnQ+CkBAIC01NSw2ICs1Niw3IEBAIFF0RGVza3RvcFdlYlBhZ2VQcm94eTo6UXREZXNrdG9w
V2ViUGFnZVByb3h5KFFEZXNrdG9wV2ViVmlld1ByaXZhdGUqIGRlc2t0b3BXZWJWCiAgICAgOiBR
dFdlYlBhZ2VQcm94eShkZXNrdG9wV2ViVmlldywgZGVza3RvcFdlYlZpZXcsIGNvbnRleHQsIHBh
Z2VHcm91cCkKIHsKICAgICBpbml0KCk7CisgICAgUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6Z2V0
KHByZWZlcmVuY2VzKCkpLT5zZXRBdHRyaWJ1dGUoUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIGZhbHNlKTsKIH0KIAogUGFzc093blB0cjxEcmF3
aW5nQXJlYVByb3h5PiBRdERlc2t0b3BXZWJQYWdlUHJveHk6OmNyZWF0ZURyYXdpbmdBcmVhUHJv
eHkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hWaWV3
SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRvdWNoVmlld0lu
dGVyZmFjZS5jcHAKaW5kZXggNDlkMjM4OC4uM2FmZDhkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hWaWV3SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuY3BwCkBAIC01MSw2ICs1
MSw3IEBAIFF0U0dVcGRhdGVRdWV1ZSogUXRUb3VjaFZpZXdJbnRlcmZhY2U6OnNjZW5lR3JhcGhV
cGRhdGVRdWV1ZSgpIGNvbnN0CiAKIHZvaWQgUXRUb3VjaFZpZXdJbnRlcmZhY2U6OnNldFZpZXdO
ZWVkc0Rpc3BsYXkoY29uc3QgUVJlY3QmKQogeworICAgIG1fcGFnZVZpZXctPnVwZGF0ZSgpOwog
fQogCiBRU2l6ZSBRdFRvdWNoVmlld0ludGVyZmFjZTo6ZHJhd2luZ0FyZWFTaXplKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRvdWNoV2ViUGFnZVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRvdWNoV2ViUGFnZVByb3h5LmNwcApp
bmRleCAxNTE0NTM4Li45OTkyM2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRUb3VjaFdlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0VG91Y2hXZWJQYWdlUHJveHkuY3BwCkBAIC0yMSw5ICsyMSwxMSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlF0VG91Y2hXZWJQYWdlUHJveHkuaCIKIAorI2luY2x1
ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCiAjaW5jbHVkZSA8SW50UmVjdC5oPgogI2luY2x1
ZGUgPE5hdGl2ZVdlYlRvdWNoRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJFdmVudEZhY3RvcnlRdC5o
PgorI2luY2x1ZGUgPHF3ZWJwcmVmZXJlbmNlc19wLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCkBAIC0zMiwxMiArMzQsMTMgQEAgUXRUb3VjaFdlYlBhZ2VQcm94eTo6UXRUb3VjaFdl
YlBhZ2VQcm94eShRdFRvdWNoVmlld0ludGVyZmFjZSogdmlld0ludGVyZmFjZSwgUXQKICAgICAs
IG1fcGFuR2VzdHVyZVJlY29nbml6ZXIodmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSkKICAgICAs
IG1fcGluY2hHZXN0dXJlUmVjb2duaXplcih2aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKQogewor
ICAgIFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OmdldChwcmVmZXJlbmNlcygpKS0+c2V0QXR0cmli
dXRlKFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVk
LCB0cnVlKTsKICAgICBpbml0KCk7CiB9CiAKIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4g
UXRUb3VjaFdlYlBhZ2VQcm94eTo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpCiB7Ci0gICAgcmV0
dXJuIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlKHRvdWNoVmlld0ludGVyZmFjZSgpLCBt
X3dlYlBhZ2VQcm94eS5nZXQoKSk7CisgICAgcmV0dXJuIERyYXdpbmdBcmVhUHJveHlJbXBsOjpj
cmVhdGUobV93ZWJQYWdlUHJveHkuZ2V0KCkpOwogfQogCiB2b2lkIFF0VG91Y2hXZWJQYWdlUHJv
eHk6OnByb2Nlc3NEaWRDcmFzaCgpCkBAIC01MSw2ICs1NCwxMyBAQCB2b2lkIFF0VG91Y2hXZWJQ
YWdlUHJveHk6OnBhaW50Q29udGVudChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIGFy
ZWEpCiB7CiB9CiAKK3ZvaWQgUXRUb3VjaFdlYlBhZ2VQcm94eTo6cmVuZGVyVG9DdXJyZW50R0xD
b250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNp
dHkpCit7CisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBtX3dlYlBhZ2VQcm94
eS0+ZHJhd2luZ0FyZWEoKTsKKyAgICBpZiAoZHJhd2luZ0FyZWEpCisgICAgICAgIGRyYXdpbmdB
cmVhLT5wYWludFRvQ3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHkpOworfQorCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIHZvaWQgUXRUb3VjaFdlYlBhZ2VQcm94eTo6ZG9uZVdp
dGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW50LCBib29sIHdhc0V2
ZW50SGFuZGxlZCkKIHsKQEAgLTc5LDcgKzg5LDcgQEAgYm9vbCBRdFRvdWNoV2ViUGFnZVByb3h5
OjpoYW5kbGVFdmVudChRRXZlbnQqIGV2KQogdm9pZCBRdFRvdWNoV2ViUGFnZVByb3h5OjpzZXRW
aXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShjb25zdCBRUmVjdEYmIHZpc2libGVDb250ZW50UmVj
dCwgZmxvYXQgc2NhbGUpCiB7CiAgICAgUVJlY3QgYWxpZ25lZFZpc2libGVDb250ZW50UmVjdCA9
IHZpc2libGVDb250ZW50UmVjdC50b0FsaWduZWRSZWN0KCk7Ci0gICAgZHJhd2luZ0FyZWEoKS0+
c2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoYWxpZ25lZFZpc2libGVDb250ZW50UmVjdCwg
c2NhbGUpOworICAgIG1fd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpLT5zZXRWaXNpYmxlQ29u
dGVudHNSZWN0QW5kU2NhbGUoYWxpZ25lZFZpc2libGVDb250ZW50UmVjdCwgc2NhbGUpOwogCiAg
ICAgLy8gRklYTUU6IE9uY2Ugd2Ugc3VwcG9ydCBzdXNwZW5kIGFuZCByZXN1bWUsIHRoaXMgc2hv
dWxkIGJlIGRlbGF5ZWQgdW50aWwgdGhlIHBhZ2UgaXMgYWN0aXZlIGlmIHRoZSBwYWdlIGlzIHN1
c3BlbmRlZC4KICAgICBtX3dlYlBhZ2VQcm94eS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3Qo
YWxpZ25lZFZpc2libGVDb250ZW50UmVjdCk7CkBAIC04Nyw3ICs5Nyw3IEBAIHZvaWQgUXRUb3Vj
aFdlYlBhZ2VQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoY29uc3QgUVJlY3RG
JiB2aXNpYmxlQ29uCiAKIHZvaWQgUXRUb3VjaFdlYlBhZ2VQcm94eTo6c2V0VmlzaWJsZUNvbnRl
bnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBRUG9pbnRGJiB0cmFqZWN0b3J5VmVjdG9yKQog
ewotICAgIGRyYXdpbmdBcmVhKCktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0
b3IodHJhamVjdG9yeVZlY3Rvcik7CisgICAgbV93ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkt
PnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7
CiB9CiAKIHZvaWQgUXRUb3VjaFdlYlBhZ2VQcm94eTo6c2V0UmVzaXplc1RvQ29udGVudHNVc2lu
Z0xheW91dFNpemUoY29uc3QgUVNpemUmIHRhcmdldExheW91dFNpemUpCkBAIC0xMTMsNSArMTIz
LDQgQEAgdm9pZCBRdFRvdWNoV2ViUGFnZVByb3h5OjpmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQo
Y29uc3QgUVBvaW50JiBwb2ludCkKIAogdm9pZCBRdFRvdWNoV2ViUGFnZVByb3h5OjpyZW5kZXJO
ZXh0RnJhbWUoKQogewotICAgIGRyYXdpbmdBcmVhKCktPnJlbmRlck5leHRGcmFtZSgpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hXZWJQYWdlUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRvdWNoV2ViUGFnZVByb3h5LmgK
aW5kZXggMWQ0ZTllYS4uZmU0OTY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0VG91Y2hXZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRUb3VjaFdlYlBhZ2VQcm94eS5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAi
UXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmgiCiAjaW5jbHVkZSAiUXRUb3VjaFZpZXdJbnRlcmZh
Y2UuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIlRpbGVkRHJhd2lu
Z0FyZWFQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewpAQCAtNDcsNiArNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZXNpemVzVG9D
b250ZW50c1VzaW5nTGF5b3V0U2l6ZShjb25zdCBRU2l6ZSYgdGFyZ2V0TGF5b3V0U2l6ZSk7CiAg
ICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgUVBvaW50Jik7CiAgICAgdm9p
ZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIHJlbmRlclRvQ3VycmVudEdMQ29udGV4dChj
b25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0KTsKIAogcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnQoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYg
YXJlYSk7CkBAIC01OSw3ICs1OSw2IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFF0VG91Y2hW
aWV3SW50ZXJmYWNlKiB0b3VjaFZpZXdJbnRlcmZhY2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxRdFRvdWNoVmlld0ludGVyZmFjZSo+KG1fdmlld0ludGVyZmFjZSk7IH0KLSAgICBUaWxl
ZERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8V2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHkqPihtX3dlYlBhZ2VQcm94eS0+ZHJhd2lu
Z0FyZWEoKSk7IH0KIAogICAgIHZvaWQgdG91Y2hFdmVudChRVG91Y2hFdmVudCopOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9z
dFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVI
b3N0UXQuY3BwCmluZGV4IGQ4ZWJhMjAuLjUxOTkwMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0z
NzEsNyArMzcxLDcgQEAgYm9vbCBMYXllclRyZWVIb3N0UXQ6OnNob3dSZXBhaW50Q291bnRlcigp
IGNvbnN0CiAKIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKICNpZiBV
U0UoVElMRURfQkFDS0lOR19TVE9SRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAKaW5kZXggYzgwY2VhMC4uZDI2YzEyNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAK
QEAgLTg0LDYgKzg0LDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIAogdm9pZCBXZWJQYWdl
OjpwbGF0Zm9ybUluaXRpYWxpemUoKQogeworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fcGFn
ZS0+c2V0dGluZ3MoKTsKKworICAgIC8vIElmIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGlzIGVu
YWJsZWQsIHdlIHdhbnQgdG8gYmUgaW4gZm9yY2UtY29tcG9zaXRpbmcgbW9kZSwgc28gdGhhdCB3
ZSBkb24ndCBzd2l0Y2ggYmV0d2VlbiBjb21wb3NpdGVkL25vbi1jb21wb3NpdGVkIHN0YXRlLgor
ICAgIHNldHRpbmdzLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKIH0KIAogdm9pZCBX
ZWJQYWdlOjpwbGF0Zm9ybVByZWZlcmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYlByZWZlcmVuY2Vz
U3RvcmUmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9j
ZXNzTWFpblF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01h
aW5RdC5jcHAKaW5kZXggODU5OGJhYy4uMjAzYWE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCkBAIC00Miw2ICs0MiwxMCBAQAog
I2luY2x1ZGUgPE1Db21wb25lbnREYXRhPgogI2VuZGlmCiAKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgorI2VuZGlmCisKICNp
Zm5kZWYgTkRFQlVHCiAjaWYgIU9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC0x
ODYsNiArMTkwLDEwIEBAIFFfREVDTF9FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgV2ViR3JhcGhpY3NMYXllcjo6aW5pdEZhY3Rvcnko
KTsKKyNlbmRpZgorCiAgICAgV2ViS2l0OjpXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXpl
KGlkZW50aWZpZXIsIFJ1bkxvb3A6Om1haW4oKSk7CiAKICAgICBSdW5Mb29wOjpydW4oKTsK
</data>
<flag name="review"
          id="109947"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>